构建离线版不完整 APT 源
Johann Li | October 17, 2022
构建一个离线版本的,只包含特定软件安装包的 APT 离线 仓库。
-
首先启动一个对应 Ubuntu 系统的 docker 容器
-
在 Docker 容器中执行
apt update
更新软件源索引 -
在 Docker 容器中执行
apt install apt-rdepends
-
重复下面命令,将要下载的软件下载下来:
apt download `apt-rdepends some-packages | grep -v "^ " `
其中 some-packages
的地方应该写入所要下载安装的软件包,比如 gcc。但是如果,下载的过程中,提示,有安装包无法被下载(就是系统内置的包,不在软件源中),就需要通过 grep -v "package-a\|package-b"
进行过滤,其中 \|
就是多个包的分割线(实际对应的是 grep 中或者的关系,-v
表示排除:
apt download `apt-rdepends some-packages | grep -v "^ " | grep -v "package-a\|package-b"`
这里需要注意,排出的表达式,比如只排除 libc-dev
但是不排除 libc-dev-bin
的话,表达式中应该写 libc-dev$
。这样的写法同时会排除 linux-libc-dev
这个包,如果不打算排除这个包的话,就需要 ^libc-dev$
。
- 然后通过如下命令生成 apt 的 repo, 如果 repo 的位置在
/path/to/repo
cd /path/to
dpkg-scanpackages --multiversion repo | gzip > repo/Packages.gz
chmod 777 -R repo
这里如果不 cd
而是直接写 dpkg-scanpackages --multiversion /path/to/repo
的话,产生的 Packages 文件中包的路径就会出现 /path/to/repo/xxx.deb
,这个东西配置后面的内容,会导致 apt 找不到具体的 deb 包。
- 最后在目标设备的
/etc/apt/sources.list
或者/etc/apt/sources.list.d/xxx.list
文件中添加一行:
deb [trusted=yes] file:///path/to /repo/