静看光阴荏苒
不管不顾不问不说也不念

记录博客VPS系统Debian10升级11过程

本来这机器我是不打算升级的,因为之前一直想让这台机器在线1000天,结果前几天出了问题重启了。。

想着反正也重启了,最近又赶上Debian发布新的稳定版,干脆升级了算了,一切从头开始。。

如果之前不重启的话,我是准备把10到EOL的,只是这突如其来的变故,只能说计划赶不上变化吧。。

Debian大版本升级的难易程度(踩坑概率)很大程度取决于你的系统内启用了多少第三方的存储库,以及通过包管理器安装了多少第三方的软件。

这种软件(包)装的越多,需要处理的依赖关系就越复杂,升级的过程中就比较容易崩。不过还好我这个机器只跑个博客也没装多少第三方的软件,所以处理起来比较容易。

升级前有几个注意事项:

1.不能跳版本号升级,只能从10升到11,不能直接从9升到11,如果要从9升到11,顺序是先升到10再升11。

2.大版本升级前务必把Debian系统升级到当前的最新小版本,比如现在buster是10.10。

3.尽量从“纯净的”Debian系统开始升级,意指如果你添加了其他的第三方存储库并安装了这些软件,需要先去除这些可能导致问题的因素。

4.备份重要数据,VPS有快照备份的话可以先安排一个。

首先把当前系统升级到最新的小版本:

apt update
apt list --upgradable
apt dist-upgrade

查看当前的系统版本,例如现在最新的小版本是10.10,执行下面的命令可以检查:

cat /etc/debian_version

由于我这台机器的MariaDB和PHP都是通过第三方的存储库装的,为保证升级过程中不出问题,这里特殊处理一下。

[可选]备份数据库:

mkdir /var/mariadb
mariabackup --backup --user=imlala --password=xxxxx --target-dir=/var/mariadb/backup-2021-08-19
mariabackup --prepare --target-dir=/var/mariadb/backup-2021-08-19

停止运行MariaDB:

systemctl stop mariadb

卸载MariaDB:

apt remove "mariadb-*"
apt remove galera-4

注:MariaDB10.5(galera-4)MariaDB10.3(galera-3)

检查还有没有残留的软件包,确保全部卸载干净:

apt list --installed | grep -i -E "mariadb|galera"

删除MariaDB存储库:

rm -rf /etc/apt/sources.list.d/mariadb.list

卸载PHP:

apt remove "php7.4-*"

删除PHP存储库:

rm -rf /etc/apt/sources.list.d/php.list

做完上面这些步骤外,还需要处理一下关于Nginx的配置。

我这台机器的Nginx上加载了PageSpeed和Brotli的动态模块,这些模块是基于Debian10的Nginx1.14版本编译的,待会升级到Debian11后,Nginx的版本会升级到1.18,这些模块固然是不可能正常使用的,所以这里先把Nginx的服务停了:

systemctl stop nginx

关闭开机自启:

systemctl disable nginx

清理不再需要的软件包:

apt autoremove

重启系统:

systemctl reboot

重新登录上来后,编辑存储库配置文件:

apt edit-sources

默认的配置:

deb http://deb.debian.org/debian/ buster main
deb-src http://deb.debian.org/debian/ buster main

deb http://security.debian.org/debian-security buster/updates main
deb-src http://security.debian.org/debian-security buster/updates main

deb http://deb.debian.org/debian/ buster-updates main
deb-src http://deb.debian.org/debian/ buster-updates main

改为:

deb http://deb.debian.org/debian/ bullseye main
deb-src http://deb.debian.org/debian/ bullseye main

deb http://security.debian.org/debian-security bullseye-security main
deb-src http://security.debian.org/debian-security bullseye-security main

deb http://deb.debian.org/debian/ bullseye-updates main
deb-src http://deb.debian.org/debian/ bullseye-updates main

这里需要注意的是Debian11安全更新相关的存储库的布局有变化:

https://www.debian.org/releases/bullseye/amd64/release-notes/ch-information#security-archive

修改完配置后,更新存储库信息:

apt update

现在进行最小系统升级:

apt upgrade --without-new-pkgs

显示如下信息按q退出:

是否在不通知你的情况下自动重启服务,选yes:

一旦完成了上述的最小系统升级就可以继续执行下面的命令开始全面升级了:

apt full-upgrade

这里也会提示一些关于软件包的重要更改信息,和之前一样按q退出即可:

[重要]接下来的升级过程中,会有很多类似这样的提示:

这是问你对于软件的配置文件要如何处理,是要保持默认不变还是用新的替换旧的。

如没有特殊需求,一律直接按回车,这是最稳的做法。尤其是在某些软件你修改了大量配置后。

[重要]看到这个提示,如没有特殊需求一律选择如图所示的选项:

这个是问你SSHD的配置文件要如何处理,如果你修改了SSH相关的配置,比如改了端口号等等,建议选择如图所示的选项。

更新完成后再次重启:

systemctl reboot

重新登录上来后,系统就已经升级到Debian11了:

root@debian-1cpu-1gb-us-sjo1:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 11 (bullseye)
Release:	11
Codename:	bullseye

再清理一次不再需要的软件包:

apt autoremove

现在有一些问题需要解决。

首先是我之前通过Debian的官方存储库安装了PHP7.3,然后我又通过第三方的存储库安装了PHP7.4,等于说我这个系统是多版本PHP共存。

升级前我关闭了PHP的第三方存储库,并卸载了PHP7.4。7.3我留着没动,因为我是觉得Debian在升级的时候会自动升级这些软件包的,那么升级后我的第三方PHP存储库也不用重新再加回来了,因为Debian11的官方存储库PHP版本就是7.4。

但是升级后发现这些PHP的包并没有随系统一起升级:

后来检查了一下发现应该是之前的PHP第三方存储库把php-common这个包给接管了,这个包本来是由官方存储库来处理的,但是第三方的存储库把这个包给升级了。所以Debian在升级的时候把这个包就忽略了,没有做改动。

但实际上后来我特地新开了一台Debian10的机器先从官方存储库装PHP7.3然后再直接升级成11,最终的结果是这些PHP相关的包也没有被升级而是直接被卸载了。。。

由此可见,PHP相关的包并不会随系统升级时一起升级,那这些软件包已经过时了,只能手动卸载了:

apt remove "php7.3-*"
apt autoremove

现在需要把之前卸载的PHP7.4重新装回来,由于我发现第三方的PHP存储库内PHP7.4的小版本更新一些,所以我还是重新加回第三方的PHP存储库就没有用官方的库了:

apt -y install apt-transport-https ca-certificates lsb-release
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt -y update

安装PHP7.4:

apt -y install php7.4-common php7.4-cli php7.4-cgi php7.4-fpm \
php7.4-mysql php7.4-sqlite3 php7.4-curl php7.4-mbstring \
php7.4-imagick php7.4-zip php7.4-xml php7.4-gd

如果需要PHP7.3的话也可以直接通过这个存储库来重新安装。由于我不再需要PHP7.3了就没有安装了。

设置下开机自启:

systemctl enable --now php7.4-fpm

接下来就是MariaDB了,这里比较难受的点在于:追新追的太快了,MariaDB官方的安装脚本和存储库还没做好Debian11的适配。。。只能装官方存储库的版本了:

apt install mariadb-server

设置开机自启:

systemctl enable --now mariadb

最后还剩一个Nginx,需要把PageSpeed和Brotli的模块重新编译一遍。

可以先开一台临时用来编译的机器,安装需要用到的包:

apt -y install git build-essential zlib1g-dev libssl-dev libpcre3-dev libgeoip-dev libgd-dev libxml2-dev libxslt1-dev

创建编译目录/下载pagespeed以及brotli源码:

mkdir -p /opt/build && cd /opt/build
wget https://github.com/apache/incubator-pagespeed-ngx/archive/v1.13.35.2-stable.tar.gz
tar -xzvf v1.13.35.2-stable.tar.gz
cd incubator-pagespeed-ngx-1.13.35.2-stable/
wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz
tar -xzvf 1.13.35.2-x64.tar.gz
cd /opt/build
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init

在生产机器上执行下面的命令查看Nginx版本和编译参数:

nginx -V

例如我的是1.18.0,那么下载同版本的Nginx源码并进入到Nginx的源码目录:

cd /opt/build
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -xzvf nginx-1.18.0.tar.gz
cd nginx-1.18.0

配置:

./configure --add-dynamic-module=../incubator-pagespeed-ngx-1.13.35.2-stable \
--add-dynamic-module=../ngx_brotli \
--<除去原Nginx的所有add-module参数后,剩下的所有编译参数都应该加在这里>

可能会提示如下信息,输入Y即可:

You have set --with-debug for building nginx, but precompiled Debug binaries for
PSOL, which ngx_pagespeed depends on, aren't available.  If you're trying to
debug PSOL you need to build it from source.  If you just want to run nginx with
debug-level logging you can use the Release binaries.

Use the available Release binaries? [Y/n]

如果configure没问题,那么接下来就可以编译模块了:

make modules

编译完成之后将模块传输到生产机器内:

scp objs/ngx_pagespeed.so root@serverip:/usr/share/nginx/modules
scp objs/ngx_http_brotli_filter_module.so root@serverip:/usr/share/nginx/modules
scp objs/ngx_http_brotli_static_module.so root@serverip:/usr/share/nginx/modules

启动Nginx并设置开机自启:

systemctl enable --now nginx

以上,就是我这台机器的整个升级过程了。总的来说还是比较顺利的,没遇到什么玄学问题。

可能是我没有把Debian当作DE来用,只是单纯跑个小博客,如果要是装了显卡驱动,还有一堆第三方软件的话,那真的有点听天由命的感觉了。。

赞(3)
未经允许不得转载:荒岛 » 记录博客VPS系统Debian10升级11过程
分享到: 更多 (0)

评论 5

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    可真折腾,强迫症就是难受

    nozak1个月前 (08-20) Safari 14.1.2 Safari 14.1.2 iPhone iOS 14.7.1 iPhone iOS 14.7.1回复
  2. #2

    :smile: 老哥关注你几年了,想打个卖耳机的广告多少钱 :oops: :oops: :oops: :oops: :oops:

    墨门极客1个月前 (08-20) Microsoft Edge 92.0.902.73 Microsoft Edge 92.0.902.73 Windows 10 x64 Edition Windows 10 x64 Edition回复
  3. #3

    话说可以回滚么 :razz:

    橘子1个月前 (08-20) Google Chrome 83.0.4103.130 Google Chrome 83.0.4103.130 Windows 10 x64 Edition Windows 10 x64 Edition回复
  4. #4

    博主字体是怎么弄得用的什么插件。

    moe1个月前 (08-21) Safari 14.1.2 Safari 14.1.2 iPhone iOS 14.7.1 iPhone iOS 14.7.1回复
  5. #5

    Mariadb 已经打包好 Bullseye 了

    https://mirrors.xtom.de/mariadb/repo/10.6/debian/dists/bullseye/

    Showfom1个月前 (08-21) Firefox 91.0 Firefox 91.0 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿