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

2022-06-15 21:36:12 字數 3131 閱讀 3287

本文關鍵字: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,那裡我們對它有一些優化意見,但在那裡我們還不想定製它,那麼現在我們要面臨這個實際問題了。

實際上參照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的檔案結構,把下到的bzimage和microcore.gz放進/boot,grub.cfg選單就寫成:

menuentry "tinycolinux" --unrestricted
這樣是完全可以驅動進雲主機的,但我們很快發現這始終只能讓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:

由於在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中測試,問題解決!!

其實這在硬碟模式下可以直接定製根檔案系統邏輯了,對於打包的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格式。。

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

將python程式以linux服務部署

今天嘗試將自己的python程式以服務的形式部署到linux下 主要步驟如下 1.code author import os import datetime import time def run fp open os.path.dirname file log.txt a fp.write hel...

將xlsx檔案以列表的形式輸出。

def excel to list data file,sheet data list 新建個空列表,來乘裝所有的資料 wb xlrd.open workbook data file 開啟excel sh wb.sheet by name sheet 獲取工作簿 header sh.row valu...

只需3步將WinPE裝到硬碟上

現在網上有許多win7核心的winpe 以下簡稱win7pe 與以往xp及vista核心的winpe相比,win7pe更適合對win7系統進行維護。如果將win7pe安裝到硬碟中,那麼我們進行系統維護就更方便了,但是許多版本的win7pe並沒有提供硬碟安裝的功能程式。那麼能否將win7pe安裝到硬碟...