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.

沒有留言:

張貼留言