diff options
Diffstat (limited to 'configs/releng/build.sh')
-rwxr-xr-x | configs/releng/build.sh | 215 |
1 files changed, 69 insertions, 146 deletions
diff --git a/configs/releng/build.sh b/configs/releng/build.sh index 8080d25..65dfbb2 100755 --- a/configs/releng/build.sh +++ b/configs/releng/build.sh @@ -14,15 +14,23 @@ cmd_args="" script_path=$(readlink -f ${0%/*}) +setup_workdir() { + cache_dirs=($(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g')) + mkdir -p "${work_dir}" + pacman_conf="${work_dir}/pacman.conf" + sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${cache_dirs[@]})|g" \ + "${script_path}/pacman.conf" > "${pacman_conf}" +} + # Base installation (root-image) make_basefs() { - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" init - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" -p "memtest86+ mkinitcpio-nfs-utils nbd curl" install + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" init + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" -p "memtest86+ mkinitcpio-nfs-utils nbd curl" install } # Additional packages (root-image) make_packages() { - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" -p "$(grep -v ^# ${script_path}/packages.${arch})" install + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" -p "$(grep -v ^# ${script_path}/packages.${arch})" install } # Copy mkinitcpio archiso hooks (root-image) @@ -35,7 +43,6 @@ make_setup_mkinitcpio() { done cp /usr/lib/initcpio/install/archiso_kms ${work_dir}/root-image/usr/lib/initcpio/install cp /usr/lib/initcpio/archiso_shutdown ${work_dir}/root-image/usr/lib/initcpio - cp /usr/lib/initcpio/archiso_pxe_nbd ${work_dir}/root-image/usr/lib/initcpio cp ${script_path}/mkinitcpio.conf ${work_dir}/root-image/etc/mkinitcpio-libreiso.conf : > ${work_dir}/build.${FUNCNAME} fi @@ -47,10 +54,10 @@ make_boot() { local _src=${work_dir}/root-image local _dst_boot=${work_dir}/iso/${install_dir}/boot mkdir -p ${_dst_boot}/${arch} - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" \ - -r 'mkinitcpio -c /etc/mkinitcpio-libreiso.conf -k /boot/vmlinuz-linux-libre -g /boot/archiso.img' \ + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" \ + -r 'mkinitcpio -c /etc/mkinitcpio-libreiso.conf -k /boot/vmlinuz-linux-libre -g /boot/libreiso.img' \ run - mv ${_src}/boot/archiso.img ${_dst_boot}/${arch}/libreiso.img + mv ${_src}/boot/libreiso.img ${_dst_boot}/${arch}/libreiso.img mv ${_src}/boot/vmlinuz-linux-libre ${_dst_boot}/${arch}/vmlinuz cp ${_src}/boot/memtest86+/memtest.bin ${_dst_boot}/memtest cp ${_src}/usr/share/licenses/common/GPL2/license.txt ${_dst_boot}/memtest.COPYING @@ -75,10 +82,10 @@ make_boot_efi() { # There are plans to support command line options via a config file (not yet in linux-3.3) #cp ${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz ${work_dir}/efiboot/EFI/boot/bootx64.efi - #cp ${work_dir}/iso/${install_dir}/boot/x86_64/libreiso.img ${work_dir}/efiboot/EFI/boot/linux-libre.img - #echo "archisolabel=${iso_label} initrd=\EFI\boot\linux-libre.img" | iconv -f ascii -t ucs2 > ${work_dir}/iso/EFI/boot/linux-libre.conf + #cp ${work_dir}/iso/${install_dir}/boot/x86_64/libreiso.img ${work_dir}/efiboot/EFI/boot/linux.img + #echo "archisolabel=${iso_label} initrd=\EFI\boot\linux.img" | iconv -f ascii -t ucs2 > ${work_dir}/iso/EFI/boot/linux.conf - # For now, provide an EFI-shell until 'linux-libre.conf' hits mainline. + # For now, provide an EFI-shell until 'linux.conf' hits mainline. mkdir -p ${work_dir}/efiboot/EFI/boot # EFI Shell 2.0 for UEFI 2.3+ ( http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UEFI_Shell ) #wget -O ${work_dir}/efiboot/EFI/boot/bootx64.efi https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi @@ -87,7 +94,13 @@ make_boot_efi() { # Add an EFI shell script for automatic boot if ESC-key is not pressed within 5 seconds timeout. sed "s|%ARCHISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g" ${script_path}/efiboot/EFI/boot/startup.nsh > ${work_dir}/efiboot/EFI/boot/startup.nsh + s|%INSTALL_DIR%|${install_dir}|g" ${script_path}/efiboot/EFI/boot/startup_iso.nsh > ${work_dir}/efiboot/EFI/boot/startup.nsh + + mkdir -p ${work_dir}/iso/EFI/boot + cp ${work_dir}/efiboot/EFI/boot/bootx64.efi ${work_dir}/iso/EFI/boot/bootx64.efi + + sed "s|%ARCHISO_LABEL%|${iso_label}|g; + s|%INSTALL_DIR%|${install_dir}|g" ${script_path}/efiboot/EFI/boot/startup_usb.nsh > ${work_dir}/iso/EFI/boot/startup.nsh umount ${work_dir}/efiboot fi @@ -112,8 +125,8 @@ make_syslinux() { cp ${_src_syslinux}/*.0 ${_dst_syslinux} cp ${_src_syslinux}/memdisk ${_dst_syslinux} mkdir -p ${_dst_syslinux}/hdt - wget -O - http://pciids.sourceforge.net/v2.2/pci.ids | gzip -9 > ${_dst_syslinux}/hdt/pciids.gz - cat ${work_dir}/root-image/lib/modules/*-LIBRE/modules.alias | gzip -9 > ${_dst_syslinux}/hdt/modalias.gz + cat ${work_dir}/root-image/usr/share/hwdata/pci.ids | gzip -9 > ${_dst_syslinux}/hdt/pciids.gz + cat ${work_dir}/root-image/usr/lib/modules/*-LIBRE/modules.alias | gzip -9 > ${_dst_syslinux}/hdt/modalias.gz : > ${work_dir}/build.${FUNCNAME} fi } @@ -133,26 +146,32 @@ make_isolinux() { make_customize_root_image() { if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then cp -af ${script_path}/root-image ${work_dir} + cp -aT ${work_dir}/root-image/etc/skel/ ${work_dir}/root-image/root/ + ln -sf /usr/share/zoneinfo/UTC ${work_dir}/root-image/etc/localtime chmod 750 ${work_dir}/root-image/etc/sudoers.d chmod 440 ${work_dir}/root-image/etc/sudoers.d/g_wheel mkdir -p ${work_dir}/root-image/etc/pacman.d - wget -O ${work_dir}/root-image/etc/pacman.d/mirrorlist https://parabolagnulinux.org/mirrorlist/all/ - sed -i "s/#Server/Server/g" ${work_dir}/root-image/etc/pacman.d/mirrorlist + echo 'Server = http://repo.parabolagnulinux.org/$repo/os/$arch' > ${work_dir}/root-image/etc/pacman.d/mirrorlist + lynx -dump -nolist 'https://wiki.parabolagnulinux.org/Installation_Guide?action=render' >> ${work_dir}/root-image/root/install.txt + patch ${work_dir}/root-image/usr/bin/pacman-key < ${script_path}/pacman-key-4.0.3_unattended-keyring-init.patch sed -i 's/#\(en_US\.UTF-8\)/\1/' ${work_dir}/root-image/etc/locale.gen - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" \ + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" \ -r 'locale-gen' \ run - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" \ - -r 'useradd -m -p "" -g users -G "audio,disk,optical,wheel" libre' \ + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" \ + -r 'usermod -s /bin/zsh root' \ + run + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" \ + -r 'useradd -m -p "" -g users -G "audio,disk,optical,wheel" -s /bin/zsh arch' \ run : > ${work_dir}/build.${FUNCNAME} fi } -# Split out /lib/modules from root-image (makes more "dual-iso" friendly) -make_lib_modules() { +# Split out /usr/lib/modules from root-image (makes more "dual-iso" friendly) +make_usr_lib_modules() { if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then - mv ${work_dir}/root-image/lib/modules ${work_dir}/lib-modules + mv ${work_dir}/root-image/usr/lib/modules ${work_dir}/usr-lib-modules : > ${work_dir}/build.${FUNCNAME} fi } @@ -165,65 +184,29 @@ make_usr_share() { fi } -# Make [core] repository, keep "any" pkgs in a separate fs (makes more "dual-iso" friendly) -# TODO add 'base' packages on [libre] -make_core_repo() { - if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then - local _url _urls _pkg_name _cached_pkg _dst _pkgs - mkdir -p ${work_dir}/repo-core-any - mkdir -p ${work_dir}/repo-core-${arch} - mkdir -p ${work_dir}/pacman.db/var/lib/pacman - pacman -Sy -r ${work_dir}/pacman.db - _pkgs=$(comm -2 -3 <(pacman -Sql -r ${work_dir}/pacman.db core | sort | sed 's@^@core/@') \ - <(grep -v ^# ${script_path}/core.exclude.${arch} | sort | sed 's@^@core/@')) - _urls=$(pacman -Sddp -r ${work_dir}/pacman.db ${_pkgs}) - pacman -Swdd -r ${work_dir}/pacman.db --noprogressbar --noconfirm ${_pkgs} - for _url in ${_urls}; do - _pkg_name=${_url##*/} - _cached_pkg=/var/cache/pacman/pkg/${_pkg_name} - _dst=${work_dir}/repo-core-${arch}/${_pkg_name} - cp ${_cached_pkg} ${_dst} - repo-add -q ${work_dir}/repo-core-${arch}/core.db.tar.gz ${_dst} - if [[ ${_pkg_name} == *any.pkg.tar* ]]; then - mv ${_dst} ${work_dir}/repo-core-any/${_pkg_name} - ln -sf ../any/${_pkg_name} ${_dst} - fi - done - mkdir -p ${work_dir}/iso/${install_dir} - pacman -Sp -r ${work_dir}/pacman.db --print-format "%r/%n-%v" ${_pkgs} | sort > ${work_dir}/iso/${install_dir}/pkglist.repo-core.${arch}.txt - : > ${work_dir}/build.${FUNCNAME} - fi -} - # Process aitab -# args: $1 (core | netinstall) make_aitab() { - local _iso_type=${1} - if [[ ! -e ${work_dir}/build.${FUNCNAME}_${_iso_type} ]]; then - sed "s|%ARCH%|${arch}|g" ${script_path}/aitab.${_iso_type} > ${work_dir}/iso/${install_dir}/aitab - : > ${work_dir}/build.${FUNCNAME}_${_iso_type} + if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then + sed "s|%ARCH%|${arch}|g" ${script_path}/aitab > ${work_dir}/iso/${install_dir}/aitab + : > ${work_dir}/build.${FUNCNAME} fi } # Build all filesystem images specified in aitab (.fs .fs.sfs .sfs) make_prepare() { - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" pkglist - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" prepare + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" pkglist + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" prepare } # Build ISO -# args: $1 (core | netinstall) make_iso() { - local _iso_type=${1} - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" checksum - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" -L "${iso_label}" -o "${out_dir}" iso "${iso_name}-${iso_version}-${_iso_type}-${arch}.iso" + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" checksum + mkarchiso ${verbose} -w "${work_dir}" -C "${pacman_conf}" -D "${install_dir}" -L "${iso_label}" -o "${out_dir}" iso "${iso_name}-${iso_version}-${arch}.iso" } # Build dual-iso images from ${work_dir}/i686/iso and ${work_dir}/x86_64/iso -# args: $1 (core | netinstall) make_dual() { - local _iso_type=${1} - if [[ ! -e ${work_dir}/dual/build.${FUNCNAME}_${_iso_type} ]]; then + if [[ ! -e ${work_dir}/dual/build.${FUNCNAME} ]]; then if [[ ! -d ${work_dir}/i686/iso || ! -d ${work_dir}/x86_64/iso ]]; then echo "ERROR: i686 or x86_64 builds does not exist." _usage 1 @@ -241,29 +224,15 @@ make_dual() { cp -a -l -n ${_src_two} ${work_dir}/dual rm -f ${work_dir}/dual/iso/${install_dir}/aitab rm -f ${work_dir}/dual/iso/${install_dir}/boot/syslinux/*.cfg - if [[ ${_iso_type} == "core" ]]; then - if [[ ! -e ${work_dir}/dual/iso/${install_dir}/any/repo-core-any.sfs || - ! -e ${work_dir}/dual/iso/${install_dir}/i686/repo-core-i686.sfs || - ! -e ${work_dir}/dual/iso/${install_dir}/x86_64/repo-core-x86_64.sfs ]]; then - echo "ERROR: core_iso_single build is not found." - _usage 1 - fi - else - rm -f ${work_dir}/dual/iso/${install_dir}/any/repo-core-any.sfs - rm -f ${work_dir}/dual/iso/${install_dir}/i686/repo-core-i686.sfs - rm -f ${work_dir}/dual/iso/${install_dir}/x86_64/repo-core-x86_64.sfs - rm -f ${work_dir}/dual/iso/${install_dir}/pkglist.repo-core.i686.txt - rm -f ${work_dir}/dual/iso/${install_dir}/pkglist.repo-core.x86_64.txt - fi - paste -d"\n" <(sed "s|%ARCH%|i686|g" ${script_path}/aitab.${_iso_type}) \ - <(sed "s|%ARCH%|x86_64|g" ${script_path}/aitab.${_iso_type}) | uniq > ${work_dir}/dual/iso/${install_dir}/aitab + paste -d"\n" <(sed "s|%ARCH%|i686|g" ${script_path}/aitab) \ + <(sed "s|%ARCH%|x86_64|g" ${script_path}/aitab) | uniq > ${work_dir}/dual/iso/${install_dir}/aitab for _cfg in ${script_path}/syslinux.dual/*.cfg; do sed "s|%ARCHISO_LABEL%|${iso_label}|g; s|%INSTALL_DIR%|${install_dir}|g" ${_cfg} > ${work_dir}/dual/iso/${install_dir}/boot/syslinux/${_cfg##*/} done mkarchiso ${verbose} -w "${work_dir}/dual" -D "${install_dir}" checksum - mkarchiso ${verbose} -w "${work_dir}/dual" -D "${install_dir}" -L "${iso_label}" -o "${out_dir}" iso "${iso_name}-${iso_version}-${_iso_type}-dual.iso" - : > ${work_dir}/dual/build.${FUNCNAME}_${_iso_type} + mkarchiso ${verbose} -w "${work_dir}/dual" -D "${install_dir}" -L "${iso_label}" -o "${out_dir}" iso "${iso_name}-${iso_version}-dual.iso" + : > ${work_dir}/dual/build.${FUNCNAME} fi } @@ -306,11 +275,11 @@ make_common_single() { make_syslinux make_isolinux make_customize_root_image - make_lib_modules + make_usr_lib_modules make_usr_share - make_aitab $1 - make_prepare $1 - make_iso $1 + make_aitab + make_prepare + make_iso } _usage () @@ -334,8 +303,8 @@ _usage () echo " -h This help message" echo echo " Commands:" - echo " build <mode> <type>" - echo " Build selected .iso by <mode> and <type>" + echo " build <mode>" + echo " Build selected .iso by <mode>" echo " purge <mode>" echo " Clean working directory except iso/ directory of build <mode>" echo " clean <mode>" @@ -343,7 +312,6 @@ _usage () echo echo " Command options:" echo " <mode> Valid values 'single', 'dual' or 'all'" - echo " <type> Valid values 'netinstall', 'core' or 'all'" exit ${1} } @@ -404,79 +372,34 @@ if [[ $# -lt 2 ]]; then fi command_mode="${2}" -if [[ ${command_name} == "build" ]]; then - if [[ $# -lt 3 ]]; then - echo "No build type specified" - _usage 1 - fi -command_type="${3}" -fi - if [[ ${command_mode} == "all" && ${arch} != "x86_64" ]]; then echo "This mode <all> needs to be run on x86_64" _usage 1 fi +command_mode="${2}" if [[ ${command_mode} == "single" ]]; then work_dir=${work_dir}/${arch} fi +setup_workdir + case "${command_name}" in build) case "${command_mode}" in single) - case "${command_type}" in - netinstall) - make_common_single netinstall - ;; - core) - make_core_repo - make_common_single core - ;; - all) - make_common_single netinstall - make_core_repo - make_common_single core - ;; - *) - echo "Invalid build type '${command_type}'" - _usage 1 - ;; - esac + make_common_single ;; dual) - case "${command_type}" in - netinstall) - make_dual netinstall - ;; - core) - make_dual core - ;; - all) - make_dual netinstall - make_dual core - ;; - *) - echo "Invalid build type '${command_type}'" - _usage 1 - ;; - esac + make_dual ;; all) - case "${command_type}" in - netinstall|core|all) - $0 ${cmd_args} build single ${command_type} - $0 ${cmd_args} purge single - linux32 $0 ${cmd_args} build single ${command_type} - linux32 $0 ${cmd_args} purge single - $0 ${cmd_args} build dual ${command_type} - $0 ${cmd_args} purge dual - ;; - *) - echo "Invalid build type '${command_type}'" - _usage 1 - ;; - esac + $0 ${cmd_args} build single + $0 ${cmd_args} purge single + linux32 $0 ${cmd_args} build single + linux32 $0 ${cmd_args} purge single + $0 ${cmd_args} build dual + $0 ${cmd_args} purge dual ;; *) echo "Invalid build mode '${command_mode}'" |