2026年4月25日 星期六

又又又重灌樹莓派1代啦

最近好像一年來一次啊
不過這次也沒辦法
某天發現樹莓派1的網站連不進去
本想說又是週期性當機啦
然後拔電重插數次都沒反應
接上螢幕,最後一行出現
end Kernel panic -- not syncing: VFS: unable to  mount root fs on unknown block(179,2)
Kernel panic,這看來就非常不妙,後面的理由就是無法載入root的fs(檔案系統)
斷電,把SD卡拿到其它台樹莓派讀也看不到EXT4的磁碟槽
這張SD卡確定掛點了
這是跟這台1代B版樹莓派一起購入的卡片
經過多年的使用與重灌
加上今年初多次刪除並重灌BBS的摧殘後
把到用到掛點了
感謝它多年的工作,該淘汰了


(↓↓↓以下是重灌前一些處置,可以跳過↓↓↓)
裡面的資料好險是沒有非常的重要
但講是這樣講啦,還是想試著救回來看看
幸好現在有AI可以協助這困難的工作
在與AI來來回回個好幾次對話後,可惜不算成功地救了一些殘破的資料回來
也就是大概只有副檔名是對的,檔名亂七八糟的檔案
用notepad的在檔案中尋找功能,把幾個設定檔給撈出來後
就開始了重灌之路

在與AI對談的幾次對話之中,AI不時強烈建議
要嘛把資料放到更穩定的硬體上,像傳統硬碟,SSD或隨身碟
要嘛就要買比較貴的耐久型SD卡
要在輕薄的樹莓派旁再放傳統硬碟還是SSD實在嫌麻煩
就選了耐久型SD卡來灌新系統
其實,在買新SD卡之前,本來是有想省錢一點,把之前一些舊的SD卡拿出來用
無奈這些都是有用過行車記錄器後退下來了
雖然時間不長,都是買64GB以上新卡就退了
但平時寫寫一些資料還行
拿來灌樹莓派用沒多久就又有問題了
還是求穩定一點好,只好開買新卡片啦

前面提到,在新卡片之前,就有試著先重灌(拿舊卡來用)了
目前在官方目前的燒錄器上,bulleyes的選項沒了
只剩下bookworm與最新的Trixie
那沒什麼好選的,在樹莓派1代上跑,舊的還是比較好的選項
下面是重灌完bookworm lite版的狀態,apache與mariadb都架好了
CPU使用率約3.2%,記憶體吃掉了127M/427M


其實也還行
就決定再昇級到新的版次,來到了bookworm
(↑↑↑處理結束,進正題↑↑↑)

新的耐用型SD卡選用的是威剛的
因為是最便宜的選項,PChome上面一張是699元,應該不會太差吧
這次第一次改用官方軟體安裝系統
不得不說,這官方軟體方便多了
最主要是使用者與SSH服務可以先設定


這樣就不用接螢幕與鍵盤實體處理後再轉主要的PC連線,可以直接連線了
如跳過的部分所說,這次使用的系統是bookworm
雖然使用狀況還撐得住,不過準備連線時還是略感頓頓的
連線後,不用多說,還是先更新再說
sudo apt update
sudo apt upgrade

接著進入raspi-config裡,將在地化選項給打開
這樣一些提示才會有中文說明
sudo raspi-config
點選Localisation Options→L1 Locale
然後選擇zh_TW.UTF-8


最後再選擇一次,就會執行,這要花一點時間
之後退出raspi-config
記得重開機
sudo reboot
這樣中文的系統提示與部分軟體就會有中文指示了

接下來一鍵把apache2、PHP與mariadb全部裝完
sudo apt install mariadb-server apache2 php -y

這樣習慣的LAMP就成形了
然後先設定mariadb的部分
執行專屬安全掃瞄sudo mysql_secure_installation
重設root密碼與清除其它測試用的資料與設定
上次重灌時,有暫時開放root可以讓外部連進來
這次就不可能啦
照著之前安全管理的學習,另建使用者
然後讓它只管理必須的資料庫,設定部分就結案了
至於資料的部分,就大失敗了
不知道是因為換新的版本所以直接檔案替換這招失敗了
還是救回來的檔案其實並不完整
總之除了結構不用重設外,資料流失了一半左右
最後是靠著外部的筆記,重建損失的資料
真累人,下次記得一定要定期備份啊

接下來處理一下apache2的設定
不過這次,一些模組的打開,就不再使用link的方式了
使用這個指令a2enmod
sudo a2enmod ssl socache_shmcb 
這樣就將SSL與socache_schmcb的服務給打開了
不用再打之前長長的那幾串字
再把救出來的conf放回去
還有準備好之前的網頁資料
重開apache2的服務,原本的網頁就回來啦
sudo systemctl restart apache2

php的部分似乎就沒什麼好設定的
這次不打算裝phpmyadmin了
平常這功能很少用,也沒在更新,留著只是徒留漏洞而已
偶爾真的要改一些東西,其實直接登入mariadb
用傳統的sql指令也夠了

接著就是恢復之前自己寫的python服務了
一開始就遇到了新困境,無法使用pip安裝python套件...
一查,原來bookworm之後,轉向使用者架設虛擬環境來管理python套件
其實也不是不能裝全域的套件啦,只是如果全域安裝的方式,轉向用apt管理
一般使用者,請在自己的家目錄,或專案的目錄下,自建python的虛擬環境
進到環境之後,再跑pip install處理
麻煩但是可以理解,就乖乖地照著做
使用python -m venv .venv
然後進去虛擬環境後執行
pip install websockets
pip install aiohttp
前者成功了,不過後者aiohttp安裝遇到了問題
aiohttp的安裝,需要編譯才可以執行,少了python3-dev的套件無法編譯
只好執行sudo apt install python3-dev後,再跑一次pip install aiohttp才完成

接著就是要把之前寫的程式進系統服務
之前都是寫在rc.local
這次在年初架設BBS站後,學會systemd後決定轉向使用systemd來管理了
檔名叫py_srv.service內容如下

[Unit]
Description=Python Websocket Service
# 確保網路啟動後才執行此服務
After=network.target

[Service]
# 設定執行此服務的使用者 (請替換成自己的使用者)
User=user_id
Group=user_group

# 設定工作目錄 (程式所在的資料夾)
WorkingDirectory=/home/user_id

# 啟動指令 (請確認 python3 的絕對路徑,要確認虛擬環境裝在哪裡,範例用虛擬環境在家目錄下執行)
# -u 參數很重要,它代表 "Unbuffered",讓 Log 可以即時輸出
ExecStart=/home/user_id/.venv/python3 -u py_service_ws.py

# 如果程式崩潰,自動重新啟動
Restart=always
# 崩潰後等待 5 秒再重啟
RestartSec=5

# 設定環境變數 (可選)
Environment=PYTHONUNBUFFERED=1

[Install]
# 設定在多使用者模式下啟用 (標準伺服器模式)
WantedBy=multi-user.target


然後把檔案放在/etc/systemd/system後
先重新載入所有的服務內容
sudo systemctl daemon-reload
然後系統增加py_srv服務,開機後才會啟動
sudo systemctl enable py_srv.service
所以直接啟動這個服務
sudo systemctl start py_srv.service
今年的系統重灌完成!
再跑到系統不能跑為止吧

沒有留言: