「點數銀行」是目前任職服務於高雄市鎮昌國小陳憲宏老師與高雄市四維國小陳惠如老師兩人合作開發而成系統。N年前(N >10)便已上線服務,只不過當時好像只服務了兩個班級,當年在我厚臉皮的遊說下,約莫在 2012 年間將整個系統主機放置到高雄市資訊教育中心,開始無償服務提供給更多有興趣使用的老師使用。
後來,一方面由於系統穩定,所以根本不需要我去特別關照;二方面我個人也離開了相關職位,所以更不須要去說三道四,以免造成別人的困擾。所以該系統也就逐漸淡出我的大腦。
一直到最近突然收到某消息,大意便是因為該系統已經很老舊,許多該做的系統漏洞完全沒有修補。而若不處理,為避免該機器成為整個單位的資安漏洞,「關站」將是唯一之路。
收到此訊息之後,怎麼辦?很簡單,沒有第二條路,網站全面升級。
- 作業系統由 Ubuntu 9.04 (Jaunty Jackalope ) 換成 Rocky Linux release 8.6 (Green Obsidian)。
- 網頁系統,Apache httpd 2.4.37。
- 配合目前資安潮流,為網站申請憑證,連線方式成為 https 中一員。
- PHP 使用 php56 (考量當時 點數銀行開發的程式碼 相容性問題)
- 資料庫升級至 mariadb-server-10.3.32-2
- 程式部份,語系編碼由 Big5 全面更改成 UTF8
- 依舊每晚固定時間對「資料庫」與「網站系統」進行備份。
系統剛安裝完成之後,需要設定時區,以及自動對時。
時區設定: sudo timedatectl set-timezone Asia/Taipei
啟動 ntp 服務: sudo timedatectl set-ntp on
Rocky Linux 用 chrony 來取代 ntpdate,且程式組也已內建,所以只要設定「校時伺服器」位址便可。
sudo vim /etc/chrony.conf
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#pool 2.pool.ntp.org iburst
server time.stdtime.gov.tw
server time.kh.edu.tw
啟動 網路校時服務: sudo systemctl restart chronyd
因為點數銀行系統開發當時是使用 mysql5.xxx,以當時有些寫法對目前的資料庫來說會顯得比較「隨性(粗暴)」,而目前的資料庫系統預設都已有自我保護機制,所以會造成程式執行錯誤,例如出現「Field ‘id’ doesn’t have a default value」等錯誤。
解決方式:在 /etc/my.cnf.d/mariadb-server.cnf 中加入 sql_mode=”ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
意思為採用非嚴格模式,讓沒有設定預設值的非null欄位可以有預設值。
而 mariadb server 的預設值為 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
使用 iconv 負責進行語系轉碼。 sed / awk 可以很快的進行檔案字串置換與檔案轉換的工作。
在系統升級完成之後,才赫然發現,原來這個主機系統已活過 10 年,難怪憲宏老師跟我說,再來 10 年的話語。
衷心感謝成就這一切的機緣,以及其中的默默付出努力的各位重要關係人。
參考資源:
- Rocky Linux 安裝 Apache, PHP, MariaDB (LAMP)
- How to Disable or Turn Off SELinux on Rocky Linux 8
- 网络配置
https://docs.rockylinux.org/zh/guides/network/basic_network_configuration/
https://www.ltsplus.com/linux/rocky-linux-install-apache-php-mariadb-lamp
https://www.how2shout.com/linux/how-to-disable-or-turn-off-selinux-on-rocky-linux-8/