目次
背景
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 searchやapt showなどのコマンドで利用される
- インストール済みパッケージ(installed package)
- これは実際にインストールされたパッケージの事
- これはシステム上に配置される
.debファイルの記述に従ってファイルシステムに配置されたファイルdpkg -L xxxやdpkg-deb -c xxx.debで確認できる
パッケージ一覧
パッケージ一覧の更新
次のコマンドを使う。
| |
なお、/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の方が直感的だろう。
パッケージ一覧の確認
以下のコマンドで、ローカルで同期したパッケージの一覧を見る事ができる。
| |
インストール済みパッケージの一覧の確認
インストール済みのパッケージの一覧は次で確認できる。
| |
または、次のコマンドを利用する。
| |
パッケージ
パッケージの詳細
次のコマンドでパッケージの詳細情報を表示する。
| |
apt-cacheでもできる。
| |
パッケージを更新
この挙動については詳しくは#aptvとapt-getのupgradeの違いを参照。
| |
パッケージの削除
パッケージの削除は次のコマンドとなる。
| |
依存性も含めて完全削除の場合は次を使う。
| |
必要なくなったパッケージを削除は次のコマンドを使う。
| |
パッケージの検索
完全一致で検索の場合は次。
| |
部分一致で検索の場合は次。
| |
キャッシュの削除
キャッシュされている全てのdebファイルを削除するのは次。
| |
キャッシュされているが、インストールはされていないdebファイルを削除するのは次。
| |
パッケージの依存の修復
破損した依存関係を修復するには以下。
| |
ファイル
パッケージ名からファイル一覧の検索
次のコマンドでインストールされたファイルの一覧を確認できる。
| |
ファイル名からパッケージ名の検索
次のコマンドで、指定されたファイルがどのパッケージによってインストールされたかを検索する。
| |
リポジトリ
リポジトリとは
- 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の中身は次のようになっている。
| |
その意味は以下になる。
- 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の正式なリリースに含まれているパッケージの更新されたバージョンを提供する特別なリポジトリの事。
リポジトリの追加
下のコマンドでリポジトリを追加する。
| |
直接追加するには下を使う。
| |
リポジトリの削除
その場合は、--removeのオプションを付ければ消せる。
| |
または、PPAの場合は以下でできる。
| |
PPAの場合は次のようにファイルを消してもOK。
| |
リポジトリの確認
次のコマンドでできる。
| |
特定のパッケージがどのリポジトリから来たのかは次のコマンドで確認する。
| |
その他
aptの意味
aptの意味は、Advanced Package Tool。
aptvとapt-getのupgradeの違い
- 基本的には次が言える
- apt-getが低レベルAPIで、aptが高レベルAPI
- apt-get系がより保守的で、apt系がよりアグレッシブに変更をかける
- また、
apt-get dist-upgradeとapt full-upgradeは、ほぼ同じ意味のコマンド - 下記の4つのコマンドに共通するのは次
- 既存パッケージの更新は行う事
- 新規にリポジトリのパッケージインストールはしない事
- 無論、明示的に
apt install xxxをしないとインストールは行われない
- 無論、明示的に
- 大きな違いは、既存パッケージに対する対応
既存パッケージに対しては、以下のような違いがある。
| コマンド | 既存パッケージの追加の依存関係による更新 | 既存パッケージの削除 | 挙動の説明 |
|---|---|---|---|
apt-get upgrade | NO | NO | 既存のパッケージを新しいバージョンにアップグレードするが、新しい依存関係がある場合は更新を行わない。 |
apt-get dist-upgrade | YES | YES | 新しい依存関係を解決するために、必要に応じて新しいパッケージをインストールし、不要になった既存のパッケージを削除しながらアップグレードする。 |
apt upgrade | YES | NO | 既存のパッケージを新しいバージョンにアップグレードし、新しい依存関係がある場合は新しいパッケージをインストールするが、既存のパッケージは削除しない。 |
apt full-upgrade | YES | YES | apt-get dist-upgrade と同じく、新しい依存関係を解決するために新しいパッケージを追加し、必要に応じて不要になったパッケージを削除しながらアップグレードする。 |
apt vs aptitude vs apt-cache
下のような使い分けをする。
| ツール | 機能 | ユーザーインターフェイス | 用途 |
|---|---|---|---|
| apt-get | パッケージのインストール、アップデート、削除 | コマンドライン | 基本的なパッケージ管理タスクに使用 |
| aptitude | パッケージのインストール、アップデート、削除、問題解決 | 対話型テキストインターフェイス | より複雑なパッケージ管理と問題解決に使用 |
| apt-cache | パッケージ情報の検索 | コマンドライン | インストール済みまたは利用可能なパッケージの情報検索に使用 |
aptコマンドの利用履歴の確認
次のコマンドで確認できる。
| |
debファイルの意味
下はwgetパッケージのファイルが置かれているリポジトリ上のパス。
| |
wget_1.20.3-1ubuntu1_amd64.debの意味は次。
- wget
- パッケージ名
- 1.20.3-1ubuntu1
- バージョン
- amd64
- アーキテクチャ
パッケージのインストール先もチェックする時は次を使う。
| |
パッケージが変えるファイルの確認。
次のコマンドで中身を確認する。
| |
apt-key
- apt-keyはdelを除いて非推奨になったのでgpgを使う
- gpgキーの置き場
/etc/apt/trusted.gpg.d/- システムで利用するすべてのリポジトリに対するチェックを行うための鍵を置く場所
/usr/local/share/keyrings/- ユーザーので利用する鍵を置く場所
次のようにapt-key addを使うのではなく、自前で鍵を設置するのが推奨されている。
| |
その後に、sources.listを修正して鍵を利用するようにする。
| |
