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 官方發行的行動裝置客戶端上請用上面的解法