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

Dr.*_*SMS 2 debian apt upgrade backports

并祝大家新年快乐..

最近我从 debian backport 源构建了 nginx deb 包 v1.4.4,当然我已经将它添加到 apt sources.list 并且一切顺利。

我已经跑apt-get update那么apt-get -V upgrade今天检查的debian如何贴切7会表现得..这是我得到了什么:

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]?
Run Code Online (Sandbox Code Playgroud)

如您所见,apt 正在尝试从(1.4.4-1~bpo70+1 => 1.4.4-1~bpo70+1)升级,这基本上是两个相同的版本,但我安装的 deb 包添加了自定义的 nginx 模块默认为 nginx-full,更新后,我的自定义模块都消失了,取而代之的是标准的 debian wheezy backport 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
Run Code Online (Sandbox Code Playgroud)

以下是 nginx 的 apt-cache 策略:

/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
Run Code Online (Sandbox Code Playgroud)

但仍然 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
Run Code Online (Sandbox Code Playgroud)

我试过一次 apt 固定包名 'nginx' 和另一次使用 nginx-full ..

但是两个都拿不住包裹!!!

Tot*_*tor 6

为了避免出现问题,首先,我会建议你使用自定义(或以上)的版本号为您定制包,例如: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 $?
Run Code Online (Sandbox Code Playgroud)

请小心,因为如果在在线存储库中找到更高版本,您的自定义包仍将升级。然后,我建议您使用固定来避免这种情况(请参阅参考资料man apt_preferences)。

您可以通过创建一个/etc/apt/preferences.d/nginx-full包含以下内容的文件来尝试此操作:

Package: nginx-full
Pin: version 1.4.4-1~bpo70+1-mrsms
Pin-Priority: 1001
Run Code Online (Sandbox Code Playgroud)

您还可以将软件包保持当前安装状态,这非常有效,但不是很优雅(可能会在以后的升级中遇到麻烦):

# aptitude hold nginx-full
# echo "nginx-full" hold |dpkg --set-selections
Run Code Online (Sandbox Code Playgroud)