LoginSignup
0
0

dpkgで学ぶ!Ubuntuのソフト管理

Posted at

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0