Ubuntu 22.04 离线安装教程(本地 APT 仓库 offline-repo)

Ubuntu 22.04 离线安装教程(本地 APT 仓库 offline-repo)

1. 目标

无网络的 Ubuntu 22.04 机器上,离线安装以下常用工具包:

bash 复制代码
vim git net-tools iproute2 iputils-ping dnsutils traceroute \
netcat-openbsd tcpdump wget curl openssh-client openssh-server rsync

方式:在联网机 制作本地 APT 仓库目录 offline-repo/(包含全部 .deb 和索引),拷到 U 盘,再拷到离线机 /opt/offline-repo/,最后通过 file: 源安装。


2. 准备条件与注意事项

  • 联网机与离线机建议同为 Ubuntu 22.04(jammy)且同架构(一般 amd64),否则容易出现依赖版本不匹配。
  • 本地仓库使用 [trusted=yes],适合内网/离线环境快速部署(不做 GPG 签名校验)。
  • 离线机后续安装时只依赖你准备的 offline-repo ,因此 .deb 要尽量齐全。

3. 联网机:制作离线仓库 offline-repo

3.1 创建工作目录

bash 复制代码
mkdir -p ~/offline-repo/debs
cd ~/offline-repo
sudo apt-get update

3.2 下载目标包及依赖(两种方式选其一)

方式 A(简单常用):下载但不安装
bash 复制代码
sudo apt-get install --download-only -y \
  vim git net-tools iproute2 iputils-ping dnsutils traceroute \
  netcat-openbsd tcpdump wget curl openssh-client openssh-server rsync

将缓存中的 .deb 收集到仓库目录:

bash 复制代码
cp -av /var/cache/apt/archives/*.deb ~/offline-repo/debs/

说明:如果你发现离线机安装时仍缺依赖,再回到联网机补齐缺的包(见"排错"章节)。

方式 B(更稳):递归解析依赖再下载(推荐更稳,但步骤多)-正常方式A就可以了
bash 复制代码
sudo apt-get install -y apt-rdepends
cd ~/offline-repo

apt-rdepends \
  vim git net-tools iproute2 iputils-ping dnsutils traceroute \
  netcat-openbsd tcpdump wget curl openssh-client openssh-server rsync \
  | grep -v "^ " \
  | grep -vE "^(PreDepends:|Depends:|Recommends:|Suggests:)" \
  | sort -u > pkglist.txt

cd ~/offline-repo/debs
xargs -a ../pkglist.txt -I{} apt-get download {}

3.3 生成本地 APT 索引(Packages.gz)

安装索引生成工具并创建索引:

bash 复制代码
sudo apt-get install -y dpkg-dev
cd ~/offline-repo/debs
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

此时你的离线仓库目录结构类似:

text 复制代码
offline-repo/
  debs/
    *.deb
    Packages.gz

4. 拷贝到 U 盘

假设 U 盘挂载在 /media/$USER/USB,拷贝整个 offline-repo

bash 复制代码
cp -av ~/offline-repo /media/$USER/USB/
sync

5. 离线机:把仓库拷到 /opt 并配置本地源

5.1 从 U 盘拷到 /opt(cp -r / cp -a)

建议用 cp -a(会保留时间戳、权限等,更稳):

bash 复制代码
sudo mkdir -p /opt
sudo cp -av /media/$USER/USB/offline-repo /opt/

拷完后仓库路径应为:

text 复制代码
/opt/offline-repo/debs

你也可以用 cp -r(不如 -a 完整):

bash 复制代码
sudo cp -r /media/$USER/USB/offline-repo /opt/

5.2 配置本地 APT 源(file:)

根据最终放置路径是 /opt/offline-repo/debs,建议这样写:

bash 复制代码
echo "deb [trusted=yes] file:/opt/offline-repo/debs ./" | sudo tee /etc/apt/sources.list.d/offline.list

更新索引:

bash 复制代码
sudo apt-get update

5.3 离线安装软件

bash 复制代码
sudo apt-get install -y \
  vim git net-tools iproute2 iputils-ping dnsutils traceroute \
  netcat-openbsd tcpdump wget curl openssh-client openssh-server rsync

6. 验证与常用检查

  • 查看 APT 是否识别本地仓库:
bash 复制代码
apt-cache policy vim | cat
  • 确认本地源文件内容:
bash 复制代码
cat /etc/apt/sources.list.d/offline.list

7. 排错(离线常见问题)

7.1 apt-get update 报错找不到 Packages

  • 检查 Packages.gz 是否在你指定的目录内:

    • 例如你写的是 file:/opt/offline-repo/debs,则必须存在:
      • /opt/offline-repo/debs/Packages.gz
  • 如果你拷贝后又新增/删除了 .deb,需要重新生成索引:

bash 复制代码
cd /opt/offline-repo/debs
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

(这一步不需要联网)

7.2 apt-get install 提示缺依赖包

  • 说明 offline-repo 里缺少某些 .deb
  • 解决:
    • 记下缺的包名/版本提示
    • 回到联网机 apt-get download 缺的包名
    • 拷进 offline-repo/debs/
    • 重新 dpkg-scanpackages ... > Packages.gz
    • 再拷回离线机覆盖并安装

8. 离线机最短流程(命令总结)

假设你已经把仓库拷到了 /opt/offline-repo/debs

bash 复制代码
echo "deb [trusted=yes] file:/opt/offline-repo/debs ./" | sudo tee /etc/apt/sources.list.d/offline.list
sudo apt-get update
sudo apt-get install -y \
  vim git net-tools iproute2 iputils-ping dnsutils traceroute \
  netcat-openbsd tcpdump wget curl openssh-client openssh-server rsync
相关推荐
爱学习的阿磊12 分钟前
使用Fabric自动化你的部署流程
jvm·数据库·python
枷锁—sha18 分钟前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞31 分钟前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean31 分钟前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_5500246335 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦36 分钟前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_99991 小时前
Redis-2-queryFormat()方法
数据库·redis·缓存
lucky-billy1 小时前
Ubuntu 下一键部署 ROS2
linux·ubuntu·ros2
阿梦Anmory1 小时前
Ubuntu配置代理最详细教程
linux·运维·ubuntu
数据知道1 小时前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json