mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-07 22:37:12 +02:00
scripts/mkimage: preparation for efi boot in iso images
not enabled yet, but uncommenting the grub_mod should enable building of isolinux+grubefi hybrid images. once uefi boot works and is verified on aarch64, we can enable the vanilla iso image (grsec does not support aarch64).
This commit is contained in:
parent
0a56fcdbd4
commit
e47d253fb4
@ -1,6 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# apk add abuild apk-tools alpine-conf busybox fakeroot xorriso
|
# apk add \
|
||||||
|
# abuild apk-tools alpine-conf busybox fakeroot syslinux xorriso
|
||||||
|
# (for efi:) mtools dosfstools grub-efi
|
||||||
|
|
||||||
# FIXME: clean workdir out of unneeded sections
|
# FIXME: clean workdir out of unneeded sections
|
||||||
# FIXME: --release: cp/mv images to REPODIR/$ARCH/releases/
|
# FIXME: --release: cp/mv images to REPODIR/$ARCH/releases/
|
||||||
@ -55,7 +57,7 @@ usage() {
|
|||||||
|
|
||||||
$0 [--tag RELEASE] [--outdir OUTDIR] [--workdir WORKDIR]
|
$0 [--tag RELEASE] [--outdir OUTDIR] [--workdir WORKDIR]
|
||||||
[--arch ARCH] [--profile PROFILE] [--hostkeys] [--simulate]
|
[--arch ARCH] [--profile PROFILE] [--hostkeys] [--simulate]
|
||||||
[--yaml FILE]
|
[--repository REPO] [--yaml FILE]
|
||||||
$0 --help
|
$0 --help
|
||||||
|
|
||||||
options:
|
options:
|
||||||
@ -64,6 +66,7 @@ options:
|
|||||||
--hostkeys Copy system apk signing keys to created images
|
--hostkeys Copy system apk signing keys to created images
|
||||||
--outdir Specify directory for the created images
|
--outdir Specify directory for the created images
|
||||||
--profile Specify which profiles to build
|
--profile Specify which profiles to build
|
||||||
|
--repository Add package repository to use for the image
|
||||||
--simulate Don't execute commands
|
--simulate Don't execute commands
|
||||||
--tag Build images for tag RELEASE
|
--tag Build images for tag RELEASE
|
||||||
--workdir Specify temporary working directory (cache)
|
--workdir Specify temporary working directory (cache)
|
||||||
|
@ -74,13 +74,14 @@ build_syslinux() {
|
|||||||
local _fn
|
local _fn
|
||||||
mkdir -p "$DESTDIR"/boot/syslinux
|
mkdir -p "$DESTDIR"/boot/syslinux
|
||||||
apk fetch --root "$APKROOT" --stdout syslinux | tar -C "$DESTDIR" -xz usr/share/syslinux
|
apk fetch --root "$APKROOT" --stdout syslinux | tar -C "$DESTDIR" -xz usr/share/syslinux
|
||||||
for _fn in isolinux.bin ldlinux.c32 libutil.c32 libcom32.c32 mboot.c32; do
|
for _fn in isohdpfx.bin isolinux.bin ldlinux.c32 libutil.c32 libcom32.c32 mboot.c32; do
|
||||||
mv "$DESTDIR"/usr/share/syslinux/$_fn "$DESTDIR"/boot/syslinux/$_fn || return 1
|
mv "$DESTDIR"/usr/share/syslinux/$_fn "$DESTDIR"/boot/syslinux/$_fn || return 1
|
||||||
done
|
done
|
||||||
rm -rf "$DESTDIR"/usr
|
rm -rf "$DESTDIR"/usr
|
||||||
}
|
}
|
||||||
|
|
||||||
section_syslinux() {
|
section_syslinux() {
|
||||||
|
[ "$ARCH" = x86 -o "$ARCH" = x86_64 ] || return 0
|
||||||
[ "$output_format" = "iso" ] || return 0
|
[ "$output_format" = "iso" ] || return 0
|
||||||
build_section syslinux $(apk fetch --root "$APKROOT" --simulate syslinux | sort | checksum)
|
build_section syslinux $(apk fetch --root "$APKROOT" --simulate syslinux | sort | checksum)
|
||||||
}
|
}
|
||||||
@ -94,7 +95,7 @@ syslinux_gen_config() {
|
|||||||
local _f
|
local _f
|
||||||
for _f in $kernel_flavors; do
|
for _f in $kernel_flavors; do
|
||||||
if [ -z "${xen_params+set}" ]; then
|
if [ -z "${xen_params+set}" ]; then
|
||||||
cat <<EOF
|
cat <<- EOF
|
||||||
|
|
||||||
LABEL $_f
|
LABEL $_f
|
||||||
MENU LABEL Linux $_f
|
MENU LABEL Linux $_f
|
||||||
@ -104,7 +105,7 @@ LABEL $_f
|
|||||||
APPEND $initfs_cmdline $kernel_cmdline
|
APPEND $initfs_cmdline $kernel_cmdline
|
||||||
EOF
|
EOF
|
||||||
else
|
else
|
||||||
cat <<EOF
|
cat <<- EOF
|
||||||
|
|
||||||
LABEL $_f
|
LABEL $_f
|
||||||
MENU LABEL Xen/Linux $_f
|
MENU LABEL Xen/Linux $_f
|
||||||
@ -115,6 +116,20 @@ EOF
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_gen_config() {
|
||||||
|
local _f
|
||||||
|
echo "set timeout=2"
|
||||||
|
for _f in $kernel_flavors; do
|
||||||
|
cat <<- EOF
|
||||||
|
|
||||||
|
menuentry "Linux $_f" {
|
||||||
|
linux /boot/vmlinuz-$_f $initfs_cmdline $kernel_cmdline
|
||||||
|
initrd /boot/initramfs-$_f
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
build_syslinux_cfg() {
|
build_syslinux_cfg() {
|
||||||
local syslinux_cfg="$1"
|
local syslinux_cfg="$1"
|
||||||
mkdir -p "${DESTDIR}/$(dirname $syslinux_cfg)"
|
mkdir -p "${DESTDIR}/$(dirname $syslinux_cfg)"
|
||||||
@ -123,27 +138,123 @@ build_syslinux_cfg() {
|
|||||||
|
|
||||||
section_syslinux_cfg() {
|
section_syslinux_cfg() {
|
||||||
syslinux_cfg=""
|
syslinux_cfg=""
|
||||||
|
if [ "$ARCH" = x86 -o "$ARCH" = x86_64 ]; then
|
||||||
[ ! "$output_format" = "iso" ] || syslinux_cfg="boot/syslinux/syslinux.cfg"
|
[ ! "$output_format" = "iso" ] || syslinux_cfg="boot/syslinux/syslinux.cfg"
|
||||||
|
fi
|
||||||
[ ! -n "$uboot_install" ] || syslinux_cfg="extlinux/extlinux.conf"
|
[ ! -n "$uboot_install" ] || syslinux_cfg="extlinux/extlinux.conf"
|
||||||
[ -n "$syslinux_cfg" ] || return 0
|
[ -n "$syslinux_cfg" ] || return 0
|
||||||
build_section syslinux_cfg $syslinux_cfg $(syslinux_gen_config | checksum)
|
build_section syslinux_cfg $syslinux_cfg $(syslinux_gen_config | checksum)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
build_grub_cfg() {
|
||||||
|
local grub_cfg="$1"
|
||||||
|
mkdir -p "${DESTDIR}/$(dirname $grub_cfg)"
|
||||||
|
grub_gen_config > "${DESTDIR}"/$grub_cfg
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_gen_earlyconf() {
|
||||||
|
cat <<- EOF
|
||||||
|
search --no-floppy --set=root --label "alpine-$PROFILE $RELEASE $ARCH"
|
||||||
|
set prefix=(\$root)/boot/grub
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
build_grubefi_img() {
|
||||||
|
local _format="$1"
|
||||||
|
local _efi="$2"
|
||||||
|
local _tmpdir="$WORKDIR/efiboot.$3"
|
||||||
|
|
||||||
|
# Prepare grub-efi bootloader
|
||||||
|
mkdir -p "$_tmpdir/efi/boot"
|
||||||
|
grub_gen_earlyconf > "$_tmpdir"/grub_early.cfg
|
||||||
|
grub-mkimage \
|
||||||
|
--config="$_tmpdir"/grub_early.cfg \
|
||||||
|
--prefix="/boot/grub" \
|
||||||
|
--output="$_tmpdir/efi/boot/$_efi" \
|
||||||
|
--format="$_format" \
|
||||||
|
--compression="xz" \
|
||||||
|
$grub_mod
|
||||||
|
|
||||||
|
# Create the EFI image
|
||||||
|
# mkdosfs and mkfs.vfat are busybox applets which failed to create a proper image
|
||||||
|
# use dosfstools mkfs.fat instead
|
||||||
|
mkdir -p ${DESTDIR}/boot/grub/
|
||||||
|
dd if=/dev/zero of=${DESTDIR}/boot/grub/efiboot.img bs=1K count=1440
|
||||||
|
mkfs.fat -F 12 ${DESTDIR}/boot/grub/efiboot.img
|
||||||
|
mcopy -s -i ${DESTDIR}/boot/grub/efiboot.img $_tmpdir/efi ::
|
||||||
|
}
|
||||||
|
|
||||||
|
section_grubefi() {
|
||||||
|
[ -n "$grub_mod" ] || return 0
|
||||||
|
[ "$output_format" = "iso" ] || return 0
|
||||||
|
|
||||||
|
local _format _efi
|
||||||
|
case "$ARCH" in
|
||||||
|
x86_64)
|
||||||
|
_format="x86_64-efi"
|
||||||
|
_efi="bootx64.efi"
|
||||||
|
;;
|
||||||
|
aarch64)
|
||||||
|
_format="arm64-efi"
|
||||||
|
_efi="bootaa64.efi"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
build_section grub_cfg boot/grub/grub.cfg $(grub_gen_config | checksum)
|
||||||
|
build_section grubefi_img $_format $_efi $(grub_gen_earlyconf | checksum)
|
||||||
|
}
|
||||||
|
|
||||||
create_image_iso() {
|
create_image_iso() {
|
||||||
local ISO="${OUTDIR}/${output_filename}"
|
local ISO="${OUTDIR}/${output_filename}"
|
||||||
|
local _isolinux
|
||||||
|
local _efiboot
|
||||||
|
|
||||||
|
if [ -e "${DESTDIR}/boot/syslinux/isolinux.bin" ]; then
|
||||||
|
# isolinux enabled
|
||||||
|
_isolinux="
|
||||||
|
-isohybrid-mbr ${DESTDIR}/boot/syslinux/isohdpfx.bin
|
||||||
|
-eltorito-boot boot/syslinux/isolinux.bin
|
||||||
|
-eltorito-catalog boot/syslinux/boot.cat
|
||||||
|
-no-emul-boot
|
||||||
|
-boot-load-size 4
|
||||||
|
-boot-info-table
|
||||||
|
"
|
||||||
|
fi
|
||||||
|
if [ -e "${DESTDIR}/boot/grub/efiboot.img" ]; then
|
||||||
|
# efi boot enabled
|
||||||
|
if [ -z "$_isolinux" ]; then
|
||||||
|
# efi boot only
|
||||||
|
_efiboot="
|
||||||
|
-efi-boot-part
|
||||||
|
--efi-boot-image
|
||||||
|
-e boot/grub/efiboot.img
|
||||||
|
-no-emul-boot
|
||||||
|
"
|
||||||
|
else
|
||||||
|
# hybrid isolinux+efi boot
|
||||||
|
_efiboot="
|
||||||
|
-eltorito-alt-boot
|
||||||
|
-e boot/grub/efiboot.img
|
||||||
|
-no-emul-boot
|
||||||
|
-isohybrid-gpt-basdat
|
||||||
|
"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
xorrisofs \
|
xorrisofs \
|
||||||
-o ${ISO} -l -J -R \
|
|
||||||
-b boot/syslinux/isolinux.bin \
|
|
||||||
-c boot/syslinux/boot.cat \
|
|
||||||
-V "alpine-$PROFILE $RELEASE $ARCH" \
|
|
||||||
-no-emul-boot \
|
|
||||||
-boot-load-size 4 \
|
|
||||||
-boot-info-table \
|
|
||||||
-quiet \
|
-quiet \
|
||||||
|
-output ${ISO} \
|
||||||
|
-full-iso9660-filenames \
|
||||||
|
-joliet \
|
||||||
|
-rock \
|
||||||
|
-volid "alpine-$PROFILE $RELEASE $ARCH" \
|
||||||
|
$_isolinux \
|
||||||
|
$_efiboot \
|
||||||
-follow-links \
|
-follow-links \
|
||||||
${iso_opts} \
|
${iso_opts} \
|
||||||
${DESTDIR}
|
${DESTDIR}
|
||||||
isohybrid ${ISO}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
create_image_targz() {
|
create_image_targz() {
|
||||||
@ -154,6 +265,7 @@ profile_base() {
|
|||||||
kernel_flavors="grsec"
|
kernel_flavors="grsec"
|
||||||
initfs_cmdline="modules=loop,squashfs,sd-mod,usb-storage quiet"
|
initfs_cmdline="modules=loop,squashfs,sd-mod,usb-storage quiet"
|
||||||
initfs_features="ata base bootchart cdrom squashfs ext2 ext3 ext4 mmc raid scsi usb virtio"
|
initfs_features="ata base bootchart cdrom squashfs ext2 ext3 ext4 mmc raid scsi usb virtio"
|
||||||
|
#grub_mod="disk part_msdos linux normal configfile search search_label efi_uga efi_gop fat iso9660 cat echo ls test true help"
|
||||||
apks="alpine-base alpine-mirrors bkeymaps chrony e2fsprogs network-extras openssl openssh tzdata"
|
apks="alpine-base alpine-mirrors bkeymaps chrony e2fsprogs network-extras openssl openssh tzdata"
|
||||||
apkovl=
|
apkovl=
|
||||||
hostname="alpine"
|
hostname="alpine"
|
||||||
|
@ -9,6 +9,7 @@ profile_standard() {
|
|||||||
|
|
||||||
profile_vanilla() {
|
profile_vanilla() {
|
||||||
profile_standard
|
profile_standard
|
||||||
|
#arch="$arch aarch64"
|
||||||
kernel_flavors="vanilla"
|
kernel_flavors="vanilla"
|
||||||
kernel_addons=
|
kernel_addons=
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user