Debian跨版本软件包安装

  Debian GNU/Linux这个伟大的操作系统任何时候都提供三个版本选择:stable, testing, unstable。stable就是公开发布的的版本,软件版本比较老,但是最稳定。testing是stable的预备版,软件版本比较新,相对stable会有较多Bug。unstable是版本最新,最不稳定的一个。所以一般来说作为服务器都会选择最稳定的stable,但是有时候stable里软件的版本实在太老了。比如stable里的Nginx版本是0.6.32,而我更想要testing下的0.7.64,因为这个版本对SSL支持更好。
  基本上大家都会把 /etc/apt/source.list 文件中的stable改成testing,然后update一下就可以安装Nginx 0.7.64了。但问题是apt-get的机制是新版本优先,所以接下来的一次upgrade会看到大量的软件包需要更新,因为testing库里的版本一定会比stable更新,但是我并不想其它东西更新到testing。所以编辑一下 /etc/apt/preferences 文件,这文件可能一开始是没有的,自己建立一个就行,内容如下:

Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release a=testing
Pin-Priority: 800

  第1, 2行很好理解,就是指这个版本的所有包。关键是Pin-Priority这个值,简单来说这个值谁大,apt-get就会装谁的,而不管版本大小。然后做一下update/upgrade看看,在同时有stable和testing源的情况下也不会upgrade到testing了。然后用下面这条命令安装testing中的Nginx。

apt-get install nginx/testing

  这样Nginx更新到了testing版本而其他软件还维持在stable的版本上。不过这样设置的规则只对未安装的软件有效,具体来说如果已安装了testing的高版本软件,即使stable的Pin-Priority值高于testing,upgrade或者install时仍然会以已安装的testing版本为准,而不会安装stable中的软件。所以如果出于某种原因想upgrade(downgrade?)回一个较旧的版本(testing=>stable),或者本来是testing的,现在想搞回stable了,那就得这么干:同样修改/etc/apt/preferences

Package: *
Pin: release a=stable
Pin-Priority: 1001

  只要Pin-Priority这个值大于1000,upgrade/dist-upgrade就会被强制升到指定版本。

One Response to “Debian跨版本软件包安装”

Leave a Reply

Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).