各位 Debian 系的同学,你们是怎么解决离线安装 Deb 包的依赖问题的?

2014-11-02 19:30:40 +08:00
 ifishman
前提:本地服务器无外网,只有通过deb装

网上多是生成依赖关系图,但是我这种情况还得一个一个的去源里慢慢找,再一个一个的下载。

完了还不一定漏掉一个两个的

所以我想伸手的是:有没有一个工具能根据源和包名称来生成一个依赖包在该源中的链接表,批量下载,最好还能生成依赖顺序,从底层往上记录,这样也方便顺序安装。

不知道有没有现成的,或者,这是不是一个good idea
11922 次点击
所在节点    问与答
12 条回复
9hills
2014-11-02 19:41:39 +08:00
Ubuntu:

清空 /var/cache/apt/archives

sudo apt-get -y install --reinstall --download-only XXXX

这样XXXX以及它的所有依赖包就会存到archives目录,copy走,批量install即可
046569
2014-11-02 19:49:28 +08:00
我觉得自己建个镜像更好些,当作离线服务器.就是需要个比较大的硬盘...
erhandsome
2014-11-02 19:52:17 +08:00
把整个源脱下来就好了
cbsw
2014-11-02 19:55:54 +08:00
apt-offline
ifishman
2014-11-02 20:02:30 +08:00
@9hills 我的情况比较特殊,内网服务器是ARM架构,外网的是X86,这样是否可以换ARM源,再update & --download-only ?
wisatbff
2014-11-02 20:04:22 +08:00
能解决网的问题就优先解决,不然要手动装一个大的软件能把人累死。可以像楼上说的自己整个本地源。。
先获得所有依赖
$ dpkg -I package.deb
然后找/写个脚本..
9hills
2014-11-02 20:06:42 +08:00
@ifishman 可以,但是别安装就好。。arm就是重新编译了下
ifishman
2014-11-02 20:45:27 +08:00
@9hills 实验了一把,apt还是会去找i386的资源,然后报404错误,难道我姿势不对?
wanganjun
2014-11-02 21:49:27 +08:00
曾经试过挂载iso文件,从iso中直接获取包,可以用。只是是在intel的cpu上试的
withrock
2015-10-10 18:02:39 +08:00
apt-offline +1
你把那几个特别大的镜像 ISO 下载到内网就可以了
Showfom
2017-01-07 23:25:43 +08:00
@046569 也不用很大 1T 的硬盘可以放很多很多了
CheneyC
2018-08-30 10:00:01 +08:00
为了回答这个问题,还专门注册了一个账号,也是佩服自己。另外新用户 7000s 后回复的设置佩服这个网站;


就题主的需求,基于几个源和二进制包名,得到这个二进制包的向上所有依赖包,架构 deb 系。
这里介绍两个相关命令:
1 ) apt-cache depends xx #获取 xx 的依赖关系
例如
-----------------------
root@cbs-06:/home/cc# apt-cache depends vim
vim
依赖: vim-common
依赖: vim-runtime
依赖: libacl1
依赖: libc6
依赖: libgpm2
依赖: libpython2.7
依赖: libselinux1
依赖: libtinfo5
建议: <ctags>
exuberant-ctags:i386
exuberant-ctags
建议: vim-doc
建议: vim-scripts
冲突: vim:i386

-----------------------
2 ) apt-rdepends vim #依次返回向上依赖的包
例如:
-----------------------
root@cbs-06:/home/cc# apt-rdepends vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
vim
Depends: libacl1 (>= 2.2.51-8)
Depends: libc6 (>= 2.15)
Depends: libgpm2 (>= 1.20.4)
Depends: libpython2.7 (>= 2.7)
Depends: libselinux1 (>= 1.32)
Depends: libtinfo5
Depends: vim-common (= 2:7.4.052-1ubuntu3)
Depends: vim-runtime (= 2:7.4.052-1ubuntu3)
libacl1
Depends: libattr1 (>= 1:2.4.46-8)
Depends: libc6 (>= 2.14)
PreDepends: multiarch-support
libattr1
Depends: libc6 (>= 2.4)
PreDepends: multiarch-support
libc6
Depends: libgcc1
libgcc1
Depends: gcc-4.9-base (= 4.9-20140406-0ubuntu1)
Depends: libc6 (>= 2.14)
PreDepends: multiarch-support

.... 中间内容较多省略了....

debconf
PreDepends: perl-base (>= 5.6.1-4)
perl-base
PreDepends: dpkg (>= 1.14.20)
PreDepends: libc6 (>= 2.14)
debconf-2.0
mime-support
vim-common
Depends: libc6 (>= 2.3.4)
vim-runtime

-----------------------

综上:apt-rdepends 这个命令可以满足题主的要求,对结果进行正则匹配下再下载到本地即可。
eg:
j=0;for i in `apt-rdepends XX |grep "Depends:" |awk '{print $2}' |sort |uniq `;do echo "$j)---$i";apt-get download $i;j=$(($j+1));done

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/143437

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX