2012年11月15日 星期四

Linux Container (lxc) - 物美價廉的 Virtualization

今天因爲工作的需要又裝了一次 Container,沒想到在 Ubuntu 下面裝 Container 已經變得如此簡單,所以趁着記憶新鮮的時候講 Setup 的步驟記錄下來,希望可以讓更多人用到這們好的東西。



在這之前先講講 Container 是什麼東西,簡單來講,我們常常透過 Virtual Machine 來當做測試、開發用的 「沙盒(Sandbox)」,目的就是爲了不要污染原本電腦中的環境,也保持環境的乾淨度以利測試或開發進行,但是 Virtual Machine 耗費的資源過於龐大,一下就得佔走一顆 CPU 和一定數量的 Memory,唯一的好處就是可以裝不一樣的作業系統,但要是不需要不一樣的作業系統的時候呢?這時候我們就可以用 Container 啦,而 LXC 就是在 Linux 底下可以方便使用這個機制的一套工具!

Container 是基於 chroot 的概念出發的機制,由於 Linux 系統底下「萬物皆檔案」,所以只要能把檔案系統分開來,看起來就是另外一臺不一樣的電腦啦!

Container 的 Wikipedia: http://en.wikipedia.org/wiki/Operating_system-level_virtualization

接下來來講講如何 Setup 吧!




雖然講的是 Ubuntu,但是由與筆者的電腦是 Linux Mint(骨子還是 Ubuntu 的另外一套 Linux distro),所以中間步驟會有一點差異,但是差異不大,大概就是沒差異啦。

(1) 安裝 lxc

首先,透過 apt-get 安裝 lxc,

sudo apt-get install lxc

透過 apt 安裝有一個好處,就是網路介面、cgroup 等等東西都不用自己設定,裝好的時候就幫你建立好了,ifconfig 裏面可以發現多了橋接介面,用於連接 lxc containers 的網路。

(2) 建立 Container

和 Virtual Machine 一樣,在開始使用之前要先建立 VM,所以我們也要開始創建一個 Container,透過 lxc-create 這個指令就可以馬上建立一個全新的 Container

lxc-create -t ubuntu -n test-1


  • -t: template
  • -n: container name(這裏 test-1 可以代換成你想要的名字)


這時候 lxc 就會跳出一堆 blahblah,幫你建立了,如果你之前沒有幫 root 建立 public key,他會在過程中詢問且建立一個。

第一次建立 Container 會久一點,因爲他要從網路上抓全新的 ubuntu 環境下來,大約 400 MB 左右,不過之後就可以省掉這個步驟了,大概 20 秒就可以開好一個。

建立完後可以用 lxc-list 看到 Containers 的狀態。


RUNNING
  lxc-lab

FROZEN

STOPPED
  ejcluster1



(3) 運行建立好的 Container

lxc-start -n test-1 -d

-n: container name
-d: run as daemon

這個指令會運行已經建立好的 Container 然後放到背景運行,強烈建議一定要加上 -d 選項,之後再用 lxc-console 指令或 ssh 連進去就好。

(4) 連入運行中的 Container

lxc-console -n test-1

記著:離開的指令是 <Ctrl-a> 然後按  <q>。

預設的帳號密碼應該都是 ubuntu。

(5) 關閉運行中的 Container

lxc-stop -n test-1

這樣就可以把不用的 Container 關起來。

2012年11月7日 星期三

Linux Mint 13 的臺灣鏡像站菜單

有鑑於每次都要改 /etc/apt/source.list 很麻煩,所以我做了一份 for Linux Mint 13 的 Mirrors 菜單請大家品嚐(順便備份),如果有推薦的菜色也可以在下面留言或寄信給我,我再把它加進去。


2012年11月5日 星期一

解決 Mac OS X 無法儲存密碼的問題

升級到 Mountain Lion 之後,開始遇到一個問題:每個需要登入的程式一旦重開,就會要我再登入一次,就算勾選了「Remember Me」或是「Automatically login at next time」都沒有用。

我的 Mountain Lion 是 Clean install 的,爲什麼遇到這個問題我也不懂,可能是我同時有兩個 Mac OS X 並存的關係。


2012年5月28日 星期一

自己編譯 Boot2Gecko 快速上手


B2G,Boot2Gecko 是最近 Mozilla 另外一個 Open Source 專案,將 Web 開發的相關技術帶回到 Mobile 的開發平台上面,用 HTML/CSS/JavaScript 等你所熟悉的 Web Technologies,就可以輕輕鬆鬆的開發 Mobile app,這個專案目前還在開發中,想要搶先體驗的朋友可以自己上去抓 B2G 的 source 自己 build。

2012年4月15日 星期日

[Erlang] 如何用format的方式產生字串

其實字串在Erlang中叫做List of chars,但是為了讓標題變得比較容易找到還是用通俗講法的字串,也就是string。

平常我們使用format字串的時機其實是在io:format/2的時候,這也是大多數Erlang書籍範例中會一直出現的,但是io:format/2其實只是一個可以把結果輸出stdout的function而已,並不能產生字串來處理或是存入變數,書籍上也鮮少提到說產生format字串的方式。

其實Document中還有一另外一個library叫做io_lib,裡面有個io_lib:format/2,用法跟io:format/2大同小異,唯一的差別就是他會return一個char list。

所以這時候就可以用下面這個statement:

StringData = io_lib:format("~p~p", [StringOne, StringTwo]). 

StringData就會被存入一個format之後的字串了。

Original Link: How do you get the result from io:format into a string

Documentation Link: Doc - io_lib:format/2

2011年9月26日 星期一

在Mac上編譯用GLUT寫的OpenGL程式

這篇文章主要寫給修3D遊戲設計的Mac User,在Mac上面編譯OpenGL有些部分不太一樣,所以特別寫這邊記錄下來也分享給其他人。

2011年8月12日 星期五

Build a pure Google App Engine environment on your Mac (virtualenv+PIL)

Update: this is unavailable for the current app engine SDK, will occur the cgi import error, the suggestion from experts is "do not use virtual environment with Google App Engine."
  1. Install Google App Engine at first (details at http://code.google.com/appengine)
  2. sudo port install py25-pil (this will install python2.5 and PIL)
  3. virtualenv --python=`python2.5` --no-site-packages appengine
  4. enable your virtual environment
  5. pip install PIL
that's all.