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

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

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

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

【问题讨论】:

  • 问题与编程无关。可能属于Serverfault。 (版主会根据需要进行迁移,请勿复制粘贴到Serverfault上)

标签: linux ubuntu command-line-arguments apt-get


【解决方案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 可以在这里写成一个很好的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2012-02-14
    • 2016-12-10
    • 2019-06-14
    • 2021-07-21
    相关资源
    最近更新 更多