Ubuntu 18.04 LTS出来已经好一阵子了,按照惯例,附带的服务器软件版本会比上一个LTS版本也就是Ubuntu 16.04高几条街。(毕竟LTS本身为了稳定而生,明明Ubuntu的软件版本已经是新得可怕了,没什么好要求的hhh,要什么自行车!)
所以就试着在腾讯云的云主机上尝试了下升级,写下这份小结。
说在前头的话
升级有风险,数据先备份,别在生产环境上乱动!
你可能遇到的风险包括但不限于:
- 数据丢失
- 服务器启动受阻,甚至无法启动
- 原本的应用程序无法兼容新系统
而这次升级,你会获得的升级有:
- 自带源PHP版本升级到7.2
- 自带源OpenSSL版本升级到1.1.0
- PPA源上nginx版本升级到1.14.0
- Linux内核升级到4.15线
- ……
提示:
升级一类的事情,建议还是有准备而来,然后辅以胆大心细,仔细检查每一步再进行操作,这样子才能够获得成功!
升级方法
现在正式版本已经释出,所以简单的一句do-release-upgrade
就能解决问题。
提示:如果是LTS版本状态,是不会检查到18.04版本的,
因为只有18.04.1版本释出才会视为新版本发布。
此时使用命令:do-release-upgrade -d
。
升级推荐使用各家云厂商的内部源,速度快,而且出问题起来好修复。
对于配置文件冲突,可以查看本地和软件包中两个配置文件之间的差异,其中格式是:
- “无开头”:配置文件共有的部分
- “ + 开头”:软件包新增的配置
- “ – 开头”:现有的配置,软件包将删除
配置小记
新旧版本软件包中,软件配置文件的不同会造成很大的问题,这里稍作总结,可以作为参考。
OpenSSH Server
对于OpenSSH服务器,因为版本变更,会造成腾讯云原配置大量关键字失效,造成Fatal级别的错误,导致无法启动OpenSSH服务,从而无法远程连接,只能通过noVNC端进行修复。
推荐处理方法:使用软件包提供的配置文件
sysctl.conf
腾讯云服务器由于不支持IPv6,所以在此文件中手动禁用了IPv6协议栈。默认文件没有此配置,会延长系统启动的时间。
推荐处理方法:使用当前系统版本的配置文件
systemd-resolve
在Ubuntu 18.04中,DNS的查询使用了systemd提供的一个组件进行,提供了DNSSEC、多播DNS等功能,作为一个抽象层提供给用户。系统更新之后,需要设置配置文件/etc/systemd/resolve.conf
确保DNS服务器指向正确。以腾讯云广州数据中心为例:
[Resolve]
DNS=10.138.224.65
FallbackDNS=10.182.20.26
配置好后,重启下对应的模块,
systemctl restart systemd-resolve
,就可以愉快地上网了。
systemd/system.conf
对于关机,关闭一个服务应该设置一个超时,以防服务阻塞了关机进程。
腾讯云的云检测服务YDService会在关机期间阻塞系统至超时,而软件包的配置超时时长高达1分30秒,这个足以明显延长重启进程。
推荐处理方法:
- 使用当前系统版本的配置文件
- 使用软件包提供的配置文件,然后修改配置:
DefaultTimeoutStopSec=10s
nginx
对的没错,因为PHP版本升级了,使用了Unix Domain Socket进行PHP-FPM连接的记得把默认路径给改一下:
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
别的有改动的也是这样子弄一下,另外涉及到Unix Domain Socket权限的配置冲突也是一律慎重修改。
后记
其实升级这个事情,也并没有我们想象中那么可怕。重要的,往往在于认真检查改动、查阅文档,以及谨慎地操作。此外,翻车之后,还是要好好地作一下记录,以便参考,这也是极好的。
至于一部分对于系统版本高度挑剔的软件,平时使用的时候建议打包成容器进行运行,可以很好地解决换了系统“水土不服”的情况发生。而备份再操作也是日常的必备守则。emmmm,在这里祝全世界永无宕机哈哈哈。
这几天去完爱国为的网络技术大赛,再加上个学代会什么的,真的累趴了。
洗洗睡噜,改天有新体验了继续高产似母猪吧~
alphaxz@SCUT