ホーム » 技術 » AlmaLinuxを試してみる

AlmaLinuxを試してみる

2020年12月のCentOSを取り巻く環境が大きく変化するというニュースは非常に大きいものだったが、これまで本ブログでは取り上げてこなかった。個人ユースではStreamに移行してもなんとかなるかなという程度の問題だからだ。それにサポート終了までの猶予もまだある(あんまりないが)。それまでに状況を見極めてもいいんじゃないかと思っていた。案の定、現在に至るまでにいろいろなことが起こっていて選択肢は広がっている印象だ。

さて表題のAlmaLinuxなのだが、これはRHELのコミュニティ版ディストリビューションで、CentOSのポジションを引き継ぐ目的で開発されたものだ。

個々に書かれている特徴をかいつまんでみると

  • CentOSと同じRHEL互換OSで、1対1に対応している
  • ほとんど手間をかけずにCentOSから移行できる
  • 無償サポートで、2029年まではコミットする

ということで、CentOS8が反故にした約束をそのまま引き継ぎますよ、ということだ。

AlmaLinuxはなんといっても、ごく短期間のうちにリリースまで持ってきた開発力が注目されている。正式リリースは2021年3月30日、CentOSの発表からほとんど4か月間でリリースしている。これってちゃんと動くのかな? と疑問に思わないでもない……ということで、本稿ではそれを確かめてみたい。

インストールの概要

インストールの対象はさくらのクラウド・サーバとする。素のサーバを用意しISOイメージからブートしてインストールするだけだと特に面白みはないので、今回はkickstartでオートマチックにインストールする手順を示そうと思う。この場合kickstartファイルを置くためにwebサーバを別途用意する必要がある。

ISOイメージファイルの準備

まずブート用のISOイメージを準備する。さくらのクラウドの場合、2021年5月時点ではまだAlmaLinuxがラインアップされていないので、自分のISOイメージとして用意しなければならない。リンクはこちら。

いったんダウンロードして、そのあとクラウドのISOイメージとしてアップロードし、サーバの新規作成の時にブランクディスク+ISOイメージブートという具合に指定すればよい。

kickstartファイル

とりあえず用意したkickstartファイルは以下の通り。あんまり練っていないので、あくまでも参考に留めておいてほしい。また各行の意味とか、具体的な使い方は

をご覧いただきたい。

#version=ALMA
ignoredisk --only-use=vda
# System bootloader configuration
bootloader
# Use text mode install
text
# Use CDROM installation media
cdrom
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --hostname=localhost.localdomain
# Root password
# replase
# perl -e 'print "rootpw --iscrypted ", crypt("mypasswd", "\$6\$".substr(crypt(rand(1), "\$6\$"), 10, 16)), "\n";'
rootpw --iscrypted xxxxxxxxxxxxxxxxxxxxxxxxx
# SELinux configuration
selinux --disabled
# Run the Setup Agent on first boot
firstboot --enable
# Do not configure the X Window System
skipx
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Tokyo --isUtc --ntpservers=ntp1.sakura.ad.jp
# Disk partitioning information
part biosboot --fstype="biosboot" --onpart=vda1
part swap --fstype="swap" --onpart=vda2
part / --fstype="ext4" --onpart=vda3 --label=root
# repos
# Services
services --enabled=firewalld,chronyd,nftables --disabled=auditd,kdump,messagebus,wpa_supplicant,abrt-ccpp,abrt-oops,abrt-vmcore,abrt-xorg,abrtd,avahi-daemon,lvm2-lvmetad.socket,lvm2-monitor,smartd,ntpdate

#poweroff

%pre
sgdisk -Z -n 1::+1M -n 2::+4G -n 3:: -t 1:ef02 -t 2::8200 -c 1:"BIOS boot partition" -c 2:"Linux swap" -c 3:"Linux filesystem" /dev/vda
%end

%post --log=/root/post-ks.cfg
set -x

dnf -y clean all
dnf -y install epel-release
dnf -y install fail2ban
dnf -y update

# network
cat <<EOL >/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO="dhcp"
ONBOOT="yes"
EOL
rm -f /etc/sysconfig/network-scripts/ifcfg-ens3

# rc.local
sed -i -e 's/After=network.target/After=network-online.target/' /usr/lib/systemd/system/rc-local.service

cat <<EOL >> /etc/sysctl.conf

# Do not accept RA
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.eth0.accept_ra=0
EOL

# sshd
sed -i \
  -e '/^#MaxSessions 10$/a #AllowUsers\nDenyUsers toor administrator administrateur admin adm test guest info mysql user oracle' \
  -e '/^GSSAPIAuthentication yes$/s/^/#/' \
  -e '/^GSSAPICleanupCredentials yes$/s/^/#/' /etc/ssh/sshd_config

# fail2ban
cat <<EOL >/etc/fail2ban/jail.d/local.conf
[DEFAULT]
banaction = firewallcmd-ipset
backend = systemd

[sshd]
enabled = true
banaction = nftables-multiport
banaction_allports = nftables-allports
EOL

# postfix
sed -i -e '/^#mynetworks_style = host/s/^#//' /etc/postfix/main.cf

# grub
sed -i '/^GRUB_CMDLINE_LINUX/s/"$/consoleblank=0 net.ifnames=0 biosdevname=0"/' /etc/default/grub
grub2-mkconfig -o /etc/grub2.cfg

# dnf
echo 'fastestmirror=true' >> /etc/dnf/dnf.conf

# cleanup batch
cat <<EOL > /root/clean.sh
#!/bin/sh
rm -rf ../tmp/*
rm -rf /var/log/anaconda*
rm -f ./*.cfg ./clean.sh
EOL
%end

%packages
@^minimal-environment
@Development Tools
@Standard
cloud-utils-growpart
langpacks-ja
postfix
gdisk
traceroute
-cockpit
-microcode_ctl

%end

%addon com_redhat_kdump --disable --reserve-mb='128'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

rootパスワードを指定しているところがあるのだが、ここは必ず変更する必要がある。たとえばPerlのスクリプトで

perl -e 'print "rootpw --iscrypted ", crypt("mypasswd", "\$6\$".substr(crypt(rand(1), "\$6\$"), 10, 16)), "\n";'

生成した行で置き換えてほしい。さもないとログインできないサーバができてしまう。

ブートからインストールまで

ISOイメージとKickstartファイルが用意できたらサーバを作成する。

ISOイメージからブートすると、AlmaLinuxはインストールモードで起動する。画面はこんな感じになる。

ISOイメージブート
起動画面でTABを押したところ

60秒のカウントダウンが始まるが、そのままリターンキーを押すと通常の会話的インストーラが起動してしまう。今回はKickstartを使いたいのでTABキーを押してコマンドオプションを指定するモードにする。そうしておいて

inst.ks=<kickstartファイルのURL>

という具合に追記する。

KickstartファイルへのURLを追記する

リターンキーを押すとインストールが始まる。

メディアチェック画面
ディスク初期化中
完了したところ

完了したらリターンキーを押すとリブートする。

CentOS8との比較

こうしてインストールしたAlmaLinuxは、CentOS8と比較してみても、一部のメッセージ以外は違いがほとんど分からない。これまで「CentOS Linux release 8.3.2011」となっていたものが「AlmaLinux 8.3 (Purple Manul)」に変わったように見えるぐらいだ。おそらく普通に使うだけなら違いを意識することはほとんどないと思われる。そこでここではインストールされたパッケージの差分を取ってみて、具体的な違いがどの辺にあるのかを調べてみる。

比較対象は;

  • さくらのクラウドのCentOS8アーカイブ(8.2.2004)
  • 上述の手順でインストールしたAlmaLinux(CentOS8アーカイブになるべく寄せてある)
    【2021/5/26追記】原稿を書いていたときにはなかったAlmaLinuxのパブリックアーカイブが追加されました

これをインストール後にupdateして最新にした状態で以下のようにパッケージリストを作り、各々のリストを比較する。

rpm -qa | sed 's/-[0-9].*//' | sort >cent
rpm -qa | sed 's/-[0-9].*//' | sort >alma
comm cent alma ...

sedはバージョン番号を落としてパッケージ名だけにしている。そのうえでcommを使って共通項と各ディストリ固有のパッケージを選別している。

両者に共通732
CentOS811
AlmaLinux9

CentOS8にあったもの

CentOS8にのみあったものは

  • centos-linux-release, centos-gpg-keys, centos-linux-repos
  • esmtp, libesmtp
  • fipscheck, fipscheck-lib
  • grub2-tools-efi
  • libmodulemd1

だった。

AlmaLinuxにあったもの

  • almalinux-release
  • rhn関連パッケージ(python3-rhn-check, python3-rhn-setup, rhn-check, rhnlib, rhnsd, rhn-setup)
  • usermode

rhnがさくらのクラウドのCentOS8アーカイブに入っていない理由が分からなかった。なくても問題ないという判断なのかもしれない。usermodeも同様だ。

これらの差異はその気になれば全部埋められそうなので、深刻な問題にはならないのではないかと思う。

パッケージのバージョンの差

実はパッケージのバージョンには微妙な差がある。バージョン番号の差があるパッケージを抽出してみるとその数は70個あった。これらの中には、たとえば「gcc-8.3.1-5.1.el8.alma.x86_64」のようなAlmaLinux固有の番号が付いているものを含んでいるが、AlmaLinuxの方がより新しいバージョンのパッケージを採用しているために差異が生じているという状況だった。

移行ツール

AlmaLinuxは、CentOS8や他のディストリビューションからAlmaLinuxへ移行するためのバッチを提供している。

利用方法は該当ページに詳しく記載されているが、手順は簡単でバッチをダウンロードして実行するだけだ。これも試しにやってみた。

インストール直後の素のCentOS8については、10分間程度待つだけで簡単に移行が完了した。しかし本サイトを収容しているサーバ(CentOS8で動いている)をコピーしたものをマイグレーションしてみたところ、バッチが中途半端なところで終了してしまい移行は失敗してしまった。その後リカバリ手段がなく、強制的にAlmaLinuxにすることもCentOS8に戻すこともできなくなってしまったので、コピーディスクは破棄せざるを得なくなった。

このような事態はツールに十分に警告がなされているので、そういう意味では問題がないが、やはりバックアップは必ず取って実行すること、破損の危険はやはりあるということ、もしマイグレーションするなら、自分の手で行った方がよさそうだということは言えると思う。ただバッチでどういうことをやっているかの解析をやっていないので、具体的に手動でマイグレーションするにはどうしたらいいのかの手順は本稿では示せない。

まとめ

AlmaLinuxは、CentOSの代替としては非常によくできたディストリビューションだと思う。さくらのクラウドのサポート予定についてはまだ何も発表がないが、正式採用されたら全部切り替えようと思っている。

世間での評判も悪くないようだし、今後順調に伸びてくれたらありがたいなと考えている。本稿もその一助になればなあという気持ちで書いている。ただ、CentOSがあのような事態になってしまった理由を思うと、AlmaLinuxの将来も必ずしも明るいとは言えない。Communityが維持できなければ同じ騒動が繰り返される可能性はあり得る。その時ユーザたちが同じ罵倒を浴びせかけるようなことがなければいいのだが、と思わないでもない。