Как достать конфиг из образа ядра [?SOLVED?]

Доброго дня!
Из образа ядра можно достать его конфиг без запуска этого ядра. Конечно при сборке должны быть указаны соответствующие опции.
Для этого есть скрипт:
{kernel_source}/scripts/extract-ikconfig

Но вот беда, скрипт понимает только gzip-архивы. Поэтому скрипт был немного доработан.
Суть его работы следующая:
1. ищет заветные символы IKCFG_ST начала конфига ядра в образе ядра, считая, что образ не архивирован;
2. если нашел, выдирает gzip-архив, который начинается сразу после заветных символов, и распаковывает через zcat, если не нашел шаг 3.
3. если образ архивирован, ищет заветные строчки заголовка архива в зависимости от типа архива
4. если нашел начало архива, выдирает его и распаковывает -> получаем неупакованный образ ядра (видно по заветным ELF в начале файла)
5. далее опять шаг 1.

Пример использования:

extract-ikconfig /boot/kernel-genkernel-x86_64-2.6.31-gentoo-r10_amd64 bz2 > config

К сожелению LZMA-архивы не тестились, но должно работать, если не будет нужно подправить переменную lz1.

Собственно сам скрипт:

#!/bin/sh
# ----------------------------------------------------------------------
# extract-ikconfig - Extract the .config file from a kernel image
#
# This will only work when the kernel was compiled with CONFIG_IKCONFIG.
#
# The obscure use of the "tr" filter is to work around older versions of
# "grep" that report the byte offset of the line instead of the pattern.
#
# (c) 2009, Dick Streefland <dick@streefland.net>
# Licensed under the terms of the GNU General Public License.
# ----------------------------------------------------------------------

# 0x1F8B08    -- header of gzip archive. See `hexedit <anyfile.gz>`
gz1='\037\213\010'
# 0x425A58    -- header of bzip2 archive. See `hexedit <anyfile.bz2>`
bz1='\102\132\150'
# 0x5D0000    -- header of lzma archive. See `hexedit <anyfile.lzma>`. !!!!!!!!!Need testing!!!!!!!!!!!
lz1='\135\000\000'
gz2='01'
cf1='IKCFG_ST\037\213\010'
cf2='0123456789'

dump_config()
{
	if	pos=`tr "$cf1\n$cf2" "\n$cf2=" < "$1" | grep -abo "^$cf2"`
	then
		pos=${pos%%:*}
		tail -c+$(($pos+8)) "$1" | zcat -q
		exit 0
	fi
}

# Check invocation:
me=${0##*/}
img=$1
if	[ $# -le 1 -o ! -s "$img" ]
then
	echo "Usage: $me <kernel-image> [ gz | bz2 | lzma ]" >&2
	echo "lzma option not tested"
	exit 2
fi

# Initial attempt for uncompressed images or objects:
dump_config "$img"

z1=$gz1

if [ -n $2 ]
then
  case "$2" in
    gz) z1=$gz1
    ;;
    bz2) z1=$bz1
    ;;
    lzma) z1=$lz1
    ;;
  esac
fi

# That didn't work, so decompress and try again:
imgtmp=/tmp/imgtmp$$
tmp=/tmp/ikconfig$$
trap "rm -f $imgtmp" 0
trap "rm -f $tmp" 0
for	pos in `tr "$z1\n$gz2" "\n$gz2=" < "$img" | grep -abo "^$gz2"`
do
	pos=${pos%%:*}
	tail -c+$pos "$img" > "$imgtmp"
	case "$z1" in
	  "$gz1") zcat "$imgtmp" 2> /dev/null > $tmp
	  ;;
	  "$bz1") bzip2 -c -d "$imgtmp" 2> /dev/null > $tmp
	  ;;
	  "$lz1") lzma  -c -d "$imgtmp" 2> /dev/null > $tmp
	  ;;
	esac
	dump_config $tmp
done

# Bail out:
echo "$me: Cannot find kernel config." >&2
exit 1