第十章 ソフトウェアの取得と管理
10.1 デスクトップでのソフトウェア管理
ソフトウェアセンターやGUIを使って管理する方法だよ。
10.2 Software ウィンドウを超えて
「Software」で検索できるソフトウェアには限りがあるんだ。
10.3 Linux の RPM と DEB パッケージについて知ろう
パッケージは tarball(圧縮ファイル)と呼ばれていて、実行ファイル(コマンド)、ドキュメント、設定ファイル、そしてライブラリが含まれているよ。
- DEB (.deb) パッケージ
Debian GNU/Linux プロジェクトが作成したパッケージ形式。Debian や、それをベースにしたディストリビューション(Ubuntu、Linux Mint、KNOPPIX など)で使われているんだ。apt や dpkg コマンドを使って、インストール、管理、更新、削除を行うよ。
- RPM (.rpm) パッケージ
もともとは Red Hat Package Manager だったけど、後に RPM Package Manager と命名されたんだ。RPM は SUSE、Red Hat 系(RHEL、Fedora)、そしてその他の派生版(CentOS、Oracle Linux など)で標準的に使われているパッケージ形式だよ。元々の rpm や、それを強化した yum、そして現在の dnf コマンドを使ってソフトウェアを管理するんだ。
yum は最終的に dnf コマンドに置き換わる予定だよ。
10.3.1 DEB パッケージを理解する
Debian パッケージは、多くのファイルとソフトウェアに関連するメタデータをアーカイブ形式で保存しているんだ。ファイルには実行ファイル(コマンド)、設定ファイル、その他のプロジェクトファイルが含まれるよ。メタデータには依存関係、ライセンス、パッケージサイズ、説明文などの情報が入っているんだ。
apt* コマンドを使って、取得(apt-get)、検索(apt-cache search)、詳細表示(apt-cache show)、インストール(apt-get install)、アップグレード(apt-get upgrade)、インストール済みリストの表示(apt-cache pkgnames)などができるよ。
aptitude コマンドを使えば、シェルの中で画面ベースのメニューを使ってインストールすることもできるんだ。
10.3.2 RPM パッケージを理解する
RPM パッケージはいろいろなファイルを一つにまとめたもので、それぞれのファイルが特定の機能を提供しているんだ。RPM の中身は、ソフトウェアを構成するコマンド、設定ファイル、ドキュメント、あるいはメタデータ(パッケージの内容、ソース、実行に必要な条件など)だよ。
rpm -q -i パッケージ名 コマンドを使えば、特定のソフトウェアの情報を確認できるよ。
10.4 yum を使った RPM パッケージの管理
10.4.1 yum から dnf への移行
DNF は「Dandified yum」の略称なんだ。 https://github.com/rpm-software-management/dnf/
dnf は yum と基本的なコマンドラインの互換性を保っているけど、大きな違いの一つは、厳格な API に従っていて、拡張機能やプラグインの開発が推奨されている点だね。
以下の yum コマンドは、すべて dnf コマンドとしてそのまま使えるよ。
dnf についてもっと詳しく知りたいときは、 https://dnf.readthedocs.io/ を見てみて。
10.4.2 yum の仕組みを理解する
基本構文は yum [オプション] コマンド だよ。
例えば Firefox をインストールする場合は:yum install firefox
- /etc/yum.conf のチェック
ファイルの中身はこんな感じ:
gpgcheck パッケージの検証を行うかどうか。
installonly_limit=3 システムに保存できる同じパッケージの最大バージョン数(カーネルパッケージを少なくとも2つ確保するために、2未満には設定しないほうがいいよ)。
clean_requirements_on_remove=True ソフトウェアをアンインストールするとき、他のソフトで使われていない依存関係も一緒に削除する設定。
best=True アップグレード時に、できるだけ最新バージョンを優先して試みる設定。
cachedir キャッシュの場所。
keepcache キャッシュを保持するかどうか。
debuglevel ログに書き出す詳細レベル。高いほど詳しい。
metadata_expire メタデータの有効期限。
詳しく知りたいときは、 man yum.conf コマンドを使ってみて。
- /etc/yum.repos.d/*.repo ファイルのチェック
特定のソフトウェアリポジトリを有効にしたいときは、このディレクトリに .repo ファイルを置くんだ。内容はだいたいこんな感じ:
| |
リポジトリは好きなだけ有効にできるけど、yum コマンドを実行するたびに全部チェックしてメタデータをダウンロードするから、あまり増やしすぎないようにね。
- YUM リポジトリから RPM パッケージとメタデータをダウンロードする
rpm ディレクトリには repodata ディレクトリがあって、有効なすべてのリポジトリのメタデータがここに集約されるんだ。
メタデータは /var/cache/yum に保存されて、有効期限が切れると最新のものが取得されるよ。yum はデフォルトで 6時間、dnf は 48時間だね。
- RPM パッケージを Linux ファイルシステムにインストールする
関連するソフトがキャッシュにダウンロードされたら、yum は内部で rpm コマンドを走らせてインストールするんだ。スクリプトが含まれている場合は先にそれを実行し、そのあとパッケージの内容(コマンド、設定、ドキュメントなど)をメタデータで指定された場所にコピーする。最後にインストール後処理のスクリプトを動かすよ。
- YUM リポジトリのメタデータをローカルの RPM データベースに保存する
各 RPM リポジトリに含まれるメタデータは、最終的にローカルの RPM データベースにコピーされるんだ。このデータベースは /var/lib/rpm ディレクトリ内の複数のファイルに保存されているよ。
10.4.3 サードパーティのリポジトリを利用する
安定性を考えるなら公式リポジトリだけを使うのがおすすめだけど、使い勝手を優先するなら RPM Fusion などのサードパーティリポジトリを有効にしてもいいと思うよ。 https://rpmfusion.org/ を参考にしてみて。
10.4.4 yum コマンドでソフトウェアを管理する
- パッケージを検索する
yum search キーワード
- ソフトウェアの詳細情報を取得する
yum info firefox
- コマンドや設定ファイル名、ライブラリ名はわかるけど、パッケージ名がわからないとき
yum provides キーワード
listサブコマンドを使っていろいろな形式でパッケージ名を表示する
yum list firefox
yum list available
yum list installed
yum list all
- パッケージの依存関係や提供元などを確認する
yum deplist firefox | less
- パッケージのインストールと削除
installサブコマンドで一つ以上のパッケージと依存関係をインストールする
yum install firefox または yum -y install firefox (確認なしでインストールする場合)
reinstallサブコマンドで再インストールする
yum reinstall firefox
removeサブコマンドでソフトと不要になった依存関係を削除する
yum remove firefox
または、履歴から取り消すこともできるよ。
yum historyでインストール履歴を確認して、yum history info 12で ID 12 の詳細を見て、yum history undo 12でその操作を取り消せるんだ。
- パッケージを更新する
yum check-update で更新があるか確認、yum update で全部更新、yum update firefox で Firefox だけ更新するよ。
- パッケージグループを更新する
一連のパッケージをまとめて管理するために、yum はパッケージグループをサポートしているんだ。
yum grouplist | less でグループ一覧を表示。
yum groupinfo LXDE で LXDE デスクトップ関連のグループ詳細を確認。
yum groupinstall LXDE で LXDE グループをインストール。
yum groupremove LXDE でグループごと削除。
- RPM データベースとキャッシュのメンテナンス
yum clean packages インストールパッケージを削除。
yum clean metadata メタデータを削除。
yum clean all 全部削除。
めったにないけど、RPM データベースが壊れることもあるんだ。
yum check キャッシュとデータベースの状態をチェック。
rpm --rebuilddb データベースを再構築。
注:ローカルの RPM データベースを操作するなら、普通は rpm コマンドを使うのが一番適しているよ。
- YUM リポジトリから RPM をダウンロードする
インストールせずに、現在のディレクトリにダウンロードだけする場合:
yumdownloader firefox
dnf download firefox
10.5 rpm コマンドを使ったインストール、照会、検証
ほとんどの場合、rpm コマンドは手元にあるパッケージファイルに対して使うよ。
10.5.1 rpm を使ったパッケージのインストールと削除
- インストール
rpm -i パッケージ名
ファイル名(ベース名、バージョン、カーネルなどを含むフルネーム)を指定する必要があるよ。
- アップグレード
rpm -Uhv パッケージ名
-h は進行状況を # で表示、-v は詳細出力を意味するよ。
- 更新
今のディレクトリにたくさん rpm があって、すでにインストールされているものだけ更新したいとき:
rpm -Fhv *.rpm
- 再インストール
rpm -Uhv --replacepkgs パッケージ名
- ダウングレード
rpm -Uhv --oldpackage パッケージ名
- 削除
削除のときはベース名だけで OK。例えば Firefox を消すなら:
rpm -e firefox
ただし、そのソフトの依存関係までは消してくれないから注意してね。
10.5.2 rpm 情報の照会
インストール後に -q オプションを使って情報を調べるよ。説明なら -qi、ファイルリストなら -ql、設定ファイルなら -qc だね。
照会はベース名で大丈夫: rpm -qi firefox
他にも、依存関係(-q --requires)、提供しているバージョン(-q --provides)、実行スクリプト(-q --scripts)、変更履歴(-q --changelog)なんかも見れるよ。
--queryformat で表示形式を変えたり、--querytags で使えるタグを確認できたりするんだ。
これらはローカルの RPM データベースへの照会だけど、
-pオプションを付ければ今のディレクトリにあるファイルに対しても照会できるよ。この場合はフルネームが必要:rpm -qip zsh-5.7.1-1.fc30.x86_64.rpm
10.5.3 rpm パッケージの検証
注:この機能について他の資料であまり見かけなかったし、今自分の Linux 環境がないから検証できてないんだ(前使ってた時は再現しなかった記憶がある)。でも一応メモしておくね。
-V オプションを使うと、インストール済みのパッケージが最初から変更されていないかチェックできるよ。もしバイナリファイル(/bin 以下など)が変更されていたら、システムがハッキングされている可能性があるんだ。設定ファイルの変更はよくあることだけどね。
Firefox の状態をチェックするなら: rpm -V firefox
もし以下の文字が出たら、その項目が変更されているってことだよ。何も出なければオリジナルと同じ状態だね。
| 文字 | 説明 |
|---|---|
| S | ファイルサイズが一致しない |
| M | モードが一致しない(権限やファイルタイプ) |
| 5 | MD5 チェックサムが一致しない |
| D | デバイスのメジャー/マイナー番号が不一致 |
| L | readLink (2) のパスが不一致 |
| U | 所有ユーザーが一致しない |
| G | 所有グループが一致しない |
| T | mTime(修正時刻)が一致しない |
| P | caPabilities(機能)が一致しない |
これらのインジケーターは rpm マニュアルの Verify セクションに載っているよ。
--replacepkgs を使えば、元の状態に戻すことができるんだ。
セキュリティを極限まで高めるなら、RPM データベース(/var/lib/rpm)をバックアップして読み取り専用メディアに保存しておくといいよ。もしデータベース自体が改ざんされたら、検証の意味がなくなっちゃうからね。
10.6 企業でのソフトウェア管理
Kickstart ファイル、PXE 起動、Satellite サーバー (Spacewalk) 、コンテナイメージなどがあるよ。
これらを使えば、大量のインストールを自動化できるんだ。