Raspberry pi 一日心得


圖片來源:www.raspberrypi.org


其實早就想買一塊 PI 來玩,但是一直找不到時間(講白點就是懶)所以拖到現在,簡單來說明一下從購買到現在實際玩了一天的心得:

購買
由於台灣想要經由官方購買較為麻煩,畢竟光是郵費以及時間就讓人想打退堂鼓,透過經銷商「e絡盟」購買是一個方式,但是看了「e絡盟台灣個人戶經銷商」的購買方式後還是放棄,但訂單居然是 google doc,我相信這是為了方便處理訂單,也相信每個人都是為人正直,但這種方式對消費者好像沒什麼保障,最後還是放棄,後來開始 google 發現到台灣還是有很多不同的管道可以取得,包含些電子材料行、C2C 網拍都有販賣,最後考量到運費、價格、快速取得等因素夠過網拍取得。

由家中原本就有相當多的 micro usb 線,以及一張用了好幾年的 4GB SD 卡,所以只透過網拍買了 Raspberry PI + 外殼,原本以為這樣就可以開始快快樂樂的使用 Raspberry PI,沒想到問題才剛要開始......orz

安裝
由於官方有提供「NOOBS」來提供快速的安裝系統,只要先把檔案解壓縮後放到記憶卡中,再把電源、記憶卡接上基本上就就會有 GUI 出來讓你選擇要安裝的 OS,但是前面提過了「這張記憶卡只有 4GB」,也就是如果是下載 NOOBS(offline and network install) 版,放入後「Raspbian」也就是建議安裝的版本就沒辦法裝了...但是當你把記憶卡插入開機後已經來不及了,已經被重新格式化過,如果 4gb 還是需要安裝必須在解壓縮進記憶卡後打開 os 資料夾,資料夾名稱就是 OS 的名稱,可以把沒有要用的 OS 直接整個資料夾砍掉,砍了幾個後就會有足夠空間可以安裝 Raspbian,但是都搞定後卻又發生新的問題,由於安裝同時必須完全依賴鍵盤,對於一個整天用 Macbook 的人來說生出一個鍵盤是相當頭大的,所以臨時又去買了一個 USB 鍵盤來應急,這故事告訴我們想要開始玩 Raspberry PI 必須要先準備以下配備較為方便:

1. Raspberry PI
2. micro usb 線一條
3. usb adapter 5v/1.5a+ (非必須,可直接接電腦)
4. 螢幕(Raspberry PI 為 HDMI 接頭,所以螢幕最好也有 HDMI 孔比較方便,不然要再另外買轉接)
5. HDMI 線一條(依照螢幕而定)
6. USB 鍵盤
7. USB 滑鼠(非必須)
8. 網路線 or USB 網路卡

Raspbian
安裝後發生先開始遇到了新的問題,首先是鍵盤,預設為「gk」而台灣一般所使用為「us」配置,所以在打些符號上會略有不同,再來是網路必須要自己配置,就算有用 DHCP 也是要進去設定,如果是 USB 網路卡就必須要設定 SSID 以及密碼(如果有設定),其實還蠻容易的,稍微有點 linux 的基礎很快就可以上手,我也嘗試在上面 build 了 nodejs,build 的過程非常順暢,唯一的問題點就是 build 的很慢 XD,畢竟是 ARM 還是別太強求,後來開始嘗試 build XBMC,在這遇到鐵板了...沒想到我最大的敵人是「4GB 記憶卡」,沒想到 plugin 裝到一半容量就滿了,完全 GG,但是原本想要使用 Raspberry PI 就是希望可以成為家裡的多媒體中心,配合 NAS 來播放多媒體,所以 XBMC 勢必是個必要的東西,可以最快速的把整個環境架設完成,也因次決定重裝 OS,改裝為 build 帶有 XBMC 並優化的版本,這邊選擇了「OpenELEC」。

OpenELEC
安裝起來比起「Raspbian」還要簡單很多,連鍵盤、網路等問題都在安裝流程中解決,整體來說就是快,安裝完後就可以開始順暢的使用,目前測試下來推的動 1080 的影片,並且可以透過 add-on 加入更多功能,再安裝了一個透過 www.hdpfans.com 提供的 add-on,增加了很多內地的電視頻道、BT工廠以及百度雲的 add-on,透過這些 add-on 已經基本能達到想要的內容,但是百度雲速度還是很慢,stream 超級慢,字幕部分可以裝上射手網的 add-on,即時去找字幕下來,所以就差完整的影片來源,這也是目前欠缺的一塊,也是接下來的目標,當然是希望可以變得跟 popcorn time 一樣方便好用。

Raspberry PI 真的很好玩,也讓我開始想起過去玩互動的感覺,經過幾年的軟體經驗,相信現在應該可以做出更穩定的產品,由多媒體中心開始慢慢的開始控制客廳的其他家電,一步一步努力!GO!


相關連結
Raspberry PI
NOOBS
Raspbian
XBMC
www.hdpfans.com
popcorn time
e絡盟
OpenELEC
nodejs

git hooks deploy (nodejs)

deploy(部屬) 是個 production 的必經階段,該怎樣做的方便又穩定是個重要的關鍵,先來談談一般 web server deploy (以 nodejs 為例,這邊暫時不談 server side 架構)

(假設使用 bitbucket host git repo)

1. 把 local source code push (本地端原碼推到) bitbucket
2. ssh 連到 web server
3. git pull 想要的版本
4. npm install(更新 package)
5. restart node process (重起線程)

以上的步驟看起來其實也不難,ssh 連到 web server 的步驟也可以使用 key 的方式來減少輸入密碼步驟,進入後需要進行的東做也不是很難,但總是要問自己一下 "還能不能更好?",立馬想到先前使用些 saas 的經驗,如 heroku, openshift, nodejitsu ... 等,使用方式非常簡單,只需要把 code push 上 saas server,就自動可以跑起來,這種感覺真的太棒了!以 heroku 為例,會要求你在原本的 local repo 加入一個 remote 的位置(如下),之後想要 deploy 只要 `git push heroku master` 就可以丟上 heroku 並自動重起。
git add remote heroku GIT_REPO_URL

想要自己實作這段就必須使用 git hooks,以 bitbucket 為例(下圖),可在 repo 設定收到 push 後要執行哪些指令,bitbucket 很貼心的與很多不同的 service 合作,讓 hooks 更方便(一般常見的 git host 都有實作,不論是 github, gitlab...等都有)。


這段收到 push 後必須執行哪些指令的行為就是 git hookspost-receive,收到 push 後想要執行哪些指令,pust-receive 為 bash script,所以可以方變得跟各種 cmd 整合,基本上可以將最上面的步驟 3, 4, 5 整合,pull 想要的版本、更新package、重起 node process,但還是缺少了最重要的東西,git 要 push 到哪?

首先建立一個 git repo 並且使用 bare



接著更新 $HOME/deploy.git/hooks/post-receive(範例中使用 forever 來管理 node process,亦可使用 nodeman, pm2 等來管理)


最後就是在開發的 repo 中加入 remote 路徑,ssh user, ip 就與 ssh 登入是相同的
git remote add production SSH_USER@SSH_IP:~/deploy.git

完成後 deploy 就與 heroku, nodejitsu, openshift 一樣只要下指令就自動完成 deploy 所有流程(更新最新版 source code,更新 node package,重啟 nodejs process)
git push production master


相關連結
heroku
openshift
nodejitsu
bitbucket
github
gitlab
git hooks
forever
nodeman
pm2

nvm on ubuntu issue Syntax error: "(" unexpected (expecting ";;")

這幾天在處理 git hook 來 deploy 的問題卻一直遇到下面這段錯誤訊息

.nvm/nvm.sh: 502: .nvm/nvm.sh: Syntax error: "(" unexpected (expecting ";;")

查到後來才發現原來 ubuntu 6.10 起把預設的 bash shell 改為 dash shell,所以當你使用 /bin/sh 同時其實是使用 dash,要把 shell 改回 bash 使用以下指令:
sudo dpkg-reconfigure dash

輸入後會跳出以下畫面,選擇 no 就會把 shell 改為 bash


get ubuntu version

Get ubuntu version

lsb_release -a

ubuntu install phantomjs

先前在 ubuntu 上安裝 phantomjs 屢屢失敗,第一次安裝立馬使用 "apt-get" 搜尋,找到後就很放心的安裝,沒想到裝完後還是沒辦法正常使用,後來去 phantom 官方找,官方也提供了一套安裝方式,但還是有問題,還好我有個好朋友叫 google

下面這段 script 的 3-7 行其實是在反安裝 phantomjs 從 apt-get 的版本, 9-15 行為重新安裝 phantomjs 並設定位置,17 行為確認目前 phantom 版本、安裝狀況


其中特別要注意的就是 phantomjs 以及 ubuntu 的版本,必須依照所需來調整

32-bit: phantomjs-1.9.0-linux-i686.tar.bz2
64-bit: phantomjs-1.9.0-linux-x86_64.tar.bz2