
こんにちは。皆さん、明けましておめでとうございます。
最近、Debian バックポート ソースから nginx deb パッケージ v1.4.4 をビルドしました。もちろん、apt ソース リストに追加しましたが、すべてうまくいきました。
私の質問:Debian は、公式ソースから個人的にビルドしたパッケージを自動的に更新しますか? セキュリティパッケージを更新するという意味です。
アップデート:
apt-get update
今日は、Debian 7 apt がどのように動作するかを確認するためにこれを実行しましたapt-get -V upgrade
。結果は次のようになりました:
root@debian-lab:~/nginx-1.4.4-packages# apt-get -V upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
nginx-full (1.4.4-1~bpo70+1 => 1.4.4-1~bpo70+1)
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/464 kB of archives.
After this operation, 9,027 kB disk space will be freed.
Do you want to continue [Y/n]?
ご覧のとおり、aptはアップグレードを試みています(1.4.4-1~bpo70+1 => 1.4.4-1~bpo70+1)これらは基本的に 2 つの同一バージョンですが、インストールした deb パッケージには、デフォルトの nginx-full に追加されたカスタム nginx モジュールがあり、更新後にカスタム モジュールはすべてなくなり、標準の debian wheezy バックポート deb に置き換えられました。debian バックポート ソースから nginx バックポート deb パッケージをビルドし、バックポート経由で build-deb もインストールしましたが、一部の依存関係は安定版から自動的にインストールされ、詳細出力からそれが確認できました。
これを防ぐ方法を例を挙げて教えていただけますか?
アップデート
パッケージを apt pin しようとしましたが、うまくいきませんでした。次のような出力が得られました:
apt-cache policy nginx-full
nginx-full:
Installed: 1.4.4-1~bpo70+1
Candidate: 1.4.4-1~bpo70+1
Version table:
1.4.4-1~bpo70+1 0
100 http://ftp.uk.debian.org/debian/ wheezy-backports/main amd64 Packages
*** 1.4.4-1~bpo70+1 0
100 /var/lib/dpkg/status
1.2.1-2.2+wheezy2 0
500 http://ftp.uk.debian.org/debian/ wheezy/main amd64 Packages
500 http://security.debian.org/ wheezy/updates/main amd64 Packages
以下は apt-cache ポリシー nginx です。
/etc/apt/preferences.d# apt-cache policy nginx
nginx:
Installed: 1.4.4-1~bpo70+1
Candidate: 1.4.4-1~bpo70+1
Package pin: 1.4.4-1~bpo70+1
Version table:
*** 1.4.4-1~bpo70+1 1001
100 http://ftp.uk.debian.org/debian/ wheezy-backports/main amd64 Packages
100 /var/lib/dpkg/status
1.2.1-2.2+wheezy2 1001
500 http://ftp.uk.debian.org/debian/ wheezy/main amd64 Packages
500 http://security.debian.org/ wheezy/updates/main amd64 Packages
しかし、apt はまだアップグレードして置き換えようとしています!!
Sources.list の内容:
deb http://ftp.uk.debian.org/debian/ wheezy main
deb-src http://ftp.uk.debian.org/debian/ wheezy main
deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main
# wheezy-updates, previously known as 'volatile'
deb http://ftp.uk.debian.org/debian/ wheezy-updates main
deb-src http://ftp.uk.debian.org/debian/ wheezy-updates main
# Wheezy Backports repository
deb http://ftp.uk.debian.org/debian wheezy-backports main
deb-src http://ftp.uk.debian.org/debian wheezy-backports main
パッケージ名「nginx」で一度 apt pin を試し、もう一度 nginx-full で試しました。
しかし、どちらもパッケージを保持できませんでした!!!
答え1
パッケージのバージョンを上げることをお勧めします。APT は両方のパッケージが同じではないことを認識しており、信頼できるソースからパッケージをインストールしようとしています。dch -i
必要なのは、簡単な説明を追加してパッケージを再構築することだけです。
パッケージを別の方法でピン留めすることもできます。
Package: nginx-full
Pin: origin ""
Pin-Priority: 999
これにより、ローカルにインストールされたパッケージの優先順位が高くなります。
リポジトリのバージョン文字列が現在インストールされているバージョンよりも優先され、ピン留めがない場合そしていくつかのバージョンがリリースされ、正しいソースがあれば、apt はリポジトリからパッケージをインストールします (できればパッチが既に適用されている状態で)。
答え2
パッケージをピン留めすると、apt-get はアップグレードを試行しません。
パッケージを固定するには、/etc/apt/preferences.d にファイルを作成します (例: /etc/apt/preferences.d/nginx)。
これをファイルに記入してください:
Package: nginx
Pin: version 1.4.4-1~bpo70+1
Pin-Priority: 1001