對於伺服器系統的升級政策,有部份人主張「不做為」,理由多半是「求穩定」,他們以為不變會帶來穩定,但如果機器是對外服務的,不更新就是把自己暴露於資安風險之內,具體的證明請看 CVE 網站,以為不更新等於穩定的人,他們追求的與其說是政策,不如說是是一種自我信仰,如果把這層看似堅定的信仰剝開,會發現在信仰深處的藏著的是「升級了,自己的程式會壞掉」的恐懼,因此他們寧願把資安的風險暴露出來,也不願意更新自己的程式,但若站回經濟的角度看,不更新倒是一種最經濟的策略,如同我以往陳述過的觀點「應用是資產,程式碼是負債」(見〈你的程式是資產還是負債?〉,之所以不願投入更新,根本的原因是這個應用沒有帶來足夠的經濟價值,也就是說它是閒置資產,甚至可能是負債。

儘管本人也是高度經濟導向,但還好本人既不追求這種奇怪的信仰,也不打算把資安寄託於命運,更重視客戶對我們的託付,所以貢獻這篇升級筆記,希望能點化有心卻被信仰所困的有為青年。


我們這次的任務是把裝有 Plesk 的 Ubuntu 16.04 LTS 升級到 Ubuntu 18.04 LTS。

Ubuntu 是 Linux 的發行版之一,對 Linux 有接觸的人應該都知道;而 Plesk 則是 web 化的伺服器管理工具,包括 virtual host、防火牆、TLS 等與伺服器相關的組態設定都可以透過 Plesk 的 web 環境來操作,相較於台灣較多人用的 cPanel,個人是較偏好 Plesk。


在我手邊的一些機台,原本還是跑 Ubuntu 16.04,然而 Ubuntu 16.04 是 2016 年的系統,目前已經超過了 LTS 的常態維護週期:

Ubuntu Linux Lifecycle

來源:Ubuntu

而 Plesk 自 Plesk Obsidian 18.0.35 起也放下了對 Ubuntu 16.04 LTS 的支援,因此升級到 Ubuntu 18.04 LTS 是勢在必行。

先說明大步驟如下:

  1. 升級 Ubuntu
  2. 重新安裝 Plesk
  3. 小錯誤修正

看起來好像很普通,但其中有一些小細節需要注意,詳見下文。

升級 Ubuntu

在升級到 Ubuntu 18.04 前,先把 Ubuntu 16.04 更新到最新的狀態:

sudo apt upgrade

更新後,視需要重開機,然後才跑升級程序:

sudo do-release-upgrade

升級的過程頗長,中間可能會遇到 GRUB、Apache、OpenSSH、AppArmor、PAM 等系統元件的組態檔是否要取代或保留的提問,一般是會選擇讓原本電腦內的組態檔保留,避免升級後設定跑掉。

升級完之後重新開機,重開機之後,Plesk 納管的網站都還活著,然而問題是 Plesk 自己的入口變成卻 404,幸好 Ubuntu Linux 的 SSH 還進得去。

SSH 登入後,試著跑一些 plesk 的子命令都會收到無此工具的錯誤,例如下面這個錯誤訊息:

Unknown Plesk command-line utility: "admin"

可能是在 Ubuntu 升級的過程中被刪了或斷了連結,但不要就此放棄,只要再裝一次 Plesk 就可以修復。

重新安裝 Plesk

秉持著救機一命勝造七級浮屠的慈悲,我們再安裝一次 Plesk。

然而在裝 Plesk 前,得先還原 Plesk 的資料庫 psa,否則後面的安裝程序會找不到 psa 而出錯。

還原 psa 資料庫

資料庫的備份在 /var/lib/psa/dumps/,進去要切換成 root 身份:

sudo su -

進到 root 的 shell 後進入該目錄:

cd /var/lib/psa/dumps

找出有 psa database 的備份檔:

zgrep "Current Database:" mysql.daily* | grep psa

應該會有這些:

mysql.daily.dump.0.gz:-- Current Database: `psa`
mysql.daily.dump.1.gz:-- Current Database: `psa`
mysql.daily.dump.2.gz:-- Current Database: `psa`
mysql.daily.dump.3.gz:-- Current Database: `psa`
...

上列結果內的 mysql.daily.dump.0.gz 這份檔案是最近的備份,把它還原回去:


zcat mysql.daily.dump.0.gz | \
sed -n '/-- Current Database: `psa`/,/-- Current Database:*/p' | \
MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysql -uadmin

還原完成後,再來跑 Plesk 安裝程序。

安裝 Plesk

Plesk 的安裝程式很聰明,它是採取保留原組態為主的設計,不會裝完又全機歸零。

先下載安裝程式:

wget https://autoinstall.plesk.com/plesk-installer

再讓它可執行:

chmod +x ./plesk-installer

執行它:

sudo sh ./plesk-installer

安裝步驟會問到到我們是要安裝所有的更新還是要增加或移除 Plesk 元件呢?這裡我們選「Install the latest available update」安裝所有的更新。

另外我在安裝期間會遇到某些套件下載失敗導致安裝失敗的問題,只要再跑一次安裝程式就可以重來。

如果前面的 psa 資料庫沒有先還原的話,安裝程式最後的組態階段就會有這行錯誤訊息:

ERROR 1049 (42000): Unknown database 'psa'

如果有事先還原 psa 資料庫的話,應該可以是順順利利的完成。

裝完之後為了安心起見,先重開機一次,順便喝個水舒緩一下緊張的情緒。

確認成果與小錯誤修正

重開機之後,再次用瀏覽器確認 Plesk 的納管網站及 Plesk 自己的入口是否可以正確運作,現在看起來都是正常的,賀!

但實際上有些小錯誤還要再修正,目前發現的是 Plesk 防火牆元件異常,這可以進 Plesk 的組件管理頁裝回來,或者是移除掉。

參考資料