2011年11月15日 星期二

簡單介紹好用的 strava.com

從去年開始騎單車後,去買了個軌跡記錄器來記錄自己的狀況,當然也有人覺得沒必要,說過了40歲後,只會退步,不會再進步了,所以不需要看一些數據啦。但是個人還是覺得,有了數據可看,多了一些樂趣嘛,而且要分享也比較容易,否則講一堆,沒用過的人不見得聽得很清楚,但是直接看圖說故事,一目瞭然。

由於買的是 garmin edge 500,所以當然一開始是直接用 garmin connect 網站來記錄。

1.garmin connect:
http://connect.garmin.com/

優點:
支援很多種運動,若配合 garmin 裝置,可顯示溫度、心跳、踏頻。
可以看很詳盡的報告,以週、月、年來顯示報告,也可自訂時間;可只看某一種運動的報告。
若是買 garmin 的產品,直接用這一個就對了。

缺點:
沒事由 google map 換成 "有點軟" 的 bing, 沒中文,難用死了,用了真的會生"病",所以才準備放棄,尋找其他替代方案。
2011/09/17 發現改成無法匿名觀看了,一定要登入。(2011/10/26 改可選擇 google map or bing)

由於去年 9 月 garmin connect 由 google map 改成 微軟的 bing,真他喵的難用,沒中文給鬼用喔,去討論區抗議,結果 garmin 說是公司未來的規劃就是要和微軟合作。

所以開始找替代方案,當然找了不下數十個。


2.endomondo:
http://www.endomondo.com

3.runningfree:
http://www.runningfreeonline.com

4.running ahead:
http://www.runningahead.com/

5.sportypal:
http://sportypal.com

6.everytrail:
http://www.everytrail.com

7.runkeeper:
http://runkeeper.com

8.ridewithgps:
http://ridewithgps.com

9.run.gps:
http://www.gps-sport.net

10.buckeye outdoors:
http://buckeyeoutdoors.com

11.mapmytracks:
http://www.mapmytracks.com

12.mapmyride:
http://www.mapmyride.com

13.strava:
http://www.strava.com

14.bikemap:
http://www.bikemap.net/

15.sports tracker:
http://www.sports-tracker.com/

16.trimble outdoors:
http://www.trimbleoutdoors.com/

17.dailymile:
http://www.dailymile.com

18.runtastic:
http://www.runtastic.com/

19.cardio:
http://www.worksmartlabs.com/cardiotrainer/

20.sportstracklive:
http://www.sportstracklive.com/

21.trainingpeaks:
http://home.trainingpeaks.com/

22:bikeid
http://bikeid.net/

還有很多,列不完,不再列了。當然,每個人的需求都不同,這個不適合我用,不見得就不適合你用,各人喜好不同。

之前有稍微提到 strava.com 這個網站,今天就再簡單介紹一點點吧。

上次說的是缺點,"strava 還真的不錯用,除了報表比較爛、無法匿名看路徑,登入才能看、android app 很基本,沒什麼功能,但要上傳後才能手機上觀看,以上缺點外,算是很好用的。"

今天要說的是某個優點,就是可以針對某一段路或某個爬坡建立 segment。而建立 segment 要做什麼呢?可以拿來比較上次和這次騎相同路徑,看看自己有沒有進步啊。另一個最好玩也最主要的目的是和別人有騎過相同路徑的人做比較。

以下拿個例子來看看:

這張圖是騎到太平四方太子宮的路徑圖,全程來回共30.4公里,坡度爬升321公尺,騎乘時間 1:31:34,全部時間1:48:43(包含休息及停紅燈),平均速度19.9公里,使用garmin edge 500(含踏頻器),平均踏頻73.32,騎的單車是 Jelum(祝冷)。

接續上面的,還有坡度圖,很清楚的看出爬坡到中間,回程就一路下滑。最下方有二個項目:
 四方太子宮
 這條 segment 全長 5.7km ,坡度爬升 200 meters,均速 14.2 km/h,時間花了00:24:34

 廓子坑產業道路 Climb
 這條 segment 全長只有 1.4 km,坡度爬升 86 meters,均速 10.9 km/h,時間花了00:07:42

先來看 ”廓子坑產業道路 Climb“:

 這段 1.4 公里的路程,坡度為 6.2%,坡度上升了86公尺,有點陡。

最底下有五個人,我是第五名 ^_^。是不是一目了然啊。


 然後按左手邊 My Results 即可看到全部自己的次數。我共騎了三次,分別是 8/3,9/3,10/12,很明顯均速越來越快,時間越來越短,可見有進步的啦。再上一張和別人比較的,則會拿自己的最佳成績和別人相比。

那由於別人建立的 segment 都是只有爬坡的一小段而已,所以我又自己建立了比較長的"四方太子宮“這條 segment。若不想和別人比,自爽就好,可將 segment 設成 private。


這段 5.8 公里的路程,坡度為 2.9%,坡度上升了213公尺,平均下來就比較沒那麼陡了。

時間變成約半小時。



接下來再看另一條“旱溪自行車道"
全程來回共 31.3 公里

坡度圖中綠色面積部份是我建立的 segment,共 21.1 公里,因為我去除從家裡到自行車道中間的路程,只想比較在自行車道的部份。
就是線條藍色的部份。
總共騎了八次,因為我建立的這條 segment 雖然是 public,但別人都沒有符合,整條都要 match 才會顯示在此,若中途騎去別條路再繞回來也不會 match 到,所以只看到我自己。

不知道大家看了有沒有懂,總之,這正好是符合我個人的需求,讓我這一年來多了很多樂趣。原本 strava 專門給單車用的,不過最近也加入慢跑的功能。希望大家有空就多多運動啊。

2011年10月29日 星期六

android 的特異功能

有很多程式,一安裝好後就偷偷躲在背景跑;或有一些是只要 wifi 一開啟,app 就會自動跑起來,可是大部份的時候,不想如此,有些 app 甚至選項裡可以設成開機”不“啟動,但仍然開機後會起來,煩死了。這些就是所謂的 bloatware,不但讓手機變慢,記憶體不夠用,還會導致電池很快就用完了。還有,像中華電信出的手機,都會裝 hami xxx 的一堆,一開機跑出來,真是欲除之而後快。

有想說平常將 app 給移除,等到要用時才從 sdcard 中來安裝,不過這樣除了很麻煩以外,app 的設定都要重新設一次,因為在移除 app 時,也會將設定檔全數移除,真的不符經濟效益。

最近發現 android 有一個殺手級的功能,就是可將某一 app 給 “freeze" or "disable" 起來,這個 app 就會停止運作,按下圖示要執行,會說沒安裝在系統上,這樣就不會自動跑起來了,但有新版可更新時,仍然可以更新。等到要用這個 app 時,再將它 "unfreeze" or "enable" 即可。要使用 freeze 必須要將手機 root 才行。

這個比起之前將 .apk 改名成 .apk.disable 更方便,改名的方式,系統會以為你沒裝這個 app,所以也無法更新。而且 freeze 有現成的工具可用,改名的方式只能自己寫 script, 當然,freeze 也可以自己寫 script 就是。而且厲害的是,連系統的 app 都可以 freeze 哦。

大部份能 freeze app 的都要花錢買,不過之前介紹過的 link2sd 最近新版 1.9.5 的也加入 freeze 功能,當然,只為了 freeze 功能去裝 link2sd 實在是殺雞用牛刀。還有另一套叫 bloat freezer,本來也要錢買,但後來作者將之拆成付費及免費版
https://market.android.com/details?id=com.bloatfreezer.free&feature=search_result

這套就只有 freeze、 unfreeze 功能,還不錯用,只做一件事,而且做得很好,我喜歡,只是要看廣告就是。

若要自己寫 script 也很容易:
base=/system
export CLASSPATH=$base/framework/pm.jar
exec app_process $base/bin com.android.commands.pm.Pm "$@"
存起來後,放在路徑底下,
freeze
# pm disable AppName
unfreeze
# pm enable AppName

這個 AppName 就要查一下了,可用 bloat freezer 來查,或 astro file manager。

有了這個功能,不用怕手機都變超慢的,電池一下子就沒電的狀況了。

2011年10月7日 星期五

旱溪自行車道練車

strava 還真的不錯用,除了報表比較爛、無法匿名看路徑,登入才能看、android app 很基本,沒什麼功能,但要上傳後才能手機上觀看,以上缺點外,算是很好用的。

2011年10月6日 星期四

旱溪自行車道練車

試試 strava 分享到 blog 的功能。

2011年9月25日 星期日

android 調校二

通常 android 手機留給使用者額外安裝程式的空間並不多,像我這台 garmin asus A50 就只有 510M 的空間,再加上很多程式或遊戲都要下載資料檔才能用,有的資料檔一下載就是 100M,所以很快的就滿了。而且這台是 android 2.1 以前的,所以無法 app2sd,常常要裝新的軟體,就要想辦法砍掉現有 app,可是每次都花很多時間在想說要砍什麼軟體比較方便,因為軟體砍了後,下次再裝回來,資料和設定檔都會消失,很麻煩。

所以如果沒內建 sdcard 的機子,就要趕快去買來用才是,至少可將資料檔放到 sdcard 上。但是 android 2.2 以上的機子,才能將 apk 放到 sdcard 上,而且不是每一個程式都可以,那 android 2.1 以前的不就玩完了。

幸好找到了 link2sd 這個 app,可以讓 android 1.6 - 2.1 的手機也能將 apk 放到 sdcard 上。作法是先將 sdcard 在 pc 上分割成二個 partition,第一個弄成 vfat,第二個最好弄成 ext3(vfat 也可以啦),第二個 partition 留個 1G 就很夠了,其他都給第一個 partition,拿來存資料用。

link2sd 會使用 sdcard 的第二個 partition,掛載在 /data/sdext2 下,將原本 /data/app/example-1.apk 搬到 /data/sdext2/example-1.apk,然後再將之 link 回 /data/app/,所以使用者安裝的 apk 都會放在 /data/sdext2 下,不佔用原本的 510M 的/data 目錄的容量。除了 apk 以外,dex and lib 也可以放到 /data/sdext2 下。

就算是 android 2.2 以上的,也可以用 link2sd,因為不是每個程式都可以用 app2sd 的,但是用 link2sd 就可以。

2011年9月24日 星期六

android 調校

在玩了一陣子 android 後,發現很多 app 都會開機就自動啟動,然後在背景一直跑,佔住記憶體和 cpu,砍掉又自動跑起來。難怪 market 裡有那麼多 kill 程式的軟體,不過這個都是治標而已,砍完過一會兒又會自動起來,真頭痛。

不管是什麼功用的都可能會如此,明明我裝一個計時器,可能一天只用一次,用完十分鐘就關掉了,可是得付出的代價是一天24小時都得讓這個計時器耗掉不少的資源,為什麼,寫程式的人真的不知道頭殼在想什麼? 不知道我的手機 cpu 才 600MHz,記憶體才 180M,一個計時器就要佔掉我10幾M的記憶體,若是要用時裝上,用完後就移除是可以,但很麻煩,最主要是移除後,設定都會不見,下次再裝,又得再設定一次。

幸好最近找到方法可解決這問題,這方法是治本的方法,直接讓這 app 消失,不過要先取得 root 才行。由於使用者自己安裝的程式是放在 /data/app/ 裡,拿 "生活計時器" 來當例子,apk 位於 /data/app/com.luckyxmobile.timers4me.apk,寫了一個 script,將這個檔案改成 .apk.disable 即可,/data/app/com.luckyxmobile.timers4me.apk.disable,這樣 android 系統會認為這個 app 沒安裝,而且原本在背景跑的程式,會立即關掉。等到想用計時器時,再用另一個 script 將 .apk.disable 改成 .apk,這樣計時器 app 又回來了,隨時可用,而且設定檔都還留著喔。

那你說,為什麼要用這個“生活計時器",換另一套計時器就好啊。是沒錯,但是就喜歡這一套啊,別套用完就可關掉,偏偏喜歡的這個就一定要在背景跑,所以只好想辦法囉。另外,這招除了可以用在 user app 以為,system app 也可以喔,只是,通當 /system/app/ 是唯讀的,但是有了 root 以後,就什麼都可以動。

那如果有 20 個 app 都要用,不是要寫 20 個 script,而且,執行 script 不是很麻煩,還要開終端機,太麻煩了啦。還好有一個 app 叫 "script manager" 的,可以用來執行 script,不只是點個二、三下就可執行 script,不用打一堆字,更方便的是,還可以設定成開機就執行某個 script,或網路啟動就執行等等,非常的強大,配合 root 使用,真是天下無敵啦。當然,寫 script 也有方法啦,像我目前是只有一個 script,靠檔名來分辨啟動或關閉、以及哪一個程式、是系統 app 或使用者 app。例如 enable-timers4me,前面的 enable 表示是要將計時器 enable,執行後會自動改名成 disable-timers4me,這樣子一目瞭然的知道目前此 app 是啟動或關閉的。後面的 timers4me 則是自己定義的,在另一個檔案可以查表 packagelist.lst,內容如下:
com.luckyxmobile.timers4me.apk          timers4me
在執行 disable-timers4me 時,會分析自己檔名的前半部為 disable 表示要做 disable 的動作;後半部 timers4me 則會去 packagelist.lst 裡查表,查到檔名為 com.luckyxmobile.timers4me.apk,然後再去 /data/app/ 找到 com.luckyxmobile.timers4me.apk 改名為 com.luckyxmobile.timers4me.apk.disable,這樣這個 app 就暫時消失了,收工。

若是系統 app 則會在 /system/app/ 裡,拿瀏覽器來當例子,在 packagelist.lst 裡為:
Browser.apk        system_browser

script 則為 disable-system_browser,只要查到 system 就會自動到 /system/app 去找,反之則到 /data/app/ 找。但通常 /system 都是唯讀的,所以在改名前要先將 /system 給改成可讀寫  mount -t remount,rw /system,改完名後,再改回唯讀即可。

用了這個方法後,現在手機好用多了。像有些手機,如中華電信的,一買來就給你裝了什麼 kkbox 的,煩死了,而且砍掉又再起來,用這個方法就可以達到 "想用時才開“,呵呵,太完美了。

2011年8月6日 星期六

Asus A50 無法安裝 firefox

本來想在 android 上安裝 firefox 用看看,結果竟然搜尋不到,後來上 mozilla.com 才看到

Will Firefox work on my mobile device?
Firefox for Android

Firefox is available for Android 2.1 or higher. It requires:

A phone with an ARMv7 processor.
Approximately 17MB internal or SD storage. It runs best on devices with at least 512MB of RAM.

CPU 要 ARMv7,但是 Asus A50 的 cpu 是 ARMv6 的,所以不能裝,很可惜說,為什麼要 v7 呢?

2011年8月5日 星期五

android 真的滿鳥的說

這陣子在玩 android,跟人家借的機子 Asus A50 android 2.1,不是很高檔的,容量也不大,記憶體 256M,可裝程式的空間才 150M 而已,由於剛借來是中華電信改過的 rom,所以一開機就跑了一堆 hami xxx 的,再加上原本 garmin 的地圖什麼的,根本無法再跑其他程式,因為
一堆程式一裝進去,就變成 service 自己跑起來,導致我原本的 garmin 導航功能變成超慢,不堪使用,甚至會自動重新開機。

所以後來上 garmin-asus 官方網站抓一般通路用的 rom,總算少了很多中華電信的程式,變得好用多了。

不過,最近又遇到問題,就是不知為什麼,安裝程式時會告知空間不足,於是將一堆程式都移除,可是還是說空間不夠。非常的火大,於是去網路上找工具來取得 root,終於給我找到為什麼了。在系統中,有一個 mount point 為 /data,原本只有 150M,其中 /data/cache 功用是在 market 下載 apk 時的暫存目錄,若正常安裝好,暫存的 apk 會自動刪除。但是常常下載到一半可能 wifi 斷線,或網站連不到,結果暫存檔就留著,日積月累將這個目錄灌爆了,但是一般 user 又沒權限清,連 ls /data 都無法看內容,真是遜斃了,還不給人家 root,又清不到,真是太差勁了。

所以,建議用 android 的人一定要想辦法取得 root,否則很難用的。不知道新版的 android 有沒有解決掉這個問題,否則真是不堪用啊。

不知道只有這支 A50 才如此,還是 android 都這樣,改天來問問別人好了。

2011年7月5日 星期二

從 grub2 menu 直接開 iso 檔案,免去燒錄 cd 的麻煩

最近測試了由 grub2 直接用 iso 來開機,以避免浪費 cd 或 dvd 片,環保救地球,科科。
基本上有二種方式,一種是用 memdisk (package syslinux-common),另一種是 loopback.cfg.

以 grml 來說明(因為 grml 二種方式都支援)

以 memdisk 方式:
menuentry "Bootable ISO Image: grml64-medium_wheezy_latest" {
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos2)'
        search --no-floppy --fs-uuid --set=root 0cedc811-654d-40f9-b2f3-1df57791def2
        linux16 /memdisk iso
        initrd16 /images/grml64-medium_wheezy_latest.iso
}

以 loopback.cfg 方式:

menuentry "grml from iso"
{
    insmod ext2
    iso_path=/images/grml64-medium_wheezy_latest.iso
    export iso_path

    loopback loop (hd0,2)$iso_path
    configfile (loop)/boot/grub/grub.cfg
}

ubuntu 11.04 設定如下:(僅能用 loopback.cfg 的方式)
menuentry "ubuntu 11.04 from iso (loopback.cfg) (油笨土放艾索)" {
  iso_path=/images/ubuntu-11.04-desktop-amd64.iso
  export iso_path
  search --set --file $iso_path
  loopback loop (hd0,2)$iso_path
  root=(loop)
  configfile (loop)/boot/grub/loopback.cfg
}


debian squeeze live:(目前二種都不支援,但經由加上 grml 的 findiso 參數及自備 loopback.cfg 後就可以)

2011年6月11日 星期六

有趣的 proto joke

像這個,雙關語

“NTP jokes are always on time” 

還有這個

“I was telling a WEP joke once, but everyone already knew it”


更多請參考
http://protolol.com

2011年5月25日 星期三

好像不錯用的 mumble

為什麼說 ”好像“,因為還沒實際測過,不知道效果如何就是。^_^

前一陣子在 android 上找透過網路語音交談的軟體,除了 skype 之外,看看有沒有什麼 open source 的可用,結果找到了 mumble,真是驚為天人、相見恨晚啊。有 windows、mac、linux 版,android 及 iphone 是 beta,看來大部份平台都有,甚至還有 maemo 版咧,連 nokia n900 都能用。

通常 skype 或一般的 voip 軟體,都要註冊一個帳號,然後用帳號及密碼登入 server,將要聊天的人加入後,就可以看到對方是否有在線上,有的話就可以打電話給對方,不想聊時就掛斷,等到想聊時就再撥一次,但是若人不在旁邊,就無法接聽,沒辦法建立連線。

但是這個 mumble 和一般的又不大一樣,和 mbone 工具中的 rat 比較像,但 rat 只能用 multicast or unicast(一對一),若要三個人以上,則一定要用 multicast,但是 multicast 又不能亂用。

mumble 最主要是用來讓線上遊戲的人員互相溝通用的,如 cs,隨時要和隊員維持通信,才能整個 team 一起玩。

mumble 是 client/server 架構,一定要有 server,在自己的 desktop 裝上 client,連到外面申請的、公用的、或自己架的 mumble server(murmur),要聊天的另一方也裝上 client 並連上同一個 server,只要知道 ip 及 port 即可連上 server,若要額外再設定密碼也可以。

連上 mumble 後,可看到一些事先定義好的 channel,而 channel 可以再細分為 team,若只要聽或講到某個 team,則先進入 team。若要整個 channel 都可以溝通,則回到上一層 channel 的地方再講話。另外,mumble 也可以發送訊息,有點類以 broadcast 的方式,整個 team 或整個 channel 的人都可以聽到或講話。

mumble 的運作方式是 push to talk,像無線電,只要連上 server,按著 scroll lock 就可開始講話,放掉 scroll lock 就不會送出,而別人講的話會一直送過來,滿特別的吧。

server 預設是用 udp port 64738,若 udp 無法溝通則會自動改用 tcp


裝好 client 可以試試底下的 server:

debian 的公開 server,平常都沒人在用地,所以可以拿來偷用 ^_^.
mumble.debian.net
udp:64738

也可到 ukgame 去註冊一個免費的來使用,註冊完會告訴你 server ip 及 port
http://www.ukgame.com/mumble

官方網站:
http://mumble.sourceforge.net/

若要自己 compile murmur (mumble server 叫做 murmur),要裝上一些 qt 的 library,因為 murmur 有用到 qt,裝起來不小咧,所以有另一個 project 叫 umurmur:
http://code.google.com/p/umurmur/
拿掉了 qt 的關聯,所以適合用在 embedded devices,如 OpenWRT 之上。當然要拿這版的來架 server 當然也可以囉。

2011年5月23日 星期一

在 windows 上執行 linux binary

沒想到有人竟然會做這種事,畢竟 linux 上有的軟體,windows 上應該都找的到相對應的才是,不過依個人來說,真的是有這種需要。

因為在 linux 下用慣了小工具,一個執行檔才十幾k,但在 windows 上,為了這個小功能,可能要裝一套很大的整合一堆功能的大怪獸,如 sm(screen message),只是為了全螢幕顯示幾個字,說真的,這功能不好找,就我對 windows 的一點點知識來說,應該是繪圖軟體,如 photoshop、非常好色、gimp 等等的才行,用 office 恐怕字也無法放到這麼大吧,就算可以,為了這個小功能,去裝一套 office 太超過了吧。

話說回來,剛才去看,竟然有網頁版,那就不用找 windows 版了 ^_^
http://darcs.nomeata.de/screen-message/sm.html

不過才 0.1 版,應該跑不了什麼程式才對,沒關係,有開始就有希望。

下載網址:
http://wezfurlong.org/blog/2004/jan/linux-on-windows/

2011年5月21日 星期六

好玩的 WhatPulse

之前在舊公司時,有管幾台測試機器,平常機器沒開什麼服務,拿來測試一些功能用,所以就裝 boinc 來跑跑,去跟人家拚排名。不過後來離職後沒機器可跑,現在只賸下一台 HP notebook,之前有跑過會過熱,筆記型電腦還是不比 desktop 或 server,不適合長時間 cpu 滿載的,因此不敢再跑,所以也少了些樂趣。

最近不小心看到 WhatPulse,可將使用電腦時,鍵盤及滑鼠按鍵次數回傳,和世界上其他人做比較,跟之前玩 boinc 很類似,只不過 boinc 是要靠 cpu 或 gpu 來計算,機器或 gpu 越高檔跑越快,久了機器就比不上人家,但 WhatPulse 則只以鍵盤按鍵次數來比較,滑鼠按鍵次數只統計,不以此來排名,所以機器不用很高檔就可以和別人拚了。而且平常用 linux 當 desktop,都習慣用 terminal 來處理事情,所以鍵盤的使用率很高,應該進展滿快的才是。原來好久以前就有這個東東,真是相見恨晚,還好現在也有 linux 版,不會搥心肝。

這個純綷是好玩而已,本身並不會記錄密碼回傳什麼的,所以不用擔心。還可看什麼鍵按了幾次,滿有趣的。

首先去 http://www.whatpulse.org 下載程式回來,打開後,直接註冊新帳號,再加上目前這台機器即可,一個人可以有很多台的機器。執行後會在工具列上顯示一個小圖,另外會有一個 geek window 出現,上面是目前鍵盤、滑鼠按鍵次數、游標、滑鼠移動距離等等,有二行數字,第一行是目前的,隨時都在增加;第二行是所有累計的。若雙擊工作列圖示可將目前累計的結果回傳,回傳後目前值會歸零,也可設定成按一定次數自動回傳或每隔幾小時回傳一次。

user 是 guildwar,team 是 SpreadFirefox,總之,希望看到的人都趕快加入吧。

個人狀況
http://whatpulse.org/stats/users/326822/

個人在團隊 SpreadFirefox 團隊名次是 242 名


個人在國家方面,在台灣裡是第 75 名

而團隊 SpreadFirefox 在全世界排 12 名

而國家 “台灣” 在全世界排 48 名

2011年5月9日 星期一

linux containers (LXC)

最近新版的 linux kernel 2.6.29 以後,支援了一種叫 LXC (linux containers) 的東東,是由 IBM 所開發,license 是 GNU LGPL,類似 linux vserver, openvz 的機制。在同一個 kernel 下,可以執行另外不同的 os,譬如在 debian stable 6.0 下,再跑另一個 debian testing,不同的 filesystem,但共用同一個 kernel,基本上和 chroot 差不多,但是功能更完整。

lxc 不但有不同的 filesystem,還能夠設定不同的網路,就好像是另一台虛擬機器,但是不會像 kvm 或 xen 那樣耗費那麼多的資源。LXC 可限制用多少 memory、cpu 等等,才不會讓某一個 container 影響到另一個 container 或甚至是 host,這都是 chroot 做不到的。

底下說明如何在 debian squeeze (6.0)上面使用 lxc 的步驟:
# apt-get install lxc

檢查看看目前 kernel 是否完整支援 lxc:
# lxc-checkconfig
Kernel config /proc/config.gz not found, looking in other places...
Found kernel config file /boot/config-2.6.32-5-amd64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup namespace: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: missing
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

大致上都 ok,但是卻有一項沒通過
Cgroup memory controller: missing
所以無法限制 memory 使用量,若要用,則要自己重編核心就是。

debian squeeze 中共有五個範本 (busybox debian fedora sshd ubuntu)
# ls /usr/lib/lxc/templates/
lxc-busybox lxc-debian lxc-fedora lxc-sshd lxc-ubuntu

由於 template 中的 lxc-debian 是安裝 lenny,要裝 squeeze 請自行修改
# cp /usr/lib/lxc/templates/lxc-debian /usr/lib/lxc/templates/lxc-squeeze
dhcp-client 改成 dhcp3-client
debootstrap 那行 lenny 改成 squeeze
順便改一下 debian mirror
反正這個檔案可以改的地方很多,修改成符合自己需求

建立一個叫 foo 的新 container,OS 為 debian (lxc-debian 中是寫 debian lenny,會安裝失敗,請改成 squeeze)
# lxc-create -n foo -t squeeze /var/lib/lxc/foo
這樣會在 /var/lib/lxc/foo 建立 foo 的 container,OS 為 debian squeeze,user:name 為 root:root,並產生 config 檔
/var/lib/lxc/foo/config

啟動 foo
# lxc-start -n foo -f /var/lib/lxc/foo/config
若正常的話會出現登入畫面,以 root:root 登入即可。

如果之前的 lxc-start 可正常登入,就可以加上 -d (or --daemon),執行成 daemon mode。之後再用 lxc-console 去開啟 console 登入。

加上 -d
# lxc-start -n foo -f /var/lib/lxc/foo/config -d
這次就會直接回到命令列,不會有登入畫面

檢查目前有哪幾個 container 啟動中(若沒有任何結果,則目前都沒有 container 啟動中)
# lxc-ls
foo

連接到 console 登入
# lxc-console -n foo
如果按 Enter 還是沒看到登入畫面,就先關掉 foo,這裡因為 container 內少掉 /dev/tty1 這個裝置,所以無法登入
# cd /var/lib/lxc/foo/rootfs/dev
# mknod tty1 c 4 1
再重新開啟 foo,用 lxc-console 應該就可以登入了。

另外,可以將目前狀態給凍結起來,類似 suspend
# lxc-freeze -n foo

恢復一個被凍結的 container
# lxc-unfreeze -n foo

監控 containers 的狀態
# lxc-monitor -n foo
剛執行是沒任何輸出,但是若 foo 有開機或關機,則會出現訊息
'wheezy' changed state to [STOPPING]
'wheezy' changed state to [STOPPED]
'wheezy' changed state to [STARTING]
'wheezy' changed state to [RUNNING]

再來 lxc 強的地方開始了
檢查目前 foo 使用了哪些 cpu(預設是全部)
$ lxc-cgroup -n foo cpuset.cpus
0-1

設定成 'foo' 只能用 cpu 0
$ lxc-cgroup -n foo cpuset.cpus "0"

檢查看看
# lxc-cgroup -n foo cpuset.cpus
0

甚至可將一顆 cpu 切開看誰可以用多少
$ lxc-cgroup -n foo cpu.shares
1024

$ lxc-cgroup -n bar cpu.shares
1024

預設 'foo' 及 'bar' 都是 1024 比重,都一樣,所以若同時啟動,各用 50 %

將 bar 設成 512
# lxc-cgroup -n bar cpu.shares 512

$ lxc-cgroup -n foo cpu.shares
1024
$ lxc-cgroup -n bar cpu.shares
512

所以這時 foo 用 66%,bar 用 33%


停止 foo (lxc-stop 是直接拔掉插頭,沒有依照正常關機程序來關機,若要正常關機,從 container 裡打 init 0 或 poweroff 或 shutdown -h now)
# lxc-stop -n foo

將 foo 給移除(包含砍掉 /var/lib/lxc/foo 整個目錄)
# lxc-destroy -n foo

基本上,lxc 是新的 linux 技術,雖然功能還不是非常的完整,但是已經堪用,尤其一些舊硬體,若不支援 vmx 或 svm,無法用 redhat kvm 的情況,但又不想花太多時間去學 xen,則 lxc 是最好的選擇了。

P.S. 在 container 中,udev 是無法運作的。
P.S. 由於是共用同一個 kernel,所以在 linux 上是無法跑 windows、freebsd 的,只能跑 linux

2011年4月1日 星期五

one time password

由於常常有機會從外面的電腦甚至是網咖連回家中的 server,很容易就會被 keylogger 記錄起使用者及密碼,若改用 public key 則要隨身攜帶隨身碟之類的,滿麻煩。所以最好用的應該就是 OTP( one time password) 了,在第一次設好後,將一部份的密碼印出來在紙上,隨身攜帶,平時還是使用帳號及密碼登入系統,若是在不安全的電腦上,就直接按 Enter 跳過帳號密碼登入,接下來會出現 otp 的登入訊息。

在 debian 上步驟如下:
    # apt-get install opie-server opie-client
    # vi /etc/pam.d/sshd
    change
    @include common-auth
    to
    auth    sufficient      pam_unix.so nullok_secure
    auth    sufficient      pam_opie.so
    auth    requisite       pam_deny.so
    auth    required        pam_permit.so
    auth    optional        pam_ecryptfs.so unwrap


    並且要修改 ssh server 的設定檔,這樣才會出現 otp 的密碼訊息
    # vi /etc/ssh/sshd_config
    ChallengeResponseAuthentication yes
    and restart sshd
    # /etc/init.d/ssh restart



    第一次要先用 opiepasswd 初始密碼
    The OPIE services must be initialised with the command: (run by user which wanna login)
    in opie server:
    $ opiepasswd -c
    to allow users to log-in with OTPs
    Updating behappy:
    Only use this method from the console; NEVER from remote. If you are using
    telnet, xterm, or a dial-in, type ^C now or exit with no password.
    Then run opiepasswd without the -c parameter.
    Using MD5 to compute responses.
    Enter old secret pass phrase:
    Enter new secret pass phrase:
    Again new secret pass phrase:

    ID behappy OTP key is 499 po9644
    BABY JACK FIGS KYLE SOCK RAKE

    列出20組密碼隨身攜帶:
    get the password list:
    $ opiekey -n 20 499 po9644
    Using the MD5 algorithm to compute response.
    Reminder: Don't use opiekey from telnet or dial-in sessions.
    Sorry, but you don't seem to be on the console or a secure terminal.
    Warning: Continuing could disclose your secret pass phrase to an attacker!
    Enter secret pass phrase:
    480: SITS DUE ALVA BEEN WOO OBOE
    481: WADE GLUM NOVA THAN OVEN HAAS
    482: REAL LET CON VETO BLOW MOSS
    483: IRIS LUGE FAT RECK CORN ARGO
    484: HUGH LUG EDGE JEFF FOLK HATH
    485: ODE TEND MIKE FIR FATE DAYS
    486: WAND PUB OHIO JOY EMIL COCA
    487: IRK SOB CUBA KALE OAK COAT
    488: SOFA MIRE LEER BOP OTT JAM
    489: LOAD HOW SWAT OWL MILT AIDA
    490: OUT LEAR CRAG LOON LUND MONK
    491: NEWT BOLT SANK HURD BUG DEAN
    492: SET ANTI DEAL CAST JAIL ROBE
    493: REAL BEER ROVE CUFF RET MUG
    494: NON RAID ETC ROB HAVE YARN
    495: BOON CAW RUE LAM LATE HOCK
    496: FIRM HARK EM ALTO NOW FRY
    497: GOOF WEAL SHAM OAR LACY RILL
    498: EST PAY WAG GOLF PA ART
    499: BABY JACK FIGS KYLE SOCK RAKE

    在外面用 ssh 登入時,一開始還是和平常一樣,要你輸入原本系統的密碼,這時直接按 Enter 跳過,再來就是 otp 的訊息了,出現了 497 號,所以查看列出來的 497 組密碼,全部輸入即可登入。
    $ ssh localhost
    Password: [ just press enter to skip normal login]
    otp-md5 497 po9644 ext, Response: [ key in the number 497 above ]

    You have mail.
    Last login: Fri Apr  1 00:56:48 2011 from pony

    yes, it works.
    不會很難地。