inetboot x httpfs 研究筆記
首先從名詞解釋開始...
inetboot:
http://openlab.ring.gr.jp/oscircular/inetboot/
這是一個由日本實驗室主導的專案,目標在開發一套系統,可以直接利用http/ftp上面的ISO檔來開機,不需要傳統的下載、燒錄光碟、然後在透過光碟或者隨身碟開機的冗長程序,加上主流Linux Distribution都有提供LiveCD,兩個結合起來就是只要能夠上網的裝置,都可以直接利用網路的檔案開機。
不過inetboot已經在2008年9月停止更新,實驗主力轉往PS3 Linux的相關應用韌體與全球網路服務發展,這也促成這次研究的動機,因為想把最新的Ubuntu 9.10移植上去跑(目前只支援到Ubuntu 8.04)
httpfs:
http://httpfs.sourceforge.net/
這是前項專案的核心技術httpfs,取代以往整個檔案下載的方式,變成按需要分部份下載,只要事先對ISO建立檔案索引,就可以很有效率的直接取用,基於FUSE的先進技術,只要核心有支援FUSE,不需重新編譯核心即可直接在user space創立httpfs
buildroot:
buildroot
一如其名稱,這是專門用來開發Embedded Linux Root Filesystem的"巨集",本身只是一堆設定檔跟連結,但是巧妙設計的設定系統,讓本來東拼西湊的Embedded Linux 系統開發變得很簡單,支援X86、ARM等主流硬體。
阿婆的裹腳布落落長的開發歷程...
1 首先是驗證inetboot的性能,但是透過WAN速度還是頗慢
2 所以自己架了Apache Web Server來提供下載服務,果然開機速度快多了
3 確認可行之後,就是拆解inetboot的光碟研究,就像很多Embedded Linux一樣,由三個部份組成bootloader、kernel與initrd
4 bootloader 預設是grub,不過要換成syslinux也可以
5 kernel,預設版本是2.6.24,夠新了,不過後來我癢又把它小改一下,開機更快了一點
6 initrd,也就是root fs,這是這次修改的重點
7 分析錯誤訊息並追蹤開機檔案linuxrc->casper-netfsboot後,發現主因是Ubuntu 9.10採用了壓縮比更高的lzma演算法,這在2008年的舊系統中並不支援,於是要想辦法加進去
8 既然本來是用buildroot建的,要放東西進去當然要準備相同的環境,把buildroot架起來後,經過一番努力,把所需的lzma跟相關函式庫編譯出來,並放回本來的minirt.gz
9 另外casper-netfsboot也要修改,讓它支援新的initrd格式,這部份說難不難、說簡單也不簡單,必須對Shell Script有一點認識才可以順利修改完成,差異部份表列如下:
這樣大概就完成了...
心得:
其實要改得地方並不多,牽涉到的檔案也不多,但是關鍵還是在於處理Shell Script的功力,才不會被無所謂的code搞得暈頭轉向
inetboot:
http://openlab.ring.gr.jp/oscircular/inetboot/
這是一個由日本實驗室主導的專案,目標在開發一套系統,可以直接利用http/ftp上面的ISO檔來開機,不需要傳統的下載、燒錄光碟、然後在透過光碟或者隨身碟開機的冗長程序,加上主流Linux Distribution都有提供LiveCD,兩個結合起來就是只要能夠上網的裝置,都可以直接利用網路的檔案開機。
不過inetboot已經在2008年9月停止更新,實驗主力轉往PS3 Linux的相關應用韌體與全球網路服務發展,這也促成這次研究的動機,因為想把最新的Ubuntu 9.10移植上去跑(目前只支援到Ubuntu 8.04)
httpfs:
http://httpfs.sourceforge.net/
這是前項專案的核心技術httpfs,取代以往整個檔案下載的方式,變成按需要分部份下載,只要事先對ISO建立檔案索引,就可以很有效率的直接取用,基於FUSE的先進技術,只要核心有支援FUSE,不需重新編譯核心即可直接在user space創立httpfs
buildroot:
buildroot
一如其名稱,這是專門用來開發Embedded Linux Root Filesystem的"巨集",本身只是一堆設定檔跟連結,但是巧妙設計的設定系統,讓本來東拼西湊的Embedded Linux 系統開發變得很簡單,支援X86、ARM等主流硬體。
阿婆的裹腳布落落長的開發歷程...
1 首先是驗證inetboot的性能,但是透過WAN速度還是頗慢
2 所以自己架了Apache Web Server來提供下載服務,果然開機速度快多了
3 確認可行之後,就是拆解inetboot的光碟研究,就像很多Embedded Linux一樣,由三個部份組成bootloader、kernel與initrd
4 bootloader 預設是grub,不過要換成syslinux也可以
5 kernel,預設版本是2.6.24,夠新了,不過後來我癢又把它小改一下,開機更快了一點
6 initrd,也就是root fs,這是這次修改的重點
7 分析錯誤訊息並追蹤開機檔案linuxrc->casper-netfsboot後,發現主因是Ubuntu 9.10採用了壓縮比更高的lzma演算法,這在2008年的舊系統中並不支援,於是要想辦法加進去
8 既然本來是用buildroot建的,要放東西進去當然要準備相同的環境,把buildroot架起來後,經過一番努力,把所需的lzma跟相關函式庫編譯出來,並放回本來的minirt.gz
9 另外casper-netfsboot也要修改,讓它支援新的initrd格式,這部份說難不難、說簡單也不簡單,必須對Shell Script有一點認識才可以順利修改完成,差異部份表列如下:
< EXT=abc
<
71d68
< [ -f ${CDMOUNT}/isolinux/text.cfg ] && CFGNAME=text.cfg
118c115
< {
---
> {
123,134c120,121
< EXT=`basename $BOOTMINIROOT | awk -F. '{print $2}'`
< echo uncompress miniroot...in $EXT mode
< case $EXT in
< gz)
< ( cd $MINIROOT ; gzip -dc $BOOTMINIROOT | cpio -idm -H newc --no-absolute-filenames )
< ;;
< lz)
< ( cd $MINIROOT ; lzma -dc -S .lz $BOOTMINIROOT | cpio -idm -H newc --no-absolute-filenames )
< ;;
< *)
< exit;
< esac
---
> echo uncompress miniroot...
> ( cd $MINIROOT ; gzip -dc $BOOTMINIROOT | cpio -idm -H newc --no-absolute-filenames )
203,214c190
< case $EXT in
< gz)
< ( cd $MINIROOT ; find . | cpio --quiet -o -H newc | gzip -9v -c > ${MINIROOT}.gz )
< ;;
< lz)
< ( cd $MINIROOT ; find . | cpio --quiet -o -H newc | lzma -9 -v -c -z > ${MINIROOT}.lz )
< ;;
< *)
< exit;
< esac
<
<
---
> ( cd $MINIROOT ; find . | cpio --quiet -o -H newc | gzip -9v -c > ${MINIROOT}.gz )
329c305
< INITRD=${MINIROOT}.$EXT
---
> INITRD=${MINIROOT}.gz
這樣大概就完成了...
心得:
其實要改得地方並不多,牽涉到的檔案也不多,但是關鍵還是在於處理Shell Script的功力,才不會被無所謂的code搞得暈頭轉向
留言
http://www.netboot.me/
netboot.me 這個感覺功能也不錯
關於gPXE我也深有同感
的確直接用gPXE實作HTTP開機簡單的多,會拿inetboot來玩也是想看看葫蘆裡面賣的是什麼藥,看完之後,問題還是回到關鍵點,要放啥在HTTP server上....
感謝大大的分享....