sid/testing应该怎样日常升级?

看debian的wiki有一点犯迷糊,从stable升级到testing给予的提示是apt update && apt upgrade,但在关于testing/sid的最佳实践中又说apt dist-upgrade会升级到最新状态,另外还出现了apt full-upgrade

究竟日常该用哪个命令进行升级?在我看来,既然发行版的版本号没有变化始终都是sid或者testing,那么apt update && apt upgrade应该就是对应的升级命令,对吗?

首先要说的一点是,apt full-upgrade和apt dist-upgrade这两句命令完全是一回事,只是写法不同而已,作用都一样,都是更新系统的同时,清理掉无用的依赖软件包。
但是这两句命令,只建议在stable分支使用,testing/sid因为改动比较大,特别是sid几乎每天都有更新,大更新小更新都有。如果一碰到大更新,就是一下子好多软件包更新的情况下,去使用这两个命令,极其容易滚挂,甚至会导致桌面丢失的情况发生。因为sid每天都有更新的内容,极其容易出现依赖的问题,dist-upgrade命令有时会判断出现错误,清理掉不该清理的软件包。
如果在sid testing分支更新系统,一般建议apt update && apt upgrade,如果一定要dist-upgrade一定要看清楚他是否会提示说有一大堆软件包用不到要删掉的,如果有很多软件包一大堆都说会删除,那么最好不要去dist-upgrade。马上换成apt upgrade在回车看看还有没有提示说很多软件包要删除,没有了就可以用upgrade去更新。
总之就是dist-upgrade和upgrade要学会看情况去用。stable用dist upgrade没问题(因为stable软件依赖的大版本更新几乎没有,依赖关系很稳),但是其他分支的debian要慎用。

1 个赞

妙啊,又见面了。私以为对你来说折腾任何 Testing 或者滚动发行版, 整那些没用的版本号变化就是在浪费时间。

安装一个 Ubuntu LTS, Debian stable, openSUSE Leap 可以用三四年不需要关心系统变化。

或者 Fedora 一年升级一次,Ubuntu 常规六个月稳定升级一此。

开学时候安装的系统可以一直安心用到毕业。用旧版但是稳定的东西不影响你做出一些更重要的事情。

如果你需要新的 latex 可以直接单独安装 texlive,新的 Python 可以用 Virtualenv,浏览器之类的可以走 Flatpak/snap,Emacs 变化又不大,不需要经常升级 。Ubuntu 还可以走 PPA。

以后如果你需要用一些和科学计算的库比如说 openFOAM, CUDA, BLAS, GSL, AMPL,还有 tensorflow, VTK 之类的, 他们的安装指南上往往都是默认你在用某一个稳定发行版,而且往往是 ubuntu。如果日后要用 Matlab, Mathemtaica, SPSS 之类的商业软件,用除了 ubuntu 之外的发行版都是自找麻烦。

对于科学家/工程师来说,最好的就是 ubuntu。一个不可否认事实就是 Ubuntu 和它的分支占据了大部分 Linux 桌面的份额,大部分软件都会优先提供 Ubuntu 的支持。

不要听那些国内看不起 ubuntu 的傻逼。

对于有重要使命的人来说,开箱即用,稳定和没有时间成本是最重要的。

如果不喜欢 ubuntu 可以用他的某个分支,Linux Mint, kde neon 都是蛮不错的。

感谢回复。确实从某种程度上来说我是有些流于表面,光折腾发行版了。

其实主要对于我来说,Ubuntu LTS、Debian Stable之类最大的问题就是Emacs的版本:Emacs中我有输入中文的需求,这是由emacs-rime包提供的,而这个包的前提又是Emacs需要支持动态模块——恰恰动态模块又需要Emacs27以上版本才是默认自带的。然而,无论是Ubuntu还是Debian,官方源里的Emacs都是26.3版本。

当然我也搜索到了添加PPA的方法,但请原谅我还是有一点强迫症(被害妄想也许),不是非常喜欢这样的做法。

另外也尝试过了自己编译emacs27.1,这个做法总体上我还是觉得挺爽的,因此我也保留了一个ubuntu的WSL,用下来基本没什么问题。

当然现在看来,Debian的testing或者sid分支对我来说应该是完全可以满足需要的。其实我本身也并不是计科方向的,接触、使用linux完全出于爱好,顺便在折腾这些发行版的过程当中,一方面能获得乐趣,另一方面也确实学到蛮多知识的。

元宵快乐。

二楼解释的很详细,赞!

:smile:

Debian sid其实仓库里已经是emacs_27.1版本了。所以你可以考虑sid分支(你喜欢折腾的话)
debian sid说真的只要你自己更新时多多注意,其实很少概率会滚挂的。加上debian仓库里软件包都是“原生”“干净”的,所以sid真的也是稳得不行的。
testing分支debian有Live版本的ISO,类似于ubuntu ISO,强烈建议用debian testing live iso安装系统。非常方便。可以享受到跟ubuntu类似的体验。日后想体验sid,把sources.list修改一下下即可。在更新即可进入sid。

apt-get update 是更新包索引;apt-get upgrade 是更新包,通常来说是当前版本的 repo;如果你修改了 repo,想要更新到新版本系统;那么建议用 dist-upgrade。也就是日常更新用 update & upgrade;更新系统版本用 dist-upgrade。

testing也是27.1了,就懒得再更激进一步了。

还有个问题请教,根据ustc源的使用帮助,如果是stable或者testing,需要设置

deb https://mirrors.ustc.edu.cn/debian/ testing main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian/ testing main contrib non-free

deb https://mirrors.ustc.edu.cn/debian/ testing-updates main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian/ testing-updates main contrib non-free

deb https://mirrors.ustc.edu.cn/debian-security/ testing-security main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian-security/ testing-security main contrib non-free

但对于sid,只要两行,甚至不要src源的话只要一行

deb https://mirrors.ustc.edu.cn/debian/ sid main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian/ sid main contrib non-free

包括到对应的镜像源里看,也没有相应的sid-update以及sid-security。sid是不接收updates或者security更新的吗?

中科大这部分的说明存在错误。testing只有testing ,testing-updates和testing-backports可用,testing绝对没有security。你可以按照中科大testing设置方法打进去然后apt update你就会发现错误所在:security源绝对是不能用的。
testing在debian官方网站也有说明,不会有安全更新源,甚至在安全更新这方面会滞后不少。举个例子debian 10 stable火狐浏览器ESR安全更新接收到了,但是testing就不会接收到那么快。往往滞后几天才会收到ESR浏览器更新的版本。这就是佐证。因为testing是stable sid中间桥梁,所以是一个承上启下过渡性质的分支,因此不但安全更新不及时 就连仓库软件包数量都是三个分支里最少的。
testing只需设置testing ,testing-updates和testing-backports就可以。security设置进去只会报错不能用没任何意义。
sid因为每天都有更新,更新很频繁,所以无需有update,他自己每天天天update了,那这个update就没意义了。backports是反向移植仓库,这个分支也没多大意义,backports在stable才有意义。反向移植仓库就是在稳定/测试分支也能够用到最新版软件的意义。比如stable里libreoffice还是6.1.5.3,你想用新一点的libreoffice的话,buster-backports添加进去后apt install -t buster-backports libreoffice即可。同样道理想用新一点内核在debian 10的,apt install -t buster-backports linux-image-amd64.
因为sid是不停的更新,新版软件包往往会有新的bug但是有些同时又修复了之前的bug,所以安全更新也没意义了。你更新软件如此频繁,新版的软件包往往也会存在新的安全漏洞,所以安全更新也没多大意义了。
所以sid为什么只有一行软件源设置 就能用就是这个原因。

1 个赞

感激!您这个说明真的特别详尽,读完确实是感觉一下子清晰了非常多;还是有个小疑惑:

我前面的表达可能不太对,让ustc的说明背锅了。原本关于debian和debian-security的说明是针对stable的

deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free

# deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free

deb http://mirrors.ustc.edu.cn/debian-security/ stable/updates main non-free contrib
# deb-src http://mirrors.ustc.edu.cn/debian-security/ stable/updates main non-free contrib

我把上面配置的stable换成了testing,确实如您所说,在sudo apt update时报错了,找不到对应的security源。然后可能是我自作聪明,我翻看了debian-security源的内容,找到了这样一个源:

http://mirrors.ustc.edu.cn/debian-security/dists/testing-security/

从名称来看,这似乎确实是一个testing的security源?我把/etc/apt/sources.list改成了上述的源,更新就成功了。是我的理解有误吗?

这种成功,是表面现象的。你可以看看https://www.debian.org/releases/testing/

里面有句话提到: 请注意,测试发行版的安全更新还 由安全团队管理。因此,测试版 能及时获取安全更新。如果您需要安全支持,鼓励您暂时切换您的 sources.list 条目,从 testing 到 buster

所以这个软件源testing-security还是删掉为好。

http://mirrors.ustc.edu.cn/debian-security/pool/

另外可以来看一下这个目录,里面放的都是debian所有安全更新包。我们仔细观察文件名,都是只有8u 9u 10u为后缀的,也就是debian 8 9 10stable的安全更新软件包。并没有testing bullseye相关字眼做后缀。

真的不知道怎样用言语感谢您,您这几个回复比我自己瞎琢磨几天的收获都大得多 :blush:

再次感谢!元宵快乐!

同乐。

1 个赞