From 3ae88cfe47dfecde5b74c6e4a77a7f40bfa00163 Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Mon, 27 Aug 2018 16:05:46 +0200 Subject: Merge upstream changes Signed-off-by: Florian Pritz --- build.sh | 134 ++++++++++++++++++++++++++++----------------------------------- 1 file changed, 59 insertions(+), 75 deletions(-) (limited to 'build.sh') diff --git a/build.sh b/build.sh index 72b1e3f..f5524e8 100755 --- a/build.sh +++ b/build.sh @@ -4,16 +4,19 @@ set -e -u iso_name=archlinux iso_label="ARCH_$(date +%Y%m)" +iso_publisher="Arch Linux " +iso_application="Arch Linux Live/Rescue CD" iso_version=$(date +%Y.%m.%d) install_dir=arch work_dir=work out_dir=out gpg_key= -arch=$(uname -m) verbose="" script_path=$(readlink -f ${0%/*}) +umask 0022 + _usage () { echo "usage ${0} [options]" @@ -25,6 +28,10 @@ _usage () echo " Default: ${iso_version}" echo " -L Set an iso label (disk label)" echo " Default: ${iso_label}" + echo " -P Set a publisher for the disk" + echo " Default: '${iso_publisher}'" + echo " -A Set an application name for the disk" + echo " Default: '${iso_application}'" echo " -D Set an install_dir (directory inside iso)" echo " Default: ${install_dir}" echo " -w Set the working directory" @@ -38,9 +45,9 @@ _usage () # Helper function to run make_*() only one time per architecture. run_once() { - if [[ ! -e ${work_dir}/build.${1}_${arch} ]]; then + if [[ ! -e ${work_dir}/build.${1} ]]; then $1 - touch ${work_dir}/build.${1}_${arch} + touch ${work_dir}/build.${1} fi } @@ -53,39 +60,34 @@ make_pacman_conf() { # Base installation, plus needed packages (airootfs) make_basefs() { - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" init - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "haveged intel-ucode memtest86+ mkinitcpio-nfs-utils nbd zsh" install + mkarchiso ${verbose} -w "${work_dir}/x86_64" -C "${work_dir}/pacman.conf" -D "${install_dir}" init + mkarchiso ${verbose} -w "${work_dir}/x86_64" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "haveged intel-ucode memtest86+ mkinitcpio-nfs-utils nbd zsh efitools" install } # Additional packages (airootfs) make_packages() { - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "$(grep -h -v ^# ${script_path}/packages.{both,${arch}})" install -} - -# Needed packages for x86_64 EFI boot -make_packages_efi() { - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "efitools" install + mkarchiso ${verbose} -w "${work_dir}/x86_64" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "$(grep -h -v ^# ${script_path}/packages.x86_64)" install } # Copy mkinitcpio archiso hooks and build initramfs (airootfs) make_setup_mkinitcpio() { local _hook - mkdir -p ${work_dir}/${arch}/airootfs/etc/initcpio/hooks - mkdir -p ${work_dir}/${arch}/airootfs/etc/initcpio/install + mkdir -p ${work_dir}/x86_64/airootfs/etc/initcpio/hooks + mkdir -p ${work_dir}/x86_64/airootfs/etc/initcpio/install for _hook in archiso archiso_shutdown archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_loop_mnt; do - cp /usr/lib/initcpio/hooks/${_hook} ${work_dir}/${arch}/airootfs/etc/initcpio/hooks - cp /usr/lib/initcpio/install/${_hook} ${work_dir}/${arch}/airootfs/etc/initcpio/install + cp /usr/lib/initcpio/hooks/${_hook} ${work_dir}/x86_64/airootfs/etc/initcpio/hooks + cp /usr/lib/initcpio/install/${_hook} ${work_dir}/x86_64/airootfs/etc/initcpio/install done - sed -i "s|/usr/lib/initcpio/|/etc/initcpio/|g" ${work_dir}/${arch}/airootfs/etc/initcpio/install/archiso_shutdown - cp /usr/lib/initcpio/install/archiso_kms ${work_dir}/${arch}/airootfs/etc/initcpio/install - cp /usr/lib/initcpio/archiso_shutdown ${work_dir}/${arch}/airootfs/etc/initcpio - cp ${script_path}/mkinitcpio.conf ${work_dir}/${arch}/airootfs/etc/mkinitcpio-archiso.conf + sed -i "s|/usr/lib/initcpio/|/etc/initcpio/|g" ${work_dir}/x86_64/airootfs/etc/initcpio/install/archiso_shutdown + cp /usr/lib/initcpio/install/archiso_kms ${work_dir}/x86_64/airootfs/etc/initcpio/install + cp /usr/lib/initcpio/archiso_shutdown ${work_dir}/x86_64/airootfs/etc/initcpio + cp ${script_path}/mkinitcpio.conf ${work_dir}/x86_64/airootfs/etc/mkinitcpio-archiso.conf gnupg_fd= if [[ ${gpg_key} ]]; then gpg --export ${gpg_key} >${work_dir}/gpgkey exec 17<>${work_dir}/gpgkey fi - ARCHISO_GNUPG_FD=${gpg_key:+17} setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -r 'mkinitcpio -c /etc/mkinitcpio-archiso.conf -k /boot/vmlinuz-linux -g /boot/archiso.img' run + ARCHISO_GNUPG_FD=${gpg_key:+17} mkarchiso ${verbose} -w "${work_dir}/x86_64" -C "${work_dir}/pacman.conf" -D "${install_dir}" -r 'mkinitcpio -c /etc/mkinitcpio-archiso.conf -k /boot/vmlinuz-linux -g /boot/archiso.img' run if [[ ${gpg_key} ]]; then exec 17<&- fi @@ -93,54 +95,57 @@ make_setup_mkinitcpio() { # Customize installation (airootfs) make_customize_airootfs() { - cp -af ${script_path}/airootfs ${work_dir}/${arch} + cp -af ${script_path}/airootfs ${work_dir}/x86_64 - curl -o ${work_dir}/${arch}/airootfs/etc/pacman.d/mirrorlist 'https://www.archlinux.org/mirrorlist/?country=all&protocol=http&use_mirror_status=on' + cp ${script_path}/pacman.conf ${work_dir}/x86_64/airootfs/etc - lynx -dump -nolist 'https://wiki.archlinux.org/index.php/Installation_Guide?action=render' >> ${work_dir}/${arch}/airootfs/root/install.txt + curl -o ${work_dir}/x86_64/airootfs/etc/pacman.d/mirrorlist 'https://www.archlinux.org/mirrorlist/?country=all&protocol=http&use_mirror_status=on' - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -r '/root/customize_airootfs.sh' run - rm ${work_dir}/${arch}/airootfs/root/customize_airootfs.sh + lynx -dump -nolist 'https://wiki.archlinux.org/index.php/Installation_Guide?action=render' >> ${work_dir}/x86_64/airootfs/root/install.txt + + mkarchiso ${verbose} -w "${work_dir}/x86_64" -C "${work_dir}/pacman.conf" -D "${install_dir}" -r '/root/customize_airootfs.sh' run + rm ${work_dir}/x86_64/airootfs/root/customize_airootfs.sh } # Prepare kernel/initramfs ${install_dir}/boot/ make_boot() { - mkdir -p ${work_dir}/iso/${install_dir}/boot/${arch} - cp ${work_dir}/${arch}/airootfs/boot/archiso.img ${work_dir}/iso/${install_dir}/boot/${arch}/archiso.img - cp ${work_dir}/${arch}/airootfs/boot/vmlinuz-linux ${work_dir}/iso/${install_dir}/boot/${arch}/vmlinuz + mkdir -p ${work_dir}/iso/${install_dir}/boot/x86_64 + cp ${work_dir}/x86_64/airootfs/boot/archiso.img ${work_dir}/iso/${install_dir}/boot/x86_64/archiso.img + cp ${work_dir}/x86_64/airootfs/boot/vmlinuz-linux ${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz } # Add other aditional/extra files to ${install_dir}/boot/ make_boot_extra() { - cp ${work_dir}/${arch}/airootfs/boot/memtest86+/memtest.bin ${work_dir}/iso/${install_dir}/boot/memtest - cp ${work_dir}/${arch}/airootfs/usr/share/licenses/common/GPL2/license.txt ${work_dir}/iso/${install_dir}/boot/memtest.COPYING - cp ${work_dir}/${arch}/airootfs/boot/intel-ucode.img ${work_dir}/iso/${install_dir}/boot/intel_ucode.img - cp ${work_dir}/${arch}/airootfs/usr/share/licenses/intel-ucode/LICENSE ${work_dir}/iso/${install_dir}/boot/intel_ucode.LICENSE + cp ${work_dir}/x86_64/airootfs/boot/memtest86+/memtest.bin ${work_dir}/iso/${install_dir}/boot/memtest + cp ${work_dir}/x86_64/airootfs/usr/share/licenses/common/GPL2/license.txt ${work_dir}/iso/${install_dir}/boot/memtest.COPYING + cp ${work_dir}/x86_64/airootfs/boot/intel-ucode.img ${work_dir}/iso/${install_dir}/boot/intel_ucode.img + cp ${work_dir}/x86_64/airootfs/usr/share/licenses/intel-ucode/LICENSE ${work_dir}/iso/${install_dir}/boot/intel_ucode.LICENSE } # Prepare /${install_dir}/boot/syslinux make_syslinux() { + _uname_r=$(file -b ${work_dir}/x86_64/airootfs/boot/vmlinuz-linux| awk 'f{print;f=0} /version/{f=1}' RS=' ') mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux for _cfg in ${script_path}/syslinux/*.cfg; do sed "s|%ARCHISO_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 ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/*.c32 ${work_dir}/iso/${install_dir}/boot/syslinux - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/lpxelinux.0 ${work_dir}/iso/${install_dir}/boot/syslinux - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/memdisk ${work_dir}/iso/${install_dir}/boot/syslinux + cp ${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/*.c32 ${work_dir}/iso/${install_dir}/boot/syslinux + cp ${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/lpxelinux.0 ${work_dir}/iso/${install_dir}/boot/syslinux + cp ${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/memdisk ${work_dir}/iso/${install_dir}/boot/syslinux mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux/hdt - gzip -c -9 ${work_dir}/${arch}/airootfs/usr/share/hwdata/pci.ids > ${work_dir}/iso/${install_dir}/boot/syslinux/hdt/pciids.gz - gzip -c -9 ${work_dir}/${arch}/airootfs/usr/lib/modules/*-ARCH/modules.alias > ${work_dir}/iso/${install_dir}/boot/syslinux/hdt/modalias.gz + gzip -c -9 ${work_dir}/x86_64/airootfs/usr/share/hwdata/pci.ids > ${work_dir}/iso/${install_dir}/boot/syslinux/hdt/pciids.gz + gzip -c -9 ${work_dir}/x86_64/airootfs/usr/lib/modules/${_uname_r}/modules.alias > ${work_dir}/iso/${install_dir}/boot/syslinux/hdt/modalias.gz } # 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 - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/isolinux.bin ${work_dir}/iso/isolinux/ - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/isohdpfx.bin ${work_dir}/iso/isolinux/ - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/ldlinux.c32 ${work_dir}/iso/isolinux/ + cp ${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/isolinux.bin ${work_dir}/iso/isolinux/ + cp ${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/isohdpfx.bin ${work_dir}/iso/isolinux/ + cp ${work_dir}/x86_64/airootfs/usr/lib/syslinux/bios/ldlinux.c32 ${work_dir}/iso/isolinux/ } # Prepare /EFI @@ -204,16 +209,16 @@ make_efiboot() { # Build airootfs filesystem image make_prepare() { - cp -a -l -f ${work_dir}/${arch}/airootfs ${work_dir} - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" pkglist - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" ${gpg_key:+-g ${gpg_key}} prepare + cp -a -l -f ${work_dir}/x86_64/airootfs ${work_dir} + mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" pkglist + mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" ${gpg_key:+-g ${gpg_key}} prepare rm -rf ${work_dir}/airootfs - # rm -rf ${work_dir}/${arch}/airootfs (if low space, this helps) + # rm -rf ${work_dir}/x86_64/airootfs (if low space, this helps) } # Build ISO make_iso() { - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" -L "${iso_label}" -o "${out_dir}" iso "${iso_name}-${iso_version}-x86_64.iso" + mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" -L "${iso_label}" -P "${iso_publisher}" -A "${iso_application}" -o "${out_dir}" iso "${iso_name}-${iso_version}-x86_64.iso" } if [[ ${EUID} -ne 0 ]]; then @@ -221,16 +226,13 @@ if [[ ${EUID} -ne 0 ]]; then _usage 1 fi -if [[ ${arch} != x86_64 ]]; then - echo "This script needs to be run on x86_64" - _usage 1 -fi - -while getopts 'N:V:L:D:w:o:g:vh' arg; do +while getopts 'N:V:L:P:A:D:w:o:g:vh' arg; do case "${arg}" in N) iso_name="${OPTARG}" ;; V) iso_version="${OPTARG}" ;; L) iso_label="${OPTARG}" ;; + P) iso_publisher="${OPTARG}" ;; + A) iso_application="${OPTARG}" ;; D) install_dir="${OPTARG}" ;; w) work_dir="${OPTARG}" ;; o) out_dir="${OPTARG}" ;; @@ -247,33 +249,15 @@ done mkdir -p ${work_dir} run_once make_pacman_conf - -# Do all stuff for each airootfs -for arch in x86_64; do - run_once make_basefs - run_once make_packages -done - -run_once make_packages_efi - -for arch in x86_64; do - run_once make_setup_mkinitcpio - run_once make_customize_airootfs -done - -for arch in x86_64; do - run_once make_boot -done - -# Do all stuff for "iso" +run_once make_basefs +run_once make_packages +run_once make_setup_mkinitcpio +run_once make_customize_airootfs +run_once make_boot run_once make_boot_extra run_once make_syslinux run_once make_isolinux run_once make_efi run_once make_efiboot - -for arch in x86_64; do - run_once make_prepare -done - +run_once make_prepare run_once make_iso -- cgit v1.2.3-24-g4f1b