Debian パッケージ管理の概要
Debian は公式リポジトリから一貫性のあるパッケージを配布し、HTTP や FTP 経由でアクセス可能です。世界中にミラーサーバーが存在し、バックアップとして機能します。
パッケージ管理ツールは、リポジトリから統一されたバイナリパッケージをシステムにインストールするために使用されます。現在の Debian の標準ツールは APT (Advanced Package Tool) です。
apt: 対話的なコマンドライン操作向けapt-get: スクリプトでの利用に適し、aptが使えない場合の代替aptitude: テキストベースの対話型インターフェースでパッケージ管理
APT のフロントエンドとバックエンドの関係:
dpkg: 低レベルのパッケージ管理システムapt,apt-get,apt-cache: コマンドラインの APT フロントエンドaptitude: 全画面コンソールの対話型 APT フロントエンド(複数バージョン管理可能)gnome-software: GNOME 用グラフィカルフロントエンドsynaptic: GTK ベースのグラフィカルフロントエンド
APT 補助ツール:
apt-utils:apt-extracttemplates,apt-ftparchive,apt-sortpkgsなどのユーティリティapt-file: パッケージ検索ツールapt-cache: 正規表現によるパッケージ名・説明の検索apt-rdepends: 依存関係の問い合わせapt-listchanges: パッケージ変更履歴の通知apt-listbugs: インストール前に深刻なバグを表示unattended-upgrades: セキュリティ更新を自動適用
apt-get と apt-cache は最も基本的な APT ツールですが、機能は限定的です。複数バージョン管理には /etc/apt/preferences を使用できますが、煩雑です。インストール後、apt はキャッシュされた .deb ファイルをデフォルトで削除します。
sources.list の書式
典型的な HTTP アクセスでは、リポジトリ情報は /etc/apt/sources.list に記述します。
# 各行の構成: deb/deb-src URL distribution [area ...]
deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main contrib non-free
- 1行1エントリ
- 最初の引数:
deb(バイナリパッケージ)またはdeb-src(ソースコード、不要なら省略推奨) - 2番目の引数: Debian リポジトリのルート URL(
http://,ftp://,file://など) - 3番目の引数: ディストリビューション名(
stable,testing,unstableなど) - 以降: 有効なリポジトリエリア名(
main,contrib,non-free)
エリアの説明:
main: DFSG(Debian フリーソフトウェアガイドライン)に準拠し、non-freeに依存しないcontrib: DFSG 準拠だがnon-freeに依存non-free: DFSG 非準拠
Debian はデフォルトでフリーソフトウェアのみをインストールし、main の使用を推奨します。
サードパーティリポジトリ追加スクリプト(例)
以下のスクリプトは、デフォルトの /etc/apt/sources.list をテンプレートとして、指定した URL リストからサードパーティリポジトリを追加します。
#!/bin/bash
# 使い方: ./add_repos.sh url_list.txt
if [ -r "$1" ]; then
while IFS= read -r base_url; do
# URL からドメイン名を抽出(例: mirrors.ustc.edu.cn)
domain=$(echo "$base_url" | sed -E 's~https?://~~' | cut -d'/' -f1)
# デフォルト sources.list の行をコピーし、URL を置換
grep "^deb " /etc/apt/sources.list | sed "s~http[^ ]*~$base_url~" > "/etc/apt/sources.list.d/${domain}.list"
done < "$1"
apt update
else
echo "ファイルが存在しないか読み取り不可"
fi
使用手順:
- テキストファイル(例:
urls.txt)にリポジトリのベース URL を1行ずつ記述 - スクリプトに実行権限を付与:
chmod +x add_repos.sh - 実行:
sudo ./add_repos.sh urls.txt - 確認:
ls /etc/apt/sources.list.d/
注意:
- 各リポジトリは
/etc/apt/sources.list.d/に個別ファイルとして保存 - エリア(main, contrib など)の変更は各ファイルを直接編集
- スクリプトはデフォルトの sources.list をテンプレートとして使用
GPG エラーの解決
リポジトリ追加時に GPG エラーが発生した場合、署名ファイルを追加します。
方法1: gpg コマンドを使用
# gpg が未インストールならインストール
sudo apt-get install gpg
# 署名ファイルをダウンロード(例: Aliyun)
wget -qO- https://mirrors.aliyun.com/debian/dists/buster/Release.gpg > aliyun.gpg
# または .asc ファイルを変換
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
# 署名をインストール(推奨: /etc/apt/keyrings/)
sudo install -D -o root -g root -m 644 aliyun.gpg /etc/apt/keyrings/aliyun.gpg
# 対応する .list ファイルに signed-by オプションを追加
# 例: /etc/apt/sources.list.d/aliyun.list
# deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/aliyun.gpg] https://mirrors.aliyun.com/debian bullseye main
方法2: apt-key を使用(非推奨)
wget https://archive.kali.org/archive-key.asc
sudo apt-key add archive-key.asc
初心者向けの注意点
/etc/apt/sources.listに testing や unstable を追加しない- 標準の Debian リポジトリと非 Debian リポジトリを混在させない
- サードパーティリポジトリは
/etc/apt/sources.list.d/に.listファイルとして分離 /etc/apt/preferencesは作成しない- デフォルトの動作を変更する設定は、影響を完全に理解するまで行わない
dpkg -iやdpkg --force-all -iでランダムなパッケージをインストールしない/var/lib/dpkg/内のファイルを削除・変更しない- ソースから直接インストールしたプログラムでシステムファイルを上書きしない
- 安全な環境でテストせずにパッケージをインストールしない
non-freeやcontribの使用は自由を失い、サポートが限定されるリスクがある
リポジトリの一時的な問題
- 壊れたパッケージのアップロード(特に unstable)
- 新パッケージの受け入れ遅延(unstable)
- タイム同期の問題(testing, unstable)
- 手動介入(testing)
パッケージ依存関係の種類
- Depends: 絶対的な依存。リストされたパッケージが同時または事前にインストールされる必要がある
- Pre-Depends: Depends と似ているが、リストされたパッケージが事前に完全にインストールされている必要がある
- Recommends: 強いが絶対ではない依存。ほとんどのユーザーはこれらをインストールする
- Suggests: 弱い依存。インストールすると便利だが必須ではない
- Enhances: Suggests と同様の弱い依存
- Breaks: 特定バージョンとの非互換性。通常はリストされたパッケージをアップグレードして解決
- Conflicts: 絶対的な非互換。インストールにはリストされたパッケージの削除が必要
- Replaces: このパッケージがリストされたパッケージのファイルを置き換える
- Provides: このパッケージがリストされたパッケージの機能を提供する
Conflicts, Replaces, Provides は仮想パッケージを定義し、同時に1つの実パッケージのみがインストールされることを保証します。
APT によるパッケージ管理
基本操作
メタデータ更新: apt update, apt-get update, aptitude update
- リモートリポジトリからメタデータを取得
- ローカルメタデータを再構築・更新
インストール: apt install <package>, apt-get install <package>, aptitude install <package>
- 指定されたパッケージを選択
- 依存関係を解決
- リモートサーバーからバイナリパッケージを取得
- パッケージを展開
- preinst スクリプト実行
- バイナリファイルのインストール
- postinst スクリプト実行
アップグレード: apt upgrade/full-upgrade, apt-get upgrade/dist-upgrade, aptitude safe-upgrade/full-upgrade
- 候補バージョンを選択(デフォルトで最新)
- 依存関係を解決
- バージョンが異なる場合、リモートからバイナリを取得
- 展開、preinst、インストール、postinst
削除: apt remove <package>, apt-get remove <package>, aptitude remove <package>
- 指定パッケージを選択
- 依存関係を解決
- prerm スクリプト実行
- 設定ファイルを除くファイルを削除
- postrm スクリプト実行
パージ: apt purge <package>, apt-get purge <package>, aptitude purge <package>
- 削除と同様だが、設定ファイルも削除
コマンド比較表
| apt | aptitude | apt-get/apt-cache | 説明 |
|---|---|---|---|
| apt update | aptitude update | apt-get update | リポジトリメタデータ更新 |
| apt install foo | aptitude install foo | apt-get install foo | foo の候補バージョンと依存をインストール |
| apt upgrade | aptitude safe-upgrade | apt-get upgrade | インストール済みパッケージの候補バージョンにアップグレード(削除なし) |
| apt full-upgrade | aptitude full-upgrade | apt-get dist-upgrade | 必要に応じてパッケージを削除しながらアップグレード |
| apt remove foo | aptitude remove foo | apt-get remove foo | foo を削除(設定ファイルは残す) |
| apt autoremove | N/A | apt-get autoremove | 不要になった自動インストールパッケージを削除 |
| apt purge foo | aptitude purge foo | apt-get purge foo | foo の設定ファイルを削除 |
| apt clean | aptitude clean | apt-get clean | ローカルキャッシュのパッケージファイルを完全削除 |
| apt autoclean | aptitude autoclean | apt-get autoclean | 古いパッケージファイルのみ削除 |
| apt show foo | aptitude show foo | apt-cache show foo | foo の詳細情報表示 |
| apt search regex | aptitude search regex | apt-cache search regex | 正規表現に一致するパッケージを検索 |
| N/A | aptitude why regex | N/A | パッケージがインストールされている理由を説明 |
| N/A | aptitude why-not regex | N/A | パッケージがインストールされていない理由を説明 |
| N/A | aptitude search '~i!~M' | apt-mark showmanual | 手動インストールされたパッケージ一覧 |
使いやすさと機能性: aptitude > apt > apt-get/apt-cache
自動化スクリプト向き: apt-get/apt-cache > apt > aptitude
apt は apt-get, apt-cache などのラッパーとして、対話的利用に最適化されています。
注意:
- 安定版 Debian で aptitude を使ったバージョン間アップグレードは推奨されません
- aptitude は testing/unstable で大量のパッケージを削除することがあります
- 対話的操作には apt、スクリプトには apt-get/apt-cache を使用
- 詳細なオプションは man ページを参照