今回は、
Debian(Ubuntu)で apt-get upgrade (aptitude も同様)で自動更新したくない場合の対処方法についてです。
DebianおよびUbuntuでは、パッケージ管理ツールとしてAPT (Advanced Packaging Tool) という便利なものがあります。
そのAPTの代表的なコマンドが apt-get です(aptitudeも同じAPTを利用したコマンドになります)。そのAPTを利用すると簡単にインストール済のパッケージ(ソフトウェア)を最新バージョンへ更新することができます。
例えば、apt-getコマンドと使用した場合、以下のようなイメージで自動的に最新バージョンへ更新することができます。
|
これは、非常に便利な反面、あえて手動でインストールしたパッケージもリポジトリに登録されているパッケージであれば、無条件に最新版へ更新してしまいます。
あえて手動でインストールしたパッケージは、それなりに理由があるものです。例えば、オプションを付加して再ビルドしたものかもしれません。あるいは、あえて古いバージョンを使っているのかもしれません。
それでも、APTはお構いなしで最新版へアップグレードしようとします。
それは、ちょっと困りますね。かといって、便利なAPTの自動更新機能を利用しないというのも困りますね。
そこで、APTでは、特定のパッケージにおいて、アップグレードしないように指定することができるような設定が用意されています。
APTで自動アップグレードしないように指定する方法には、大きく2つの方法があります。
今回は、その設定方法を それぞれ簡単に解説してみます。
- 目次
- 履歴
2015年12月25日 リポジトリの指定方法を追記
2012年5月18日 初版
dpkg –set-selections を使う方法(簡単)
dpkg –set-selections を使って自動アップグレードをしないようにする方法は簡単ですが、一律、holdされてしまうことに注意してください。
少なくとも、
apt-get(aptitude) upgrade package 又は apt-get(aptitude) dist-upgrade に対する自動ダウングレードの強行の場合も、holdされてしまいます。
つまり、ダウングレードしたいときにも、何もしないということになるので、注意が必要です。ただ、ダウングレードすることは、早々無いので、使い勝手としては、この方法が、最も良いでしょう。
使い方は、いたって簡単です。下記のように1行で hold (アップグレードしない)、install (アップグレードする)へ切り替えることができます。
|
また、状態を確認するには、以下のように実行すればOKです。
|
|
/etc/apt/preferences を使う方法(詳細)
dpkg –set-selections を使う方法(簡単)では、一律、指定したパッケージをholdするか否かの指定のみでした。
/etc/apt/preferences を使った場合、より詳細な設定を行うことができるようになります。
また、最近では、/etc/apt/preferences.d というディレクトリがありますので、そこに個別に設定したファイルを設置するようになっています。
その際は、ファイル名に拡張子を付けないようにします(もし、拡張子を付けたい場合は、prefのみ許可されています)
以下は、その設定例です。
|
以下に書式(フォーマット)と各パラメータに関して記載します。
フォーマット
|
Packageは、
文字通りパッケージ名を指定します。
Pinは、
文字通りピン留めのピンの意味で、「留めておくもの」という意味あいでしょうか。
このピン 定義 の詳細は、以降の Pin の値の意味 にて解説します
Pin-Priorityは、
先のピンの優先順位を数値で指定します。
このピン 優先順位 の詳細は、以降の Pin-Priority の値の意味 にて解説します
Pin の値の意味
Pin | パラメータ 意味 |
---|---|
version |
バージョン番号 そのパッケージ名のパージョン番号を指定します。 |
origin |
ローカルサイト名(or IPアドレス) 選択ファイルに書かれている汎用形式のエントリは、パッケージのグループ についてのみ適用されます。例えば以下のレコードは、ローカルサイトにある全パッケージについて、高い優先度を割り当てます。 Package: * Pin: origin “” Pin-Priority: 999 |
release |
a=アーカイブ名 このディレクトリツリーに属する全パッケージのアーカイブ名です。 例えば、”Archive: stable” や “Suite:stable” という行は、 Release ファイルの親ディレクトリツリー以下にある全パッケージが、stableアーカイブだと指定します。APT 選択ファイルでこの値を指定するには、 以下の行が必要になります。 Pin: release a=stable c=コンポーネント名 Release ファイルの、ディレクトリツリーにあるパッケージのライセンスコンポーネント名です。 例えば、”Component:main” という行は、このディレクトリ以下の全ファイルが、 main コンポーネント (Debianフリーソフトウェアガイドラインの元でライセンスされている) であることを表します。 APT選択ファイルでこのコンポーネントを指定するには、以下の行が必要になります。 Pin: release c=main n=コード名 Release ファイルのディレクトリツリーにあるコード名です。 名前は、コードネームは、ディレクトリツリー内のすべてのパッケージが属するます。 たとえば、行の “Codename: wheezy” リリースファイルの親の下にあるディレクトリツリー内のすべてのパッケージは、”wheezy” という名前のバージョンに属していることを指定します。 APT選択ファイルでこのコード名を指定するには、以下の行が必要になります。 Pin: release n=wheezy v=バージョン リリースバージョン名です。例えば、このツリーのパッケージが、GNU/Linux リリースバージョン 3.0 に属するとします。 通常testing ディストリビューションや unstableディストリビューションには、まだリリースされていないので、 バージョン番号が付きません。APT選択ファイルでこれを指定するには、以下の行のいずれかが必要になります。 Pin: release v=3.0 Pin: release a=stable, v=3.0 Pin: release 3.0 o=パッケージの提供者名 Release ファイルのディレクトリツリーにあるパッケージの提供者名です。 ほとんど共通で、Debian です。APT選択ファイルでこの提供者を指定するには、以下の行が必要になります。 Pin: release o=Debian l=パッケージのラベル名 Release ファイルのディレクトリツリーにあるパッケージのラベル名です。 ほとんど共通で Debian です。APT選択ファイルでこのラベルを指定するには、以下の行が必要になります。 Pin: release l=Debian |
Pin-Priority の値の意味
Pin-Priority | 意味 |
---|---|
x <0 | そのパッケージは絶対にインストールされません。 |
0<= x <100 | パッケージはインストールされておらず利用可能なバージョンもありません。これらのパッケージはバージョン選択プロセスにも現れません。 |
x = 100 | インストール済のパッケージに当てはめられます – 他のバージョンによって置き換え可能であり、置き換える側の値は 101 以上でなければなりません。 |
x =>101 | そのパッケージがインストールされるべきであることを示しています。よくあるのは、あるパッケージのインストール済バージョンがより進んだバージョンにのみアップグレードされる場合です。 |
100<= x <=1000 | この典型的な動作をすることを示しています。このような値を持つパッケージは、利用可能であっても古いバージョンにはダウングレードされません。 例えば sylpheed 0.5.3 をインストーしてから、 sylpheed 0.4.99 の priority 値を 999 に設定しても、0.4.99 はその設定によってインストールされません。 |
x =>1001 | あるパッケージをダウングレード可能にするには、値を 1001 以上に設定しなければなりません。 |
でも、ちょっと注意しておくべきことがあります。例えば、
|
そこで、既にインストールされているバージョンが 古い 5.7.1 だったとします。
最新バージョンが、5.9.1 だったとします。
この場合、
|
バージョンを指定するときは、既にインストール済のバージョンにあわせてあげると、ちゃんと思ったとおりに動いてくれるようです。
|
設定例 アップデート対象のリポジトリを指定する
複数のリポジトリからパッケージをインストールしている場合、
よく異なるバージョンの同じパッケージを複数のリポジトリからアップデートされようとする場合があります。
この場合、一般的には、バージョンが最新のものが利用されます。
以下は、リポジトリ nginx と dotdeb がインストールされている状態で、nginx のインストール候補を出力した例です。
|
|
dotdebには、php や mysqlなど nginx以外のパッケージも含まれています。
ここで示されているように nginx の本家のより新しいバージョンをインストールしても良いですが、
nginx は、php や mysqlと同じように dotdeb からインストールしたい場合や debian デフォルトのパッケージを使いたい場合もあるかと思います。
その際、先のバージョン設定などでは、うまく設定できない場合があります。
この場合、origin を使って リポジトリを指定するとうまくいきます。
以下は、その時の指定例です。
/etc/apt/preferences.d/nginx を編集します。(存在しない場合は作成します)
|
|
上記の例では、nginxのパッケージに pin設定するので、/etc/apt/preferences.d/ 配下に nginx というファイル名で pin設定を記述しています。
2行目 : Pin 設定 に origin および packages.dotdeb.org のサイト名を 指定します。
packages.dotdeb.org は、dotdeb のサイト名(URL)になります。
つまり、上記の設定では、何よりも リポジトリ dotdeb を優先するようになります。
では、この設定で先の policy を出力してみます。
|
上記のとおり、パッケージ Pin が出力され、 リポジトリ dotdeb の 最新 nginx パッケージが候補となったことに注意してください。
|
以下に簡単に各出力情報について解説しておきます。
|
忘れっぽい方のためにも、何かの参考になればうれしく思います。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :