题 如何运行Debian稳定但是从测试中安装一些软件包?


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

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


180
2018-06-09 07:53




这是最新的官方文档所说的: 来自混合档案馆的包裹。 - Alexey


答案:


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

“测试相当稳定吗?”, 你问。是。为了使包从不稳定迁移到测试,它必须连续10天没有开放错误。有可能,特别是对于更受欢迎的软件包,如果出现问题,有人会提交针对不稳定版本的错误报告。

即使你不想混合环境,如果你遇到一些需要比稳定版本更新版本的东西,那么选择那里也是很好的。

以下是我建议设置的内容:

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

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

(不要害怕这里的不稳定/实验性的东西。优先级足够低,它永远不会自动安装任何东西。甚至测试分支也会表现,因为它只会安装你想要的软件包在测试中。)

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

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镜像。我建议使用 netselect-apt 找出最快的镜子,并将其作为您的首选。该 ftp.us.debian.org 可以用作备份。使用这些术语也很重要 stabletestingunstable等等,而不是 squeezewheezysid等等,自此 stable 是一个移动的目标,当升级到最新的稳定时,apt / aptitude将自动计算出来。

你也可以添加一个 oldstable 在 sources.lists.d 和 preferences.d (使用优先级1),虽然这个名字会在下一个稳定周期之前趋于过期并消失。在这种情况下,你可以使用 http://archive.debian.org/debian/ 和“硬编码”Debian版本(蚀刻,lenny等)。

要安装软件包的测试版本,只需使用 aptitude install lib-foobar-package/testing,或者只是跳转到aptitude的GUI并选择包装内容的详细信息(点击你正在查看的包装上的输入)。

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

如果它变得太毛茸茸(就像它试图升级libc或内核或其他一些巨大的核心系统一样),那么你可以拒绝这些升级路径,或者只是退出初始升级。请记住,如果允许的话,它只会将内容升级为测试/不稳定。


166
2018-04-23 02:38



谢谢,使用这种方法,一切都像我期望的那样工作! - Brad F Jacobs
我正在尝试使用它,但我根本无法解决任何依赖关系。看起来既不是apt-get,也不是aptitude会在测试回购中寻找依赖关系。有办法解决这个问题吗? - Tamás Szelei
你跑了吗? apt-get update 创建配置文件后? - Flow
重要提示:作者为稳定/安全性选择了固定优先级值 更高 比默认发布值...请参阅 serverfault.com/a/653552/120130 了解更多信息 - Alex Ryan
这个答案刚刚破坏了我的系统。试图做之后 sudo apt-get update,我收到更新错误。然后重新启动,这给了我 Xsession error,重新开始,现在我没有gui。该 /dev/sda1/ 现在已经满了。大。 - luchonacho


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

99defaultrelease

APT::Default-Release "stable";

/etc/apt/sources.list.d  - 添加测试/不稳定来源的网址

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

如果安装具有大量依赖性的东西,请非常小心。最好不要在生产中这样做。

你也可以试试运气吧 反向移植 或类似的存储库。


90
2018-06-09 07:57



哇。那很快。我发帖是为了分享我刚刚遇到的信息!好一个! - Gareth
我之前从未真正使用过apt.conf方法。使用首选项文件方法似乎更简单,但是对您的控制不太精确。 - Coops - Coops
答案需要升级;由于挤压变得稳定而且lenny变得陈旧,所以这个配置会完全破坏。 - El Yobo
不再可用了,请更新 - Lothar
在较新的debian版本中没有apt.conf文件,而是编辑/etc/apt/apt.conf.d/70debconf - Hayden Thring


apt_preferences

在/ etc / apt / preferences文件中定义系统应“安全升级”的默认级别:
男人apt_preferences

apt_preferences可以做很多事情,但为了简单起见......

我需要安装一个仅在测试中可用的软件包(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现在只会升级到您指定的版本,即使列出了后续版本的存储库(在本例中为“stable”)。

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 

46
2018-06-09 08:04



这也是一个很好的方法,不像apt.conf那么简单,但是让你以相对的方式控制所有不同的源。 - Coops
这对于任务来说太复杂了......使用APT :: Default-Release确实将发布的引脚优先级设置为990(类似于将其设置为900的方式),并且实际上并不需要其余的负引脚。在dist-upgrades期间,稳定包具有优先级,只要你在命令行上明确列出一些东西,它的负固定优先级将被忽略。 - Raphaël Hertzog
我不知道如何回复你@Raphael。这似乎是一种非常优雅的做事方式。我在几年前就已经习惯了钉扎,但我从来没有真正“掌握”它。我上面使用的示例直接来自apt_preferences手册页。 - Gareth
确认这在挤压时工作正常 - tomfanning
@Lothar:它确实可以在Debian 6上运行。仅仅因为该文件不存在并不意味着它不起作用。只需创建文件并添加设置即可。从手册页引用:“如果没有首选项文件或文件中没有适用于特定版本的条目,则分配给该版本的优先级是该版本所属的分发的优先级。” - rzetterberg


debian文档在这个主题中很广泛,我强烈建议深入研究,因为它将真正揭示debian系统的美。

看一下 如何保持混合系统,它将解释您需要知道的所有内容。


12
2018-06-09 08:24



这似乎与@pQd在答案中使用的方法相同,因此它不适用于debian> = 6.0。链接标题现在也说“过时的文档”。也大部分链接只回答。 - dequis
虽然@dequis是正确的,因为链接似乎已经过时了,我只是按照Debian 8(测试)上的说明安装了一个来自unstable的软件包,而且一切看起来都很完美。任何人都有最新的文档链接? - domsson
这可能是您正在寻找的:debian.org/doc/manuals/debian-reference/... - tomdeb


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

理由似乎是,如果你将稳定与测试混合,非常基本的软件包(如libc6)将需要更新(为了从测试中安装软件),一旦这些基本软件包转移到测试,整个系统就会漂移。

以下是两种选择:

  1. 使用 反向移植
  2. 从测试中安装源代码行,并尝试 从源代码构建您想要的更高版本

10
2018-06-09 13:09



我同意。我刚刚尝试从测试中更新libdvdread4,因为wheezy / stable中的版本存在错误。它想要引入最新的libc。所以我只是从stable获取了libdvdread4的源包,并用1行源更改修补它并重建它。比从测试中提取所有类型的包更好。现在所有的包仍然是“稳定的”,我只需要我需要的1行更改。 - dgrant


另一种可能阻止从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
2018-03-13 17:02





我已经做了很长一段时间,有信心说它足够安全并且可以方便。使用以下设置默认情况下会安装稳定版本,但是如果需要,Aptitude还允许您选择backported或unstable版本:

enter image description here

有四件事需要编辑,需要设置默认的固定版本,源需要后退和不稳定的添加,降低后端/不稳定包的固定优先级,并且需要修改aptitude显示设置以显示固定。

  • 创建一个 '/etc/apt/apt.conf.d/10defaultrelease' 并使其内容如下:
Apt :: default-发布“稳定”;
  • 编辑你的 '的/etc/apt/sources.list' 添加不稳定和反向移植源,使它看起来像这样:
#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 / updates main
deb-src http://security.debian.org/ squeeze / updates main

#queeze-update,以前称为'volatile'
deb http://ftp.us.debian.org/debian/ squeeze-updates main
deb-src http://ftp.us.debian.org/debian/ squeeze-updates main

#挤压后退
#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

#non free ex。太阳java
#deb http://ftp.us.debian.org/debian/挤压非自由
#deb-src http://ftp.us.debian.org/debian/挤压非自由
  • 编辑 etc/apt/preferences 固定文件 - 如果文件不存在,请创建它。
#包装固定优先级
#参见http://wiki.debian.org/AptPreferences和http://manpages.debian.net/cgi-bin/man.cgi?query=apt_preferences
#
#在坚果壳中安装最高PIN
#
#Pining默认如下:除了我们的设置:
#990  - 对于未安装但DO属于我们的`APT :: Default-Relase“稳定”设置的版本。
#500  - 对于未安装且不属于目标版本的版本
#100  - 对于已安装的软件包,这也意味着同一软件包的其他版本
#1  - 用于实验包;包含“NotAutomatic:yes”的包
#
#我们的Pinnings
#400  - 无需更新其他软件包即可安全安装的移植端口
#50  - 不稳定的软件包,在详细信息屏幕中强制安装,可能会导致冲突

套餐:*
Pin:释放n =挤压后退
引脚优先:400

套餐:*
针:释放a =不稳定
  • 创建 '/etc/apt/apt.conf.d/100guiconf' 并设置Aptitude,以便显示固定信息。
Aptitude :: UI ::包显示格式“%c%a%M%p%Z%v%V%i”;

4
2018-02-04 22:59



只是一个更新,除了上面我已经决定从'测试'开发存储库运行我的所有系统包。所以 source.list 它应该说代码名称 jessie 代替 squeeze。 Debian的政策 testing 接近稳定,包裹几乎和新的一样新 unstable 库。我的空间太空了所以请看看: wiki.debian.org/DebianReleases, wiki.debian.org/StableUpdates,和 wiki.debian.org/StableProposedUpdates;最后两个是其他存储库源。 - Daniel Sokolowski


如果您更多地选择了包,或者在多台计算机上重复安装,则可以考虑设置一个镜像官方存储库子集的私有存储库。这需要一些工作来配置存储库,但是在每个客户端上只需最少的配置就可以轻松维护,并且在进行数十次安装时可以获得可重复的结果。即使只安装了一个或两个软件包,我也觉得这很有用,并且使用这种方法来自动化和维护云安装。便宜的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

然后配置您选择的Web服务器以提供静态存储库文件。可能使用安全证书和基本身份验证来保护存储库。

要自动维护您的私有存储库并从上游获取更新,请将上述内容放在脚本中并从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

2
2017-07-06 18:53





另一个选择是从测试中下载源包。 APT可以在下载后自动构建源包。这样,您的稳定包不会受到测试更新的影响。唯一的权衡是,下载和安装二进制包需要更多的时间。

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

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

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


0
2018-02-16 03:15