新版 JOOLIX 的进展
[总点击:678次]现在还在进行基础性的制作,进展如下:
1) 基本系统
基本系统的模块已经做好了,只是稍微有点大(96.3 M),还有很大的精简余地。
2) initrd.gz 和 vmlinuz
重新制作了initrd.gz(以前是直接用的从slax那里下载的内核),采用了最新的内核 2.6.30-ARCH,借鉴了 larch 的 hook 插入方式,用普通的 mkinitcpio 法制作 initrd.gz,不再需要给内核打补丁和重新编译(因为是软件模块是用的 squashfs 格式而不是 slax 的 squashfs-lzma 格式压缩,而 squashfs 是已经进入了内核的)。所插入的两个 hook 是基于 larch 的 larch1 和 larch3, 几乎重写。呵呵,写这个东西真的很累,但是也能学到东西哦。
现在 initrd.gz 的制作几乎和发行版无关了(虽然没实验过,不过从脚本来看确实是这样的),只有系统上有 mkinitcpio 就可以制作,不必给内核打补丁和重新编译内核。
3) 模块制作环境
上回书写到想写一个创建模块的工作环境,现在也已经完成了,不过有一点和以前想的不太一样,就是大小问题,必须要依赖一个基本系统的模块(或其他你要制备的模块想要依赖的软件模块),也就是说如果想在基本系统(就是最小的那个命令行系统)制备软件的话就必须要有这个基本系统的模块才行。除却这个问题以外还基本完美,制备出来的软件模块应该就可以直接用并且很干净,还有就是这个工作环境也是发行版无关的,只要你的 linux 系统支持 squashfs 和 aufs 就可以。
其原理是将以 squashfs 格式压缩的基本系统模块挂载到一个目录 A,这个是只读的,另外还有几个目录,比如 B 是用来保存变化后的文件的,还有一个 fackroot 目录和一个目录 C 用来记录你不想压制到软件模块里面的数据。
用 aufs 挂载这几个目录,其挂载方式如下:
mount -t aufs br:B=rw:A aufs ./fackroot
这样所有的变化都会保存在可读写分支 B 里面,然后将不想要压入模块的目录比如 /var/lib/pacman/sync 绑定到目录 C, 将 /sys, /proc, /dev 等绑定到 ./fackroot 下的同名目录,然后 chroot 到 ./fackroot 就可以在里面安装软件了,最后将所有的东西卸载掉,所安装软件的文件就只存在于 B 目录了,然后将 B 目录整个压制成模块就可以了,哈哈,是不是很聪明阿。
接下来的工作就是精简基本系统,然后就是实现上回所说的那另外几项东西了。
最近评论