今天比较闲升级了家里的服务器(从ubuntu19升级到了ubuntu20),升级过程中系统跳出了一个白白的界面,ubuntu可爱的通知我:升级失败,遇到较难恢复的问题。。。。。。what fuck!!!手动重启过几次后始终无法进入系统,长按电源强制关机,再重启,竟然进入了系统界面,恢复了。。。。什么鬼!!
进入系统后开始检查安装的各种服务,发现nexcloud19无法正常工作。。。。。。。。好在最后还是修好了,下面记录遇到的各个问题解决方法给各位,以供大家参考。
1、nextcloud无法链接mysql
查看mysql服务是否正常运行,查看mysql服务启动错误日志,提示:Can't Create Test File,这个问题网上有说apparmor配置问题,这个方案跟我们遇到问题的场景不同大家不用尝试了,根本不管用。
直接修改/lib/systemd/system/mariadb.service文件,找到ProtectHome,将其修改为false。这个主要是因为mysql保护/home, /root ,/run/user目录,禁止mysql访问这些路径导致的。修改后执行sudo systemctl daemon-reload & sudo service mysql restart
另外还要重新安装php-mysql,sudo apt install php-mysql,这个原因后面会讲到
2、nextcloud提示缺少php各种组件
因为系统升级之前各种组件都安装齐全了,为什么现在又提示缺少呢?(ps:memcache组件的缺失会让你无法进入nextcloud页面)
既然人家说缺啥,那么咱们就补啥被,于是apt install提示缺少的组件,悲剧的是apt提示你都已经安装好了。既然组件都在为什么nextcloud却发现不了??
后来经过排查,发现ubuntu在升级到20版本后php默认版本升级为7.4,升级过程中会把你之前安装好的php组件也全部升级。这导致了你之前安装的老版本php组件全部都没了(对,就是没了,卸载掉了,在老版本php的mods-available目录下他们消失了!),虽然php及其组件都升级了,然而apache默认的php却没有切换到升级后的7.4版本。下面我们就把apache的php切换到新的7.4版本上。
由于我之前安装的php7.3,那么就以我7.3为例
1、sudo a2dismod php7.3
2、sudo a2enmod php7.4,系统提示“ERROR: Module php7.4 does not exist!”,不对啊,直接php -v查看当前已经安装了7.4,一番查找发现apache与php之间需要一个组件建立关系,需要安装libapache2-mod-php7.4,sudo apt install libapache2-mod-php7.4即可
3、update-alternatives --auto php
4、update-alternatives --auto phar
5、sudo service apache2 restart
这下以为万事大吉,打开页面直接500错误。。。。。。。怀疑是nextcloud无法在php7.4环境下跑起来。于是google各种查找,发现github的issue中说已经支持了php7.4,网上资料很少有人提到升级到php7.4的问题,只能靠自己了。
最后用最笨的办法,重新安装一遍nextcloud的php环境,安装过程中发现其他包都提示已经安装,只有下列几个是重新安装的,那就说明这几个是php升级过程中的漏网之鱼。
sudo apt install php7.4-gd php7.4-xml php7.4-curl php7.4-zip php7.4-mbstring
安装好以上几个包后,重启apache,看到了nextcloud蓝色界面,也没有缺少组件的提示了
网友评论