2017年9月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 上需要安裝的軟體與設定


2017_09_15_104806
從終端機登入樹莓派
2017_09_15_104905
首先也是確定樹莓派可以 Ping 到 google.com 跟 Google Public DNS 的 8.8.8.8
2017_09_15_105003
再來跑個 sudo apt-get update 跟 sudo apt-get upgrade
2017_09_16_004231
使用 speedtest.py 腳本測速一下,確定樹莓派可以連線並跑出最大速度
2017_09_16_005405
sudo apt-get install trickle 安裝限速模組,抓個想要讓 Hentai@Home 跑的速度
2017_09_16_005502
大概抓個 2 Mbps 然後輸出測試結果,照前面的格式去填寫客戶端申請
2017_10_05_125226
sudo apt-get install default-jre 跟 sudo apt-get install default-jdk,之後 java -version 會像是這樣

其實一開始我也在想不安裝 Oracle Java SE 真的沒問題嗎,畢竟參閱不少資料都說需要 Oracle Java 套件,但跑起來確實是沒問題就是了

接著在講一下硬體的部分,樹莓派是使用 MicroSD 記憶卡當作系統硬碟來運作,即使用大容量的記憶卡,但考慮到頻繁的讀寫還是建議使用外接硬碟,畢竟跑 Hentai@Home 就是要越大的檔案快取空間( Files Served / Maximum Disk Cache Size )越好,弄顆有一定容量的外接硬碟是最佳解,剛好手上有一顆小容量的固態硬碟,可以在讀取速度跟耗電量上取得不錯的平衡,畢竟樹莓派的 USB 埠最大輸出電流量只能到 1200mAh


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 系統存取使用,也就是說要把外接硬碟內部資料清空、刪除原先的分隔表、建立新的 GPT 分割表與一個 Ext4 格式的分割區,因此請確定這顆硬碟裡面沒有你需要的資料

而 Linux 的硬碟管理邏輯跟 Windows 不太一樣,因此可能很多人不能理解把硬碟掛載到資料夾這個概念,沒關係,照作就好(欸?


2017_10_04_135304
使用 df -h 指令顯示系統上的磁碟區跟可用空間
2017_10_04_135504
lsblk 指令顯示硬碟分割狀態跟分割區
2017_10_04_141850
接上外接硬碟並重新開機後可以看到硬碟 sda 與磁碟區 sda1
2017_10_04_141909
使用 fdisk -l 來檢視硬碟與磁碟區的詳細資料
2017_10_04_141914
最下面的 /dev/sda 就是外接硬碟
2017_10_04_142022
使用 sudo fdisk /dev/sda 來編輯外接硬碟,先 d 後 w 來刪除硬碟上的分割表與磁碟區
2017_10_04_142155
再來一次 sudo fdisk /dev/sda 來建立磁碟區,先 n 後 p、1、然後按兩次輸入,最後來個 w 儲存
2017_10_04_142618
使用 sudo mkfs.ext4 /dev/sda1 來將分割區格式化成 Ext4
2017_10_04_142640
結果是這樣,將 /dev/sda1 格式化成Ext4
2017_10_04_145026
使用 sudo mkdir /media/hd 來建立一個資料夾,之後外接硬碟會掛載在這裡,並用第二行的指令給予它權限
2017_10_04_143953
ls -lh /dev/disk/by-uuid 可以看到硬碟與分割區的 UUID,sudo blkid /dev/sda1 列出外接硬碟分割區的 UUID
2017_10_04_145142
記住剛剛的 UUID,編輯 fstab 來達成開機自動掛載外接硬碟
2017_10_04_145420
在最下面加入剛剛的 UUID,並指向 /media/hd
2017_10_04_145558
重新開機後外接硬碟就會掛載到 /media/hd 下
2017_10_04_145958
再輸入一次 sudo chmod 777 /media/hd 給予它權限

再來就跟前面一篇文章的步驟一樣,在 /media/hd 建立一個 hath 資料夾

把 HentaiAtHome.jar 丟進 /media/hd/hath,並設定 sudo chmod +x HentaiAtHome.jar

建議安裝一下 screen 這個套件來有效管理 Hentai@Home,畢竟 SSH 終端機登出就會關掉程序這點還蠻討厭的,請參考這篇文章

再來就是在開啟的 shell 中啟動 HentaiAtHomeGUI.jar,在啟動指令中設定資料夾指向,填入客戶端編號與金鑰就可以完成


2017_10_04_173822
設定 /etc/motd 後可以在登入終端機時看到一些自訂提示
2017_10_04_155757
使用 df -h 指令就可以看到資料都儲存在外接硬碟
2017_10_05_124513
在 E-hentai 可以看到樹莓派上的客戶端已經連線,兩個客戶端 6000 KBps 大約是亞洲區的百分之二運算力
2017_10_05_125842
接著就是等著 Gallery Points 跟 Hath 入袋了

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

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


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

2017年9月12日 星期二

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

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

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

所謂的「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 也是可以,其實單板機都跑的動,不過這是後話


2017_09_12_181549
首先打開 E-hentai 網站,在 My Home 選擇 Hentai@Home 來申請客戶端
2017_09_12_181423
都忘了主機的網路位址是多少了,趕快看一下
2017_09_13_164710
先確定一下你的主機可以 Ping 到 google.com 跟 Google Public DNS 的 8.8.8.8

申請 Hentai@Home 需要幾個條件,分別是
  • 每秒最大爆發頻寬至少 200KB
  • 每小時總傳輸量至少 300MB
  • 資料儲存容量至少 10GB
  • 需要 SpeedTest 測試結果佐證

    接下來講如何申請

    2017_09_12_180309
    測速可以使用一個 speedtest_cli.py 腳本
    2017_09_12_180557
    一直在想為什麼跑不動,後來發現要改用 speedtest.py
    2017_09_12_180730
    python speedtest.py --share 就可以看到結果,產生的網址是測試結果的圖檔

    看到那個數字別太高興,那個頻寬雖然有達到 ConoHa 官方說的 100 MBps,但那是同一個實體主機下面的所有虛擬主機共享(想成那個實體主機對外是走 1 Gbps 到對外路由器就好),如果真的用那個數字去跑 Hentai@Home,大概沒幾下子就因為佔用過多網路頻寬與運算資源被 ConoHa 官方砍伺服器單位跟鎖帳號,所以申請完成後要對 Hentai@Home 作設定

    而提交申請報告時就要用 trickle 這個限速模組去作管制(當然是針對 speedtest.py 而已


    2017_09_12_181708
    sudo apt-get install trickle
    2017_09_12_181811
    在 python speedtest.py --share 前面加個限速指令,單位是 KB/s
    2017_09_12_182722
    這樣就會產生一份低調的報告
    2017_09_12_183710
    把剛剛的測試結果貼在最下面,然後填入你想提供的頻寬、流量與容量,申請成功會看到綠色字樣
    2017_09_13_163236
    等個一兩天就會看到通過申請的字樣,這時可以進入 Hentai@Home 細部設定頁面,最上面有重要的編號與金鑰

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

    以下流程需要支援 SFTP 的軟體如 FileZilla 跟你前面的終端機( Windows 環境建議使用 PuTTY 連線)

    其實用終端機是可以完成全部操作,包括下載必須資源與解壓縮、安裝,但甲骨文官方是沒有提供真實網址來直接下載的,所以還是建議乖乖用 SFTP 扔上主機,畢竟有圖形化操作就是不一樣


    2017_09_13_163622
    首先 java -version 查一下 Java 環境,應該是這樣
    2017_09_13_163729
    再來是 sudo apt-get install default-jre,安裝 Java Runtime Environment
    2017_09_13_164206
    再來 sudo apt-get install default-jdk,安裝 Java SE Development Kit
    2017_09_13_163822
    再跑一次 java -version,應該是這樣
    2017_09_13_173155
    到這個網址去下載官方的 Java SE Development Kit 壓縮檔,依照你的主機類型選擇
    2017_09_13_173356
    用 SFTP 把他扔去主機的根目錄,記住檔名
    2017_09_13_183846
    tar -zxvf 指令解壓縮,目標檔案是剛剛上傳的壓縮檔
    2017_09_13_184306
    使用 cp 指令把解壓縮的檔案搬移到資源庫的 jdk 資料夾
    2017_09_13_184827
    注意最上面的三行,要設定代替連結來導向
    2017_09_13_184901
    輸入 update-alternatives --config java 、update-alternatives --config javac 與 update-alternatives --config javaws
    2017_09_13_185802
    上面可能有選擇錯誤,正確是要像是這樣都選剛剛安裝導入的 1.8.0_144 版本,執行 java -version 則要像最底這樣
    2017_09_13_191257
    sudo apt-get install unzip,準備安裝 Hentai@Home,因為下載下來是壓縮檔

    用於執行 Hentai@Home 的運作環境差不多就建立完成,再來就是下載 Hentai@Home,在 E-hentai 網站個人頁面選擇 Hentai@Home,在頁面的下方就可以看到最新穩定版本的 Hentai@Home,這邊提供 1.4.2 穩定版 Hentai@Home 1.4.2

    2017_09_13_191354
    一樣是把壓縮檔案用 SFTP 扔到根目錄去,不在本地端解壓縮是避免節外生枝
    2017_09_13_192330
    使用 unzip 指令解壓縮,應該會有三個檔案
    2017_09_13_193453
    重新整理遠端就會看到三個檔案,包括那個 bat 檔
    2017_09_13_193929
    使用 cp 指令把解壓縮的檔案搬移到指定位址,官方建議建立一個專屬帳號 hentai 跟執行 Hentai@Home 的 hath 目錄
    2017_09_13_193915
    去遠端翻找資料夾就會看到被搬移過去的檔案,如果遠端沒有螢幕那其實把 HentaiAtHomeGUI.jar 跟那個 bat 檔刪掉也可以
    2017_09_13_194228
    sudo java -jar /home/hentai/hath/HentaiAtHome.jar 就會開始執行 Hentai@Home
    2017_09_13_194310
    輸入前面提到的客戶端編號與金鑰
    2017_09_13_194327
    沒意外的話 Hentai@Home 已經開始順利執行了

    接著就可以開始等待 GP 跟 Hath 入袋了,提醒一下如果這時關閉終端機是會讓 Hentai@Home 停止運作的,建議在 Hentai@Home 順利開始運作後先使用 Ctrl+C 終止一次 Hentai@Home,改用 nohup java -jar /home/hentai/hath/HentaiAtHome.jar &來讓 Hentai@Home 在背景運作,或是安裝 screen 這個神奇的終端機分頁套件讓 Hentai@Home 在虛擬分頁裡運作

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