Linux応用コース6/11
パッケージ管理 入門(Debian系)
こちらの記事ではパッケージ管理システムについて解説します。
パッケージ管理システムとは?
各種ソフトウェアのインストール・アンインストール・更新をするためのツールです。また、各ソフトウェア同士やライブラリとの依存関係を管理します。コマンドひとつでインストール・アンインストールができるので便利です。
パッケージとは?
ソフトウェアに関わるファイル一式をまとめたもののことです。設定ファイル・ドキュメント・プログラム全体・プログラムを動かすためのライブラリが含まれています。パッケージの形式は多数存在しますが、ここでは主に二つの形式について説明します。
バイナリ形式のパッケージ
コンパイル済みのバイナリプログラムと関連ファイルで構成されています。
ソース形式のパッケージ
プログラムがコンパイル前のソースファイル形式で構成されています。プログラムを利用するには、インストール後に、プログラムをコンパイルする必要があります。
パッケージ管理システムの主な機能
リポジトリとの関係
リポジトリからパッケージをインストールするには、Web上にあるリポジトリをローカルのPCに登録します。そして、リポジトリからパッケージをローカルにインストールします。
ソフトウェアパッケージの更新・削除
パッケージ名を指定することで、そのソフトウェアのインストールやアンインストールが可能になります。
依存関係の解消
必要なソフトウェアを自動的にインストール・更新できます。また、ソフトウェアの衝突(コンフリクト)を回避することもできます。
設定と管理
パッケージの設定スクリプトを使って、競合するソフトウェアに対して、どちらを優先するか指定できます。
パッケージ管理用のコマンド
ソフトウェアをインストール・アンインストールする時に使います。RedHat系のディストリビューションではyum
またはrpm
を、Debian系のディストリビューションではapt
やdpkg
が使われています。
dpkgコマンドを用いたパッケージ管理
dpkg
は「Debian Package」の略で、Debianのパッケージである「deb」ファイルを取り扱うコマンドです。パッケージを扱うにはdpkg
コマンドを使用します。パッケージのインストールには管理者権限が必要になりますのでsudo
コマンドを付加して実行しましょう。
パッケージのインストール方法
sudo dpkg -i fzf_0.30.0-1_amd64.deb
パッケージファイル名の各項目は次のようになっています。
fzf_0.30.0-1_amd64.deb
fzf
: パッケージ名0.30.0
: バージョン番号1
: Debianリビジョン番号amd64
: アーキテクチャdeb
: 拡張子
dpkgの主なオプション
オプション | 説明 |
---|---|
-E | 既に同バージョンがインストールされていれば、インストールは行わない |
-G | 既に新バージョンがインストールされていれば、インストールは行わない |
-R, —recursive | ディレクトリ内を再帰的に処理する |
アクション | 説明 |
---|---|
--install <パッケージファイル名> | パッケージをインストール |
--remove パッケージ名 | 設定ファイルを残してパッケージをアンインストール |
--purge パッケージ名 | 設定ファイルを含め完全にパッケージをアンインストール |
--list 検索パターン | インストール済みパッケージを検索して表示 |
--search ファイル名検索パターン | 指定したファイルがどのパッケージからインストールされたかを表示(ワイルドカードが使用可能) |
--listfiles パッケージ名 | 指定パッケージからインストールされたファイルを一覧表示 |
--status パッケージ名 | パッケージの情報を表示 |
--configure パッケージ名 | 展開されたパッケージを構成 |
--unpack パッケージ名 | パッケージを展開(インストールはしない) |
パッケージのアンインストール方法
設定ファイルを含めて完全にアンインストールする方法(下記のどちらでも可能)
sudo dpkg --purge tmux
sudo dpkg -P tmux
設定ファイルを残しながらアンインストールする方法(下記のどちらでも可能)
sudo dpkg --remove tmux
sudo dpkg -r tmux
パッケージの表示、検索方法
--search
オプション(または -S
)は指定したファイルがどのパッケージからインストールされているのかを表示します。
dpkg -S '*/perl'
perl-modules-5.24: /usr/share/perl
perl: /usr/share/lintian/overrides/perl
perl-base, libperl5.24:amd64: /usr/lib/x86_64-linux-gnu/perl
perl: /etc/perl
perl-base: /usr/bin/perl
perl-base, perl: /usr/share/doc/perl
--lis
tオプション(または -l
)はインストール済みの全てのパッケージを一覧表示します。
dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-===================-==============-==============-===========================================
ii adduser 3.115 all add and remove users and groups
ii apt 1.4.10 amd64 commandline package manager
ii base-files 9.9+deb9u13 amd64 Debian base system miscellaneous files
ii base-passwd 3.5.43 amd64 Debian base system master password and grou
ii bash 4.4-5 amd64 GNU Bourne Again SHell
(以下省略)
--listfiles
オプション(または -L
)は特定のパッケージに含まれるファイルを表示します
dpkg -L perl
/.
/etc
/etc/perl
/etc/perl/CPAN
/etc/perl/Net
/etc/perl/Net/libnet.cfg
/etc/perl/sitecustomize.pl
/usr
(以下省略)
APTを用いたパッケージ管理
APTについて説明する前に、まずリポジトリについて詳しく解説します。リポジトリを簡単に説明すると、ソフトウェアの保管場所といったところでしょうか。ファイルやデータを集めて管理しているデータベース、もしくはネットワーク上のサーバーなどが該当します。パッケージ管理システムではデフォルトでいくつかのリポジトリが設定されており、コマンドによってそれらのリポジトリからダウンロードが行われます。標準のリポジトリに目的のパッケージがない場合、サードパーティのリポジトリを追加することもあります。※リポジトリの利用は標準・サードパーティに関わらずすべて自己責任になりますのでご注意ください。
apt-getコマンド
apt-get
コマンドは、APT(Advanced Packaging Tool)というパッケージ管理ツールの一部です。Debian系のパッケージ管理ツールであるdpkg
を拡張するために作られました。パッケージの依存関係を調整しながらインストール・アンインストールを行います。
apt-getコマンドの主なオプション
apt-get
コマンドが利用するリポジトリの情報は、以下のファイルに設定されています。
cat /etc/apt/sources.list
# deb http://snapshot.debian.org/archive/debian/20200908T070000Z stretch main
deb http://deb.debian.org/debian stretch main
# deb http://snapshot.debian.org/archive/debian-security/20200908T070000Z stretch/updates main
deb http://security.debian.org/debian-security stretch/updates main
# deb http://snapshot.debian.org/archive/debian/20200908T070000Z stretch-updates main
deb http://deb.debian.org/debian stretch-updates main
リポジトリ情報の各部分について説明します。
deb http://deb.debian.org/debian stretch main
deb
: debパッケージを取得するhttp://deb.debian.org/debian
: 取得先のURIstretch
: バージョン名main
: 公式にサポートされているソフトウェアであることの証明
apt-getコマンドの使い方
まず最初にリポジトリから最新のパッケージ情報を取得して、インデックスを更新します。
sudo apt-get update
このコマンドはシステム上のパッケージのデータベース情報を更新しています。システム自体を更新しているわけではありません。次にパッケージのインストールについて解説します。今回はtmux
をインストールしてみます。
sudo apt-get install tmux
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
tmux
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 265 kB of archives.
After this operation, 635 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian stretch/main amd64 tmux amd64 2.3-4 [265 kB]
Fetched 265 kB in 0s (7,177 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package tmux.
(Reading database ... 9294 files and directories currently installed.)
Preparing to unpack .../archives/tmux_2.3-4_amd64.deb ...
Unpacking tmux (2.3-4) ...
Setting up tmux (2.3-4) ...
インストールが完了しました。今度はこのtmux
のパッケージをアンインストールしてみます。
sudo apt-get remove tmux
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libevent-2.0-5 libutempter0
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
tmux
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 635 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 9305 files and directories currently installed.)
Removing tmux (2.3-4) ...
これでアンインストールは完了です。
apt-cacheコマンド
apt-cache
コマンドはパッケージ情報を照会・検索するコマンドです。検索・照会するパッケージはインストールされている必要はありません。
主なサブコマンドとオプション
サブコマンド | 説明 |
---|---|
search | 指定したキーワードを含むパッケージを検索します |
show | パッケージについての一般的な情報を表示します |
showpkg | パッケージについての詳細な情報を表示します |
depends | 指定したパッケージの依存関係情報を表示します |
オプション | 説明 |
-f, --full | searchを指定した際、全パッケージレコードを表示します。 |
-a, --all-versions | showを指定した際利用が可能な全てのバージョンのパッケージレコードを表示します |
-h, --help | 使用方法を表示します |
-v, --version | バージョン情報を表示します |
search
の使い方は以下の通りです。今回もtmux
について検索しています。
apt-cache search tmux
tmux - terminal multiplexer
tmux-plugin-manager - tmux plugin manager based on git
tmuxinator - Create and manage tmux sessions easily
show
の使い方も確認します。tmux
についての情報を表示しています。
apt-cache show tmux
Package: tmux
Version: 2.3-4
Installed-Size: 620
Maintainer: Romain Francoise <rfrancoise@debian.org>
Architecture: amd64
Depends: libc6 (>= 2.14), libevent-2.0-5 (>= 2.0.10-stable), libtinfo5 (>= 6), libutempter0 (>= 1.1.5)
Description: terminal multiplexer
(以下省略)
showpkg
で詳細な情報も確認します。
apt-cache showpkg tmux
Package: tmux
Versions:
2.3-4 (/var/lib/apt/lists/deb.debian.org_debian_dists_stretch_main_binary-amd64_Packages.lz4) (/var/lib/dpkg/status)
Description Language:
File: /var/lib/apt/lists/deb.debian.org_debian_dists_stretch_main_binary-amd64_Packages.lz4
MD5: dc6ff920cb9183a42694d0ea54835078
(以下省略)
depends
でパッケージの依存関係情報も確認します。
apt-cache depends tmux
tmux
Depends: libc6
Depends: libevent-2.0-5
Depends: libtinfo5
Depends: libutempter0
サブコマンドにはオプションも存在しており、細かな検索などが可能になっています。
aptコマンド
apt
コマンドのサブコマンドは、 apt-get
と apt-cache
の機能を組み合わせたものとなっています。現在はこれら二つのコマンドに変わって、このapt
コマンドの利用が推奨されています。例として、パッケージリストを更新する apt
コマンドの使用例は以下の通りです。
sudo apt update
aptコマンドの主なオプション
オプション | 説明 |
---|---|
-c | 設定ファイルを指定する |
-d | パッケージのダウンロードのみ行う |
-y | 問い合わせには全てyesと回答する |
--no-install-recommends | 必須ではない推奨パッケージはインストールしない |
--install-suggests | 提案パッケージもインストールする |
--reinstall | インストール済みパッケージの再インストールを許可する |
aptコマンドの主なサブコマンド
サブコマンド | 説明 |
---|---|
update | パッケージリストの更新をします |
install | パッケージをインストールします |
remove | 設定ファイルを残してパッケージを削除します |
purge | パッケージを完全に削除します |
upgrade | システムをアップグレードします |
full-upgrade | システムのメジャーバージョンを最新にアップデートします |
show | 指定したパッケージに関する情報を表示します |
list | パッケージのリストを表示します |
list --installed | インストールされたパッケージを一覧表示します |
list --upgradable | アップグレード可能なパッケージを表示します |
search | 指定したキーワードでパッケージ情報を全文検索します |
depends | パッケージの依存関係を表示します |
autoremove | 必要とされていないパッケージを自動的に削除します |
apt-get
とapt-cache
を組み合わせたようなサブコマンドとなっています。これらのサブコマンドとオプションを駆使することで、様々なパッケージ管理タスクを apt
コマンド一つで効率的に実行することが可能となります。
インストール
sudo apt install tmux
Reading package lists... Done
Building dependency tree
Reading state information... Done
(以下省略)
インストールされたパッケージの一覧表示
sudo apt list --installed
Listing... Done
adduser/oldoldstable,now 3.115 all [installed,automatic]
apt/oldoldstable,now 1.4.10 amd64 [installed,upgradable to: 1.4.11]
(以下省略)
必要とされていないパッケージの自動削除
sudo apt autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 19 not upgraded.
このコマンドは、システムに不要となったパッケージを削除します。今回の例では削除されるパッケージは無いため、何も削除されていません。
apt-fileコマンド
apt-file
コマンドを使用すると、指定したファイルを含むパッケージを検索できます。必要なファイルがわかっていて、パッケージ名がわからないといった場合に使用します。
このコマンドを使用するには、apt-file
パッケージをインストールします。
sudo apt install apt-file -y
apt-file
の初回使用前や、パッケージリストに変更があった場合には、 apt-file update
を用いてパッケージ情報を更新します。
sudo apt-file update
主なオプションとサブコマンド
オプション | 説明 |
---|---|
-F, --fixed-string | パターン全体と一致するものだけを対象にします |
-I, --ignore-case | 大文字小文字を区別しません |
-x, --regexp | パターンを正規表現として解釈します |
-f, --from-file | パターンをファイルから読み込みます |
-D, --from-deb | パターンにdebファイル名を指定します |
-c, --cache | キャッシュディレクトリの場所を指定します |
サブコマンド | 説明 |
---|---|
search(またはfind) | パターンで指定した名前のファイルが含まれているパッケージを一覧表示します |
list(またはshow) | パターンで指定したパッケージに収録されているファイルを一覧表示します |
purge | キャッシュを削除します |
update | パッケージリストを/etc/apt/sources.listに従い再取得します |
実際に使用してみましょう。今回はusr/bin/zip
ファイルが収録されているパッケージを検索してみます。
apt-file search usr/bin/zip
hatari: /usr/bin/zip2st
openfoam: /usr/bin/zipUpMesh
perl: /usr/bin/zipdetails
zip: /usr/bin/zip
(以下省略)
いくつかの候補が出てきています。これらをさらに絞り込んで、usr/bin/zip
と完全に一致したパッケージを検索する場合をみてみましょう。完全に一致したファイルを検索したい場合は-F
オプションを使用します。
apt-file -F search usr/bin/zip
zip: /usr/bin/zip
まとめ
dpkg
コマンドとapt
コマンドについて解説しました。apt
コマンドはdpkg
の機能を拡張するものです。現在はapt-get
ではなく、apt
コマンドが主流になっています。学習には少々時間がかかるかもしれませんが、使いこなすことができればDebian系Linuxのパッケージ操作で困ることはなくなります。ここで紹介したオプション以外にもさまざまなオプションがありますので、詳細なオプションや使用方法については、公式のmanページ( man apt
コマンドで閲覧可能)などを参照してみてください。
問題を解くためには、十分な画面サイズのPC環境をご利用下さい。