升級裝有 Plesk 的 Ubuntu 16.04
Tags: ubuntu, plesk
Published: 2021-11-24 07:54:49

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

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

---

我們這次的任務是把裝有 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 的常態維護週期：

<figure>

![Ubuntu Linux Lifecycle](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0xolkyhqi83w1y9w8zak.png)
<figcaption>來源：Ubuntu</figcaption>
</figure>

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

{% youtube BhHdmugCPjo %}

先說明大步驟如下：

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

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

## 升級 Ubuntu

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

```sh
sudo apt upgrade
```

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

```sh
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 身份：

```sh
sudo su -
```

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

```sh
cd /var/lib/psa/dumps
```

找出有 `psa` database 的備份檔：

```bash
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 這份檔案是最近的備份，把它還原回去：

```sh

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 的組件管理頁裝回來，或者是移除掉。

## 參考資料

- [Unable to access Plesk: Unknown database 'psa'](https://support.plesk.com/hc/en-us/articles/213369589-Unable-to-access-Plesk-Unknown-database-psa-)
- [Plesk is not accessible: Failed opening required 'auth.php'](https://support.plesk.com/hc/en-us/articles/115000198773-Plesk-is-not-accessible-Failed-opening-required-auth-php-)