RHEL/CentOSから標準より新しいパッケージをインストールするためのレポジトリ4選(AppStream /RHECL/EPEL/IUS)

RedHatは同じバージョンのパッケージが10年間保証されるため、安定運用に向いています。ただし、システムによっては、より新しいバージョンを利用したいことがあります。 そのようなパッケージを提供するレポジトリとして、Red Hat Software Collections(RHSCL)/EPEL/IUSを紹介します。
2020.08.05

Red Hat Enterprise Linux (以下RHEL)/CentOS のパッケージは基本的に10年メンテナンスされるため、枯れて安定している一方で、より新しいバージョン・ソフトウェアを利用したいために、レポジトリを追加することがあります。

そのような目的に使えるレポジトリとして、以下の4つを紹介します。

  • AppStream(RHEL8以降)
  • Red Hat Software Collections(RHEL6以降)
  • EPEL(RHEL系から幅広く利用可能)
  • IUS(RHEL系から幅広く利用可能)

AppStream(RHEL/CentOS 8 限定)

概要

AppStream は RHEL 8から導入された仕組みで、OS の10年ライフサイクルとは別に、2年〜5年のライフサイクルで新しいバージョンが「ストリーム」という単位で提供されるものです。

RHEL 8リリースから5年が経過し、メンテナンスモードになると、同じソフトウェア(例えばPHP)の中で特定のストリームだけがサポートされるようになります。

AppStream に対応しているのは一部のモジュールだけです。対応モジュール一覧は次のページを参照ください。

Red Hat Enterprise Linux 8 Application Streams Life Cycle - Red Hat Customer Portal

レポジトリの追加

不要です。

パッケージ管理

$ sudo yum module list
Last metadata expiration check: 0:12:00 ago on Wed 05 Aug 2020 05:29:58 AM UTC.
Red Hat Enterprise Linux 8 for x86_64 - AppStream from RHUI (RPMs)
Name                 Stream      Profiles                              Summary
...
php                  7.2 [d]     common [d], devel, minimal            PHP scripting language
php                  7.3         common [d], devel, minimal            PHP scripting language
...

$ sudo yum module info php:7.3 --profile
Name    : php:7.3:8010020190701134122:2430b045:x86_64
common  : php-cli
        : php-common
        : php-fpm
        : php-json
        : php-mbstring
        : php-xml
devel   : libzip
        : php-cli
        : php-common
        : php-devel
        : php-fpm
        : php-json
        : php-mbstring
        : php-pear
        : php-pecl-zip
        : php-process
        : php-xml
minimal : php-cli
        : php-common
...

例えば PHP には、php という Name で

  • 7.2 (デフォルト)
  • 7.3

の2つのストリームが存在します。

$ sudo yum install php

とすると、php は AppStream 対応しているので、AppStream から対応するストリームを探し、デフォルトである php 7.2 がインストールされます。 $ yum install package と AppStream の状態の関係は次のドキュメントを参照ください。

第4章 RHEL 8 コンテンツのインストール Red Hat Enterprise Linux 8 | Red Hat Customer Portal

$ sudo yum install @php:7.3       # -> デフォルトの common プロファイル
$ sudo yum install @php:7.3/devel # -> devel プロファイル

とすることで、特定のストリームの特定のプロファイルをインストールできます。

インストールされていることを確認します。

$ which php
/usr/bin/php

$ php -v
PHP 7.3.5 (cli) (built: Apr 30 2019 08:37:17) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.5, Copyright (c) 1998-2018 Zend Technologies

デフォルトとは異なる PHP 7.3 をインストールできています。

参考

Red Hat Software Collections

概要

RHELのパッケージは同じバージョンが10年間サポートされます。 Red Hat Software Collections (RHSCL) はプログラミング言語・データベースのような主要開発ツールの新しいバージョンを2〜3年の短期サポートで提供するものです。 SCL を使うことで、GCC 4 系の代わりに GCC 7系/8系/9系 を利用するといったことが可能になります。

Git のように単体に近い形でパッケージ提供されているものもあれば、GCCやLLVMやRustのように、ツールセットとしてまとめて提供されているものもあります。

RHEL 6 以降で利用可能です。

レポジトリの追加

CentoS の場合、次のコマンドでレポジトリを追加します。

Dockerfile

$ sudo yum install centos-release-scl

SCL が追加されたことを確認します。

$ yum repolist
repo id                  repo name                                        status
base/7/x86_64            CentOS-7 - Base                                  10,070
centos-sclo-rh/x86_64    CentOS-7 - SCLo rh                                6,930
centos-sclo-sclo/x86_64  CentOS-7 - SCLo sclo                                800
extras/7/x86_64          CentOS-7 - Extras                                   412
updates/7/x86_64         CentOS-7 - Updates                                  945

パッケージ管理

試しに デフォルトの GCC と SCL 8系のGCCツールチェーンをインストールします。

$ sudo yum install gcc
$ sudo yum install devtoolset-8-gcc

SCL 向けパッケージは /opt 以下にインストールされるため、標準レポジトリとバッティングしません。

$ locate -r /gcc$
/opt/rh/devtoolset-8/root/usr/bin/gcc
/opt/rh/devtoolset-8/root/usr/lib/gcc
/opt/rh/devtoolset-8/root/usr/libexec/gcc
/usr/bin/gcc
/usr/lib/gcc
/usr/libexec/gcc

$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ /opt/rh/devtoolset-8/root/usr/bin/gcc --version
gcc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3)
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

SCL インストールしたパッケージを利用するには、 $ scl enable {パッケージ名} コマンドで環境変数を調整します。

$ scl enable devtoolset-8 -- bash

設定内容の実態 /opt/rh/{パッケージ名}/enable にあります。

/opt/rh/devtoolset-8/enable

# General environment variables
export PATH=/opt/rh/devtoolset-8/root/usr/bin${PATH:+:${PATH}}
export MANPATH=/opt/rh/devtoolset-8/root/usr/share/man:${MANPATH}
export INFOPATH=/opt/rh/devtoolset-8/root/usr/share/info${INFOPATH:+:${INFOPATH}}
...

プログラムの呼び出し方式に合わせて、環境変数を適切に設定してください。

コンテナイメージから利用

FROM registry.access.redhat.com/rhscl/python-35-rhel7

のようにすることで、RHSCL で提供されているパッケージをコンテナイメージから利用することも可能です。

参考

EPEL

概要

RHEL のアップストリームディストリビューションとして Fedora が存在し、より先進的な機能・パッケージが取り込まれています。 Extra Packages for Enterprise Linux (以下EPEL) は Fedora では提供されているが、RHEL では提供されていない一部のパッケージ群を RHEL からもりようできるようにするためのものです。

RHEL から利用可能だからといって、EPEL パッケージは RHEL と同等のサポートや CVE 対応を受けられるわけでは有い点にご注意ください。

EPEL は大昔から存在するため、使ったことがある人も多いのではないでしょうか?

レポジトリの追加

次のコマンドからレポジトリを追加します。

$ sudo yum install epel-release
# EPELレポジトリ追加用のパッケージがない場合
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

epel-release-latest-7 の 「7」はディストリビューションのメジャーバージョンです。 読み替えてください。

EPEL が追加されたことを確認します。

$ yum repolist
...
repo id               repo name                                           status
base/7/x86_64         CentOS-7 - Base                                     10,070
epel/x86_64           Extra Packages for Enterprise Linux 7 - x86_64      13,424
extras/7/x86_64       CentOS-7 - Extras                                      412
updates/7/x86_64      CentOS-7 - Updates                                     945
repolist: 24,851

パッケージ管理

EPEL レポジトリから利用可能なパッケージ一覧を確認

$ yum --disablerepo="*" --enablerepo="epel" list available

参考

IUS

IUS(Inline with Upstream Stable)は RHEL/CentOS から新しいバージョンを利用するための YUM レポジトリです。 UISはもともと Rackspace 社内で利用されており、現在の運営はコミュニティーベースになっているものの、Rackspace は依然としてスポンサーです。

標準パッケージをより新しいバージョンで置き換えられるように

  • 標準パッケージと同等の機能を提供
  • 標準と異なるパッケージ名を割り当てる(git のかわりに git224)
  • 標準パッケージがインストール済みの場合、コンフリクトを発生。ユーザーが明示的にコンフリクトを解消

といった方針を採用されています。

アプローチとしては RHEL8 の AppStream に近いものがあります。

詳細は ドキュメント「Usage」 の Safereplacement Packages のセクションを参照ください。

レポジトリの追加

$ sudo yum install \
  https://repo.ius.io/ius-release-el7.rpm \
  https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

パッケージ管理

git のインストールを例に解説します。

  • 標準パッケージでは git の名前で 1.8
  • IUSパッケージでは git224 の名前で 2.24

が提供されています。

IUSは標準パッケージを新しいバージョンで置き換えることを目指しています。

標準パッケージがインストールされていない場合、IUS のパッケージ名を指定するだけでインストール作業は完了します。

$ sudo yum install git224
...

$ which git
/bin/git

$ git --version
git version 2.24.3

標準パッケージがインストールされている場合、IUS の対応するパッケージをインストールしようとすると、コンフリクトが発生します。

$ sudo yum install git224
...
--> Finished Dependency Resolution
Error: git224-core conflicts with git-1.8.3.1-23.el7_8.x86_64
Error: git224 conflicts with git-1.8.3.1-23.el7_8.x86_64
Error: git224-perl-Git conflicts with perl-Git-1.8.3.1-23.el7_8.noarch
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

リプレース元が git リプレース先が git224 です。

このコンフリクトを解消する方法を3パターン紹介します。

コンフリクト解消方法その1:: yum shell から erase & install を実行

YUMのシェルモードで

  • リプレース元を erase し
  • リプレース先を install します。
$ sudo yum shell
> erase git
> install git224
> run
...
============================================================================
 Package               Arch        Version               Repository     Size
=============================================================================
Installing:
 git224                x86_64      2.24.3-1.el7.ius      ius           140 k
Removing:
 git                   x86_64      1.8.3.1-23.el7_8      @updates       22 M
Installing for dependencies:
 emacs-filesystem      noarch      1:24.3-23.el7         base           58 k
 git224-core           x86_64      2.24.3-1.el7.ius      ius           5.1 M
 git224-core-doc       noarch      2.24.3-1.el7.ius      ius           2.4 M
 git224-perl-Git       noarch      2.24.3-1.el7.ius      ius            48 k
 libsecret             x86_64      0.18.6-1.el7          base          153 k
 pcre2                 x86_64      10.23-2.el7           base          201 k
Removing for dependencies:
 perl-Git              noarch      1.8.3.1-23.el7_8      @updates       57 k

Transaction Summary
=============================================================================
Install  1 Package (+6 Dependent packages)
Remove   1 Package (+1 Dependent package)

Total download size: 8.1 M
Is this ok [y/d/N]:
...
Finished Transaction

run でトランザクションを走らせると、無事置き換えに成功しました。

コンフリクト解消方法その2:: yum swap

yum swap リプレース元 リプレース先 でパッケージを入れ替えます。

$ sudo yum swap git git224
...

コンフリクト解消方法その3:dnf から --allowerasing を有効にしてインストール

dnf(YUM4) のインストール時に --allowerasing オプションを渡すと、yum swap 相当のことができます。

$ sudo dnf --allowerasing install git224

詳細はDNF のドキュメントを参照ください

参考

最後に

RHEL/CentOS に新しいバージョンのソフトウェアをインストールする方法として以下の4種類紹介しました。

  • AppStream(RHEL 8以降で公式対応)
  • RHSCL/SCL(RHEL 6以降で公式対応。開発ツール系にフォーカス。コンテナイメージでも利用可能)
  • EPEL(Fedora がアップストリーム。雑多)
  • IUS(標準YUMパッケージをお行儀よく置き換え)

個人的なおすすめ順に並べていますが、要件に応じて使い分けてください。

また Fedora/CentOS Stream/CentOS/RHEL の違いは次の記事を参照ください。