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