我有一个最小的 CentOS 服务器,无法访问互联网。我们称之为服务器A。
我的目标是构建一个 shell 脚本文件,为应用程序安装特定版本的本地 RPM 文件。假设目标应用程序是 Apache。问题是每个 RPM 都有依赖关系。
在另一台可以访问互联网的服务器上,我称之为服务器B,我下载了包:
wget http://repo.okay.com.mx/centos/7/x86_64/release/httpd-2.4.35-5.el7.x86_64.rpm
然后将其移至服务器 A 并尝试安装:
rpm -i httpd-2.4.35-5.el7.x86_64.rpm
yum安装依赖截图:
它有几个要求:
rpm -qpR httpd-2.4.35-5.el7.x86_64.rpm
浏览依赖项截图:
我无法理解某些要求:
1- 什么是/etc/mime.types
?我没有这样的文件。我可以从哪里获得它?
2- 一些软件包被多次提及,例如
systemd-utils
systemd-utils
systemd-utils
这是什么意思?
3- 一些软件包有多种变体。我应该安装哪一个? 库文件
4- 列表似乎是按字母顺序排列的。安装顺序是什么?
5- 该dnf repoquery
命令还提供了不同的列表。我应该遵循哪一个?
dnf repoquery 截图:
6- 有没有更自动化的方法来实现我所寻找的功能?
答案1
# Install Yumdownloader using the following command as root user.
yum install yum-utils
# Once installed, run the following command to download a package, for example httpd.
# To download packages with all dependencies, use --resolve option:
mkdir httpd && cd httpd && yumdownloader --resolve httpd
# it will download httpd with all dependencies into working dir.
在docker中的centos 7上测试:
[root@187dddae557b httpd]# ls
apr-1.4.8-7.el7.x86_64.rpm httpd-2.4.6-97.el7.centos.5.x86_64.rpm
apr-util-1.5.2-6.el7.x86_64.rpm httpd-tools-2.4.6-97.el7.centos.5.x86_64.rpm
centos-logos-70.0.6-3.el7.centos.noarch.rpm mailcap-2.1.41-2.el7.noarch.rpm
答案2
- 在这种情况下,创建相关主机可以访问的本地 repo 将变得更加容易。
dnf
提供更大的列表,因为它显示所有依赖项,而不仅仅是缺失的依赖项。- 如果您想使用此方式,只需下载
dnf
所需的软件包并安装它们。 rpm
例如,当您看到依赖包apr15
时,请下载它、传输它、安装它,然后再次尝试安装主包。当您只看到文件名时,您可以尝试yum provides /etc/mime.types
获取包名称。