再次来求教经验了,怎么样做坑更少更省事呢?
如果大拿们使用的是基于版本制的系统,比如 fedora 和 ubuntu ,一个版本用久了之后软件仓库里的版本肯定会旧,如果贸然使用下一个版本的软件仓库就会担心装出问题来,或者就是按照官方文档跨大版本升级,不过这样也会担心把系统升挂,或者升级成功后留下一大堆垃圾包的问题。大拿们是怎么做选择的呢,直接下载新版本的 ISO 新装一遍系统吗?还是有更好的方法?

不是大拿

一般应用和业务运行在 docker 或 k8s 内,主系统升级不影响

那你不会另外找一台机器先做个测试?

桌面用声明式发行版, 例如 nix 和 silverblue服务器做好准备直接重装, 过程尽可能自动化

从来不升级,能跑为啥要动它( doge

Docker 就是解决这种问题的,操作系统随便更新。

Ubuntu18.04 基本不需要升级,挺好用的

一般来说,遇到大特性的时候,忍不住手痒想炫技一番,比如想以前提前用上 HTTP/2 就会搞不成熟的 OpenSSL 重新编译 nginx

重要服务会追求稳定,如果能用我会选择不更新,要么就用容器就不挑环境,不痛不痒的我会选择虚拟机拍个快照,然后再一把梭,梭挂了复原快照无事发生,然后克隆同样的环境再测试。

重要服务会追求稳定,如果能用我会选择不更新,要么就用容器不挑环境,不痛不痒的我会选择虚拟机拍个快照,然后再一把梭,梭挂了复原快照无事发生,然后克隆同样的环境再测试。

开发还是生产?生产的话,这问题是运维该操心的,否则要他们何用。开发的话,一般直接升级就可以。搞个 timeshift 备份下,就可以自由飞翔了。至于软件仓库什么的,操作系统都能处理好的。起码我升级 ubuntu 的 lts 和 fedora 没有出现过问题。当然也许是我的开发环境不太复杂吧。

我很多东西都是用 Docker 跑,只要兼容 Docker 上面没有问题,其实都没有大问题。我选择跨大版本更新。

按照官方文档给的步骤更新就是了。上游在打包的时候,自然会控制不同版本的仓库间的包不会出现太大的跨度。比如某个包从 v1 升级到 v2 ,这种升级一般都不会出太大的问题。滚动更新是因为根本无法预测到底是从哪个版本升级到哪个版本,所以长时间不更新后再次更新,从 v1 一下升级到 v10 (只是据个例子,现实不一定会遇到),遇到复杂的依赖问题,自然容易滚挂。对于旧包,很多包管理器都提供清理不再需要的依赖的功能(比如 apt autoremove ),或者清理旧版本仓库中存在的包,但是新版本仓库已经移除的包( aptitude purge '~o')

如果是商业级的,比如 rhel ,无论是 uat 还是 prod ,我们都是直接 yum update 。但是如果是社区的,不敢用。

旧系统又不是不能用.还在 ubuntu 18.04

不是大拿,也不是运维,手里服务器只有自己的 all in boom忘了从什么版本开始了,一直是 Fedora Server ,基本上追着 Fedora 官方版本(升级一直在发行一周之后),硬件都换过一次但是系统盘和里面的系统一直没换。迁移到了 btrfs 之后也每次升级都打快照,不过一次也没用上过炸掉服务只有一次,就是默认切换 cgroupv2 炸了所有 docker (或者叫做 moby )容器,docker 当时完全不支持 cgroupv2也就切换了 podman 了事了每隔几个版本会检查遗漏下来的无用包,比如被发行版 orphan 的包/因为发行版技术迁移不再有用的包(比如 podman 抛弃了的 cni ),还有删掉残留的 etc 下面的文件云云

生产环境,能跑就不动。什么?你说有安全漏洞?我我这边有 IPS 和 WAF 产品可以为您做一个方案。

不是大拿. 服务器装 debian, 几年不用管, 服务器到期了, 系统还没停止维护呢. 换服务器, 把 home 目录打包就下, 跑的几乎都是 docker.桌面装 arch, 专治不升不舒服.

多多升级就行了,不是大拿,最初用 linux 的确会担心,不过用的久了挂了其实也有办法,一步步做好记录,可以提前设想回退和恢复的方法。

这么多担心用啥 linux

企业一般都是建新机器/集群然后再蓝绿/灰度发布,个人环境就看你自己了,有资源走企业这套当然是最稳的,没资源可以赌一把....

正常情况下我们不更新底层操作系统啊自研的应用程序对新版操作系统的适配是一个单独的项目,要投入资源的

用 Debian 比较多,基本上都是按照官方文档大版本升级,升级之前做个备份,如果你用 Btrfs 之类支持快照的文件系统打快照更方便,升出问题了就回滚快照,前提是硬盘空间得够,不过即便空间不够,Linux 转移数据到大盘上也挺容易的。垃圾包可以通过在升级系统的时候使用 apt full-upgrade (据说 dnf upgrade 类似)之类的指令可以自动删除一些在依赖树中不重要的包,升完之后可以用 apt autoremove 之类的指令清除未被依赖的库包,不过用的时候要看清楚会删哪些,是不是会删一些有用的包。