Debian パッケージ管理の基礎と実践

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

使用手順:

  1. テキストファイル(例: urls.txt)にリポジトリのベース URL を1行ずつ記述
  2. スクリプトに実行権限を付与: chmod +x add_repos.sh
  3. 実行: sudo ./add_repos.sh urls.txt
  4. 確認: 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 -idpkg --force-all -i でランダムなパッケージをインストールしない
  • /var/lib/dpkg/ 内のファイルを削除・変更しない
  • ソースから直接インストールしたプログラムでシステムファイルを上書きしない
  • 安全な環境でテストせずにパッケージをインストールしない
  • non-freecontrib の使用は自由を失い、サポートが限定されるリスクがある

リポジトリの一時的な問題

  • 壊れたパッケージのアップロード(特に 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>

  • 削除と同様だが、設定ファイルも削除

コマンド比較表

aptaptitudeapt-get/apt-cache説明
apt updateaptitude updateapt-get updateリポジトリメタデータ更新
apt install fooaptitude install fooapt-get install foofoo の候補バージョンと依存をインストール
apt upgradeaptitude safe-upgradeapt-get upgradeインストール済みパッケージの候補バージョンにアップグレード(削除なし)
apt full-upgradeaptitude full-upgradeapt-get dist-upgrade必要に応じてパッケージを削除しながらアップグレード
apt remove fooaptitude remove fooapt-get remove foofoo を削除(設定ファイルは残す)
apt autoremoveN/Aapt-get autoremove不要になった自動インストールパッケージを削除
apt purge fooaptitude purge fooapt-get purge foofoo の設定ファイルを削除
apt cleanaptitude cleanapt-get cleanローカルキャッシュのパッケージファイルを完全削除
apt autocleanaptitude autocleanapt-get autoclean古いパッケージファイルのみ削除
apt show fooaptitude show fooapt-cache show foofoo の詳細情報表示
apt search regexaptitude search regexapt-cache search regex正規表現に一致するパッケージを検索
N/Aaptitude why regexN/Aパッケージがインストールされている理由を説明
N/Aaptitude why-not regexN/Aパッケージがインストールされていない理由を説明
N/Aaptitude 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 ページを参照

タグ: Debian APT dpkg aptitude sources.list

5月22日 05:53 投稿