RHEL/CentOSから標準より新しいパッケージをインストールするためのレポジトリ4選(AppStream /RHECL/EPEL/IUS)
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 Enterprise Linux 8 で 10年維持されるパッケージはどれ? - 赤帽エンジニアブログ
- Chapter 1. Using AppStream Red Hat Enterprise Linux 8 | Red Hat Customer Portal
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 の場合、次のコマンドでレポジトリを追加します。
$ 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
にあります。
# 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 で提供されているパッケージをコンテナイメージから利用することも可能です。
参考
- Red Hat Software Collections
- Red Hat Developer | Software Collections Overview
- About the project — Software Collections
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
参考
最後に
RHEL/CentOS に新しいバージョンのソフトウェアをインストールする方法として以下の4種類紹介しました。
- AppStream(RHEL 8以降で公式対応)
- RHSCL/SCL(RHEL 6以降で公式対応。開発ツール系にフォーカス。コンテナイメージでも利用可能)
- EPEL(Fedora がアップストリーム。雑多)
- IUS(標準YUMパッケージをお行儀よく置き換え)
個人的なおすすめ順に並べていますが、要件に応じて使い分けてください。
また Fedora/CentOS Stream/CentOS/RHEL の違いは次の記事を参照ください。