パッケージ管理とは
パッケージのインストール/アンインストールやアップデート作業において、どのようなパッケージがどこにインストールされているかを管理したり、パッケージ間の競合を管理したりする仕組みを提供するのが、パッケージ管理システム。パッケージ管理システムにより、インストールやアンインストール、アップデート作業が容易となる。
パッケージ A に含まれるファイルをパッケージ B が利用している場合、パッケージ A なしではパッケージ B は利用できない。このようにあるパッケージが別のパッケージに依存する関係をパッケージの依存関係と呼ぶ。
また、パッケージ C によってインストールされているファイル D が、すでにパッケージ A によってインストールされているファイル D と競合するため、パッケージ C をインストールすると問題が発生する場合がある。これをパッケージの競合関係と呼ぶ。
パッケージ管理システムは依存関係や競合関係を監視し、依存関係や競合関係を損なうようなインストール/アンインストールには警告を出す。
Linux におけるパッケージ管理は大きく分けて Debian 形式と RPM 形式が存在する。
- Debian 形式: Debian 系ディストリビューションで利用される形式で、パッケージ管理作業には dpkg コマンドや APT ツールが使用される
- RPM 形式: Red Hat 系ディストリビューションで利用される形式で、パッケージ管理作業には rpm/yum コマンドが使用される
両者には互換性がないが、alien コマンドで相互に形式を変換することが可能。
パッケージ管理システムを使って、コンパイル済みのバイナリパッケージを扱う場合は、ソースからのインストールとは異なり、動作環境に依存する形となる。
そのため、ディストリビューションやバージョン、CPU アーキテクチャなどの動作環境が一致したパッケージを選択する必要がある。
dpkg コマンドを用いたパッケージ管理
Debian 形式のパッケージファイル名は以下のようになっている。
[書式] tree1.6.0-1i386.deb
それぞれ以下を表している。
tree | パッケージの名称 |
---|---|
1.6.0 | バージョン番号 |
1 | Debian リビジョン番号 |
i386 | CPU アーキテクチャ |
deb | 拡張子 |
Debian 形式のパッケージを扱うには dpkg コマンドを用いる。
オプション | 説明 |
---|---|
-E | すでに同バージョンがインストールされていればインストールしない |
-G | 既に新バージョンがインストールされていればインストールしない |
-R (—recursive) | ディレクトリ内を再帰的に処理する |
アクション | 説明 |
-r パッケージ名 (—remove) | 設定ファイルを残してパッケージをアンインストールする |
-P パッケージ名 (—purge) | 設定ファイルも含め完全にパッケージをアンインストールする |
-l 検索パターン (—list) | インストール済みパッケージを検索して表示する |
-S ファイル名検索パターン (—search) | 指定したファイルがどのパッケージからインストールされたかを表示する (パターンにはワイルドカードが使用可能) |
-L パッケージ名 (—listfiles) | 指定パッケージからインストールされたファイルを一覧表示する |
-s パッケージ名 (—status) | パッケージの情報を表示する |
—configure パッケージ名 | 展開されたパッケージを構成する |
—unpack パッケージ名 | パッケージを展開する (インストールはしない) |
実際に apache2 のパッケージをダウンロードしてきて、インストールしてみる。
$ wget http://archive.ubuntu.com/ubuntu/pool/main/a/apache2/apache2_2.4.18-2ubuntu3.8_amd64.deb
--2018-05-13 20:40:37-- http://archive.ubuntu.com/ubuntu/pool/main/a/apache2/apache2_2.4.18-2ubuntu3.8_amd64.deb
$ ls
apache2_2.4.18-2ubuntu3.8_amd64.deb
$ sudo dpkg -i apache2_2.4.18-2ubuntu3.8_amd64.deb
(Reading database ... 76940 files and directories currently installed.)
Preparing to unpack apache2_2.4.18-2ubuntu3.8_amd64.deb ...
Unpacking apache2 (2.4.18-2ubuntu3.8) over (2.4.18-2ubuntu3) ...
Setting up apache2 (2.4.18-2ubuntu3.8) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for ufw (0.35-0ubuntu2) ...
Processing triggers for systemd (229-4ubuntu21.1) ...
Processing triggers for ureadahead (0.100.0-19) ...
...
$ sudo dpkg -s apache2
Package: apache2
Status: install ok installed
Priority: optional
Section: httpd
Installed-Size: 490
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 2.4.18-2ubuntu3.8
...
-S で指定したファイルがどのパッケージからインストールされたかを表示する。
$ dpkg -S '*/apache2'
apache2-bin, apache2: /var/lib/apache2
apache2: /etc/apache2
apache2-data, apache2: /usr/share/apache2
apache2: /etc/logrotate.d/apache2
apache2: /var/log/apache2
apache2: /usr/share/bug/apache2
apache2-bin: /usr/sbin/apache2
apache2: /etc/cron.daily/apache2
apache2: /usr/share/doc/apache2
apache2-bin: /usr/lib/apache2
apache2: /etc/ufw/applications.d/apache2
apache2: /var/cache/apache2
apache2: /usr/share/lintian/overrides/apache2
apache2: /etc/init.d/apache2
設定ファイルも含めてアンインストール。
$ sudo dpkg --purge apache2
(Reading database ... 76940 files and directories currently installed.)
Removing apache2 (2.4.18-2ubuntu3.8) ...
Purging configuration files for apache2 (2.4.18-2ubuntu3.8) ...
dpkg: warning: while removing apache2, directory '/var/www/html' not empty so not removed
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for ufw (0.35-0ubuntu2) ...
$ dpkg -S '*/apache2'
apache2-bin: /var/lib/apache2
apache2-data: /usr/share/apache2
apache2-bin: /usr/sbin/apache2
apache2-bin: /usr/lib/apache2
-L (—listfiles) でパッケージに含まれるファイルを表示。
$ dpkg -L apache2
/.
/usr
/usr/sbin
/usr/sbin/apache2ctl
/usr/sbin/a2enmod
/usr/sbin/a2query
/usr/share
/usr/share/apache2
/usr/share/apache2/apache2-maintscript-helper
/usr/share/apache2/ask-for-passphrase
apt-get コマンド
apt-get は APT (Advanced Packaging Tool) というパッケージ管理ツールに含まれるコマンドで、依存関係を調整しながらパッケージのインストール/アップグレード/アンインストールを行う。
インターネット経由で最新パッケージの入手からインストールと依存関係の解決までできる。
オプション | 説明 |
---|---|
-d | ファイルをダウンロードする (インストールはしない) |
-s | システムを変更せず動作をシミュレートする |
サブコマンド | 説明 |
dist-upgrade | システムを最新にアップグレードする |
install | パッケージをインストールまたはアップグレードする |
remove | パッケージをアンインストールする |
update | パッケージデータベースを更新する |
upgrade | システムの全パッケージのうち、他のパッケージを削除しないものをアップグレードする |
apt-get コマンドでパッケージ管理を行うには、/etc/apt/sources.list** にパッケージを管理しているサイトの URL を記述する。
$ cat /etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ xenial main restricted
deb-src http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ xenial main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb-src http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
...
/etc/apt/sources.list ファイルの書式は以下の通り。
deb http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb | deb (deb パッケージを取得) または deb-src (ソースを取得) |
---|---|
http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ | 取得先の URI |
xenial-updates | バージョン名 |
main restricted | main: 公式にサポートされるソフトウェア、universe: コミュニティによってメンテナンスされるソフトウェア、restricted: デバイス用のプロプライエタリなドライバ、multiverse: 著作権もしくは法的な問題によって制限されたソフトウェア、contrib: フリーではない依存関係のあるソフトウェア、non-free: 利用と改変再配布に制限のあるソフトウェア |
$ sudo apt-get install apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
www-browser apache2-doc apache2-suexec-pristine | apache2-suexec-custom
The following NEW packages will be installed:
apache2
0 upgraded, 1 newly installed, 0 to remove and 45 not upgraded.
Need to get 0 B/86.8 kB of archives.
...
$ sudo apt-get remove apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 ssl-cert
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
apache2
0 upgraded, 0 newly installed, 1 to remove and 45 not upgraded.
...
システムを一括して新しいバージョンにアップグレードする。
この際、重要性の高いパッケージをインストールするために既存のパッケージを削除することがある。安定板のマイナーバージョンアップのように、削除の伴わないパッケージのアップグレードを実行するには、apt-get upgrade を実行する。
これは、システムの全パッケージのうち、他のパッケージを削除しないもののみをアップグレードする。
$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 ssl-cert
Use 'sudo apt autoremove' to remove them.
The following packages will be upgraded:
apparmor apport apt apt-transport-https
...
apt-cache コマンド
apt-cache はパッケージ情報を照会* 検索できるコマンド。パッケージがインストールされている必要はない。
サブコマンド | 説明 |
---|---|
search キーワード | 指定したキーワードを含むパッケージを検索する |
show パッケージ名 | パッケージについての一般的な情報を表示する |
showpkg パッケージ名 | パッケージについての詳細な情報を表示する |
depends | 指定したパッケージの依存関係情報を表示する |
$ apt-cache search apache2
apache2 - Apache HTTP Server
apache2-bin - Apache HTTP Server (modules and other binary files)
apache2-data - Apache HTTP Server (common files)
apache2-dbg - Apache debugging symbols
apache2-dev - Apache HTTP Server (development headers)
apache2-doc - Apache HTTP Server (on-site documentation)
...
$ apt-cache show apache2
Package: apache2
Architecture: amd64
Version: 2.4.18-2ubuntu3.8
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 490
Provides: httpd, httpd-cgi
Pre-Depends: dpkg (>= 1.17.14)
Depends: lsb-base, procps, perl, mime-support, apache2-bin (= 2.4.18-2ubuntu3.8), apache2-utils (>= 2.4), apache2-data (= 2.4.18-2ubuntu3.8)
Recommends: ssl-cert
...
$ apt-cache depends apache2
apache2
PreDepends: dpkg
Depends: lsb-base
Depends: procps
Depends: perl
Depends: mime-support
Depends: apache2-bin
Depends: apache2-utils
Depends: apache2-data
Conflicts: <apache2.2-bin>
Conflicts: <apache2.2-common>
Recommends: ssl-cert
...
aptitude コマンド
aptitude は apt-get よりも高度な機能を持ったコマンド。正規表現を使ってコマンド検索ができる。
サブコマンド | 説明 |
---|---|
update | |
show パッケージ名 | パッケージ情報を表示する |
search パターン | 指定したパターンでパッケージを検索する |
install パッケージ名 | パッケージをインストールまたはアップグレードする |
remove パッケージ名 | 設定ファイルを残してパッケージをアンインストールする |
purge パッケージ名 | 設定ファイルも含めてパッケージをアンインストールする |
download パッケージ名 | パッケージファイルをダウンロードする |
full-upgrade | システムの全パッケージを最新にアップデートする |
safe-upgrade | システムの全パッケージのうち、他のパッケージを削除しないものをアップグレードする |
$ aptitude search "~napache2~i"
idA apache2-bin - Apache HTTP Server (modules and other binary files)
idA apache2-data - Apache HTTP Server (common files)
idA apache2-utils - Apache HTTP Server (utility programs for web servers)
検索パターン | 説明 |
---|---|
~n 正規表現 | パッケージ名が正規表現パターンにマッチするパッケージを検索する |
~d 正規表現 | パッケージの説明が正規表現パターンにマッチするパッケージを検索する |
~V 正規表現 | パッケージのバージョンが正規表現パターンにマッチするパッケージを検索する |
-i | インストール済みのパッケージを検索する |
-U | 更新可能なパッケージを検索する |
-M | 自動的にインストールされたパッケージを検索する |