我有几个Ubuntu 14.04 64 位盒子。其中一个可以与互联网通信(例如 Machine1),而另一个由于网络限制而不能与互联网通信(例如 Machine2)。
机器 2 需要安装一些特定的软件,例如我可能需要安装谷歌浏览器(仅作为示例)在此机器上。
我尝试/localrepo/amd64
在机器 1 上创建一个目录。下载稳定的 .deb 包并将其放在此/localrepo/amd64
目录中。此目录在 /var/www/html 处有一个符号链接,因此机器至少可以通过本地网络访问此目录。
我运行dpkg-scanpackages amd64 | gzip -9c > amd64/Packages.gz
后生成了一个Packages.gz
文件。
在 Machine1 上,我编辑 sources.list 文件以添加
http://Machine2FQDN/localrepo amd64/
我注释掉了所有试图指向各种 ubuntu 存储库的其他行。
我执行了一个apt-get update
然后尝试安装该包,但遇到了依赖性问题。
现在,我的问题是,如果我想要将 .deb 文件的所有依赖项下载到 Machine1 localrepo 目录中,该怎么做。
我见过类似运行 apt-get install -f 的答案,但这在我的情况下不起作用,我无法允许机器 2 直接与 ubuntu 存储库通信并通过 apt-get 解析依赖项。我不需要将缓存中的每个包都复制到此本地存储库,当我通过单个命令下载包时,我只需要下载(而不是安装)特定的相关依赖包。
我们有解决方案吗?
如果您需要任何进一步的信息,请告诉我。
注意:我知道运行apt-cache depends google-chrome-stable
列出了依赖项,但我需要将这些依赖项下载到我自己的自定义文件夹 /localrepo/
答案1
问题就在这里
我注释掉了所有试图指向各种 ubuntu 存储库的其他行。
如果您从断开连接的机器上注释掉所有 repo 行,如果您的本地存储库无法提供该文件,它将如何获取其他必要的 .deb 文件来满足请求?
例如,如果 Google Chrome 需要a.deb
并且您在某个时间点b.deb
安装在连接的机器上。后来您下载了Google Chrome 并只将其放在本地存储库中,而本地存储库中缺少该文件。在这种情况下,断开连接的机器只能向本地存储库请求,无法获取文件,并且会生成依赖项错误消息。a.deb
b.deb
b.deb
a.deb
a.deb
永久解决方案
如果您确实需要这种设置,则应确保两台 PC 的软件包安装状态相同。并且,每当您在连接的机器上安装某些东西时,您都应备份文件.deb
并将主题放入断开连接的机器的本地存储库中。
临时解决方案
另一个解决方案是,在连接的机器上运行 Live 系统,并在其中下载或安装所需的包。这样,您就可以获得所有必需的为新 Ubuntu 安装安装软件包。这对于断开连接的机器来说已经足够了。获取文件.deb
,将它们放入本地存储库并从其他机器安装。
希望这会有所帮助。
答案2
如果机器 1 和机器 2 彼此相同,则可以在机器 1 上执行以下操作:
sudo apt-get install -dy your-package
scp /var/cache/apt/archives/*.deb machine2:/somewhere
# create your local repo with all those .debs
现在,如果您开始在 machine1 中安装软件,这将不起作用,因为已安装并满足依赖关系的软件包将不会再次下载,因此不会位于 /var/cache/apt/archives 中。如果机器是从本质上不同的 Ubuntu 版本/风格安装的(例如,如果 machine1 是 14.04 桌面版,而 machine2 是 12.04 服务器版),这也会是个问题。
我编写了一个名为 dpkg-offline 的工具,它可能会有所帮助,你基本上告诉它你从哪个 ISO 安装了 machine2(你需要有该 ISO 的本地副本)以及你想要下载哪些包,它将生成一个 tar.gz,其中包含在从该参考 ISO 干净安装的系统上安装这些包所需的所有依赖项。
dpkg-offline 在 12.04 服务器(以及更旧的服务器版本)上不能很好地工作,但如果你的 machine2 是 Ubuntu 桌面(自 10.04 以来的任何版本)或 Ubuntu 服务器 12.10 或更新版本,它可能会有所帮助。
https://launchpad.net/dpkg-offline/
要使用它,请安装 bzr,然后bzr branch lp:dpkg-offline
。您将找到 README 和有关如何使用该工具的详细教程。