2019年2月21日 星期四

[經驗分享]LibreNMS 更新 PHP 7.2 問題與解決方法



LibreNMS 自 2019 二月起,由於 PHP 自己都已經放棄對 5.6 與 7.0 版的支援,因此 LibreNMS 開始要求使用者必須把 PHP 版本更新到 7.1 以上,這表示我原本 PHP 7.0 版也需要進行更新。在沒有更新至 7.1 以上前,LibreNMS 的更新將無法繼續。









更新 PHP 版本

我的作業系統發行版本是 Ubuntu 16.04,要更新 PHP 至 7.2 時需要做點手工。
Ubuntu 準備更新至 PHP 7.2
sudo add-apt-repository ppa:ondrej/php
sudo apt update

Debian 準備更新至 PHP 7.2
sudo apt install apt-transport-https lsb-release ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update


更新完成後,請繼續安裝相關套件,您缺少的不一定會跟我這邊呈現的一樣,但可依此執行。
安裝 PHP 擴充套件
apt install php7.2 php7.2-common php7.2-cli php7.2-fpm
apt install php7.2-mysqlnd 
apt install php7.2-curl 
apt install php7.2-gd
apt install php7.2-zip






更新 LibreNMS 版本

接下來,即可以 daily.sh 將 LibreNMS 進行更新。

不過我的情況是更新完成後,開啟網頁會產生 http 500 錯誤,查看 Librenms 的 log 發現以下訊息:

登入 LibreNMS 錯誤
2019/02/13 10:20:29 [error] 7983#7983: 
  *74 FastCGI sent in stderr: "
  PHP message: PHP Parse error: syntax error, 
  unexpected '=' in /opt/librenms/vendor/laravel/framework/src/Illuminate/Support/Arr.php on line 388" 
  while reading response header from upstream, 
  client: 123.123.123.123, server: xxx.xxx.com.tw,
  request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.0-fpm.sock:", 
  host: "xxx.xxx.xxx.tw" 


問題是出在 PHP 更新版本以後,原本 php7.x-fpm.sock 的位置已經不同,現在更完成的服務所執行是 7.2,我們可以用指令確認一下服務。

查看 php-fpm 服務狀態
service php7.2-fpm status   

依據狀態中顯示的 php7.2-fpm 設定檔位置,前往查看內容。

查看 php7.2-fpm 服務狀態



接著依據 php-fpm.conf 設定檔,內容再追往 pool.d/ 下的設定檔查看。

查看 php-fpm.conf 設定


查看 pool.d/*.conf 設定


來到這裡確認了新版 php7.2 的 .sock 檔名已經改變,成為 /run/php/php7.2-fpm.sock








修正 LibreNMS Web 設定

既然已經知道問題,即可對症下藥,首先開啟 /etc/nginx/conf.d/librenms.conf 這個設定檔,若您是 apache,請開啟相對應的設定檔即可。

開啟後,找到 php-fpm 的相關設定處。

修改 LibreNMS Web 設定


將上圖中原本為 php7.0-fpm.sock 修改為 php7.2-fpm.sock,存檔離開後重新啟動 nginx / apache 服務,即可生效。







結論

LibreNMS 更新頻繁,當出現錯誤時切莫驚慌,通常會在 Web 介面出錯時同時顯示解決方案。若是比較嚴重連 Web 都無法出來的情況,來到 Log 檔中也會顯示相關線索,讓我們能夠以此為引,找到解決問題的方法。

同時提醒,更新至 PHP 7.2 以後,原本如有設定過 PHP 時區者,仍然需要重新修改 php.ini 一次。






參考資料