テクノロジーガイド

Apt-pinning の短い入門

2 min read Linux 更新されました 22 Oct 2025
Apt-pinning入門:Debianで複数リポジトリを管理
Apt-pinning入門:Debianで複数リポジトリを管理

版: 1.0
著者: Falko Timme

apt-pinning を使うと、Debian 系ディストリビューション(例: Debian, Ubuntu)で複数のリリース(stable, testing, unstable)やサードパーティのリポジトリを共存させ、パッケージごとにどのリリースからインストールするかを制御できます。通常は stable を優先して運用し、必要なパッケージだけテスト版や不安定版から取得する運用に有効です。この記事は手順、例、検証方法、運用チェックリストを含みます。

重要: ここで示す設定は一例です。環境によってはシステムが不安定になる可能性があるため、必ずテスト環境で検証してください。

概要

apt-pinning は apt の優先度(Pin-Priority)機能を利用して、どのリリースからパッケージを取得するかを決めます。これにより、システム全体は stable を基本にしつつ、個別パッケージのみ newer な testing や unstable からインストールすることができます。

定義済みの用語(1行定義):

  • apt-pinning: apt の Pin-Priority を使い、パッケージソースの優先順位を指定する仕組み。
  • sources.list: apt が参照するリポジトリ一覧ファイル(/etc/apt/sources.list)。
  • apt_preferences: Pin 設定を置くファイル(/etc/apt/preferences または /etc/apt/preferences.d/)。
  • Candidate: apt-cache policy の出力で、インストール候補となるバージョン。

1 事前の注意

この説明は著者が Debian Lenny(stable)上で試したものに基づきます。例として phpmyadmin を用いており、執筆時点で各リリースに以下のバージョンがありました(参照: http://packages.debian.org/search?keywords=phpmyadmin&searchon=names&suite=all§ion=all)。

  • lenny (stable): 4:2.11.8.1-5
  • squeeze (testing): 4:3.1.2-2
  • sid (unstable): 4:3.1.3-1

2 sources.list にテスト用リポジトリを追加する

/etc/apt/sources.list に testing や unstable を追加します。例:

vi /etc/apt/sources.list

次のようにします(例: Lenny に testing と unstable を追加):

deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

## Lenny / Stable
deb http://ftp2.de.debian.org/debian/ lenny main
deb-src http://ftp2.de.debian.org/debian/ lenny main

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

## Squeeze / Testing
deb http://ftp2.de.debian.org/debian/ squeeze main
deb-src http://ftp2.de.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

## Sid / Unstable
deb http://ftp2.de.debian.org/debian/ sid main
deb-src http://ftp2.de.debian.org/debian/ sid main

追加後、apt のキャッシュ制限を増やすことを推奨します。/etc/apt/apt.conf を開き、次を追加します:

vi /etc/apt/apt.conf
APT::Cache-Limit "100000000";

これをしないと、apt-get update 実行時に以下のようなエラーが出ることがあります:

E: Dynamic MMap ran out of room

その後、パッケージデータベースを更新します:

apt-get update

3 apt-pinning の考え方と優先度の意味

デフォルトでは、stable, testing, unstable の優先度が同じ(例: 500)になるため、apt は単純に「もっとも新しいバージョン」を Candidate として選びます。これを詳細に制御するのが apt-pinning です。

優先度の範囲(man 5 apt_preferences の要約):

  • P > 1000: ダウングレードでも強制的にそのバージョンをインストール
  • 990 < P <= 1000: ターゲットリリース外でもインストールされる(ただしインストール済みの方が新しい場合は除く)
  • 500 < P <= 990: ターゲットリリースかインストール済みの方が新しければそちらを使う
  • 100 < P <= 500: 他のディストリビューションがなければインストールされる
  • 0 < P <= 100: インストール済みがない場合のみインストール
  • P < 0: インストールを禁止

実際に優先度を確認するコマンド:

apt-cache policy

例(出力の一部):

server1:~# apt-cache policy
 Package files: 
 100 /var/lib/dpkg/status
     release a=now
 500 http://volatile.debian.org lenny/volatile/main Packages
     release o=volatile.debian.org,a=stable,l=debian-volatile,c=main
     origin volatile.debian.org
 500 http://ftp2.de.debian.org sid/main Packages
     release o=Debian,a=unstable,l=Debian,c=main
     origin ftp2.de.debian.org
 500 http://security.debian.org squeeze/updates/main Packages
     release v=None,o=Debian,a=testing,l=Debian-Security,c=main
     origin security.debian.org
 500 http://ftp2.de.debian.org squeeze/main Packages
     release o=Debian,a=testing,l=Debian,c=main
     origin ftp2.de.debian.org
 500 http://security.debian.org lenny/updates/main Packages
     release v=5.0,o=Debian,a=stable,l=Debian-Security,c=main
     origin security.debian.org
 500 http://ftp2.de.debian.org lenny/main Packages
     release v=5.0,o=Debian,a=stable,l=Debian,c=main
     origin ftp2.de.debian.org
 Pinned packages:
server1:~#

この例ではすべて 500 なので、新しければ unstable のパッケージが Candidate になります。phpmyadmin の候補確認例:

apt-cache policy phpmyadmin

出力例:

server1:~# apt-cache policy phpmyadmin
 phpmyadmin:
   Installed: (none)
   Candidate: 4:3.1.3-1
   Version table:
     4:3.1.3-1 0
        500 http://ftp2.de.debian.org sid/main Packages
     4:3.1.2-2 0
        500 http://ftp2.de.debian.org squeeze/main Packages
     4:2.11.8.1-5 0
        500 http://ftp2.de.debian.org lenny/main Packages
server1:~#

Candidate が unstable のバージョンになっているのが分かります。

4 典型的な apt-pinning の設定例

/ 例: phpmyadmin を stable 優先で、必要なら testing を許容する設定(/etc/apt/preferences.d/99-phpmyadmin を作成)

Package: phpmyadmin
Pin: release a=stable
Pin-Priority: 700

Package: phpmyadmin
Pin: release a=testing
Pin-Priority: 600

さらに一般的に、リリース全体のデフォルトポリシーを設定する場合:

# /etc/apt/preferences.d/00-defaults
Package: *
Pin: release a=stable
Pin-Priority: 700

Package: *
Pin: release a=testing
Pin-Priority: 600

Package: *
Pin: release a=unstable
Pin-Priority: 100

この設定では基本的に stable を優先し、testing は許容、unstable は明示的に指定しない限り使われません。

重要: Pin-Priority の値は運用方針に合わせて調整してください。大きすぎる値は意図しないダウングレードや依存関係の破綻を引き起こす可能性があります。

5 検証とテスト手順

  • apt-cache policy で Candidate が期待通りか確認
  • apt-get -s install でシミュレーション(実際に変更を加えない)
  • テスト環境で実際のインストール/アップグレードを実行し、依存関係やサービスの挙動を確認

例:

apt-cache policy phpmyadmin
apt-get -s install phpmyadmin

6 いつ使うべきか・使わない方がよい場合

  • 適している場合:
    • 全体は安定版で運用したいが、一部のパッケージのみ新しい機能やバグ修正が必要なとき
    • テスト用に限定的に新しいパッケージを導入したいとき
  • 適さない場合:
    • 多数のパッケージに混在するリリースを導入する場合(依存関係が複雑になりやすい)
    • 運用チームがパッケージソースを厳密に管理できない場合

7 代替アプローチ

  • コンテナ化(Docker 等)で特定アプリのみ新しい環境を用意する
  • backports リポジトリを利用して安定版向けに新しいバージョンを提供する
  • ソースからビルドして /usr/local にインストールする

8 運用チェックリスト(管理者向け)

  • 変更前にテスト環境で検証済みか
  • /etc/apt/sources.list と /etc/apt/preferences(.d) のバックアップを取得したか
  • apt-get -s で依存関係の影響を確認したか
  • セキュリティアップデートを適切に取得できるか確認したか
  • 変更履歴(誰がいつ何を変更したか)を記録しているか

9 受け入れ基準(テストケース)

  • apt-cache policy で期待するリリースが Candidate になっていること
  • apt-get -s install で依存関係の衝突が報告されないこと
  • 本番に反映後、サービスが正常に稼働すること

10 よくある失敗例と回避策

  • 失敗例: sources.list に誤った行を加え、依存関係が破綻して apt が壊れる。
    回避策: 変更前にファイルをバックアップし、1行ずつ追加して apt-get update 後に apt-cache policy を確認する。

  • 失敗例: Pin-Priority を 1001 など大きすぎる値にして意図せぬダウングレードを発生。
    回避策: 優先度は小さめから試し、動作を確認してから本番に適用する。

11 マインドセットとヒューリスティック

  • ルール: 「全体は安定、個別は例外」– デフォルトは stable にする。
  • 小さく変える: 1パッケージずつピンを追加して影響を確認する。
  • ロールバック準備: すぐに戻せるように設定変更の差分と手順を残す。

12 1行用語集

  • Pin: パッケージソースの優先順位を表す設定。
  • Candidate: インストール候補のバージョン。
  • Backports: 安定版向けに新しいパッケージを提供する仕組み。

まとめ

apt-pinning は複数リリースを共存させつつ、システムの安定性を保ちながら必要なパッケージだけ新しくする強力な手段です。ただし依存関係の問題や予期せぬダウングレードを招く可能性があるため、テスト環境での検証、小刻みな適用、明確な運用手順とログ記録を徹底してください。

重要:

  • まずテスト環境で検証すること
  • Pin-Priority は慎重に設定すること
  • 変更は必ず記録し、戻せる手順を用意すること

関連参照: http://packages.debian.org/search?keywords=phpmyadmin&searchon=names&suite=all§ion=all

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Debian 11 に Podman をインストールして使う
コンテナ

Debian 11 に Podman をインストールして使う

Apt-pinning入門:Debianで複数リポジトリを管理
Linux

Apt-pinning入門:Debianで複数リポジトリを管理

OptiScalerでFSR 4を全対応ゲームに導入する方法
ゲーム

OptiScalerでFSR 4を全対応ゲームに導入する方法

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法
ネットワーク

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法

AndroidでSDカードのインストールエラーを修正する方法
トラブルシューティング

AndroidでSDカードのインストールエラーを修正する方法

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定
Linux ネットワーク

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定