2017-10-09

Raspberry Pi 3 的系統監控與自製散熱解決方案

通常樹莓派都是以 Headless computer (沒有外接螢幕與鍵盤滑鼠)的方式運作,而用作家庭物聯網(IoT)伺服器、監視器主機或是檔案伺服器的情況也是一樣,通常都是把樹莓派放在一些比較難以觸及或看到的地方,可能掛在高處,也可能放在數據機旁邊

而這種應用環境會出現一些運用上的問題,像是最常見的散熱與系統運作問題,首先講一下散熱問題

Raspberry Pi 3 Model B 來說,採用的 BCM2835 SoC 在待機溫度上已經達到了 48.7°C,滿載溫度也有 55.7°C,負責 USB 埠與網路功能的 LAN9512 也可以達到 62.4°C 的高溫,在長時間的運作下可能會出現運作緩慢甚至當機的情況,因此要在晶片上黏貼散熱片,並視情況加上風扇去排出累積的熱量

下面就是各種嘗試過的散熱方案


2017_09_02_170830
一開始就有在背面的記憶體顆粒貼上散熱片
2017_09_02_170800
系統晶片 BCM2835 SoC 與負載時散發高溫的 LAN9512 也有貼上
2017_09_04_124840
省略上蓋直接放進自製支撐架
2017_09_13_020040
想加裝風扇所以弄了自製支撐架第二代
2017_09_13_020310
使用一顆六公分的風扇,驅動電壓五伏特的特規品
2017_09_13_111910
結果風量是有了,但風切聲很大,到了沒有安裝護罩都很吵雜的程度
2017_09_15_222428
只好再弄了自製支撐架第三代,改用九公分風扇
2017_09_15_222446
一開始採購的轉接線太長要繞著支撐架內部
2017_10_05_010054
改用自製轉接頭之後就可以直接接上

散熱問題解決之後,再來是軟體跟系統上的監控,你可以使用一些自動化腳本來監控,並在發生異常時提醒你去處理,當然樹莓派內建的硬體看門狗也是必須的,安裝看門狗之後可以在系統負載異常、處理器溫度過高、網路流量異常時重新啟動,端看你怎麼去設定監控函數

而我也額外寫了一些基於 Python 的小程式來監控,並使用 Crontab 來達成自動化運作,並在異常時通知我,我把撰寫好的程式放在 GitHub

而透過 Crontab 就可以讓這些基於 Python 的小程式自動運作



在排程好的時間就可以自動寄出系統溫度報告,並且在指定程式異常時發送通知(這是示範

再來講一下如何達成自動監控指定程式

在 Linux 系統中有所謂的 ps 指令,可以列出運作中的程式與系統程序,而透過調整參數,可以取出你想要的結果,再加以過濾,並搭配判斷式,就可以做出一定的操作

當然這邊是去查詢定程式是否在系統層面上正常運作(沒有當機或是凍結),如果是程式內部錯誤可能沒辦法偵測

簡單示範,輸入 ps x 可以看到運作中的程式與細部狀態

添加 grep 可以篩選出指定的程式

撰寫成 Python 腳本擷取指定輸出

再加上一些替換子來去掉我不要的字符

再加入判斷式去檢查是不是有符合我指定的字串

上面的範例是為了偵測 Hentai@Home 這套分散式運算系統是不是運作正常,因此我只要針對 HentaiAtHome.jar 這個程式作監測就好

將剛剛的判斷輸出改寫成電子郵件發送,就可以在偵測到異常時回報給我,並附上用於檢測的輸出結果來讓我判斷是不是真的有問題,還是說單純的誤報

只要輸出結果是 Sjava 則代表程式正常運作中,輸出 Sgrep 則是程式不在運作,其餘輸出則是程式當機或是凍結

這邊稍微修改一下判斷式,所以會把正常的狀況判定成異常並且回報



執行那個 Python 腳本就會輸出這樣的結果

理論上這樣就可以去偵測異常了,但我在兩個禮拜的運轉中有時會收到虛假的異常回報,顯示程式不在運作,但去檢查 Hentai@Home 頁面卻是正常的,因此做了一點研究


有時會收到這樣的異常回報,但程式其實是正常的

結果似乎是有時第一行輸出跟第二行輸出的順序會反過來,而 awk 只會抓取第一行,導致判斷式認為發生異常

而解決方法很簡單又暴力,直接兩行一起輸出再過濾跟判斷就好

將 awk 函數改成兩行都抓取,用替換子去掉我不要的字符,包含換行字符

再讓判斷式去搜尋 Sjava 就好

執行 Python 腳本就會輸出這樣的結果,再把判斷輸出改寫成電子郵件發送就好

2017-09-16

在 Raspberry Pi 3 上以 Raspbian 架設 Hentai@Home 分散式運算系統

在前面一篇文章已經示範了用 Linux VPS 來運行 Hentai@Home ,而這次用被稱作樹莓派(官方名稱:Raspberry Pi )的開發用單板電腦來運行

或許很多人會想樹莓派跟一般電腦的架構完全不一樣( ARM 架構的 Broadcom BCM2837 之於一般電腦的 x86-64 處理器)怎麼可能跑這些東西,但其實只要是使用跨平台的方式去撰寫,比如用 Python 或是 Qt 模式去撰寫的軟體通常都可以在各種平台上運行,而 Hentai@Home 這種運行在 Java 架構上的軟體更不是問題

這篇省略了一些前面講過的東西,像是設定 DHCP 保留,將樹莓派的內部網路位址固定,以及設定 DHCP/NAT 的傳輸埠指定,將特定的傳輸埠開放到網路( WAN )上、並轉發給內部網路( LAN )的指定網路位址,以及申請 Hentai@Home 客戶端、網頁上設定客戶端的部分,請參閱前一篇文章

首先來講一下要運行 Hentai@Home,在樹莓派所運行的 Raspbian 上需要安裝的軟體與設定


接著硬體的部分,樹莓派是使用 MicroSD 記憶卡當作系統硬碟來運作,即使用大容量的記憶卡

考慮到頻繁的讀寫還是建議使用外接硬碟,畢竟跑 Hentai@Home 就是要越大的檔案快取空間( Files Served / Maximum Disk Cache Size )越好,弄顆有一定容量的外接硬碟是最佳解

手上有一顆小容量的固態硬碟,可以在讀取速度跟耗電量上取得不錯的平衡,畢竟樹莓派的 USB 埠最大輸出電流量只能到 1200 mAh


2017_10_05_010030
左邊是樹莓派跟它的風扇,右邊是中華電信光世代的數據機
2017_10_05_010044
快門速度的關係,讓風扇看起來像停轉
2017_10_05_010158
這條是自製的 USB 轉 3 Pin 風扇座
2017_10_05_010054
樹莓派跟自製風扇罩
2017_10_05_010104
用自製迷你轉接頭供電給自己的風扇,也供電給數據機冷卻風扇、
2017_10_05_010140
固態硬碟跟外接盒用 3M 魔鬼氈固定在櫃子頂部

接下來要把外接的固態硬碟掛載到樹莓派的系統,並能被運行的 Raspbian 系統存取使用

也就是說要把外接硬碟內部資料清空、刪除原先的分隔表、建立新的分割表與分割區,因此請確定這顆硬碟裡面沒有你需要的資料


依照上面的操作,重新開機後外接硬碟應該就會掛載到指定資料夾下了

接著我們來跟前面一篇文章一樣,下載並安裝 Hentai@Home


填入客戶端編號與金鑰後,沒意外的話 Hentai@Home 已經開始順利執行了



在 E-hentai 可以看到樹莓派上的客戶端已經連線,兩個客戶端 6000 KBps 大約是亞洲區的百分之二運算力

接著就是等著 Gallery Points 跟 Hath 入袋了

通常樹莓派都是以 Headless computer (沒有外接螢幕與鍵盤滑鼠)的方式運作,因此可以用一些自動化腳本來監控並在發生異常時提醒你去處理,當然樹莓派內建的硬體看門狗也是必須的,詳細請參考這篇文章

而我也額外寫了一些基於 Python 的小程式來監控,並使用 Crontab 來達成自動化運作,並在異常時通知我,我把撰寫好的程式放在 GitHub 上了



使用 Crontab 來自動化運作,定時回報處理器溫度與在 Hentai@Home 異常時回報

2017-09-12

在 ConoHa 上以 Ubuntu 16.04 LTS 架設 Hentai@Home 分散式運算系統

exhentai
這張應該可以稱作是另類的世界名畫了

應該蠻多人知道所謂「E 變態」或是那個暗號「熊貓」,這篇就是在講這個

所謂的「E 變態」,全名是 E-hentai,是一個非營利性質的圖片分享平台,註冊用戶可以上傳同人誌、畫冊掃圖、Cosplay 攝影集等資源,當然網站的內容大多數是工口向的同人本就是了

在 E-hentai 充滿了紳士們最愛的工口向同人本,還有一部分的歐美作品、正常向同人本以及連載漫畫和原畫集、設定集的掃圖,偶爾會有少量 Cosplay 攝影集,E-hentai 也是最大的同人本資源分享社群網站、最大的同人本翻譯資源集散地

這邊就不講給新手聽了,來講一點高手向的東西

Hentai@Home

看到 @Home 這個關鍵字,熟悉電腦與網路歷史的人應該已經猜到了,是的,Hentai@Home 是一款分散式的運算軟體,將 P2P 使用者檔案共享技術與知名的分散式運算軟體 SETI@home 做融合,讓一般電腦都可以幫 E-hentai 網站分攤龐大的運算量與使用者流量

當然純粹的消耗頻寬與運算資源就跟作慈善沒什麼兩樣,因此 Hentai@Home 提供了很多的福利,以惠於提供運算能力的人在 E-hentai 經濟圈裡面成為大佬,要說最直接的福利,分別是跟山一樣的 Gallery Points( GP ),強大的 Hath 與 H@H Downloader

所謂 Gallery Points( GP )是 E-hentai 經濟圈裡面的基礎貨幣,最主要的用途是拿來下載圖庫(以打包的方式)與重置檢視影像的限制計數器(算是一種減輕伺服器負載的作法,而 GP 可以重設計數器),而每當一個使用者透過你擁有的 Hentai@Home 客戶端存取圖庫,每存取一次你就可以獲得 1 GP,別小看累積的數字,一天累積 40,000 GP 是可以的甚至更高,也就是說如果你沒有玩 HV 這個文字冒險遊戲的話,跑 Hentai@Home 賺到的 GP 你這輩子可能花不太完

而 Hentai at Home( Hath )是 E-hentai 經濟圈裡面的最具價值的貨幣,它可以兌換某些要透過實體貨幣(當然要先轉成 BTC 等數位貨幣才能餵到 E-hentai 裡面)才能獲得的功能,比如說網站內建的去廣告,簡單來說就是用你的電腦來幫你賺點福利

而 H@H Downloader 則是讓你可以直接下載圖庫到你的 Hentai@Home 裡面,只要簡單按個鍵,晚點去收成就好,下載的檔案會以資料夾(目錄)的方式存放,如果是遠端主機的話可以直接開 SFTP 把它拉回自己的電腦

講了這麼多,再來就講一下怎麼在遠端主機架設 Hentai@Home,剛好一直有一台在運行 OpenVPN-AS 的 Ubuntu Server,稍微拉一點資源出來跑 Hentai@Home 也是可以,其實單板機都跑的動,不過這是後話

首先是前置作業

接著是如何申請



首先打開 E-hentai 網站,在 My Home 選擇 Hentai@Home 來申請客戶端

申請 Hentai@Home 需要幾個條件,分別是:

  • 每秒最大爆發頻寬至少 200KB
  • 每小時總傳輸量至少 300MB
  • 資料儲存容量至少 10GB
  • 需要 SpeedTest 測試結果佐證


接下來講如何申請



把剛剛的測試結果貼在最下面,然後填入你想提供的頻寬、流量與容量,申請成功會看到綠色字樣

等個一兩天就會看到通過申請的字樣,這時可以進入細部設定頁面,最上面有重要的編號與金鑰

再來是比較複雜的建立 Hentai@Home 運作環境,我在找相關的中文資料時只有找到中國大陸那邊的資料,雖然照著弄是可以跑,但是後來想想,是踏了蠻多冤枉路的,但畢竟各家主機商的預設環境不一樣,細部難免會有變化

下載、安裝與第一次執行 Hentai@Home 請參照

沒意外的話 Hentai@Home 已經開始順利執行了,接著就可以開始等待 GP 跟 Hath 入袋了

如果關閉終端機是會讓 Hentai@Home 停止運作的,建議在 Hentai@Home 順利開始運作後先使用 Ctrl+C 終止一次 Hentai@Home,安裝 screen 這個神奇的終端機分頁套件讓 Hentai@Home 在虛擬分頁裡運作

更多的資訊,可以參閱英文資料 Hentai@HomeInstalling H@H on Ubuntu

2017-09-04

在 Raspberry Pi 樹莓派上實作 PiVPN 個人 OpenVPN 伺服器

在台灣被稱作樹莓派(官方名稱:Raspberry Pi )的開發用單板電腦其實有很多種用法,從低成本電腦到各類物聯網( IoT )裝置的基礎系統都可以,當然也有很多開發者把它當作小型伺服器來使用,運行 FTP/SFTP 伺服器做本地備份端,或是運行本地端的 Proxy Server、印表機伺服器等等,甚至也有人把它當作網頁伺服器來使用,安裝 Apache HTTP Server 跟其他必須軟體套件就好

之前是有買過一次樹莓派,不過是拿來當桌上的超小型迷你電腦,只要安裝小螢幕跟客製機殼,插上電源、連接鍵盤滑鼠就是一台小型桌上電腦,缺點就是那螢幕的解析度實在是慘不忍睹(HiRES+, 480 x 320 ),但看在 Waveshare 的螢幕這麼便宜,還有電阻式觸控的功能,就別計較了吧,之後大概會把它改裝成天氣顯示器

這次則是再額外買了一片樹莓派,不過這次打算讓他運行 OpenVPN 伺服器,讓使用公共無線熱點的裝置可以使用加密連線,強化安全性,當然這也是私人 OpenVPN 伺服器的優點之一,另一個優點是在學術網路或企業對外網路那種網路連線會被管制的地方可以方便做一些操作


2017_09_02_170854
Raspberry Pi 3 Model B,內建 10/100Mbps 乙太網介面,而非前代是用內建 USB 通道轉接
2017_09_02_170830
在主要晶片上都黏貼散熱片,要讓樹莓派長時間運作還是安裝散熱片比較妥當
2017_09_02_170800
這款自行採購的黑色散熱片面積比晶片大,所以使用官方的塑膠機殼時要稍微切一下
2017_09_02_170652
蓋上蓋子,蓋子跟機殼間是有設計通風孔的
2017_09_02_231950
在俗稱小烏龜的中華電信 vDSL 數據機旁邊用 PP 瓦楞板做了一個支架給樹莓派,注意有留燈號跟電源的開口

在這邊來額外分享一下自製的數據機散熱方案

雖然說自從升級到光世代 100M/40M 而換成 vDSL 數據機( 使用光纖到交換機的 FTTE 模式,所以不是光纖數據機)之後,數據機熱到當機這個情況沒遇過,但有鑑於以前 ADSL 時代真的遇過熱到當機,所以一直有注意數據機散熱的問題,在之前整理線材而把數據機移動到家具櫃裡面時就做了主動式散熱

而這次則是趁著把樹莓派安裝到數據機旁邊時做了一些小改裝,並重新整理一下網路線與電源線

使用工具是繞線管、束帶、黏貼式固定座,而整線邏輯不外乎注意立體交錯順序、線材角度、綑綁鬆緊度


2017_09_02_231950
剛安裝好樹莓派時,數據機散熱方案還是用一次性束帶固定風扇
2017_09_06_005428
把之前使用一次性束帶的風扇改用螺絲、螺母與墊片固定
2017_09_06_005444
風扇架後方有強化用的、不同走向的加強條
2017_09_06_011344
將冷空氣從上方吹入數據機上方的開口,達成強制冷卻的效果
2017_09_06_011334
故意選用較長的螺絲是方便固定風扇護網、之後也可以換成金屬材質的護罩
2017_09_06_011408
風扇架一側使用魔鬼氈膠條,方便打開風扇架清理積塵或調整網路線
2017_09_09_111716
電源線與數據線隔離,後面走樹莓派與風扇的電源線,網路線走前面,vDSL 的銅纜與接線盒在頂部
2017_09_04_125022
紅色是中華電信 MOD 專線,灰色連接 AirPort Extreme 的 WAN,藍色是樹莓派,白色是 Apple TV,綠色是分享器橋接

硬體部分差不多就是這樣,再來是軟體的部分,AirPort Extreme 上要作傳輸埠指定,樹莓派則要安裝必須的軟體才能上線服務

DHCP/NAT 的傳輸埠指定可以將特定的傳輸埠開放到網路( WAN )上、並轉發給內部網路( LAN )的指定裝置,藉由傳輸埠指定可以讓使用者從外部連線回到內部網路,在這裡就是讓樹莓派可以從遠端操作,並讓 OpenVPN 服務可以運作

而 AirPort Extreme 的傳輸埠指定需要與設定 DHCP 保留,這樣樹莓派的內部網路位址才不會亂跳而讓傳輸埠指定失效

在這邊要強調的是,管理者密碼一定要設定為強密碼,因為一開啟 SSH 連線功能後,幾乎是立刻會被網路上的惡意程式試探登入,在安裝好系統之後一定要設定好強密碼再開啟 SSH 連線功能,否則在設定傳輸埠指定後你的樹莓派幾乎是在網路上裸奔


首先是環境準備

安裝 fail2ban

接著是網路設定的部分



首先設定 DHCP 保留,通常用 MAC 位址去綁定,DHCP 保留設定依照各家廠商而不同

接著設定給 SSH 加密傳輸的傳輸埠指定,埠號 22,指定到你剛剛保留給樹莓派的內部網路位址去

接著安裝 PiVPN

記得把在安裝過程中設定給 OpenVPN 的傳輸埠指定到你剛剛保留給樹莓派的內部網路位址去



如果剛剛用預設的 UDP 1194,就這樣設定

沒意外的話在 Windows/Mac 上都可以正常使用

再來是如何增加新使用者

基本上到這裡應該就沒問題了,但人生總是會有一堆意外,跟一堆狗屎相容性問題

我自己在 Windows / macOS 上是使用付費的第三方 VPN 管理軟體 Viscosity,而 iOS 上則是使用 OpenVPN 官方的應用程式

而官方的應用程式件在匯入 PiVPN 的設定檔後會在連線時提示異常而無法使用

PolarSSL: error parsing config private key : PKCS5 - Requested encryption or digest alg not available

這是不同廠商或是開源社群在實作 OpenVPN 時在加密演算法的相容性問題,在使用行動裝置上 OpenVPN 官方提供的管理套件時可能會有點問題,主要是行動裝置支援的加密演算法有限

接著開始找解法,有的解法是說是說直接改金鑰字串的檔頭跟檔尾,但實作去嘗試是失敗的,會跑另外一個 PEM 的錯誤訊息

看了一堆外國社群的解法後,發現最佳解法是在 Reddit 論壇上的樹莓派開發社群,只能說想出這個解法的真的是個天才




在 OpenVPN 官方發行的行動裝置客戶端上請用上面的解法

2017-07-26

2017.07.26 飛行紀錄

飛行日期:2017.07.26
航班編號:CI721
班機編號:B-18052
航班機種:Boeing 777-36N ( B777-300ER )

很久以前開始就跟馬來西亞有所關聯,但雖然在生意上有所往來,但自己並沒有去過馬來西亞,這次是第一次踏上馬來西亞

一樣,安定的豪華商務艙,是說魚骨式的座艙配置已經成為航空公司在頭等艙的主流了


2017_07_26_092034
說真的我也忘了這是啥時拿到的護照夾,座位跟當時來回上海一樣都是 10A
2017_07_26_091106
用背包作個比例尺
2017_07_26_092056
兩扇窗
2017_07_26_093352
B-18007,機型是 B777-309( Boeing 777-300ER ),是波音的藍鯨塗裝,當天執行飛往洛杉磯的 CI8 航班

在後推、啟動發動機到起飛這段,如果座窗邊通常都會觀察一下桃園機場的跑道狀況,說實在明明是大晴天卻可以看到滑行道上滿滿的紅土,就知道下大雨實是什麼光景了(滿滿的泥水

至於為什麼我幾乎都搭中華航空?嘛 ... 卡客總是要點里程來墊底啊


2017_07_26_094124
B-18215,機型是 B747-409( B747-400 ),當天執行飛往東京的 CI100 航班
2017_07_26_094710
B-22101 與 B-22102,機型是 A330-343( Airbus A330-300 ),都是復興航空的封存機,前方是泰國東方航空的封存機

其實看到 B-22101 與 B-22102 這兩台復興航空封存的 A330-343( Airbus A330-300 )也是蠻感慨的,彷彿看到天馬航空的影子,一個買了 A380 結果直接把公司財務搞砸的慘案,當然我不會說跟連續兩次空難無關,那當然是最後兩根稻草,但錯誤的營運、購機策略才是主要原因

至於後方那個小小的垂直尾翼應該是 A321-231( Airbus A321-200 ),機號可能是 B-22608 或 B-22610,都是前威航的自屬機,租賃機已全數歸還租機公司了,這些應該是復興航空最後十一台自屬機之中的三台,三台機體都用鋁箔、保護罩把艙門、駕駛艙窗戶與引擎等密封

至於泰國東方航空那個公司體質不佳,幾乎亞洲大型機場都有機會看到的封存機的航空公司,那架機型 B747-441( Boeing 747-400 ),編號 HS-STB 的機體已經在桃園機場封存三年了,封存時間長到引擎都另外拆卸下來以配重塊取代


2017_07_26_094920
B-18722,機型是 B747-409( Boeing 747-400F ),起飛執行飛往安克拉治的 CI5382 貨運航班
2017_07_26_095014
飛往東京的 B-18215 轉入 N10 聯絡道
2017_07_26_095210
B-18215 準備切入 05L-23R 跑道起飛
2017_07_26_095358
JA604F,機型是 B767-381F( Boeing 767-300ER ),當天執行飛往東京的 NH8442 貨運航班
2017_07_26_095500
從 N10 聯絡道往回看排隊的起飛隊伍
2017_07_26_095844
起飛爬升
2017_07_26_100232
鳥瞰桃園的沿海

爬升到巡航高度後開始送餐

2017_07_26_101424
開胃的甘蔗蝦跟蘿蔔糕
2017_07_26_120740
主菜,海鮮餐,是辣味的燉海鮮飯
2017_07_26_121126
燉海鮮跟菜飯,配湯匙菜、山藥與南瓜、杏鮑菇
2017_07_26_121146
冷盤的鮭魚生菜沙拉
2017_07_26_123324
餐後的水果盤跟冰淇淋

飛行三個半小時後到達馬來西亞,航班開始慢慢的下降

2017_07_26_135616
接近機場時可以看到滿滿的棕櫚,真的到馬來西亞了
2017_07_26_135804
降落在吉隆坡國際機場的 32L-14R 跑道,轉入 C6 滑行道,航班 CI721 到達目的地