この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

[クラウド帳票エンジンDocurain]

CentOS7からAlmaLinux8へお引っ越し

手元のCentOS7(2009)をAlmaLinux8へ移行しました。

CentOS7 -> CentOS8 -> AlmaLinux8 というルートです。

で、そもそもCentOS7→CentOS8へのアップグレードは公式に提供されていないので強引に突破します。 基本的な手順はこちらを参照しています。

https://techviewleo.com/how-to-migrate-from-centos-7-to-rocky-linux-8/

上記の手順で、実行中のカーネルのファイルすら消しにかかるところなども面白い。動くんだな…*1

下記の

dnfが固まるので、kill -9で止める

というコメントのところなども強引さが際立つ箇所かと。まあ動けば良いのです。

え?ギリギリまでCentOS7で粘って、EOLが近くなったら移行すれば良いって??

違うんですねーそれが。

この手の移行手段はバージョンが変わったりすると動かなくなるし、必要なファイルがいつの間にかダウンロードできなくなったりするため、

「動く間にやっておく」

ことが重要なんです。

(CentOS6 -> 7 への移行を先送りして、いざやってみようとしたら動かなかったという自分自身が痛い目を見たという自戒を込めて。。)

# CentOS7(2009)を想定

yum install epel-release -y

yum install -y yum-utils rpmconf --enablerepo=epel

rpmconf -a

yum install -y dnf

# バイバイyum
dnf remove -y yum yum-metadata-parser

rm -Rf /etc/yum

dnf makecache

dnf upgrade -y

dnf install http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/{centos-linux-repos-8-2.el8.noarch.rpm,centos-linux-release-8.4-1.2105.el8.noarch.rpm,centos-gpg-keys-8-2.el8.noarch.rpm}

# /etc/yum.repo.d/epelの内容をCentOS8に書き換え
dnf upgrade -y epel-release

rpm -e `rpm -q kernel` --nodeps

rpm -e --nodeps sysvinit-tools

dnf remove dracut-netrowk vim-minimal vim-common

# sudoも消されるので入れ直して、visudoで元に戻す
dnf install sudo

# アップグレード開始!
dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false --disablerepo=appstream distro-sync

# ...dnfが固まるので、別ターミナルでログインしてkill -9で止める
killall -9 dnf

# RPMのDBが破損するので修復
rpm --rebuilddb

# もう一度アップグレード!
dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false --disablerepo=appstream distro-sync

# うまくいったら再起動
reboot

# (再ログイン後)
dnf update && dnf upgrade

# MariaDBを公式リポジトリからインストールし直し
dnf module disable mariadb
dnf install libpmem socat
dnf install --repo=mariadb galera-4
dnf install --repo=mariadb MariaDB-server
systemctl enable mariadb

# AlmaLinuxへのアップグレード
curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh

# almalinux-deploy.shの`yum`を手動で`dnf`へ置換してから実行
bash almalinux-deploy.sh

*1:inodeまで消えるわけではないから動くんだろうけども