Version CentOS 7.2
— y2sunlight 2020-05-28
yum の話の前に、パッケージ管理について整理しておきたいと思います。Linuxの世界には、yum と apt の2つのパッケージ管理コマンドがあります。yum は RHEL系(CentOS,Fedora,Amazon Linux)、apt は Debian系(Ubuntu,Raspbian)のコマンドです。そして、それぞれに対し、rpm と dpkg というパッケージ管理システムが対応しています。これだけでも複雑なのですが、wget や curl、tar や make などのコマンドもあり、複雑怪奇な世界を作っています。従って、yumだけに専念できるように、これらのパッケージ管理を取り巻く世界を一度整理しておきたいというのが、この章の1つの目的です。
yum の世界にはいると、一気に視野が開かれるのですが、今度は、リポジトリの森に入り込んでしまいます。森の種類はいくつもないので、直ぐに慣れるとは思いますが、突然 EPEL、REMI、IUS、SCL と言った名前を聞いて驚かないように森に入る前にここで予習しておくことにします。
関連記事
CentOS(RHEP系のLinux)のパッケージインストールコマンドは yum
です(ちなみに apt
(または apt-get
) は Debian系のコマンドです)。基本的に、以下のコマンドだけ覚えておけば良いと思います。
yum install PACKAGE_NAME
この yum は内部的に rpm
というコマンドを使用しています。rpm については後述しますが、単体のパッケージを管理するコマンドです。通常パッケージには依存性があり、例えばパッケージAがパッケージBを使用しているならば、その両方をインストールしないとパッケージAは使えません。このような依存性を含めて解決してくれるパッケージ管理システム(及びそのコマンド)が yum なのです。yum の使い方は本編のyumをご覧ください。
RPM (全て大文字) は、Red Hat社の開発したパッケージ管理システムです。以前は、Red Hat Package Manager
の略称でした。RPMで採用されているファイル形式が .rpm
フォーマットです。そして、rpmファイルを操作するのが rpm
コマンドです。
依存関係のないパッケージの場合は、rpm -ivh
だけでパッケージのインストールができます。また、オフライン環境下でパッケージをインストルールする場合など、今でも、rpm を使用する場面は残っています。
以下に代表的な rpm のユースケースを記載します。
rpm -qa # インストール済みパッケージの一覧表示 rpm -qa RPM_FILE_NAME # インストール済みパッケージの検索 rpm -qi RPM_FILE_NAME # インストール済みパッケージの情報を表示 rpm -ivh RPM_FILE_NAME # インストール rpm -Uvh RPM_FILE_NAME # アップグレード rpm -evh RPM_FILE_NAME # アンインストール
RPM_FILE_NAME にはrpmファイル名の他にURLも使用できます。
今でもネット上でよく見かけるパッケージのインストール例として、次のようなものがあります:
wget https://domain/path/package-name.rpm # .rpmファイルをインターネットから取得 rpm -ivh package-name.rpm # ローカルの.rpmファイルをインストール
この例は、掲載の時期が古いのか、親切でオフラインも想定して書いてあるのか不明ですが、通常は以下と同等です。
rpm -ivh https://domain/path/package-name.rpm
この例のように wget
コマンドもパッケージのインストール時に使われるコマンドです。wgetと同じような場面でよく使われるコマンドに curl
コマンド があります。両者の特徴とユースケースも以下に書いておきます。
wgetは、HTTP、HTTPS及びFTPプロトコルに対応しているダウンローダーです。wget の特徴は、再帰的なダウンロードが可能で、ディレクトリ下の全てのコンテンツを取得することが可能です。またミラーリングの機能も持っています。パッケージインストールでインターネットからパッケージを取得する場合は、wgetが良く使われています。
# ファイルのダウンロード wget URL # カレントに同じファイル名で保存 wget -P path URL # 保存先をpathに変更 wget -O file URL # ファイル名をfileに変更
wget マニュアル https://www.gnu.org/software/wget/manual/wget.html#Examples
curlは、cURLプロジェクトの提供するコマンドで、HTTP、HTTPS、FTP、FTPS、SCP、SFTP など多くのプロトコルに対応してるダウンローダーです。パッケージインストールの場面ではあまり使われませんが、ネットではたまに見かけます。プログラマー的にはcurl は手軽に使えるHTTPクライアントとしてWebAPIなどのデバッグで活躍してくれます。
# ファイルのダウンロード curl -O URL # カレントに同じファイル名で保存 curl -o path/file URL # 保存先と名前をpath/fileに変更
# ファイルの表示 curl URL # 標準出力に表示 curl URL > path/file # path/fileに保存
curl マニュアル https://curl.haxx.se/docs/manual.html
rpm が公開または配布されていないような状況下では、ソースコードからソフトウェアをインストールする必要があります。
ソースコードの提供は tar
ファイル と呼ばれる形式のアーカーブファイルが使用されます(このtarファイルは、1つのtarに全てのリソースが含まれていることから、tarball (ターボール)
と呼ばれることもあります)。この tarファイル を操作するのが tar コマンドです。そのような場合のインストールの典型的な手順を示します。
wget https://domain/path/package-source.tar #1 tar -xvf package-source.tar #2 cd package-source #3 ./configure #4 make #5 make install #6
configure
スクリプトを実行して環境に応じた make
ファイルを生成します通常、インストールの手順はダウンロードしたサイトや tarball の中か含まれていると思います。今でもこのようなレトロな状況に出くわすことがありますが、オープンソースの世界では珍しくないのかもしれません。
OSインストール直後は、以下の3つのリポジトリが利用できるようになっています。
これらのリポジトリは「CentOS 公式リポジトリ」と呼ばれることもあります。このリポジトリで入手できないパッケージがある場合、特に、PHP、PythonやGITなどの新しいパージョンのものを使用したい場合が多いと思いますが、そのような場合は、他の(サードパーティー)リポジトリから取得しなければなりません。
ネットでは様々なリポジトリ情報が飛び交っているようですが、これらの一覧はCentOSのサイトにAvailable Repositories for CentOSとして記載されています。以下では本編の目的に合致し、現在比較的良く使用されているサードパーティーリポジトリ
について説明します。
尚、これらサードパーティーリポジトリを使えるようにする時も、サードパーティーリポジトリの登録用のパッケージを yum を使ってイントールします。
パッケージ: https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
インストール
yum install epel-release
EPELとは Extra Packages for Enterprise Linux
の略で、Fedoraの有志が作成、メンテナンスしている RHEL系(CentOS,Fedora)で使えるレポジトリです。EPELプロジェクトでは RHEL で提供されていないけど Fedora には存在するパッケージを提供しています。詳しくは以下のリンクをご覧下して下さい。
参照
パッケージ: http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
インストール
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Remi 使用時はEPELのインストールが必要です。
Remi は RHEL系(CentOS,Fedora)向けに、最新バージョンを含む様々なPHPパッケージを配布しているレポジトリです。ここを使う用途としては、ほとんどが、最新のPHPを入手するのが目的と考えられます。
参照
パッケージ: https://repo.ius.io/ius-release-el7.rpm
インストール
yum install https://repo.ius.io/ius-release-el7.rpm
IUS 使用時はEPELのインストールも必要です。
IUS も RHEL系(CentOSなど)向けの有志プロジェクトで新しいバージョンの RPM パッケージを提供しています。公式ページによると以下のような記載があります。
ある意味、EPELに似ているリポジトリであるとも言えます。EPELとIUSの両方で公開されている例も少なくありません。両方で公開されている場合は、自分の環境に適している方を選ぶ必要があるかもしれません。
参照
SCL とは 最新バージョンの言語やミドルウェア(DBMS,Gitなど)を集めたRPMパッケージにより提供されるソフトウェアコレクションです。当初(2012年頃) SCL は、RHELとは別のライフサイクルで、安定した最新バージョンのソフトウェアをインストールする方法として提供が開始されました。現在では各ディストリビューション(RHEL,CentOS,Fedora)毎に維持、管理されており、CentOS ではSoftware Collections SIGがこれを行っています。
yumを使って最新のソフトウェアをインストールする状況下では、目的のソフトウェアを複数のサードパーティーのリポジトリの中を検索してからインストールする必要があります。また、目的のソフトウェアが2つ以上のリポジトリに見つかると、どちらがいいかを悩まないといけません。この問題を解決してくれるのが SCL です。SCL のインストールは簡単です:
yum install centos-release-scl-rh
SCL をインストールすると1つのリポジトリだけで目的とする最新の安定したソフトウェアをインストールすることができます。また、既存システムを上書きせずに、複数のバージョンの同じソフトウェアコンポーネントを同時にインストールこともできます。夢のような話です。。。
しかし問題もあります。ここが重要なのですが、これまでのyum によるインストールと違い、SCLパッケージのインストールではパッケージ名やインストール先が変わる他、パッケージの有効化には sclコマンドを使う必要があります。選択支が増えるとそれだけ混乱も増えます。本編で最新版が必要なのは、実際問題として、PHP,Python,Git だけなので、現状では従来通りのyumによる方法で十分とも言えます。
本編では、SCL は採用しません。パッケージのインストールに関しては、これまでどおりにyumだけを使い、最新版はサードパーティのリポジトリから取得し、SCL については、今後の課題としてバッグログしておくことにします。
尚、以下の参考サイトは、SCL の解説と導入からLAMPのインストールまでが詳しく記載されています。