Linux環境におけるソフトウェアパッケージは、ソースコードパッケージとバイナリパッケージの2種類に大別されます。
ソースコードパッケージとは、プログラマが特定の形式と構文で記述した一連のソースコードの集合です。インストール時にコンパイルが必要となるため、時間がかかりやすく、エラーが発生しやすい傾向があります。
一方、バイナリパッケージは、ソースコードパッケージが正常にコンパイルされて生成されるものです。バイナリパッケージはリリース前にコンパイルプロセスが完了しているため、ユーザーによるソフトウェアのインストールが高速(Windows環境でのソフトウェアインストールと同程度の速度)であり、インストールプロセスでのエラー発生率も大幅に低減されます。
バイナリパッケージはLinux環境での標準的なソフトウェアインストール形式であるため、デフォルトインストールパッケージとも呼ばれます。現在、主に以下の2つの主流のバイナリパッケージ管理システムが存在します:
- RPMパッケージ管理システム:機能が強力で、インストール、アップグレード、クエリ、アンインストールが非常に簡単かつ便利であるため、多くのLinuxディストリビューションがデフォルトでこのメカニズムを採用しています。例えば、Fedora、CentOS、SuSEなどが該当します。
- DPKGパッケージ管理システム:Debian Linuxによって開発されたパッケージ管理メカニズムです。DPKGパッケージを通じて、Debian Linuxはソフトウェアパッケージの管理が可能となり、主にDebianとUbuntuで使用されています。
以下では、rpmコマンドを使用してバイナリソフトウェアパッケージを管理する方法について説明します。
RPMパッケージのデフォルトインストールパス
通常、RPMパッケージはシステムのデフォルトインストールパスが採用され、すべてのインストールファイルが表1に示すディレクトリにカテゴリ別に分散して配置されます。
表1 RPMパッケージのデフォルトインストールパス
| インストールパス | 意味 |
|---|---|
| /etc/ | 設定ファイルのインストールディレクトリ |
| /usr/bin/ | 実行可能なコマンドのインストールディレクトリ |
| /usr/lib/ | プログラムが使用する関数ライブラリの保存場所 |
| /usr/share/doc/ | 基本的なソフトウェア使用マニュアルの保存場所 |
| /usr/share/man/ | ヘルプファイルの保存場所 |
RPMパッケージのデフォルトインストールパスは、コマンドを使用して照会可能です。
また、RPMパッケージでは手動でインストールパスを指定することも可能ですが、この方法は推奨されません。なぜなら、手動でインストールパスを指定すると、すべてのインストールファイルが指定された場所に集中して配置され、システムのインストールパスを照会するコマンドも使用できなくなるためです(システムで認識させるためには手動設定が必要となり、得られるものより失うものの方が多くなります)。
RPMパッケージのインストール
rpm -ivh パッケージ完全名
注意点として、必ずパッケージ完全名を使用する必要があります。パッケージ完全名を含むコマンドでは、パスに注意してください。ソフトウェアパッケージが光学メディアに存在する可能性があるため、事前にデバイスのマウント作業を完了させておく必要があります。
このコマンドにおける各オプションの意味は以下の通りです:
- -i:インストール(install);
- -v:より詳細な情報を表示(verbose);
- -h:#を表示してインストール進捗を表示(hash);
複数のソフトウェアパッケージを一度にインストールするには、パッケージ完全名をスペースで区切るだけです
rpm -ivh パッケージA.rpm パッケージB.rpm パッケージC.rpm
RPMパッケージのアップグレード
rpm -Uvh パッケージ完全名
-U(大文字)オプションの意味は、ソフトウェアがインストールされていない場合は直接インストールし、インストール済みの場合は最新バージョンにアップグレードします。
rpm -Fvh パッケージ完全名
-F(大文字)オプションの意味は、ソフトウェアがインストールされていない場合は何もせず、古いバージョンがインストールされている場合のみアップグレードできます。
RPMパッケージのアンインストール
rpm -e パッケージ名
RPMソフトウェアパッケージのアンインストールでは、パッケージ間の依存関係を考慮する必要があります。例えば、最初にhttpdソフトウェアパッケージをインストールし、その後にhttpdの機能モジュールであるmod_sslパッケージをインストールした場合、アンインストール時にはmod_sslを先にアンインストールし、その後にhttpdをアンインストールしないとエラーが発生します。
ソフトウェアパッケージのインストール状態の確認
rpm -q パッケージ名
-qはクエリを意味し、queryの頭文字です。
パッケージがインストール済みの場合はパッケージ完全名が返され、インストールされていない場合は未インストールである旨のメッセージが表示されます。このコマンドを使用する際は、パッケージ名が完全に正しい必要があります。
[root@localhost vagrant]# rpm -q httpd
httpd-2.4.6-89.el7.centos.1.x86_64
[root@localhost vagrant]# rpm -q httpddd
パッケージ httpddd はインストールされていません
システムにインストールされているすべてのソフトウェアパッケージの確認
rpm -qa
このコマンドは、すべてのインストール済みソフトウェアパッケージを一覧表示します。通常grepと併用して、特定のキーワードを含むインストール済みパッケージを確認します。以下に例を示します。
[root@localhost ~]# rpm -qa | grep httpd
httpd-devel-2.2.15-15.el6.centos.1.i686
httpd-tools-2.2.15-15.el6.centos.1.i686
httpd-manual-2.2.15-15.el6.centos.1.noarch
httpd-2.2.15-15.el6.centos.1.i686
インストール済みソフトウェアパッケージの詳細情報の確認
rpm -qi パッケージ名
-iオプションはソフトウェア情報を確認することを意味し、informationの頭文字です。
-qのみを使用するとパッケージ完全名が返されますが、-qiを使用するとソフトウェアパッケージの詳細情報が返されます。ソフトウェアがインストールされていない場合は未インストールである旨のメッセージが表示されます。確認するパッケージ名は完全に正しい必要があります。
[root@localhost vagrant]# rpm -qi httpd
名前 : httpd
バージョン : 2.4.6
リリース : 89.el7.centos.1
アーキテクチャ: x86_64
インストール日時: 2019年9月12日 06:17:11 UTC
グループ : System Environment/Daemons
サイズ : 9817317
ライセンス : ASL 2.0
署名 : RSA/SHA256, 2019年7月31日 03:37:23 UTC, Key ID 24c6a8a7f4a80eb5
ソースRPM : httpd-2.4.6-89.el7.centos.1.src.rpm
ビルド日時 : 2019年7月29日 17:21:18 UTC
ビルドホスト : x86-02.bsys.centos.org
再配置可能性 : (再配置不可)
パッケージ作成者 : CentOS BuildSystem <http://bugs.centos.org>
ベンダー : CentOS
URL : http://httpd.apache.org/
概要 : Apache HTTP Server
説明 :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
[root@localhost vagrant]# rpm -qi http
パッケージ http はインストールされていません
ダウンロード済みソフトウェアパッケージの詳細情報の確認
rpm -qip 絶対パス+パッケージ完全名
-pオプションはダウンロード済みのソフトウェアパッケージを確認することを意味し、packageの頭文字です。
ソフトウェアパッケージがダウンロード済みだがまだインストールされていない場合に、関連情報を確認するためにこのコマンドを使用します。
注意点として、ここではパッケージ完全名を使用し、未インストールのパッケージは「絶対パス+パッケージ完全名」の形式で指定する必要があります。
インストール済みソフトウェアパッケージのファイルリストの確認
rpm -ql パッケージ名
-lオプションは、パッケージに含まれるすべてのファイルのインストール先ディレクトリを一覧表示します。
ダウンロード済みで未インストールのソフトウェアパッケージのファイルリストの確認
rpm -qlp 絶対パス+パッケージ完全名
-pオプションは未インストールのソフトウェアパッケージ情報を確認することを意味し、packageの頭文字です。
特定のソフトウェアパッケージに含まれるファイルを確認したいが、まだインストールされていない場合にこのコマンドを使用します。すでにインストール済みの場合は-qlを使用する方がより簡潔です。
パッケージがまだインストールされていないため、「絶対パス+パッケージ完全名」の形式でパッケージを指定する必要があります。
[root@localhost ~]# rpm -qlp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
…一部の出力を省略…
システムファイルがどのRPMパッケージに属するかの確認
rpm -qlコマンドはパッケージから含まれるファイルのインストールパスを確認するものですが、rpmは逆方向のクエリ、つまり特定のシステムファイルがどのRPMパッケージに属するかを確認することもサポートしています。そのコマンド形式は以下の通りです
rpm -qf システムファイル名
-fオプションの意味は、システムファイルがどのパッケージに属するかを確認することで、fileの頭文字です。
注意点として、RPMパッケージを使用してインストールされたファイルのみがこのコマンドを使用でき、手動で作成されたファイルでは使用できません。
[root@localhost etc]# rpm -qf /etc/php.ini php-common-7.3.9-1.el7.remi.x86_64
インストール済みソフトウェアパッケージの依存関係の確認
rpmコマンドを使用してRPMパッケージをインストールする際は、他のRPMパッケージとの依存関係を考慮する必要があります。rpm -qRコマンドは、インストール済みソフトウェアパッケージが依存する他のパッケージを確認するために使用されます。このコマンドの形式は以下の通りです:
rpm -qR パッケージ名
-R(大文字)オプションの意味は、ソフトウェアパッケージの依存性を確認することで、requiresの頭文字です。
未インストールのソフトウェアパッケージの依存関係の確認
rpm -qRp 絶対パス+パッケージ完全名
以下に例を示します
rpm -qRp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
pはダウンロード済みのパッケージ(package)を指し、このパッケージはインストール済みの場合も未インストールの場合もあります。その後に続くのは、ダウンロード済みパッケージの保存パスです。
注意点として、前述したパッケージ名とパッケージ完全名は同じものではありません。パッケージ名はパッケージ完全名の一部です。
パッケージ完全名の命名規則
パッケージ名-バージョン番号-リリース回数-ディストリビューター-Linuxプラットフォーム-対応ハードウェアプラットフォーム-パッケージ拡張子
ユーザーは名称から直接、この種のパッケージのバージョン、対応プラットフォームなどの情報を取得できます。
例えば、RPMパッケージの名前がhttpd-2.2.15-15.el6.centos.1.i686.rpmである場合、以下のような構成要素があります:
- httpd:パッケージ名。ここで注意すべきは、httpdがパッケージ名であり、httpd-2.2.15-15.el6.centos.1.i686.rpmは通常パッケージ完全名と呼ばれることです。パッケージ名とパッケージ完全名は異なり、一部のLinuxコマンド(パッケージのインストールとアップグレードなど)ではパッケージ完全名を使用し、他のコマンド(パッケージのクエリとアンインストールなど)ではパッケージ名を使用するため、間違えないように注意が必要です。
- 2.2.15:パッケージのバージョン番号で、通常
メジャーバージョン.マイナーバージョン.リビジョンの形式です。 - 15:バイナリパッケージのリリース回数で、このRPMパッケージが何回目のビルドで生成されたかを示します。
- el*:ソフトウェアのディストリビューターで、el6はRed Hat社がリリースし、RHEL 6.x (Red Hat Enterprise Linux)とCentOS 6.xで使用できることを意味します。
- centos:このパッケージがCentOSシステムで使用可能であることを示します。
- i686:パッケージが使用するハードウェアプラットフォームを示し、現在のRPMパッケージが対応するプラットフォームは表1の通りです:
表1 RPMパッケージ対応ハードウェアプラットフォーム
| プラットフォーム名 | 対応プラットフォーム情報 |
|---|---|
| i386 | 386以上のコンピュータでインストール可能 |
| i586 | 586以上のコンピュータでインストール可能 |
| i686 | ペンティウムII以上のコンピュータでインストール可能。現在のすべてのCPUはペンティウムII以上であるため、このソフトウェアバージョンが主流 |
| x86\_64 | 64ビットCPUでインストール可能 |
| noarch | ハードウェア制限なし |