假设您正在运行服务器,并且不想从Stable(Lenny)升级到Testing(Squeeze)以仅安装所需的一两个软件包。

仅安装某些软件包的最佳方法是什么?测试包?

评论

这就是最新的官方文档所说的:来自混合归档源的软件包。

#1 楼

许多人似乎害怕将稳定与测试混为一谈,但是坦率地说,测试本身是相当稳定的,并且通过适当的首选项和解决方案检查,您可以避免将核心程序包置于不稳定路径上的“稳定性漂移”。

您问:“测试相当稳定?”。是。为了使程序包从不稳定状态迁移到测试状态,它必须连续10天保持零个打开的错误。很有可能,特别是对于比较流行的软件包,如果出现问题,有人会针对不稳定的版本提交错误报告。

即使您不想混合使用环境,它仍然会如果您遇到需要比稳定版本更高的版本的东西,很高兴在那里有选择。

这是我推荐的设置方法:

首先,在/etc/apt/preferences.d中创建以下文件:

stable.pref

# 500 <= P < 990: causes a version to be installed unless there is a
# version available belonging to the target release or the installed
# version is more recent

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


testing.pref

# 100 <= P < 500: causes a version to be installed unless there is a
# version available belonging to some other distribution or the installed
# version is more recent

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


unstable.pref

# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package

Package: *
Pin: release a=unstable
Pin-Priority: 50


experimental.pref

# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package

Package: *
Pin: release a=experimental
Pin-Priority: 1


(不要担心这里不稳定/实验性的东西。优先级很低,因此它永远不会自动安装任何东西。甚至测试分支将正常运行,因为它只会安装要测试的软件包。)

现在,为/etc/apt/sources.list.d创建匹配集:

stable.list:复制从您的原始/etc/apt/sources.list中。将旧文件重命名为sources.list.orig

testing.list:与stable.list相同,除了testing

unstable.list:与stable.list相同,除了unstable,并删除安全列表。

experimental.list:与unstable.list相同,但experimental除外。

您也可以在oldstablesources.lists.d中添加preferences.d(使用优先级1),尽管该名称会在下一个稳定周期之前到期并消失。在这种情况下,您可以使用http://archive.debian.org/debian/和“硬编码” Debian版本(蚀刻,lenny等)。

要安装软件包的测试版本,只需使用aptitude install lib-foobar-package/testing,或者直接跳入aptitude的GUI并在软件包详细信息中选择版本(请在要查看的软件包上按Enter)。

如果您收到有关软件包冲突的投诉,请首先查看解决方案。在大多数情况下,第一个将是“不要安装此版本”。了解如何使用每包接受/拒绝解析器选择。例如,如果要安装foobar-package / testing,而第一个解决方案是“不要安装foobar-package / testing”,则将该选项标记为已拒绝,其他解决方案将永远不会转向该路径。在这种情况下,您可能必须安装其他一些测试软件包。

如果它变得过于繁琐(例如正在尝试升级libc或内核或其他大型内核系统),则您可以拒绝这些升级路径,也可以完全退出初始升级。请记住,如果您允许,它只会将内容升级到测试/不稳定。

编辑:修复了一些优先级引脚,并更新了列表。

评论


创建配置文件后是否运行apt-get update?

–流程
13年4月30日在16:04

使用此方法时,我得到(在我看来是)不一致的行为。 “ apt-get install -t测试appX”与“ apt-get install appX / testing”的功能不同(请参阅serverfault.com/q/646934/132528)-我猜测这只是此方法的方式导致优先级得到解决,即使这对我来说并不直观?

–eugenevd
2014-12-8 11:45



重要提示:作者为稳定/安全性选择的固定首选项值高于“默认发行版”值...有关更多信息,请参阅serverfault.com/a/653552/120130。

– Alex Ryan
16年1月15日在1:52

这个答案打破了我的系统。尝试执行sudo apt-get更新后,出现更新错误。然后重新启动,这给了我Xsession错误,再次重新启动,现在我没有GUI。 / dev / sda1 /现在已满。大。

–luchonacho
16年11月6日在13:03

我将建议人们注意这篇文章的负面评论。我刚刚在最近的Debian 9更新中对此有所了解,已通过还原这些更改进行了更正。请留意Debian文章中有关此问题的建议:wiki.debian.org/DontBreakDebian(滚动至不制作FrankenDebian)

–布兰登·阿诺德(Brandon Arnold)
17年6月18日在18:54

#2 楼

/etc/apt/apt.conf.d中添加以下文件

99defaultrelease

APT::Default-Release "stable";


/etc/apt/sources.list.d中-添加用于测试的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


安装所需的东西,如果您要安装具有很多依赖性的东西,请非常小心。最好不要在生产中执行此操作。

您也可以在反向端口或类似的存储库中尝试运气。

评论


哇。那很快。我发帖是为了分享我刚遇到的信息!好一个!

–加雷斯
09年9月9日在8:05

我以前从未真正使用过apt.conf方法。首选项文件方法似乎更简单,但控制起来却不太精确。 -小屋

–勺子
09年9月9日在8:37

答案需要升级;现在,压缩变得稳定,而lenny变得不稳定,此配置将彻底破坏一切。

– El Yobo
2011-2-15的3:05

不再可用,请更新

–乐透
2012年1月3日上午10:53

在较新的debian版本中,没有apt.conf文件,而是编辑/etc/apt/apt.conf.d/70debconf

– Hayden Thring
13年3月22日在7:35

#3 楼

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 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 


评论


这也是一个好方法,不如apt.conf那样简单,但是可以让您以相对的方式控制所有不同的源。

–勺子
09年9月9日在8:39

这对于任务来说太复杂了...使用APT :: Default-Release确实会将发行版的引脚优先级设置为990(类似于您将其设置为900的方式),而实际上不需要负的引脚。 。在dist升级过程中,稳定软件包始终具有优先级,一旦您在命令行上明确列出了某些内容,其负固定优先级就会被忽略。

–拉斐尔·赫尔佐格(RaphaëlHertzog)
09年9月9日在9:54

我不确定如何回复@Raphael。这似乎是一种非常优雅的处事方式。几年前,我曾经使用过apt pin,但是我从来没有真正“弄懂”它。我上面使用的示例直接来自apt_preferences手册页。

–加雷斯
09年9月9日在10:27

确认这在挤压时能正常工作

–煽风点火
2012年3月7日,11:48

@Lothar:它在Debian 6上确实起作用。仅仅因为文件不存在并不意味着它就不起作用。只需创建文件并添加设置即可。从手册页中引用:“如果没有首选项文件或文件中没有适用于特定版本的条目,则分配给该版本的优先级就是该版本所属发行版的优先级。”

–rzetterberg
2012年10月15日12:11



#4 楼

对于它的价值,我一直看到的一般建议是“不要将稳定与任何东西混合在一起”。大多数混合系统教程都是针对混合测试和不稳定的。

原因似乎是,如果将稳定与测试混合使用,那么非常基本的软件包(如libc6)将需要更新(以便安装软件)。 (从测试开始),一旦这些基本程序包进入测试阶段,整个系统就会以这种方式漂移。

有两种选择:


使用Backports。
从测试安装源代码行,并尝试从源代码构建想要的更高版本。


评论


我同意。我只是尝试从测试中更新libdvdread4,因为wheezy / stable中的版本存在错误。它想引入最新的libc。因此,我只是从稳定中获取libdvdread4的源包,并用1行源代码更改对其进行了修补,然后重新构建了它。比从测试中提取各种软件包更好。现在所有程序包仍然是“稳定的”程序包,而我只需要更改1行即可。

– drant
2013年9月12日下午16:58

#5 楼

Debian文档涵盖了该主题,我强烈建议您深入研究它,因为它将真正揭示Debian系统的美丽。

看看如何保持混合系统,它将解释所有问题。你需要知道。

评论


这似乎与@pQd答案中使用的方法相同,因此不适用于debian> = 6.0。另外,链接标题现在显示“过时的文档”。也大多只链接答案。

–需求
2014年4月12日上午9:08

@dequis正确之处在于该链接似乎已过时,但我只是按照Debian 8(测试)上的说明进行操作,以安装来自不稳定的软件包,并且一切似乎都可以正常工作。任何人都有最新的文档链接吗?

–domsson
16 Dec 28'在15:36

这可能就是您要查找的内容:debian.org/doc/manuals/debian-reference/…

–tomdeb
17年1月22日在19:46



#6 楼

另一种方法可以防止安装来自Testing或Sid的过多依赖关系,这是:您告诉apt-get从Testing或Sid获取软件包的来源,并使用Debian工具为系统创建软件包(无需手动修补)来源)。

从这里引用:https://wiki.debian.org/DebianUnstable#How_do_I_backport_a_sid_package_to_testing_or_stable.3F



如何将sid包反向移植到测试或稳定版?

安装Debian源代码(以及开发工具,尤其是
debhelper,devscripts和build-essential),然后构建
软件包。

逐步:

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 


产生的deb应该在当前目录中,并且可以
用dpkg -i the.deb安装。


#7 楼

我已经做了很长时间了,可以自信地说它足够安全并且可以方便使用。在以下设置中,默认情况下将安装稳定版本,但是,如果需要,Aptitude还可以让您选择向后移植或不稳定的版本:



有四件事需要要进行编辑,需要设置默认的锁定释放,需要添加源和反向源,并降低源的反向优先级/不稳定包的优先级,并且需要修改aptitude显示设置以显示锁定。


创建一个'/etc/apt/apt.conf.d/10defaultrelease'并使其内容如下:

Apt::default-Release "stable";



编辑您的'/etc/apt/sources.list'以添加不稳定的源和向后移植的源,这样看起来像这样:

# deb cdrom:[Debian GNU/Linux 6.0.0 _Squeeze_ - Official Multi-architecture 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/updates main
deb-src http://security.debian.org/ squeeze/updates main

# squeeze-update, previously know as 'volatile'
deb http://ftp.us.debian.org/debian/ squeeze-updates main
deb-src http://ftp.us.debian.org/debian/ squeeze-updates main

# squeeze backports
# http://backports.debian.org/Instructions/
deb http://backports.debian.org/debian-backports squeeze-backports main

# unstable
# http://wiki.debian.org/AptPreferences
deb http://ftp.us.debian.org/debian/ unstable main
deb-src http://ftp.us.debian.org/debian/ unstable main

# non free ex. sun java
#deb http://ftp.us.debian.org/debian/ squeeze non-free
#deb-src http://ftp.us.debian.org/debian/ squeeze non-free



编辑etc/apt/preferences固定文件-如果文件不存在,请创建它。

# Package pinning priorities
# See http://wiki.debian.org/AptPreferences and http://manpages.debian.net/cgi-bin/man.cgi?query=apt_preferences
#
# In nut shell highest PIN gets installed
#
# Pining default are as follow which are in addition to our settings:
#   990 - for version that are not installed but DO belong to our `APT::Default-Relase "stable"` setting.
#   500 - for versions that are not installed and do not belong to the target release
#   100 - for packages that already installed, this also means other versions of same package
#     1 - for experimental packages; packages with "NotAutomatic: yes"
#
# Our Pinnings
#   400 - backports that can safely be installed without the need to update other packages
#    50 - unstable packages, install forced in the details screen, can result in conflicts

Package: *
Pin: release n=squeeze-backports
Pin-Priority: 400

Package: *
Pin: release a=unstable



创建'/etc/apt/apt.conf.d/100guiconf'并设置Aptitude,以便显示固定信息。

Aptitude::UI::Package-Display-Format "%c%a%M %p %Z %v %V %i";


评论


除了上面的更新之外,我还决定运行“测试”开发存储库中的所有系统软件包。因此,在source.list中应该说代码名称jessie而不是挤压。 Debian的策略测试接近稳定,软件包几乎与不稳定存储库中的软件包一样新。我的空间不足,因此请看一下:wiki.debian.org/DebianReleases,wiki.debian.org/StableUpdates和wiki.debian.org/StableProposedUpdates;最后两个是其他存储库源。

–丹尼尔·索科洛夫斯基
13年8月8日在13:20

#8 楼

如果您选择的软件包更多,或者将在多台计算机上重复安装,则可以考虑设置一个私有存储库,该存储库可镜像一部分正式存储库。这需要一些工作来配置存储库,但是通过在每个客户端上进行最少的配置和在进行数十次安装时获得可重复的结果,即可轻松维护回报。即使仅安装一个或两个软件包,我也认为这很有用,并使用此方法来自动化和维护云安装。廉价VPS上的单个服务器可以处理数十个私有存储库。

要配置私有存储库服务器:

# 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


然后配置您的网站选择服务静态存储库文件的服务器。可以通过安全证书和基本身份验证来保护存储库。

要自动维护私有存储库并从上游获取更新,请将以上内容放入脚本中并从cron作业运行。

要在客户端计算机上配置客户端计算机,请执行以下操作:

# 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:password@private.repository.example.com/ 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


#9 楼

为了避免混淆稳定/测试/实验,我要做的是在我的Debian稳定系统上的目录中使用debootstrap安装Debian Sid,然后可以使用所需的工具。在此示例中,我需要一个最新的xmllint工具(XML处理中)。为此,我已经完成了这件事:
apt install debootstrap
mkdir /home/sid-chroot
debootstrap --arch amd64 sid /home/sid-chroot http://mirrors.ircam.fr/pub/debian/
chroot /home/sid-chroot
apt install libxml2-utils

现在,我可以退出chroot并使用lib在特定的动态加载库中“入侵” LD_LIBRARY_PATH。在~/.bashrc中: (2019年和2016年版本)。

我可以轻松安装任何其他软件包
不死猫,不混用测试/实验性物品而使我的桌面崩溃的风险
我通过安全更新使Debian稳定系统保持最新状态
我使系统在很多人中得到广泛使用(与xmllint不同),这样,随机软件仍然具有足够的兼容性

缺点:

在系统上需要410MB(我不在乎)
它需要在libxml2-utils中使用别名



#10 楼

另一种选择是从测试中下载源软件包。下载后,APT可以自动构建源程序包。这样,您的稳定软件包将不会受到测试更新的影响。唯一的权衡是,与下载和安装二进制软件包相比,这将花费更多时间。

要配置APT从测试中下载源软件包,只需添加:

deb-src http://<your debian mirror here> testing main


如果您只想遵循当前的测试而不是将来的测试,请用当前的代号替换“ testing”(在撰写本文时为“ buster”)

评论


您能详细说明一下APT在下载后可以自动构建源软件包吗?

–吉尔斯·奎诺(Gilles Quenot)
7月22日,1:15