假设从零开始重新安装不切实际,我该如何从 CentOS 7 更新到 CentOS 8?
我尝试做了yum install http://mirror.bytemark.co.uk/centos/8/BaseOS/x86_64/os/Packages/centos-release-8.0-0.1905.0.9.el8.x86_64.rpm
,但显然没有达到预期的效果。yum update
在此之后运行会让 yum 陷入无休止的递归尝试来解决依赖关系。
答案1
Red Hat 提供了从 EL 7.6+ 升级到 8 的工具leapp
,但是根据这个 CentOS 错误,没有计划在 CentOS 上支持它。尝试将现有的 7.x 机器指向 8.x 存储库并运行yum update
可能行不通;它从来都不是一个受支持的方法。你唯一的选择是重新安装。
答案2
手册里有 bug,所以试试这个(见评论)。如果出现问题,你需要解决问题,否则它就不起作用了。有些步骤很难逆转,你最终可能会得到无法启动的系统,所以要准备好从头开始拯救/重新安装系统,并做好备份。一些命令(发行版同步)需要很长时间,不能被打断,所以如果你知道如何使用screen
你会好起来的(即使更新后您无法重新连接,更新过程也会在屏幕上完成,检查日志通过tail -f /var/log/dnf.log
)。如果没有,请从终端(无网络连接)或通过超稳定的网络连接进行升级。你被警告了。建议先更新整个系统yum -y update
,然后重新启动并检查一切是否正常,这样你就会知道是什么损坏了升级以及升级前出现了什么问题。
# relax SELinux temporally (permissive mode)
setenforce 0
# switch to dnf
yum -y install dnf
# remove yum and its files
dnf -y remove yum yum-metadata-parser
rm -Rf /etc/yum /var/cache/yum
# switch to CentOS 8 repo
dnf -y upgrade http://vault.centos.org/8.0.1905/BaseOS/x86_64/os/Packages/centos-release-8.0-0.1905.0.9.el8.x86_64.rpm
将所有活动的 yum/dnf 存储库切换到版本 8,否则您会收到奇怪的错误(冲突的包等)发行版同步稍后。列出你的仓库rpm -qf /etc/yum.repos.d/* | sort -u
,如果你得到类似epel-release-7-1.el7.noarch通过下面的命令更新 repos(URL 参数从以下位置复制)EPEL 页面)。重复此段,直到您拥有 v8 上的所有存储库(Chrome 存储库不必更新)。
dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
让我们继续:
# clean repos metadata
dnf clean all
# update repos packages to their latest version (centos-release, epel-release, ...)
dnf -y update \*release*
# remove all kernel packages (system is unbootable until new kernel is installed later), modify if using kernel-plus
rpm -e --nodeps $(rpm -q kernel)
# remove conflicting package
rpm -e --nodeps sysvinit-tools
# lets upgrade the system to version 8
dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
# install kernel modules (you may need kernel-plus and kernel-plus-modules instead if you have obsolete hardware)
dnf -y install kernel-modules
# kernel package has been renamed so set DEFAULTKERNEL=kernel-core in /etc/sysconfig/kernel
sed -i -e s@DEFAULTKERNEL=kernel@DEFAULTKERNEL=kernel-core@ /etc/sysconfig/kernel
# refresh initramfs after additional kernel modules were installed
dnf -y reinstall kernel-core
# make sure all base packages are in place (change install to update if these groups are already installed)
dnf -y group install Core "Minimal Install"
# fix SELinux labels during shutdown (it will take a time)
touch /.autorelabel
复制/拍摄文件。如果 GRUB 加载程序在启动时进入 shell 提示符,则/etc/sysconfig/grub
可能需要该文件的内容(根文件系统信息)。检查 iniramfs 映像中的模块列表和数量GRUB_CMDLINE_LINUX
lsinitrd /boot/initramfs-4*.img | grep -c ko.xz
CentOS 8 使用新的基础生命科学通过目录进行配置/boot/loader/entries/
,每个内核都有自己的每个 GRUB 菜单项的配置文件(它们按字母顺序排序,而不是按日期/时间排序),因此/etc/grub2.cfg
没有菜单项,也不需要使用内核进行更新。 CentOS 8 淘汰了网络脚本,并转向网络管理器。如果您的网络接口由网络脚本处理,请确保您已network-scripts
安装包并且已启用此服务(systemctl enable network.service
)。
祈祷好运,随身携带可启动的 CentOS 8 DVD(或 USB 记忆棒)来拯救您的系统并输入reboot
启动新系统(SELinux 自动重新标记将需要一段时间,按下ESC
键查看启动屏幕上发生的情况,完成后会重新启动一次)。
成功重启后,您可能需要检查留下了哪些配置文件通过rpmconf -a
来自包rpmconf
(该包在 EPEL 仓库中,因此您需要先通过 启用该仓库dnf -y install epel-release
)。
一些软件包将不再属于 CentOS 8 仓库(孤儿),您可以按 列出它们dnf repoquery --extras
。 删除dnf remove <package>
,按 全部删除dnf remove $(dnf repoquery --extras)
。 列表树叶通过dnf repoquery --unneeded
(删除部分或全部)。
检查 SELinux重新启动后拒绝消息ausearch -m avc --start recent
(如果您有自己的规则或非标准设置,请修复它们)。检查/var/log/messages
、/var/log/boot.log
和journalctl -xe
是否存在错误和警告。设置自动更新(如果你有yum-cron
)。删除救援内核rm /boot/vmlinuz-0-rescue* /boot/initramfs-0-rescue*
并重新安装内核以获得新的 GRUB 救援菜单项为 CentOS 8 启动dnf -y reinstall kernel-core
救援内核(救援内核包含所有可能的驱动程序/模块)。设置适当的Python 的替代品通过alternatives --config python
(选择版本 3 或旧版本 2)。
答案3
我能够使用本指南作为参考来更新一台运行 CentOS 7 的机器: https://www.tecmint.com/upgrade-centos-7-to-centos-8/
由于我遇到了 gpg 密钥问题,按照本指南中的建议直接更新到 v8.1,因此我认为我必须搜索正确的镜像包才能升级到 v8.0。
因此,对于步骤 4,这是我使用的命令:
# dnf install http://mirror.bytemark.co.uk/centos/8.0.1905/BaseOS/x86_64/os/Packages/centos-release-8.0-0.1905.0.9.el8.x86_64.rpm
(请注意 URL 中的版本号变化 8 -> 8.0.1905)
我不需要安装指南中提到的centos-repos
内容centos-gpg-keys
,而是能够继续执行指南的后续步骤。
注意:虽然我不会在生产服务器上使用它。我宁愿进行迁移。如果不能,请确保您已彻底备份所有内容(数据和配置)。
我希望这有帮助!
干杯,D