引言
主要就是下载相关的deb文件,然后使用dpkg -i *.deb安装。
开始
首先你还需要一台可以联网的电脑A,进行相关deb文件的下载。
当然,你还有一台电脑B,也就是目标主机,他是离线状态
# 构建下载地址
sudo mkdir -p /opt/ocean/offline-packages/archives
# 进入地址
cd /opt/ocean/offline-packages/archives
# 改变权限,详情见注1
sudo chown -Rv _apt:root /opt/ocean/offline-packages/archives
sudo chmod -Rv 700 /opt/ocean/offline-packages/archives
# 下载包和这个包的依赖,这里我实际下载的是nvidia-container-toolkit,详细解释见注2
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances nvidia-container-toolkit | grep "^\w" | sort -u)
此时所有的deb相关包都被下载到了电脑A,通过手段将所有deb文件都复制到B的一个新文件夹中
# 姑且创建到 /opt/offline_packages/
mkdir -p /opt/offline_packages/
#
#.....将文件从A复制到B
#
cd /opt/offline_packages/
dpkg -i *.deb #unpack,没报错即为成功
# 题外话,由于我的安装的nvidia-container-tooltik是针对于docker的,我安装完以后忘记重启了,排查了很久,SOS。
# xdm别忘记就行
注1-权限改变
不改变权限在下载时会不完全,报错类似于
W: Download is performed unsandboxed as root as file '/opt/offline-packages/archives/libcrypt1_1%3a4.4.10-10ubuntu4_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
注2-命令的详细解释-GPT4o
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances nvidia-container-toolkit | grep "^\w" | sort -u)
这个命令的目的是下载 nvidia-container-toolkit
包及其所有依赖项,而不安装它们(这就是install和download关键词的区别)。以下是对命令每个部分的详细解释:
-
apt-cache depends
:这个命令列出一个包的所有依赖关系。通过加上选项,可以递归地列出所有依赖项,不包括建议的、推荐的、冲突的、破坏的、替换的或增强的包。--recurse
:递归地列出所有依赖项。--no-recommends
:不包括推荐的包。--no-suggests
:不包括建议的包。--no-conflicts
:不包括冲突的包。--no-breaks
:不包括破坏的包。--no-replaces
:不包括替换的包。--no-enhances
:不包括增强的包。
-
nvidia-container-toolkit
:这是目标包名。 -
grep "^\w"
:过滤apt-cache depends
命令输出,只保留包名(因为依赖关系信息行以空格开头,而包名行以字母或数字开头)。 -
sort -u
:对结果进行排序并去重,以确保每个包名只出现一次。 -
sudo apt-get download
:使用apt-get
下载指定的包,而不是安装它们。$(...)
是命令替换语法,它将内部命令的输出作为参数传递给sudo apt-get download
。
总结:
这个命令首先找到 nvidia-container-toolkit
包及其所有依赖项的包名,然后下载所有这些包,而不安装它们。