Ubuntu ソフトウェア管理 - dpkgの使い方
Debian ソフトウェアパッケージは通常、拡張子が「.deb」のプレコンパイルされたバイナリ形式であり、rpm ファイルに似ています。そのため、インストールが迅速で、ソフトウェアをコンパイルする必要はありません。パッケージファイルには、特定の機能やソフトウェアに必要なファイル、メタデータ、指示が含まれています。
dpkg:Debian 用のパッケージマネージャーであり、rpm のようなものです。dpkg は Debian ベースのシステムのパッケージマネージャであり、ソフトウェアパッケージのインストール、削除、構築が可能ですが、ソフトウェアパッケージやその依存関係を自動的にダウンロードおよびインストールすることはできません。
apt:Advanced Packaging Tool の略で、強力なソフトウェア管理ツールです。Ubuntu システム全体をアップグレードすることもできます。クライアント/サーバーアーキテクチャ (C/S) に基づいています。
rhel シリーズと debianシリーズのパッケージ管理の比較
オペレーティングシステム (OS) | パッケージファイル拡張子 | ローカルパッケージ管理 | ネットワークパッケージ管理 | ネットワークパッケージ管理作業モード | 設定ファイル |
---|---|---|---|---|---|
RHEL | rpm | rpm | yum/dnf | C/S | /etc/yum.repos.d/*.repo |
Debian | deb | dpkg | apt | C/S | /etc/apt/sources.list |
1.1 APTの動作原理
サーバー上でまずすべての DEB パッケージをコピーし、次に APT の分析ツール genbasedir を使用して、各 DEB パッケージのヘッダー情報に基づいてすべての DEB パッケージを分析し、その分析結果をフォルダー base 内の DEB インデックスリストファイルに記録します。 APT サーバー内の DEB に変更があると、genbasedir を使用して新しい DEB インデックスリストを生成します。
クライアントがインストールまたはアップグレードを行う場合、まず DEB インデックスリストを照会して、依存関係のあるすべてのソフトウェアパッケージを把握し、それらをクライアントにダウンロードしてインストールします。 クライアントが特定のソフトウェアパッケージをインストール、アップグレード、または削除する必要がある場合、クライアントコンピューターは DEB インデックスリストの圧縮ファイルを取得し、/var/cache/apt/ に解凍して配置します。クライアントが apt-get install または apt-get upgrade コマンドを実行する際に、このフォルダ内のデータとクライアントコンピューター内の DEB データベースを比較して、どの DEB がインストール済み、未インストール、またはアップグレード可能であるかを把握します。
1.2 dpkg パッケージマネージャ
dpkg [<option> ...] <command>
# よく使われるオプション
-i|--install package.deb # パッケージのインストール
--unpack package.deb # パッケージの解包
-r|--remove packageName # パッケージの削除、依存関係のあるパッケージは自動的に削除しないため注意
-P|--purge packageName # パッケージの削除(設定ファイルを含む)
-V|--verify packageName # パッケージがインストールされているか確認
--get-selections pattern # パターンに基づいてパッケージをリスト表示
--set-selections # 標準入力からインストールするソフトウェアを選択
--clear-selections # 不要なソフトウェアパッケージの選択を解除
--update-avail packageFile # 現在のインストール可能なソフトウェアパッケージ情報を置き換える
--merge-avail packageFile # ファイルの情報をシステムにマージ
--clear-avail # 現在のソフトウェアパッケージ情報をクリア
--forget-old-unavail # アンインストールされたインストール不可能なソフトウェアパッケージを忘れる
-s|--status packageName # 特定のソフトウェアパッケージの詳細な状態を表示 (rpm -qi に似ている)
-p|--print-avail packageName # 現在のマシン上ですべてのインストール可能なパッケージを表示
-L|--listfiles packageName # 指定したソフトウェアパッケージに属するファイルをリスト表示 (rpm -ql に似ている)
-l|--list [pattern] # 現在インストールされているパッケージをリスト表示 (rpm -qa に似ている)
-S|--search pattern # ファイルに基づいてソフトウェアパッケージを検索 (rpm -qf に似ている)
-C|--audit [pattern] # ソフトウェアパッケージが損傷しているか確認
--yet-to-unpack # 待機中の解包パッケージをリスト表示
--predep-package # 事前依存関係のある待機解包パッケージをリスト表示
--compare-versions v1 - b # バージョン番号を比較
--force-help # 強制オプションのヘルプ情報を表示
-Dh|--debug=help # エラーデバッグのヘルプ情報を表示
--info packageFile # パッケージの関連情報をリスト表示
-c packageFile # パッケージ内のファイルをリスト表示 (rpm -qpl に似ている)
使用例
例:パッケージがインストールされているか確認
root@ubuntu22:~# dpkg -V vim
root@ubuntu22:~# echo $?
0
root@ubuntu22:~# dpkg -V nginx
dpkg: package 'nginx' is not installed
root@ubuntu22:~# echo $?
1
例:インストールとアンインストール
dpkg
のソフトウェアインストールは解包と設定の 2 部に分かれます
# クエリ
root@ubuntu22:~# dpkg -V firmware-sof-signed
dpkg: package 'firmware-sof-signed' is not installed
# インストール
root@ubuntu22:~# dpkg -i /cdrom/pool/restricted/f/firmware-sof/firmware-sof-signed_2.0-1ubuntu2_all.deb
Selecting previously unselected package firmware-sof-signed.
(Reading database ... 108476 files and directories currently installed.)
Preparing to unpack .../firmware-sof-signed_2.0-1ubuntu2_all.deb ...
Unpacking firmware-sof-signed (2.0-1ubuntu2) ...
Setting up firmware-sof-signed (2.0-1ubuntu2) ...
# クエリ
root@ubuntu22:~# dpkg -l firmware-sof-signed
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 firmware-sof-signed 2.0-1ubuntu2 all Intel SOF firmware - signed
# アンインストール
root@ubuntu22:~# dpkg -r firmware-sof-signed
(Reading database ... 108702 files and directories currently installed.)
Removing firmware-sof-signed (2.0-1ubuntu2) ...
例:条件に基づいてインストール済みパッケージをリスト表示
root@ubuntu22:~# dpkg --get-selections v*
vim install
vim-common install
vim-runtime install
vim-tiny install
例:すべてのインストール可能なパッケージを表示
root@ubuntu22:~# dpkg -p
......
# 特定のパッケージを表示
root@ubuntu22:~# dpkg -p mawk
Package: mawk
Priority: required
Section: utils
Installed-Size: 229
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
......
例:インストール済みのリストを表示
mage@ubuntu22:~$ 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.118ubuntu5 all add and remove users
and groups
ii amd64-microcode 3.20191218.1ubuntu2 amd64 Processor microcode
firmware for AMD CPUs
ii apparmor 3.0.4-2ubuntu2 amd64 user-space parser
utility for AppArmor
ii apport-symptoms 0.24 all symptom scripts for
apport
ii apt 2.4.5 amd64 commandline package
manager
ii apt-utils 2.4.5 amd64 package management
related utility programs
ii base-files 12ubuntu4 amd64 Debian base system
miscellaneous files
ii base-passwd 3.5.52build1 amd64 Debian base system
master password and group files
ii bash 5.1-6ubuntu1 amd64 GNU Bourne Again SHell
ii bash-completion 1:2.11-5ubuntu1 all programmable completion
for the bash shell
例:ワイルドカードを使用
mage@ubuntu22:~$ dpkg -l "vi*"
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 vim 2:8.2.3995-1ubuntu2 amd64 Vi IMproved -
enhanced vi editor
un vim-athena <none> <none> (no description
available)
ii vim-common 2:8.2.3995-1ubuntu2 all Vi IMproved - Common
files
un vim-doc <none> <none> (no description
available)
un vim-gtk3 <none> <none> (no description
available)
un vim-nox <none> <none> (no description
available)
ii vim-runtime 2:8.2.3995-1ubuntu2 all Vi IMproved -
Runtime files
un vim-scripts <none> <none> (no description
available)
ii vim-tiny 2:8.2.3995-1ubuntu2 amd64 Vi IMproved - enhanced
vi editor - compact version
un virtualbox-guest-modules <none> <none> (no description
available)
例:具体的なパッケージ名
mage@ubuntu22:~$ dpkg -l vim
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 vim 2:8.2.3995-1ubuntu2 amd64 Vi IMproved - enhanced vi editor
例:リストの詳細
このリストには左から右に7列あります:
- Desired
- Status
- Err
- Name
- Version
- Architecture
- Description
Desired
フィールドは、次のいずれかの値を取ることができます:
- u: 未知 (Unknown)
- i: インストールをリクエスト (Install)
- r: 削除をリクエスト (Remove)
- p: 全てを削除 (Purge)
- h: 保留 (Hold)
Status
フィールドは、次のいずれかの値を取ることができます:
- n: インストールされていない (Not installed)
- i: インストールされ設定が完了 (Installed and configured)
- c: 削除済みだが設定ファイルが残っている (Config files remaining)
- u: 解凍されたが未設定 (Unpacked but not yet configured)
- f: 設定中にエラーが発生 (Configuration failed)
- h: インストール中にエラーが発生 (Installation failed)
- w: トリガー待機中 (Trigger await)
- t: トリガーが未解決 (Trigger pending)
Err
フィールドには通常何も表示されませんが、次のいずれかが表示されることがあります:
- h: ロックされている (Locked)
- r: 再インストールが必要 (Reinstallation required)
- x: 損傷してロックされている (Damaged and locked)
例:パッケージの詳細情報を表示
mage@ubuntu22:~$ dpkg -s vim
Package: vim
Status: install ok installed
Priority: optional
Section: editors
Installed-Size: 3916
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 2:8.2.3995-1ubuntu2
Provides: editor
Depends: vim-common (= 2:8.2.3995-1ubuntu2), vim-runtime (= 2:8.2.3995-1ubuntu2), libacl1 (>= 2.2.23), libc6 (>= 2.34), libgpm2 (>= 1.20.7), libpython3.10 (>= 3.10.0), libselinux1 (>= 3.1~), libsodium23 (>= 1.0.14), libtinfo6 (>= 6)
Suggests: ctags, vim-doc, vim-scripts
Description: Vi IMproved - enhanced vi editor
.....
例:パッケージ内のすべてのファイルをリスト表示
root@ubuntu22:~# dpkg -L vim
/.
/usr
/usr/bin
/usr/bin/vim.basic
/usr/share
/usr/share/bug
/usr/share/bug/vim
......
例:debパッケージファイルの情報を表示
root@ubuntu22:~# dpkg --info /cdrom/pool/main/a/amd64-microcode/amd64-microcode_3.20191218.1ubuntu2_amd64.deb
new Debian package, version 2.0.
size 32474 bytes: control archive=1720 bytes.
76 bytes, 2 lines conffiles
699 bytes, 17 lines control
973 bytes, 12 lines md5sums
1259 bytes, 46 lines * postinst #!/bin/sh
例:debパッケージ内のすべてのファイルをリスト表示
root@ubuntu22:~# dpkg -c /cdrom/pool/main/a/amd64-microcode/amd64-microcode_3.20191218.1ubuntu2_amd64.deb
drwxr-xr-x root/root 0 2021-10-07 10:09 ./
drwxr-xr-x root/root 0 2021-10-07 10:09 ./etc/
drwxr-xr-x root/root 0 2021-10-07 10:09 ./etc/default/
-rw-r--r-- root/root 328 2019-12-21 04:12 ./etc/default/amd64-microcode
drwxr-xr-x root/root 0 2021-10-07 10:09 ./etc/modprobe.d/
-rw-r--r-- root/root 154 2021-10-07 10:09 ./etc/modprobe.d/amd64-
microcode-blacklist.conf
drwxr-xr-x root/root 0 2021-10-07 10:09 ./lib/
drwxr-xr-x root/root 0 2021-10-07 10:09 ./lib/firmware/
......
例:ファイルがどのパッケージに属しているか
root@ubuntu22:~# dpkg -S "/etc/ssh/ssh_config"
openssh-client: /etc/ssh/ssh_config