Isso parece funcionar na imagem 2017-09-07-raspbian-stretch-lite.img
nesse site:
$ sudo kpartx -rva 2017-09-07-raspbian-stretch-lite.img
add map loop0p1 (252:19): 0 85622 linear 7:0 8192
add map loop0p2 (252:20): 0 3528040 linear 7:0 94208
$ sudo mount -r /dev/mapper/loop0p1 mnt
$ LC_ALL=C gawk -v RS='3$ MTOOLS_SKIP_CHECK=1 mtype -i 2017-09-07-raspbian-stretch-lite.img@@4M ::kernel.img|
LC_ALL=C gawk -v RS='3MTOOLS_SKIP_CHECK=1 MTOOLSRC=/dev/fd/3 mtype z:kernel.img \
3<< EOF 4< 2017-09-07-raspbian-stretch-lite.img |
drive z:
file="/dev/fd/4"
partition=1
EOF
LC_ALL=C gawk -v RS='3#! /bin/zsh -
zip=${1?zip file missing}
MTOOLS_SKIP_CHECK=1 mtype -i =(
unzip -p -- "$zip" | perl -ne '
BEGIN{$/=2}
if ($. == 1) {
($offset, $size) = unpack("x454L<2",$_)
} elsif ($. > $offset) {
print;
if ($. == $offset + $size - 1) {exit}
}') ::kernel.img |
LC_ALL=C gawk -v RS='3$ sudo kpartx -rva 2017-09-07-raspbian-stretch-lite.img
add map loop0p1 (252:19): 0 85622 linear 7:0 8192
add map loop0p2 (252:20): 0 3528040 linear 7:0 94208
$ sudo mount -r /dev/mapper/loop0p1 mnt
$ LC_ALL=C gawk -v RS='3$ MTOOLS_SKIP_CHECK=1 mtype -i 2017-09-07-raspbian-stretch-lite.img@@4M ::kernel.img|
LC_ALL=C gawk -v RS='3MTOOLS_SKIP_CHECK=1 MTOOLSRC=/dev/fd/3 mtype z:kernel.img \
3<< EOF 4< 2017-09-07-raspbian-stretch-lite.img |
drive z:
file="/dev/fd/4"
partition=1
EOF
LC_ALL=C gawk -v RS='3#! /bin/zsh -
zip=${1?zip file missing}
MTOOLS_SKIP_CHECK=1 mtype -i =(
unzip -p -- "$zip" | perl -ne '
BEGIN{$/=2}
if ($. == 1) {
($offset, $size) = unpack("x454L<2",$_)
} elsif ($. > $offset) {
print;
if ($. == $offset + $size - 1) {exit}
}') ::kernel.img |
LC_ALL=C gawk -v RS='3%pre%' 'NR==2{printf "%s", RS $0; exit}' |
gunzip | grep -aPom1 'Linux version \K\S+'
' 'NR==2{printf "%s", RS $0; exit}' |
gunzip | grep -aPom1 'Linux version \K\S+'
' 'NR==2{printf "%s", RS $0; exit}' |
gunzip | grep -aPom1 'Linux version \K\S+'
4.9.41+
' 'NR==2{printf "%s", RS $0; exit}
' < mnt/kernel.img | gunzip | grep -aPom1 'Linux version \S+'
Linux version 4.9.41+
' 'NR==2{printf "%s", RS $0; exit}' |
gunzip | grep -aPom1 'Linux version \K\S+'
' 'NR==2{printf "%s", RS $0; exit}' |
gunzip | grep -aPom1 'Linux version \K\S+'
' 'NR==2{printf "%s", RS $0; exit}' |
gunzip | grep -aPom1 'Linux version \K\S+'
4.9.41+
' 'NR==2{printf "%s", RS $0; exit}
' < mnt/kernel.img | gunzip | grep -aPom1 'Linux version \S+'
Linux version 4.9.41+
(onde 3
identifica o início dos dados gzipados). mtools
Como não-root, e assumindo que a primeira partição é sempre 4MiB dentro da imagem, usando o GNU kernel.img
para extrair o /dev/fd
dessa partição vfat:
Se não, em sistemas com grep
support (e GNU file="2017-09-07-raspbian-stretch-lite.img"
):
(em outros sistemas, use /dev/fd/4
, o %code% é apenas para facilitar a adaptação a nomes de arquivos arbitrários)
De, o arquivo zip, você deve conseguir sair sem extrair toda a imagem, apenas a primeira partição com:
%pre%