如何离线安装 rpm 包及其依赖项

How to install a rpm package and its dependencies offline

我想在没有互联网连接的 linux 服务器上安装 rpm 包(例如 python 3)及其所有依赖项。

我该怎么做?

假设您之前已经从另一台可以访问互联网的机器上下载了软件包,并且 FTP 将文件下载到您的服务器,您可以使用以下命令安装 rpm

rpm -ivh package_name_x85_64.rpm

选项:

  • i = 这将安装一个新包。
  • v = 打印详细信息
  • h = 在解压软件包存档时打印 50 个散列标记。

您还可以查看 rpm 手册以了解更多选项和详细信息

有办法,但它很棘手,可能会弄乱你的服务器,所以要非常小心

命名法:

  • 在线 : 您的系统已连接到存储库
  • 离线:您的系统未连接

步骤:

离线系统压缩您的rpm数据库,并将其传输到在线系统:

cd /var/lib/rpm/
tar -cvzf /tmp/rpmdb.tgz *
scp /tmp/rpmdb.tgz root@online:/tmp

在您的在线系统上;将您的 rpm db 替换为 offline 系统中的 rpm db:

cp -r /var/lib/rpm{,.bak} # back up your rpmdb from your online system. Make sure not to lose this!!
rm -rf /var/lib/rpm/*
cd /var/lib/rpm
tar -xvf /tmp/rpmdb.tgz # now your online system pretends to have the rpm database from the offline system. Don't start really installing / uninstalling rpms or you'll break everything

现在用仅下载模拟你的更新(我没有用 yum 运行 这个但是用 zypper,但它应该是相似的):

zypper up --download-only

现在您可以获取所有下载的软件包,它们应该足以更新您的离线系统

现在恢复您的 在线 机器:

rm -rf /var/lib/rpm
cp -r /var/lib/rpm{.bak,}

在CentOS/RedHat中你可以对特定的包使用yumdownloader,这会下载所有需要的RPM,然后压缩目录,上传到没有互联网访问的服务器并安装RPM。

Here 你可以找到和示例,在没有互联网访问的情况下安装 Kubernetes。

yumdownloader --assumeyes --destdir=/var/rpm_dir/docker-ce --resolve docker-ce
tar -czvf d4r-k8s.tar.gz /var/rpm_dir
# Upload files
scp d4r-k8s.tar.gz root@YOUR-IP:/root
# Connect to your server
ssh root@YOUR-IP
tar -xzvf /root/d4r-k8s.tar.gz -C /
# install Docker:
yum install -y --cacheonly --disablerepo=* /var/rpm_dir/docker-ce/*.rpm