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

12

我想在一个没有网络连接的Linux服务器上安装一个RPM软件包(例如Python 3)及其所有依赖项。

我该怎么做?


如何使用yum获取所有所需的RPM包,以供离线使用? - jww
3个回答

9
在CentOS/RedHat中,您可以使用yumdownloader下载特定的软件包,这将下载所有所需的RPM软件包,然后压缩该目录,上传到没有互联网访问权限的服务器并安装RPM软件包。 在这里,您可以找到一个示例,演示如何在没有互联网访问权限的情况下安装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

如果你遇到了 "yumdownloader: command not found" 的问题,你可以通过以下命令进行安装:yum install yum-utils - degenerate
这对我在CentOS 7上并不起作用,即使使用了指定的docker-ce软件包。它不会下载任何依赖的镜像,只会下载docker-ce软件包。然而,这个答案对我有效:https://unix.stackexchange.com/a/260261/221435 - TerekC

8
假设你已经从可以联网的另一台机器上下载了软件包并通过FTP将文件传输到你的服务器上,你可以使用以下命令来安装 RPM 包。
rpm -ivh package_name_x85_64.rpm

选项:

  • i = 安装新软件包。
  • v = 打印详细信息。
  • h = 在解压软件包时打印50个哈希标记。

您还可以查看rpm手册以获取更多选项和详细信息。


2

有一种方法,但是它非常棘手,可能会破坏您的服务器,所以要非常小心。

术语:

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

步骤:

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

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

在您的在线系统上,将您的rpm数据库替换为来自离线系统的数据库。
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,}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接