ubuntu apt-get离线源制作

需求说明

项目需要自动安装ubuntu系统,且全程无网络,需要定制apt离线源,且所有依赖项都要下载下来,包括依赖的依赖,需要递归下载所有离线包。通过三四天查找资料及n次测试,最终实现目标,特此记录操作过程。

环境说明

操作系统:ubuntu-18.04.5-server-amd64.iso

网络:无

系统预装软件:openssh-server、vim,方便安装完成后通过xshell访问编辑

失败的尝试

失败一

c 复制代码
sudo apt-get install -d <packages> # 该命令会下载安装包到/var/cache/apt/archives,且不会安装

失败二

c 复制代码
sudo apt download $(apt-rdepends vim | grep -v "^ ")

单独的解决方案如下:

c 复制代码
sudo apt-get download $(apt-rdepends vim | grep -v "^ " | sed 's/debconf-2.0/debconf/g')

失败三

c 复制代码
for i in $(apt-cache depends python | grep -E 'Depends|Recommends|Suggests' | cut -d ':' -f 2,3 | sed -e s/'<'/''/ -e s/'>'/''/); do sudo apt-get download $i 2>>errors.txt; done

失败四

c 复制代码
aptitude --download-only install <your_package_here>

aptitude命令需要单独安装,依照该方案下载后依旧是缺少包 以上失败过程,均在最后使用时出现错误,多数错误均提示如下内容:

c 复制代码
The following packages have unmet dependencies:
 gstreamer1.0-plugins-good : Depends: libcairo-gobject2 (>= 1.10.0) but it is not going to be installed

最后的成功 吐槽通过百度搜索的内容都是垃圾 使用google搜索关键词apt download package and dependencies终于找到了可以用的 创建一个目录如下:

c 复制代码
 mkdir -p /opt/offline-packages/archives
cd /opt/offline-packages/archives 

执行如下命令会将vim的递归依赖都下载到/opt/offline-packages/archives目录内:

c 复制代码
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances vim | grep "^\w" | sort -u)

注:vim后可跟多个包,同时下载 本次测试的包下载后会发现很多同一个包以_amd64和_i386做后缀,说明将两个平台的包都下载下来了。

在使用dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz建立依赖关系时会出现很多类似如下警告:

c 复制代码
dpkg-scanpackages: warning: package libtextwrap1 (filename ./archives/libtextwrap1_0.1-14.1_i386.deb) is repeat; ignored that one and using data from ./archives/libtextwrap1_0.1-14.1_amd64.deb!

且最后会看到建立依赖的包数量是少于实际的包数量的 通过上述警告可以看到忽略了amd64后缀的包,而这个包恰好是需要的包,在首次操作时,没有解决该警告,导致最后使用离线源时出现大量奇怪的错误,归根到底,基本都是缺少依赖项的问题。提示的依赖或许存在于离线源中,但是依赖的依赖一直找下去一定会发现有些依赖是不存在的 建立依赖的命令

c 复制代码
cd /opt/offline-packages
sudo dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
cp Packages.gz ./archives

带上-m,会将所有包全部建立依赖关系到 Packages.gz中,如此会有重复,但无需剔除重复的包 最后打包供其他服务器使用

c 复制代码
tar -zcvf offline-apt-packages.tar.gz offline-packages

离线源应用 将上边打包的离线包发送到目标机器上,解压

c 复制代码
sudo tar -zxvf offline-apt-packages.tar.gz -C /opt
# 写入本地源,如有需要,提取备份原有源
echo "deb file:///opt/offline-apt-packages  archives/"| sudo tee /etc/apt/sources.list 

更新源 sudo apt-get update 之后即可安装软件了

相关推荐
weixin_4357761120 分钟前
2026年长沙托育vi设计从风格定位到元素运用的设计方法
linux·运维·服务器·python
benjiangliu1 小时前
LINUX系统-19-库制作与原理(一)
linux·运维·服务器
FriendshipT2 小时前
Ubuntu 20.04 下使用 Ollama 本地部署 AI 大模型
linux·人工智能·python·深度学习·ubuntu
bellus-3 小时前
win11使用ubuntu 26.04
linux·运维·ubuntu
略略略咯咯4 小时前
centos更换镜像源
linux·运维·centos
j7~4 小时前
【Linux】二十七.线程篇四《Linux多线程编程:线程互斥(互斥量的底层到封装)、线程安全和冲入、死锁》---详解
linux·开发语言·c++·线程安全·死锁·线程互斥·重入
yunwei374 小时前
eBPF 入门实践教程第五十篇:使用 TCX Link 实现可组合的流量控制
linux·云原生·开源
2401_827501284 小时前
Linux系统移植
linux·arm开发·单片机
2601_965798475 小时前
Build a Consulting Site in 2026: Nifty Theme Practical Review
java·linux·数据库
加油码5 小时前
共享内存详解:原理、系统调用与高性能进程间通信
linux·c语言·c++