我刚刚在一台无法访问互联网的计算机上安装了全新的 Waldorf(Crunchbang,基于 Debian Wheezy)。以前在 Xubuntu 10.04 VM 上,当我需要一些软件时我所做的是:
- 转到packages.ubuntu.com;
- 找到相关的包及其依赖项,下载.deb;
- 跑步
dpkg-scanpackages <download dir> /dev/null | gzip -9c > Packages.gz
- 运行
apt-get update
(<download dir>
我的数字/etc/apt/sources.list
,即有一个条目看起来像deb file:<download dir> ./
); - 跑步
apt-get install <top-package>
;- 如果有任何未满足的依赖项(即从packages.ubuntu.com下载的软件包太新,并且依赖于我的系统上已存在的某些软件包的较新版本),请转到launchpad.net,并找到该软件包的旧版本;
- 恢复安装。
现在有了 Debian Wheezy,我可以在packages.debian.org 上找到 .deb,但是当这些软件包需要已安装软件包的更新版本时,问题就开始了。我找不到 Debian 的 launchpad.net 的等效项...
我想由于 Ubuntu 是基于 Debian 的,所以我仍然可以在 launchpad.net 上找到我需要的旧 .deb,但我开始认为我可能做错了什么。是这样吗?在无法访问互联网的计算机上安装软件包实际上应该做什么?
例如,我正在尝试安装 openjdk-6-jre。沿着依赖关系树,我发现我还需要 tzdata-java 和 libnss3-1d,但我无法使用在 packages.debian.org 上找到的 .deb 安装它们,因为apt-get
版本令人窒息:
tzdata-java : Depends: tzdata (= 2014a-0wheezy1) but 2013b-2 is installed.
libnss3-1d : Depends: libnss3 (= 2:3.14.5-1) but 2:3.14.3-1 is installed.
(在“只需从源代码编译”之前)
答案1
在无法访问互联网的计算机上安装软件包实际上应该做什么?
在可以访问互联网的系统中下载这些软件包、设置本地缓存等似乎是可行的方法。
现在有了 Debian Wheezy,我可以在packages.debian.org 上找到 .deb,但是当这些软件包需要已安装软件包的更新版本时,问题就开始了。我找不到 Debian 的 launchpad.net 的等效项...
现在,这里有一个问题。首先,您正在使用一个基于 Debian 的发行版软件包,并将其安装在另一个基于 Debian 的发行版中。这无论是谁都会后悔得落泪。
在您的系统中安装软件(特别是软件包)时,您应该确保它们来自同一来源。当您开始混合源时,像您遇到的问题就会出现并让您头疼。
答案2
最后我找到了两个解决方案。一个简单的、有风险的,或者第二个应该同样简单且风险较小的(不确定,还没有尝试过)。非常感谢来自的人们Crunchbang 社区在这方面帮助我。
有风险的解决方案
- 只需从 pakages.debian.org 下载较新的 Wheezy 软件包,将它们添加到
local dir
; - 运行
apt-get upgrade
: apt 将下载的软件包识别为较新的软件包,不会提出任何问题; - 跑步
apt-get install <top-package>
。
我想现在的问题是升级的软件包本身可能依赖于系统上其他软件包的升级版本,这意味着要下载的内容列表可能会变得任意长。就我而言,只需下载 libnss3 和 tzdata 就足够了。
风险较小的解决方案
使用apt-offline
。在断开连接的计算机上,该软件构建一个签名,表示要获取的依赖项;在可以访问 Internet 的第二台计算机上,使用签名实际下载依赖项,传输回第一台计算机并安装。
我实际上并没有尝试过这个解决方案,这就是为什么上面的描述可能看起来很模糊(如果有人感兴趣的话,Crunchbang 的人发布了足够文档的链接)。