]> git.plutz.net Git - blast/blobdiff - Makefile
bootloader configuration: boot efi32 and efi64, using grub, and bios using syslinux
[blast] / Makefile
index d2493c5c2c201132aa39c51e85378162bda3034f..03a66ae2432f1a1cc738d660c7ec2a7b4c4ff02c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,14 +1,16 @@
 
 DEFAULT: _target
-.PHONY: clean _target _qemu _partition _format _mount _bootstrap _install _sparse _copy _config _syslinux _umount _partcopy _squash _mbr
+.PHONY: clean .FORCE
+.PHONY: _qemu _bootstrap _install _copy _config _bootloader _squash
+.PHONY: _target _partition _format _mount _sparse _umount _partcopy _mbr
 
 ARCH := amd64
 KEYRING := keys/debian-archive-stretch-stable.gpg
 BOOTSTRAP := http://cdn.debian.net/debian
 
-# Partition Table + Boot Partition + Root Partition = 2048M
-BOOT_MB := 126
-ROOT_MB := 1920
+# Partition Table (2M) + Boot Partition (126M)+ Root Partition + Slack Space (1M) = 2048M
+BOOT_MB := 62
+ROOT_MB := 959
 
 define SOURCES = 
 deb    http://cdn.debian.net/debian stretch main
@@ -31,9 +33,9 @@ _mount: _format
 _bootstrap: _mount
 _install: _bootstrap _mount
 _config: _install _mount
-_syslinux: _mount
-_umount: _mount _config _syslinux
-_mbr: _umount _syslinux
+_bootloader: _mount
+_umount: _mount _config _bootloader
+_mbr: _umount _bootloader
 
 else ifdef image
 VOLUME := ${image}
@@ -51,11 +53,11 @@ _format: _sparse
 _mount: _format
 _copy: _install _mount
 _config: _copy _mount
-_syslinux: _mount
-_umount: _mount _config _syslinux
+_bootloader: _mount
+_umount: _mount _config _bootloader
 _partition:
 _partcopy: _partition _umount
-_mbr: _partcopy _syslinux
+_mbr: _partcopy _bootloader
 
 else ifdef squash
 SQUASH := ${squash}
@@ -182,57 +184,94 @@ ${SQUASH}: ${CFGROOT}
 
 _squash: ${SQUASH}
 
-${VOLUME}:
+${VOLUME}: .FORCE
        ! printf '%s\n' "$${VOLUME}" |grep -q '^/dev/'  # abort if volume should be real device
-       dd bs=1M count=0 seek=$$((2 + ${BOOT_MB} + ${ROOT_MB})) of="$${VOLUME}"
+       dd count=0 of="$${VOLUME}"  # truncate
+       dd bs=1M count=0 seek=$$((3 + ${BOOT_MB} + ${ROOT_MB})) of="$${VOLUME}"
 
-${PBOOT}:
+${PBOOT}: .FORCE
        ! printf '%s\n' "$${PBOOT}" |grep -q '^/dev/'  # abort if volume should be real device
+       dd count=0 of="$${PBOOT}"  # truncate
        dd bs=1M count=0 seek=${BOOT_MB} of="$${PBOOT}"
 
-${PROOT}:
+${PROOT}: .FORCE
        ! printf '%s\n' "$${PROOT}" |grep -q '^/dev/'  # abort if volume should be real device
+       dd count=0 of="$${PROOT}"  # truncate
        dd bs=1M count=0 seek=${ROOT_MB} of="$${PROOT}"
 
 _partition: ${VOLUME}
-       printf 'label: gpt\n\n: start=2MiB, size=%iMiB, type=1, attrs="LegacyBIOSBootable"\n: type=20\n' \
-               ${BOOT_MB} | sfdisk "$${VOLUME}"
+       printf 'label: gpt\n\n: start=2MiB, size=%iMiB, type=1, attrs="LegacyBIOSBootable"\n: size=%iMiB, type=20\n' \
+               ${BOOT_MB} ${ROOT_MB} | sfdisk "$${VOLUME}"
 
 _sparse: ${PBOOT} ${PROOT}
 
 _format: ${PBOOT} ${PROOT}
        -umount "$${CFGROOT}/boot" "$${CFGROOT}"
-       mkfs.fat -F 32 -n boot "$${PBOOT}"
+       mkfs.fat -F 32 -n BOOT "$${PBOOT}"
        mkfs.ext4 -F -L FSROOT "$${PROOT}"
 
 .PHONY: _syslinux_efi32 _syslinux_efi64 _syslinux_bios
+.PHONY: _grub_efi32 _grub_efi64
+
 _syslinux_efi32: ${CFGROOT}
        mkdir -p "$${CFGROOT}/boot/EFI/BOOT"
        cp /usr/lib/SYSLINUX.EFI/efi32/syslinux.efi "$${CFGROOT}/boot/EFI/BOOT/BOOTIA32.EFI"
        mkdir -p "$${CFGROOT}/boot/efi32"
        cp $(addprefix /usr/lib/syslinux/modules/efi32/, ldlinux.e32 menu.c32 libutil.c32) "$${CFGROOT}"/boot/efi32/
+       cp /usr/lib/syslinux/modules/efi32/ldlinux.e32 "$${CFGROOT}/boot/EFI/BOOT/"  # workaround
+       printf 'PATH /efi32\nINCLUDE /bootmenu.cfg\nMENU TITLE Syslinux EFI-32\n' >"$${CFGROOT}/boot/syslia32.cfg"
 
 _syslinux_efi64: ${CFGROOT}
        mkdir -p "$${CFGROOT}/boot/EFI/BOOT"
        cp /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi "$${CFGROOT}/boot/EFI/BOOT/BOOTX64.EFI"
        mkdir -p "$${CFGROOT}/boot/efi64"
-       cp $(addprefix /usr/lib/syslinux/modules/efi64/, ldlinux.e64 menu.c32 libutil.c32) "$${CFGROOT}"/boot/efi32/
+       cp $(addprefix /usr/lib/syslinux/modules/efi64/, ldlinux.e64 menu.c32 libutil.c32) "$${CFGROOT}"/boot/efi64/
+       cp /usr/lib/syslinux/modules/efi64/ldlinux.e64 "$${CFGROOT}/boot/EFI/BOOT/"  # workaround
+       printf 'PATH /efi64\nINCLUDE /bootmenu.cfg\nMENU TITLE Syslinux EFI-64\n' >"$${CFGROOT}/boot/syslx64.cfg"
 
 _syslinux_bios: ${CFGROOT}
        mkdir -p "$${CFGROOT}/boot/bios"
        cp $(addprefix /usr/lib/syslinux/modules/bios/,  menu.c32 libutil.c32) "$${CFGROOT}"/boot/bios/
+       printf 'PATH bios\nINCLUDE bootmenu.cfg\nMENU TITLE Syslinux BIOS\n' >"$${CFGROOT}/boot/syslinux.cfg"
 
-_syslinux: ${CFGROOT} _syslinux_efi32 _syslinux_efi64 _syslinux_bios
-       cp -L "$${CFGROOT}/vmlinuz" "$${CFGROOT}/initrd.img" "$${CFGROOT}/boot/"
-       cp -ru cfg_syslinux/. "$${CFGROOT}/"
+_grub_efi32: ${CFGROOT}
+       mkdir -p "$${CFGROOT}/boot/EFI/BOOT"
+       grub-mkimage -p / -O i386-efi   fat part_gpt normal linux all_video >"$${CFGROOT}/boot/EFI/BOOT/BOOTIA32.EFI"
 
-_mbr: ${VOLUME}
+_grub_efi64: ${CFGROOT}
+       mkdir -p "$${CFGROOT}/boot/EFI/BOOT"
+       grub-mkimage -p / -O x86_64-efi fat part_gpt normal linux all_video >"$${CFGROOT}/boot/EFI/BOOT/BOOTX64.EFI"
+
+_bootloader: ${CFGROOT} _grub_efi32 _grub_efi64 _syslinux_bios #_syslinux_efi32 _syslinux_efi64
+       # cp -L "$${CFGROOT}/vmlinuz" "$${CFGROOT}/initrd.img" "$${CFGROOT}/boot/"
+       # cp -r cfg_syslinux/. "$${CFGROOT}/"
+       printf 'UI menu.c32\nDEFAULT stretch\nTIMEOUT 30\n' >"$${CFGROOT}/boot/bootmenu.cfg"
+       printf 'set timeout=3\ndefault=stretch\n\n' >"$${CFGROOT}/boot/grub.cfg"
+       k="$$(printf ' %s' "$${CFGROOT}/boot/"vmlinuz-*)"; k="$${k##*/}"; \
+       i="$$(printf ' %s' "$${CFGROOT}/boot/"initrd.img-*)";  i="$${i##*/}"; \
+       printf '\nLABEL stretch\n MENU LABEL Debian Stretch\n KERNEL /%s\n INITRD /%s\n APPEND root=LABEL=FSROOT\n' \
+               "$$k" "$$i" >>"$${CFGROOT}/boot/bootmenu.cfg"; \
+       printf '\nLABEL rescue\n MENU LABEL Rescue\n KERNEL /%s\n INITRD /%s\n APPEND root=LABEL=FSROOT init=/bin/sh\n' \
+               "$$k" "$$i" >>"$${CFGROOT}/boot/bootmenu.cfg"; \
+       printf "menuentry 'Debian Stretch' --id 'stretch' {\n linux '/%s' root=LABEL=FSROOT\n initrd '/%s'\n}\n" \
+               "$$k" "$$i" >>"$${CFGROOT}/boot/grub.cfg"; \
+       printf "menuentry 'Rescue' --id 'rescue' {\n linux '/%s' root=LABEL=FSROOT init=/bin/sh\n initrd '/%s'\n}\n" \
+               "$$k" "$$i" >>"$${CFGROOT}/boot/grub.cfg"
+
+.PHONY: _syslinux_mbr _grub_mbr
+
+_syslinux_mbr: ${VOLUME}
        syslinux -t 2097152 -i "$${VOLUME}"
        dd conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of="$${VOLUME}"
 
+_grub_mbr: ${VOLUME}
+       # grub-mkimage -p / -O i386-pc fat part_gpt normal linux all_video |dd conv=notrunc of="$${VOLUME}"
+
+_mbr: _syslinux_mbr # _grub_mbr
+
 _partcopy: ${VOLUME} ${PROOT} ${PBOOT}
-       dd bs=1M seek=2 if="$${PBOOT}" of="$${VOLUME}"
-       dd bs=1M seek=$$((2 + ${BOOT_MB})) if="$${PROOT}" of="$${VOLUME}"
+       dd conv=notrunc,sparse bs=1M seek=2 if="$${PBOOT}" of="$${VOLUME}"
+       dd conv=notrunc,sparse bs=1M seek=$$((2 + ${BOOT_MB})) if="$${PROOT}" of="$${VOLUME}"
 
 _mount: ${PBOOT} ${PROOT} ${CFG_ROOT}
        mount -t ext4 "$${PROOT}" "$${CFGROOT}"
@@ -254,11 +293,12 @@ clean:
        -umount hdd_mount/boot
        -umount hdd_mount
        -rmdir hdd_mount
-       if [ -d "sys_root/" ] && ! mount |grep -qwFe "sys_root/"; then \
-               btrfs sub del "sys_root/" || echo rm -r "sys_root/"; \
-       fi
-       if [ -d "cfg_root/" ] && ! mount |grep -qwFe "cfg_root/"; then \
-               btrfs sub del "cfg_root/" || echo rm -r "cfg_root/"; \
-       fi
-       -rm "$${SQUASH}"
+       if [ -d "sys_root/" ]; then btrfs sub del "sys_root/" || echo rm -r "sys_root/"; fi
+       if [ -d "cfg_root/" ]; then btrfs sub del "cfg_root/" || echo rm -r "cfg_root/"; fi
+       if [ -d "rpi_root/" ]; then btrfs sub del "rpi_root/" || echo rm -r "rpi_root/"; fi
+       -rm part_boot.img
+       -rm part_root.img
+       -rm rpi_boot.img
+       -rm rpi_root.img
+       -[ -f "$${SQUASH}" ] && rm "$${SQUASH}"
        -[ -f "$${VOLUME}" ] && rm "$${VOLUME}"