Debian

Debian 7 apt 正在使用“官方”相同版本升級我的自定義反向移植包!

  • January 5, 2014

祝大家新年快樂..

最近我從 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

引用自:https://unix.stackexchange.com/questions/107248