将pebuilder变成dibuilder.sh,将di tools集入boot层(7):将linuxlivekit整合到dibuilder,打造final minstack liveos

本文关键字:整合linuxkit脚本到dibuilder,利用slax将deb和debconf,apt变成live形式类tcz

在前面《将pebuilder变成dibuilder.sh,将di tools集入boot层(1)》我们讲到remaster live debian发行的思路,在《将pebuilder变成dibuilder.sh,将di tools集入boot层(2)》开始我们寻求了静态化一组deb重打包为宏包以打造minstackos的思路(毕竟,折腾debian再发行版,就是折腾deb包,好吧,外加一点特化init脚本),但其实,这是一种倒退的思路:

我们前面本来是想静态化配置deb的(这样udeb也可集成到core debian initrd而不用开机install跑一次)。但是到本文决定放弃。回归debian一切为deb为中心的精神(这也是debian存在的意义,任何基于其上的再发行都不应该避开dpkg和apt动态配置的那套,cdi跑install是不应该被解包集成的而应该保持成find deb源,并install,而hd的remasterd debian如果解包集成,也会因文件已存在不能再次apt-install含该文件的包导致apt实质上不可用,除非你把这个再发行版视为固化发行和产品终点或提出新的包工具和包格式作为系统可扩展手段)。

所以我们转回deb为中心remaster的思路,以及考虑使用slax和linuxkit工具作live化。并准备将linuxlivekit脚本整合进dibuilder(制造minstackos image的逻辑部分)。

slax+linuxkit是一组init脚本+制作脚本组合的东西。产出的live os同时支持放在CD rom/flash rom,硬盘,U盘这类可读写设备上安装/运行,,,liveos的意义和技术主体在于它的init(这个init除了privotroot,视介质的不同较静态init也有增强)和支持的aufs特性(类容器mountable fs,这是一种基于raw deb包之上的高级包)+savedata的异同。而不在于它面向的安装介质和运行环境(因这仅为savedata上的异同),这点和tinycorelinux类似(它的tce包也可作为数据放在硬盘上,ps:非tc scattermode硬盘版)。如果我们的minstackos在dibuilder.sh端支持完成,其成品镜像将作为其它dsm/win/osx镜像的基础部分或共存部分,与dipe放一起(tdl,cdi统一的起点)。

slax是基于debian再remaster的高级版,继承在内部继续使用apt(作为高级版,这个apt仅在完成打包和save changes后就脱离了存在意义,在slax层不推荐使用,因为这相当于修改发行)。

测试采用linuxkit

我们按《将pebuilder变成dibuilder.sh,将di tools集入boot层(4)》,把dibuilder.sh和jessie mirror全部升级到buster,我们在github上下载Tomas-M-linux-live.gz,为了追求纯净,我们使用debian10.8.0 netinst安装的一个系统+debootstrap+chroot执行这套脚本而不是进入一个系统内部运行脚本,注意到chroot和主机OS都是一个版本,方便给linuxkit准备素材。

sudo debootstrap --variant=minbase buster tinydebianlive  http://mirrors.aliyun.com/debian/
sudo cp -fr /lib/modules/ tinydebianlive/lib/
sudo cp -fr /boot/vmlinuz-4.19.0-14-amd64 tinydebianlive/vmlinuz (保证这个kernel支持aufs和squashfs,jessie自带,10需要处理)
(把下载的Tomas-M-linux-live-e0709f2解压到待chroot系统)
sudo chroot tinydebianlive /bin/bash
apt-get install --no-install-recommends initramfs-tools xz-utils squashfs-tools genisoimage
./tmp/Tomas-M-linux-live-e0709f2/build 

整个产出的livelinux在/tmp/linux-data-xxxx/下,是一个带inst.bat/inst.sh支持,包括core sb,vmlinuz,initrfs.img三大内容在内的东西有150多M,还有几个空的live system fs文件夹changes,modules,etc..(core sb这里基本是debootstrap基础系统加/lib/modules/和脚本加的东西,占据150M大部,可以想办法精简一下),它用新的自己的initrfs.img+inside init+代替原始的initrfamfs+insde initramfs init,所以说它是原始debiain的init+pkg的封装版。

可以继续打包成iso,也可以zip。/tmp/下执行相应sh,然后python simpleHTTPServer 80导出iso试用一下:注意到它在console处输出了一系列关于privot,解包挂载sb module的调试信息。

Tomas-M-linux-live-e0709f2有个slax文件夹,是具体发行相关的文件,里面又发现很多脚本。Tomas-M-linux-live支持其它linux,但官方例子是debian slax,这个slax文件是独立于Tomas-M-linux-live的,执行./tmp/Tomas-M-linux-live-e0709f2/build 时其并不被调用。可以独立调用。比如,它会生成多个sb modules,而不是一个core module。注意,这套脚本在host环境中调用build,要先cd tinydebianlive/tmp/Tomas-M-linux-live-e0709f2/Slax/debian10/,然后再sudo ./build,而不是在chroot环境中使用,这属于开头提到的在系统内部inplace生成。

集成代码到dibuilder.sh

当然我们的目的是做到能使脚本被dibuilder.sh集成为止,(集成思路是提取整个Tomas-M-linux-live脚本为精简了的片断,使之方便欠入到dibuilder.sh中调用,在dibuilder.sh的remaster phase处产生类似chroot到tdl-initrd.gz解包出来的系统中运行上述build,安装到hd image file/而非iso的逻辑流程 ):

分析Tomas-M-linux-live:

config为配置文件。
bootfiles是一些静态启动文件和二个安装脚本。由于它使用syslinux不是grub2,所以较《将pebuilder变成dibuilder.sh,将di tools集入boot层(5)》它简单很多。注意到EFI也是syslinux的。
build为脚本入口,调用livekitlib库函数。加initramfs中的initramfs_create,这里才是linuxlivelit中心,livekitlib中有transfer_initramfs等关键函数,initramfs/init为live系统处理privot_root,挂载sb module,输出开机调试信息的地方。(实际上是要集成到initrfs.img中的脚本静态资源文件在linuxlivekit中并不运行,但是注意到它调用config和linuxlivelit)所以整个Tomas-M-linux-live是制造和运行的全部逻辑。
还有一个上面提到的Slax文件夹不提(它相当于我们之前提到的fixonce过程)。

考虑精简Tomas-M-linux-live,集成到dibuilder,把以下伪代码加到dibuilder.sh->remaster phase处(整个作为一个函数加一个调用,函数名,比如chrootandmakelive(),etc.. ):

CAT整个init文件代替tdl-initrd.gz中的原有init;
去掉livekitlib中关于pxe的部分。这里的函数都可以为上面那到的那个大函数的子函数。
然后主逻辑就是chroot,执行build,然后调用到initramfs_create。

以后慢慢实现吧


这些完成了之后,还得真正统一cdipe,tdlpe为相续的过程。使之成为一个类似群晖的发行。pve是一个集成firmware类似群晖的发行。我们利用slax,将其firmware放在live部分。这样pve就更像群晖了。而整个叠加综合作用,就是minstackos=debian+slax+pve+chromeos=dspc。

上一篇:Spring-03 依赖注入(DI)


下一篇:Unity和DryIoc之间性能比较