天天看點

一鍵pebuilder,實作雲主機線上裝dsm61715284

雖然群晖上雲沒有什麼很大意義,因為雲主機附屬的帶寬和存儲成本現在還沒有做到類似onedrive不限速,幾百元1T一年的程度。類似cos,oss這種有api的”類od網盤“成本也偏高實用性也不大,群晖這種OS也沒有完全做到以網絡硬碟為後端存儲,它倒是支援一種分布式硬碟的iSCSI隻不過這種分布式是大架構用的海量存儲方案。在應用方面,群晖大量采用開源技術,也有一些自研的應用比如xxstation組合,但是cloudstation的sync算法經常會導緻沖突,但是anyway,群晖的webstation是個很好的php虛拟主機管理面闆,也可以作為網盤間内容轉存器,因為它有cloudsync(不過百度盤最近又限制了cloudsync的配額,其一慣作風~)。是以還是來折騰一下:

技術背景

1,aiminick在nasyun上釋出

http://www.nasyun.com/thread-31988-1-1.html

的《DS3615xs直升DSM6.1.4U2【KVM平台虛拟機】加強版引導鏡像》: 作者結合利用了jun大引導和老骥伏枥二合一引導(這二個是平等作用的東西,前者有外挂驅動完成了黑群的主要部分,後者主要是多合一,可以用jun大引導中的三個檔案extra.lzma、 rd.gz 、 zImage替換老骥伏枥/boot/grub/DS3615xs 下同名檔案,主要是extra.lzma,這個檔案以沙盒更新檔的形式對黑群檔案系統進行patching),重新編譯了syno核心和virtio modules替換了相關檔案,在本地kvm上完成測試了最新版黑群614系列pat的安裝,(除此之外他還更新了一篇3615xs  6.1.7的kvm安裝,除更新了版本支援值得一提的是這個版本去掉了老骥伏枥引導中的grub1,tinycorelinuxpe等,僅保留了grub2部分)。

這證明kvm黑群(類似《在阿裡雲上單盤安裝群晖skynas》和《dsm as deepin mate》系列針對的skynas。但純粹的kvm黑群方案相對更原生。)也是可以做出來的(雖然接下來我們會談到,使用aiminick的包在kvm上折騰還是有人碰到很多坑),但是aiminick并沒有解決sda->vda的問題,使用的virtio ide方案。雲主機所屬的kvm使用virtio blk或scsi。這個問題也在第一篇黑群文章中就提到了。

2,作者tiandishi在nasyun上釋出

http://www.nasyun.com/thread-70722-1-1.html

的《群晖上雲伺服器,完成度90%!!》,搞定了上述問題,并進一步修複了陣列問題,得出了最新版單盤安裝黑群的方法并介紹在了另外一個貼子裡。

tiandishi沒有直接采用aiminick的包在kvm上折騰,他僅采用aiminick的選型和編譯方案(615機型和linux-3.10.x.txz核心),傾向使用原始的老骥伏枥DS3615xs黑群晖 6.1-15152版中的檔案制作啟動,卻使用了jun大ds3615xs 6.1.7引導來做,僅最小替換virtioblk來測試,他重新編譯了能識别vda為sda的dsm6.1核心和驅動子產品,他修改了 linux-3.10.x.txz 中源碼的drivers/block/virtio_blk.c,修改 virtblk_name_format("vd", index, vblk->disk->disk_name, DISK_NAME_LEN); 這一行的vd為sd。先從virtio ide+虛拟機下(proxmox kvm下)開始,按正常IDE盤格式和折騰aiminick的3617的包在kvm上安裝617pat并進該硬碟的系統,不斷打包進新引導包替換測試,如果失敗則回退到原處再次測試,最終發現新的引導可以産生與aiminick測試類似的結果:安裝 3615xs, 6.17,15284 版本的系統至完結.雖然至少此時正确能識别硬碟為sda,但這也是新問題的開始,因為他導緻了不能重新開機後正常使用(值得一提的是在tiandishi的包中,他保留了其中tinycorelinuxpe,因為它日後可以用來修改grub中的mac):

1)現象:啟動時發現無法識别群晖的/dev/md0 /dev/md1 軟raid系統,導緻認定系統未安裝,重新進入安裝界面.作者分析

2)原因:發現這是因為單盤系統盤是一個軟raid1的軟陣列,黑裙引導的時候需要識别這個陣列并加載陣列的系統。但當硬碟類型為virtio_blk的時候,核心啟動檢測陣列使用的 mdadm --auto-detect 這個指令不會映射virtio_blk到陣列專用的裝置符/dev/md0,進一步導緻核心執行/usr/syno/bin/synocheckpartition 的時候傳回結果為Partition Version=0,報錯Partition layout is not DiskStation style.;需要替換為 mdadm --assemble --scan  ,這樣可以正常識别陣列分區, 使得/usr/syno/bin/synocheckpartition 傳回正常結果  Partition Version=8. 臨時解決。

3)方法:去掉virtio盤的虛拟化blk格式,按正常IDE盤格式和折騰aiminick的3617的包在kvm上安裝617pat并進該硬碟的系統,僅為得到一次磁盤資訊,正常安裝下頭二個區一個2G一個2.4區為軟raid區,這相當于在系統内mdadm --detail --scan > mdadm.conf,獲得的關于鏡像盤的如下md/blkid相關資訊,

ARRAY /dev/md0 metadata=0.90 UUID=57d437b5:798159fc:3017a5a8:c86610be   你需要手動修改uuid為你的盤的uuid
ARRAY /dev/md1 metadata=0.90 UUID=7580a324:5f709df7:dcd287d5:29e3aff2
ARRAY /dev/md2 metadata=1.2 name=yunnas:2 UUID=b96e00a8:dab9a2b6:c99e9210:f50c9dbf (這個盤是資料盤請略過)           

這個mdadm.conf将被放進extra.lzma/juno/etc/中作為解決新系統不能重新開機運作的更新檔,手動喂給booter調用:修改linuxrc.syno的更新檔檔案jun.patch ,在核心挂載陣列裝置 /dev/md0 前執行 mdadm --assemble --scan,該指令優先讀取上面的配置檔案,識别出硬碟陣列,然後後面的挂載系統能順利執行。

mdadm -S /dev/md0 && mdadm --assemble --scan
 echo "Mounting ${RootDevice} ${Mnt}" 放這句上面           

打包extra.lzma ,扔進引導,重新啟用virtio盤的虛拟化blk格式。測試成功進入系統!還有二個後期小問題:1,啟動後其它資料盤部分無法識别,需要添加一個臨時資料盤組raid(這個可結合我《Dsm as deepin mate(2):在阿裡雲上真正實作單盤安裝運作skynas》處理tmp/space.xml的方法嘗試解決),2,啟動後添加的網卡拿不到IP,需要修改grub引導中mac的位址。但都非關鍵問題了

下面直接制作鏡像,用tiandishi的路子,找對版本,先搞定識别sda安裝完系統,再搞定陣列修複進入系統:

制作鏡像

準備工作:我們直接使用jun大ds3615xs 6.1.7引導(注意這混亂的版本命名,3615是硬體平台,617是核心,15284等是pat)和原始的老骥伏枥DS3615xs黑群晖 6.1-15152版中的檔案(用jun大617替換裡面的原615引導的相關檔案,/boot/grub/ds6135xs就不改成ds6137xs了以避免需另改grub.cfg),和tiandishi弄好的

http://down.nasyun.com/forum/202005/17/064451tfwjwlvwawylwwgj.zip?_upd=kvmdrive.zip,q

外面的那個virt_blk.ko僅僅适用于3.10.102核心編譯的系統。前者是引導,後者是更新檔,

制造下面的617kvmboot:

qemu-img create -f raw 617kvmboot 32M

fdisk 615kvmboot自動dos mbr,n自動一區,a自動激活
losetup -fP --show 617kvmboot
mkfs.vfat  /dev/loop0p1
mkdir bootmnt
mount /dev/loop0p1 bootmnt/
grub-install --boot-directory=bootmnt/boot /dev/loop0

...(複制boot所需檔案進來,不要把各種tcpe,legacy grub複進來,,先kvmdrive.zip中重命名extra.lzma中的etc/madam.conf(deepin下可以直接編輯名字自動gui打包),以防其它非意料因素出現,用extra.lzma直接替換617kvmboot中的extra.lzma即可,另外修改grub.cfg中virtio mac位址一定要525400開頭否則一會識别不到。有調試需求,則可以在grub.cfg中将虛拟序列槽設定為開機不自動啟用。)..

umount bootmnt
losetup -d /dev/loop0           

替換後的鏡像也都是mbr虛拟機/雲主機适用的,依然是我們前面的在pd中裝deepin,開kvm,再啟動qemu制造主鏡像,二步走,第一步用qemu-system-x86_64 制造鏡像,第二步用qemu-system-x86_64 測試啟動鏡像,如果不分二步,直接上來virtioblk,會提示格式化失敗

第一步:

qemu-img create -f raw dsm61715284 20G

qemu-system-x86_64 -enable-kvm \
 -machine pc-i440fx-2.8 \
 -cpu Penryn,kvm=off,vendor=GenuineIntel \
 -m 2120 \
 -device cirrus-vga,bus=pci.0,addr=0x2 \
 -usb -device usb-kbd -device usb-mouse \
 -hdc ./617kvmboot \
 -hda ./dsm61715284 \ 
 -device virtio-net-pci,bus=pci.0,addr=0x3,mac='52:54:00:c9:18:27',netdev=MacNET \
 -netdev bridge,id=MacNET,br=virbr0,"helper=/usr/lib/qemu/qemu-bridge-helper" \
 -boot order=dc,menu=on           

這一步會出現網上很多人拿DS3617xs_DSM6.1_Broadwell.img在kvm下折騰都出過一些問題,新的booter也會有,如下:

引導進入dsm,安裝時區域網路掃不出ip,除了可能開頭就提到的你grub.cfg中virtio mac位址沒有改成525400開頭否則識别不到,如果dsm已識别網卡,隻是掃不出而已。也可以這麼做:從主控端看guest分到的ip(arp -a),或者找個腳本掃virbr0所在的網段了(192.168.122.2到254)。我這裡得出是192.168.112.32或78,以後幾乎固定都是這個不用再掃,如果還是得不出ip,重新開機宿主deepin再來(我發現aiminick的網卡識别比較好和效果穩定),deepin中用chrome打開,在webassit上顯示對應的ip也不是上面指定的mac,被改變了,如果連不上重新開機虛拟機重來,連上了webassit,下載下傳pat,準備手動安裝的

https://cndl.synology.cn/download/DSM/release/6.1.7/15284/DSM_DS3617xs_15284.pat

。安裝的時候提示格式化 1 2 硬碟,勾選安裝就可以了,引導盤不會被格式化,如果pat版本沒比對,會出現各種安裝到57%左右檔案毀損,

如果沒有問題,系統安裝完成,進去指令行mdadm --detail --scan > mdadm.conf,檢查輸出(本來設計對鏡像作blkid和tune2fs -U寫入uuid,但那個2.4g的是個swap fs,無法這樣完成,故還是修改mdadm.conf),生成的檔案重新整合到xtra.lzma,則可以繼續第二步,啟動測試。

第二步:

qemu-system-x86_64 -enable-kvm \
 -machine pc-i440fx-2.8 \
 -cpu Penryn,kvm=off,vendor=GenuineIntel \
 -m 2120 \
 -device cirrus-vga,bus=pci.0,addr=0x2 \
 -usb -device usb-kbd -device usb-mouse \
 -hdc ./617kvmboot \
 -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=MacHDD \
 -drive id=MacHDD,if=none,cache=writeback,format=raw,file=./dsm61715284 \ 
 -device virtio-net-pci,bus=pci.0,addr=0x3,mac='52:54:00:c9:18:27',netdev=MacNET \
 -netdev bridge,id=MacNET,br=virbr0,"helper=/usr/lib/qemu/qemu-bridge-helper" \
 -boot order=dc,menu=on           

最後,第三個分區20G-4.5G開起來。且開第四個分區用于在主鏡像中制造硬碟引導為日後脫離617kvmboot也能引導,即并losetup挂載将617kvmboot中的内容以及引導再次離線寫入到生成的鏡像的第四分區,tar cvpzf它,并将最終鏡像上傳到onedrive互聯。

完工!

利用pebuilder在雲主機上安裝

由于pebuilder.sh足夠智能就不用保留tcpe對于mac的替換,況且這需要在具體目标系統中完成。比如放在pebuilder完成dd後要重新開機的位置,你可以直接将處理mac的邏輯放這裡:(grub.cfg中可以寫function,為什麼在那裡不做?一定要在進入系統後?),以至于這裡也可能可以跟處理mac一樣放處理tune2fs的邏輯:

d-i partman/early_command string $PIPECMDSTR; \
sed -i 's/mac1=52540066761B/mac1=yourmacaddr/g' \$(list-devices disk |head -n1)4/boot/grub/grub.cfg \
sbin/reboot           

要看pebuilder.sh gif示範的。去我的github,下文,用開源包替換cloudstation和用videosstation雲轉碼

(此處不設回複,掃碼到微信參與留言,或直接點選到原文)

一鍵pebuilder,實作雲主機線上裝dsm61715284