西西河

主题:【原创】如何解开Ubuntu的initrd.img和Gentoo的initramfs -- wsxx

共:💬13 🌺37 新:
全看分页树展 · 主题 跟帖
家园 (续三)解压Gentoo中的initramfs的详细方法

外链出处这篇文章中说到,Gentoo的initramfs文件中有TRAILER的问题,cpio碰到这些东西就停止了解压。该作者写了一个小小的脚本,用来修理TRAILER:

#!/bin/bash

awk '

BEGIN{RS="07070"}

{

if(/TRAILER\!\!\!/){y=""}else{y=RT}

if(RT!=""){x=x gensub(/^.*TRAILER\!\!\!.*$/,"",1) y}else{x=x $0}

}

END{print x}' $1

这个脚本的正则表达式使用得出神入化,我们恐怕一时难以搞明白,先这么使用着吧,等有空再回来琢磨。

我们使用的时候,可以把以上内容保存为一个文本文件,按照作者的方法,命名为fixcpio,保存在家目录中。要让这个脚本可以被执行,还必须给它加上可执行的属性:

chmod +x fixcpio

然后就可以用它来做为解包过程中的一环:

cat initramfs.gz | gunzip | ./fixcpio >initramfs-fixed # 解压后送到fixcpio处理一下再保存起来

cd initrd #进入工作目录

cpio -id <../initramfs-fixed # 解压上层目录的文件到本目录中

initramfs-fixed就是修理过的cpio格式的文件,最后一步就和普通的cpio解包过程相同了。

总结一下,可以把两步合并成一步,如果已经进入工作目录,只要这样就可以了:

cat ../initramfs.gz | gunzip | ../fixcpio |cpio -id

同理,修改init之后,再打包回去,只要这样一步就可以了:

find .|cpio -oH newc|gzip -9> ../myinitramfs.gz

重新打包当然就没有修理一说了。在上层家目录里将会得到myinitramfs.gz,这是可以用来启动的文件了。

简化的方法也是用于Ubuntu。

(完)

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河