From f984f20a3fbb5492436aefae304c0ebb78b057b9 Mon Sep 17 00:00:00 2001 From: Andrew de los Reyes Date: Tue, 9 Aug 2011 17:38:17 -0700 Subject: [PATCH] sha256_partitions: script to easily sha256 partitions of a .bin file. This script is short and should run on any Ubuntu system, outside the chroot. This will help testers and release-engineers see the checksums that .bin files contain. BUG=chromium-os:18940 TEST=manually ran outside chroot Change-Id: Ib742f946d0724c57d67e7bd1236f4a490d996313 Reviewed-on: http://gerrit.chromium.org/gerrit/5613 Reviewed-by: Andrew de los Reyes Tested-by: Andrew de los Reyes --- sha256_partitions.sh | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 sha256_partitions.sh diff --git a/sha256_partitions.sh b/sha256_partitions.sh new file mode 100755 index 0000000000..20426cae49 --- /dev/null +++ b/sha256_partitions.sh @@ -0,0 +1,50 @@ +#!/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" + } +} + +'