AlmaLinuxを使ってみた（前編）

# 1. はじめに

2020年12月の「CentOSからCentOS Streamへ移行」アナウンス以降、周辺の動きが激しくなっている。

* Rocky LinuxやAlmaLinuxなど、CentOSの後継を目指すプロジェクトの開発意向表明
* Red Hat Developer Programの無料枠拡大
* Oracle Linuxの積極的なプロモーション
* 各種ベンダーのCentOS 8延長サポートサービス

このような状況のなか、AlmaLinuxの安定版が2021/03/30に正式リリースされた。そこで、AlmaLinuxを紹介すると共に、少しさわってみようと思う。

* [ZDNet Japan: CloudLinux、「CentOS」の代替OS「AlmaLinux」の一般提供を開始](https://japan.zdnet.com/article/35168619/)」
* [AlmaLinux OS Stable Release is live!](https://almalinux.org/blog/almalinux-os-stable-release-is-live/)

予定している内容は次のとおり。

* AlmaLinuxとはどんなものなのか？
* CentOSとの違いは？
* ツールを使った移行
* 出来や将来性は？


# 2. AlmaLinuxとは

[AlmaLinux](https://almalinux.org/)とは、RHEL互換のLinux OSで、CentOS 8の後継を目指しているプロジェクトだ。[CloudLinux](https://www.cloudlinux.com/)を中心としたコミュニティーが開発している。AlmaLinuxのトップページ冒頭には次のように書かれている。

>Welcome to AlmaLinux OS, a new RHEL fork from the team at CloudLinux. A free Linux OS for the community, developed in close co-operation with the community.

また、次の3つのコンセプトが紹介されている。

* In partnership with the community.
* Matches the current RHEL release 1:1.
* Always free, always open source.


CloudLinuxは有名ではないが、ホスティングサービス向けでは実績のあるLinux OSだ。日本でもGMOなどが提供するVPS（仮想専用サーバー）などで使われている。強力なリソース制限機能や隔離機能が特徴だ。なお、CloudLinuxもRHEL互換OSの一つである。

AlmaLinuxの[トップページ](https://almalinux.org/)にはローンチイベントのYouTube動画が紹介されている。これを見ると、現時点でも相当のコミュニティーを築けていることが分かる。

* AlmaLinux OSプロジェクトに対して、CloudLinux社は100万ドルのスポンサーシップをコミットメント
* AlmaLinuxは、少なくとも2029年までサポートを保証（RHEL8と同様）

# 3. AlmaLinuxを使ってみよう

AlmaLinuxのおもな情報ソースは以下のとおり。

* [AlmaLinuxオフィシャルサイト](https://almalinux.org/)
* [GitHub](https://github.com/AlmaLinux/wiki)
* [Reddit（SNS）](https://www.reddit.com/r/AlmaLinux/)

ISOイメージでインストールすることもできるし、移行ツールでCentOSやRHEL、Oracle Linuxから移行することもできる。それぞれについて調べてみよう。

<font color="blue">**ヒント**：AwSではAMIが提供されている。</font>
　→[AlmaLinux OS Amazon Web Services AMIs](https://wiki.almalinux.org/cloud/AWS.html#contributing)

### 3.1. ISOイメージからインストールする

今回はVirtualBoxでAlmaLinuxをインストールする。インストール手順はCentOSと同じなので手順は説明しないが、GUIインストーラーのAnacondaはAlmaLinux用に修正されている。GUIの修正は地味に面倒なので、素早い対応が感じられる。

使用したISOイメージ：[AlmaLinux-8.3-x86_64-dvd.iso](https://repo.almalinux.org/almalinux/8/isos/x86_64/)
![almalinux_inst01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266049/83e00335-df29-c588-38cf-3074f9ea2b5e.jpeg)
ロゴもAlmaLinuxになっている。
![almalinux_inst02.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266049/297527ca-7104-d695-0d49-50effbc918a8.jpeg)
インストールが完了したあとのデスクトップ画面。
![almalinux_inst15.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266049/c3c3110a-a7fd-cf0a-555f-dd3bc67b5c6b.jpeg)

### 3.2. AlmaLinuxをさわってみる

インストールが終わったら、いくつか確認してみよう。

### 3.2.1. /etc/xxx-release

1. /etc/almalinux-releaseが追加されている。

```shell-session
$ cat /etc/almalinux-release
AlmaLinux release 8.3 (Purple Manul)
```

2./etc/centos-releaseの内容も同じになっている。

```shell-session
$ cat /etc/centos-release
AlmaLinux release 8.3 (Purple Manul)
```

3.同じになっている理由は、/etc/centos-releaseと/etc/redhat-releaseは共に/etc/almalinux-releaseを参照しているためである。

```shell-session
$ ls -l /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 ★AlmaLinuxを参照
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 ★AlmaLinuxを参照
lrwxrwxrwx. 1 root root 17 Mar 25 02:36 /etc/system-release -> almalinux-release ★AlmaLinuxを参照
```

4.ブートメニューもAlmaLinuxになっている。

```shell-session
$ sudo grubby --info DEFAULT | grep AlmaLinux
title="AlmaLinux (4.18.0-240.15.1.el8_3.x86_64) 8.3 (Purple Manul)"
```

### 3.2.2. RPMパッケージ

CentOSと同じくRHEL互換なので基本的には同じハズだが、RPMパッケージがどのようになっているか確認する。

1. kernelパッケージの情報は以下のとおり。

```shell-session
$ rpm -qi kernel
Name        : kernel
Version     : 4.18.0
Release     : 240.el8
Architecture: x86_64
Install Date: Tue Apr  6 02:30:34 2021
Group       : System Environment/Kernel
Size        : 0
License     : GPLv2 and Redistributable, no modification permitted
Signature   : RSA/SHA256, Fri Jan 15 13:14:07 2021, Key ID 51d6647ec21ad6ea
Source RPM  : kernel-4.18.0-240.el8.src.rpm
Build Date  : Fri Jan 15 05:12:50 2021
Build Host  : build.cloudlinux.com　　★cloudlinuxのサーバーでビルドしている
Relocations : (not relocatable)
Packager    : AlmaLinux Packaging Team <packager@almalinux.org>
Vendor      : AlmaLinux　　　　　　　　★VenderタグはAlmaLinux
URL         : http://www.kernel.org/
Summary     : The Linux kernel, based on version 4.18.0, heavily modified with backports
Description :
This is the package which provides the Linux kernel for AlmaLinux.
★省略
```

2.Venderタグは、RPMをビルドした会社や人を区別するのに利用できる。どのようなものがあるか調べるとAlmaLinuxとCloudLinuxの2種類で、約8割がCloudLinuxだった。

```shell-session
$ rpm -qa --qf '%{VENDOR}\n' | sort | uniq
AlmaLinux
CloudLinux
```

3.パッケージ名はRHEL/CentOSと同じだ。

```shell-session
$ rpm -qa | grep kernel-4
kernel-4.18.0-240.el8.x86_64
kernel-4.18.0-240.15.1.el8_3.x86_64
```

4.ただし、アーキテクチャ（x86_64）の前に**alma**が付いているパッケージもある。

```shell-session
# rpm -qa | grep alma.x86 | sort
bluez-5.52-1.el8.alma.x86_64
bluez-libs-5.52-1.el8.alma.x86_64
bluez-obexd-5.52-1.el8.alma.x86_64
firefox-78.9.0-1.el8_3.alma.x86_64
fwupd-1.4.2-4.el8.alma.x86_64
grub2-pc-2.02-90.el8_3.1.alma.x86_64
grub2-tools-2.02-90.el8_3.1.alma.x86_64
grub2-tools-extra-2.02-90.el8_3.1.alma.x86_64
grub2-tools-minimal-2.02-90.el8_3.1.alma.x86_64
initial-setup-0.3.81.6-1.el8.alma.x86_64
initial-setup-gui-0.3.81.6-1.el8.alma.x86_64
libgcc-8.3.1-5.1.el8.alma.x86_64
libgomp-8.3.1-5.1.el8.alma.x86_64
libstdc++-8.3.1-5.1.el8.alma.x86_64
platform-python-3.6.8-31.el8.alma.x86_64
python3-libs-3.6.8-31.el8.alma.x86_64
```

5.changelogを見る限りは、軽微な独自パッチを適用しているものにalmaが付いているようだ。

```shell-session
$ rpm -q --changelog libgcc-8.3.1-5.1.el8.alma.x86_64 | head -n 5
* Wed Jan 20 2021 Sergey Fokin <sfokin@cloudlinux.com> 8.3.1-5.1.alma
- change bugurl to http://bugs.almalinux.org/

* Tue May 12 2020 Marek Polacek <polacek@redhat.com> 8.3.1-5.1
- consider negative edges in cycle detection (#1817991, PR gcov-profile/91601)
```

### 3.2.3. リポジトリ

1. デフォルトで有効なリポジトリは以下のとおり。CentOSと同じである。

```shell-session
$ dnf repolist
repo id                          repo name
appstream                        AlmaLinux 8 - AppStream
baseos                           AlmaLinux 8 - BaseOS
extras                           AlmaLinux 8 - Extras
powertools                       AlmaLinux 8 - PowerTools
```

2.新しいパッケージがリリースされているか確認してみよう。むむっ、ミラーサイト！　それは後ほど。

```shell-session
$ sudo dnf check-update
最速のミラーを確定しています (66 hosts)..     ] ---  B/s |   0  B     --:-- ETA
```

3.以下のアップデート可能なパッケージがリリースされている。

```shell-session
$ sudo dnf check-update
bpftool.x86_64                         4.18.0-240.15.1.el8_3           baseos
firefox.x86_64                         78.9.0-1.el8_3.alma             appstream
gnu-free-fonts-common.noarch           20120503-18.el8.0.1             appstream
gnu-free-mono-fonts.noarch             20120503-18.el8.0.1             appstream
gnu-free-sans-fonts.noarch             20120503-18.el8.0.1             appstream
gnu-free-serif-fonts.noarch            20120503-18.el8.0.1             appstream
kernel.x86_64                          4.18.0-240.15.1.el8_3           baseos
kernel-core.x86_64                     4.18.0-240.15.1.el8_3           baseos
kernel-modules.x86_64                  4.18.0-240.15.1.el8_3           baseos
kernel-tools.x86_64                    4.18.0-240.15.1.el8_3           baseos
kernel-tools-libs.x86_64               4.18.0-240.15.1.el8_3           baseos
openssl.x86_64                         1:1.1.1g-15.el8_3               baseos
openssl-libs.x86_64                    1:1.1.1g-15.el8_3               baseos
python3-perf.x86_64                    4.18.0-240.15.1.el8_3           baseos
```

4.アップデートするときは、次のコマンドでアップデートできる。しかし、調査の都合上ここではアップデートしない。

```shell-session
$ sudo dnf distro-sync
```

### 3.2.4. アップデート状況

CentOSとAlmaLinuxのアップデート状況を比較してみよう。

1. このCentOS 8のVMでは、この時点で新しく提供されているパッケージはopensslだった。当然、もっとたくさんのパッケージをインストールしているときには、異なる可能性がある。

```shell-session:CentOS8で実行
$ sudo dnf check-update
openssl.x86_64                        1:1.1.1g-15.el8_3                   baseos
openssl-libs.x86_64                   1:1.1.1g-15.el8_3                   baseos
```

2.Buildtimeは「Mar 30 14:35:59 2021」になっている。

```shell-session:CentOS8で実行
$ sudo dnf -v info openssl-1.1.1g-15.el8_3
Available Packages
Name         : openssl
Epoch        : 1
Version      : 1.1.1g
Release      : 15.el8_3
Architecture : x86_64
Size         : 707 k
Source       : openssl-1.1.1g-15.el8_3.src.rpm
Repository   : baseos
Packager     : CentOS Buildsys <bugs@centos.org>
Buildtime    : Tue Mar 30 14:35:59 2021 ★
Summary      : Utilities from the general purpose cryptography library with TLS
             : implementation
URL          : http://www.openssl.org/
License      : OpenSSL and ASL 2.0
Description  : The OpenSSL toolkit provides support for secure communications
             : between machines. OpenSSL includes a certificate management tool
             : and shared libraries which provide various cryptographic
             : algorithms and protocols.
```

3.同様にAlmaLinuxでも調べてみよう。次のコマンドを実行すると、現在インストールされているopensslが`1.1.1g-12.el8_3`で、新しい`1.1.1g-15.el8_3`も提供されていることが分かる。

```shell-session:AlmaLinuxで実行
$ sudo dnf list openssl
Last metadata expiration check: 1:56:42 ago on Tue Apr  6 06:24:41 2021.
Installed Packages
openssl.x86_64                     1:1.1.1g-12.el8_3                     @baseos
Available Packages
openssl.x86_64                     1:1.1.1g-15.el8_3                     baseos
```

4.さらにBuildtimeを調べると「Mar 30 13:24:53 2021」で、CentOSよりも早い？

```shell-session:AlmaLinuxで実行
$sudo dnf -v info openssl-1.1.1g-15.el8_3
Available Packages
Name         : openssl
Epoch        : 1
Version      : 1.1.1g
Release      : 15.el8_3
Architecture : x86_64
Size         : 706 k
Source       : openssl-1.1.1g-15.el8_3.src.rpm
Repository   : baseos
Packager     : AlmaLinux Packaging Team <packager@almalinux.org>
Buildtime    : Tue Mar 30 13:24:53 2021 ★
Installed by : root <root>
Summary      : Utilities from the general purpose cryptography library with TLS
             : implementation
URL          : http://www.openssl.org/
License      : OpenSSL and ASL 2.0
```

5.各ディストリビューションを比較した結果は以下のとおり。時間が早い順に並べてみた。AlmaLinux優秀！　すべてのパッケージを調べていないので、参考情報に過ぎないけれどね。

| Linux OS | Buildtime: openssl-1.1.1g-15.el8_3 |
|:-:|:-:|
| Red Hat Enterprise Linux  | Fri Mar 26 01:51:51 2021  |
| Oracle Linux  | Tue Mar 30 04:41:44 2021  |
| AlmaLinux  | Tue Mar 30 13:24:53 2021  |
| CentOS  | Tue Mar 30 14:35:59 2021  |


### 3.2.5. ミラーサイト

1. ミラーサイトが気になったので調べてみる。ミラーサイトとはRPMパッケージのリポジトリを提供するサイトのことで、世界各地に分散配置することで高速化を図れる。

```shell-session:/etc/yum.repos.d/almalinux.repo
[baseos]
name=AlmaLinux $releasever - BaseOS
mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/baseos　★この行
# baseurl=https://repo.almalinux.org/almalinux/$releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
fastestmirror=1
```

2.現在のミラーサイトは`$releasever`を`8`に置き換えた以下のコマンドで確認できる。

```shell-session
curl 'https://mirrors.almalinux.org/mirrorlist/8/baseos'
```

```shell-session:結果の一部
http://mirrors.ptisp.pt/almalinux/8/BaseOS/$basearch/os/
http://mirror.espoch.edu.ec/almalinux/8/BaseOS/$basearch/os/
http://mirror.dk.team.blue/almalinux/8/BaseOS/$basearch/os/
http://mirror.hosting.com.tr/almalinux/8/BaseOS/$basearch/os/
http://mirror-almalinux.grupocg.cl/almalinux/8/BaseOS/$basearch/os/
```

3.ミラーサイトの総数は現在66（2021/4/6）。ミラーサイトのクエリは、総数ではなく遅延が少ないサイトだけ表示されるケースもあるが、今回はほぼすべて表示されているようだ。

```shell-session
$ curl -s 'https://mirrors.almalinux.org/mirrorlist/8/baseos' | wc -l
66
```

4.日本国内は2サイトだと思ったら、[AlmaLinux Mirrorsページ](https://mirrors.almalinux.org/)を見ると5サイトあった。それに対してCentOSは日本国内8サイトだ（海外は相当ある）。~~高速なIIJがあるのはありがたいがRIKENは無かった。~~（2021/4/15修正）RIKENも追加され、日本は計8サイトになった。

```shell-session
$ curl -s 'https://mirrors.almalinux.org/mirrorlist/8/baseos' | grep jp
http://ftp.iij.ad.jp/pub/linux/almalinux/8/BaseOS/$basearch/os/
http://mirror-jp.almalinux.id/almalinux/8/BaseOS/$basearch/os/
```

### 3.2.6. リポジトリのupdateinfo.xml提供

商用ディストリビューションでは、アップデートパッケージについて、セキュリティレベルや重要度などの修正情報を提供している。そのため`yum update-minimal --sec-severity=critical,important --bugfix -y`のように最小限のパッケージをアップデートできる。

CentOSではパッケージの修正情報が提供されていなかったため、この機能は使えなかった。ところがAlmalinuxは使えるようだ。スゴい！

```shell-session:修正情報が提供されているので表示できる
$ yum updateinfo list
ALBA-2021:1099 bugfix         NetworkManager-1:1.26.0-14.el8_3.x86_64
ALBA-2021:1099 bugfix         NetworkManager-libnm-1:1.26.0-14.el8_3.x86_64
ALBA-2021:1099 bugfix         NetworkManager-team-1:1.26.0-14.el8_3.x86_64
ALSA-2021:1093 Important/Sec. bpftool-4.18.0-240.22.1.el8_3.x86_64
```

パッケージのアップデート情報はYumリポジトリの`repodata/xxxxxx-updateinfo.xml.gz`で提供されている。そのため、次のコマンドでも判断できる。

```shell-session:CentOS8：何も表示されない
$ curl -s 'http://ftp.iij.ad.jp/pub/linux/centos/8/BaseOS/x86_64/os/repodata/' | grep updateinfo
```

```shell-session:AlmaLinux：表示される
$ curl -s 'http://ftp.iij.ad.jp/pub/linux/almalinux/8/BaseOS/x86_64/os/repodata/' | grep updateinfo
<tr><td valign="top"><img src="/icons/compressed.gif" alt="[   ]"></td><td><a 
href="917a125d528031b22ab6f39a705a27697230318798df32ffe6ed0821569e01df-updatei
nfo.xml.gz">917a125d528031b22ab6f39a705a27697230318798df32ffe6ed0821569e01df-u
pdateinfo.xml.gz</a></td><td align="right">2021-04-19 21:22  </td><td align="r
ight">113K</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="
almalinux83-baseos-updateinfo.xml">almalinux83-baseos-updateinfo.xml</a></td><
td align="right">2021-03-28 02:50  </td><td align="right">744K</td><td>&nbsp;<
/td></tr>

```

# 4. 前編まとめ

移行ツールも書こうと思ったが、長くなったので次回にする。とりあえず、ここまでのまとめは以下のとおり。

**概要**

* **AlmaLinuxはRHEL互換のLinux OSで、CentOSと同じ位置づけ**
* **AlmaLinuxは、少なくとも2029年までサポートを保証（RHEL8と同等）**
* **AlmaLinuxは、CloudLinux社のスポンサードを受けながらもコミュティドリブンで開発**
* **2021/03/30に正式安定版をリリース**

**機能**

* **CentOSと、まったく同じように扱える。違うのは/etc/almalinux-releaseがあること**
* **アップデートパッケージも十分早くリリースされている**
* **現時点（2021/04/06）で60以上のミラーサイトが用意され、日本でも5サイトある**
* **CentOSとは異なりパッケージアップデート情報が提供されているので、必要最小限のパッケージなどレベルを指定したアップデートが可能**

続きは、こちら。

* [AlmaLinuxを使ってみた（後編）](https://qiita.com/yamada-hakase/items/17b41d33e30232b69fe2)