Debian: 任意のtesting/unstableパッケージのみをinstallする方法(システム全体はstableを維持)

前書き

Debianパッケージは、基本的な使い方をしていれば、安定版(stable)がシステムにinstallされます。しかし、「使用したいパッケージがstableにない場合」や「より新しいパッケージを使いたい場合」、システムにtesting/unstableパッケージを導入する必要性がでてきます。

この際、システム全体をtesting/unstableに変更したくない人は、多いと思います。その理由の一つは、パッケージが期待よりテストされていなかった場合、downgrade作業を実施しなければならないからです。最悪のケースは、testing/unstableから元々の環境(stable)へのdowngradeが失敗した場合、システムの再インストールが必要となる事です。

以上を踏まえて、本記事では、任意のtesting/unstableパッケージのみをシステムにinstallする方法を記載します。実施内容の概要は、以下の3点です。

実施内容(概要)
  • testing/unstableのミラーサーバをsources.listに追加
  • installパッケージ毎の優先度を設定(Versionコントロール)
  • testing/unstableパッケージのinstall

                                                

前提:2019年3月時点のDebian Version

下表に、2019年3月時点のDebian Version名を示します。コードネームは、Toy Storyのキャラから選ばれています。映画を見た事ある人は、何故sidが開発者向けのVersionかが想像できると思います。

状態 コードネーム(Ver) 説明
oldstable jessie(8.x) 次Versionの安定版リリース後(testingがstableに移行後)、旧安定版として区別されます。初回リリースから少なくとも5年間、LTS(Long Term Support)の対象。
stable stretch(9.x) 現行の安定版。安定版は、2年間隔でリリースされます。
testing buster(10.x) 次の安定版として、公開テスト中のVersion。
unstable sid(なし) 開発者向けのVersion。コードネームは、常に”sid”。
experimental experimental unstableに導入する前の実験段階Version。一般ユーザだけでなく、開発者に対しても「installは危険」と警告されています。

                   

testing/unstableのミラーサーバをsources.listに追加

デフォルトの状態では、install時Version向け(例:stretch)のミラーサーバのみがsources.listに追加されています。testing/unstableパッケージをミラーサーバからダウンロードするため、/etc/apt/sources.listを修正しなければいけません。

修正例として、/etc/apt/sources.listに以下の4行を追記します。管理者権限が必要です。

“http://ftp.jp.debian.org/debian/”部分は、好きなミラーサーバを選択してください(ミラーサーバ一覧へのリンク)。上記で重要な部分は、”testing”もしくは”unstable”と記載した箇所です。通常であれば、stableのVersion(例:stretch)と書かれています。testing/unstableを追記した事により、これらのVersionのパッケージをミラーサーバからダウンロード可能な状態になりました(正確には、apt updateまで必要)。

                                 

installパッケージ毎の優先度を設定(Versionコントロール)

aptコマンドは、preferencesファイルによって、システムへ導入するパッケージを制御できます。今回は、「システム全体はstable」を維持しつつ、「apt install時に指定があった場合のみ、testing/unstableパッケージを導入可能」という状態を作ります。

前述の状態を作るため、/etc/apt/preferencesを新規作成し、以下の内容を記載します。

“Package:”では、Versionコントール対象のパッケージを選択します。”*”はワイルドカードなので、全てのパッケージが対象になります。

“Pin:”では、パッケージをどのVersionで固定するかを設定します。”release a=”で、「アーカイブ名がstable/testing/unstableと設定されたパッケージを使う」と設定しています。

“Pin-Priority:”は、最も重要な箇所で、パッケージinstall時の優先度を設定しています。優先度が1000に近いパッケージが優先的にinstallされます。そのため、上記の例では、stableパッケージが最優先でinstallされます。

また、0 < Priority < 100の範囲は、「”apt install”でパッケージを指定すればinstallできますが、依存対象のパッケージを暗黙的にupdateをしない」という意味です。つまり、依存関係の満たせないtesting/unstableパッケージは、installできません。

下表に、Pin-Priority(優先度)の割り当てを示します。

優先度 説明
P >= 1000 パッケージをdowngradeしたい場合に指定
990 <= P < 1000 install済みパッケージVersionの方が新しいのでなければ、stable以外でもパッケージをinstall。
500 <= P < 990 stableに属するVersionが公開済み、もしくはinstall済みパッケージVersionの方が新しいのでなければ、パッケージをinstall。500は、現在 install されていないパッケージの デフォルト優先度。
100 <= P < 500 stable以外に属するVersionが公開済み、もしくはインストール済みVersionの方が新しいのでなければ、パッケージをinstall。
0 < P < 100 パッケージがinstallされていない場合、パッケージをinstall
P < 0 install禁止。
P = 0 動作未定義。

testing/unstableは、優先度として100 <= Priority < 500の範囲を指定しても良いです。ただし、testing/unstableパッケージの依存関係を満たすパッケージVersionが未作成(作成中)の場合、install時にエラーとなります。

                                       

testing/unstableパッケージのinstall

testing/unstableパッケージのinstall例として、依存関係を満たせるケースと、満たせないケースの2点を紹介します。以下の手順を実行する前に、”sudo apt update”を実施してください。この段階で、パッケージがtesting/unstableに置き換わる事はありません。なお、testing/unstableをinstallする場合、以下の書式を用います。

書式

# apt install <package_name>/<Version>

依存関係を満たせるケース

                        

依存関係を満たせないケース(Perl)

依存関係を満たせるケースと同じ手順を実施した場合、以下のようにエラーとなります。

このような場合は、aptコマンドの”-t”オプションでinstallパッケージのVersionを指定します。ちなみに、以下の手順はglibcが更新されるため、実行しないでください。影響範囲が大きく、システムが壊れてしまう可能性があります。

                                         

参考

Debian Experimental

Debian管理者ハンドブック

                                            

おすすめ