1. ホーム
  2. コース一覧
  3. Linux応用コース
  4. パッケージ管理 入門(Debian系)

Linux応用コース6/11

パッケージ管理 入門(Debian系)

こちらの記事ではパッケージ管理システムについて解説します。

パッケージ管理システムとは?

各種ソフトウェアのインストール・アンインストール・更新をするためのツールです。また、各ソフトウェア同士やライブラリとの依存関係を管理します。コマンドひとつでインストール・アンインストールができるので便利です。

パッケージとは?

ソフトウェアに関わるファイル一式をまとめたもののことです。設定ファイル・ドキュメント・プログラム全体・プログラムを動かすためのライブラリが含まれています。パッケージの形式は多数存在しますが、ここでは主に二つの形式について説明します。

バイナリ形式のパッケージ

コンパイル済みのバイナリプログラムと関連ファイルで構成されています。

ソース形式のパッケージ

プログラムがコンパイル前のソースファイル形式で構成されています。プログラムを利用するには、インストール後に、プログラムをコンパイルする必要があります。

パッケージ管理システムの主な機能

リポジトリとの関係

リポジトリからパッケージをインストールするには、Web上にあるリポジトリをローカルのPCに登録します。そして、リポジトリからパッケージをローカルにインストールします。

ソフトウェアパッケージの更新・削除

パッケージ名を指定することで、そのソフトウェアのインストールやアンインストールが可能になります。

依存関係の解消

必要なソフトウェアを自動的にインストール・更新できます。また、ソフトウェアの衝突(コンフリクト)を回避することもできます。

設定と管理

パッケージの設定スクリプトを使って、競合するソフトウェアに対して、どちらを優先するか指定できます。

パッケージ管理用のコマンド

ソフトウェアをインストール・アンインストールする時に使います。RedHat系のディストリビューションではyumまたはrpmを、Debian系のディストリビューションではaptdpkgが使われています。

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: 取得先のURI
  • stretch : バージョン名
  • 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, --fullsearchを指定した際、全パッケージレコードを表示します。
-a, --all-versionsshowを指定した際利用が可能な全てのバージョンのパッケージレコードを表示します
-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-getapt-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-getapt-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環境をご利用下さい。