#!/bin/bash set -e function partition_for () { if [[ "$1" =~ [0-9]+$ ]]; then echo "$1p$2" else echo "$1$2" fi } VERSION=$(cat VERSION.txt) ENVIRONMENT=$(cat ENVIRONMENT.txt) GIT_HASH=$(cat GIT_HASH.txt | head -c 7) DATE=$(date +%Y%m%d) ROOT_PART_END=7217792 VERSION_FULL="$VERSION-$GIT_HASH" if [ -n "$ENVIRONMENT" ]; then VERSION_FULL="$VERSION_FULL~$ENVIRONMENT" fi TARGET_NAME=startos-${VERSION_FULL}-${DATE}_raspberrypi.img TARGET_SIZE=$[($ROOT_PART_END+1)*512] rm -f $TARGET_NAME truncate -s $TARGET_SIZE $TARGET_NAME ( echo o echo x echo i echo "0xcb15ae4d" echo r echo n echo p echo 1 echo 2048 echo 526335 echo t echo c echo n echo p echo 2 echo 526336 echo $ROOT_PART_END echo a echo 1 echo w ) | fdisk $TARGET_NAME OUTPUT_DEVICE=$(sudo losetup --show -fP $TARGET_NAME) sudo mkfs.ext4 `partition_for ${OUTPUT_DEVICE} 2` sudo mkfs.vfat `partition_for ${OUTPUT_DEVICE} 1` TMPDIR=$(mktemp -d) sudo mount `partition_for ${OUTPUT_DEVICE} 2` $TMPDIR sudo mkdir $TMPDIR/boot sudo mount `partition_for ${OUTPUT_DEVICE} 1` $TMPDIR/boot sudo unsquashfs -f -d $TMPDIR startos.raspberrypi.squashfs REAL_GIT_HASH=$(cat $TMPDIR/usr/lib/startos/GIT_HASH.txt) REAL_VERSION=$(cat $TMPDIR/usr/lib/startos/VERSION.txt) REAL_ENVIRONMENT=$(cat $TMPDIR/usr/lib/startos/ENVIRONMENT.txt) sudo sed -i 's| boot=startos| init=/usr/lib/startos/scripts/init_resize\.sh|' $TMPDIR/boot/cmdline.txt sudo cp ./build/raspberrypi/fstab $TMPDIR/etc/ sudo cp ./build/raspberrypi/init_resize.sh $TMPDIR/usr/lib/startos/scripts/init_resize.sh sudo umount $TMPDIR/boot sudo umount $TMPDIR sudo losetup -d $OUTPUT_DEVICE if [ "$ALLOW_VERSION_MISMATCH" != 1 ]; then if [ "$(cat GIT_HASH.txt)" != "$REAL_GIT_HASH" ]; then >&2 echo "startos.raspberrypi.squashfs GIT_HASH.txt mismatch" >&2 echo "expected $REAL_GIT_HASH (dpkg) found $(cat GIT_HASH.txt) (repo)" exit 1 fi if [ "$(cat VERSION.txt)" != "$REAL_VERSION" ]; then >&2 echo "startos.raspberrypi.squashfs VERSION.txt mismatch" exit 1 fi if [ "$(cat ENVIRONMENT.txt)" != "$REAL_ENVIRONMENT" ]; then >&2 echo "startos.raspberrypi.squashfs ENVIRONMENT.txt mismatch" exit 1 fi fi