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秒,这个足以明显延长重启进程。

推荐处理方法

  1. 使用当前系统版本的配置文件
  2. 使用软件包提供的配置文件,然后修改配置:
    DefaultTimeoutStopSec=10s

nginx

对的没错,因为PHP版本升级了,使用了Unix Domain Socket进行PHP-FPM连接的记得把默认路径给改一下:

fastcgi_pass unix:/run/php/php7.2-fpm.sock;

别的有改动的也是这样子弄一下,另外涉及到Unix Domain Socket权限的配置冲突也是一律慎重修改。

后记

其实升级这个事情,也并没有我们想象中那么可怕。重要的,往往在于认真检查改动、查阅文档,以及谨慎地操作。此外,翻车之后,还是要好好地作一下记录,以便参考,这也是极好的。

至于一部分对于系统版本高度挑剔的软件,平时使用的时候建议打包成容器进行运行,可以很好地解决换了系统“水土不服”的情况发生。而备份再操作也是日常的必备守则。emmmm,在这里祝全世界永无宕机哈哈哈。

这几天去完爱国为的网络技术大赛,再加上个学代会什么的,真的累趴了。
洗洗睡噜,改天有新体验了继续高产似母猪吧~

alphaxz@SCUT