diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/ias_image_app | 191 | ||||
-rwxr-xr-x | scripts/mkabl-agl.sh | 507 | ||||
-rwxr-xr-x | scripts/mkefi-agl.sh | 531 |
3 files changed, 0 insertions, 1229 deletions
diff --git a/scripts/ias_image_app b/scripts/ias_image_app deleted file mode 100755 index 6a9b55f30..000000000 --- a/scripts/ias_image_app +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (c) 2012, Intel Corporation. -# 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. -# -# -# The CRC is a python translation of c code generated by (available under MIT license) -# pycrc 0.7.1 (http://www.tty1.net/pycrc/). Command line used: -# './pycrc.py --model=crc-32c --generate c --algorithm=table-driven' -# - -import argparse -import os -import struct -import errno - -__version__ = "0.0.1a" - -#======================================================================== -# IAS image creation -#======================================================================== - -MAGIC = 0x2E6B7069 -HEADER = struct.Struct('IIIIIII') - -def image (payload, ext_hdr=''): - - payload_len = round_up(len(payload)) - image_len = HEADER.size + len(ext_hdr) + payload_len + 4 - bytes = bytearray (image_len) - - type = 0x30000 - version = 0 - length = payload_len - offset = HEADER.size + len(ext_hdr) - uncomp = length ## compression not supported (yet) - hcrc = 0 - HEADER.pack_into (bytes, 0, - MAGIC, type, version, length, offset, uncomp, hcrc) - crc = crc32c_buf (bytes[0:24]) - struct.pack_into ('I', bytes, 24, crc) - - bytes[HEADER.size:offset] = ext_hdr - bytes[offset:offset+len(payload)] = payload - crc = crc32c_buf(bytes[HEADER.size:offset+length]) - struct.pack_into ('I', bytes, offset+length, crc) - - return bytes - -def multi_image (files): - - nfile = len(files) - - subimg = [] - o = 0 - for f in files: - l = len(f) - subimg.append((o, l)) - o += round_up(l) - - sizes = bytearray(4*nfile) - payload = bytearray(o) - for i in range(nfile): - o, l = subimg[i] - struct.pack_into ('I', sizes, 4*i, l) - payload[o:o+l] = files[i] - - return image (payload, sizes) - -# ======================================================================== -# Support functions. -# ======================================================================== - -def round_up (value, div=4): - """Round VALUE up to the next multiple of DIV (a power of two).""" - return (value + div - 1) & ~(div - 1) - -# ======================================================================== -# -# CRC32C -# -# Prehashed table of value to speed script execution -# -_CRC32C_TABLE = ( - - 0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, - 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, - 0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, - 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, - 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35, - 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, - 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A, - 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, - 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, - 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, - 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, - 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7, - 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, - 0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, - 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, - 0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, - 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, - 0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, - 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, - 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, - 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, - 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982, - 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, - 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED, - 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, - 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, - 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540, - 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, - 0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, - 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, - 0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, - 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351 -) - -def crc32c (byte, crc=0xffffffff): - - crc = (crc >> 8) ^ _CRC32C_TABLE[(crc ^ byte) & 0xff] - return crc - -def crc32c_buf (buf, crc=0xffffffff): - - for b in buf: - crc = crc32c (b, crc) - return crc - -# ======================================================================== - -#======================================================================== -# Main program: Argument handling. -#======================================================================== - -def parse_args(): - """Parse the command line and return an argparse.Namespace object.""" - - parser = argparse.ArgumentParser(description='Create a NON SIGNED IAS image to be used with DEVEL-ABL.') - - parser.add_argument ('-V', '--version', - action='version', version='%(prog)s ' + __version__) - parser.add_argument ('-o', '--output', - default='image.bin', - help='write final image to OUTPUT') - parser.add_argument ('-i', '--ignore', - default='', - help='provided for script compatibility with full featured ias_image_app',) - - parser.add_argument ('file', - help='add FILE to payload of IMAGE being created', - nargs='+', - metavar='file') - - return parser.parse_args() - -# ------------------------------------------------------------------------ - -def main(): - - a = parse_args() - try: - data = [open(f, 'rb').read() for f in a.file] - except IOError: - print ('error: Cannot open', a.file) - exit (1) - print ('Creating NON signed Linux Kernel for ABL') - img = multi_image(data) - try: - open (a.output, 'wb').write (img) - except IOError as err: - print ('error: Cannot open for write', a.output) - exit (2) - -if __name__ == '__main__': - main() - -# ======================================================================== diff --git a/scripts/mkabl-agl.sh b/scripts/mkabl-agl.sh deleted file mode 100755 index 611c08fbc..000000000 --- a/scripts/mkabl-agl.sh +++ /dev/null @@ -1,507 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2012, Intel Corporation. -# All rights reserved. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See -# the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# Modification from mkefidisk.sh provided by the Yocto project by Dominig -# to install Automotive Grade Linux (AGL) on -# Intel platforms equipped with the Automotive Linux Boot (ABL) -# -# Dependencies: -# Relies on the Intel iasImage tool to pakage the Kernel and the initrd in ABL format -# -# changes -# - simpler use model -# - keep initrd if present -# - does not allocate swap -# - accept .hddimg, wic and wic.xz as sources -# - -LANG=C - -# Set to 1 to enable additional output -DEBUG=0 -exec 3>/dev/null - -# -# Defaults -# -# 100 Mb for the boot partition -BOOT_SIZE=100 -# min available space on TMP_DIR for uncompressing xz image in kB e.g. 5G (5000000) -TMP_SIZE_MIN=5000000 -# TMP_DIR directory use for holding image file for uncompression (e.g. /tmp or $HOME) -TMP_DIR=/tmp -# -MRB_DEBUG_TTY="ttyS2,115200n8" -MRB_HDMI="HDMI-A-1:e" -# -IAS_PATH="" -IAS_EXE="ias_image_app" -IAS_CMD_LINE=/tmp/iasCommandLine.cmd - -# Cleanup after die() -cleanup() { - debug "Syncing and unmounting devices" - # Unmount anything we mounted - unmount $ROOTFS_MNT || error "Failed to unmount $ROOTFS_MNT" - unmount $BOOTFS_MNT || error "Failed to unmount $BOOTFS_MNT" - unmount $HDDIMG_ROOTFS_MNT || error "Failed to unmount $HDDIMG_ROOTFS_MNT" - unmount $HDDIMG_MNT || error "Failed to unmount $HDDIMG_MNT" - if [ "$IMG_TYPE" = "DISK" ]; then - debug "de-attaching loop devices" - for LOOP_DEVICE in `losetup --list |grep $HDDIMG | cut -d" " -f1` ; do - losetup -d $LOOP_DEVICE 1>&3 2>&1 || error "Detaching $LOOP_DEVICE from $HDDIMG failled" - done - fi - # Remove the TMPDIR - debug "Removing temporary files" - if [ -d "$TMPDIR" ]; then - rm -rf $TMPDIR || error "Failed to remove $TMPDIR" - fi - [ -f "$TMP_DIR/TMP-AGL-wic-image.wic" ] || rm -f $TMP_DIR/TMP-AGL-wic-image.wic -} - -trap 'die "Signal Received, Aborting..."' HUP INT TERM - -# Logging routines -WARNINGS=0 -ERRORS=0 -CLEAR="$(tput sgr0)" -INFO="$(tput bold)" -RED="$(tput setaf 1)$(tput bold)" -GREEN="$(tput setaf 2)$(tput bold)" -YELLOW="$(tput setaf 3)$(tput bold)" -info() { - echo "${INFO}$1${CLEAR}" -} -error() { - ERRORS=$((ERRORS+1)) - echo "${RED}$1${CLEAR}" -} -warn() { - WARNINGS=$((WARNINGS+1)) - echo "${YELLOW}$1${CLEAR}" -} -success() { - echo "${GREEN}$1${CLEAR}" -} -die() { - error "$1" - cleanup - exit 1 -} -debug() { - if [ $DEBUG -eq 1 ]; then - echo "$1" - fi -} - -usage() { - echo "Install AGL on a removable device to boot ABL based computer" - echo "ABL on the target must accept non signed development Linux kernel" - echo "In particular is can create USB or SD bootable support for Intel MRB" - echo "" - echo "Usage: $(basename $0) [-v] [-p path_to_iasImage_tool] HDDIMG REMOVABLE_DEVICE" - echo " -v: Verbose debug" - echo " path_to_iasImage_tool: path the iasImage tool provided by Intel." - echo " HDDIMG: The hddimg file to generate the efi disk from" - echo " Supported formats are .hddimg, .wic .wic.xz" - echo " REMOVABLE_DEVICE: The block device to write the image to, e.g. /dev/sdh" - echo "ex:" - echo " mkabl-agl.sh agl-demo-platform-intel-corei7-64.wic.xz /dev/sdd" - echo " mkabl-agl.sh agl-demo-platform-intel-corei7-64.hddimg /dev/sdd" - - echo " assuming that iasImage is accessible via your default path" - exit 1 -} - -image_details() { - IMG=$1 - info "Image details" - echo " image: $(stat --printf '%N\n' $IMG)" - echo " size: $(stat -L --printf '%s bytes\n' $IMG)" - echo " modified: $(stat -L --printf '%y\n' $IMG)" - echo " type: $(file -L -b $IMG)" - echo "" -} - -device_details() { - DEV=$1 - BLOCK_SIZE=512 - - info "Device details" - echo " device: $DEVICE" - if [ -f "/sys/class/block/$DEV/device/vendor" ]; then - echo " vendor: $(cat /sys/class/block/$DEV/device/vendor)" - else - echo " vendor: UNKOWN" - fi - if [ -f "/sys/class/block/$DEV/device/model" ]; then - echo " model: $(cat /sys/class/block/$DEV/device/model)" - else - echo " model: UNKNOWN" - fi - if [ -f "/sys/class/block/$DEV/size" ]; then - echo " size: $(($(cat /sys/class/block/$DEV/size) * $BLOCK_SIZE)) bytes" - else - echo " size: UNKNOWN" - fi - echo "" -} - -unmount_device() { - grep -q $DEVICE /proc/mounts - if [ $? -eq 0 ]; then - warn "$DEVICE listed in /proc/mounts, attempting to unmount" - umount $DEVICE* 2>/dev/null - ! grep -q $DEVICE /proc/mounts && info "Unmounted successfully" - return $? - fi - return 0 -} - -unmount() { - if [ "$1" = "" ] ; then - return 0 - fi - grep -q $1 /proc/mounts - if [ $? -eq 0 ]; then - debug "Unmounting $1" - umount $1 - ! grep -q $1 /proc/mounts # check if unmounted successfully - return $? - fi - return 0 -} - -# -# Parse and validate arguments -# - -if [ "$1" = "-v" ] ; then - DEBUG=1 - exec 3>&1 - shift -fi - -if [ "$1" = "-p" ] ; then - IAS_PATH="$2""/" - shift 2 -fi - -if [ $# -ne 2 ]; then - usage -fi - -IAS_IMAGE_TOOL="$IAS_PATH$IAS_EXE" -debug "iasImage tool is: $IAS_IMAGE_TOOL" -which $IAS_IMAGE_TOOL > IAS_IMAGE_TOOL_PATH -if [ ! -x "$(command -v $IAS_IMAGE_TOOL)" ]; then - die "$IAS_IMAGE_TOOL not found pointed by the path via 'sudo; use -p option'" -fi - -HDDIMG=$1 -DEVICE=$2 - -LINK=$(readlink $DEVICE) -if [ $? -eq 0 ]; then - DEVICE="$LINK" -fi - -if [ ! -w "$DEVICE" ]; then - if [ ! -e "${DEVICE}" ] ; then - die "Device $DEVICE cannot be found" - else - die "Device $DEVICE is not writable (need to run under sudo?)" - fi -fi - -if [ ! -e "$HDDIMG" ]; then - die "HDDIMG $HDDIMG does not exist" -fi -HDDIMG_EXT=${HDDIMG##*.} -case $HDDIMG_EXT in - hddimg) - IMG_TYPE="MOUNT" - IMG_COMPRESS="NO" - debug "Detected: uncompressed image type .hddimg" - ;; - wic) - IMG_TYPE="DISK" - IMG_COMPRESS="NO" - debug "Detected: uncompressed image type .wic" - ;; - xz) - IMG_TYPE="DISK" - IMG_COMPRESS="YES" - debug "Detected: xz compressed image type .wic" - command -v xz >/dev/null 2>&1 || { die "xz command is not available, pleaes install xz package"; } - TMP_SIZE=`df -k $TMP_DIR | awk '/[0-9]%/{print $(NF-2)}'` - if [ "$TMP_SIZE" -lt "$TMP_SIZE_MIN" ]; then - die "Available space on $TMP_DIR must be at least $TMP_SIZE_MIN kB" - fi - printf "Starting decompression of the image. It may take some time ..." - xz --decompress --keep --format=auto --force --threads=0 --stdout > $TMP_DIR/TMP-AGL-wic-image.wic $HDDIMG|| \ - die "xz command failled: xz --decompress --keep --format=auto --force --threads=0 --stdout > $TMP_DIR/TMP-AGL-wic-image.wic" - HDDIMG="$TMP_DIR/TMP-AGL-wic-image.wic" - echo "Image uncompressed, starting doing real work ..." - ;; - *) - die "Unsupported image format: $HDDIMG_EXT Supported format are .hddimg .wic wic.xz" - ;; -esac -# -# Ensure the hddimg is not mounted -# -debug "will now try to umount /detach previous images" -case $IMG_TYPE in - MOUNT) - unmount "$HDDIMG" || die "Failed to unmount $HDDIMG" - ;; - DISK) - [ `losetup --list |grep $HDDIMG | wc -l ` -gt 1 ] && die "Image mounted more than once, manual cleaning required see: losetup --list" - debug "ready to attach the wic image to aloop device" - LOOP_DEVICE=`losetup --find --show $HDDIMG` && ( losetup -d $LOOP_DEVICE 1>&3 2>&1 || die "Detaching $LOOP_DEVICE from $HDDIMG failled") - ;; - *) - die "unknown image format $IMG_TYPE" - ;; -esac -# -# Check if any $DEVICE partitions are mounted -# -unmount_device || die "Failed to unmount $DEVICE" - -# -# Confirm device with user -# -image_details $HDDIMG -device_details $(basename $DEVICE) -echo -n "${INFO}Prepare ABL image on $DEVICE [y/N]?${CLEAR} " -read RESPONSE -if [ "$RESPONSE" != "y" ]; then - echo "Image creation aborted" - exit 0 -fi - - -# -# Prepare the temporary working space -# -TMPDIR=$(mktemp -d mkabldisk-XXX) || die "Failed to create temporary mounting directory." -HDDIMG_MNT=$TMPDIR/hddimg -debug "TEMPDIR is: $TMPDIR" -HDDIMG_ROOTFS_MNT=$TMPDIR/hddimg_rootfs -ROOTFS_MNT=$TMPDIR/rootfs -BOOTFS_MNT=$TMPDIR/bootfs -mkdir $HDDIMG_MNT || die "Failed to create $HDDIMG_MNT" -mkdir $HDDIMG_ROOTFS_MNT || die "Failed to create $HDDIMG_ROOTFS_MNT" -mkdir $ROOTFS_MNT || die "Failed to create $ROOTFS_MNT" -mkdir $BOOTFS_MNT || die "Failed to create $BOOTFS_MNT" - - -# -# Partition $DEVICE -# -DEVICE_SIZE=$(parted -s $DEVICE unit mb print | grep ^Disk | cut -d" " -f 3 | sed -e "s/MB//") -# If the device size is not reported there may not be a valid label -if [ "$DEVICE_SIZE" = "" ] ; then - parted -s $DEVICE mklabel msdos || die "Failed to create MSDOS partition table" - DEVICE_SIZE=$(parted -s $DEVICE unit mb print | grep ^Disk | cut -d" " -f 3 | sed -e "s/MB//") -fi -ROOTFS_SIZE=$((DEVICE_SIZE-BOOT_SIZE)) -ROOTFS_START=$((BOOT_SIZE)) -ROOTFS_END=$((ROOTFS_START+ROOTFS_SIZE)) - -# MMC devices use a partition prefix character 'p' -PART_PREFIX="" -if [ ! "${DEVICE#/dev/mmcblk}" = "${DEVICE}" ] || [ ! "${DEVICE#/dev/loop}" = "${DEVICE}" ]; then - PART_PREFIX="p" -fi -BOOTFS=$DEVICE${PART_PREFIX}1 -ROOTFS=$DEVICE${PART_PREFIX}2 - -TARGET_PART_PREFIX="" -if [ ! "${TARGET_DEVICE#/dev/mmcblk}" = "${TARGET_DEVICE}" ]; then - TARGET_PART_PREFIX="p" -fi -TARGET_ROOTFS=$TARGET_DEVICE${TARGET_PART_PREFIX}2 - -echo "" -info "Boot partition size: $BOOT_SIZE MB ($BOOTFS)" -info "ROOTFS partition size: $ROOTFS_SIZE MB ($ROOTFS)" -echo "" - -# Use MSDOS by default as GPT cannot be reliably distributed in disk image form -# as it requires the backup table to be on the last block of the device, which -# of course varies from device to device. - -info "Partitioning installation media ($DEVICE)" - -debug "Deleting partition table on $DEVICE" -dd if=/dev/zero of=$DEVICE bs=512 count=2 1>&3 2>&1 || die "Failed to zero beginning of $DEVICE" - -debug "Creating new partition table (MSDOS) on $DEVICE" -parted -s $DEVICE mklabel msdos 1>&3 2>&1 || die "Failed to create MSDOS partition table" - -debug "Creating boot partition on $BOOTFS" -parted -s $DEVICE mkpart primary 0% $BOOT_SIZE 1>&3 2>&1 || die "Failed to create BOOT partition" - -debug "Enabling boot flag on $BOOTFS" -parted -s $DEVICE set 1 boot on 1>&3 2>&1 || die "Failed to enable boot flag" - -debug "Creating ROOTFS partition on $ROOTFS" -parted -s $DEVICE mkpart primary $ROOTFS_START $ROOTFS_END 1>&3 2>&1 || die "Failed to create ROOTFS partition" - -# as blkid does not provide PARTUUID on Ubuntu LTS 14.04 we myst hack via fdisk -#ROOTFS_PARTUUID=$(blkid |grep -e "$ROOTFS" |sed -n 's/^.*PARTUUID=/PARTUUID=/p') -export LC_ALL=C -ROOTFS_DISKID=$(fdisk -l "$DEVICE" | grep -e "Disk identifier" | sed -n 's/^.*Disk identifier: 0x/PARTUUID=/p') -if [ $ROOTFS_DISKID = "" ]; then - die "Failed to read DISKID" -fi -BOOTFS_PARTUUID="$ROOTFS_DISKID-01" -ROOTFS_PARTUUID="$ROOTFS_DISKID-02" -debug "PARTUUID for ROOTFS is $ROOTFS_PARTUUID" - -if [ $DEBUG -eq 1 ]; then - parted -s $DEVICE print -fi - - -# -# Check if any $DEVICE partitions are mounted after partitioning -# -unmount_device || die "Failed to unmount $DEVICE partitions" - - -# -# Format $DEVICE partitions -# -info "Formatting partitions" -debug "Formatting $BOOTFS as ext2" -mkfs.ext2 -F -F -L BOOT $BOOTFS 1>&3 2>&1 || die "Failed to format $BOOTFS" - -debug "Formatting $ROOTFS as ext4" -mkfs.ext4 -F $ROOTFS -L "ROOT" 1>&3 2>&1 || die "Failed to format $ROOTFS" - - -# Mounting image file system on loop devices -# -case $IMG_TYPE in - - MOUNT) - debug "Mounting images and device in preparation for installation" - mount -o loop $HDDIMG $HDDIMG_MNT 1>&3 2>&1 || die "Failed to mount $HDDIMG" - mount -o loop $HDDIMG_MNT/rootfs.img $HDDIMG_ROOTFS_MNT 1>&3 2>&1 || die "Failed to mount rootfs.img" - ;; - DISK) - debug "Attaching image and mounting partitions then device in preparation for installation" - LOOP_DEVICE=`losetup --find` || die "Failled to find an available loop device see: losetup --find" - losetup -P $LOOP_DEVICE $HDDIMG 1>&3 2>&1 || die "Attaching $LOOP_DEVICE from $HDDIMG failled" - mount "$LOOP_DEVICE"p2 $HDDIMG_ROOTFS_MNT 1>&3 2>&1 || die "Failed to mount $LOOP_DEVICEp1 on $HDDIMG_ROOTFS_MNT" - mount "$LOOP_DEVICE"p1 $HDDIMG_MNT 1>&3 2>&1 || die "Failed to mount $LOOP_DEVICEp2 on $HDDIMG_MNT" - ;; - *) - die "unknown image format $IMG_TYPE" - ;; -esac - -mount $ROOTFS $ROOTFS_MNT 1>&3 2>&1 || die "Failed to mount $ROOTFS on $ROOTFS_MNT" -mount $BOOTFS $BOOTFS_MNT 1>&3 2>&1 || die "Failed to mount $BOOTFS on $BOOTFS_MNT" - -info "Preparing boot partition" -# create the config file for iasImage -# Remove any existing root= kernel parameters and: -# o Add a root= parameter with the target rootfs -# o Specify ro so fsck can be run during boot -# o Specify rootwait in case the target media is an asyncronous block device -# such as MMC or USB disks -# o Specify "quiet" to minimize boot time when using slow serial consoles - -# iasImage command line file creation -echo "root=$ROOTFS_PARTUUID" > $IAS_CMD_LINE -echo "console=$MRB_DEBUG_TTY" >> $IAS_CMD_LINE -echo "earlycon=uart8250,mmio32,0xfc000000,115200n8" >> $IAS_CMD_LINE -echo "rootwait" >> $IAS_CMD_LINE -echo "video=$MRB_HDMI" >> $IAS_CMD_LINE -echo "i915.enable_initial_modeset=1" >> $IAS_CMD_LINE -debug "temp config for iasImage is $IAS_CMD_LINE" - -if [ -f $HDDIMG_MNT/vmlinuz ]; then - KERNEL_TYPE="vmlinuz" - debug "kernel is vmlinuz" -fi -if [ -f $HDDIMG_MNT/bzimage ]; then - KERNEL_TYPE="bzimage" - debug "kernel is bzimage -> vmlinuz" -fi -if [ -f $HDDIMG_MNT/microcode.cpio ]; then - warn "initrd=microcode.cpio is not a supported configuration, microcode.cpio has been ignored" -fi -[ -z $KERNEL_TYPE ] && die "Linux kernel type in $HDDIMG is unsupported" - -if [ -f $HDDIMG_MNT/initrd ]; - then - info "creating ABL image with initramsfs" - debug "$IAS_IMAGE_TOOL -o $BOOTFS_MNT/iasImage -i 0x30000 $IAS_CMD_LINE $HDDIMG_MNT/$KERNEL_TYPE $HDDIMG_MNT/initrd" - $IAS_IMAGE_TOOL -o $BOOTFS_MNT/iasImage -i 0x30000 $IAS_CMD_LINE $HDDIMG_MNT/$KERNEL_TYPE $HDDIMG_MNT/initrd - else - info "creating ABL image without initramfs" - debug "$IAS_IMAGE_TOOL -o $BOOTFS_MNT/iasImage -i 0x30000 $IAS_CMD_LINE $HDDIMG_MNT/$KERNEL_TYPE" - $IAS_IMAGE_TOOL -o $BOOTFS_MNT/iasImage -i 0x30000 $IAS_CMD_LINE $HDDIMG_MNT/$KERNEL_TYPE -fi - -printf "Copying ROOTFS files ... " -command -v rsync >/dev/null 2>&1 # check if rsync exists -if [ $DEBUG -eq 1 ] && [ $? -eq 0 ]; then - rsync --info=progress2 -h -aHAXW --no-compress $HDDIMG_ROOTFS_MNT/* $ROOTFS_MNT 1>&3 2>&1 || die "Root FS copy failed" -else - cp -a $HDDIMG_ROOTFS_MNT/* $ROOTFS_MNT 1>&3 2>&1 || die "Root FS copy failed" -fi - -debug "removing any swap entry in /etc/fstab" -sed --in-place '/swap/d' $ROOTFS_MNT/etc/fstab -debug "fixing PARTUUID for /boot" -sed --in-place -e "s#PARTUUID=[0-9a-z-]\+\t/boot#${BOOTFS_PARTUUID}\t/boot#" $ROOTFS_MNT/etc/fstab - -printf "flushing data on removable device. May take a while ... " -sync --file-system $ROOTFS_MNT -echo done - -# We dont want udev to mount our root device while we're booting... -if [ -d $ROOTFS_MNT/etc/udev/ ] ; then - echo "$TARGET_DEVICE" >> $ROOTFS_MNT/etc/udev/mount.blacklist -fi - - -# Call cleanup to unmount devices and images and remove the TMPDIR -cleanup - -echo "" -if [ $WARNINGS -ne 0 ] && [ $ERRORS -eq 0 ]; then - echo "${YELLOW}Installation completed with warnings${CLEAR}" - echo "${YELLOW}Warnings: $WARNINGS${CLEAR}" -elif [ $ERRORS -ne 0 ]; then - echo "${RED}Installation encountered errors${CLEAR}" - echo "${RED}Errors: $ERRORS${CLEAR}" - echo "${YELLOW}Warnings: $WARNINGS${CLEAR}" -else - success "Installation completed successfully" -fi -echo "" diff --git a/scripts/mkefi-agl.sh b/scripts/mkefi-agl.sh deleted file mode 100755 index c44ecedde..000000000 --- a/scripts/mkefi-agl.sh +++ /dev/null @@ -1,531 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2012, Intel Corporation. -# All rights reserved. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See -# the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# Modification from mkefidisk.sh provided by the Yocto project by Dominig -# to install Automotive Grade Linux (AGL) on Minnowboard and any PC with UEFI boot -# -# changes -# - simpler use model -# - keep initrd if present -# - create a grub config with PARTUID to ease boot from various devices automaticaly -# - add a UEFI startup.nsh script for autoboot -# - remove any configured swap is fstab -# - accept .hddimg, wic and wic.xz as sources - -LANG=C - -# Set to 1 to enable additional output -DEBUG=0 -exec 3>/dev/null - -# -# Defaults -# -# 100 Mb for the boot partition -BOOT_SIZE=100 -# min available space on TMP_DIR for uncompressing xz image in kB e.g. 5G (5000000) -TMP_SIZE_MIN=5000000 -# TMP_DIR directory use for holding image file for uncompression (e.g. /tmp or $HOME) -TMP_DIR=/tmp - -# Cleanup after die() -cleanup() { - debug "Syncing and unmounting devices" - # Unmount anything we mounted - unmount $ROOTFS_MNT || error "Failed to unmount $ROOTFS_MNT" - unmount $BOOTFS_MNT || error "Failed to unmount $BOOTFS_MNT" - unmount $HDDIMG_ROOTFS_MNT || error "Failed to unmount $HDDIMG_ROOTFS_MNT" - unmount $HDDIMG_MNT || error "Failed to unmount $HDDIMG_MNT" - if [ "$IMG_TYPE" = "DISK" ]; then - debug "de-attaching loop devices" - for LOOP_DEVICE in `losetup --list |grep $HDDIMG | cut -d" " -f1` ; do - losetup -d $LOOP_DEVICE 1>&3 2>&1 || error "Detaching $LOOP_DEVICE from $HDDIMG failled" - done - fi - - # Remove the TMPDIR - debug "Removing temporary files" - if [ -d "$TMPDIR" ]; then - rm -rf "$TMPDIR" || error "Failed to remove $TMPDIR" - fi - [ -f "$TMP_DIR/TMP-AGL-wic-image.wic" ] && rm -f $TMP_DIR/TMP-AGL-wic-image.wic -} - -trap 'die "Signal Received, Aborting..."' HUP INT TERM - -# Logging routines -WARNINGS=0 -ERRORS=0 -CLEAR="$(tput sgr0)" -INFO="$(tput bold)" -RED="$(tput setaf 1)$(tput bold)" -GREEN="$(tput setaf 2)$(tput bold)" -YELLOW="$(tput setaf 3)$(tput bold)" -info() { - echo "${INFO}$1${CLEAR}" -} -error() { - ERRORS=$((ERRORS+1)) - echo "${RED}$1${CLEAR}" -} -warn() { - WARNINGS=$((WARNINGS+1)) - echo "${YELLOW}$1${CLEAR}" -} -success() { - echo "${GREEN}$1${CLEAR}" -} -die() { - error "$1" - cleanup - exit 1 -} -debug() { - if [ $DEBUG -eq 1 ]; then - echo "$1" - fi -} - -usage() { - echo "Install AGL on a removable device to boot on IA UEFI based computer" - echo "In particular is can create USB or SD bootable support for Minnowboard" - echo "" - echo "Usage: $(basename $0) [-v] IDSK_IMAGE REMOVABLE_DEVICE" - echo " -v: Verbose debug" - echo " HDDIMG: The DISK_IMAGE file generated by Yocto the efi disk from" - echo " Supported formats are .hddimg, .wic .wic.xz" - echo " REMOVABLE_DEVICE: The block device to write the image to, e.g. /dev/sdh" - echo "ex:" - echo " mkefi-agl.sh agl-demo-platform-intel-corei7-64.hddimg /dev/sdd" - echo " mkefi-agl.sh agl-demo-platform-intel-corei7-64.wic.xz /dev/sdd" - exit 1 -} - -image_details() { - IMG=$1 - info "Image details" - echo " image: $(stat --printf '%N\n' $IMG)" - echo " size: $(stat -L --printf '%s bytes\n' $IMG)" - echo " modified: $(stat -L --printf '%y\n' $IMG)" - echo " type: $(file -L -b $IMG)" - echo "" -} - -device_details() { - DEV=$1 - BLOCK_SIZE=512 - - info "Device details" - echo " device: $DEVICE" - if [ -f "/sys/class/block/$DEV/device/vendor" ]; then - echo " vendor: $(cat /sys/class/block/$DEV/device/vendor)" - else - echo " vendor: UNKOWN" - fi - if [ -f "/sys/class/block/$DEV/device/model" ]; then - echo " model: $(cat /sys/class/block/$DEV/device/model)" - else - echo " model: UNKNOWN" - fi - if [ -f "/sys/class/block/$DEV/size" ]; then - echo " size: $(($(cat /sys/class/block/$DEV/size) * $BLOCK_SIZE)) bytes" - else - echo " size: UNKNOWN" - fi - echo "" -} - -unmount_device() { - grep -q $DEVICE /proc/mounts - if [ $? -eq 0 ]; then - warn "$DEVICE listed in /proc/mounts, attempting to unmount" - umount $DEVICE* 2>/dev/null - ! grep -q $DEVICE /proc/mounts && info "Unmounted successfully" - return $? - fi - return 0 -} - -unmount() { - if [ "$1" = "" ] ; then - return 0 - fi - grep -q $1 /proc/mounts - if [ $? -eq 0 ]; then - debug "Unmounting $1" - umount $1 - ! grep -q $1 /proc/mounts # check if unmounted successfully - return $? - fi - return 0 -} - -# -# Parse and validate arguments -# -if [ "$1" != "-v" ] && [ $# -ne 2 ]; then - usage -fi -if [ "$1" = "-v" ] && [ $# -ne 3 ]; then - usage -fi - -if [ "$1" = "-v" ] ; then - DEBUG=1 - exec 3>&1 - shift -fi - -HDDIMG=$1 -DEVICE=$2 - -LINK=$(readlink $DEVICE) -if [ $? -eq 0 ]; then - DEVICE="$LINK" -fi - -if [ ! -w "$DEVICE" ]; then - if [ ! -e "${DEVICE}" ] ; then - die "Device $DEVICE cannot be found" - else - die "Device $DEVICE is not writable (need to run under sudo?)" - fi -fi - -if [ ! -e "$HDDIMG" ]; then - die "HDDIMG $HDDIMG does not exist" -fi -HDDIMG_EXT=${HDDIMG##*.} -case $HDDIMG_EXT in - hddimg) - IMG_TYPE="MOUNT" - IMG_COMPRESS="NO" - debug "Detected: uncompressed image type .hddimg" - ;; - wic) - IMG_TYPE="DISK" - IMG_COMPRESS="NO" - debug "Detected: uncompressed image type .wic" - ;; - xz) - IMG_TYPE="DISK" - IMG_COMPRESS="YES" - debug "Detected: xz compressed image type .wic" - command -v xz >/dev/null 2>&1 || { die "xz command is not available, pleaes install xz package"; } - TMP_SIZE=`df -k $TMP_DIR | awk '/[0-9]%/{print $(NF-2)}'` - if [ "$TMP_SIZE" -lt "$TMP_SIZE_MIN" ]; then - die "Available space on $TMP_DIR must be at least $TMP_SIZE_MIN kB" - fi - printf "Starting decompression of the image. It may take some time ..." - xz --decompress --keep --format=auto --force --threads=0 --stdout > $TMP_DIR/TMP-AGL-wic-image.wic $HDDIMG|| \ - die "xz command failled: xz --decompress --keep --format=auto --force --threads=0 --stdout > $TMP_DIR/TMP-AGL-wic-image.wic" - HDDIMG="$TMP_DIR/TMP-AGL-wic-image.wic" - echo "Image uncompressed, starting doing real work ..." - ;; - *) - die "Unsupported image format: $HDDIMG_EXT Supported format are .hddimg .wic wic.xz" - ;; -esac - -# -# Ensure the hddimg is not mounted -# -debug "will now try to umount /detach previous images" -case $IMG_TYPE in - MOUNT) - unmount "$HDDIMG" || die "Failed to unmount $HDDIMG" - ;; - DISK) - [ `losetup --list |grep $HDDIMG | wc -l ` -gt 1 ] && die "Image mounted more than once, manual cleaning required see: losetup --list" - debug "ready to attach the wic image to aloop device" - LOOP_DEVICE=`losetup --find --show $HDDIMG` && ( losetup -d $LOOP_DEVICE 1>&3 2>&1 || die "Detaching $LOOP_DEVICE from $HDDIMG failled") - ;; - *) - die "unknown image format $IMG_TYPE" - ;; -esac - -# -# Check if any $DEVICE partitions are mounted -# -unmount_device || die "Failed to unmount $DEVICE" - -# -# Confirm device with user -# -image_details $HDDIMG -device_details $(basename $DEVICE) -echo -n "${INFO}Prepare EFI image on $DEVICE [y/N]?${CLEAR} " -read RESPONSE -if [ "$RESPONSE" != "y" ]; then - die "Image creation aborted" -fi - - -# -# Prepare the temporary working space -# -TMPDIR=$(mktemp -d mkefidisk-XXX) || die "Failed to create temporary mounting directory." -HDDIMG_MNT=$TMPDIR/hddimg -HDDIMG_ROOTFS_MNT=$TMPDIR/hddimg_rootfs -ROOTFS_MNT=$TMPDIR/rootfs -BOOTFS_MNT=$TMPDIR/bootfs -mkdir $HDDIMG_MNT || die "Failed to create $HDDIMG_MNT" -mkdir $HDDIMG_ROOTFS_MNT || die "Failed to create $HDDIMG_ROOTFS_MNT" -mkdir $ROOTFS_MNT || die "Failed to create $ROOTFS_MNT" -mkdir $BOOTFS_MNT || die "Failed to create $BOOTFS_MNT" - - -# -# Partition $DEVICE -# -DEVICE_SIZE=$(parted -s $DEVICE unit mb print | grep ^Disk | cut -d" " -f 3 | sed -e "s/MB//") -# If the device size is not reported there may not be a valid label -if [ "$DEVICE_SIZE" = "" ] ; then - parted -s $DEVICE mklabel msdos || die "Failed to create MSDOS partition table" - DEVICE_SIZE=$(parted -s $DEVICE unit mb print | grep ^Disk | cut -d" " -f 3 | sed -e "s/MB//") -fi -ROOTFS_SIZE=$((DEVICE_SIZE-BOOT_SIZE)) -ROOTFS_START=$((BOOT_SIZE)) -ROOTFS_END=$((ROOTFS_START+ROOTFS_SIZE)) - -# MMC devices use a partition prefix character 'p' -PART_PREFIX="" -if [ ! "${DEVICE#/dev/mmcblk}" = "${DEVICE}" ] || [ ! "${DEVICE#/dev/nvme0n}" = "${DEVICE}" ] || [ ! "${DEVICE#/dev/loop}" = "${DEVICE}" ]; then - PART_PREFIX="p" -fi -BOOTFS=$DEVICE${PART_PREFIX}1 -ROOTFS=$DEVICE${PART_PREFIX}2 - -TARGET_PART_PREFIX="" -if [ ! "${TARGET_DEVICE#/dev/mmcblk}" = "${TARGET_DEVICE}" ] || [ ! "${TARGET_DEVICE#/dev/nvme0n}" = "${TARGET_DEVICE}" ]; then - TARGET_PART_PREFIX="p" -fi -TARGET_ROOTFS=$TARGET_DEVICE${TARGET_PART_PREFIX}2 - -echo "" -info "Boot partition size: $BOOT_SIZE MB ($BOOTFS)" -info "ROOTFS partition size: $ROOTFS_SIZE MB ($ROOTFS)" -echo "" - -# Use MSDOS by default as GPT cannot be reliably distributed in disk image form -# as it requires the backup table to be on the last block of the device, which -# of course varies from device to device. - -info "Partitioning installation media ($DEVICE)" - -debug "Deleting partition table on $DEVICE" -dd if=/dev/zero of=$DEVICE bs=512 count=2 1>&3 2>&1 || die "Failed to zero beginning of $DEVICE" - -debug "Creating new partition table (MSDOS) on $DEVICE" -parted -s $DEVICE mklabel msdos 1>&3 2>&1 || die "Failed to create MSDOS partition table" - -debug "Creating boot partition on $BOOTFS" -parted -s $DEVICE mkpart primary 0% $BOOT_SIZE 1>&3 2>&1 || die "Failed to create BOOT partition" - -debug "Enabling boot flag on $BOOTFS" -parted -s $DEVICE set 1 boot on 1>&3 2>&1 || die "Failed to enable boot flag" - -debug "Creating ROOTFS partition on $ROOTFS" -parted -s $DEVICE mkpart primary $ROOTFS_START $ROOTFS_END 1>&3 2>&1 || die "Failed to create ROOTFS partition" - -# as blkid does not provide PARTUUID on Ubuntu LTS 14.04 we myst hack via fdisk -#ROOTFS_PARTUUID=$(blkid |grep -e "$ROOTFS" |sed -n 's/^.*PARTUUID=/PARTUUID=/p') -export LC_ALL=C -ROOTFS_DISKID=$(fdisk -l "$DEVICE" | grep -e "Disk identifier" | sed -n 's/^.*Disk identifier: 0x/PARTUUID=/p') -if [ $ROOTFS_DISKID = "" ]; then - die "Failed to read DISKID" -fi -BOOTFS_PARTUUID="$ROOTFS_DISKID-01" -ROOTFS_PARTUUID="$ROOTFS_DISKID-02" -debug "PARTUUID for ROOTFS is $ROOTFS_PARTUUID" - -if [ $DEBUG -eq 1 ]; then - parted -s $DEVICE print -fi - - -# -# Check if any $DEVICE partitions are mounted after partitioning -# -unmount_device || die "Failed to unmount $DEVICE partitions" - - -# -# Format $DEVICE partitions -# -info "Formatting partitions" -debug "Formatting $BOOTFS as vfat" -if [ ! "${DEVICE#/dev/loop}" = "${DEVICE}" ]; then - mkfs.vfat -I $BOOTFS -n "EFI" 1>&3 2>&1 || die "Failed to format $BOOTFS" -else - mkfs.vfat $BOOTFS -n "EFI" 1>&3 2>&1 || die "Failed to format $BOOTFS" -fi - -debug "Formatting $ROOTFS as ext4" -mkfs.ext4 -F $ROOTFS -L "ROOT" 1>&3 2>&1 || die "Failed to format $ROOTFS" - - -# -# Mounting image file system on loop devices -# -case $IMG_TYPE in - - MOUNT) - debug "Mounting images and device in preparation for installation" - mount -o loop $HDDIMG $HDDIMG_MNT 1>&3 2>&1 || die "Failed to mount $HDDIMG" - mount -o loop $HDDIMG_MNT/rootfs.img $HDDIMG_ROOTFS_MNT 1>&3 2>&1 || die "Failed to mount rootfs.img" - ;; - DISK) - debug "Attaching image and mounting partitions then device in preparation for installation" - LOOP_DEVICE=`losetup --find` || die "Failled to find an available loop device see: losetup --find" - losetup -P $LOOP_DEVICE $HDDIMG 1>&3 2>&1 || die "Attaching $LOOP_DEVICE from $HDDIMG failled" - mount "$LOOP_DEVICE"p2 $HDDIMG_ROOTFS_MNT 1>&3 2>&1 || die "Failed to mount $LOOP_DEVICEp1 on $HDDIMG_ROOTFS_MNT" - mount "$LOOP_DEVICE"p1 $HDDIMG_MNT 1>&3 2>&1 || die "Failed to mount $LOOP_DEVICEp2 on $HDDIMG_MNT" - ;; - *) - die "unknown image format $IMG_TYPE" - ;; -esac -# Mount removable device - mount $ROOTFS $ROOTFS_MNT 1>&3 2>&1 || die "Failed to mount $ROOTFS on $ROOTFS_MNT" - mount $BOOTFS $BOOTFS_MNT 1>&3 2>&1 || die "Failed to mount $BOOTFS on $BOOTFS_MNT" - - -info "Preparing boot partition" -EFIDIR="$BOOTFS_MNT/EFI/BOOT" -if [ -f $HDDIMG_MNT/vmlinuz ]; then - cp $HDDIMG_MNT/vmlinuz $BOOTFS_MNT 1>&3 2>&1 || die "Failed to copy vmlinuz" - KERNEL_TYPE="VMLINUZ" - debug "kernel is vmlinuz" -fi -if [ -f $HDDIMG_MNT/bzimage ]; then - cp $HDDIMG_MNT/bzimage $BOOTFS_MNT 1>&3 2>&1 || die "Failed to copy bzimage" - KERNEL_TYPE="BZIMAGE" - debug "kernel is bzimage" -fi -if [ -f $HDDIMG_MNT/microcode.cpio ]; then - cp $HDDIMG_MNT/microcode.cpio $BOOTFS_MNT 1>&3 2>&1 || die "Failed to copy microcode.cpio" - debug "microcode.cpio copied" -fi -[ -z $KERNEL_TYPE ] && die "Linux kernel type in $HDDIMG is unsupported" - -if [ -f $HDDIMG_MNT/initrd ] - then - echo "initrd detected" - cp $HDDIMG_MNT/initrd $BOOTFS_MNT 1>&3 2>&1 || die "Failed to copy initrd" - else - warn "initrd missing" -fi -echo "bootx64.efi" > $BOOTFS_MNT/startup.nsh || die "Failed to create startup.nsh" -# Copy the efi loader and configs (booti*.efi and grub.cfg if it exists) -cp -r $HDDIMG_MNT/EFI $BOOTFS_MNT 1>&3 2>&1 || die "Failed to copy EFI dir" -# Silently ignore a missing systemd-boot or gummiboot loader dir (we might just be a GRUB image) -cp -r $HDDIMG_MNT/loader $BOOTFS_MNT 1>&3 2>&1 - -# Update the boot loaders configurations for an installed image -# Remove any existing root= kernel parameters and: -# o Add a root= parameter with the target rootfs -# o Specify ro so fsck can be run during boot -# o Specify rootwait in case the target media is an asyncronous block device -# such as MMC or USB disks -# o Specify "quiet" to minimize boot time when using slow serial consoles - -# Look for a GRUB installation -GRUB_CFG="$EFIDIR/grub.cfg" -if [ -e "$GRUB_CFG" ]; then - info "Configuring GRUB" - # Delete the install entry - sed -i "/menuentry 'install'/,/^}/d" $GRUB_CFG - # Delete any LABEL= strings - sed -i "s/ LABEL=[^ ]*/ /" $GRUB_CFG - # detect config initrd=microcode.cpio - if grep -q microcode $GRUB_CFG; then - warn "initrd=microcode.cpio detected, might not work on all boot configurations" - fi - sed -i "s@ root=[^ ]*@ @" $GRUB_CFG - sed -i "s@vmlinuz @vmlinuz root=$ROOTFS_PARTUUID @" $GRUB_CFG -fi - -# look for a systemd-boot loader.conf file and create a default boot entry -SYSTEMDBOOT_CFG="$BOOTFS_MNT/loader/loader.conf" -if [ -e "$SYSTEMDBOOT_CFG" ]; then - info "Configuring SYSTEMD-BOOT" - SYSTEMDBOOT_BOOT="$BOOTFS_MNT/loader/entries/boot.conf" - SYSTEMDBOOT_DEBUG="$BOOTFS_MNT/loader/entries/debug.conf" - # Delete the install entry - sed -i "/menuentry 'install'/,/^}/d" $SYSTEMDBOOT_CFG - rm -rf "$BOOTFS_MNT/loader/entries/install.conf" 1>&3 2>&1 - # Add PARTUUID to the boot entry file - if [ ! -e "$SYSTEMDBOOT_BOOT" ]; then - die "no boot.conf entry found in systemd-boot directories" - fi - # Delete any LABEL= strings - sed -i "s/ LABEL=[^ ]*/ /" $SYSTEMDBOOT_BOOT - # detect config initrd=microcode.cpio - if grep -q microcode $SYSTEMDBOOT_BOOT; then - warn "initrd=microcode.cpio detected, might not work on all boot configurations" - fi - sed -i "s@ root=[^ ]*@ @" $SYSTEMDBOOT_BOOT - sed -i "s@options @options root=$ROOTFS_PARTUUID @" $SYSTEMDBOOT_BOOT -fi - - -# Ensure we have at least one EFI bootloader configured -if [ ! -e $GRUB_CFG ] && [ ! -e $SYSTEMDBOOT_CFG ] ; then - die "No EFI bootloader configuration found" -fi - -printf "Copying ROOTFS files ... " -command -v rsync >/dev/null 2>&1 # check if rsync exists -if [ $DEBUG -eq 1 ] && [ $? -eq 0 ]; then - rsync --info=progress2 -h -aHAXW --no-compress $HDDIMG_ROOTFS_MNT/* $ROOTFS_MNT 1>&3 2>&1 || die "Root FS copy failed" -else - cp -a $HDDIMG_ROOTFS_MNT/* $ROOTFS_MNT 1>&3 2>&1 || die "Root FS copy failed" -fi -debug "removing any swap entry in /etc/fstab" -sed --in-place '/swap/d' $ROOTFS_MNT/etc/fstab -debug "fixing PARTUUID for /boot" -sed --in-place -e "s#PARTUUID=[0-9a-z-]\+\t/boot#${BOOTFS_PARTUUID}\t/boot#" $ROOTFS_MNT/etc/fstab - -printf "flushing data on removable device. May take a while ... " -sync --file-system $ROOTFS_MNT -echo done - -# We dont want udev to mount our root device while we're booting... -if [ -d $ROOTFS_MNT/etc/udev/ ] ; then - echo "$TARGET_DEVICE" >> $ROOTFS_MNT/etc/udev/mount.blacklist -fi - - -# Call cleanup to unmount devices and images and remove the TMPDIR -cleanup - -echo "" -if [ $WARNINGS -ne 0 ] && [ $ERRORS -eq 0 ]; then - echo "${YELLOW}Installation completed with warnings${CLEAR}" - echo "${YELLOW}Warnings: $WARNINGS${CLEAR}" -elif [ $ERRORS -ne 0 ]; then - echo "${RED}Installation encountered errors${CLEAR}" - echo "${RED}Errors: $ERRORS${CLEAR}" - echo "${YELLOW}Warnings: $WARNINGS${CLEAR}" -else - success "Installation completed successfully" -fi -echo "" |