2017年2月26日 星期日

樹莓派重新安裝 Raspbian 作業系統

由於最早買的那塊樹莓派 (Type B) 裡的 MySQL 伺服器前幾天莫名其妙無法啟動, 造成 PHP 爬蟲程式無法運作, 在努力搶修兩天後, 因為對 Linux 系統的瞭解實在太膚淺, 無奈只好宣告放棄, 參見 :

# 樹莓派 MySQL/phpMyAdmin 無法登入問題

最後決定還是將 SD 卡格式化, 重新安裝系統算了. 當然在此之前要先將 PHP 專案全部用 WinSCP 複製到 Windows 下保存, 還有 ssmtp.conf 設定檔也複製到 /home/pi 下, 而 Crontab 內容必須用 nano 開啟後複製到 PC 下的記事本中儲存.

$ sudo cp /etc/ssmtp/ssmtp.conf ssmtp.conf

然後將樹莓派關機, 取下 SD 卡放入讀卡機連接 PC 後, 用 SD formatter 程式進行格式化 :


參考 :

記憶卡格式化/抹除工具 : SD Formatter 4.0

再到樹莓派官網下載最新的 Raspbian 作業系統 zip 檔, 目前是 Rasbian Jessie with Pixel (約 1.5GB), 由於官網頻寬較小, 所以要 2 小時才能完成下載 :



下載完成後解開 zip 得到約 4.3GB 的映像檔 2017-01-11-raspbian-jessie.img, 使用 Win32 Disk Imager (或下載免安裝版 Win32DiskImager-0.9.5-binary.zip) 將此映像檔燒入 SD 卡內 (注意, Device 要選對) :




作業系統燒錄完成後將 SD 卡插回樹莓派, 由於新系統無法使用無頭存取方式 (Headless), 因此必須接 HDMI 到螢幕或電視機, 並且插上無線鍵盤滑鼠組的 USB 接收器後再開機. 由於 Raspbian 預設都是英國 UK 使用者觀點 (keyboard, locale, language, timezone, ...), 因此開機登入 (預設帳號 pi, 密碼 raspberry) 後要先用 raspi-config 指令去更改設定, 否則光是鍵盤配置不同就會讓輸入的字元與期望不同 (例如雙引號在英式鍵盤被解讀為 @).

$ sudo raspi-config

這個設定畫面使用上下箭頭移動高亮度項目, 按 Enter 確認或進入選項, 多選時用 Space 鍵選取, 按 Tab 鍵可在不同按鈕間切換 :


首先第一項是擴充檔案系統 (Expand File System), 由於 Raspbian 映像檔大小為 4.3GB, 燒錄到我使用的 8GB 後, 超出 4.3GB 的部分將存取不到, 執行這項功能目的是讓 Raspbian 的 root partition 能擴充至整張 SD 卡, 不致浪費 4.3GB 以外的空間.

第二項 Change User Password 更改使用者密碼, 預設帳號 pi 的密碼是 raspberry, 為了安全最好改掉, 在舊版時我為了方便改成與帳號 pi 相同, 但在 2017 新版 Raspbian 不讓我這樣改了, 太簡單的不會被接受. 執行這項設定時會跳回命令列, 輸入新密碼並確認後會再回到設定畫面.

第三項 Boot Options 是選擇開機時要進入命令列 CML 或桌面 Desktop, 建議是進入命令列 (都選 B1), 因為桌面較占資源. 我的樹莓派主要是用作 IoT 與 cURL 的伺服器, 所以幾乎都是在命令列操作, 不需要的軟體不安裝, 不需要的軟體不執行, 以節省運算資源.



第四項 Internationalization Options 是區域設定, 其中 I1 是設定語系, 為單純起見, 我只用美式英文, 移動上下鍵至 en_US.UTF-8 UTF-8 時按 Space 鍵選取, 這時前面出現 * 表示已被選取 (再按一次 Space 則取消選取). 可以多選, 例如要加入繁體中文就選 lzh_TW UTF-8 這項, 但我覺得用不到所以不選. 參考 :

樹莓派系統設定 : 區域設置 (Locale)




I2 (Change Timezone) 用來設定時區, 選取 Asia/Taipei :



I3 (Change Keyboard Layout) 是設定鍵盤樣式, Keyboard Model 選 Generic 105-key (Intl) PC, Keyboard Layout 選 English (US); Key to function as AltGr 選 The default for the keyboard layout; Compose key 選 No compose key; 而 Use Control+Alt+Backspace to terminate the x server 則選 No.

I4 (Change WiFi Country) 選擇 Taiwan.

第五項 Enable Camera 選 Yes, 因為我已經買了 PiCam 準備要測試.

第六項超頻不要用跳過.

最後一項 Advanced Options 中目前只要打開 SSH 以便遠端 headless 存取即可.


注意, 2017 版 Raspbian 已經內建 VNC Server, 不須再安裝了. 如果需要用到遠端介面, 只要在系統設定中開啟 VNC 功能, 然後在命令列輸入 vncserver 啟動伺服器即可在 PC 上用 VNC Viewer 遠端存取樹莓派桌面了 (最好要用到時再啟動 VNC 伺服器, 不要開機自動啟動, 免得占用資源).

pi@raspberrypi:~ $ vncserver
VNC(R) Server 5.3.2 (RasPi) (r22607) ARMv6 (Oct 4 2016 11:26:16)
Copyright (C) 2002-2016 RealVNC Ltd.
RealVNC and VNC are trademarks of RealVNC Ltd and are protected by trademark
registrations and/or pending trademark applications in the European Union,
United States of America and other jurisdictions.
Protected by UK patent 2481870; US patent 8760366.
See http://www.realvnc.com for information on VNC.
For third party acknowledgements see:
http://www.realvnc.com/products/vnc/documentation/5.3/acknowledgements.txt

If a desktop environment fails to load for this virtual desktop, please see:
 http://www.realvnc.com/doclink/kb-345?version=5.3.2.22607
Running applications in /etc/vnc/xstartup

VNC Server catchphrase: "Bazaar baboon baker. Athena denial Berlin."
             signature: 53-d4-2f-81-aa-24-bc-0a

Log file is /home/pi/.vnc/raspberrypi:1.log
New desktop is raspberrypi:1 (192.168.2.111:1)   ==> 注意是編號 1 桌面

在遠端 PC 的 VNC Viewer 連線時要注意是第幾個桌面, 這裡是桌面 1 :



VNC Server 預設帳號是 pi, 預設密碼為 raspberry, 可用 vncpasswd 指令修改 (我改成跟樹莓派登入帳密相同) :

pi@raspberrypi:~ $ sudo vncpasswd -print
Password:
Verify:
Password=f602f71dcfdd782a

參考 :

# 以 VNC 和 Raspberry Pi 連線

以上便是 2017 版 Raspbian 的主要系統設定.

接下來是安裝一定會用到的基本軟體 :
  1. zip 與 unzip
  2. Apache+PHP+MySQL 伺服器
  3. PHP cURL
  4. ssmtp 與 mailutils
首先是壓縮解壓縮軟體 zip 與 unzip :

sudo apt-get install zip unzip

pi@raspberrypi:~ $ sudo apt-get install zip unzip
Reading package lists... Done
Building dependency tree
Reading state information... Done
unzip is already the newest version.
The following NEW packages will be installed:
  zip
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 326 kB of archives.
After this operation, 513 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main zip armhf 3.0-8 [326 kB]
Fetched 326 kB in 1s (168 kB/s)
Selecting previously unselected package zip.
(Reading database ... 121836 files and directories currently installed.)
Preparing to unpack .../archives/zip_3.0-8_armhf.deb ...
Unpacking zip (3.0-8) ...
Processing triggers for man-db (2.7.0.2-5) ...
Setting up zip (3.0-8) ...

其次是安裝 Apache+PHP+MySQL 伺服器, 參考 :

# 在樹莓派上架設 PHP+MySQL 網站伺服器

更新套件清單與升級套件這裡就不紀錄了, 因為升級很冗長 (1 個小時喔, 而且這次不會在途中詢問 lightdm.conf 的版本問題了). 其實我覺得不用更新升級, 直接輸入下面兩個指令安裝 Apache 與 PHP 就可以了 : 

$ sudo apt-get install apache2   

$ sudo apt-get install php5 libapache2-mod-php5   

安裝完畢後, /var 底下就會產生 www/html 目錄出來, 這就是放 PHP 網頁檔的地方, 不過須先重啟 Apache 伺服器才會運作 :

$ sudo service apache2 restart

接著安裝 MySQL 資料庫, 執行下列兩個指令 :

$ sudo apt-get install mysql-server mysql-client php5-mysql

$ sudo apt-get install php5-mcrypt

最後是安裝 phpMyAdmin 資料庫管理模組, 因為之前下載的 4.6.6 版 .bz 檔在格式化 SD 卡前有先備份出來, 所以直接用 WinSCP 從 PC 傳回樹莓派的 /home/pi 下用 tar 指令解壓即可, 不需再用 wget 指令下載 (因為 4.6.6 還是最新的版本) :

$ tar -jxf phpMyAdmin-4.6.6-all-languages.tar.bz2  

解開後產生 phpMyAdmin-4.6.6-all-languages 目錄, 實在太長了, 先用 mv 指令將其改為 mysql, 再將 mysql 搬移到 /var/www/html 目錄下 : 

$ mv phpMyAdmin-4.6.6-all-languages mysql
$ sudo mv mysql /var/www/html

最後還必須重啟 Apache 資料庫才能使用 phpMyAdmin :

sudo service apache2 restart

但是, 當我以帳號 root 密碼 mysql 連線到 phpMyAdmin 網站時 (此處是 192.168.111.2/mysql), 卻出現如下錯誤 :

"#1045: Access denied for user 'root'@'localhost' (using password: YES)"


奇怪, 我安裝 MySQL 時指定 root 帳號之密碼為 mysql 啊! 怎會無法登入? 參考了許多網路資料都無法解決. 最後我突然想到, 該不會是當初輸入密碼時是在大寫狀態吧? 果然, 用大寫的 MYSQL 就順利登入了! 所以鍵盤上有無 CAPS LOCK 指示燈很重要!

雖然可以登入 phpMyAdmin 了, 但是要如何把 root 的密碼改回去小寫呢? 我習慣用小寫啊! 我參考下面網站的方法, 順利地更改了 root 的密碼 :

# 解決 MYSQL 登入時,ERROR 1045 (28000) using password: NO 的方法
# mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

pi@raspberrypi:~ $ mysql -u root -p   (以 root 帳號登入)
Enter password:                                   (輸入 MYSQL)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 62
Server version: 5.5.54-0+deb8u1 (Raspbian)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> UPDATE user SET Password=PASSWORD("mysql") WHERE User='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye
pi@raspberrypi:~ $

接下來是安裝 PHP cURL 套件, 參考 :

# 在樹莓派上安裝 cURL 與設定 Crontab

安裝指令如下 :

sudo apt-get install php5-curl

安裝完後須重啟 Apache 伺服器才有效.

$ sudo service apache2 restart

另外要修改 php.ini 將 max_execution_time (執行時間上限) 由預設 30 秒提高為 180 秒 :

sudo nano /etc/php5/apache2/php.ini

最後是安裝 ssmtp, 這是可傳送郵件到 SMTP 伺服器 (例如 Gmail) 的簡單郵件代理程式 MTA (Mail Tranfer Agent) :

安裝指令有兩個 :

$ sudo apt-get install ssmtp
$ sudo apt-get install mailutils

完成後還須編輯 ssmtp.conf 設定檔才能透過 Gmail 傳送郵件 :

sudo nano /etc/ssmtp/ssmtp.conf 

參考 :

在樹莓派上利用 sSMTP 傳送郵件的方法

至此總算完成系統重灌了, 雖然好事多磨, 但也學到了一些經驗. 花了兩天才搞定, 所以趕緊先做個備份, 萬一系統又有問題時就直接從備份映像檔回復, 不用再跑上面程序了.

# 備份樹莓派 SD 卡的方法

2 則留言 :

黑風風兒 提到...

你好:
我目前安裝了
Raspbian Stretch Lite
我想要重新安裝
Raspbian Stretch with desktop and recommended software
這個版本,但是我將sd卡拔出後用電腦完全讀不到sd卡,所以無法格式化換安裝
可以請教一下有何方法刪除系統或是重新安裝?

小狐狸事務所 提到...

您是開機狀態下拔卡嗎? 這樣比較不妥, 應該關閉電源再拔為宜. 用別的讀卡機或另一片 SD 卡確認到底是不是 SD 卡壞掉了.