レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

Debian(Ubuntu)で apt-get upgrade で自動更新したくない場合の対応

2012年5月18日 2015年12月31日
debian howto

今回は、 Debian(Ubuntu)で apt-get upgrade (aptitude も同様)で自動更新したくない場合の対処方法についてです。

DebianおよびUbuntuでは、パッケージ管理ツールとしてAPT (Advanced Packaging Tool) という便利なものがあります。 そのAPTの代表的なコマンドが apt-get です(aptitudeも同じAPTを利用したコマンドになります)。そのAPTを利用すると簡単にインストール済のパッケージ(ソフトウェア)を最新バージョンへ更新することができます。

例えば、apt-getコマンドと使用した場合、以下のようなイメージで自動的に最新バージョンへ更新することができます。

$ apt-get update
...
$ apt-get upgrade
...

これは、非常に便利な反面、あえて手動でインストールしたパッケージもリポジトリに登録されているパッケージであれば、無条件に最新版へ更新してしまいます。
あえて手動でインストールしたパッケージは、それなりに理由があるものです。例えば、オプションを付加して再ビルドしたものかもしれません。あるいは、あえて古いバージョンを使っているのかもしれません。 それでも、APTはお構いなしで最新版へアップグレードしようとします。

それは、ちょっと困りますね。かといって、便利なAPTの自動更新機能を利用しないというのも困りますね。
そこで、APTでは、特定のパッケージにおいて、アップグレードしないように指定することができるような設定が用意されています。 APTで自動アップグレードしないように指定する方法には、大きく2つの方法があります。
今回は、その設定方法を それぞれ簡単に解説してみます。

dpkg –set-selections を使う方法(簡単)

dpkg –set-selections を使って自動アップグレードをしないようにする方法は簡単ですが、一律、holdされてしまうことに注意してください。
少なくとも、
apt-get(aptitude) upgrade package 又は apt-get(aptitude) dist-upgrade に対する自動ダウングレードの強行の場合も、holdされてしまいます。 つまり、ダウングレードしたいときにも、何もしないということになるので、注意が必要です。ただ、ダウングレードすることは、早々無いので、使い勝手としては、この方法が、最も良いでしょう。

使い方は、いたって簡単です。下記のように1行で hold (アップグレードしない)、install (アップグレードする)へ切り替えることができます。

# 除外する場合
$ echo パッケージ名 hold | dpkg --set-selections

# 除外対象から外す場合
$ echo パッケージ名 install | dpkg --set-selections

また、状態を確認するには、以下のように実行すればOKです。

# 全パッケージの状態を出力する
$ dpkg --get-selections
acpi                                            install
...
nginx                                           install
...

# パッケージ名を指定する場合
$ dpkg --get-selections nginx
nginx                                           install

# hold 状態のパッケージ名のみを指定する場合
$ dpkg --get-selections | grep -e nginx
nginx                                           hold
dpkg には、いろんなパラメータがあります。以下は、参考までにdpkgのパラメータ一覧です。
$ dpkg --help
使い方: dpkg [<オプション> ...] <コマンド>

コマンド:
  -i|--install      <.deb ファイル名> ... | -R|--recursive <ディレクトリ> ...
  --unpack          <.deb ファイル名> ... | -R|--recursive <ディレクトリ> ...
  -A|--record-avail <.deb ファイル名> ... | -R|--recursive <ディレクトリ> ...
  --configure       <パッケージ名> ...    | -a|--pending
  --triggers-only   <パッケージ名> ...    | -a|--pending
  -r|--remove       <パッケージ名> ...    | -a|--pending
  -P|--purge        <パッケージ名> ...    | -a|--pending
  --get-selections [<パターン> ...]  標準出力にパッケージ選択一覧を表示
  --set-selections                   標準入力からパッケージ選択一覧を設定
  --clear-selections                 すべての必須でないパッケージを選択解除
  --update-avail <Packages ファイル> 取得可能なパッケージ情報を更新
  --merge-avail <Packages ファイル>  ファイルからパッケージ情報を合成
  --clear-avail                      既存の取得可能パッケージ情報を消去
  --forget-old-unavail               未インストールの利用不可能パッケージ情報の 破棄
  -s|--status <パッケージ名> ...     パッケージ状態の詳細を表示
  -p|--print-avail <パッケージ名> ...取得可能なバージョンの詳細を表示
  -L|--listfiles <パッケージ名> ...  パッケージが「所有する」ファイル一覧を表示
  -l|--list [<パターン> ...]         パッケージの一覧を簡潔に表示
  -S|--search <パターン> ...         ファイルを所有するパッケージを検索
  -C|--audit                         壊れているパッケージのチェック
  --print-architecture               対象アーキテクチャを表示 (GCC を使用)
  --compare-versions <a> <op> <b>    バージョン番号を比較 - 下記参照
  --force-help                       強制オプションのヘルプ
  -Dh|--debug=help                   デバッグオプションのヘルプ

  -h | --help                         このヘルプを表示
  --version                           バージョン番号を表示
アーカイブの操作には dpkg -b|--build|-c|--contents|-e|--control|-I|--info|
 -f|--field|-x|--extract|-X|--vextract|--fsys-tarfile を使用すること (dpkg-deb --help を参照)
内部利用用: dpkg --assert-support-predepends | --predep-package |
  --assert-working-epoch | --assert-long-filenames | --assert-multi-conrep
オプション:
  --admindir=<ディレクトリ>  /var/lib/dpkg の代わりに指定の <ディレクトリ> を使 用する
  --root=<ディレクトリ>      ルートディレクトリを別の場所にしてインストールする
  --instdir=<ディレクトリ>   インストール先のディレクトリを変更 (管理ディレクト リは除く)
  --path-exclude=<パターン>  シェルパターンにマッチするパスにインストールしない
  --path-include=<パターン>  上記の除外後にパターンを再度含める
  -O|--selected-only         インストール/アップグレードに選択されていないパッケージをスキップする
  -E|--skip-same-version     同バージョンがインストール済みのパッケージをスキッ プする
  -G|--refuse-downgrade      インストール済みパッケージより古いバージョンのパッ ケージをスキップする
  -B|--auto-deconfigure      ほかのパッケージを壊してでもインストールする
  --[no-]triggers            間接トリガ処理をスキップまたは強制する
  --no-debsig                パッケージの署名の検証をしない
  --no-act|--dry-run|--simulate
                             何をするか表示して、実際には何もしない
  -D|--debug=<8進数>         デバッグモード (-Dhelp または --debug=help を参照)
  --status-fd <n>            状態変化の更新をファイル記述子 <n> に送る
  --log=<ファイル名>         状態変更およびアクションを指定の <ファイル名> に記 録する
  --ignore-depends=<パッケージ>,...
                                 <パッケージ> を呼び出す依存関係を無視する
  --force-...                    問題を無視する (--force-help を参照)
  --no-force-...|--refuse-...
                                 問題が発生した時点で終了する
  --abort-after <n>              <n> 回エラーが発生したら中断する

--compare-versions 用比較演算子:
 lt le eq ne ge gt       (バージョンなしはどのバージョンよりも古いと見なす)
 lt-nl le-nl ge-nl gt-nl (バージョンなしはどのバージョンよりも新しいと見なす)
 < << <= = >= >> >       (コントロールファイルの構文の互換性のみ)

ユーザ向けパッケージ管理ツールである `dselect' または `aptitude' を使いましょう 。

/etc/apt/preferences を使う方法(詳細)

dpkg –set-selections を使う方法(簡単)では、一律、指定したパッケージをholdするか否かの指定のみでした。 /etc/apt/preferences を使った場合、より詳細な設定を行うことができるようになります。

preferencesは、テキストファイルでviなどのエディタで編集することで利用できます。
また、最近では、/etc/apt/preferences.d というディレクトリがありますので、そこに個別に設定したファイルを設置するようになっています。
その際は、ファイル名に拡張子を付けないようにします(もし、拡張子を付けたい場合は、prefのみ許可されています)

以下は、その設定例です。

# この設定だと、最新のperlが5.9になった場合、アップグレードされなくなります。
# また、システムのダウングレードを行った場合のperlのバージョンが5.8以下の場合は、
# ダウングレードを実施します。
Package: perl
Pin: version 5.8*
Pin-Priority: 1001

# この設定だと、ローカルサイトにある全パッケージについて、高い優先度(999)を割り当てます。
Package: *
Pin: origin ""
Pin-Priority: 999

# この設定だと、アーカイブ名が "unstable" となっているディストリビューションに属するパッケージを、
# すべて低い優先度(50)に割り当てます。
Package: *
Pin: release unstable
Pin-Priority: 50

以下に書式(フォーマット)と各パラメータに関して記載します。

フォーマット

Package: [パッケージ名]
Pin: [ピン 定義]
Pin-Priority: [ピン 優先順位]

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 以上に設定しなければなりません。

結構、細かい設定ができるようになっていますね。
でも、ちょっと注意しておくべきことがあります。例えば、
Package: perl
Pin: version 5.8*
Pin-Priority: 1001
と指定しているとしましょう。
そこで、既にインストールされているバージョンが 古い 5.7.1 だったとします。
最新バージョンが、5.9.1 だったとします。

この場合、
$ apt-get update
...
$ apt-get upgrade
...
Inst perl [5.7.1+squeeze6] (5.9.1+squeeze7 Debian:6.0.5/stable [all]) []
...
Conf perl (5.9.1+squeeze7 Debian:6.0.5/stable [all])
...
と、インストールされてしまいます。
バージョンを指定するときは、既にインストール済のバージョンにあわせてあげると、ちゃんと思ったとおりに動いてくれるようです。
Package: perl
Pin: version 5.7*
Pin-Priority: 1001
上記の場合は、インストールされません。

おまけ設定例 アップデート対象のリポジトリを指定する

複数のリポジトリからパッケージをインストールしている場合、 よく異なるバージョンの同じパッケージを複数のリポジトリからアップデートされようとする場合があります。 この場合、一般的には、バージョンが最新のものが利用されます。
以下は、リポジトリ nginx と dotdeb がインストールされている状態で、nginx のインストール候補を出力した例です。

$ apt-cache policy nginx
  インストールされているバージョン: (なし)
  候補:               1.8.0-1~jessie
  バージョンテーブル:
     1.8.0-1~jessie 999
        500 http://nginx.org/packages/debian/ jessie/nginx amd64 Packages
     1.8.0-1~dotdeb+8.2 999
        500 http://packages.dotdeb.org/ jessie/all amd64 Packages
     1.8.0-1~dotdeb+8.1 999
        500 http://packages.dotdeb.org/ jessie/all amd64 Packages
     1.6.2-5 999
        500 http://ftp.jp.debian.org/debian/ jessie/main amd64 Packages
インストール候補は、以下のコマンドイメージ(最後にパッケージ名を付加)で簡単に出力することができます。
$ apt-cache policy パッケージ名
また、aptでインストールする際に、複数のバージョンが存在する場合、特に指定がない場合は、 上記の インストール候補がインストールされることになります。

dotdebには、php や mysqlなど nginx以外のパッケージも含まれています。 ここで示されているように nginx の本家のより新しいバージョンをインストールしても良いですが、 nginx は、php や mysqlと同じように dotdeb からインストールしたい場合や debian デフォルトのパッケージを使いたい場合もあるかと思います。

その際、先のバージョン設定などでは、うまく設定できない場合があります。 この場合、origin を使って リポジトリを指定するとうまくいきます。

以下は、その時の指定例です。
/etc/apt/preferences.d/nginx を編集します。(存在しない場合は作成します)

1
2
3
Package: nginx
Pin: origin packages.dotdeb.org
Pin-Priority: 999

上記の例では、nginxのパッケージに pin設定するので、/etc/apt/preferences.d/ 配下に nginx というファイル名で pin設定を記述しています。

2行目 : Pin 設定 に origin および packages.dotdeb.org のサイト名を 指定します。

packages.dotdeb.org は、dotdeb のサイト名(URL)になります。
つまり、上記の設定では、何よりも リポジトリ dotdeb を優先するようになります。

では、この設定で先の policy を出力してみます。

$ apt-cache policy nginx
  インストールされているバージョン: (なし)
  候補:               1.8.0-1~dotdeb+8.2
  パッケージ Pin: 1.8.0-1~dotdeb+8.2
  バージョンテーブル:
     1.8.0-1~jessie 999
        500 http://nginx.org/packages/debian/ jessie/nginx amd64 Packages
     1.8.0-1~dotdeb+8.2 999
        500 http://packages.dotdeb.org/ jessie/all amd64 Packages
     1.8.0-1~dotdeb+8.1 999
        500 http://packages.dotdeb.org/ jessie/all amd64 Packages
     1.6.2-5 999
        500 http://ftp.jp.debian.org/debian/ jessie/main amd64 Packages

上記のとおり、パッケージ Pin が出力され、 リポジトリ dotdeb の 最新 nginx パッケージが候補となったことに注意してください。


ここで origin に指定する サイト名は、apt-cache policy で簡単に確認することができます。
$ apt-cache policy
パッケージファイル:
 ...
 500 http://packages.dotdeb.org/ jessie/all amd64 Packages
     release o=packages.dotdeb.org,a=jessie,n=jessie,l=packages.dotdeb.org,c=all
     origin packages.dotdeb.org
 500 http://nginx.org/packages/debian/ jessie/nginx amd64 Packages
     release v=8.0,o=nginx,a=stable,n=jessie,l=nginx,c=nginx
     origin nginx.org
 500 http://ftp.jp.debian.org/debian/ jessie-updates/main amd64 Packages
     release o=Debian,a=stable-updates,n=jessie-updates,l=Debian,c=main
     origin ftp.jp.debian.org
 ...
apt-cache policy のみの場合に出力される情報は、リポジトリ情報一覧となります。 リポジトリ情報の詳細は、先に解説した /etc/apt/preferences を使う方法(詳細) の各情報と同じです。
以下に簡単に各出力情報について解説しておきます。
 500 http://packages.dotdeb.org/ jessie/all amd64 Packages
  |   |                            |          |      
  |   |                            |          +-> 対象OS (64bit or 32bit)
  |   |                            +->  リポジトリ対象コンポーネント
  |   +-> リポジトリ URL 
  +->  Priority: Pin指定がない場合は、デフォルト 500 となります。
  
     release o=packages.dotdeb.org,a=jessie,n=jessie,l=packages.dotdeb.org,c=all
              |                      |       |         |                    +-> コンポーネント名
              |                      |       |         +->  パッケージのラベル名
              |                      |       +->  コード名 
              |                      +->  アーカイブ名
              +-> パッケージの提供者名
  
     origin packages.dotdeb.org
              +-> パッケージの提供サイト名(or IPアドレス) 
	 


個人的には、もっぱらdpkg –set-selections を使う方法(簡単)を使っていますが、 どうしても細かい設定が必要な場合は、/etc/apt/preferences を使う方法(詳細) も使いますが、めったに使いません。 それで、よく忘れるんですね。そこで、この記事で備忘録・・・となるのですね。

忘れっぽい方のためにも、何かの参考になればうれしく思います。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

Debian(Ubuntu)で GnuPGを使って自分で作成したパッケージを公開する

今回は、 Debian(Ubuntu)で 自分で作成した(ビルドした)パッケージを公開する 方法について、簡単に解説してみたいと思います。 ...

Ubuntu (Debian) で nginx に perl module (モジュール) を組み込んで使ってみる

今回は、Ubuntu Server(Debian) で nginx の perl module (モジュール) を使ってみたいと思います。 ...

Debian(Ubuntu) apt-get upgrade の「E: 未解決の依存関係です。」ではまったら

Debian(Ubuntu) では、パッケージのアップグレードを簡単に行う apt があります。 その代表的なコマンドが、apt-get です ...

Nginx にリバースプロキシのキャッシュ削除モジュール nginx cache purge を組み込んで使ってみる(Debian/Ubuntu編)

今回は、Ubuntu Server(Debian) で nginx を使ってみたいと思います。 Ubuntu(Debian) では、apt ...

Debian(Ubuntu 12) で Dotdeb から最新のnginx をインストール、php-fprm を使ってphpを動かしてみる

Debian (Ubuntu 12) で Dotdeb から最新のPHP , MySQL をインストールする の続きで、今回は、最新のnginx ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2662 [s]