CentOS 8: CentOS 8について

1 CentOS 7との違い

CentOS Streamより前の変更について記載する。

1.1 パッケージ管理ツールがyumからdnfへ

dnfはFedora 22から導入されている。yumと引数等で互換性がある。yumはdnfへのシンボリックリンクになっており、yumのままでもCentOS 7と同様に使うことができる。

  • yum-builddepはdnf builddepに置き換わった。dnf builddepはプラグインとして dnf-plugins-coreパッケージにて提供される。
  • debuginfo-installはdnf debuginfo-installに置き換わった。 dnf debuginfo-installはプラグインとしてdnf-plugins-coreパッケージにて提供される。

1.2 複数バージョン・複数アーキテクチャのdebuginfoと/usr/bin/.build-id

/path/to/binaryというバイナリのBuild IDがxxyyである場合、CentOS 7では以下の通りであった。GDBはBuild IDからバイナリのdebuginfoの場所を導き出す。

  • /usr/lib/debug/.build-id/xx/yy.debugは/usr/lib/debug/path/to/binary.debug へのシンボリックリンク。
  • /usr/lib/debug/.build-id/xx/yyは/path/to/binaryへのシンボリックリンク。 /usr/lib/.debugは存在しない。

CentOS 8では以下の通りになる(FedoraのParallelInstallableDebuginfoを参照)。

  • /usr/lib/debug/.build-id/xx/yy.debugは /usr/lib/debug/path/to/binary-version.arch.debugへのシンボリックリンク(例えば/usr/lib/debug/usr/bin/bash-4.4.20-1.el8_4.x86_64.debug)。これにより、複数のバージョン、複数のアーキテクチャのdebuginfoを同時にインストールできる。
  • /usr/lib/debug/.build-id/xx/yyは/usr/lib/.build-id/xx/yyへのシンボリックリンク。/usr/lib/.debug/xx/yyは/path/to/binaryへのシンボリックリンク。例えば、複数のマシンで共有される/usr/lib/debugをNFSマウントしているとして、 /path/to/binaryの名前を変更したい場合、これまでは/usr/lib/debug/.build-id のシンボリックリンクを変更する必要があったが、/usr/lib/debugはそのままで、 /usr/lib/.build-idのシンボリックリンクを変更すれば良くなった。
  • rpmに/usr/lib/.build-idを含めたくない場合はSPECファイルに以下を記述する(あるいはrpmbuildeの–defineオプションで指定する)。

    %define _build_id_links none
    

1.3 リポジトリの変更

EPELとRPM Fusionは従来通り。

$ sudo dnf install -y epel-release
$ sudo dnf install -y rpmfusion-free-release

CentOS 7のリポジトリは以下の通りであった。

$ ls /etc/yum.repos.d # CentOS 7
CentOS-Base.repo       CentOS-SCLo-scl-rh.repo  entOS-fasttrack.repo
CentOS-CR.repo         CentOS-SCLo-scl.repo     epel-testing.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo      epel.repo
CentOS-Media.repo      CentOS-Vault.repo

CentOS 8では以下の通りである。RHEL 8でパッケージのマニフェストが大きく変更されたようだ。

$ ls /etc/yum.repos.d # CentOS 8
CentOS-Linux-AppStream.repo          CentOS-Linux-Plus.repo
CentOS-Linux-BaseOS.repo             CentOS-Linux-PowerTools.repo
CentOS-Linux-ContinuousRelease.repo  CentOS-Linux-Sources.repo
CentOS-Linux-Debuginfo.repo          epel-modular.repo
CentOS-Linux-Devel.repo              epel-playground.repo
CentOS-Linux-Extras.repo             epel-testing-modular.repo
CentOS-Linux-FastTrack.repo          epel-testing.repo
CentOS-Linux-HighAvailability.repo   epel.repo
CentOS-Linux-Media.repo

PowerToolsリポジトリを有効にする場合は以下を実行する(あるいは /etc/yum.repos.d/CentOS-Linux-PowerTools.repoにてenabledを1にする)。

$ sudo dnf config-manager --set-enabled powertools

リポジトリの一覧は以下で確認できる。

$ dnf repolist # --enabled
$ dnf repolist --disabled
$ dnf repolist --all

1.4 いくつかのxxx-develパッケージがない

xxx-develパッケージの多くはPowerToolsリポジトリにある。xxx-develパッケージにはCの場合はincludeファイルが含まれる。

問題はPowerToolsリポジトリにもないパッケージがあること。xxx-develパッケージはxxxパッケージ作成時に生成されているが、リポジトリに格納されていない。

つまり、xxx-develパッケージパッケージが提供するincludeファイルを利用するアプリケーションはビルドできない。また、dnf builddepがxxx-develパッケージを見つけられず、src.rpmのビルド環境を整えることができない。

$ for repo in cr devel fasttrack ha plus powertools; do
  sudo dnf config-manager --set-enabled "$repo";
done
$ sudo dnf builddep emacs
enabling appstream-source repository
enabling baseos-source repository
enabling extras-source repository
enabling plus-source repository
enabling epel-modular-source repository
enabling epel-source repository
Last metadata expiration check: 0:00:10 ago on Tue 22 Jun 2021 07:15:07 PM JST.
Package desktop-file-utils-0.23-8.el8.x86_64 is already installed.
Package bzip2-1.0.6-26.el8.x86_64 is already installed.
Package gzip-1.9-12.el8.x86_64 is already installed.
Package glibc-devel-2.28-151.el8.x86_64 is already installed.
Package cairo-1.15.12-3.el8.x86_64 is already installed.
Package libjpeg-turbo-1.5.3-10.el8.x86_64 is already installed.
No matching package to install: 'libotf-devel'
No matching package to install: 'm17n-lib-devel'
Not all dependencies satisfied
Error: Some packages could not be found.

いまのところxxxパッケージをrpmbuildでビルドして、xxx-develパッケージをインストールするしかない。

#!/bin/sh -e


sudo dnf install -y dnf-plugins-core rpmdevtools make
sudo dnf config-manager --set-enabled powertools

for build_requires in libotf m17n-db m17n-lib; do
    dnf download --source ${build_requires}
    sudo dnf builddep -y ./${build_requires}*
    rpmbuild --rebuild --define "debug_package %{nil}" ./${build_requires}*
    sudo dnf localinstall -y $(find rpmbuild/RPMS/ -name "*.rpm")
    rm -rf ~/rpmbuild
done

dnf download --source emacs
sudo dnf builddep -y emacs*
rpmbuild --rebuild --define "debug_package %{nil}" emacs*

1.5 EOLが2029年末から2021年に変更され、ローリングリリースのCentOS Streamへ

CentOS 7のEOLは2024年。CentOS 8の方が先にEOLを迎える。

CentOSはローリングリリースとなるCentOS Streamへ変更される。RedHatに対してアップストリームとなる立ち位置になる。ローリングリリースと固定リリースのバージョンがあるOpenSUSEと同様になる。

2 CentOS Stream

CentOS Stream 8のEOLは2024年5月31日。いくつかのxxx-develがないのはCentOS 8と同様。

2021年6月22日現在、dnf repolistにsrc.rpm用とdebuginfo用のリポジトリがない。 dnf builddepとdnf debuginfo-installが使えない。

src.rpmとdebuginfoはこちらにあるので、src.rpmとdebuginfoは取得できるが、手間が掛かる。dnf repolistに加えて欲しい。

src.rpmのgitリポジトリがあるのはとても良い。これはdnfと同様にCentOS 7と比べて良くなった点のひとつ。

src.rpmのリポジトリがない現在、emacsをビルドしようとすると以下のようになる。

#!/bin/sh -e

sudo dnf install -y dnf-plugins-core rpmdevtools make
sudo dnf config-manager --set-enabled powertools

mkdir -p ~/src/git.centos.org
cd ~/src/git.centos.org

for build_requires in libotf m17n-db m17n-lib; do
    rm -rf ~/rpmbuild/
    mkdir ~/rpmbuild
    git clone https://git.centos.org/rpms/${build_requires}
    cp -a ${build_requires}/* ~/rpmbuild/
    sudo dnf builddep -y ~/rpmbuild/SPECS/*.spec
    mkdir -p ~/rpmbuild/SOURCES/
    spectool -g -R ~/rpmbuild/SPECS/*.spec
    rpmbuild -ba --define "debug_package %{nil}" ~/rpmbuild/SPECS/*.spec
    sudo dnf localinstall -y $(find ~/rpmbuild/RPMS/ -name "*.rpm")
done

rm -rf ~/rpmbuild/
mkdir ~/rpmbuild
git clone https://git.centos.org/rpms/emacs
cp -a emacs/* ~/rpmbuild/
sudo dnf builddep -y ~/rpmbuild/SPECS/*.spec
mkdir -p ~/rpmbuild/SOURCES/
spectool -g -R ~/rpmbuild/SPECS/*.spec
rpmbuild -ba --define "debug_package %{nil}" ~/rpmbuild/SPECS/*.spec
sudo dnf localinstall -y $(find ~/rpmbuild/RPMS/ -name "*.rpm")

3 CentOS 8の代替えディストリビューション

2021年6月22日現在だとAlma Linuxが良さげ。CentOS 8とほぼ同じになっている(2021年3月30日にリリース)。

Alma Linuxに比べてRocky Linuxは開発が遅れているようで、src.rpm用のリポジトリにつながらない(2021年6月22日にリリース)。

サーバを数台持っているだけならRedHat 8の開発者用サブスクリプションを利用するのもありかもしれない。