當前位置:
首頁 > 最新 > 將tinycolinux以硬碟模式安裝到雲主機

將tinycolinux以硬碟模式安裝到雲主機

本文關鍵字:tinycolinux安裝到阿里雲主機,tinycolinux實機硬碟模式安裝,vs Frugal tinycorelinux Scatter模式安裝,重新定製tinycolinux的rootfs

在《發布tinycolinux代替docker》一文中,我們將colinux和tinycorelinux結合,打造了一個tinycolinux並裝在了windows host上,只要主機裝了windows,那麼實際上就可以裝tinycolinux as guest,這對實機和雲主機是無區別的,因為二者都可以裝windows。

那麼tinycorelinux,如何實現其在實機/雲主機以standalone模式安裝呢?

在《為tinycolinux發布應用中》我們提到tinycolinux的rootfs:microcore.gz,那裡我們對它有一些優化意見,但在那裡我們還不想定製它,那麼現在我們要面臨這個實際問題了。

測試livecd模式和定址問題

實際上參照tinycolinux as guest for windows的方案和《利用tinycolinux在雲主機上為linux動態分區》一文中安裝grub2的過程,我們已經有思路了,即我們完全可以在雲主機上創建一個包含microcore.cpio內容的grub2 as bootload的分區,然後參照windows host/colinux guest中利用vmlinux和microcore.gz的方式去嘗試驅動它,實際上這是完全可能的。

我們先來說livecd模式安裝,,即tinycolinux的frugal模式安裝。因為在這個基礎上可以一步一步很好測試以後的scatter模式是否能成功:

即按《利用tinycolinux在雲主機上為linux動態分區》一文中利用virtiope+tinycolinux no image的方法分二個區,第一個區作為系統區並bootice刻上grub2的mbr,然後解壓g2files.tar.gz,做/boot/grub的文件結構,把http://mirrors.163.com/tinycorelinux/3.x/archive/3.8.4/distribution_files/下到的bzImage和microcore.gz放進/boot,grub.cfg菜單就寫成:

menuentry "tinycolinux" --unrestricted {

set root=(hd0,msdos1)

set prefix=(hd0,msdos1)/boot/grub

linux /boot/bzImage ro root=/dev/vda1 local=vda3 home=vda3 opt=vda3 tce=vda1 ;雲主機發現2個盤

initrd /boot/microcore.gz

boot

}

這樣是完全可以驅動進雲主機的,但我們很快發現這始終只能讓initrd中的內容成為根,進一步上傳從microcore.gz中解壓出來的microcore.cpio到/mnt/vda1/,cd /boot/,cpio -idmv < microcore.cpio,這時vda1中已經有可以工作的文件系統了,但是重啟,去掉或保留那條initrd /boot/microcore.gz ,都不能使菜單中的root=/dev/vda1起作用(去掉會讓雲主機提示cant mount vfs as root,找不到盤啟不動,而本來linux是可以不用initrd啟動的.)。目前為止這樣的livecd於主機來說不實用,由於livecd寫入到根的東西都是占內存的,且由於一些未知的原因(我是不想追究了),我們發現GCC是無法在這種livecd中運行的。

這是因為vmlinux開機時發現不了virtio雲硬碟,所以不能這樣啟動,不同於其在windows hosted的情況下可以在配置文件中直接定義/dev/cobd1=/dev/disk/partion,root=/dev/cobd1。

我嘗試用bootloader grub來啟動vmlinuz,即在grub.cfg中set GRUB_CMDLINE_LINUX="root=/dev/vda1 rootfstype=ext3",同樣發現不行,看來,

要尋求傳統的硬碟根文件系統啟動的方式,scatter模式,只能寄希望於先編譯出一個支持virtio inside,能在開機時就能發現硬碟並掛載的vmlinuz:

編譯virtio驅動模塊到tinycorelinux bzimage/vmlinuz

我使用的版本是tinycorelinux 3.8.4,從http://mirrors.163.com/tinycorelinux/3.x/release/src/kernel/處下載config-2.6.33.3-tinycore和linux-2.6.33.3-patched.tbz2

由於在config中集成驅動,各個選項有複雜的依賴關係,是不能直接修改.config文件的。所以進make menuconfig,未尾載入那個config-2.6.33.3-tinycore,按一下/,輸入virtio查看依賴關係,發現跟virtualization有關,好了,進入打開,如果你直接在network driver中打開virtio network的y選項會提示有依賴關係,block driver中的virtio block driver也一樣,只有解決了依賴才能進行。

然後make mrproper(如果你進行了多次構建嘗試,執行一個這個比較好)由於我在gcc481下編譯的,所以vdso makfile會提示找不到i386等等,此時按《在colinux上編譯openvpn》上處理的方法一樣將裡面的某句改成m32,m64,繼續,得到bzimage在/arch/x86/boot。改個名放進livecd模式下的/boot/中,sudo reboot,在系統啟動時進入grub命令行,改菜單,去掉initrd,用新的bzimage名代替bzimage,提示發現vda1,但又出現:runaway loop modprobe binfmt-464c的問題,無論如何,我們問題完成了一半。

網上說這可能是位數衝突,可能我使用編譯bzimage的是個64位的ubt主機導致的,於是換回colinux+gcc461編譯:

colinux下make meunconfig會用到term設置:export $TERMINFO=/usr/share/terminfo,且要安裝ncurse和perl5.tcz,安裝,重複make menuconfig繼續編譯得到bzimage,繼續上傳放進雲主機/boot中測試,問題解決!!

然後就是那個定製cpio的問題了

其實這在硬碟模式下可以直接定製根文件系統邏輯了,對於打包的microcore.gz,則可以這樣定製再打包,這稱為remaster:

cd /mnt/vda1/boot/test

ls . sudo sh -c "cpio -oH newc -d > ../test.cpio"

不要在boot目錄使用find ./test,會保留test

sudo gzip ../test.cpio

如果不用sh -c,會出現sudo之後依然無許可權,我的busybox cpio是version v1.19.0,僅支持使用以上newc格式。。

------------------

其實,我剛一開始的解決方案是企圖通過定製microcore.gz來改那個/etc/init.d/tc-config,把掛載到livecd根下的所有目錄通過類opt,home,usrlocal,tce的方式掛載到目標硬碟,這樣在有硬碟時使用硬碟,沒有硬碟時就使用livecd。livecd模式也不是完全沒用的,livecd模式也稱為裝機模式,,忘掉它雲端模式的另一個名字吧我感覺沒什麼大用,只在這個裝機模式下,它整個都在內存,所以即使tinycorelinux initrd所在硬碟可以拿來格掉/覆蓋,且tinycorelinux比起virtiope來還有一個聯網功能,雲端模式的名字就來源於此,其實完全可以代替virtiope的所有功能,打造類mac電腦在線恢復系統的功能,我未來會把它做進diskbios--一個整合化的裝機系統。

還有,linux kernel一個微小中心+shell腳本的多元發行設計使得其發行版很常見,運用到語言的設想就是用terralang這樣的東西組裝langtech級可定製組裝/剪裁的發行版語言系統,這樣就不需要聚集於傳統的庫方式,也不需要大量非C的腳本DSL了,當然,當這個terralang是terracling的時候就是這樣,因為terralang中的lua是非C的。。

---------------------

關於我,關於「shaolonglee公號」。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 shaolonglee公號 的精彩文章:

在tinycolinux上編譯odoo8

TAG:shaolonglee公號 |