最近更新Debian10与NextCloud21遇到的问题

前几天打开Debian官方网发现Debian10.10已经发布正式版了,目前我使用的版本是Debian10.9,正好可以尝试一下升级系统,然后测试各种已部署的东西是否还能完美运行,我们开始折腾吧。

备份系统

备份系统是必需的前提,因为假如升级系统之后,出现各种问题,我们已部署的东西无法正常完美运行,或其他更多的问题,我们有了备份就不用再担心这些问题,即使是升级失败了,还可以恢复到未升级前的系统备份。

如何备份确实是个头痛的问题

因为没有经验,之前一直都不敢升级Linux系统。

不敢升级的原因有:

  • 曾经碰到过由于Windows10的自动更新,导致许多部署在Windows系统的各种东西出现各种各样奇怪的小问题,导致各种无法正常运行。
  • 曾经升级PHP,升级到高版本的PHP后,貌似需要重新配置各种各样的东西,更多的问题已经想不起了。

用 Hyper-V 检查点备份 Debian10 系统吧

可是使用检查点备份,我确实还是没有搞清楚检查点是如何工作的。因为Debian系统我是安装在SSD磁盘上,但数据目录我是放在HDD磁盘上。

如果创建检查点,是不是同时在SSD磁盘上与HDD磁盘上都会生成检查点的备份?如果是这样的话,数据目录占用的容量那么多,创建检查点的备份会占用容量非常大?

要弄清楚这个问题,我们完全可以一个一个问题的去测试与检验,可是需要耗费时间应该不少,懒…!

于是我采取以下的方法来创建检查点:

首先把挂载在HDD磁盘上的目录临时卸载掉

1、停止 apache、mariadb、php、计划任务等各种服务。

2、确定我们需要临时卸载的目录

sgtfz@debian-buster:~$ df -h
Filesystem                          Size  Used Avail Use% Mounted on
udev                                2.9G     0  2.9G   0% /dev
tmpfs                               592M   60M  533M  11% /run
/dev/mapper/debian_lvm-root          26G  2.2G   24G   9% /
tmpfs                               2.9G     0  2.9G   0% /dev/shm
tmpfs                               5.0M     0  5.0M   0% /run/lock
tmpfs                               2.9G     0  2.9G   0% /sys/fs/cgroup
/dev/mapper/data_lvm-my_data        1.8T  366G  1.4T  21% /my-data
/dev/mapper/backup_lvm-data_backup  1.8T  367G  1.4T  21% /data_backup
/dev/sda2                           465M   50M  391M  12% /boot
/dev/sda1                           120M  5.1M  115M   5% /boot/efi
tmpfs                               592M     0  592M   0% /run/user/1000

3、临时卸载挂载在HDD磁盘上的目录

umount /dev/mapper/data_lvm-my_data
umount /dev/mapper/backup_lvm-data_backup

# 确认已卸载
root@debian-buster:~# df -h
Filesystem                   Size  Used Avail Use% Mounted on
udev                         2.9G     0  2.9G   0% /dev
tmpfs                        592M   60M  533M  11% /run
/dev/mapper/debian_lvm-root   26G  2.2G   24G   9% /
tmpfs                        2.9G     0  2.9G   0% /dev/shm
tmpfs                        5.0M     0  5.0M   0% /run/lock
tmpfs                        2.9G     0  2.9G   0% /sys/fs/cgroup
/dev/sda2                    465M   50M  391M  12% /boot
/dev/sda1                    120M  5.1M  115M   5% /boot/efi
tmpfs                        592M     0  592M   0% /run/user/1000

4、从Hyper-V虚拟机设置里移除相应目录的虚拟磁盘。记录好磁盘安装顺序,防止再次添加由于顺序问题导致各种问题。

然后,创建检查点。

创建检查点完成之后,我们需要在Hyper-V虚拟机设置里重新装载刚才卸载的磁盘,然后重启系统。

在创建检查点完成之后,在Hyper-V虚拟机设置里重新装载刚才卸载的磁盘,尝试过重新挂载目录,但是挂载出错,详细原因未知。

检查系统一切工作正常,下面开始更新系统。

从Debian10.9升级到Debian10.10

检查更新

apt update; apt upgrade;

The following NEW packages will be installed:
  linux-image-4.19.0-17-amd64
The following packages will be upgraded:
  base-files isc-dhcp-client isc-dhcp-common klibc-utils libgcrypt20 libglib2.0-0 libglib2.0-data libgnutls30 libhogweed4 libklibc libmariadb3 libnettle6 libwebp6
  libwebpmux3 libxml2 linux-image-amd64 mariadb-client mariadb-client-10.3 mariadb-client-core-10.3 mariadb-common mariadb-server mariadb-server-10.3
  mariadb-server-core-10.3 php-common shim-helpers-amd64-signed shim-signed shim-signed-common shim-unsigned
28 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 73.0 MB of archives.
After this operation, 266 MB of additional disk space will be used.
Do you want to continue? [Y/n]

貌似升级的东西挺多的,确认升级后,几分钟升级完成,升级非常简单,完全感觉步到就已经完成了。简单的背后,别人不知道付出了多少的努力,才实现了给我们的如此简单的操作!

说到简单这个问题:

在你了解的领域里有个简单的问题,你当然觉得简单。可是在你不了解的领域,你只是看着别人简单的弄那么几下就OK,你也觉得非常的简单,你可能估计错误了。

可是我如何查看是否已经升级到Debian10.10了呢?

网上搜索各种查看系统版本的命令,都无法查看到现在的Debian10.10系统版本

sgtfz@debian-buster:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

sgtfz@debian-buster:~$ cat /proc/version
Linux version 4.19.0-17-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.194-2 (2021-06-21)
sgtfz@debian-buster:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

sgtfz@debian-buster:~$ hostnamectl
   Static hostname: debian-buster
         Icon name: computer-vm
           Chassis: vm
        Machine ID: c410905f8d4d4eeeabc0a1fc4da0c84c
           Boot ID: 1f08efd2ee964d09ae4f61b1ea4c0f37
    Virtualization: microsoft
  Operating System: Debian GNU/Linux 10 (buster)
            Kernel: Linux 4.19.0-17-amd64
      Architecture: x86-64

最后还是在Debian官方找到了查看debian系统版本的线索

sgtfz@debian-buster:~$ cat /etc/debian_version
10.10

证明升级完美成功。初步粗略体验,在debian系统上运行的各种东西一切都正常工作。

升级如此简单,干脆把另一台运行OnlyOffice的debian也升级一下吧。

运行OnlyOffice这台虚拟机,升级更简单,只有一个虚拟磁盘放在SSD上。

列出可更新的软件列表

root@debian-buster:~# apt list --upgradable
Listing... Done
base-files/stable 10.3+deb10u10 amd64 [upgradable from: 10.3+deb10u9]
isc-dhcp-client/stable 4.4.1-2+deb10u1 amd64 [upgradable from: 4.4.1-2]
isc-dhcp-common/stable 4.4.1-2+deb10u1 amd64 [upgradable from: 4.4.1-2]
klibc-utils/stable 2.0.6-1+deb10u1 amd64 [upgradable from: 2.0.6-1]
libgcrypt20/stable 1.8.4-5+deb10u1 amd64 [upgradable from: 1.8.4-5]
libglib2.0-0/stable 2.58.3-2+deb10u3 amd64 [upgradable from: 2.58.3-2+deb10u2]
libglib2.0-data/stable 2.58.3-2+deb10u3 all [upgradable from: 2.58.3-2+deb10u2]
libgnutls30/stable 3.6.7-4+deb10u7 amd64 [upgradable from: 3.6.7-4+deb10u6]
libhogweed4/stable 3.4.1-1+deb10u1 amd64 [upgradable from: 3.4.1-1]
libklibc/stable 2.0.6-1+deb10u1 amd64 [upgradable from: 2.0.6-1]
libmariadb3/stable 1:10.3.29-0+deb10u1 amd64 [upgradable from: 1:10.3.27-0+deb10u1]
libnettle6/stable 3.4.1-1+deb10u1 amd64 [upgradable from: 3.4.1-1]
libwebp6/stable,stable 0.6.1-2+deb10u1 amd64 [upgradable from: 0.6.1-2]
libxml2/stable 2.9.4+dfsg1-7+deb10u2 amd64 [upgradable from: 2.9.4+dfsg1-7+deb10u1]
linux-image-amd64/stable 4.19+105+deb10u12 amd64 [upgradable from: 4.19+105+deb10u11]
mariadb-client-10.3/stable 1:10.3.29-0+deb10u1 amd64 [upgradable from: 1:10.3.27-0+deb10u1]
mariadb-client-core-10.3/stable 1:10.3.29-0+deb10u1 amd64 [upgradable from: 1:10.3.27-0+deb10u1]
mariadb-client/stable 1:10.3.29-0+deb10u1 all [upgradable from: 1:10.3.27-0+deb10u1]
mariadb-common/stable 1:10.3.29-0+deb10u1 all [upgradable from: 1:10.3.27-0+deb10u1]
onlyoffice-documentserver/squeeze 6.3.1-32 amd64 [upgradable from: 6.3.0-111]
shim-helpers-amd64-signed/stable 1+15.4+5~deb10u1 amd64 [upgradable from: 1+15+1533136590.3beb971+7+deb10u1]
shim-signed-common/stable-updates 1.36~1+deb10u2+15.4-5~deb10u1 all [upgradable from: 1.33+15+1533136590.3beb971-7]
shim-signed/stable-updates 1.36~1+deb10u2+15.4-5~deb10u1 amd64 [upgradable from: 1.33+15+1533136590.3beb971-7]
shim-unsigned/stable 15.4-5~deb10u1 amd64 [upgradable from: 15+1533136590.3beb971-7+deb10u1]

从列表中可以看到,如果执行更新,onlyoffice-documentserver会更新到6.3.1的版本。可是目前我不想更新这个版本的OnlyOffice,因为我觉得OnlyOffice越来越重的商业味道,不太好食用。

标记不升级的软件包
apt-mark hold onlyoffice-documentserver

root@debian-buster:~# apt-mark hold onlyoffice-documentserver
onlyoffice-documentserver set on hold.

查看我们标记不升级的软件
apt-mark showhold

root@debian-buster:~# apt-mark showhold
onlyoffice-documentserver

执行升级,我们可以看到,标记不升级的软件包onlyoffice-documentserver,会保留原有的版本不作更新。

root@debian-buster:~# apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-image-4.19.0-17-amd64
The following packages have been kept back:
  onlyoffice-documentserver
The following packages will be upgraded:
  base-files isc-dhcp-client isc-dhcp-common klibc-utils libgcrypt20 libglib2.0-0 libglib2.0-data
  libgnutls30 libhogweed4 libklibc libmariadb3 libnettle6 libwebp6 libxml2 linux-image-amd64
  mariadb-client mariadb-client-10.3 mariadb-client-core-10.3 mariadb-common shim-helpers-amd64-signed
  shim-signed shim-signed-common shim-unsigned
23 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 62.7 MB of archives.
After this operation, 266 MB of additional disk space will be used.
Do you want to continue? [Y/n]

至此,Debian系统升级完美完成。

时间又过了几天,NextCloud21.0.3终于发布了。

等待NextCloud发布更新等得好苦啊,因为NextCloud21用下来发现许多小问题,对比NextCloud20根本用不出性能差别,但问题却多了不少!哎……

从NextCloud21.0.2升级到NextCloud21.0.3

经过了那么多个版本的升级,我已经总结出使用OCC命令手动升级的完美方法了。可是,该来的问题,还是来了。

OCC升级报错 An unhandled exception has been thrown: 这个还是第一次遇到。

OCC报错问题1

使用OCC命令升级系统前,我们需要做数据库以及数据目录的备份,在做备份之前需要停止Apache与PHP,但是不要停止MariaDB。如果停止了MariaDB,OCC命令升级NextCloud会报错。

OCC报错问题2

An unhandled exception has been thrown:
OC\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

这个问题有点棘手!

所有准备就绪的时候,执行升级命令

sudo -u www-data php occ upgrade

你却给我抛出错误,愣是无法找到解决的方法,无法使用OCC命令升级。之后我尝试使用Web浏览器访问NextCloud,在Web浏览器上点击升级,却成功升级完成了。

于是我粗略的检查升级后的各种东西,貌似没有发现什么不妥。

暂时发现了一处不妥:NextCloud后台定时任务cron.php无法正常执行。即使直接在Putty上使用命令执行,也不生效。

NextCloud后台定时任务无法正常执行,到底是升级了Debian后导致的,还是升级了NextCloud后导致的,现在已经无法追溯了,但问题肯定跟无法使用OCC命令升级相关。

百度搜索Memcache \OC\Memcache\APCu not available for local cache相关问题,少之又少,没有任何参考意义。

从报错的机器翻译,问题应该出现在PHP扩展模块上。应该是我的php.ini配置问题,或是没有安装APCu扩展模块。

我觉得这些都不能成立,因为NextCloud21.0.2运行得好好的,一切正常,包括OCC命令也是一切正常的。为何升级了Debian10.10或NextCloud21.0.3后,问题就来了?简直不可理喻。

检查php.ini配置文件,确认APCu扩展是开启的,并且apc.enable_cli=1也是开启的。Web浏览器访问info.php查看PHP扩展模块,都是已开启的。难道这个问题只能搁置下去了?然后在putty使用命令php -i ,被我发现了其中的玄机,实在是令人头疼。

使用浏览器访问info.php可以看到

APCu Support Enabled
Version 5.1.20
APCu Debugging Disabled
MMAP Support Enabled
MMAP File Mask no value
Serialization Support php, igbinary
Build Date Mar 4 2021 15:44:06

可是使用终端命令 php -i 我们看到的却是如下

APCu Support => Disabled
Version => 5.1.20
APCu Debugging => Disabled
MMAP Support => Enabled
MMAP File Mask =>
Serialization Support => Disabled
Build Date => Mar 4 2021 15:44:06

终于找到线索了

putty上键入命令 php --ini

命令模式所加载的配置文件路径:

root@debian-buster:~# php --ini
Configuration File (php.ini) Path: /etc/php/7.4/cli
Loaded Configuration File:         /etc/php/7.4/cli/php.ini
Scan for additional .ini files in: /etc/php/7.4/cli/conf.d
Additional .ini files parsed:      /etc/php/7.4/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.4/cli/conf.d/10-opcache.ini,
/etc/php/7.4/cli/conf.d/10-pdo.ini,
/etc/php/7.4/cli/conf.d/15-xml.ini,
/etc/php/7.4/cli/conf.d/20-apcu.ini,
/etc/php/7.4/cli/conf.d/20-bcmath.ini,
/etc/php/7.4/cli/conf.d/20-calendar.ini,
/etc/php/7.4/cli/conf.d/20-ctype.ini,
/etc/php/7.4/cli/conf.d/20-curl.ini,
/etc/php/7.4/cli/conf.d/20-dom.ini,
/etc/php/7.4/cli/conf.d/20-exif.ini,
/etc/php/7.4/cli/conf.d/20-ffi.ini,
/etc/php/7.4/cli/conf.d/20-fileinfo.ini,
/etc/php/7.4/cli/conf.d/20-ftp.ini,
/etc/php/7.4/cli/conf.d/20-gd.ini,
/etc/php/7.4/cli/conf.d/20-gettext.ini,
/etc/php/7.4/cli/conf.d/20-gmp.ini,
/etc/php/7.4/cli/conf.d/20-iconv.ini,
/etc/php/7.4/cli/conf.d/20-igbinary.ini,
/etc/php/7.4/cli/conf.d/20-imagick.ini,
/etc/php/7.4/cli/conf.d/20-intl.ini,
/etc/php/7.4/cli/conf.d/20-json.ini,
/etc/php/7.4/cli/conf.d/20-mbstring.ini,
/etc/php/7.4/cli/conf.d/20-mysqli.ini,
/etc/php/7.4/cli/conf.d/20-pdo_mysql.ini,
/etc/php/7.4/cli/conf.d/20-phar.ini,
/etc/php/7.4/cli/conf.d/20-posix.ini,
/etc/php/7.4/cli/conf.d/20-readline.ini,
/etc/php/7.4/cli/conf.d/20-redis.ini,
/etc/php/7.4/cli/conf.d/20-shmop.ini,
/etc/php/7.4/cli/conf.d/20-simplexml.ini,
/etc/php/7.4/cli/conf.d/20-sockets.ini,
/etc/php/7.4/cli/conf.d/20-sysvmsg.ini,
/etc/php/7.4/cli/conf.d/20-sysvsem.ini,
/etc/php/7.4/cli/conf.d/20-sysvshm.ini,
/etc/php/7.4/cli/conf.d/20-tokenizer.ini,
/etc/php/7.4/cli/conf.d/20-xmlreader.ini,
/etc/php/7.4/cli/conf.d/20-xmlwriter.ini,
/etc/php/7.4/cli/conf.d/20-xsl.ini,
/etc/php/7.4/cli/conf.d/20-zip.ini,
/etc/php/7.4/cli/conf.d/25-apcu_bc.ini

浏览器访问 info.php 所加载的配置文件路径:

PHP Version 7.4.20
System	Linux debian-buster 4.19.0-17-amd64 #1 SMP Debian 4.19.194-2 (2021-06-21) x86_64
Build Date	Jun 4 2021 23:17:27
Server API	FPM/FastCGI
Virtual Directory Support	disabled
Configuration File (php.ini) Path	/etc/php/7.4/fpm
Loaded Configuration File	/etc/php/7.4/fpm/php.ini
Scan this dir for additional .ini files	/etc/php/7.4/fpm/conf.d

从中看出,我们无论如何开启扩展,但是却都没有开启命令模式的扩展!需要开启命令模式的扩展,就需要修改命令模式的配置文件:

vi /etc/php/7.4/cli/php.ini

加入内容:apc.enable_cli=1

重启 php-fpm 后,再次使用命令 php -i ,命令模式的 APCu Support => Enabled 已经开启了。

APCu Support => Enabled
Version => 5.1.20
APCu Debugging => Disabled
MMAP Support => Enabled
MMAP File Mask =>
Serialization Support => php, igbinary
Build Date => Mar  4 2021 15:44:06

定时任务终于运行正常了!!!

可是之前Debian10.9或NextCloud21.0.2也是没有特地开启修改/etc/php/7.4/cli/php.ini,为什么之前可以正常执行定时任务?

也许有些问题我们是无法找到答案的…。

发表评论