# 指定されたぶんの半角空白文字を出力します
echo_blank(){ yes " " 2> /dev/null | head -n "${1}" | tr -d "\n"; }
+# cpコマンドのラッパー
+_cp(){ cp -af --no-preserve=ownership,mode -- "${@}"; }
+
_usage () {
cat "${script_path}/docs/build.sh/help.1"
local blank="29" _arch _dirname _type _output _first
for_module load_config "${module_dir}/{}/config.any" "${module_dir}/{}/config.${arch}"
msg_debug "Loaded modules: ${modules[*]}"
! printf "%s\n" "${modules[@]}" | grep -x "share" >/dev/null 2>&1 && msg_warn "The share module is not loaded."
+ ! printf "%s\n" "${modules[@]}" | grep -x "base" >/dev/null 2>&1 && msg_error "The base module is not loaded." 1
# Set kernel
[[ "${customized_kernel}" = false ]] && kernel="${defaultkernel}"
mkdir -p "$(dirname "${logging}")" && touch "${logging}"
msg_warn "Re-run sudo ${0} ${ARGUMENT[*]} --nodepend --nolog --nocolor --rerun 2>&1 | tee ${logging}"
sudo "${0}" "${ARGUMENT[@]}" --nolog --nocolor --nodepend --rerun 2>&1 | tee "${logging}"
- exit "${?}"
+ exit "${PIPESTATUS[0]}"
fi
# Set argument of pkglist.sh
# Set argument of aur.sh and pkgbuild.sh
[[ "${bash_debug}" = true ]] && makepkg_script_args+=("-x")
- [[ "${pacman_debug}" = true ]] && makepkg_script_args+=("-d")
+ [[ "${pacman_debug}" = true ]] && makepkg_script_args+=("-c")
return 0
}
if printf "%s\n" "${repopkgs[@]}" | grep -qx "${_pkg}"; then
_pkglist_install+=("${_pkg}")
else
- msg_info "${_pkg} was not found. Install it with yay from AUR"
+ msg_info "${_pkg} was not found. Install it from AUR"
norepopkg+=("${_pkg}")
fi
done
make_packages_aur() {
readarray -t _pkglist_aur < <("${tools_dir}/pkglist.sh" --aur "${pkglist_args[@]}")
_pkglist_aur=("${_pkglist_aur[@]}" "${norepopkg[@]}")
+ _aursh_args=(
+ "-a" "${aur_helper_command}" -e "${aur_helper_package}"
+ "-d" "$(printf "%s\n" "${aur_helper_depends[@]}" | tr "\n" ",")"
+ "-p" "$(printf "%s\n" "${_pkglist_aur[@]}" | tr "\n" ",")"
+ "${makepkg_script_args[@]}" -- "${aur_helper_args[@]}"
+ )
# Create a list of packages to be finally installed as packages.list directly under the working directory.
echo -e "\n# AUR packages.\n#\n" >> "${build_dir}/packages.list"
printf "%s\n" "${_pkglist_aur[@]}" >> "${build_dir}/packages.list"
- # prepare for yay
- cp -rf --preserve=mode "${script_path}/system/aur.sh" "${airootfs_dir}/root/aur.sh"
- _pacstrap --asdeps --needed "go" # --asdepsをつけているのでaur.shで削除される --neededをつけているので明示的にインストールされている場合削除されない
+ # prepare for aur helper
+ _cp "${script_path}/system/aur.sh" "${airootfs_dir}/root/aur.sh"
+ _pacstrap --asdeps --needed "${aur_helper_depend[@]}"
# Run aur script
- _run_with_pacmanconf _chroot_run "bash" "/root/aur.sh" "${makepkg_script_args[@]}" "${_pkglist_aur[@]}"
+ _run_with_pacmanconf _chroot_run "bash" "/root/aur.sh" "${_aursh_args[@]}"
# Remove script
remove "${airootfs_dir}/root/aur.sh"
mkdir -p "${airootfs_dir}/pkgbuilds/"
for _dir in $(find "${_pkgbuild_dirs[@]}" -type f -name "PKGBUILD" -print0 2>/dev/null | xargs -0 -I{} realpath {} | xargs -I{} dirname {}); do
msg_info "Find $(basename "${_dir}")"
- cp -r "${_dir}" "${airootfs_dir}/pkgbuilds/"
+ _cp "${_dir}" "${airootfs_dir}/pkgbuilds/"
done
# copy buold script
- cp -rf --preserve=mode "${script_path}/system/pkgbuild.sh" "${airootfs_dir}/root/pkgbuild.sh"
+ _cp "${script_path}/system/pkgbuild.sh" "${airootfs_dir}/root/pkgbuild.sh"
# Run build script
_run_with_pacmanconf _chroot_run "bash" "/root/pkgbuild.sh" "${makepkg_script_args[@]}" "/pkgbuilds"
for _airootfs in "${_airootfs_list[@]}";do
if [[ -d "${_airootfs}" ]]; then
msg_debug "Copying airootfs ${_airootfs} ..."
- cp -af "${_airootfs}"/* "${airootfs_dir}"
+ _cp "${_airootfs}"/* "${airootfs_dir}"
fi
done
# Replace /etc/mkinitcpio.conf if Plymouth is enabled.
if [[ "${boot_splash}" = true ]]; then
- cp -f "${script_path}/mkinitcpio/mkinitcpio-plymouth.conf" "${airootfs_dir}/etc/mkinitcpio.conf"
+ install -m 0644 -- "${script_path}/mkinitcpio/mkinitcpio-plymouth.conf" "${airootfs_dir}/etc/mkinitcpio.conf"
else
- cp -f "${script_path}/mkinitcpio/mkinitcpio.conf" "${airootfs_dir}/etc/mkinitcpio.conf"
+ install -m 0644 -- "${script_path}/mkinitcpio/mkinitcpio.conf" "${airootfs_dir}/etc/mkinitcpio.conf"
fi
# customize_airootfs options
mkdir -p "${airootfs_dir}/etc/initcpio/hooks" "${airootfs_dir}/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 "${script_path}/system/initcpio/hooks/${_hook}" "${airootfs_dir}/etc/initcpio/hooks"
- cp "${script_path}/system/initcpio/install/${_hook}" "${airootfs_dir}/etc/initcpio/install"
+ install -m 0644 -- "${script_path}/system/initcpio/hooks/${_hook}" "${airootfs_dir}/etc/initcpio/hooks"
+ install -m 0644 -- "${script_path}/system/initcpio/install/${_hook}" "${airootfs_dir}/etc/initcpio/install"
done
sed -i "s|%COWSPACE%|${cowspace}|g" "${airootfs_dir}/etc/initcpio/hooks/archiso"
sed -i "s|/usr/lib/initcpio/|/etc/initcpio/|g" "${airootfs_dir}/etc/initcpio/install/archiso_shutdown"
- cp "${script_path}/system/initcpio/install/archiso_kms" "${airootfs_dir}/etc/initcpio/install"
- cp "${script_path}/system/initcpio/script/archiso_shutdown" "${airootfs_dir}/etc/initcpio"
- cp "${script_path}/mkinitcpio/mkinitcpio-archiso.conf" "${airootfs_dir}/etc/mkinitcpio-archiso.conf"
+ install -m 0644 -- "${script_path}/system/initcpio/install/archiso_kms" "${airootfs_dir}/etc/initcpio/install"
+ install -m 0755 -- "${script_path}/system/initcpio/script/archiso_shutdown" "${airootfs_dir}/etc/initcpio"
+ install -m 0644 -- "${script_path}/mkinitcpio/mkinitcpio-archiso.conf" "${airootfs_dir}/etc/mkinitcpio-archiso.conf"
[[ "${boot_splash}" = true ]] && cp "${script_path}/mkinitcpio/mkinitcpio-archiso-plymouth.conf" "${airootfs_dir}/etc/mkinitcpio-archiso.conf"
if [[ "${gpg_key}" ]]; then
# Prepare kernel/initramfs ${install_dir}/boot/
make_boot() {
mkdir -p "${isofs_dir}/${install_dir}/boot/${arch}"
- cp "${airootfs_dir}/boot/archiso.img" "${isofs_dir}/${install_dir}/boot/${arch}/archiso.img"
- cp "${airootfs_dir}/boot/${kernel_filename}" "${isofs_dir}/${install_dir}/boot/${arch}/${kernel_filename}"
+ install -m 0644 -- "${airootfs_dir}/boot/archiso.img" "${isofs_dir}/${install_dir}/boot/${arch}/archiso.img"
+ install -m 0644 -- "${airootfs_dir}/boot/${kernel_filename}" "${isofs_dir}/${install_dir}/boot/${arch}/${kernel_filename}"
return 0
}
# 一時ディレクトリに設定ファイルをコピー
mkdir -p "${build_dir}/syslinux/"
- cp -a "${script_path}/syslinux/"* "${build_dir}/syslinux/"
+ _cp "${script_path}/syslinux/"* "${build_dir}/syslinux/"
[[ -d "${channel_dir}/syslinux" ]] && [[ "${customized_syslinux}" = true ]] && cp -af "${channel_dir}/syslinux"* "${build_dir}/syslinux/"
# copy all syslinux config to work dir
done
# Set syslinux wallpaper
- cp "${script_path}/syslinux/splash.png" "${isofs_dir}/syslinux"
- [[ -f "${channel_dir}/splash.png" ]] && cp -f "${channel_dir}/splash.png" "${isofs_dir}/syslinux"
+ install -m 0644 -- "${script_path}/syslinux/splash.png" "${isofs_dir}/syslinux/"
+ [[ -f "${channel_dir}/splash.png" ]] && install -m 0644 -- "${channel_dir}/splash.png" "${isofs_dir}/syslinux"
# remove config
local _remove_config
[[ "${memtest86}" = false ]] && _remove_config memtest86.cfg
# copy files
- cp "${airootfs_dir}/usr/lib/syslinux/bios/"*.c32 "${isofs_dir}/syslinux"
- cp "${airootfs_dir}/usr/lib/syslinux/bios/lpxelinux.0" "${isofs_dir}/syslinux"
- cp "${airootfs_dir}/usr/lib/syslinux/bios/memdisk" "${isofs_dir}/syslinux"
+ install -m 0644 -- "${airootfs_dir}/usr/lib/syslinux/bios/"*.c32 "${isofs_dir}/syslinux/"
+ install -m 0644 -- "${airootfs_dir}/usr/lib/syslinux/bios/lpxelinux.0" "${isofs_dir}/syslinux/"
+ install -m 0644 -- "${airootfs_dir}/usr/lib/syslinux/bios/memdisk" "${isofs_dir}/syslinux/"
if [[ -e "${isofs_dir}/syslinux/hdt.c32" ]]; then
install -d -m 0755 -- "${isofs_dir}/loader/entries"
sed "s|%ARCH%|${arch}|g;" "${script_path}/efiboot/${_use_config_name}/loader.conf" > "${isofs_dir}/loader/loader.conf"
- readarray -t _efi_config_list < <(find "${script_path}/efiboot/${_use_config_name}/" -mindepth 1 -maxdepth 1 -type f -name "archiso-usb*.conf" -printf "%f\n" | grep -v "rescue")
- [[ "${norescue_entry}" = false ]] && readarray -t _efi_config_list < <(find "${script_path}/efiboot/${_use_config_name}/" -mindepth 1 -maxdepth 1 -type f -name "archiso-usb*.conf" -printf "%f\n")
+ readarray -t _efi_config_list < <(find "${script_path}/efiboot/${_use_config_name}/" -mindepth 1 -maxdepth 1 -type f -name "*-archiso-usb*.conf" -printf "%f\n" | grep -v "rescue")
+ [[ "${norescue_entry}" = false ]] && readarray -t _efi_config_list < <(find "${script_path}/efiboot/${_use_config_name}/" -mindepth 1 -maxdepth 1 -type f -name "*-archiso-usb*.conf" -printf "%f\n")
for _efi_config in "${_efi_config_list[@]}"; do
sed "s|%ARCHISO_LABEL%|${iso_label}|g;
mount "${build_dir}/efiboot.img" "${build_dir}/efiboot"
mkdir -p "${build_dir}/efiboot/EFI/alteriso/${arch}" "${build_dir}/efiboot/EFI/boot" "${build_dir}/efiboot/loader/entries"
- cp "${isofs_dir}/${install_dir}/boot/${arch}/${kernel_filename}" "${build_dir}/efiboot/EFI/alteriso/${arch}/${kernel_filename}.efi"
- cp "${isofs_dir}/${install_dir}/boot/${arch}/archiso.img" "${build_dir}/efiboot/EFI/alteriso/${arch}/archiso.img"
+ _cp "${isofs_dir}/${install_dir}/boot/${arch}/${kernel_filename}" "${build_dir}/efiboot/EFI/alteriso/${arch}/${kernel_filename}.efi"
+ _cp "${isofs_dir}/${install_dir}/boot/${arch}/archiso.img" "${build_dir}/efiboot/EFI/alteriso/${arch}/archiso.img"
local _ucode_image _efi_config _use_config_name="nosplash" _bootfile
for _ucode_image in "${airootfs_dir}/boot/"{intel-uc.img,intel-ucode.img,amd-uc.img,amd-ucode.img,early_ucode.cpio,microcode.cpio}; do
- [[ -e "${_ucode_image}" ]] && cp "${_ucode_image}" "${build_dir}/efiboot/EFI/alteriso/"
+ [[ -e "${_ucode_image}" ]] && _cp "${_ucode_image}" "${build_dir}/efiboot/EFI/alteriso/"
done
- cp "${airootfs_dir}/usr/share/efitools/efi/HashTool.efi" "${build_dir}/efiboot/EFI/boot/"
+ _cp "${airootfs_dir}/usr/share/efitools/efi/HashTool.efi" "${build_dir}/efiboot/EFI/boot/"
_bootfile="$(basename "$(ls "${airootfs_dir}/usr/lib/systemd/boot/efi/systemd-boot"*".efi" )")"
- cp "${airootfs_dir}/usr/lib/systemd/boot/efi/${_bootfile}" "${build_dir}/efiboot/EFI/boot/${_bootfile#systemd-}"
+ _cp "${airootfs_dir}/usr/lib/systemd/boot/efi/${_bootfile}" "${build_dir}/efiboot/EFI/boot/${_bootfile#systemd-}"
[[ "${boot_splash}" = true ]] && _use_config_name="splash"
sed "s|%ARCH%|${arch}|g;" "${script_path}/efiboot/${_use_config_name}/loader.conf" > "${build_dir}/efiboot/loader/loader.conf"
find "${isofs_dir}/loader/entries/" -maxdepth 1 -mindepth 1 -name "uefi-shell*" -type f -printf "%p\0" | xargs -0 -I{} cp {} "${build_dir}/efiboot/loader/entries/"
- readarray -t _efi_config_list < <(find "${script_path}/efiboot/${_use_config_name}/" -mindepth 1 -maxdepth 1 -type f -name "archiso-cd*.conf" -printf "%f\n" | grep -v "rescue")
- [[ "${norescue_entry}" = false ]] && readarray -t _efi_config_list < <(find "${script_path}/efiboot/${_use_config_name}/" -mindepth 1 -maxdepth 1 -type f -name "archiso-cd*.conf" -printf "%f\n")
+ readarray -t _efi_config_list < <(find "${script_path}/efiboot/${_use_config_name}/" -mindepth 1 -maxdepth 1 -type f -name "*-archiso-cd*.conf" -printf "%f\n" | grep -v "rescue")
+ [[ "${norescue_entry}" = false ]] && readarray -t _efi_config_list < <(find "${script_path}/efiboot/${_use_config_name}/" -mindepth 1 -maxdepth 1 -type f -name "*-archiso-cd*.conf" -printf "%f\n")
for _efi_config in "${_efi_config_list[@]}"; do
sed "s|%ARCHISO_LABEL%|${iso_label}|g;