SHOW:
|
|
- or go back to the newest paste.
1 | root@epsybox:/git# cat /usr/local/bin/extract_initramfs_cpio.sh | |
2 | #!/bin/bash | |
3 | zImage=$1 | |
4 | #======================================================== | |
5 | # find start of gziped kernel object in the zImage file: | |
6 | #======================================================== | |
7 | pos=`grep -P -a -b -m 1 --only-matching $'\x1F\x8B\x08' $zImage | cut -f 1 -d :` | |
8 | ||
9 | #======================================================================== | |
10 | # the cpio archive might be gzipped too, so two gunzips could be needed: | |
11 | #======================================================================== | |
12 | if [ "$pos" = "" ]; then | |
13 | cp $zImage /tmp/kernel.img | |
14 | else | |
15 | echo "-I- Extracting kernel image from $zImage (start = $pos)" | |
16 | dd if=$zImage bs=1 skip=$pos | gunzip > /tmp/kernel.img | |
17 | fi | |
18 | pos=`grep -P -a -b -m 1 --only-matching $'\x1F\x8B\x08' /tmp/kernel.img | cut -f 1 -d :` | |
19 | #=========================================================================== | |
20 | # find start and end of the "cpio" initramfs image inside the kernel object: | |
21 | # ASCII cpio header starts with '070701' | |
22 | # The end of the cpio archive is marked with an empty file named TRAILER!!! | |
23 | #=========================================================================== | |
24 | if [ ! "$pos" = "" ]; then | |
25 | echo "-I- Extracting compressed cpio image from kernel image (start = $pos)" | |
26 | dd if=/tmp/kernel.img bs=1 skip=$pos | gunzip > /tmp/cpio.img | |
27 | start=`grep -a -b -m 1 --only-matching '070701' /tmp/cpio.img | head -1 | cut -f 1 -d :` | |
28 | end=`grep -a -b -m 1 --only-matching 'TRAILER!!!' /tmp/cpio.img | head -1 | cut -f 1 -d :` | |
29 | inputfile=/tmp/cpio.img | |
30 | else | |
31 | echo "-I- Already uncompressed cpio.img, not decompressing" | |
32 | start=`grep -a -b -m 1 --only-matching '070701' /tmp/kernel.img | head -1 | cut -f 1 -d :` | |
33 | end=`grep -a -b -m 1 --only-matching 'TRAILER!!!' /tmp/kernel.img | head -1 | cut -f 1 -d :` | |
34 | inputfile=/tmp/kernel.img | |
35 | fi | |
36 | ||
37 | end=$((end + 10)) | |
38 | count=$((end - start)) | |
39 | if (($count < 0)); then | |
40 | echo "-E- Couldn't match start/end of the initramfs image." | |
41 | exit | |
42 | fi | |
43 | echo "-I- Extracting initramfs image from $inputfile (start = $start, end = $end)" | |
44 | dd if=$inputfile bs=1 skip=$start count=$count > initramfs.cpio | |
45 | ||
46 | #to unpack... cpio |