2007/02/09

geexbox devel + qemu + vnc

先說說為何要這樣做,知道動機就比較好辦。
我最近在玩 GeeXboX devel, 想了解其中整合 freevo 及其功能。當然透過 GeeXboX 的開發系統可以做出 iso 檔,燒錄,開機的一系列步驟來玩。相信沒幾個人想要這樣修改一個系統。

我早期曾將 GeeXboX 安裝到硬碟中,變成多重開機選項,這樣做也不錯,可以把東西事先解開來研究。但是因為變動頻繁,這樣的步驟會變成:
開機進 native linux, 修改 GX, 重開機進 GX, 重開機進 native linux 這樣的循環,也是非常慢的。

Ok, 不管燒成 iso, 或安裝成多重開機,都很麻煩。因此就想要找簡單的方法,我想到的是 Qemu, 從 iso 開機很正常,當然這樣已經非常舒服了,不過我這個人是非常懶的。因此就想讓 Qemu 從我的多重開機硬碟啟動 GX, 結果發現 GX devel 無法這樣啟動,得修正 kernel 把 CDROM 打開選項,這個表過不提。今天還想說,這樣啟動每次都會讓我的系統變得有點慢,因此就想到加上 vnc 功能。

先說說語法:
$ qemu -vnc :1 -hda gx.img

上面的 -vnc :1 是要啟動 vnc session, 號碼可能是 ;1, 也可能系統已有得換成別的
至於這個 gx.img 怎麼做,做法如下:


  1. $ dd if=/dev/zero of=gx.img bs=1M count=128
  2. $ qemu -hda gx.img -cdrom geexbox-1.0-en.i386.iso -boot d
    用 iso 當光碟開機,開機時記得在 boot: 時打 install 來安裝到你指定的 gx.img 所指向的硬碟,也就是 /dev/hda
    到這邊您也可以試試用 devel 版的 iso 來做這一步試試,若失敗才需要下一步,否則請跳過下一步。
  3. 此時的 gx.img 應該就可以開機,只是這是 1.0 版的。要怎樣才能把 devel 版的放進來呢?簡單的作法就是你自己透過 mount 的方式進去修改,當你把 devel 版的 /GEEXBOX 複蓋掉 1.0 版的時候,開機時用到的 initrd, vmlinuz 都還是指向 /initrd, /vmlinuz, 因此你可以:

    1. 修改 /boot/grub/menu.lst 讓它指向新的,或者
    2. 從新的 /GEEXBOX/boot 下將 initrd, vmlinuz 搬至根目錄中

    個人比較傾向前者,因為這樣不必每次有變動到就要改東改西的,menu.lst 若設得好,以後就不必改了。
    至於怎麼掛這個 gx.img 呢?這邊也提供兩個方向:

    1. 透過 qemu -hda gx.img 啟動時進 debug 模式。這一點算是相對上較易理解,但是因為 GeeXboX 提供的 busybox 工具不多,操作上可能有點麻煩,我也不想寫下來。簡單說是 GeeXboX 會把真正的硬碟分割區掛載成唯讀的,你得先掛成可讀寫的,而系統的 mount 不支援 mount -o remount,rw, 因此我是 umount, 再 mount。再來就是沒有 vi, 那就只好用 echo 了。
    2. 若你的 host 有支援 loop device, 那也可以 losetup -o 32256 /dev/loop0 gx.img 之後再 mount /dev/loop0 iso -t ext3。這樣進 iso 修改後再 umount iso 即可。
      註: losetup + mount 可以合而為一: mount -o loop,offset=32256 gx.img iso -t ext3
      註二: 32256 是怎麼算出來的?因為 fdisk -l gx.img 顯示的資訊如下,每個 track 共 63 sectors, 每個 sector 是 512bytes, 而第一個 partition 是從第一個 track 開始的,因此第一個分割區的位移是 63 x 512 也就等於 32256。因此若你的分割區不是如此的話請類推。

      255 heads, 63 sectors/track, 0 cylinders
      Units = cylinders of 16065 * 512 = 8225280 bytes

      Device Boot Start End Blocks Id System
      gx.img1 * 1 16 128488+ 83 Linux


  4. $ qemu -vnc :1 -hda gx.img
    這也就是一開始說的語法啦!


還有一個我遇到的問題,就是我的系統 /dev/shm 掛太少,若執行時有報告此問題,請照著指示做即可,不過要以 root 來執行。

另外,bin.tar.lzma 是可以先解開的,這樣開機會快一點,而且你就可以修改到裡面重要的內容。
最後,當然在別台找個 vncviewer 來看它了:
$ vncviewer XX.XX.XX.XX:1

0 意見: