1

我在 CentOS 6.6 系统上工作。我有一个可写的奇异 ubuntu 16.04 图像,我知道我实际上可以写到:

[root@qmaster02]# whoami
root
[root@qmaster02]# singularity shell --writable gtn
Singularity: Invoking an interactive shell within container...

Singularity gtn:~> ls /opt/
ZFP  bart-0.3.01  code  manifest.json  start_supervisor  supervisord.conf  v0.3.01.tar.gz
Singularity gtn:~> touch /opt/mynewfile
Singularity gtn:~> ls /opt/
ZFP  bart-0.3.01  code  manifest.json  mynewfile  start_supervisor  supervisord.conf  v0.3.01.tar.gz

我现在尝试安装一个新软件包,但出现以下错误:

Singularity gtn:~> apt-get install module-init-tools
Reading package lists... Error!
E: Could not read from /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial-updates_InRelease - getline (12: Cannot allocate memory)
E: The package lists or status file could not be parsed or opened.

检查/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial-updates_InRelease,它只是一个带有签名的哈希和文件。

问题:如何apt-get在奇异环境中使用 while 安装软件包?

4

2 回答 2

1

奇点容器可能是可写的,但没有足够的空间来写入更多信息。这可能是您在这里遇到的问题。

您可以通过运行以下命令来增大磁盘映像:

singularity image.expand container.img

或者我相信 Singularity 2.3 及以下使用:

singularity expand container.img

可选地使用 size 参数

-s|--size

image.expand 默认将图像大小增加 768MiB。

之后,安装应该按照描述进行。

于 2018-10-19T16:44:29.807 回答
0

修复 Ubuntu 和其他 Linux 发行版中的“无法解析包文件 /var/lib/apt/lists”错误

我过去曾讨论过许多Ubuntu 更新错误。如果您使用命令行更新 Ubuntu,您可能会遇到一些“错误”。

其中一些“错误”基本上是内置功能,可防止对系统进行不必要的更改。在本快速教程中,我不会详细介绍这些细节。

在这个快速提示中,我将向您展示如何解决在更新系统或安装新软件时可能遇到的以下错误:

正在读取包列表...错误!

E: 无法解析包文件 /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_bionic_InRelease

E: 无法解析或打开包列表或状态文件。

在 Debian 中可能会遇到类似的错误:

E: 无法解析包文件 /var/lib/apt/extended_states (1)

即使它说“包缓存文件已损坏”,也绝对没有必要惊慌。这真的很容易“修复”。

处理基于 Ubuntu 和 Debian 的 Linux 发行版中的“无法解析包文件”错误

这是你需要做的。仔细查看 Ubuntu 抱怨的文件的名称和路径。

正在读取包列表...错误!

E: 无法解析包文件 /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_bionic_InRelease

E: 无法解析或打开包列表或状态文件。

例如,在上面的错误中,它在抱怨 /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_bionic_InRelease

这使您认为此文件有问题。现在您需要做的就是删除此文件并重新生成缓存。

sudo rm <file_that_is_not_parsed>

所以在我的例子中,我可以使用这个命令:sudo rm /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_bionic_InRelease然后用 sudo apt update 命令重建缓存。

一步一步为初学者

如果您熟悉 Linux 命令,您可能知道如何删除带有绝对路径的文件。对于新手用户,让我指导您安全地删除文件。

首先,您应该转到存储文件的目录:

cd /var/lib/apt/lists/

现在删除没有被解析的文件:

sudo rm archive.ubuntu.com_ubuntu_dists_bionic_InRelease

现在,如果您再次运行更新,将重新生成 apt 缓存。

sudo apt update

文件太多无法解析?

如果您有一个或两个在更新系统时没有被解析的文件,这很好。但是如果系统抱怨十个或二十个这样的文件,一个一个删除它们太累了。

在这种情况下,您可以做些什么来删除整个缓存,然后再次生成它:

sudo rm -r /var/lib/apt/lists/*
sudo apt update

解释它如何解决您的问题

/var/lib/apt 是存储与 apt 包管理器相关的文件和数据的目录。/var/lib/apt/lists 是用于存储系统的sources.list 中指定的每个包资源的信息的目录。

用稍微不复杂的术语来说,这个 /var/lib/apt/lists 存储了包信息缓存。当您要安装或更新程序时,您的系统会在此目录中检查有关该软件包的信息。如果它找到包的详细信息,那么它会转到远程存储库并实际下载程序或其更新。

当您运行“sudo apt update”时,它会构建缓存。这就是为什么即使您删除 /var/lib/apt/lists 目录中的所有内容,运行更新也会构建新的缓存。

这就是它处理文件未解析问题的方式。您的系统抱怨某个特定的包或存储库信息以某种方式损坏(下载失败或手动更改 sources.list)。删除该文件(或所有内容)并重建缓存可以解决问题。

源码链接点这里

于 2021-08-29T11:32:18.977 回答