【老骥伏枥牛年大礼包】实现原理
之前我实现QTS支持官方的升级的时候老骥伏枥还没有推出支持官方升级的补丁包,后来老骥伏枥推出了牛年大礼包支持系统升级,我很好奇他是怎么实现的,但是nasyun论坛上的文章要10阅读权限才能看,可我连账号都没有,直到最近偶然看到别人分享的系统镜像,这才解除困惑。
老骥伏枥的官方升级补丁原理
- 重新为系统写入启动分区,使用grub-efi
- 为补丁包生成一个initrd格式的文件patch.gz
- grub启动时加载固件的initrd以及补丁包,
initrd initrd.boot patch.gz
这样系统启动后就覆盖了rootfs内的内容,而没有对initrd做出改动,然后在patch里覆盖init,这样系统启动的时候就会自动运行定制的脚本了。
不得不说,确实很厉害,比我之前在grub.cfg嵌入bash脚本的做法要简单很多,而且因为initrd是被grub读取的,所以也不需要确定从哪个硬盘启动,直接和grub放一起都可以。
而至于patch.gz中补丁实际上做的事情,我不做更多分析。
“附注:
其实写本篇的本意,是发现自己做的东西居然有人弄了一样的东西出来,下意识就会以为肯定参考了我的,于是准备开一篇专门嘲笑一下。
但是起码得拿出证据来吧,于是我在virtualbox上运行了老骥伏枥的iso,然后看看他怎么做的, 可恶,居然都是编译好的程序实现的,strings一下看看,啥都没有,不知道是加了壳还是加密了数据段。逆向是不可能逆向的,我于是下载了一个镜像打个补丁看看最后更改了啥。
没想到虽然原理差不多(都是不更改initrd来启动系统),但是别人做的高级多了,我还学到了新的知识,只感觉啪啪啪打脸的声音在耳边萦绕,心中很是惭愧。
在此反省一下自己。