deb包内嵌依赖可以实现离线安装(无需使用apt下载依赖),牺牲包体积来换取离线环境或网络受限环境下的软件安装的便利
以下是通过安装后执行脚本实现的步骤,注意WORKDIR是打包deb包的目录
# 设置工作目录
WORKDIR=$(mktemp -d)
使用apt下载依赖
apt-get download xxx
首先复制依赖的deb包到一个目录,并复制到deb包的任意目录
# 新建文件夹
mkdir -p "$WORKDIR/build/var/lib/bundled-deps"
# 将依赖拷贝到deb包内
cp *.deb "$WORKDIR/build/var/lib/bundled-deps/"
新建安装后执行脚本,实现在deb安装后自动安装deb内的依赖,安装后清理无用的deb包
POSTINST="$WORKDIR/build/DEBIAN/postinst"
cat > "$POSTINST" <<EOF
#!/bin/bash
# set -e
echo "触发异步依赖安装..."
# 后台进程脱离锁限制
nohup bash -c ' \\
sleep 3; # 确保主进程释放锁 \\
echo "正在安装依赖" >> /var/log/bundled-deps.log; \\
cd /var/lib/bundled-deps/; \\
for deb in *.deb; do \\
if [ -f "\$deb" ]; then \\
dpkg -i "\$deb" || apt-get install -y -f; \\
fi; \\
done; \\
rm -rf /var/lib/bundled-deps/; \\
echo "依赖安装完成" >> /var/log/bundled-deps.log; \\
' >/dev/null 2>&1 &
EOF
chmod +x "$POSTINST"
然后构建出新的deb包即可分发
注意,该方案十分繁琐,请权衡包体积等因素,根据实际需求选择使用。