当我们联网时,借助于 Ubuntu 上的包管理工具 apt 和社区的一帮幕后英雄,安装任何软件包几乎都是一行命令的事儿。

但有时候别无选择,需要离线安装,当我们漫不经心地把对应的 .deb 包拷到离线主机上,以为接下来又是枯燥无聊的一天时,却意外遭遇滑铁卢 —— 终端贴心地提示你缺少一系列的依赖。

当把 XX 依赖拷到离线主机,进行安装时,竟然又提示缺少另一个依赖。。。命„ē¢³å。。。于是你度过了忙碌而充实的一天。晚上躺在床上,你尽量安慰自己今天并非一无所获 —— 毕竟还锻炼了身体。

为了拯救无聊的碳基生命的一天,让我们在(和离线机器一样的)联网机器环境中,把依赖列出来,可以借助于 apt-cache。

apt-cache depends  \
     --recurse  \
     --no-recommends  \
     --no-suggests  \
     --no-conflicts  \
     --no-breaks  \
     --no-replaces  \
     --no-enhances  \
     <package-name>

也可以借助于 apt-rdepends(r means recursive)。

apt-rdepends  <package-name>

接下来利用管道一次性把软件包及其所有依赖下载下来。

apt download $(apt-rdepends <package-name> | grep -v "^ ")

将当前路径下的所有 .deb 包挪到离线机器上,dpkg -i *.deb 一把梭哈。


下载 fish shell 及其依赖的一个案例

 apt download $(apt-rdepends fish  \
   | grep -v "^ "  \
   | sed 's/debconf-2.0/debconf/g'  \
   | sed -r 's/^www-browser$//g'  \
   | sed '/^$/d')

好了,今天就水到这里。

分类: CODE

0 条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注