从CentOS 7升级到CentOS 8非常麻烦💦

背景

由于最近才引入的服务器在某种原因下使用了CentOS 7,考虑到今后还需要使用至少5年,我们决定对其进行更新。

请留心。

自从CentOS 8发布以来已经过去了大约一年的时间,但官方仍未提供从7升级到8的方式。不过,有一些非官方的升级方法的例子存在。

在正式环境中执行是非常危险的。因此,我们这次使用了其他服务器进行代用来实施。
并且,需要一定程度的故障排除能力。不适合初学者。

CentOS8的主要更新内容

    • パッケージマネージャがyumからdnfへの移行

 

    • Linuxのカーネルの更新3.10から4.18

その他、パッケージのバージョンの更新

前端可能是不需要变化,从CentOS7升级到CentOS8没有太大的影响(可能)。

更新步骤

EPELリポジトリのインストール

yum-utilsのインストール

dnfのインストール、パッケージの更新
競合の解決
kernel coreの更新
確認

安装EPEL仓库。

$ sudo yum install epel-release -y

安装yum-utils等软件包

$ sudo yum install yum-utils
$ sudo yum install rpmconf
$ sudo rpmconf -a

在这个时候,您将被询问是否要进行设置更新。
如果您希望使用之前的设置,请输入N。

清理

$ sudo package-cleanup --leaves
$ sudo package-cleanup --orphans

从dnf的安装到更新的过程

$ sudo yum install dnf

需要删除yum(我认为不需要删除到等等之类的文件夹,但还是以防万一)。

$ sudo dnf -y remove yum yum-metadata-parser
$ sudo rm -Rf /etc/yum

更新软件包。

$ sudo dnf upgrade
$ sudo dnf install http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-repos-8.2-2.2004.0.1.el8.x86_64.rpm http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-release-8.2-2.2004.0.1.el8.x86_64.rpm http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-gpg-keys-8.2-2.2004.0.1.el8.noarch.rpm
$ sudo dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

如果顺利的话,我会清理一下。

$ sudo dnf clean all

我想更新核心。将旧的核心删除。

$ sudo rpm -e `rpm -q kernel`

我会在下面的步骤中引起冲突,所以先将其删除。

$ sudo rpm -e --nodeps sysvinit-tools

我打算将CentOS 8进行distro-sync。
这意思是把已安装的软件包同步到最新可用版本。

$ sudo dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync

将系统升级至CentOS8。

更新内核。

$ sudo dnf -y install kernel-core

我会在最小安装中进行更新。

$ sudo dnf -y groupupdate "Core" "Minimal Install"

请确认是否已经成功更新至 CentOS 8。

重新启动后,我们可以通过检查/etc/centos-release是否已经更新到8.xx,或者使用uname -a命令来确认Linux内核的版本。

$ sudo dnf update

让我们确认一下是否能够正常更新。如果收到无法更新而出现竞争解决的指示,请加油解决。

由于我那时的包装盒似乎损坏了,所以无法安装内核,因此我进行了重新安装。

若出现版本竞争,应该怎么补救呢?

由于我忘记了消息,所以引用一下。
来源:https://superuser.com/questions/1517321/centos8-dnf-update-transaction-check-error

Error: transaction check vs depsolve:
(gcc >= 8 with gcc < 9) is needed by annobin-8.78-1.el8.x86_64
rpmlib(RichDependencies) <= 4.12.0-1 is needed by annobin-8.78-1.el8.x86_64
(annobin if gcc) is needed by redhat-rpm-config-120-1.el8.noarch
rpmlib(RichDependencies) <= 4.12.0-1 is needed by redhat-rpm-config-120-1.el8.noarch
To diagnose the problem, try running: 'rpm -Va --nofiles --nodigest'.
You probably have corrupted RPMDB, running 'rpm --rebuilddb' might fix the issue.
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.

基本上删除包并在稍后重新安装。

$ sudo dnf remove <package name here!>

另外,如果无法实现该操作,则会执行更新。

$ sudo dnf update <package name here!> --allowerase --best

如果无法做到这一点,则需要对依赖的软件包进行递归冲突解决。

如果发生了gdbm错误,那就说明它本身在dnf中被使用,需要进行更新。
请手动解决由升级导致的冲突。

顺便一提,您可以使用此命令检查依赖关系。
依赖关系不正确时,可能会在意想不到的地方出现错误,所以需要注意。

$ sudo dnf check --dependencies

比方说有可能变成这样。

$ sudo dnf check --dependencies
Modular dependency problems:

 Problem 1: conflicting requests
  - nothing provides module(perl:5.26) needed by module perl-App-cpanminus:1.7044:8010020191120175858:a9207fc6-0.x86_64
 Problem 2: conflicting requests
  - nothing provides module(perl:5.26) needed by module perl-DBD-MySQL:4.046:8010020191114030811:073fa5fe-0.x86_64
 Problem 3: conflicting requests
  - nothing provides module(perl:5.26) needed by module perl-DBD-SQLite:1.58:8010020191114033549:073fa5fe-0.x86_64
 Problem 4: conflicting requests
  - nothing provides module(perl:5.26) needed by module perl-DBI:1.641:8010020191113222731:16b3ab4d-0.x86_64
 Problem 5: conflicting requests
  - nothing provides module(perl:5.26) needed by module perl-FCGI:0.78:8010020191114031513:16b3ab4d-0.x86_64
 Problem 6: conflicting requests
  - nothing provides module(perl:5.26) needed by module perl-YAML:1.24:8010020191114031501:a5949e2e-0.x86_64

我能够通过以下指令解决了这个问题。

$ sudo dnf module enable perl:5.26

我的感想和个人想法

CentOS的支持期限很长,但不推荐进行操作系统的升级。相反,Ubuntu等操作系统设计了长期支持(LTS)版本,可以进行更新。

我不明白为什么要安装旧版本的操作系统,明明想要长期使用。我认为这是最初的罪魁祸首。

给出参考

    • CentOS7 to CentOS8へのアップグレードについて https://www.tecmint.com/upgrade-centos-7-to-centos-8/

dnfの参考 https://www.atmarkit.co.jp/ait/articles/2001/10/news020.html

perl の依存関係のエラーの参考 https://tech.godpress.net/?p=1168

bannerAds