testing: add support for creating efi live images

TODO: full uefi support in installer
This commit is contained in:
Stefan Saraev 2014-02-28 21:04:38 +02:00
parent 9b83058be4
commit 76a19cc0a6
3 changed files with 72 additions and 11 deletions

View File

@ -11,6 +11,9 @@ release:
image:
./scripts/image mkimage
image-efi:
./scripts/image mkimage efi
noobs:
./scripts/image noobs

View File

@ -278,6 +278,9 @@ IMAGE_NAME="$DISTRONAME-$TARGET_VERSION"
# create image files if requested
if [ "$1" = "mkimage" -a -n "$BOOTLOADER" ]; then
if [ "$2" == "efi" ] ; then
UEFI=yes
fi
# variables used in image script must be passed
sudo env \
PATH="$PATH" \
@ -289,6 +292,7 @@ IMAGE_NAME="$DISTRONAME-$TARGET_VERSION"
RELEASE_DIR="$RELEASE_DIR" \
UUID_SYSTEM="$(uuidgen)" \
UUID_STORAGE="$(uuidgen)" \
UEFI="$UEFI" \
$SCRIPTS/mkimage
fi

View File

@ -49,6 +49,14 @@
trap cleanup SIGINT
# generate volume id for fat partition
if [ "$UEFI" = "yes" ] ; then
UUID_1=$(date '+%d%m')
UUID_2=$(date '+%M%S')
FAT_VOL_ID="${UUID_1}${UUID_2}"
UUID_SYSTEM="${UUID_1}-${UUID_2}"
fi
# ensure loopX not in use
umount "$OE_TMP" &>/dev/null || :
umount "$LOOP" &>/dev/null >/dev/null || :
@ -62,29 +70,46 @@ trap cleanup SIGINT
# write a disklabel
echo "image: creating partition table on $DISK..."
losetup "$LOOP" "$DISK"
parted -s "$LOOP" mklabel msdos
if [ "$UEFI" = "yes" ] ; then
parted -s "$LOOP" mklabel gpt
else
parted -s "$LOOP" mklabel msdos
fi
sync
# create part1
echo "image: creating part1 on $DISK..."
SYSTEM_PART_END=$(( $SYSTEM_SIZE * 1024 * 1024 / 512 + 2048 ))
if [ "$BOOTLOADER" = "syslinux" ]; then
parted -s "$LOOP" -a min unit s mkpart primary ext4 2048 $SYSTEM_PART_END
if [ "$UEFI" = "yes" ] ; then
parted -s "$LOOP" -a min unit s mkpart primary fat32 2048 $SYSTEM_PART_END
else
parted -s "$LOOP" -a min unit s mkpart primary ext4 2048 $SYSTEM_PART_END
fi
elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then
parted -s "$LOOP" -a min unit s mkpart primary fat32 2048 $SYSTEM_PART_END
fi
parted -s "$LOOP" set 1 boot on
if [ "$UEFI" = "yes" ] ; then
parted -s "$LOOP" set 1 legacy_boot on
else
parted -s "$LOOP" set 1 boot on
fi
# create part2
echo "image: creating part2 on $DISK..."
STORAGE_PART_START=$(( $SYSTEM_PART_END + 2048 ))
parted -s "$LOOP" -a min unit s mkpart primary ext4 $STORAGE_PART_START 100%
STORAGE_PART_END=$(( $STORAGE_PART_START + (( $STORAGE_SIZE * 1024 * 1024 / 512 )) ))
parted -s "$LOOP" -a min unit s mkpart primary ext4 $STORAGE_PART_START $STORAGE_PART_END
sync
if [ "$BOOTLOADER" = "syslinux" ]; then
# write mbr
echo "image: writing mbr..."
MBR="$ROOT/$TOOLCHAIN/share/syslinux/mbr.bin"
if [ "$UEFI" = "yes" ] ; then
MBR="$ROOT/$TOOLCHAIN/share/syslinux/gptmbr.bin"
else
MBR="$ROOT/$TOOLCHAIN/share/syslinux/mbr.bin"
fi
if [ -n "$MBR" ]; then
dd bs=440 count=1 conv=notrunc if="$MBR" of="$LOOP"
fi
@ -98,9 +123,13 @@ fi
SIZELIMIT=$(( $SYSTEM_SIZE * 1024 * 1024 ))
losetup -o $OFFSET --sizelimit $SIZELIMIT "$LOOP" "$DISK"
if [ "$BOOTLOADER" = "syslinux" ]; then
mke2fs -q -t ext4 -m 0 "$LOOP"
tune2fs -U $UUID_SYSTEM "$LOOP"
e2fsck -n "$LOOP"
if [ "$UEFI" = "yes" ] ; then
mkfs.vfat -i "$FAT_VOL_ID" "$LOOP"
else
mke2fs -q -t ext4 -m 0 "$LOOP"
tune2fs -U $UUID_SYSTEM "$LOOP"
e2fsck -n "$LOOP"
fi
elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then
mkfs.vfat "$LOOP"
fi
@ -156,7 +185,11 @@ EOF
# install extlinux
echo "image: installing extlinux to part1..."
extlinux --heads=4 --sector=32 -i "$OE_TMP"
if [ "$UEFI" = "yes" ] ; then
syslinux --heads=4 --sector=32 -i "$LOOP"
else
extlinux --heads=4 --sector=32 -i "$OE_TMP"
fi
# copy files
echo "image: copying files to part1..."
@ -166,7 +199,26 @@ EOF
cp $ROOT/$TOOLCHAIN/share/syslinux/vesamenu.c32 "$OE_TMP"
cp $ROOT/$TOOLCHAIN/share/syslinux/libcom32.c32 "$OE_TMP"
cp $ROOT/$TOOLCHAIN/share/syslinux/libutil.c32 "$OE_TMP"
if [ "$UEFI" = "yes" ] ; then
mkdir -p "$OE_TMP/EFI/BOOT"
cp $RELEASE_DIR/splash.png "$OE_TMP/EFI/BOOT"
cp $ROOT/$TOOLCHAIN/share/syslinux/vesamenu.c32 "$OE_TMP/EFI/BOOT"
cp $ROOT/$TOOLCHAIN/share/syslinux/libcom32.c32 "$OE_TMP/EFI/BOOT"
cp $ROOT/$TOOLCHAIN/share/syslinux/libutil.c32 "$OE_TMP/EFI/BOOT"
cp $ROOT/$TOOLCHAIN/share/syslinux/syslinux.efi "$OE_TMP/EFI/BOOT/bootx64.efi"
cp $ROOT/$TOOLCHAIN/share/syslinux/ldlinux.e64 "$OE_TMP/EFI/BOOT"
cat << EOF > "$OE_TMP"/EFI/BOOT/syslinux.cfg
DEFAULT live
LABEL installer
KERNEL /KERNEL
APPEND boot=UUID=$UUID_SYSTEM installer quiet tty vga=current
LABEL live
KERNEL /KERNEL
APPEND boot=UUID=$UUID_SYSTEM disk=UUID=$UUID_STORAGE quiet vga=current
EOF
fi
elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then
# create bootloader configuration
echo "image: creating bootloader configuration..."
@ -204,8 +256,10 @@ fi # bootloader
mount "$LOOP" "$OE_TMP"
# add resize mark
touch "$OE_TMP/.please_resize_me"
sync
if [ "$UEFI" != "yes" ] ; then
touch "$OE_TMP/.please_resize_me"
sync
fi
# unmount part2
echo "image: unmounting part2..."