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が更新されるため、実行しないでください。影響範囲が大きく、システムが壊れてしまう可能性があります。
参考
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。