解决RHEL/CentOS 7/8填充事务时出错,重试
尝试使用自定义存储库安装RHEL/CentOS 7/8吗?
现在,该存储库可以来自自定义的ISO或者目录。
如果安装所需的存储库中缺少必要的rpm软件包,我们会看到此错误,错误填充事务,在安装RHEL/CentOS 7/8时重试。
Error populating transaction, retrying
当我尝试创建具有一组自定义rpm的自定义RHEL/CentOS 7/8 ISO时,我首先遇到此错误,因此我认为我应该将解决方案放其中以帮助其他面临相同错误的人。
现在,我在使用kickstart和RHEL/CentOS 7安装自定义存储库的环境中模拟了此错误。
我们可以在安装程序上启用串行控制台,以收集控制台日志以进行进一步调试。
或者,我们也可以在安装期间启用SSH,以便可以使用SSH连接到客户端以检查进度,而不是连接到GUI控制台。
说明:
建议我们在安装过程中配置网络启用SSH,因为这样可以更轻松地解决这些问题
如何修复 “Error populating transaction, retrying ”
配置存储后,我们将看到"正在启动软件包安装过程",接下来软件包安装失败,而anaconda将重试错误输出;当由于存储库中缺少rpm依赖关系而导致RHEL/CentOS安装失败时,我们将在控制台上看到该错误输出。
Starting package installation process Error populating transaction, retrying (1/10) <Output trimmed> Error populating transaction, retrying (10/10) ================================================================================ ================================================================================ Error The following error occurred while installing. This is a fatal error and installation will be aborted. Error populating transaction after 10 retries: failure: NetworkManager-config server-1.8.0-11.el7_4.noarch.rpm from updates: [Errno 256] No more mirrors to try.
从安装分析anaconda日志
以我的错误输出为例,我们可以确定问题出在与NetworkManager-config
rpm相关的地方。
但是在其他复杂的环境中,我们可能无法在控制台上获得全部详细信息,因此可以检查anaconda日志。
连接到受影响服务器的控制台
默认情况下,安装会在第一个终端上进行,因此我们必须连接到任何其他终端才能获得shell提示。
按Alt + F2
连接到第二个终端或者,我们可以使用串行控制台配置VSP,然后可以使用任何SSH客户端连接到服务器
安装日志位于
/tmp
内部,而rpm安装相关的日志位于/tmp/packaging.log
下在此日志文件中,我们应该看到如下输出:
来自/tmp/packaging.log
09:54:27,428 DEBUG packaging: Error populating transaction, retrying (1/10) 09:54:27,428 DEBUG packaging: Member: libXext.x86_64 0:1.3.3-3.el7 - u 09:54:27,429 DEBUG packaging: Adding Package libXext-1.3.3-3.el7.x86_64 in mode u 09:54:27,429 DEBUG packaging: Member: perl-HTTP-Tiny.noarch 0:0.033-3.el7 - u 09:54:27,430 DEBUG packaging: Adding Package perl-HTTP-Tiny-0.033-3.el7.noarch in mode u 09:54:27,430 DEBUG packaging: Member: NetworkManager-config-server.noarch 1:1.8.0-11.el7_4 - u 10:02:58,676 ERR packaging: Error populating transaction after 10 retries: failure: NetworkManager-config-server-1.8.0-11.el7_4.noarch.rpm from updates: [Errno 256] No more mirrors to try. 10:02:58,677 DEBUG packaging: file:///run/install/repo/updates/NetworkManager-config-server-1.8.0-11.el7_4.noarch.rpm: [Errno 14] curl#37 - "Couldn't open file /run/install/repo/updates/NetworkManager-config-server-1.8.0-11.el7_4.noarch.rpm" 10:02:58,677 DEBUG packaging: QUIT:
现在我们其中看到问题很直接了,即我们的存储库中没有NetworkManager-config-server-1.8.0-11.el7_4.noarch.rpm
。
如何解决这个问题?
要解决此问题,请将缺少的rpm添加到存储库,然后重新执行createrepo
以更新yum数据库。
由于我们知道所有与安装相关的日志都存储在/tmp
下,因此可以通过检查安装失败的服务器上的目录内容,获取安装期间使用的存储库列表。
# ls -l /tmp/yum.repos.d/ total 16 -rw-r--r--. 1 root root 93 Nov 21 09:11 ExtraPackages.repo -rw-r--r--. 1 root root 69 Nov 21 09:11 anaconda.repo -rw-r--r--. 1 root root 75 Nov 21 09:11 updates.repo
这里的" anaconda.repo"是默认的仓库,而" updates.repo"和" ExtraPackages.repo"是我使用kickstart文件创建的添加仓库。
从在" packaging.log"中看到的错误无法打开文件/run/install/repo/updates/NetworkManager-config-server-1.8.0-11.el7_4.noarch.rpm,我们知道缺少的rpm是来自" updates" `Repo
将rpm放入更新存储库路径后,通过执行以下命令来更新yum数据库
# createrepo /your/repo/path/.
这将在/your/repo/path /
中更新/创建repodata目录。
现在,我们可以重新尝试安装。