如何使用Salt批量将Linux Mint 21.1升级至21.3版本?
如何使用Salt批量将Linux Mint 21.1升级至21.3版本?
Note: 我最初在StackOverflow上发布了这个问题,但因被判定为偏离主题而被删除。我在这里再次尝试。需要说明的是,当时有一个给出的答案,我已经将其复制粘贴在问题之后。我附上这个答案是因为我想在测试后报告其结果。如果这样做不合适,请告诉我,我会删除它。
我的问题
我使用Salt管理30台笔记本电脑已经有一年了,它运行得很好,一旦所有设置都正确完成,就不需要任何重大维护。这些笔记本电脑运行Linux Mint 21.1,我想把它们升级到21.3。有一些手动升级的方法,需要登录到每台笔记本电脑并执行一系列命令。但是,为30台笔记本电脑这样做将是一项重大任务。我想知道是否有办法使用Salt在每台笔记本电脑上升级操作系统(即从21.1到21.3)?如果有人能给我指明方向,我将不胜感激。
我还没有尝试任何方法,因为我不知道从哪里开始...
可行的解决方案
作为经常用Salt批量管理Linux机器的人,我给你分享两种靠谱的实现方式,亲测有效:
方式一:编写Salt状态文件(推荐,可重复使用)
把升级流程封装成Salt状态文件,这样不仅能批量执行,还能随时复用,步骤如下:
- 修改软件源配置
Linux Mint 21.1的代号是vera,21.3是virginia,我们需要把源文件里的版本代号替换掉:
# mint_upgrade.sls update_mint_sources: file.replace: - name: /etc/apt/sources.list.d/official-package-repositories.list - pattern: 'vera' - repl: 'virginia' - backup: minion # 自动备份原文件,方便回滚
- 全量更新系统包
执行apt dist-upgrade来完成系统的发行版升级,加上非交互式参数避免卡在确认环节:
full_system_upgrade: pkg.uptodate: - refresh: True # 先更新包索引 - dist_upgrade: True - options: - '-y' - '--allow-downgrades' - '--allow-remove-essential' - '--allow-change-held-packages'
- 收尾版本切换(可选)
如果系统安装了mintupgrade工具,可以用它完成最终的版本配置:
finish_mint_upgrade: cmd.run: - name: mintupgrade upgrade -y - onlyif: test -x /usr/bin/mintupgrade # 只在有该工具的机器上执行
保存好这个mint_upgrade.sls后,在Salt master上执行下面的命令就能批量升级所有机器:
salt '*' state.apply mint_upgrade
方式二:直接通过Salt远程执行命令(快速临时方案)
如果不想写状态文件,也可以分步骤用cmd.run直接执行命令:
- 替换源文件中的版本代号:
salt '*' cmd.run "sed -i 's/vera/virginia/g' /etc/apt/sources.list.d/official-package-repositories.list"
- 更新包索引:
salt '*' cmd.run "apt update -y"
- 执行发行版升级:
salt '*' cmd.run "apt dist-upgrade -y --allow-downgrades --allow-remove-essential --allow-change-held-packages"
- (可选)运行mintupgrade工具收尾:
salt '*' cmd.run "mintupgrade upgrade -y"
关键注意事项
- 先测试再批量:一定要先在一台测试笔记本上执行升级流程,确认没有问题后再推送到所有机器;
- 备份重要数据:升级前建议给每台机器做系统快照或者备份关键数据,防止意外;
- 自定义源同步修改:如果你的机器有第三方软件源,也要记得把里面的
vera替换成virginia; - 升级后重启:升级完成后可以用
salt '*' system.reboot批量重启所有机器,让新系统生效。
备注:内容来源于stack exchange,提问作者dnessett
相关产品推荐
相关产品推荐

