Debian 7 apt 正在使用“官方”相同版本升級我的自定義反向移植包!
祝大家新年快樂..
最近我從 debian backport 源建構了 nginx deb 包 v1.4.4,當然我已經將它添加到了 apt sources.list 中,事情進展順利。
我今天跑來檢查 debian 7 apt 的行為..這
apt-get update
就是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)**升級,這基本上是兩個相同的版本,但我安裝的 deb 包添加了自定義 nginx 模組到預設的 nginx-full 並且在更新之後,我的自定義模組全部消失並被標準的 debian wheezy backport deb 取代。我已經從 debian backport 源建構了我的 nginx backport deb 包,並通過 backport 安裝了 build-deb但是我從詳細輸出中看到的穩定版自動安裝了一些依賴項。
你能幫我舉個例子來防止這種情況嗎?我聽說過固定,但它是我問題的答案嗎?
更新
我試圖固定封裝但沒有用,這是我得到的輸出:
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 固定一次。
但是兩個都拿不到包裹!!!
為避免出現問題,首先,我建議您為自定義包使用自定義(和更高)版本號,例如:
1.4.4-1~bpo70+1-mrsms
. 這只是公平的,因為您的軟體包與“官方”反向移植的版本不同。debian/changelog
您可以在建構之前從文件中更改版本號。您可以測試版本比較
dpkg
(這裡,gt
代表“大於”,返回碼是0
表達式是否為真):$ dpkg --compare-versions 1.4.4-1~bpo70+1-mrsms gt 1.4.4-1~bpo70+1 $ echo $?
請小心,因為如果在線上儲存庫中找到更高版本,您的自定義包仍將升級。然後,我建議您使用pinning來避免這種情況(請參閱參考資料
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