惊险万分:升级Ubuntu 18.04 LTS到Ubuntu 20.04 LTS

昨天的帖子折腾之:编译hived失败中提到,编译最新版本的v1.26.0rc3,需要Ubuntu 20.04 LTS及以上版本。

image.png
(图源 :pixabay)

而我的一堆VPS和本地机都是运行着Ubuntu 18.04 LTS,唯一一台运行Ubuntu 22.04 LTS的机器配置太低,估计没法跑编译程序。

哎,这样的话,只好尝试升级几台VPS喽。原本以为只要执行一条简单的命令就可以,毕竟每次登录Ubuntu 18.04时,都会被提示:

New release '20.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

结果失败了好几次不说,还险些把VPS折腾死,简直就是惊险万分,吓死个人。

第一次升级

既然提示信息告诉我执行 do-release-upgrade就可以升级,那么咱就直接上手开整 :

do-release-upgrade

运行上述命令后,提示我输入账户密码,毕竟升级系统,没超级用户权限怎么可以

Reveal spoiler

52b0990ddfc34d2bb7cd5cdc02454a1.png

输入密码后:

Reveal spoiler

21c539d0fe8661e4636b0709ef6b64c.png

大意是通过SSH升级不被推荐,有卡机的风险。如果非要用SSH升级,系统会帮忙开辟个新端口,这样出错的时候可以用来连接恢复。

不要怂,就是干:

Reveal spoiler

39b4fc2bdbfef457cb8da1f34e2fb90.png

这个提示我们在防火墙中允许这个端口,不然开个新端口还被防火墙拦截了,就尴尬了。

因为我使用的是ufw,所以无需使用iptables指令,而是直接使用如下命令:

sudo ufw allow 1022/tcp

然后按回车继续:

Reveal spoiler

f626da90bc02b22c83358ac4f5c74ac.png

上边好像没啥值得特别说的,继续按回车:

Reveal spoiler

53972f7c9299fe3611c9dd0d535ca28.png

好吧,貌似出错了:

Reveal spoiler

84f8cf8307421f0a649631dca0cbac0.png

这两段信息中,核心信息就是:

After updating your package information, the essential package 'ubuntu-minimal' could not be located. This may be because you have no official mirrors listed in your software sources, or because of excessive load on the mirror you are using.

在VPS上,我安装的系统是ubuntu-minimal,看来是这个引起的问题。不过,不管咋说,第一次升级,我是失败了。

第二次升级

在第一次升级失败后,我已经打算放弃了。毕竟我还可以用其它的方法,比如说给VPS重做系统来安装Ubuntu 20.04 LTS。作为一个有严重系统洁癖的人,我总觉得全新安装要比升级上来干净得多。

不过就这样放弃,我还有点不死心,于是又一通查找资料,别说,还真的让我找到N种解决方案。

方案一

使用如下指令替代do-release-upgrade

sudo RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade

方案二:

使用如下指令(原则上效果和作用同方案一)

sudo do-release-upgrade --allow-third-party

方案三:

编辑/etc/apt/sources.list 把linode相关链接中的bionic替换成focal (因为我用的是linode的VPS)。

我最终决定直接执行方案一,亦即执行指令:

sudo RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade

发现升级果然能继续进行,曙光呈现,哇咔咔,真开心啊。

基本上重走一遍第一次升级的流程,然后继续继续,出现这样一堆提示,是什么鬼?不过好像没啥影响:

Reveal spoiler

b91a85c6739fd194bf042fd2c524c17.png

继续继续,不要停:

Reveal spoiler

18d898091d351fce594a040329ebedb.png

结果当我敲下y之后,putty的连接就断开了。重连发现也无法连接。

不过不怕,不是有1022端口呢嘛?试试连1022,果然没问题。但是我当时手贱搞了一下科学上网,结果又被踢了出来,再连就死活链接不上了。出如下提示:

Reveal spoiler

b1b6cbbb15735bc3046f16e3c473052.png

我试了N多次,都无法链接,在其它机器上,使用ssh指令连接,则出现如下出错信息:

ssh_exchange_identification: read: Connection reset by peer

(ssh指令加上-v选项会打印出更多的信息,但是同样是一头雾水)

这下彻底凉了,一般这种情况可以尝试重启sshd,但是问题是,我无法连上主机,咋进行操作啊?

令人揪心的是,这台VPS上,有好多好多重要数据,如果真的彻底挂掉了,我只能哭了。好后悔,自己为啥没提前备份一下呢?

第三次升级

后悔了大半天之后,我觉得只拍大腿也不是办法,必须考虑一下怎么解决才好。

我想到的解决方案有试试强制重启,重启无效的话,试试能不能将这个卷挂载到其它VPS上以备份出重要数据

无论重启还是挂载都先要进Linode的管理面板中研究一下,不过进管理面板后,无意中发现了image.png 这个选项,而这个是通过ttyS0(也就是串行通信口)连接的。

咦,这么说,我岂不是有救了?连上之后,执行sudo screen -r,果然发现了正在进行中的升级程序,现在是卡在某个让用户做出选择的页面。不过因为webshell不太好用的缘故,显示的一团糟,我只好瞎选了。

然后开始进行下去:

Reveal spoiler

4a7efa111a843bf505999b6c8cd51bf.png

Reveal spoiler

6d145f4ee092e81e66827b1773084dd.png

Reveal spoiler

8d9718510b6d6b99655f8f87f711c04.png

Reveal spoiler

66643db6f6ec01707d0878ec1e99c4e.png

Reveal spoiler

ef0872224fde05a9d827997dc21f4ef.png

Reveal spoiler

e2bdc057a6a7af865b35c1e770a9ef0.png

Reveal spoiler

8ff064adeb697fbfe100f5a6a59c946.png

这些就不一一解释了,懂点英语看这个都没啥问题。然后提示重启,重启后,我发现终于可以用putty正常连接啦。

看一下连接后的提示信息:

Reveal spoiler

ef7c2b9c2bd47c2117528cc68ae4ed3.png

再把我之前VPS上运行的程序都运行起来,貌似没啥问题。哎,尽管过程惊险万分,不过总算是升级成功了,太吓人啦!!😱😱😱😱😱

尽管升级成功了,我决定再也不采取这样的方式了,一个是太过于吓人;再有就是我系统洁癖的强迫症又犯了,所以以后决定还是给VPS重新做系统比较好。

可是新的问题来,在AWS的VPS似乎没法重做系统,尽管创建新的实例,然后把数据迁移过去似乎一样,但是默认的IP什么的就变了。哎,愁人啊!咋办好呢?

Sort:  

我都不敢在VPS操作升级系统,O神厉害,大写的服👍

我觉得VPS上最靠谱的操作还是先备份数据后重做系统
不过那样太累了😵

可以写个脚本定期把重要数据打包备份

又搞高端的,完全看不懂。

AWS ec2上,狠心实际操作了一下升级
只能说,如丝般顺滑,一切都很顺利
(不过我的Python环境崩溃啦)

厉害了,O哥

來跟歐哥學習