为另一个分区/目录运行 apt-get?

Posted

技术标签:

【中文标题】为另一个分区/目录运行 apt-get?【英文标题】:Running apt-get for another partition/directory? 【发布时间】:2011-04-26 15:46:26 【问题描述】:

我已从实时 Ubuntu CD 启动我的系统,我需要修复一些软件包问题。我已经安装了我的硬盘,现在我想像正常启动一样运行 apt-get。即更改 apt-get 的工作目录,以便它可以在我的硬盘驱动器上运行。我以前做过,但我不记得语法了。我认为这只是一些标志,像这样:

apt-get --root-directory=/mnt/partition1 install....

但我只得到“命令行选项...不理解”。有什么想法吗?

【问题讨论】:

问题与编程无关。可能属于Serverfault。 (版主会根据需要进行迁移,请勿复制粘贴到Serverfault上) 【参考方案1】:

chroot /mnt/partition1

如果您的系统使用多个磁盘分区,您可能必须挂载其中一些才能使软件包系统正常工作(10 年前,当硬盘开始变得太大而无法进行原始物理备份时,我停止设置多个分区)。

如果您在该位置还没有可用的 debian 系统,这将不起作用。 ——阿科斯塔迪诺夫

如果您在 chroot 时无法让软件包系统正常工作,那么可能它太混乱了,无法再次被信任 - 根据我的经验,让它恢复生机的努力很少有回报。如果发生这种情况,很高兴您仍然可以访问您的 HD、备份您的数据并执行全新的重新安装。

来自其他答案的一些相关cmets:

apt-get -o RootDir=/tmp/test_apt 将(几乎)所有路径设置为不同的根目录。顺便说一句,在正在运行的系统上,如果您复制 /etc/apt、/usr/lib/apt 和 mkdir -p usr/lib etc var/cache var/lib/dpkg var/lib/apt/lists/partial var/cache/ apt/archives/partial 最后触摸 var/lib/dpkg/status,然后 apt 将在该根目录中工作。如果您添加选项 -o Debug::NoLocking=1,它甚至可以作为非 root 用户工作。 nolock 选项是必需的,因为我找不到在不同根目录中设置锁定文件的方法。 ——阿科斯塔迪诺夫

工作是指使用搜索和下载包等操作。如果某些基本软件包不存在,则实际上无法安装。如果目标实际上是出于某种原因将软件包安装在新的根目录中,则 debootstrap 可以提供帮助。 ——阿科斯塔迪诺夫

【讨论】:

如果您在该位置还没有可用的 debian 系统,这将不起作用。 如果您在 chroot 时无法使软件包系统正常工作,那么再次被信任就是一团糟——根据我的经验,使它恢复生机的努力很少得到回报。我的建议是:很高兴您仍然可以访问您的 HD、备份您的数据并执行全新的重新安装。【参考方案2】:

运行chroot /mnt/partition1 将启动一个新的shell,其中文件系统的根是/mnt/partition1。假设您硬盘上的 apt-get 仍然可以正常工作,您可以从那里继续。

dpkg --root=/mnt/partition1 -i mypackage.deb 是一个不需要chroot 的选项,但需要您自己下载包。

【讨论】:

【参考方案3】:

这也应该有效:

sudo apt-get -o Dir=/media/partitioni1 update

【讨论】:

apt-get -o RootDir=/tmp/test_apt 将(几乎)所有路径设置为不同的根目录。顺便说一句,在正在运行的系统上,如果您复制 /etc/apt、/usr/lib/apt 和 mkdir -p usr/lib etc var/cache var/lib/dpkg var/lib/apt/lists/partial var/cache/ apt/archives/partial 最后触摸 var/lib/dpkg/status,然后 apt 将在该根目录中工作。如果您添加选项 -o Debug::NoLocking=1,它甚至可以作为非 root 用户工作。 nolock 选项是必需的,因为我找不到在不同根目录中设置锁定文件的方法。 工作是指使用搜索和下载包等操作。如果某些基本软件包不存在,则实际上无法安装。如果目标实际上是出于某种原因在新根目录中安装软件包,则 debootstrap 可以提供帮助。 @akostadinov 您的 cmets 可以在这里写成一个很好的答案。

以上是关于为另一个分区/目录运行 apt-get?的主要内容,如果未能解决你的问题,请参考以下文章

由于 openSUSE 的 repo,apt-get 更新不起作用

LINUX apt-get install 提示 不能找到包的 疑问?

apt-get 存储库是如何托管/管理/架构的?

Ubuntu下彻底卸载mysql (转)

Ubuntu 安装软件时显示:无法获得锁 /var/lib/dpkg/lock -open(资源暂时不可用)

IIS 7.5 - 为另一个域上的文件共享设置虚拟目录