DPKG

はじめに

第7章はじめに

Debian Package Manager（DPKG）は、Linuxシステムでのソフトウェアのインストール、検証、アップグレード、削除の操作ができます。すべての Debian ベースのディストリビューションで使用できます。低レベルのdpkgプログラムは、1つのパッケージで、またはパッケージのリストで、これらすべての操作を実行できます。問題を引き起こすような処理があれば、処理は中断されます（別のパッケージが依存しているパッケージの削除、または最初に他のソフトウェアをシステムにインストールする必要がある場合のパッケージのインストールなど）。


学習目標
この章の終わりまでに、次のことができるようになります。

DPKGパッケージ システムとその用途について説明できます。
バイナリとソースの両方のdebファイルに使用される命名規則を説明できます。
ソース パッケージがどのような構造かを理解できます。
パッケージのクエリと検証の操作ができます。
Debianパッケージをインストール、アップグレード、アンインストールできます。


DPKG

DPKGの要点
DPKG（Debian Package）は、Debian Linux、およびそれから派生した他のディストリビューションにおいて、ソフトウェア パッケージをインストール、削除、そして管理するための、パッケージング システムです。RPMと同様に、日常的に使用するパッケージを直接取得する設計にはなっておらず、ローカルにインストールしたり削除したりします。

パッケージ ファイルの拡張子は.debで、DPKGデータベースは/var/lib/dpkgディレクトリにあります。

rpmのように、dpkgプログラムは その領域の一部分だけを見ているにすぎません。システムにインストールされているものとコマンドラインで与えられたものは知っていますが、他のパッケージがシステム上のディレクトリやインターネット上のディレクトリにあるのかは知りません。そのため、依存関係が満たされていない場合や、他のインストール済みパッケージに必要なパッケージを削除しようとした場合には、失敗します。


パッケージのファイル名とソース
Debianパッケージのファイル名は、特定の情報を表すフィールドに基づいて付けられています。バイナリ パッケージの標準の命名形式は次のとおりです。

<name>_<version>-<revision_number>_<architecture>.deb

例えば、Debianの場合：

logrotate_3.14.0-4_amd64.deb

そして、Ubuntuの場合：

logrotate_3.14.0-4ubuntu3_amd64.deb

 歴史的な理由から、64ビットのx86プラットフォームはx86_64ではなくamd64と呼ばれています。Ubuntuなどのディストリビュータはパッケージ名に自分の名前を入れています。

Debianパッケージング システムでは、ソース パッケージは少なくとも3つのファイルで構成されています。

.tar.gzで終わるアップストリームのtarball。これは、パッケージ メンテナから提供されており、未変更のソースです。
.dsc で終わる説明ファイル。これには、パッケージ名とアーキテクチャや依存関係などのその他のメタデータが含まれます。
アップストリーム ソースへのパッチとパッケージ用に作成された追加ファイルが含まれる、第二のtarball。配布に応じて.debian.tar.gzまたは.diff.gzという名前が末尾に付きます。

たとえば、Ubuntuシステムでは、次に示すように、ソース パッケージをダウンロードして、ダウンロードまたは作成されたファイルを確認できます。

Ubuntuでソース パッケージを取得


DPKGクエリ
実行できるクエリの例をいくつか見てみましょう。

インストールされているすべてのパッケージをリストする場合：

$ dpkg -l

パッケージ名を指定することもできます。

wgetパッケージにインストールされているファイルをリストする場合：

$ dpkg -L wget

インストール済みパッケージに関する情報を表示する場合：

$ dpkg -p wget

パッケージ ファイルに関する情報を表示する場合：

$ dpkg -I webfs_1.21+ds1-8_amd64.deb

パッケージ ファイル内のファイルを一覧表示する場合：

$ dpkg -c webfs_1.21+ds1-8_amd64.deb

/etc/init/networking.confを所有しているパッケージを表示する場合：

$ dpkg -S /etc/init/networking.conf

パッケージの状態を表示する場合：

$ dpkg -s wget

インストールされたパッケージの整合性を確認する場合：

$ dpkg -V package

🚩
 dpkg 1.17以降のバージョンのみが-Vオプションをサポートします。引数がない場合は、システム上のすべてのパッケージを検証します。出力の意味を知りたい方は、manページを参照してください。


dpkgを使用したパッケージのインストール／アップグレード／アンインストール
以下のコマンドを実行します。

$ sudo dpkg -i foobar.deb

これは、foobarパッケージのインストールまたはアップグレードを行います。

パッケージが現在インストールされていない場合は、インストールします。パッケージが現在インストールされているパッケージよりも新しい場合は、アップグレードされます。

以下のコマンドを実行します。

$ sudo dpkg -r package

これは、構成ファイルを除く、インストール済みのパッケージをすべて削除します。以下のコマンドを実行します。

$ sudo dpkg -P package

これは、構成ファイルを含め、インストールされているすべてのパッケージを削除します。-P はパージを表すことに注意してください。


デモ：dpkg コマンドの使用方法

このビデオは、低レベルの dpkg コマンドの使用方法を説明しています。


演習

演習の要件
次の演習を実行するには、Debian、Ubuntu、Linux Mintなど、Debianベースのシステムにアクセスできることが必要です。


課題 7.1: dpkgを使う

🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

Exercise 7.1: Using dpkgHere we will just do a number of simple operations for querying and verifyingDebianpackages.

1.  Find out what package the file/etc/logrotate.confbelongs to.
2.  List information about the package including all the files it contains.
3.  Verify the package installation.
4.  Try to remove the package.

Solution 7.1
1.$ dpkg -S /etc/logrotate.conflogrotate: /etc/logrotate.conf
2.$ dpkg -L logrotate...
3.$ dpkg -V logrotate
4.$ sudo dpkg -r logrotate
dpkg: dependency problems prevent removal of logrotate:libvirt-bin depends on logrotate.ubuntu-standard depends on logrotate.
dpkg: error processing package logrotate (--remove):dependency problems - not removing
Errors were encountered while processing:logrotate


知識チェック

「第7章 - DPKG」を完遂しました。おめでとうございます。このクイズに答えて、これまでに学んだ概念の理解度をチェックしてください。

クイズ開始

問題 7.1
次の説明のうち、正しいものはどれですか。

A. aptは、主にローカル パッケージとやり取りする低レベルのツールです。
B. dpkgは、リモート サーバー上のパッケージを含む、利用可能なすべてのパッケージを認識する高レベル ツールです。
C. dpkg -lは、システムにインストールされているすべてのパッケージを一覧表示します。



