假设你正在运行一个服务器,并且你不想从Stable(Lenny)升级到Testing(Squeeze)来安装一个或两个必需的软件包。
从testing中只安装某些软件包的最佳方法是什么?
很多人似乎都害怕混合稳定和testing,但坦率地说,testing本身是相当稳定的,如果有适当的select和解决scheme检查,你可以避免“稳定性漂移”,使你的核心软件包走上不稳定的道路。
“testing是相当稳定的? , 你问。 是。 为了使软件包从不稳定状态迁移到testing状态,它必须连续10天没有开放的错误。 有可能是,尤其是对于更受欢迎的软件包,如果出了什么问题,有人会提交一个不稳定版本的bug报告。
即使你不想混合环境,如果遇到需要更新版本而不是稳定版本的东西,还是有很好的select。
以下是我build议的设置:
首先,在/etc/apt/preferences.d
创build以下文件:
security.pref
:
Package: * Pin: release l=Debian-Security Pin-Priority: 1000
stable.pref
:
Package: * Pin: release a=stable Pin-Priority: 900
testing.pref
:
Package: * Pin: release a=testing Pin-Priority: 750
unstable.pref
:
Package: * Pin: release a=unstable Pin-Priority: 50
experimental.pref
:
Package: * Pin: release a=experimental Pin-Priority: 1
(不要害怕这里的不稳定/实验性的东西,它们的优先级足够低,以至于不会自动安装任何东西,即使testing分支也会运行,因为它只会安装你想要的软件包在testing中)。
现在,为/etc/apt/sources.list.d
创build一个匹配集:
security.list
:
deb http://security.debian.org/ stable/updates main contrib non-free deb http://security.debian.org/ testing/updates main contrib non-free
stable.list
:
deb http://mirror.steadfast.net/debian/ stable main contrib non-free deb-src http://mirror.steadfast.net/debian/ stable main contrib non-free deb http://ftp.us.debian.org/debian/ stable main contrib non-free deb-src http://ftp.us.debian.org/debian/ stable main contrib non-free
testing.list
:与stable.list
相同,除了testing
。
unstable.list
:与stable.list
相同,但unstable
。
experimental.list
:与stable.list
相同,除了experimental
。
你可以用你想要的任何东西来代替steadfast.net镜像。 我build议使用netselect-apt
来找出最快的镜像,并将其用于首选。 ftp.us.debian.org
可以用作备份。 使用stable
, testing
, unstable
等术语,而不是squeeze
, wheezy
, sid
等,这一点也很重要,因为stable
是一个移动的目标,当它升级到最新的稳定,apt / aptitude将图自动出来。
您还可以在sources.lists.d
和preferences.d
(使用1的优先级)中添加一个oldstable
,尽pipe这个名字在下一个稳定周期之前会趋于失效。 在这种情况下,您可以使用http://archive.debian.org/debian/
和“硬编码”Debian版本(etch,lenny等)。
要安装软件包的testing版本,只需使用aptitude install lib-foobar-package/testing
或者直接跳入aptitude的GUI并select软件包详细信息(点击正在查看的软件包中的回车)。
如果您收到包裹冲突的投诉,请首先查看解决scheme。 在大多数情况下,第一个将是“不要安装此版本”。 学习使用每个包接受/拒绝parsing器的select。 例如,如果您正在安装foobar-package / testing,并且第一个解决scheme是“不要安装foobar-package / testing”,那么将该选项标记为“拒绝”,其他解决scheme将不会再次转到该path。 在这样的情况下,你可能需要安装一些其他的testing包。
如果它变得太多了(比如试图升级libc或者内核或者其他巨大的核心系统),那么你可以拒绝这些升级path,或者完全退出最初的升级。 请记住,只有在允许的情况下才会升级到testing/不稳定。
在/etc/apt/apt.conf.d
添加以下文件
99defaultrelease
:
APT::Default-Release "stable";
在/etc/apt/sources.list.d
– 为testing/不稳定的来源添加url
stable.list
:
deb http://ftp.de.debian.org/debian/ stable main contrib non-free deb-src http://ftp.de.debian.org/debian/ stable main contrib non-free deb http://security.debian.org/ stable/updates main contrib non-free
testing.list
:
deb http://ftp.de.debian.org/debian/ testing main contrib non-free deb-src http://ftp.de.debian.org/debian/ testing main contrib non-free deb http://security.debian.org/ testing/updates main contrib non-free
跑
apt-get update
然后安装你需要的东西
apt-get -t testing install something
如果你安装的东西有很多的依赖,要非常小心。 最好不要在生产上这样做。
你也可以在backports或类似的仓库中试试你的运气。
apt_preferences
在/ etc / apt / preferences文件中定义系统应该安全升级到的默认级别:
man apt_preferences
有很多你可以用apt_preferences做,但为了简单起见…
我需要安装一个只在Testing中可用的包(autoMysqlBackup)。 解决方法是将以下内容添加到/ etc / apt / preferences中:
Explanation: Uninstall or do not install any Debian-originated Explanation: package versions other than those in the stable distro Package: * Pin: release a=stable Pin-Priority: 900 Package: * Pin: release o=Debian Pin-Priority: -10
将多个存储库添加到/etc/apt/sources.list中后,即使列出了以后的版本库(本例中为“stable”),aptitude现在也只能升级到指定的版本。
deb http://mirror.aarnet.edu.au/debian/ lenny main deb-src http://mirror.aarnet.edu.au/debian/ lenny main deb http://mirror.aarnet.edu.au/debian/ squeeze main deb-src http://mirror.aarnet.edu.au/debian/ squeeze main
所以要安装这个包,你所要做的就是:
$ aptitude install -t testing packageName
debian文档在这个主题中是非常广泛的,我强烈build议深入研究,因为它会真正揭示debian系统的优点。
看看如何保持混合系统 ,它会解释所有你需要知道的。
对于它的价值,我一直看到的一般build议是“不要混合任何东西”。 大多数混合系统教程是用于混合testing和不稳定的。
理由似乎是,如果你将stable和testing混合在一起,那么非常基本的包(比如libc6)将需要更新(为了从testing中安装软件),一旦这些基本包被移动到testing中,整个系统就会漂移。
这里有两个select:
另一种方法是,可以防止从Testing或Sid安装太多的依赖,是这样的:你告诉apt-get从Testing或Sid获取软件包的源代码,并使用Debian工具为你的系统创build一个软件包(不需要手动修改与来源)。
从这里引用:
https://wiki.debian.org/DebianUnstable#How_do_I_backport_a_sid_package_to_testing_or_stable.3F
如何将sid软件包恢复到testing或稳定状态?
安装Debian源代码(以及开发工具,特别是debhelper,devscripts和build-essential),然后构build这个包。
一步步:
add a deb-src line for sid to your sources.list apt-get update apt-get build-dep PACKAGE_NAME apt-get -b source PACKAGE_NAME
得到的debs应该在当前目录下,并且可以用dpkg -i the.deb来安装。
我已经做了很长一段时间,有足够的信心说这是安全的,可以方便的。 以下设置稳定版本将默认安装,但是,如果需要,Aptitude也将允许您selectbackported或unstable版本:
有四个需要编辑的东西,需要设置默认的钉住释放,源需要backports和不稳定的添加,降低了backports / unstable包的钉扎优先级,并且需要修改aptitude显示设置以显示钉扎。
Apt :: default-Release“stable”;
#deb cdrom:[Debian GNU / Linux 6.0.0 _Squeeze_ - 官方多架构amd64 / i386 NETINST#1 20110205-14:45] / squeeze main deb http://ftp.us.debian.org/debian/ squeeze main deb-src http://ftp.us.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze /更新主要 deb-src http://security.debian.org/ squeeze / updates main #squeeze-update,以前称为'volatile' deb http://ftp.us.debian.org/debian/ squeeze-updates main deb-src http://ftp.us.debian.org/debian/ squeeze-updates main #挤压backports #http://backports.debian.org/Instructions/ deb http://backports.debian.org/debian-backports squeeze-backports main #不稳定 #http://wiki.debian.org/AptPreferences deb http://ftp.us.debian.org/debian/ unstable main deb-src http://ftp.us.debian.org/debian/ unstable main #非免费前 太阳Java #deb http://ftp.us.debian.org/debian/挤压非免费的 #deb-src http://ftp.us.debian.org/debian/ squeeze non-free
etc/apt/preferences
pinning文件 – 如果文件不存在,请创build它。 #封装固定优先级 #请参阅http://wiki.debian.org/AptPreferences和http://manpages.debian.net/cgi-bin/man.cgi?query=apt_preferences # #在坚果shell最高的PIN被安装 # PING默认是除了我们的设置之外还有以下内容: #990 - 对于没有安装但是属于我们的`APT :: Default-Relase“stable”`设置的版本。 #500 - 对于未安装且不属于目标版本的版本 #100 - 对于已安装的软件包,这也意味着其他版本的相同软件包 #1 - 为实验包; 包含“NotAutomatic:是” # #我们的Pinnings #400 - 无需更新其他软件包即可安全安装的backports #50 - 不稳定的软件包,在详细信息屏幕上强制安装,可能会导致冲突 包:* Pin:释放n =挤压backports Pin-Priority:400 包:* Pin:释放a =不稳定
Aptitude :: UI :: Package-Display-Format“%c%a%M%p%Z%v%V%i”;
如果您select的软件包涉及更多,或者安装将在多台机器上重复,则可以考虑设置一个专用存储库,以反映官方存储库的一个子集。 这需要一些工作来configuration存储库,但奖励很容易维护,在每个客户端上configuration最less的configuration,并在做几十次安装时可重复的结果。 即使只安装一个或两个软件包,我也会发现这很有用,并使用此方法进行自动化和维护云安装。 一个便宜的VPS上的单个服务器可以处理数十个私人存储库。
configuration您的私有存储库服务器:
# Install aptly. apt-get install aptly # Create local mirror (choose a source mirror near you). aptly mirror create -filter="mirror-contains-no-packages" stretch-roundcube http://httpredir.debian.org/debian stretch main # Configure filters for local mirror. aptly mirror edit -filter="Name (% roundcube*)" stretch-roundcube # Update local mirror. aptly mirror update stretch-roundcube # Drop previously published repositories and mirrors, if running these commands in a script. aptly publish drop stretch # Drop snapshot, if running these commands in a script. aptly snapshot drop stretch-roundcube # Create new snapshot. aptly snapshot create stretch-roundcube from mirror stretch-roundcube # Publish snapshot. aptly publish snapshot -architectures=i386,amd64 -distribution=stretch -component=roundcube -label="Your Name" -origin="Your Name" stretch-roundcube
然后configuration您select的Web服务器来提供静态存储库文件。 可能使用安全证书和基本身份validation来保护存储库。
要自动维护您的私有存储库并从上游获取更新,请将上述内容放在脚本中并从cron作业运行。
要在您的客户端计算机上configuration客户端计算机:
# Configure private repository without authentication. echo 'deb http://private.repository.example.com/ stretch roundcube' > /etc/apt/sources.list.d/private.repository.example.com.list # Configure private repository with authentication. echo 'deb https://hostname:[email protected]/ stretch roundcube' > /etc/apt/sources.list.d/private.repository.example.com.list apt-get install apt-transport-https # Update. apt-get update # Install package. apt-get install roundcube
要维护客户端计算机并在您的客户端计算机上引入所有私有存储库更新,请执行以下操作:
# Update. apt-get update # Upgrade. apt-get upgrade