Featured image of post aptの使い方など

aptの使い方など

目次

背景

DebianやUbuntu系のOSを使うときによくaptコマンドを使うため、aptコマンドについてまとめました。

パッケージ

パッケージとは

  • (deb)パッケージは、ソフトウェアやアプリケーションの配布形式
  • パッケージには、ソフトウェアを実行するために必要な全てのファイルが含まれる
  • 拡張子は.deb

パッケージの種類

次の言葉は似ていて違う意味なので注意。

  • キャッシュパッケージ (Cached Packages)
    • /var/cache/apt/archives/に保存された.deb ファイルのキャッシュ
    • APTを通じてインストール、アップグレード、またはダウンロードされた後の実際のパッケージファイル
    • sudo apt clean または sudo apt autocleanでキャッシュを削除することが可能
  • パッケージ一覧(Package List)
    • /var/lib/apt/lists/に保存されたapt udpateで同期されたパッケージ一覧
    • apt updateで同期されたリポジトリからのパッケージのメタデータが保存される
    • この情報は、apt searchapt show などのコマンドで利用される
  • インストール済みパッケージ(installed package)
    • これは実際にインストールされたパッケージの事
    • これはシステム上に配置される
    • .debファイルの記述に従ってファイルシステムに配置されたファイル
    • dpkg -L xxxdpkg-deb -c xxx.debで確認できる

パッケージ一覧

パッケージ一覧の更新

次のコマンドを使う。

1
$ sudo apt update

なお、/etc/apt/sources.listなどにあるリポジトリから、パッケージリストの一覧を取得して、ローカルのパッケージ一覧を同期する。

イメージは次の流れ。

  • repositoryの設定ファイル(/etc/apt/sources.list/etc/apt/sources.list.d)をチェック
  • そこにあるrepositoryのURLをチェック
  • repositoryのURL先にあるPackage listをDL
  • そのPackage listを基に、package cache(/var/lib/apt/lists/)を作成

なぜこうなっているかと言うと、当然アップストリームのリポジトリにパッケージ一覧のマスターデータがあり、ローカルはそれをpullしているだけだから。

正直、apt syncの方が直感的だろう。

パッケージ一覧の確認

以下のコマンドで、ローカルで同期したパッケージの一覧を見る事ができる。

1
$ apt list

インストール済みパッケージの一覧の確認

インストール済みのパッケージの一覧は次で確認できる。

1
$ apt list --installed

または、次のコマンドを利用する。

1
$ dpkg -l

パッケージ

パッケージの詳細

次のコマンドでパッケージの詳細情報を表示する。

1
$ apt show {パッケージ名}

apt-cacheでもできる。

1
$ apt-cache show bat

パッケージを更新

この挙動については詳しくは#aptvとapt-getのupgradeの違いを参照。

1
$ sudo apt upgrade

パッケージの削除

パッケージの削除は次のコマンドとなる。

1
$ sudo apt remove {パッケージ名}

依存性も含めて完全削除の場合は次を使う。

1
$ sudo apt remove --purse {パッケージ名}

必要なくなったパッケージを削除は次のコマンドを使う。

1
$ sudo apt autoremove

パッケージの検索

完全一致で検索の場合は次。

1
$ sudo apt list {パッケージ名}

部分一致で検索の場合は次。

1
$ sudo apt search {パッケージ名}

キャッシュの削除

キャッシュされている全てのdebファイルを削除するのは次。

1
$ sudo apt clean

キャッシュされているが、インストールはされていないdebファイルを削除するのは次。

1
sudo apt autoclean

パッケージの依存の修復

破損した依存関係を修復するには以下。

1
$ sudo apt --fix-broken install

ファイル

パッケージ名からファイル一覧の検索

次のコマンドでインストールされたファイルの一覧を確認できる。

1
$ dpkg -L {パッケージ名} 

ファイル名からパッケージ名の検索

次のコマンドで、指定されたファイルがどのパッケージによってインストールされたかを検索する。

1
$ dpkg -S {ファイルのパス}

リポジトリ

リポジトリとは

  • APTのリポジトリは、パッケージが格納されているオンラインまたはローカルのデータベース
  • リポジトリには、さまざまなパッケージが含まれており、これらは適切に整理されてカテゴリー別に分類されている

リポジトリのカテゴリー

UbuntuのAPTリポジトリにおける「カテゴリー」とは、 ソフトウェアの種類や用途に基づいてパッケージを分類するためのセクションの事。

  • Main
    • Ubuntuチームによってサポートされるフリーソフトウェアのパッケージ
    • これは、セキュリティアップデートが提供される
  • Universe
    • コミュニティによってメンテナンスされるフリーソフトウェアのパッケージ
    • なお、Ubuntuチームによる保証はない
  • Restricted
    • フリーではないが、Ubuntuに必要とされるいくつかのドライバーなどサポートされるプロプライエタリソフトウェアのパッケージ
  • Multiverse
    • 著作権や法的な制限によりフリーでないパッケージ

リポジトリの設定場所

リポジトリ一覧は、次のディレクトリやファイルにある。

  • /etc/apt/sources.list
    • システムで定義されたもの
  • /etc/apt/sources.list.d/
    • ユーザーがadd-repositoryなどで追加したモノ
    • PPA(Personal Package Archive)の事

リポジトリのフォーマット

source.listの中身は次のようになっている。

1
deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse

その意味は以下になる。

  • deb
    • debの場合はバイナリパッケージのリポジトリを指す
    • deb-srcの場合はソースコードのパッケージを指す
  • http://archive.ubuntu.com/ubuntu/
    • パッケージのリポジトリのURL
    • Ubuntuのアーカイブサーバーの事
  • focal-backports
    • Ubuntu 20.04 LTSのコードネーム「Focal Fossa」に対するbackportsリポジトリの事
    • backportsは後方互換性のために使用される特別なリポジトリの事
  • main restricted universe multiverse
    • リポジトリ内で利用可能なカテゴリーの事

NOTE:

  • Ubuntuのbackportsリポジトリは、Ubuntuの正式なリリースに含まれているパッケージの更新されたバージョンを提供する特別なリポジトリの事。

リポジトリの追加

下のコマンドでリポジトリを追加する。

1
$ sudo add-apt-repository 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic main'

直接追加するには下を使う。

1
$ echo "deb http://repository_url/ ubuntu_version main" | sudo tee /etc/apt/sources.list.d/repository_name.list

リポジトリの削除

その場合は、--removeのオプションを付ければ消せる。

1
$ sudo add-apt-repository 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic main' --remove

または、PPAの場合は以下でできる。

1
$ sudo add-apt-repository --remove ppa:repository_name

PPAの場合は次のようにファイルを消してもOK。

1
$ sudo rm /etc/apt/sources.list.d/repository_name.list

リポジトリの確認

次のコマンドでできる。

1
2
$ cat /etc/apt/sources.list
$ ls /etc/apt/sources.list.d/

特定のパッケージがどのリポジトリから来たのかは次のコマンドで確認する。

1
$ apt policy package-name

その他

aptの意味

aptの意味は、Advanced Package Tool。

aptvとapt-getのupgradeの違い

  • 基本的には次が言える
    • apt-getが低レベルAPIで、aptが高レベルAPI
    • apt-get系がより保守的で、apt系がよりアグレッシブに変更をかける
  • また、apt-get dist-upgradeapt full-upgradeは、ほぼ同じ意味のコマンド
  • 下記の4つのコマンドに共通するのは次
    • 既存パッケージの更新は行う事
    • 新規にリポジトリのパッケージインストールはしない事
      • 無論、明示的にapt install xxxをしないとインストールは行われない
  • 大きな違いは、既存パッケージに対する対応

既存パッケージに対しては、以下のような違いがある。

コマンド既存パッケージの追加の依存関係による更新既存パッケージの削除挙動の説明
apt-get upgradeNONO既存のパッケージを新しいバージョンにアップグレードするが、新しい依存関係がある場合は更新を行わない。
apt-get dist-upgradeYESYES新しい依存関係を解決するために、必要に応じて新しいパッケージをインストールし、不要になった既存のパッケージを削除しながらアップグレードする。
apt upgradeYESNO既存のパッケージを新しいバージョンにアップグレードし、新しい依存関係がある場合は新しいパッケージをインストールするが、既存のパッケージは削除しない。
apt full-upgradeYESYESapt-get dist-upgrade と同じく、新しい依存関係を解決するために新しいパッケージを追加し、必要に応じて不要になったパッケージを削除しながらアップグレードする。

apt vs aptitude vs apt-cache

下のような使い分けをする。

ツール機能ユーザーインターフェイス用途
apt-getパッケージのインストール、アップデート、削除コマンドライン基本的なパッケージ管理タスクに使用
aptitudeパッケージのインストール、アップデート、削除、問題解決対話型テキストインターフェイスより複雑なパッケージ管理と問題解決に使用
apt-cacheパッケージ情報の検索コマンドラインインストール済みまたは利用可能なパッケージの情報検索に使用

aptコマンドの利用履歴の確認

次のコマンドで確認できる。

1
$ cat /var/log/apt/history.log	

debファイルの意味

下はwgetパッケージのファイルが置かれているリポジトリ上のパス。

1
http://archive.ubuntu.com/ubuntu/pool/main/w/wget/wget_1.20.3-1ubuntu1_amd64.deb

wget_1.20.3-1ubuntu1_amd64.debの意味は次。

  • wget
    • パッケージ名
  • 1.20.3-1ubuntu1
    • バージョン
  • amd64
    • アーキテクチャ

パッケージのインストール先もチェックする時は次を使う。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$ dpkg -L wget
/.
/etc
/etc/wgetrc
/usr
/usr/bin
/usr/bin/wget
/usr/share
/usr/share/doc
/usr/share/doc/wget
/usr/share/doc/wget/AUTHORS
/usr/share/doc/wget/MAILING-LIST
/usr/share/doc/wget/NEWS.gz
/usr/share/doc/wget/README
/usr/share/doc/wget/changelog.Debian.gz
/usr/share/doc/wget/copyright
/usr/share/info
/usr/share/info/wget.info.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/wget.1.gz

パッケージが変えるファイルの確認。

次のコマンドで中身を確認する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ wget http://archive.ubuntu.com/ubuntu/pool/main/w/wget/wget_1.20.3-1ubuntu1_amd64.deb
$ dpkg-deb -c wget_1.20.3-1ubuntu1_amd64.deb

drwxr-xr-x root/root         0 2019-07-25 04:40 ./
drwxr-xr-x root/root         0 2019-07-25 04:40 ./etc/
-rw-r--r-- root/root      4942 2019-07-25 04:40 ./etc/wgetrc
drwxr-xr-x root/root         0 2019-07-25 04:40 ./usr/
drwxr-xr-x root/root         0 2019-07-25 04:40 ./usr/bin/
-rwxr-xr-x root/root    548568 2019-07-25 04:40 ./usr/bin/wget
drwxr-xr-x root/root         0 2019-07-25 04:40 ./usr/share/
drwxr-xr-x root/root         0 2019-07-25 04:40 ./usr/share/doc/
drwxr-xr-x root/root         0 2019-07-25 04:40 ./usr/share/doc/wget/
-rw-r--r-- root/root      2182 2015-11-13 07:29 ./usr/share/doc/wget/AUTHORS
-rw-r--r-- root/root      1109 2018-08-30 21:45 ./usr/share/doc/wget/MAILING-LIST
-rw-r--r-- root/root     15158 2019-04-05 18:59 ./usr/share/doc/wget/NEWS.gz
-rw-r--r-- root/root      4067 2019-02-10 19:48 ./usr/share/doc/wget/README
-rw-r--r-- root/root      1205 2019-07-25 04:40 ./usr/share/doc/wget/changelog.Debian.gz
-rw-r--r-- root/root      1420 2019-07-21 12:43 ./usr/share/doc/wget/copyright
drwxr-xr-x root/root         0 2019-07-25 04:40 ./usr/share/info/
-rw-r--r-- root/root     71489 2019-07-25 04:40 ./usr/share/info/wget.info.gz
drwxr-xr-x root/root         0 2019-07-25 04:40 ./usr/share/man/
drwxr-xr-x root/root         0 2019-07-25 04:40 ./usr/share/man/man1/
-rw-r--r-- root/root     36127 2019-07-25 04:40 ./usr/share/man/man1/wget.1.gz

apt-key

  • apt-keyはdelを除いて非推奨になったのでgpgを使う
  • gpgキーの置き場
    • /etc/apt/trusted.gpg.d/
      • システムで利用するすべてのリポジトリに対するチェックを行うための鍵を置く場所
    • /usr/local/share/keyrings/
      • ユーザーので利用する鍵を置く場所

次のようにapt-key addを使うのではなく、自前で鍵を設置するのが推奨されている。

1
2
3
4
5
$ gpg --no-default-keyring --keyring /tmp/temp-keyring.gpg --import "ダウンロードしたリポジトリ鍵ファイル名"
$ gpg --no-default-keyring --keyring /tmp/temp-keyring.gpg --export --output "リポジトリ名".gpg
$ rm /tmp/temp-keyring.gpg
$ sudo mkdir -p /usr/local/share/keyrings/
$ sudo cp "リポジトリ名".gpg /usr/local/share/keyrings/

その後に、sources.listを修正して鍵を利用するようにする。

1
deb [arch=amd64 signed-by=/usr/local/share/keyrings/"リポジトリ名".gpg] http://dl.google.com/linux/chrome/deb/ stable main

参考文献

Built with Hugo
テーマ StackJimmy によって設計されています。