在Windows下设置coLinux环境的方法
在Windows下设置coLinux环境的方法
前言
coLinux 的全名是 Cooperative Linux,介紹到此結束 (爆)。這篇只是我的記錄,所以不想打太多字啦,簡單的說就是可以把 Linux 當作一般的應用程式來執行,所以是直接執行 Linux,額外的負擔比較少 (要執行 VM 或 cygwin 也是需要額外資源的)。
雖然我自己大部份時間是使用 Linux 作業,但有時候就是很無奈,因為種種原因只能在 Windows 上操作,不過嘗過 Linux 甜頭的人實在是很難適應 Windows 那樣貧乏的環境;有時則是因為臨時需要 Linux 的實驗環境,但主要工作都在 Windows 上,很難完全轉移。我相信這類情況不是只有我遇到,因此就出現了各種解決方案。
過去最常見的方式是執行 Virtual Machine,如 VMWare 或 Virtual PC 等等,或者是透過 cygwin 之類的模擬環境,還有我這次想介紹的 coLinux。這些工具各有優劣,我只就我個人的使用經驗來談:Virtual Machine 太耗資源,cygwin 環境雖然很接近,但有些跟終端機相關的設定又不太一樣,用起來很不順手。而 coLinux 跑的是 User-mode Linux,環境上最接近真正的 Linux (根本就是),大部份操作跟真正的 Linux 環境下是一樣的,設定檔也可以直接搬過來用。所以自從我知道有這種好東西後,就把其他工具丟掉,專心試用 coLinux。
我的目標大概是這些:
- 可以使用 putty 連線到 coLinux 中進行作業
- coLinux 可以連線到外面的網路,方便系統更新
- Windows 與 coLinux 的檔案交換
- X 環境?
我會記錄如何達到這些目標。但這篇筆記的不包含 Linux 的使用,因此很多東西除非必要,或者是我自己覺得需要特別註解,不然我就不特別解釋了。因此內容主要著重在建立整個環境與設定,主要是方便我自己作業。有其他需求的話請自行調整,設定或操作上的問題也歡迎和我一起討論。網路上可以找到不少介紹 coLinux 的文章,也可以多參考。
安裝
第一步當然是安裝啦。要將 Linux 當作一般的應用程式來執行需要特殊版本的 kernel,coLinux 主要就是在做這件事。因此它不包含 Linux 的其他環境,需要另外下載。我個人習慣的的是 Slackware,但因為沒有現成的 disk image 可以用,所以退而求其次用 Debian image。其他還有 Arch / Fedora / Gentoo 等選擇,挑一個自己習慣的就好。下載點可以參考 wiki 和 sf.net。
Windows 下的軟體安裝相信不會有問題,這邊就不多說了。接下來用 7-Zip 或 WinRAR 之類的軟體解開下載好的 disk image,放在自己喜歡的地方 (建議不要放在路徑有空白或中文字的地方)。
接下來就是修改一下設定檔了。我習慣把設定檔跟 disk image 放在一起,往後直接指定設定檔路徑就好,比較不會搞混。設定檔只是單純的 XML 格式,通常簡單修改一下預設值就可以了跑了。需要修改的地方大概有 image path、memroy size 和 network:
<block_device index="0" path="DosDevicese:coLinuxfs_root" enabled="true" /> <memory size="256" /> <network index="0" type="tap" />
執行的時候輸入 (路徑請自行代換):
colinux-daemon -t nt -c e:coLinuxcolinux.xml
因為我覺得內附的 fltk cosole 很醜,所以直接用 nt 就好了。如果看得到 boot 過程並到達登入畫面,代表設定無誤,可以試著登入看看。一般都會有 root 帳號,但密碼卻不一定,有的不需要密碼,有的是用 ‘root’ 或 ‘colinux’ 當作密碼,這個只能自己試試看了 (也許 wiki 上有寫)。登入無誤的話,基本安裝就算是完成了,可以進行下一節的設定。
基礎設定(一)
這些現成的 disk image 環境通常不符合自己的習慣,所以通常需要稍微設定一下。以我下載的 Debian image 來說,root 沒有密碼,甚至連 shadow 檔都沒有;網路還沒設定,檔案也有點舊了。幸好 Debian 的升級還算方便,所以整個過程不會太難。
首先是密碼的部份。解決方式很簡單,只要建一個 shadow 檔,執行 pwconv 指令,再透過 passwd 設定 root 密碼就可以了。接著就可以建立一般使用者的帳號作為平常工作使用。我個人習慣透過 sudo 來管理系統,除非需要長時間使用 root 權限,不然很少動用 su。因此還需要設定一下 /etc/sudoers:(執行 visudo)
letoh ALL=(ALL) ALL
覺得每次要打密碼很煩的話就加個 NOPASSWD 吧。詳細的設定語法可以 man sudoers。
印象中還缺了一些重要檔案,例如 /etc/hosts、/etc/hostname 和 /etc/resolv.conf 等等,請檢查一下並手動建立。
另外,我習慣把 home 獨立放到一個 disk image 中,這樣的話如果有多個 root image 的話可以共用個人資料,會方便許多;備份時也會很方便,好處多多。做法很簡單,先到 這裡下載空的 fs image,編輯設定檔 colinux.xml:
<block_device index="1" path="DosDevicese:coLinuxfs_home" enabled="true" />
這需要重新啟動 coLinux 才會生效。順帶一提,這個 disk image 在 coLinux 中對應的 device 是 /dev/cobd1,最後的數字對應到設定檔中的 index 值。重新進入 coLinux 後可以試著 mount 看看有沒有問題:
mkdir -p /mnt/test mount -t ext3 /dev/cobd1 /mnt/test
沒問題的話可以寫進 /etc/fstab,往後開機就會自動載入了 (記得 /home 的資料先移到新的 disk image 中):
/dev/cobd1 /home ext3 defaults 0 1
如果覺得需要 swap 的話也可以依此類推建立。
到這裡應該覺得輸入很不方便吧,沒有順手的 editor;尤其是需要 copy&paste 的時候。我的目標是利用 putty 連線進去,但因為網路還沒設定好,系統也未必有裝 sshd,所以暫時擱下系統的更新,先把網路搞好再說。
網路設定(一)
這個小節的目標是搞定 Windows 上的網路設定,讓 Windows 可以連線到 coLinux,而 coLinux 也可以連線到外面的網路。首先是對外網路卡的設定,我選擇了 TAP + NAT 的方式來設置 coLinux 的網路環境。至於 bridge 環境的設定可以參考網路上其他文章的介紹。
一般我是把 TAP 設定成 192.168.0.1,至於 default gw 與 name server 請自行參考原本的網路環境來設定。
再來是網路分享設定。找到對外的網路卡後,在進階的設定頁中勾選允許分享連線的選項,請參考下圖。
有些版本的 Windows 還可以選擇要分享給哪一個連線 (我搞不清楚是哪個版本),記得要選擇 TAP 那個網路,不然 coLinux 就不能上網了。
網路設定(二)
搞定 Windows 端的網路後,coLinux 對外的網路已經通了,但設定可能還不完備,可以先用 ifconfig 指令看一下,必要時再手動調整一下 (視使用的 distro image 而異)。
以我使用的 Debian 為例,需要設定的地方在 /etc/network/interfaces,設定內容如下:
auto lo eth0 iface eth0 inet static address 192.168.0.40 gateway 192.168.0.1 netmask 255.255.255.0 iface lo inet loopback
存檔後重新啟動網路即可:
/etc/init.d/networking restart
如果喜歡用 ifocnfig eth0 … up 和 route add 來設定也可以,default gw 設成 192.168.0.1 就可以出去了。通通設定好以後就可以用 apt-get 將系統更新到最新的狀態了,我習慣更新到 testing,可以安裝比較多套件,穩定性也不會太差。先修改 apt 的設定檔 /etc/apt/sources.list:
deb http://http.us.debian.org/debian testing main contrib non-free deb http://security.debian.org/ testing/updates main contrib non-free
再進行更新:
apt-get update apt-get dist-upgrade
詳細操作請自行參考 Debian 的教學文件。一開始的 distro image 很陽春,可能有不少東西需要安裝,我唯一建議安裝的套件是 openssh,這樣我們就可以透過 putty 來連線,或是用 sftp 來進行檔案交換:
apt-get install openssh
至此雙向的網路已經暢通,可以用 putty 連線到 192.168.0.40 看看 ssh 連線有沒有問題,或在 coLinux 連上網頁或 BBS 看看。一般性的操作是沒問題了,接下來比較麻煩的大概就是檔案交換吧,這個留待後面再來解決吧,目前還有其他事要做。
基礎設定(二)
又回到基礎設定了。為什麼還需要這一節呢?雖然前面已經把基本的系統都設定妥當,網路也 OK,但啟動時總覺得不方便,執行中也會留下一個 cmd 視窗。總之就是看不順眼,所以需要設定一下啟動方式。coLinux 目前可以作為 Windows 的 service 來啟動 (需要 NT 以上版本),這樣就可以在開機時自動啟動,也不會留下礙眼的 cmd 視窗。
colinux-daemon --install-service -c e:coLinuxcolinux.xml
在執行(Win+R)的對話盒執行 services.msc 可以檢查一下是不是有正確安裝:
網路設定(三)
基本上網路是都好了,這一節只是記錄一下方便的小技巧。
我前面有說過我想使用 putty 連線進去,但每次連線都要打密碼有點煩,所以這邊建議改用 public key auth。這樣只要執行 Pageant (putty 附的小程式),把 private 加進來後,以後就不用一直打密碼了。方法如下:
- 執行 puttygen.exe,最下面的 type of key to generat 選擇 SSH2 RSA
- 按下 Generate 按鈕後會出現進度條,這時在視窗的範圍內隨意移動滑鼠,直到進度跑完
- 在 Key passphrase 的地方輸入一個密碼,同時 comfirm 欄位也要填入一樣的密碼,用來保護 private key。輸入無誤後可以按 Save private key 將私鑰存成檔案,這個檔案不可以亂丟,也不能公開,算是個人身份證
- 視窗上的 Public key for authorized_keys2 file 欄位會有一堆跟亂碼一樣的字串,全選後複製起來,加入工作站中 ~/.ssh/authorized_keys2 這個檔案中,別忘了這個檔案必需要 chmod 600
- 執行 pagenat 後會在 system tray 上出現一個圖示,按滑鼠右鍵選擇 add key,選擇剛剛儲存的 private key 後,會要你輸入一次 passphrase。
往後只要不關掉 pagenat,就不需要再重新輸入 passphrase,同時透過 putty 登入工作站會自動改用 public key 來認證,而不是密碼認證了
另外,我們可以把設定過的 putty session 存起來,這樣只要在桌面上建立一個新的 putty 捷徑,並在命令列的地方加上 “-load <session name>” 就會自動載入設定,使用起來就更方便了。
檔案交換
有這個需求的理由很單純:資源有限,欲望無窮阿 (喂喂∼不是在上經原吧)。Disk image 的大小有其限制,而且塞太多資料,往後備份很不方便。最理想的方式就是把一般資料都放在 Windows 裡,需要特殊屬性的檔案 (如 script 需要設定為可執行) 就可以放在 disk image 中。
要做到檔案交換的方式有很多種,大致上有 (S)FTP、HTTP、NFS、samba 等方案。目標就是兩點:
- 在 Windows 的 File Manager 中存取 coLinux 中的檔案。
- 從 coLinux 中簡單存取 Windows 端的檔案
Windows -> coLInux
要設置這些服務應該不難,問題在於我不太熟 Windows 的網路設定,所以我只選擇最簡單的方法。要做到第一點只要簡單設定一下 samba 就可以了。先安裝 samba 套件:
apt-get install samba smbclient smbfs libsmbclient samba-common
Debian 的 samba 的設定檔在 /etc/samba/smb.conf,找到以後需要修改一下幾個設定:
[global] workgroup = your-087df13f91 server string = Henrietta unix charset = UTF-8 [homes] browseable = no writable = yes create mask = 0600 directory mask = 0700
沒列出來的選項就按照原檔案中的設定不用改。Server String 請自己取,而 workgroup 則是參考 Windows 上設定的 hostname,以後會方便一些:
存檔以後需要重新載入設定:
/etc/init.d/samba reload
但只是這樣還不夠,還需要新增 samba 的帳號密碼:
smbpasswd -a <user>
設定好以後試試從 Windows 連線網路磁碟機,輸入帳號密碼後就可以順利存取個人目錄了。
coLinux -> Windows
接下來是困擾我最久的部份。Windows 上設定分享目錄並不難,但設定好的目錄老是沒辦法讓其他電腦存龋找了很久的資料才知道,原來要指定 Windows 的 hostname,瞭解以後就很簡單了。首先在 Windows 建立一個帳號給 coLinux 使用,比較保險一點還可以設定成不能本機登入或限制其他權限:
設定好分享的目錄後,一開始可以先用 smbclient 測試看看:
smbclient -U <user> -L <netbios name>
看得到分享出來的目錄就算是成功了,可以把設定檔寫到 /etc/fstab,帳號密碼的部份建議統一存到 /etc/samba 裡方便管理。
//host/share /mnt/share smbfs noauto,credentials=/etc/samba/smbpw.host, ip=192.168.0.1,charset=utf-8,codepage=950,rw,uid=letoh 0 0
密碼檔格式參考 man smbmount。往後就可以方便存取 host 端的資料了。
事實上 coLinux 還提供了一種叫 cofs 的東西可以使用,我試用的結果是很方便,但彈性不太大,更改的話得修改設定檔並重新啟動 coLinux。而且根據 wiki 上的開示,似乎還不太穩定,所以暫時還是先用安全一點的辦法吧。(想嘗試的勇者請自己參考 其他資料)
X 環境
coLinux 據我所知是沒辦法跑 X Server 的,但是可以跑 X client。其實這樣就夠了,只要使用一些可以在 Win32 上使用的 X Server 就可以執行大部份 X 程式。可以使用的方案很多,我目前使用的是 Xming,使用起來很方便,要顯示中文也沒問題 (需要自己安裝字型)。
安裝上不會有問題,但因為 coLinux 跟 host 算是不同機器,比較有問題的可能是 host access list 的設定,不設定的話 X client 會警告 “can’t open display”。一般是執行 xhost 加入就好,而 Xming 沒辦法這樣做。找了半天才知道,在 Xming 安裝目錄下有個 X0.hosts 檔案,把 coLinux 的 IP 加進去就可以了,夠簡單了吧。
然後設定好 DISPLAY 變數就可以了:
export DISPLAY=192.168.0.1:0
列印
雖然列印的需求可能不太高,不過如果需要定時印個報表什麼的還是蠻好用的,所以這邊還是介紹一下。
首先 Windows 端要設定 printer 可以分享,而且可以透過前面提過的 smbclient 指令看到。接下來只要把想列印的資料通過 pipe 丟給 smbclient:
cat file | smbclient //192.168.0.1/<printer> -U <user> -c "print -"
資料會自動送給 Windows 的 spooler,然後印出來。有的印表機接受 postscript,有的是 pcl,而大部份都可以直接接受純文字資料,所以可以根據需求自己安裝額外的 filter,例如 a2ps 之類的程式。
備份
偶爾想亂玩系統的時候,coLinux 就非常好用了,可以先備份系統,玩壞再還原就好。關於備份的部份可以參考我以前寫過的 這篇文章。
結語
完。(既然是筆記就不要太囉嗦了)
參考網址
-
Tools
- coLinux
- putty
- Xming
- 7-Zip
-
Document
- coLinux Wiki
- 使用 smbmount 存取 host pc 與檔案的方法(JP)