明けましておめでとうございます。
最近、私はdebianバックポートソースからnginx debパッケージv1.4.4をビルドしましたが、もちろんaptsources.listに追加しました。
今日はapt-get update
、次にapt-get -V upgrade
を実行して、debian 7aptがどのように動作するかを確認しました。これが私が得たものです。
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 backportdebに置き換えられました。debianbackportソースからnginxbackport debパッケージをビルドし、ビルドをインストールしました-バックポートを介してdebも行いますが、いくつかの依存関係は安定版から自動的にインストールされます。これは、詳細な出力から見たものです。
例を挙げてこれを防ぐのを手伝ってくれませんか。ピン留めについて聞いたのですが、それが私の問題の答えですか?
[〜#〜] update [〜#〜]
パッケージをaptpinしようとしましたが、機能しませんでした。次の出力が得られました。
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」とnginx-fullを使用して、ピンをaptしようとしました。
しかし、両方ともパッケージを保持できません!!!
問題を回避するために、まず、カスタムパッケージにカスタム(およびそれ以上)のバージョン番号を使用する、例:1.4.4-1~bpo70+1-mrsms
をお勧めします。パッケージが「公式」バックポートとまったく同じバージョンではないため、これは公正なことです。ビルドする前に、ファイルdebian/changelog
からバージョン番号を変更できます。
dpkg
を使用してバージョン比較をテストできます(ここで、gt
は「より大きい」を表し、式がtrueの場合の戻りコードは0
です):
$ dpkg --compare-versions 1.4.4-1~bpo70+1-mrsms gt 1.4.4-1~bpo70+1
$ echo $?
オンラインリポジトリでさらに大きなバージョンが見つかった場合でも、カスタムパッケージはアップグレードされるため、注意してください。次に、使用 ピン留め それを回避する(man apt_preferences
を参照)することをお勧めします。
これを試すには、次の内容のファイル(/etc/apt/preferences.d/nginx-full
など)を作成します。
Package: nginx-full
Pin: version 1.4.4-1~bpo70+1-mrsms
Pin-Priority: 1001
パッケージを保持することもできます現在のインストール状態では、非常に効果的ですが、あまりエレガントではありません(将来のアップグレードで問題が発生する可能性があります)。
# aptitude hold nginx-full
# echo "nginx-full" hold |dpkg --set-selections
チャットで、OPはパッケージをdpkg --install
でインストールしたと述べました。さらに、IIRC、APTは、次の方法で優先するパッケージを解析します。
/etc/apt/sources.list
にリストされているリポジトリのパッケージを優先してください。sources.list
の最初に来るリポジトリのパッケージを優先してください。この情報があれば、ステップ4でAPTがローカルにインストールされたバージョンではなくリポジトリバージョンを選択していると推測できます。したがって、この問題を解決するには4つの方法があります。
debian/control
ファイル (またはその他のフィールド)を変更する点が異なります。それ以外の場合は、パッケージの生成に使用しています)。sources.list
に追加するときに、公式のDebianリポジトリの前に来るようにします。これにより、ステップ5で選択がトリガーされます。これを行うには、 このDebian Wikiページ を参照してください。より簡単なチュートリアルスタイルのリファレンスが必要な場合は、 このUbuntuの質問をする にも興味があるかもしれません。