#!/bin/bash

# Copyright 2015 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This script produces a bootable USB drive, designed to boot using verified
# boot.

SCRIPT_DIR=$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd)
source "${SCRIPT_DIR}"/build-utils.sh

function usage() {
  echo "$0 BLOCK_DEVICE ROOT_DIRECTORY [type]"
  echo "\"type\" is optional and can be \"dev\" or \"net\""
}

# Grab some arguments, do some basic validation.
[[ $# -eq 3 ]] || [[ $# -eq 2 ]] || (usage; die)
[[ -b "$1" ]] || (usage; die "$1 is not a block device")
[[ -d "$2" ]] || (usage; die "$2 is not a directory")
BLOCK_DEVICE=$1
ROOT_DIR=$2

if [[ $# -eq 3 ]]; then
  DC_TYPE="$3"
fi

KERNEL_IMAGE="$(mktemp)"
trap "rm -rf \"${KERNEL_IMAGE}\"" INT TERM EXIT

# Do a sanity check on the block device: help prevent users from accidentally
# destroying their workstations by checking whether this is a usb drive.
if ! is_usb "${BLOCK_DEVICE}"; then
  die "${BLOCK_DEVICE} is not a usb drive"
fi

# Destroy any existing GPT/MBR on the device.  We're going to use cgpt soon and
# it doesn't seem to properly wipe existing partitions.
sudo sgdisk --zap-all "${BLOCK_DEVICE}"

make -C "${VB_DIR}" cgpt futil

# Ensure that magenta has been built.
"${MX_DIR}"/scripts/build-magenta-x86-64

"${VB_DIR}"/build/futility/futility vbutil_kernel \
	--pack "${KERNEL_IMAGE}"  \
	--keyblock "${VB_DIR}"/tests/devkeys/recovery_kernel.keyblock \
	--signprivate \
		"${VB_DIR}"/tests/devkeys/recovery_kernel_data_key.vbprivk \
	--version 1 \
	--config "${SCRIPT_DIR}"/onechar.txt \
	--bootloader "${SCRIPT_DIR}"/onechar.txt \
	--vmlinuz "${MX_DIR}"/build-magenta-pc-x86-64/magenta.bin

CGPT="${VB_DIR}/build/cgpt/cgpt"

# The size of the first two partitions (kernel, root) don't vary per-device.
sudo "${CGPT}" create "${BLOCK_DEVICE}"
sudo "${CGPT}" add -s 32768 -t kernel -b 64 -l kernel "${BLOCK_DEVICE}"
sudo "${CGPT}" add -s 4194304 -t rootfs -b 32832 -l root "${BLOCK_DEVICE}"
sudo "${CGPT}" add -i 1 -T 1 -S 1 -P 2 "${BLOCK_DEVICE}"
sudo "${CGPT}" add -i 4 -s 131072 -t efi -b 4227136 -l efi "${BLOCK_DEVICE}"

# Use sgdisk to make the data partition so we don't have to calculate the size.
sudo sgdisk -N3 -c3:data -t3:0700 "${BLOCK_DEVICE}"

# Copy kernel to the kernel partition.
sudo dd if="${KERNEL_IMAGE}" of="${BLOCK_DEVICE}1"

# Clean up the temporary kernel image.
rm -rf "${KERNEL_IMAGE}"

# Format the other two partitions.
sudo mkfs.ext4 -q "${BLOCK_DEVICE}2"
sudo mkfs.ext4 -q "${BLOCK_DEVICE}3"

sudo mkfs.vfat -F 32 "${BLOCK_DEVICE}4"

# Mount the root partition, trap the unmount.
MOUNT_POINT="$(mktemp -d)"
sudo mount "${BLOCK_DEVICE}2" "$MOUNT_POINT"
trap "umount_retry \"${MOUNT_POINT}\" && rm -rf \"${MOUNT_POINT}\"" INT TERM EXIT

# Make everything owned by root.
sudo chown -R root:root "${MOUNT_POINT}"/*

# Unmount the root partition (might as well reuse the mount point).
umount_retry "${MOUNT_POINT}"

# Copy data to the data partition.
sudo mount "${BLOCK_DEVICE}3" "${MOUNT_POINT}"
sudo cp -a "${ROOT_DIR}"/* "${MOUNT_POINT}"
sudo chown -R root:root "${MOUNT_POINT}"/*
umount_retry "${MOUNT_POINT}"

rm -rf "${MOUNT_POINT}"
trap - INT TERM EXIT

# Install depthcharge to the EFI partition.
"${SCRIPT_DIR}"/install-uefi-depthcharge.sh "${BLOCK_DEVICE}" ${DC_TYPE}
