coLinux 介紹與應用

1. coLinux 簡介

Cooperative Linux, 簡稱 coLinux, 是一種對 Linux kernel 的移植, 讓一台機器可以協同運作不同的作業系統. coLinux 的前身 UMLWin32 最早是由 Dan Aloni 在 2000 年所開發, 當時的目的是為了將 User Mode Linux 移植到 Cygwin 上. 在 2003 年時, Dan Aloni 運用了不同以往的想法與做法, 於是, 便產生了 coLinux.

coLinux 不同於 VMware 等模擬器, coLinux 本身並不是模擬一台PC, 而是透過它本身的特殊設計, 讓在其中運作的 Linux kernel 直接使用 Windows 的硬體資源. 因此, 對大部份的使用者來說, coLinux 本身的速度與真實機器的速度相差無幾.

更重要的是, coLinux 是完全免費的. (GPL2)



2. coLinux 系統需求
  • 在 Intel 386 以上相容機器運作
  • 在 Windows 2000, Windows XP, Windows 2003 下執行
  • 最低需求: Windows 2000, PIII 450Mhz, 64MB RAM

3. coLinux 功能

A. 現有功能

  • 支援 Linux 2.4.x, Linux 2.6.x
  • 支援各種 Linux Distribution (Debian/Gentoo/Fedora/TopologiLinux/Mandrake/Slackware/Knoppix)
  • 可存取 Windows 與 Linux Partition
  • 可存取 Windows 檔案及目錄
  • 可存取 CD/DVD
  • 可存取 RAID/LVM
  • 支援網路 (透過 TAP 或 Bridge)
  • 支援聲音 (透過 ESD)

B. 未來功能

  • 支援 Frame Buffer
  • 支援 Native X Server

4. 安裝 coLinux

coLinux 目前最新的版本是 0.6.2 版, 可以到 coLinux Download 區選取下載或者直接下載 coLinux 0.6.2.

安裝過程如下:

  • 安裝 coLinux 0.6.2

  • coLinux 是採用 GPL 授權

  • 安裝時不需下載 Root Filesystem image

  • 安裝位置通常都是用 C:\coLinux

  • 如果需要使用 Bridged Ethernet, 需自行下載安裝 WinPCAP

  • coLinux 的安裝過程很簡單

  • coLinux 附的 TAP Driver, 如果要使用 TAP 的 Network, 就一定要安裝

  • 安裝完成

5. coLinux 基本設定

coLinux 的所有基本設定, 都可以在 xml 設定檔中定義. 底下以 coLinux 預附的 default.colinux.xml 來說明設定檔中, 各項參數的意義.

  • <block_device enabled="true" path="\DosDevices\c:\coLinuxroot_fs" index="0" />
  • <block_device enabled="true" path="\DosDevices\c:\coLinuxswap_device" index="1" />

coLinux 是使用它特有的 device (cobd), 這裡是在定義 /dev/cobd0 與 /dev/cobd1. cobd0 指向 c:\coLinux\root_fs, cobd1 則指向 c:\coLinux\swap_device. 在這裡, 這兩個 device 都是 image file. coLinux 下預設的 boot image 是 cobd0, 而預設的 swap 則是 cobd1.

  • root=/dev/cobd0

這是用來設定 linux kernel 開機時所需傳遞的參數. 參數設定的方法與 grub 及 lilo 相同.

  • <bootparams>root="/dev/cobd0"</bootparams>

這是指定用來做為 initrd 的 image file. coLinux 本身有它自己專門的 initrd.

  • <image path="vmlinux" />

這是指定用來開機的 linux kernel image. 預設是使用 coLinux 附的 kernel image.

  • <memory size="64" />

這是分配給 coLinux 的記憶體大小, 如果只有跑 linux console, 至少需 64MB, 如果有執行 X, 則最好能配置 128MB 以上.

  • <network index="0" type="tap" />

這是 coLinux 所要使用的網路型態, 有 TAP 與 Bridged 兩種.

以上是基本設定, 其他進階設定, 請參照 coLinux 官方文件.

6. 執行 coLinux

當所有的設定都沒問題時, 就可以執行 coLinux .coLinux 有兩種執行方法, 透過 Command-Line 或透過 System Service. 底下分別說明兩種方式的不同.

7. coLinux 下的網路

A. TAP

在 TAP 模式下, coLinux 是透過 TAP Driver 與 ICS(Internet Connection Sharing)的方式來使用 Windows 的網路. 這時, Windows 的 ip 預設為 192.168.0.1, 而 coLinux 的預設 ip 則通常為 192.168.0.2.

要順利使用 TAP 模式, 有幾個動作要先完成.

  • 選擇目前對外的網路卡, 允許 TAP 使用這張網路卡的共用連線

  • 檢視 TAP 網路卡的 TCP/IP

  • TAP 的 IP 應該會被設為 192.168.0.1

順利完成以上動作後, coLinux 執行後, TAP 就會正常運作.

B. Bridged

若要使用 Bridged 模式, 設定檔中網路的部份要改成

coLinux 所偵測到的網路卡則應該是 "Realtek RTL8139/810x Family Fast Ethernet NIC".

8. 在 coLinux 上運行 Fedora - 使用 Image File

如果想要在 Windows 上, 透過 coLinux 來運行一個全新的 Fedora, 使用 image file 是個不錯的方式.

首先, 必須先下載安裝 coLinux, 方法如上. 另外, 還需要下載 Fedora 的 image file. coLinux 官方附的是 Fedora Core 1 的 image, 這個 image 可以使用在 linux 2.4.x 與 linux 2.6.x 上.

另外, 如果想使用 linux swap, 可以下載預先製作好的 Swap Image.

底下是 coLinux 使用 Fedora 的設定檔範例:

<?xml version="1.0" encoding="UTF-8?>
<colinux />
<block_device enabled="true" path="\DosDevices\c:\coLinuxfc1_2GB_root" index="0" />
<block_device enabled="true" path="\DosDevices\c:\coLinuxswap_64MB" index="7" />
<bootparams />ro root=/dev/cobd0 3 fastboot nogui</bootparams />
<initrd path="initrd.gz" />
<image path="vmlinux" />
<memory size="64" />
<network index="0" type="tap" />
</colinux />

有幾點要注意.

  • Fedora 的 swap device 並不是在 cobd1, 而是在 cobd7.
  • 在 bootparams 所下的參數, 不能使用 root=/dev/cobd0, 而要使用 ro root=/dev/cobd0.
  • 第一次執行 coLinux Fedora 時, 可能會因為找不到 kernel module 而造成執行失敗. 這時再重新執行一次就可以了.
  • 當 Fedora Core 1 順利開機後, 要將 coLinux 所附的 kernel module 檔 vmlinux-modules.tar.gz 解壓縮到相對應的位置.
  • coLinux 官方所附的 Fedora Core 1, 一開始的網路設定是有問題的, 需要手動改 /etc/resolv.conf 與 /etc/sysconfig/network-scripts/ifcfg-eth0 內的設定.
  • 開機完成的 Fedora Core 1 若要升級, 請按照 Fedora 本身的方式升級即可.

9. 在 coLinux 上運行 Fedora - 使用 Native Partition

如果已經在電腦中將 Fedora 安裝在單獨的 Partition 中, 通常都會使用 Dual Boot 來做作業系統中的切換. 有時不斷地切換開機是一件很煩人的事, 而 VMware 等模擬器又無法存取 Native Fedora.

用 coLinux 就沒有這種煩惱! coLinux 可以將原本需要 Dual Boot 開機執行的 Fedora Partition, 直接在 Windows 中開機執行, 而且就像是一台完整的機器一般, 依然保有所有原來的設定.

這又是怎麼做到的呢?

首先要轉換原本 Fedora 的 Partition. 要在 /dev 建立 cobdN(0..7). 這可以使用底下的 script 做到:

  for i in 0 1 2 3 4 5 6 7   do      mknod /dev/cobd$i b 117 $i   done 

然後要將會因 coLinux 與 Fedora 環境不同而受到影響的檔案做自動判斷. 總共會有以下幾個檔案

/etc/fstab
/etc/hostname
/etc/resolv.conf
/etc/sysconfig/network-scripts/ifcfg-eth0

可以將這幾個檔案依不同環境, 分別製作 colinux 與 fedora 專用. 並且利用bootparams傳入COLINUX這個環境變數. 自動判斷的部份則可以使用以下的 script:

if [[ $COLINUX ]]; then
SUFFIX=colinux
else
SUFFIX=fedora
fi

for conf_file in
"/etc/fstab"
"/etc/hostname"
"/etc/resolv.conf"
"/etc/sysconfig/network-scripts/ifcfg-eth0"
; do
cp -f $conf_file-$SUFFIX $conf_file
done

另外要記得將 coLinux 所會用到的 kernel module 裝到 Fedora 的 Partition.

接著便是 coLinux 的設定檔. 假設電腦上的硬碟是用以下的方法來分割:

那麼, 在 Fedora 上看到的裝置就分別是 hda1(C:), hda2(D:), hda5(/boot), hda6(/), hda7(swap). 但是, 在 coLinux 上的裝置則是有所不同, 分別為 partition1(C:), partition2(D:), partition3(/boot), partition4(/), partition5(swap). 關於在 Windows 上檢視 Partition, 請使用 dd for Windows.

所以, coLinux 的 Native Boot 的設定檔應該如以下的範例:

<?xml version="1.0" encoding="UTF-8"?>
<colinux>
<block_device index="5" path="\Device\Harddisk0\Partition3" enabled="true" alias=hda5 />
<block_device index="6" path="\Device\Harddisk0\Partition4" enabled="true" alias=hda6 />
<block_device index="7" path="\Device\Harddisk0\Partition5" enabled="true" alias=hda7 />
<bootparams>ro root=/dev/hda6 3 fastboot COLINUX=1</bootparams>
<initrd path="initrd.gz" />
<image path="vmlinux"></image>
<memory size="256"></memory>
<network index="0" type="tap" />
</colinux>

實際上 Native Fedora 在 coLinux 開機之後, 會像是以下的畫面:


10. 在 coLinux 上執行 X

coLinux 目前還不能直接支援 X. 要想在 coLinux 的環境下執行 X, 主要有兩種方法. 第一種是在 Windows 安裝 XFree86 Server, 再將 coLinux 上的 X 轉向到 Windows 上的 XFree86. 第二種則是透過 VNC 來執行 X. 這裡要介紹的是第二種方法.

步驟如下:

  • 首先要安裝 X Server 所需的所有套件, 並且安裝 vnc-server.
  • 將 /root/.vnc/xstartup 增加 startkde.
  • 執行 vncserver -geometry 800x600
  • 在 Windows 上執行 vnc-client, 連接到 192.168.0.2:5901

當連接成功後, 看到的是以下的畫面:


如果要在 Fedora 一開始時就自動執行 VNC, 請參考 VNC On Boot.

如果想嘗試其他在 coLinux 上執行 X 的方法, 請參考 XCoLinux.

11. 相關資源

A. Command-Line

範例: colinux-daemon.exe -c default.colinux.xml -t nt

參數:

  • -c 執行 coLinux 時使用的設定檔
  • -t Console 的型態, 有 nt 與 fltk 兩種

B. System Service

要先將 coLinux 安裝成 System Service. 方法如下:

colinux-daemon.exe -c default.colinux.xml --install-service "Serive Name"

參數:

  • -c 安裝 coLinux 系統服務時使用的設定檔
  • --install-service 要安裝的系統服務名稱

系統服務安裝成功後, 可以使用系統管理工具來啟動或停止 coLinux. 也可以使用 net start/stop 的方法來管理.

另外, 也可以使用 coLinuxManager 來管理 coLinux 的系統服務.


意見

匿名 提到...

您好 我已經啟動xwindow vnc進去 他就開始載入 不過在入一陣子以後就是藍色桌面 工作列都沒有是要等很久的關係嗎 因為我是用usb硬碟

minstrel 提到...

這應該是X Win沒有正常啟動的結果. 請參照文章中第10點(在 coLinux 上執行 X)的說明. 你是用KDE還是GNOME? KDE要使用 startkde, GNOME則是使用 gnome-session.

匿名 提到...

小弟在裝 FEDORA 8 在 COLINUX 上時,
多遍也只有下列 MESSAGE.
我是跟着 http://colinux.wikia.com/wiki/Fedora8MinimalChroot 做的。

請救救.... 謝謝!

Warning: unable to open an initial console.
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
colinux: Linux VM terminated
colinux: terminated with code 3 - abnormal exit, aborting
console: Monitor5684: Detached
Cooperative Linux Daemon, 0.7.2
Compiled on Jan 18 2008 21:47:09

Press any key to continue . . .

匿名 提到...

補充上方COMMENT。
我明明有 initrd=initrd.gz 在 conf file 中


colinux: kernel panic suggests that either you forget to supply a
root= kernel boot paramter or the file / device mapped to the root
file system is not found or inaccessible.
Please Check your coLinux configuration and use option "-v 3".