在生产环境、内网环境或者无法联网的服务器上,我们经常需要 离线安装软件。 这篇文章教你从零开始: 👉 如何在联网环境中下载软件包及依赖 👉 如何拷贝到离线机器 👉 如何顺利安装并解决依赖问题
为了避免依赖不一致,下载和安装必须使用相同版本的 Ubuntu。
如果本地不是 Ubuntu,可以在 Docker 中临时拉一个 Ubuntu 容器作为下载机:
docker run -it ubuntu:20.04 bash
apt-get update
apt-get install -y apt-utils apt-rdepends dpkg-dev
这样你就有了一个干净的 Ubuntu 20.04 环境。
apt-get install --download-only
下载软件及依赖到系统缓存目录 /var/cache/apt/archives/
,但不会安装。
sudo apt-get install --download-only -y make
ls /var/cache/apt/archives/
👉 优点:简单,APT 自动处理依赖。 👉 缺点:需要从缓存目录手动拷贝包,不集中。
apt-get download + apt-rdepends
显式列出依赖并逐个下载到当前目录。
mkdir ~/deb-packages && cd ~/deb-packages
apt-get download $(apt-rdepends make | grep -v "^ ")
👉 优点:所有 .deb
文件都在一个目录里,方便打包。
👉 缺点:可能会多下可选依赖。
在容器或联网环境中,下载好的包放在目录 ~/deb-packages/
。
tar -czvf deb-packages.tar.gz ~/deb-packages
• 如果是 宿主机 ↔ 虚拟机,可以用 scp
:
scp deb-packages.tar.gz user@vm-ip:/opt/
• 如果是 Docker 容器 → 宿主机:
docker cp <container_id>:/root/deb-packages.tar.gz .
• 再通过 U 盘、共享目录等方式带到离线机器。
在离线机器上:
cd /opt/
tar -xzvf deb-packages.tar.gz
cd deb-packages
dpkg
sudo dpkg -i *.deb
sudo apt-get install -f # 自动修复依赖
这样 APT 会自动解决安装顺序,比 dpkg
稳定。
# 安装工具
sudo apt-get install -y dpkg-dev
# 在 deb 包目录生成索引
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
# 添加本地源
echo "deb [trusted=yes] file:/opt/deb-packages ./" | sudo tee /etc/apt/sources.list.d/local.list
# 更新索引
sudo apt-get update
# 安装软件(APT 自动处理依赖)
sudo apt-get install make
apt-get install --download-only
apt-get download $(apt-rdepends …)
docker cp
、scp
、U 盘。dpkg -i *.deb && apt-get install -f
apt-get install
自动解决依赖。这样,不管你的服务器是否联网,都能顺利完成软件安装 🚀。