CentOS 8 の代替になるかもしれない AlmaLinux が GA リリースとのことなので、とりあえずインストールしてみました。
KiskStart でインストール
KVM with libvirt へ virt-install
で KiskStart でインストールしてみます。
手順は CentOS 8 とまったく同じで、ISO やリポジトリの URL が異なるのみです。
イメージのための論理ボリュームを作成します。
lvcreate vg0 -L 5G -n vm.almalinux-8
イメージをダウンロードしておきます。
ここでは AlmaLinux-8.3-x86_64-boot.iso
をダウンロードしていますが AlmaLinux-8.3-x86_64-minimal.iso
とかのほうがインストールは早くなります。
cd /iso wget http://ftp.iij.ad.jp/pub/linux/almalinux/8.3/isos/x86_64/AlmaLinux-8.3-x86_64-boot.iso
キックスタートファイル ks.cfg
を作成します。AlmaLinux-8.3-x86_64-boot.iso
なので cdrom ではなく url を指定する必要があります。
#version=RHEL8 cmdline url --url=http://ftp.iij.ad.jp/pub/linux/almalinux/8.3/BaseOS/x86_64/os/ lang en_US.UTF-8 keyboard --vckeymap=jp --xlayouts=jp timezone Asia/Tokyo --isUtc network --activate --device=link --noipv6 --bootproto=dhcp zerombr clearpart --all --initlabel bootloader --location=mbr --boot-drive=vda part / --label=root --grow --asprimary --ondisk=vda rootpw --plaintext password skipx selinux --disabled firewall --disabled firstboot --disabled services --enabled=chronyd --disabled=kdump,auditd poweroff %packages @^minimal-environment %end %post --log=/root/ks-post.log set -eux # authorized_keys mkdir -p /root/.ssh curl -fsSL https://github.com/ngyuki.keys > /root/.ssh/authorized_keys chown -R root: /root/.ssh chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys %end
virt-install
で OS をインストールします。
virt-install \ --name almalinux-8 \ --hvm \ --virt-type kvm \ --ram 2048 \ --vcpus 1 \ --arch x86_64 \ --os-type linux \ --os-variant rhel8.2 \ --boot hd \ --disk /dev/vg0/vm.almalinux-8 \ --network network=default \ --graphics none \ --serial pty \ --console pty \ --location /iso/AlmaLinux-8.3-x86_64-boot.iso,kernel=isolinux/vmlinuz,initrd=isolinux/initrd.img \ --initrd-inject ks.cfg \ --extra-args "inst.ks=file:/ks.cfg inst.stage2=cdrom: console=ttyS0 net.ifnames=0 biosdevname=0" \ --noreboot
ゲストを起動してコンソールに接続します。
virsh start almalinux-8
virsh console almalinux-8
root でログインして /etc/*-release
を見てみます。
ll /etc/*-release #=> -rw-r--r--. 1 root root 37 Mar 25 02:36 /etc/almalinux-release #=> lrwxrwxrwx. 1 root root 17 Mar 25 02:36 /etc/centos-release -> almalinux-release #=> lrwxrwxrwx. 1 root root 21 Mar 25 02:36 /etc/os-release -> ../usr/lib/os-release #=> lrwxrwxrwx. 1 root root 17 Mar 25 02:36 /etc/redhat-release -> almalinux-release #=> lrwxrwxrwx. 1 root root 17 Mar 25 02:36 /etc/system-release -> almalinux-release cat /etc/almalinux-release #=> AlmaLinux release 8.3 (Purple Manul)
AlmaLinux 8.3 がインストールできました。
CentOS からインプレースでマイグレーション
AlmaLinux のサイトに CentOS からインプレースでマイグレーションする方法が載っていたので試してみます。
とりあえずマイグレーション元の CentOS を作ります。
virt-builder centos-8.2 \ --output /var/lib/libvirt/images/almalinux-from-centos.img \ --arch x86_64 \ --hostname almalinux-from-centos \ --root-password password:password \ --timezone Asia/Tokyo \ --selinux-relabel virt-install \ --name almalinux-from-centos \ --hvm \ --virt-type kvm \ --ram 2048 \ --vcpus 1 \ --arch x86_64 \ --os-type linux \ --os-variant centos8 \ --boot hd \ --disk path=/var/lib/libvirt/images/almalinux-from-centos.img \ --network network=default \ --graphics none \ --serial pty \ --console pty \ --import
今の時点の virt-builder
だと CentOS 8.2 までしか入れられなかったので root でログインして dnf update
します。
dnf update -y cat /etc/centos-release #=> CentOS Linux release 8.3.2011 reboot
再起動後、再びログインして下記の手順の通りスクリプトをダウンロードして実行します。
curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh
sudo bash almalinux-deploy.sh
次のようなメッセージがダラーっと流れてきます(端折っているところは dnf の出力)
Check root privileges OK Check Secure Boot disabled OK Check centos-8.x86_64 is supported OK Download RPM-GPG-KEY-AlmaLinux OK Import RPM-GPG-KEY-AlmaLinux to RPM DB OK Download almalinux-release package OK Verify almalinux-release package OK Remove centos-linux-release package OK Remove centos-gpg-keys package OK Remove centos-linux-repos package OK ...snip... Install almalinux-release package OK ...snip... Run dnf distro-sync -y OK
うーん?
almalinux-deploy.sh
を見た感じ、distro-sync
の後で grub2-mkconfig
を実行して Migration to AlmaLinux is completed
と表示して終わるはずなんですけど、なぜかここで終了しています。
sudo bash -x almalinux-deploy.sh
で実行してみたところ、どうやら下記でコケていたようです。
restore_issue() { for file in /etc/issue /etc/issue.net; do [ -f "${file}.bak" ] && mv ${file}.bak ${file} done }
issue も登録されていました(issue の issue ですね)。
この書き方だと [ -f "${file}.bak" ] && mv ${file}.bak ${file}
が関数の最後の実行になるので /etc/issue.net.bak
が存在しなければ関数の終了コードが非0になります。そしてスクリプトの先頭で set -euo pipefail
と書かれているのでスクリプトは終了します。
distro-sync
の前に対になる backup_issue
が実行されていますが・・
backup_issue() { for file in $(rpm -Vf /etc/issue | cut -d' ' -f4); do if [[ ${file} =~ "/etc/issue" ]]; then cp "${file}" "${file}.bak" fi done }
要するに /etc/issue
を含むパッケージ(centos-release
)に含まれるファイルのうち /etc/issue
というパターンを含むファイルがもし変更されていれば distro-sync
の前後で退避→復元する、という処理のようなのですが、そもそも /etc/issue
や /etc/issue.net
が変更されていなければ /etc/issue.bak
などが作成されることもないのでコケそうです。
あらかじめ /etc/issue
と /etc/issue.net
を適当な内容に変更しておけば OK? です。
echo . >> /etc/issue echo . >> /etc/issue.net sudo bash -v almalinux-deploy.sh
または、この後の処理は grub2-mkconfig
だけなので、これだけ手動でやっておけば大丈夫だと思います。
grub2-mkconfig -o /boot/grub2/grub.cfg #=> Generating grub configuration file ... #=> done cat /etc/redhat-release #=> AlmaLinux release 8.3 (Purple Manul) sudo grubby --info DEFAULT | grep AlmaLinux #=> title="AlmaLinux (4.18.0-240.22.1.el8_3.x86_64) 8.3 (Purple Manul)"