如何从`.img`备份中提取Linux版本?

阿德里安市长

简而言之:

如何从系统备份中提取VERSION,SUBVERSION和PATCHLEVEl号.img理想情况下,没有root权限。

扩展:

从下一页:

https://www.raspberrypi.org/downloads/raspbian/

提供的Debianzip提取为.img,代表用于手臂架构的Debian / Raspian系统的完整系统备份。

为了生成自定义内核,需要知道系统的VERSION,SUBVERSION和PATCHLEVEL,这与典型的内核所提供的等效。

$ uname -r
4.9.0-3-amd64

最简单的方法是直接加载系统并运行命令,但是在这种情况下不适用。

目标:

映像的内核需要打补丁并交叉编译。我的意图是为此过程创建一个脚本,因此在内核更新到来时可以“轻松地”进一步应用它。

斯蒂芬·查泽拉斯(Stephane Chazelas)

这似乎适用于该2017-09-07-raspbian-stretch-lite.img站点上的图像:

$ 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='\37\213\10\0' 'NR==2{printf "%s", RS $0; exit}
  ' < mnt/kernel.img | gunzip | grep -aPom1 'Linux version \S+'
Linux version 4.9.41+

(其中\37\213\10\0标识压缩数据的开始)。

作为非根用户,并假设第一个分区在映像中始终为4MiB,请使用GNU从该vfat分区中mtools提取kernel.img

$ MTOOLS_SKIP_CHECK=1 mtype -i 2017-09-07-raspbian-stretch-lite.img@@4M ::kernel.img|
  LC_ALL=C gawk -v RS='\37\213\10\0' 'NR==2{printf "%s", RS $0; exit}' |
  gunzip | grep -aPom1 'Linux version \K\S+'
4.9.41+

如果不是,则在具有/dev/fd支持(和GNU grep)的系统上:

MTOOLS_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='\37\213\10\0' 'NR==2{printf "%s", RS $0; exit}' |
  gunzip | grep -aPom1 'Linux version \K\S+'

(在其他系统上,请使用file="2017-09-07-raspbian-stretch-lite.img"/dev/fd/4仅用于使其更易于适应任意文件名)

从zip文件中,您应该能够不必提取整个图像,而只需提取第一个分区即可:

#! /bin/zsh -
zip=${1?zip file missing}

MTOOLS_SKIP_CHECK=1 mtype -i =(
    unzip -p -- "$zip" | perl -ne '
      BEGIN{$/=\512}
      if ($. == 1) {
        ($offset, $size) = unpack("x454L<2",$_)
      } elsif ($. > $offset) {
        print;
        if ($. == $offset + $size - 1) {exit}
      }') ::kernel.img |
  LC_ALL=C gawk -v RS='\37\213\10\0' 'NR==2{printf "%s", RS $0; exit}' |
  gunzip | grep -aPom1 'Linux version \K\S+'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章