#!/bin/bash

# Copyright (c) 2009 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 script takes a path to a rootfs.ext2 which was generated by
# build_image.sh and generates an image that can be used for auto
# update.

set -e

if [ -z "$2" -o -z "$1" ]; then
  echo "usage: $0 path/to/kernel_partition_img path/to/rootfs_partition_img"
  exit 1
fi

if [ $(whoami) = "root" ]; then
  echo "running $0 as root which is unneccessary"
fi

KPART="$1"
ROOT_PART="$2"

KPART_SIZE=$(stat -c%s "$KPART")

# Sanity check size.
if [ "$KPART_SIZE" -gt $((16 * 1024 * 1024)) ]; then
  echo "Kernel partition size ($KPART_SIZE bytes) greater than 16 MiB."
  echo "That's too big."
  exit 1
fi

FINAL_OUT_FILE=$(dirname "$1")/update.gz
UNCOMPRESSED_OUT_FILE="$FINAL_OUT_FILE.uncompressed"

# First, write size of kernel partition in big endian as uint64 to out file
# printf converts it to a number like 00000000003d0900. sed converts it to:
# \\x00\\x00\\x00\\x00\\x00\\x3d\\x09\\x00, then xargs converts it to binary
# with echo.
printf %016x "$KPART_SIZE" | \
  sed 's/\([0-9a-f][0-9a-f]\)/\\\\x\1/g' | \
  xargs echo -ne > "$UNCOMPRESSED_OUT_FILE"

# Next, write kernel partition to the out file
cat "$KPART" >> "$UNCOMPRESSED_OUT_FILE"

# Sanity check size of output file now
if [ $(stat -c%s "$UNCOMPRESSED_OUT_FILE") -ne $((8 + $KPART_SIZE)) ]; then
  echo "Kernel partition changed size during image generation. Aborting."
  exit 1
fi

# Copy rootfs aside
TMP_ROOTFS=$(mktemp)
cp "$ROOT_PART" "$TMP_ROOTFS"
ORIGINAL_LABEL=$(/sbin/e2label "$TMP_ROOTFS")
NEW_LABEL="A${ORIGINAL_LABEL}"
/sbin/tune2fs -L "$NEW_LABEL" "$TMP_ROOTFS"

# TODO(adlr): Sign TMP_ROOTFS w/ OS vendor's private key

# Put rootfs into the out file
cat "$TMP_ROOTFS" >> "$UNCOMPRESSED_OUT_FILE"

rm "$TMP_ROOTFS"

# compress and hash
CS_AND_RET_CODES=$(gzip -c "$UNCOMPRESSED_OUT_FILE" | \
                   tee "$FINAL_OUT_FILE" | openssl sha1 -binary | \
                   openssl base64 | tr '\n' ' '; \
                   echo ${PIPESTATUS[*]})
EXPECTED_RET_CODES="0 0 0 0 0"
set -- $CS_AND_RET_CODES
CALC_CS="$1"
shift
RET_CODES="$@"
if [ "$RET_CODES" != "$EXPECTED_RET_CODES" ]; then
  echo compression/hash failed. $RET_CODES
  exit 1
fi

rm "$UNCOMPRESSED_OUT_FILE"

echo Success. hash is "$CALC_CS"
