2019年4月6日 星期六

樹莓派 Pi 3 主機更換 SD 卡升版

今天將鄉下的 Pi 3 主機升版, 自 2017 年啟用後到現在已兩年, 原來的 8GB SD 卡在安裝測試各式套件與軟體後已不敷使用, 查過 Pi 3 最高支援 32 GB SD 卡, 所以去年底去建國路維碁買了一張 Sandisk SD 卡, 升版為 2018/11/13 版的 Raspbian Stretch 後就沒時間正式更換, 趁連假時間較多換一換, 免得要安裝測試甚麼都沒辦法做.

以下是繼續上回未完的升版作業, 參考下面幾篇 :

樹莓派 Raspbian 升版
# 樹莓派 Wifi 固定 IP 的新作法
利用樹莓派的 Python 程式定時回報外網 IP 的方法 (Heart beat)
樹莓派自動偵測網路斷線時重開機的方法
樹莓派遠端連線 VNC Connect 設定
在樹莓派上安裝 cURL 與設定 Crontab
樹莓派常用的 Linux 指令
樹莓派 Raspberry Pi 文章列表

另外找到一篇寫得很好的 Crontab 教學 :

cron jobs crontab 排程教學


首先是準備中做 : 備份原系統資料, 步驟如下 :

1. 用 WinSCP 備份 /home/pi 底下的檔案到 PC

主要是 reportop2.py 與 reportip3.py 這兩個檔案.

2. 記錄目前的 crontab 內容 :

pi@raspberrypi:~ $ crontab -l
*/10 * * * * /usr/bin/python2 /home/pi/reportip2.py
0 * * * * sudo /usr/local/bin/checkwifi.sh
30 * * * * /usr/bin/python3 /home/pi/reportip3.py

3. 備份 checkwifi.sh 內容 : 

pi@raspberrypi:~ $ cat /usr/local/bin/checkwifi.sh
ping -c4 192.168.2.2 > /dev/null
if [ $? != 0 ]
then
  sudo reboot
fi

事實上 checkwifi.sh 與 reportip2.py, reportip3.py 我都先存在 /home/pi 目錄下, 權限均改為可執行, 另外 checkwifi.sh 須複製到 /usr/local/bin 底下.

接下來就可以進行 SD 卡更換作業, 先下 sudo poweroff 停機, 更換 SD 卡後開機, 然後進行下列程序以恢復自動通知外網 IP 與自動偵測網路斷線時重開機的功能 :

1. 更改固定 IP 與 DNS 伺服器設定 :

將 static routers 改為 192.168.2.2
鄉下的信舟 AP 路由器 IP 是 192.168.2.2, 而高雄的卻是 192.168.2.1.

$ sudo nano /etc/dhcpcd.conf   
$ sudo cat /etc/dhcpcd.conf 
interface wlan0
static ip_address=192.168.2.192 
static routers=192.168.2.2 
static domain_name_servers=192.168.2.2

注意, domain_name_servers 要設與 routers 相同 (即無線基地台 IP), 或者設8.8.8.8 (Google Public DNS) 亦可.

2. 將 reportip2.py, reportip3.py, checkwifi.sh 用 WinSCP 傳回 /home/pi 下.

3. 安裝 dos2unix 將 checkwifi.sh 轉成 UNIX 格式, 改為 775 權限後複製到 /usr/local/bin 底下 :

pi@raspberrypi:~ $ sudo apt-get install dos2unix 
pi@raspberrypi:~ $ dos2unix checkwifi.sh
pi@raspberrypi:~ $ sudo cp checkwifi.sh /usr/local/bin/checkwifi.sh 
pi@raspberrypi:~ $ sudo chmod 775 /usr/local/bin/checkwifi.sh
pi@raspberrypi:~ $ sudo /usr/local/bin/checkwifi.sh 

4. 更改 reportip2.py, reportip3.py 權限為可執行 : 

pi@raspberrypi:~ $ sudo chmod +x /home/pi/reportip2.py
pi@raspberrypi:~ $ sudo chmod +x /home/pi/reportip3.py   

5. 編輯 root 權限的 crontab 定時執行 reportip3.py, checkwifi.sh :

pi@raspberrypi:~ $ sudo crontab -e  (注意, 須用 sudo)
0 * * * * sudo /usr/local/bin/checkwifi.sh
30 * * * * /usr/bin/python3 /home/pi/reportip3.py

這回我捨棄 reportip2.py, 不再比較 IP 變化, 固定每小時回報 IP. 改好 crontab 後在 30 分時檢查有收到郵件通知目前 IP :





6. 登入 VNC 設定 Cloud Connection : 

參考 "樹莓派遠端連線 VNC Connect 設定", 登入 VNC Cloud, 可不需要 IP 即可透過 VNC 雲端連線 Pi 3.

以上就順利完成 SD 卡升級作業了. 用 df -h 查詢 SD 卡使用情形 :

pi@raspberrypi:~ $ df -h
檔案系統        容量  已用  可用 已用% 掛載點
/dev/root        30G  4.5G   24G   17% /
devtmpfs        460M     0  460M    0% /dev
tmpfs           464M  6.8M  457M    2% /dev/shm
tmpfs           464M   18M  446M    4% /run
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           464M     0  464M    0% /sys/fs/cgroup
/dev/mmcblk0p1   44M   23M   22M   51% /boot
tmpfs            93M     0   93M    0% /run/user/1000

用掉 4.5G, 還有 24G 可用, 比以前大多了.

但完成後用瀏覽器上網, 卻發現連 Google 都無法連線, 出現如下錯誤 :

ping : www.google.com.tw 解析名稱時發生暫時性的錯誤 

查詢網路找到下面這篇 :

解决树莓派连载路由器上后无法解析域名导致无法上网的问题

原來還要修改 /etc/resolv.conf, 將原先在高雄用的路由器 IP=192.168.2.1 改為鄉下的 192.168.2.2, 上面那篇是改為 8.8.8.8, 這是 Google Public DNS, 參考 :

Google Public DNS上網跑更快,用戶端趕快更換IPv4 DNS設定8.8.8.8與8.8.4.4

pi@raspberrypi:~ $ ping www.google.com.tw 
ping: www.google.com.tw: 解析名稱時發生暫時性的錯誤 
pi@raspberrypi:~ $ sudo cat /etc/resolv.conf 
# Generated by resolvconf
nameserver 192.168.2.1
pi@raspberrypi:~ $ sudo nano /etc/resolv.conf 
pi@raspberrypi:~ $ sudo cat /etc/resolv.conf 
# Generated by resolvconf
nameserver 192.168.2.2

這樣再 ping 就有回應了, 瀏覽器也能上網了 :

pi@raspberrypi:~ $ ping www.google.com.tw 
PING www.google.com.tw (172.217.27.131) 56(84) bytes of data.
64 bytes from tsa03s02-in-f3.1e100.net (172.217.27.131): icmp_seq=1 ttl=55 time=45.9 ms
64 bytes from tsa03s02-in-f3.1e100.net (172.217.27.131): icmp_seq=2 ttl=55 time=48.8 ms
64 bytes from tsa03s02-in-f3.1e100.net (172.217.27.131): icmp_seq=3 ttl=55 time=48.6 ms
64 bytes from tsa03s02-in-f3.1e100.net (172.217.27.131): icmp_seq=4 ttl=55 time=49.3 ms
--- www.google.com.tw ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 45.925/48.179/49.303/1.342 ms

OK, 現在開始要用這台主機做測試運算了!

2019-04-07 補充 :

下午發現沒收到 IP 信件, 檢查發現 /etc/resolv.conf 內容又被改回 nameserver 192.168.2.1, 研判是有發生系統重啟, 檢查 /etc/dhcpcd.conf 發現昨天忘記改最後一航 static domain_name_servers 設定, 仍然是 192.168.2.1, 導致系統重啟重新設定 /etc/dhcpcd.conf 時又把  /etc/resolv.conf 內容改為 192.168.2.1, 已經修正上面設定程序 1.

沒有留言:

張貼留言