#!/bin/sh # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # This should be able to run outside the chroot on a standard Ubuntu system. BINFILE="$1" if [ -z "$BINFILE" ]; then echo "usage: $0 .../path/to/file.bin" exit 1 fi parted "$BINFILE" unit s print | awk -v BF="$BINFILE" ' /KERN-|ROOT-/ { # Common things printf "Partition " $1 " (" $NF "): " start=substr($2, 0, length($2) - 1) # strip trailing "s" } /KERN-/ { cnt=substr($4, 0, length($4) - 1) system("dd if=\"" BF "\" bs=512 skip=" start " count=" cnt \ " 2>/dev/null | openssl dgst -sha256 -binary | openssl base64") } /ROOT-/ { # we have rootfs. find the filesystem size "mktemp" | getline tmpfile close("mktemp") system("dd if=" BF " bs=512 skip=" start \ " count=400 of=" tmpfile " 2>/dev/null") # copy superblock blkcnt = 0 cmd = "dumpe2fs " tmpfile " 2>/dev/null | grep \"Block count\" | \ sed \"s/[^0-9]*//\"" cmd | getline blkcnt close(cmd) system("rm -f " tmpfile) if (blkcnt > 0) { blkcnt *= 8 # 4096 byte blocks -> 512 byte sectors system("dd if=\"" BF "\" bs=512 skip=" start " count=" blkcnt \ " 2>/dev/null | openssl dgst -sha256 -binary | openssl base64") } else { print "invalid filesystem" } } '