From 51e86db625adefad1541438b8226c1c8ab170745 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Mon, 25 Sep 2017 02:58:07 -0400 Subject: allow in-tree build without parabolaiso package --- configs/profile/build.sh | 81 ++++++++++++++-------- .../root-image/root/customize_root_image.sh | 3 +- 2 files changed, 53 insertions(+), 31 deletions(-) (limited to 'configs/profile') diff --git a/configs/profile/build.sh b/configs/profile/build.sh index 89203a8..266f940 100755 --- a/configs/profile/build.sh +++ b/configs/profile/build.sh @@ -12,9 +12,12 @@ data_dir=/usr/share/parabolaiso/data arch=$(uname -m) verbose="" +efi_img_kbytes=40000 pacman_conf=${work_dir}/pacman.conf -script_path=$(readlink -f ${0%/*}) -initcpio_dir=${script_path}/../../parabolaiso/initcpio +releng_dir=$(readlink -f ${0%/*}) +initcpio_dir=${releng_dir}/../../parabolaiso/initcpio +[ "`which mkparabolaiso 2> /dev/null`" ] || export PATH=$PATH:"${releng_dir}/../../parabolaiso" + _usage () { @@ -50,7 +53,7 @@ run_once() { make_pacman_conf() { local _cache_dirs _cache_dirs=($(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g')) - sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${_cache_dirs[@]})|g" ${script_path}/pacman.conf > ${pacman_conf} + sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${_cache_dirs[@]})|g" ${releng_dir}/pacman.conf > ${pacman_conf} } # Base installation, plus needed packages (root-image) @@ -61,7 +64,7 @@ make_basefs() { # Additional packages (root-image) make_packages() { - setarch ${arch} mkparabolaiso ${verbose} -w "${work_dir}/${arch}" -C "${pacman_conf}" -D "${install_dir}" -p "$(grep -h -v ^# ${script_path}/packages.{both,${arch}})" install + setarch ${arch} mkparabolaiso ${verbose} -w "${work_dir}/${arch}" -C "${pacman_conf}" -D "${install_dir}" -p "$(grep -h -v ^# ${releng_dir}/packages.{both,${arch}})" install } # Copy mkinitcpio parabolaiso hooks and build initramfs (root-image) @@ -73,13 +76,13 @@ make_setup_mkinitcpio() { done cp ${initcpio_dir}/install/parabolaiso_kms ${work_dir}/${arch}/root-image/usr/lib/initcpio/install cp ${initcpio_dir}/hooks/parabolaiso_shutdown ${work_dir}/${arch}/root-image/usr/lib/initcpio - cp ${script_path}/mkinitcpio.conf ${work_dir}/${arch}/root-image/etc/mkinitcpio-parabolaiso.conf + cp ${releng_dir}/mkinitcpio.conf ${work_dir}/${arch}/root-image/etc/mkinitcpio-parabolaiso.conf setarch ${arch} mkparabolaiso ${verbose} -w "${work_dir}/${arch}" -C "${pacman_conf}" -D "${install_dir}" -r 'mkinitcpio -c /etc/mkinitcpio-parabolaiso.conf -k /boot/vmlinuz-linux-libre -g /boot/parabolaiso.img' run } # Customize installation (root-image) make_customize_root_image() { - cp -af ${script_path}/root-image ${work_dir}/${arch} + cp -af ${releng_dir}/root-image ${work_dir}/${arch} iso_version="${iso_version}" setarch ${arch} mkparabolaiso ${verbose} -w "${work_dir}/${arch}" -C "${pacman_conf}" -D "${install_dir}" -r '/root/customize_root_image.sh' run rm ${work_dir}/${arch}/root-image/root/customize_root_image.sh @@ -101,11 +104,11 @@ make_boot_extra() { # Prepare /${install_dir}/boot/syslinux make_syslinux() { mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux - for _cfg in ${script_path}/syslinux/*.cfg; do + for _cfg in ${releng_dir}/syslinux/*.cfg; do sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; s|%INSTALL_DIR%|${install_dir}|g" ${_cfg} > ${work_dir}/iso/${install_dir}/boot/syslinux/${_cfg##*/} done - cp ${script_path}/syslinux/splash.png ${work_dir}/iso/${install_dir}/boot/syslinux + cp ${releng_dir}/syslinux/splash.png ${work_dir}/iso/${install_dir}/boot/syslinux cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/*.c32 ${work_dir}/iso/${install_dir}/boot/syslinux cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/lpxelinux.0 ${work_dir}/iso/${install_dir}/boot/syslinux cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/memdisk ${work_dir}/iso/${install_dir}/boot/syslinux @@ -117,7 +120,7 @@ make_syslinux() { # Prepare /isolinux make_isolinux() { mkdir -p ${work_dir}/iso/isolinux - sed "s|%INSTALL_DIR%|${install_dir}|g" ${script_path}/isolinux/isolinux.cfg > ${work_dir}/iso/isolinux/isolinux.cfg + sed "s|%INSTALL_DIR%|${install_dir}|g" ${releng_dir}/isolinux/isolinux.cfg > ${work_dir}/iso/isolinux/isolinux.cfg cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/isolinux.bin ${work_dir}/iso/isolinux/ cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/isohdpfx.bin ${work_dir}/iso/isolinux/ cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/ldlinux.c32 ${work_dir}/iso/isolinux/ @@ -129,13 +132,13 @@ make_efi() { cp ${work_dir}/x86_64/root-image/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/iso/EFI/boot/bootx64.efi mkdir -p ${work_dir}/iso/loader/entries - cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/iso/loader/ - cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/iso/loader/entries/ - cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/iso/loader/entries/ + cp ${releng_dir}/efiboot/loader/loader.conf ${work_dir}/iso/loader/ + cp ${releng_dir}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/iso/loader/entries/ + cp ${releng_dir}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/iso/loader/entries/ sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; s|%INSTALL_DIR%|${install_dir}|g" \ - ${script_path}/efiboot/loader/entries/parabolaiso-x86_64-usb.conf > ${work_dir}/iso/loader/entries/parabolaiso-x86_64.conf + ${releng_dir}/efiboot/loader/entries/parabolaiso-x86_64-usb.conf > ${work_dir}/iso/loader/entries/parabolaiso-x86_64.conf # EFI Shell 2.0 for UEFI 2.3+ ( http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UEFI_Shell ) cp ${data_dir}/Shell.efi ${work_dir}/iso/EFI/shellx64_v2.efi @@ -145,39 +148,55 @@ make_efi() { # Prepare efiboot.img::/EFI for "El Torito" EFI boot mode make_efiboot() { + # cleanup from previous runs + while mount | grep ${work_dir}/efiboot; do umount ${work_dir}/efiboot; sleep 1; done; + rm ${work_dir}/iso/EFI/parabolaiso/efiboot.img 2> /dev/null || true + + # create EFI image mkdir -p ${work_dir}/iso/EFI/parabolaiso - truncate -s 38M ${work_dir}/iso/EFI/parabolaiso/efiboot.img + truncate -s ${efi_img_kbytes}K ${work_dir}/iso/EFI/parabolaiso/efiboot.img mkfs.vfat -n PARABOLAISO_EFI ${work_dir}/iso/EFI/parabolaiso/efiboot.img mkdir -p ${work_dir}/efiboot + mkdir -p ${work_dir}/efiboot-staging mount ${work_dir}/iso/EFI/parabolaiso/efiboot.img ${work_dir}/efiboot - mkdir -p ${work_dir}/efiboot/EFI/parabolaiso - cp ${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz ${work_dir}/efiboot/EFI/parabolaiso/vmlinuz.efi - cp ${work_dir}/iso/${install_dir}/boot/x86_64/parabolaiso.img ${work_dir}/efiboot/EFI/parabolaiso/parabolaiso.img + mkdir -p ${work_dir}/efiboot-staging/EFI/parabolaiso + cp ${work_dir}/iso/${iso_dirname}/boot/x86_64/vmlinuz ${work_dir}/efiboot-staging/EFI/parabolaiso/vmlinuz.efi + cp ${work_dir}/iso/${iso_dirname}/boot/x86_64/parabolaiso.img ${work_dir}/efiboot-staging/EFI/parabolaiso/parabolaiso.img - mkdir -p ${work_dir}/efiboot/EFI/boot - cp ${work_dir}/x86_64/root-image/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/efiboot/EFI/boot/bootx64.efi + mkdir -p ${work_dir}/efiboot-staging/EFI/boot + cp ${work_dir}/x86_64/root-image/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/efiboot-staging/EFI/boot/bootx64.efi - mkdir -p ${work_dir}/efiboot/loader/entries - cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/efiboot/loader/ - cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/efiboot/loader/entries/ - cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/efiboot/loader/entries/ + mkdir -p ${work_dir}/efiboot-staging/loader/entries + cp ${releng_dir}/efiboot/loader/loader.conf ${work_dir}/efiboot-staging/loader/ + cp ${releng_dir}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/efiboot-staging/loader/entries/ + cp ${releng_dir}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/efiboot-staging/loader/entries/ sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; s|%INSTALL_DIR%|${install_dir}|g" \ - ${script_path}/efiboot/loader/entries/parabolaiso-x86_64-cd.conf > ${work_dir}/efiboot/loader/entries/parabolaiso-x86_64.conf - - cp ${work_dir}/iso/EFI/shellx64_v2.efi ${work_dir}/efiboot/EFI/ - cp ${work_dir}/iso/EFI/shellx64_v1.efi ${work_dir}/efiboot/EFI/ - - umount ${work_dir}/efiboot + ${releng_dir}/efiboot/loader/entries/parabolaiso-x86_64-cd.conf > ${work_dir}/efiboot-staging/loader/entries/parabolaiso-x86_64.conf + + cp ${work_dir}/iso/EFI/shellx64_v2.efi ${work_dir}/efiboot-staging/EFI/ + cp ${work_dir}/iso/EFI/shellx64_v1.efi ${work_dir}/efiboot-staging/EFI/ + + efi_kbytes=$(($(du -ks ${work_dir}/efiboot-staging | cut -f 1) + 32)) + if [[ ${efi_kbytes} -lt $((${efi_img_kbytes})) ]]; then + echo "Populating EFI image (${efi_kbytes}KB)" + cp -rT ${work_dir}/efiboot-staging ${work_dir}/efiboot + rm -rf ${work_dir}/efiboot-staging + umount ${work_dir}/efiboot + else + echo "Error: Not enough space on EFI image (${efi_img_kbytes}KB - need ${efi_kbytes}KB)" + umount ${work_dir}/efiboot + exit 1 + fi } # Copy aitab make_aitab() { mkdir -p ${work_dir}/iso/${install_dir} - cp ${script_path}/aitab ${work_dir}/iso/${install_dir}/aitab + cp ${releng_dir}/aitab ${work_dir}/iso/${install_dir}/aitab } # Build all filesystem images specified in aitab (.fs.sfs .sfs) @@ -222,6 +241,8 @@ while getopts 'N:V:L:D:w:o:vh' arg; do esac done + +chown -R 0:0 "${releng_dir}/root-image/" mkdir -p ${work_dir} run_once make_pacman_conf diff --git a/configs/profile/root-image/root/customize_root_image.sh b/configs/profile/root-image/root/customize_root_image.sh index 9c980f1..2c677a6 100755 --- a/configs/profile/root-image/root/customize_root_image.sh +++ b/configs/profile/root-image/root/customize_root_image.sh @@ -7,9 +7,10 @@ locale-gen ln -sf /usr/share/zoneinfo/UTC /etc/localtime -usermod -s /usr/bin/zsh root +usermod -s /usr/bin/zsh root 2> /dev/null cp -aT /etc/skel/ /root/ +[ -n "$(id parabola 2> /dev/null)" ] && userdel -r parabola 2> /dev/null useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh parabola chmod 750 /etc/sudoers.d -- cgit v1.2.2