diff --git a/build.sh b/build.sh index ca59c69..eb84657 100644 --- a/build.sh +++ b/build.sh @@ -61,14 +61,15 @@ source "${NAME%.*}.mod" MEMDISK_ROOT='boot' MEMDISK_DIRECTORY="${MEMDISK_ROOT}/grub" MEMDISK_FILE="${MEMDISK_DIRECTORY}/grub.cfg" -MEMDISK_PUB="${MEMDISK_DIRECTORY}/grub.pgp" MEMDISK_ARCHIVE="${MEMDISK_ROOT}.tar" UEFI_ROOT="${ROOT}/efi" UEFI_DIRECTORY="${UEFI_ROOT}/boot" +UEFI_CORE="${UEFI_DIRECTORY}/core.efi" UEFI_FILE="${UEFI_DIRECTORY}/bootx64.efi" UEFI_GRUB="${UEFI_DIRECTORY}/grubx64.efi" SIGNED_GRUB='/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed' SIGNED_SHIM='/usr/lib/shim/shimx64.efi.signed' +BIOS_BOOT='/usr/lib/grub/i386-pc/boot.img' BIOS_DIRECTORY="${ROOT}/bios" BIOS_FILE="${BIOS_DIRECTORY}/core.img" BIOS_SETUP="${BIOS_DIRECTORY}/setup.sh" @@ -76,69 +77,127 @@ COMPRESSION='xz' BOOT_ROOT="${ROOT}/boot" GRUB_ROOT="${BOOT_ROOT}/grub" GRUB_CFG="${GRUB_ROOT}/grub.cfg" +GRUB_CFG_SH="${DIRECTORY}/grub.cfg.sh" GRUBENV="${GRUB_ROOT}/grubenv" GRUB_ENV="${ROOT}/grub.env" +GRUB_FONTS="${GRUB_ROOT}/fonts" GRUB_HEAD='# GRUB Environment Block' +GRUB_LOCALES="${GRUB_ROOT}/locale" GRUB_PUB="${GRUB_ROOT}/grub.pgp" GRUB_SHIGNED="${DIRECTORY}/grubx64.efi.signed.sh" +GRUB_THEMES="${GRUB_ROOT}/themes" # wipe ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ +echo -n " +→ ${MEMDISK_ROOT} +→ ${UEFI_ROOT} +→ ${BIOS_DIRECTORY} +" rm --force --recursive \ "${MEMDISK_ROOT}" "${UEFI_ROOT}" "${BIOS_DIRECTORY}" # memdisk ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ +echo -n " +→ ${MEMDISK_DIRECTORY} +" mkdir --parents "${MEMDISK_DIRECTORY}" +echo -n " +→ ${MEMDISK_FILE} +" echo -n "\ # header " > "${MEMDISK_FILE}" +echo -n " +↙ ${GRUB_SHIGNED} +↘ ${MEMDISK_FILE} +" cat "${GRUB_SHIGNED}" >> "${MEMDISK_FILE}" +echo -n " +→ ${MEMDISK_FILE} +" echo -n "\ # footer " >> "${MEMDISK_FILE}" -gpg --export "${PGP_PUB}" > "${MEMDISK_PUB}" -# gpg --detach-sign "${MEMDISK_PUB}" - +echo -n " +↙ ${MEMDISK_ROOT} +↘ ${MEMDISK_ARCHIVE} +" tar --create --auto-compress \ --file "${MEMDISK_ARCHIVE}" "${MEMDISK_ROOT}" # uefi ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ +echo -n " +→ ${UEFI_DIRECTORY} +" mkdir --parents "${UEFI_DIRECTORY}" +echo -n " +↙ ${MEMDISK_ARCHIVE} +↘ ${UEFI_FILE} +" grub-mkimage \ --compress "${COMPRESSION}" \ --memdisk "${MEMDISK_ARCHIVE}" \ --format 'x86_64-efi' \ --output "${UEFI_FILE}" \ ---pubkey "${MEMDISK_PUB}" \ "${MODULES[@]}" -# gpg --detach-sign "${UEFI_FILE}" if [ -f "${SIGNED_SHIM}" ] ; then + echo -n " +↙ ${UEFI_FILE} +↘ ${UEFI_GRUB} +" mv "${UEFI_FILE}" "${UEFI_GRUB}" + echo -n " +↙ ${SIGNED_SHIM} +↘ ${UEFI_FILE} +" cp "${SIGNED_SHIM}" "${UEFI_FILE}" fi if [ -f "${SIGNED_GRUB}" ] ; then + echo -n " +↙ ${UEFI_GRUB} +↘ ${UEFI_CORE} +" + mv "${UEFI_GRUB}" "${UEFI_CORE}" + echo -n " +↙ ${SIGNED_GRUB} +↘ ${UEFI_GRUB} +" cp "${SIGNED_GRUB}" "${UEFI_GRUB}" fi # bios ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ +echo -n " +→ ${BIOS_DIRECTORY} +" mkdir "${BIOS_DIRECTORY}" -cp '/usr/lib/grub/i386-pc/boot.img' "${BIOS_DIRECTORY}" +echo -n " +↙ ${BIOS_BOOT} +↘ ${BIOS_DIRECTORY} +" +cp "${BIOS_BOOT}" "${BIOS_DIRECTORY}" +echo -n " +↙ ${MEMDISK_ARCHIVE} +↘ ${BIOS_FILE} +" grub-mkimage \ --compress "${COMPRESSION}" \ --memdisk "${MEMDISK_ARCHIVE}" \ --format 'i386-pc' \ --output "${BIOS_FILE}" \ ---pubkey "${MEMDISK_PUB}" \ "${MODULES[@]}" "${MODULES_BIOS[@]}" +echo -n " +→ ${BIOS_SETUP} +" echo -n '#! /usr/bin/env bash FILE="$(realpath "${BASH_SOURCE[0]}")" DIRECTORY="$(dirname "${FILE}")" @@ -150,12 +209,19 @@ DIRECTORY="$(dirname "${FILE}")" # grub ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ +echo -n " +→ ${GRUB_ROOT} +" rm --force --recursive "${GRUB_ROOT}" mkdir --parents "${GRUB_ROOT}" # grub / cfg ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -cp "${DIRECTORY}/grub.cfg.sh" "${GRUB_CFG}" +echo -n " +↙ ${GRUB_CFG_SH} +↘ ${GRUB_CFG} +" +cp "${GRUB_CFG_SH}" "${GRUB_CFG}" # grub / env ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ @@ -170,6 +236,11 @@ ${kv}" echo -n "${text}" > "${file}" } +echo -n " +→ ${GRUBENV} +→ ${GRUB_ENV} +" + write_env "${GRUBENV}" "\ live_name=${PROJECT} data_uuid=${DATA} @@ -181,18 +252,24 @@ grub_sleep=999 # grub / fonts ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -mkdir --parents "${GRUB_ROOT}/fonts" +echo -n " +→ ${GRUB_FONTS} +" +mkdir --parents "${GRUB_FONTS}" for font in $(find '/usr/share/grub' -type 'f' -name '*.pf2') ; do - cp "${font}" "${GRUB_ROOT}/fonts" + cp "${font}" "${GRUB_FONTS}" done # grub / themes ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ if cd '/usr/share/grub/themes' ; then - mkdir --parents "${GRUB_ROOT}/themes" + echo -n " +→ ${GRUB_THEMES} +" + mkdir --parents "${GRUB_THEMES}" for theme in * ; do if [ -f "${theme}/theme.txt" ] ; then - cp --recursive "${theme}" "${GRUB_ROOT}/themes" + cp --recursive "${theme}" "${GRUB_THEMES}" fi done fi @@ -200,23 +277,34 @@ cd "${DIRECTORY}" # grub / locales ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -mkdir --parents "${GRUB_ROOT}/locale" +echo -n " +→ ${GRUB_LOCALES} +" +mkdir --parents "${GRUB_LOCALES}" cd '/usr/share/locale' for locale in * ; do file="${locale}/LC_MESSAGES/grub.mo" if [ -f "${file}" ] ; then - cp "${file}" "${GRUB_ROOT}/locale/${locale}.mo" + cp "${file}" "${GRUB_LOCALES}/${locale}.mo" fi done cd "${DIRECTORY}" # grub / pubkey ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ +echo -n " +↙ ${PGP_PUB} +↘ ${GRUB_PUB} +" gpg --export "${PGP_PUB}" > "${GRUB_PUB}" # grub / modules ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ for target in 'x86_64-efi' 'i386-pc' ; do + echo -n " +↙ /usr/lib/grub/${target} +↘ ${GRUB_ROOT}/${target} +" mkdir --parents "${GRUB_ROOT}/${target}" cd "/usr/lib/grub/${target}" for module in *.lst *.mod ; do diff --git a/readme.md b/readme.md index 1dd35d7..8d28d4c 100644 --- a/readme.md +++ b/readme.md @@ -58,23 +58,22 @@ Build an ESP File System including: ## Tasks -* build - * echo section lists & modules +* build.sh * args/pgp * args/esp & lsgm/cp - * keyboard layouts * mimic grubx64.efi.signed * efi * bios * grub.cfg - * check squashfs - * option -* end grubenv with \n + * check squashfs option +* python ![Graph](todo.svg) ### Later * arm +* keyboard layouts +* custom fonts * live-media * -mount-opts