我通常使用以下命令升级我的服务器:
sudo -- sh -c 'apt-get update; apt-get upgrade -y; apt-get dist-upgrade -y; apt-get autoremove -y; apt-get autoclean -y'
有没有一种干净的方法来升级除 PHP 之外的所有内容,或者升级所有内容然后回滚到 PHP 8.2 是否更容易?我在最近的一次升级中学到了一个艰难的教训,那就是 WordPress 还没有为 PHP 8.3 做好准备 (https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/),并且必须全新安装 PHP:
sudo add-apt-repository --remove ppa:ondrej/php
sudo apt purge php*
sudo apt autoremove
sudo rm -rf /etc/php/8.3
sudo rm -rf /usr/lib/php
sudo apt install php php-mysql
sudo service apache2 restart
注意:Ubuntu 于 1 月 18 日迁移到 PHP 8.3:https://discourse.ubuntu.com/t/noble-numbat-release-schedule/35649
答案1
你需要使用apt-mark hold
固定 php 版本前您进行升级。符合您要求的 php 8.3 版本是2:8.3+94+ubuntu22.04.1+deb.sury.org+2
。您要执行的修改后的步骤列表如下:
# Your original cleaning up of the wrong version
sudo add-apt-repository --remove ppa:ondrej/php
sudo apt purge php*
sudo apt autoremove
sudo rm -rf /etc/php/8.3
sudo rm -rf /usr/lib/php
# I do not recommend removing ppa:ondrej/php .
# Ubuntu 22.04 has php 8.1, and you need the ppa for php 8.3
sudo add-apt-repository ppa:ondrej/php # Readd
# Install and pin the correct version
sudo apt install php=2:8.3+94+ubuntu22.04.1+deb.sury.org+2 php-mysql
sudo apt-mark php # Prevent apt-get {,dist-}upgrade from changing the version.
sudo service apache2 restart
# Later, routine upgrades will not touch the php version
# They will show it below the "The following packages have been kept back:" line
apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y
apt-get autoremove -y
apt-get autoclean -y
注意不要按错误的顺序运行这些步骤。在运行 apt-mark 之前运行 upgrades 和 dist-upgrades 是适得其反的。这只会固定该命令执行时可用的最新版本,而不是您想要的 8.3 版本。您需要在执行apt-mark
后立即运行apt-get install php=<the version you want>
,或者在验证安装的版本是否是您想要的版本后运行。
这会将软件包保留在精确的 major.minor.patch 版本,包括补丁版本,而不仅仅是主版本或次版本。