====== CentOS パッケージ管理の基礎知識 ======
Version CentOS 7.2
--- //[[http://www.y2sunlight.com|y2sunlight]] 2020-05-28//
[[centos:top|CentOS パッケージ管理に戻る]]
[[centos:yum|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 パッケージ管理の基礎知識
* [[centos:yum|yum --- パッケージ管理システム]]
* [[centos:systemctl|systemctl --- サービスの操作]]
* [[centos:journalctl|journalctl --- ログの操作]]
* [[centos:firewall-cmd|firewall-cmd --- ファイアウォールの操作]]
----
===== パッケージ管理の周辺コマンド =====
==== yum ====
CentOS(RHEP系のLinux)のパッケージインストールコマンドは ''yum'' です(ちなみに ''apt''(または ''apt-get'') は Debian系のコマンドです)。基本的に、以下のコマンドだけ覚えておけば良いと思います。
yum install PACKAGE_NAME
この yum は内部的に ''rpm'' というコマンドを使用しています。rpm については[[#rpm|後述]]しますが、単体のパッケージを管理するコマンドです。通常パッケージには依存性があり、例えばパッケージAがパッケージBを使用しているならば、その両方をインストールしないとパッケージAは使えません。このような依存性を含めて解決してくれるパッケージ管理システム(及びそのコマンド)が yum なのです。yum の使い方は本編の[[centos:yum|yum]]をご覧ください。
\\
==== rpm ====
[[https://ja.wikipedia.org/wiki/RPM_Package_Manager|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 と curl ====
今でもネット上でよく見かけるパッケージのインストール例として、次のようなものがあります:
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 ===
[[https://ja.wikipedia.org/wiki/GNU_Wget|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は、[[https://ja.wikipedia.org/wiki/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
- tar ファイルをインタネットから取得します。
- tar ファイルを解凍します
- 解凍したフォルダに移動します
- 同封の ''configure'' スクリプトを実行して環境に応じた ''[[https://ja.wikipedia.org/wiki/Make|make]]'' ファイルを生成します
- make ファイルを実行します
- 出来上がった exeファイルを所定の場所にインストールします
通常、インストールの手順はダウンロードしたサイトや tarball の中か含まれていると思います。今でもこのようなレトロな状況に出くわすことがありますが、オープンソースの世界では珍しくないのかもしれません。
\\
===== yumのリポジトリ =====
OSインストール直後は、以下の3つのリポジトリが利用できるようになっています。
* CentOS-7 - Base
* CentOS-7 - Extras
* CentOS-7 - Updates
これらのリポジトリは「CentOS 公式リポジトリ」と呼ばれることもあります。このリポジトリで入手できないパッケージがある場合、特に、PHP、PythonやGITなどの新しいパージョンのものを使用したい場合が多いと思いますが、そのような場合は、他の(サードパーティー)リポジトリから取得しなければなりません。
ネットでは様々なリポジトリ情報が飛び交っているようですが、これらの一覧はCentOSのサイトに[[https://wiki.centos.org/AdditionalResources/Repositories|Available Repositories for CentOS]]として記載されています。以下では本編の目的に合致し、現在比較的良く使用されているサードパーティーリポジトリ
* EPEL
* Remi
* IUS
について説明します。
尚、これらサードパーティーリポジトリを使えるようにする時も、サードパーティーリポジトリの登録用のパッケージを yum を使ってイントールします。
\\
==== EPEL ====
パッケージ: ''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 には存在するパッケージを提供しています。詳しくは以下のリンクをご覧下して下さい。
参照
* [[https://fedoraproject.org/wiki/EPEL/ja|EPEL/ja]] --- fedora Wiki EPEL(日本語)
* [[https://fedoraproject.org/wiki/About_EPEL/ja]] --- EPELの目的について詳細に述べられています
\\
==== Remi ====
パッケージ: ''http://rpms.famillecollet.com/enterprise/remi-release-7.rpm''
インストール
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
> Remi 使用時は[[#EPEL|EPEL]]のインストールが必要です。
Remi は RHEL系(CentOS,Fedora)向けに、最新バージョンを含む様々なPHPパッケージを配布しているレポジトリです。ここを使う用途としては、ほとんどが、最新のPHPを入手するのが目的と考えられます。
参照
* [[http://rpms.remirepo.net/|Remi's RPM repository]] --- Remiの本家
\\
==== IUS ====
パッケージ: https://repo.ius.io/ius-release-el7.rpm
インストール
yum install https://repo.ius.io/ius-release-el7.rpm
> IUS 使用時は[[#EPEL|EPEL]]のインストールも必要です。
IUS も RHEL系(CentOSなど)向けの有志プロジェクトで新しいバージョンの RPM パッケージを提供しています。公式ページによると以下のような記載があります。
* Red Hat Enterprise Linux(RHEL)およびCentOS用の高品質RPMパッケージを作成します。
* 上流の開発者によって新しいバージョンがリリースされたら、更新されたRPMパッケージをすぐにリリースします。
* 蓄積された RPM パッケージの自動交換はありません。
ある意味、[[#EPEL|EPEL]]に似ているリポジトリであるとも言えます。EPELとIUSの両方で公開されている例も少なくありません。両方で公開されている場合は、自分の環境に適している方を選ぶ必要があるかもしれません。
参照
* [[https://ius.io/]] --- IUSの本家
\\
===== SCL (Software Collections) =====
SCL とは 最新バージョンの言語やミドルウェア(DBMS,Gitなど)を集めたRPMパッケージにより提供されるソフトウェアコレクションです。当初(2012年頃) SCL は、RHELとは別のライフサイクルで、安定した最新バージョンのソフトウェアをインストールする方法として提供が開始されました。現在では各ディストリビューション(RHEL,CentOS,Fedora)毎に維持、管理されており、CentOS では[[https://wiki.centos.org/SpecialInterestGroup/SCLo|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のインストールまでが詳しく記載されています。
=== 参考 ===
* [[https://stupiddog.jp/note/archives/1074|ソフトウェアコレクション(SCL:Software Collections)とは?]]
* [[https://stupiddog.jp/note/archives/661|CentOS7、SCL(Software Collections)リポジトリからのLAMP環境構築について(前編)]]
* [[https://stupiddog.jp/note/archives/1115|CentOS7、SCL(Software Collections)リポジトリからのLAMP環境構築について(後編)]]
\\