供应商给我提供了一个自定义 rpm,安装时会提取依赖项。我需要在封闭的网络系统上安装此软件包,因此无法访问互联网来收集依赖项。不过,我可以访问中间服务器,该服务器可以访问互联网,但不允许来自封闭网络的流量。
是否可以创建一个封闭网络可以访问的本地网络存储库来安装此包?我已经使用以下命令在本地目录中创建了一个存储库:
createrepo .
我还尝试使用以下命令获取依赖项列表:
rpm -qpR *package*
我该如何将 rpm 或其他安装数据从依赖项列表拉到本地存储库?
答案1
我有同样的要求,但我无法从这些答案中获得 100% 所需的信息。我希望这对某些人有帮助。
这些命令必须在具有互联网连接的源机器上运行。
yum install -y createrepo
# Add a local temporary directory
mkdir packages
# Download whatever packages you need to the temporary directory
yum install --downloadonly --downloaddir=packages perl
# Now, create the repository. If you need to add more packages, be sure to execute this
# command again before you bundle it up
createrepo packages
# Compress the packages directory:
tar -zcf packages.tgz packages
现在,将其传输到没有互联网连接的目标机器并解压缩档案:
tar -zxf packages.tgz -C /opt/
创建/etc/yum.repos.d/local.repo
并添加以下内容:
[local]
name=Local Repository
baseurl=file:///opt/packages
enabled=1
gpgcheck=1
protect=1
如果您正在更新软件包,则需要先清除缓存,否则将找不到您的新软件包:
yum clean all
您现在可以在没有互联网连接的情况下安装所需的软件包:
yum --disablerepo='*' --enablerepo=local install perl
这个gpgcheck
参数非常重要,这意味着您要检查这些包在离开源计算机后是否没有被更改,因为它们是由 Red Hat 的密钥签名的。这对于大多数信息安全团队来说通常已经足够了。
答案2
yum install yum-utils
获得一些有用的包管理实用程序。 repotrack package
将下载所有依赖项。将其放在一个目录中并运行createrepo /srv/my/repo
这是一个存储库,您可以使用文件 URI 将其添加到封闭系统的 /etc/yum.repos.d/ 中:
[myrepo]
name = This is my repo
baseurl = file:///srv/my/repo/
无论如何,您还需要一个用于更新的系统。在连接互联网的系统上下载更新,并以相同的方式将它们放入存储库中。(可以使用 Satellite 等管理产品获取更新,但并非必须如此。)
答案3
您需要配置 yum 才能访问您的本地仓库。请参阅https://wiki.centos.org/HowTos/CreateLocalRepos