2014-12-08 23:50:56 +01:00
|
|
|
#!/bin/bash
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation; version 2 of the License.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
|
2015-06-12 03:25:28 +02:00
|
|
|
import ${LIBDIR}/util-iso-image.sh
|
|
|
|
import ${LIBDIR}/util-iso-boot.sh
|
|
|
|
import ${LIBDIR}/util-iso-calamares.sh
|
2016-02-27 00:39:58 +01:00
|
|
|
|
|
|
|
error_function() {
|
|
|
|
if [[ -p $logpipe ]]; then
|
|
|
|
rm "$logpipe"
|
|
|
|
fi
|
|
|
|
# first exit all subshells, then print the error
|
|
|
|
if (( ! BASH_SUBSHELL )); then
|
|
|
|
error "A failure occurred in %s()." "$1"
|
|
|
|
plain "Aborting..."
|
|
|
|
fi
|
2016-02-27 12:31:29 +01:00
|
|
|
umount_image
|
2016-02-27 00:39:58 +01:00
|
|
|
exit 2
|
|
|
|
}
|
|
|
|
|
|
|
|
# $1: function
|
|
|
|
run_log(){
|
|
|
|
local func="$1"
|
2016-06-11 20:32:03 +02:00
|
|
|
local tmpfile=${tmp_dir}/$func.ansi.log logfile=${log_dir}/$(gen_iso_fn).$func.log
|
|
|
|
logpipe=$(mktemp -u "${tmp_dir}/$func.pipe.XXXXXXXX")
|
2016-02-27 00:39:58 +01:00
|
|
|
mkfifo "$logpipe"
|
|
|
|
tee "$tmpfile" < "$logpipe" &
|
|
|
|
local teepid=$!
|
|
|
|
$func &> "$logpipe"
|
|
|
|
wait $teepid
|
|
|
|
rm "$logpipe"
|
|
|
|
cat $tmpfile | perl -pe 's/\e\[?.*?[\@-~]//g' > $logfile
|
|
|
|
rm "$tmpfile"
|
|
|
|
}
|
|
|
|
|
|
|
|
run_safe() {
|
|
|
|
local restoretrap func="$1"
|
|
|
|
set -e
|
|
|
|
set -E
|
|
|
|
restoretrap=$(trap -p ERR)
|
2016-06-13 21:48:41 +02:00
|
|
|
trap 'error_function $func' ERR
|
2016-02-27 00:39:58 +01:00
|
|
|
|
2016-05-22 20:02:28 +02:00
|
|
|
if ${verbose};then
|
2016-02-27 00:39:58 +01:00
|
|
|
run_log "$func"
|
|
|
|
else
|
|
|
|
"$func"
|
|
|
|
fi
|
|
|
|
|
|
|
|
eval $restoretrap
|
|
|
|
set +E
|
|
|
|
set +e
|
|
|
|
}
|
|
|
|
|
2016-06-13 21:48:41 +02:00
|
|
|
trap_exit() {
|
|
|
|
local sig=$1; shift
|
|
|
|
error "$@"
|
|
|
|
umount_image
|
|
|
|
trap -- "$sig"
|
|
|
|
kill "-$sig" "$$"
|
|
|
|
}
|
|
|
|
|
2015-05-11 12:47:02 +02:00
|
|
|
# $1: image path
|
2016-02-26 16:09:34 +01:00
|
|
|
make_sqfs() {
|
2015-05-11 18:31:41 +02:00
|
|
|
if [[ ! -d "$1" ]]; then
|
2015-05-11 12:47:02 +02:00
|
|
|
error "$1 is not a directory"
|
|
|
|
return 1
|
|
|
|
fi
|
2016-06-06 20:08:09 +02:00
|
|
|
local timer=$(get_timer) path=${work_dir}/iso/${iso_name}/${target_arch}
|
2016-02-26 16:18:40 +01:00
|
|
|
local name=${1##*/}
|
|
|
|
local sq_img="${path}/$name.sqfs"
|
2015-05-11 21:29:46 +02:00
|
|
|
mkdir -p ${path}
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Generating SquashFS image for %s" "${1}"
|
2015-05-11 18:31:41 +02:00
|
|
|
if [[ -f "${sq_img}" ]]; then
|
|
|
|
local has_changed_dir=$(find ${1} -newer ${sq_img})
|
2016-06-11 20:32:03 +02:00
|
|
|
msg2 "Possible changes for %s ..." "${1}" >> ${tmp_dir}/buildiso.debug
|
|
|
|
msg2 "%s" "${has_changed_dir}" >> ${tmp_dir}/buildiso.debug
|
2015-05-11 18:31:41 +02:00
|
|
|
if [[ -n "${has_changed_dir}" ]]; then
|
2016-02-14 23:13:39 +01:00
|
|
|
msg2 "SquashFS image %s is not up to date, rebuilding..." "${sq_img}"
|
2015-05-11 18:31:41 +02:00
|
|
|
rm "${sq_img}"
|
2015-05-11 12:47:02 +02:00
|
|
|
else
|
2016-02-14 23:13:39 +01:00
|
|
|
msg2 "SquashFS image %s is up to date, skipping." "${sq_img}"
|
2015-05-11 12:47:02 +02:00
|
|
|
return
|
|
|
|
fi
|
|
|
|
fi
|
2016-02-26 16:09:34 +01:00
|
|
|
|
|
|
|
msg2 "Creating SquashFS image. This may take some time..."
|
|
|
|
local used_kernel=${kernel:5:1} mksqfs_args=(${1} ${sq_img} -noappend)
|
2015-05-11 20:59:05 +02:00
|
|
|
local highcomp="-b 256K -Xbcj x86"
|
2015-05-11 18:31:41 +02:00
|
|
|
[[ "${iso_compression}" != "xz" ]] && highcomp=""
|
2016-02-26 16:09:34 +01:00
|
|
|
|
|
|
|
if [[ "$name" == "mhwd-image" && ${used_kernel} < "4" ]]; then
|
|
|
|
mksqfs_args+=(-comp lz4)
|
2016-05-22 20:02:28 +02:00
|
|
|
if ${verbose};then
|
2016-02-26 16:09:34 +01:00
|
|
|
mksquashfs "${mksqfs_args[@]}" >/dev/null
|
|
|
|
else
|
|
|
|
mksquashfs "${mksqfs_args[@]}"
|
|
|
|
fi
|
2015-09-20 06:23:36 +02:00
|
|
|
else
|
2016-02-26 16:09:34 +01:00
|
|
|
mksqfs_args+=(-comp ${iso_compression} ${highcomp})
|
2016-05-22 20:02:28 +02:00
|
|
|
if ${verbose};then
|
2016-02-26 16:09:34 +01:00
|
|
|
mksquashfs "${mksqfs_args[@]}" >/dev/null
|
|
|
|
else
|
|
|
|
mksquashfs "${mksqfs_args[@]}"
|
|
|
|
fi
|
2015-09-20 06:23:36 +02:00
|
|
|
fi
|
2016-02-26 16:09:34 +01:00
|
|
|
|
2016-02-15 16:47:52 +01:00
|
|
|
show_elapsed_time "${FUNCNAME}" "${timer_start}"
|
2015-05-11 12:47:02 +02:00
|
|
|
}
|
|
|
|
|
2016-02-26 16:09:34 +01:00
|
|
|
assemble_iso(){
|
2015-05-11 23:32:40 +02:00
|
|
|
msg "Creating ISO image..."
|
2015-05-12 01:08:23 +02:00
|
|
|
local efi_boot_args=()
|
2015-05-11 12:47:02 +02:00
|
|
|
if [[ -f "${work_dir}/iso/EFI/miso/${iso_name}.img" ]]; then
|
|
|
|
msg2 "Setting efi args. El Torito detected."
|
2015-05-12 01:08:23 +02:00
|
|
|
efi_boot_args=("-eltorito-alt-boot"
|
2015-12-06 05:58:56 +01:00
|
|
|
"-e EFI/miso/${iso_name}.img"
|
|
|
|
"-isohybrid-gpt-basdat"
|
|
|
|
"-no-emul-boot")
|
2015-05-11 12:47:02 +02:00
|
|
|
fi
|
2015-05-11 23:32:40 +02:00
|
|
|
|
2015-05-11 12:47:02 +02:00
|
|
|
xorriso -as mkisofs \
|
2015-12-06 05:58:56 +01:00
|
|
|
-iso-level 3 -rock -joliet \
|
|
|
|
-max-iso9660-filenames -omit-period \
|
|
|
|
-omit-version-number \
|
|
|
|
-relaxed-filenames -allow-lowercase \
|
|
|
|
-volid "${iso_label}" \
|
|
|
|
-appid "${iso_app_id}" \
|
|
|
|
-publisher "${iso_publisher}" \
|
|
|
|
-preparer "Prepared by manjaro-tools/${0##*/}" \
|
|
|
|
-eltorito-boot isolinux/isolinux.bin \
|
|
|
|
-eltorito-catalog isolinux/boot.cat \
|
|
|
|
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
|
|
|
-isohybrid-mbr "${work_dir}/iso/isolinux/isohdpfx.bin" \
|
|
|
|
${efi_boot_args[@]} \
|
|
|
|
-output "${iso_dir}/${iso_file}" \
|
|
|
|
"${work_dir}/iso/"
|
2015-05-11 23:32:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
# Build ISO
|
|
|
|
make_iso() {
|
|
|
|
msg "Start [Build ISO]"
|
2015-05-12 01:08:23 +02:00
|
|
|
touch "${work_dir}/iso/.miso"
|
2015-05-11 23:32:40 +02:00
|
|
|
for d in $(find "${work_dir}" -maxdepth 1 -type d -name '[^.]*'); do
|
|
|
|
if [[ "$d" != "${work_dir}/iso" ]] && \
|
2016-03-03 22:43:24 +01:00
|
|
|
[[ "${d##*/}" != "iso" ]] && \
|
|
|
|
[[ "${d##*/}" != "efiboot" ]] && \
|
|
|
|
[[ "$d" != "${work_dir}" ]]; then
|
2016-02-26 16:09:34 +01:00
|
|
|
make_sqfs "$d"
|
2015-05-11 23:32:40 +02:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
msg "Making bootable image"
|
|
|
|
# Sanity checks
|
2016-02-25 06:40:39 +01:00
|
|
|
[[ ! -d "${work_dir}/iso" ]] && return 1
|
2015-11-30 23:12:27 +01:00
|
|
|
if [[ -f "${iso_dir}/${iso_file}" ]]; then
|
2015-05-11 23:32:40 +02:00
|
|
|
msg2 "Removing existing bootable image..."
|
2015-11-30 23:12:27 +01:00
|
|
|
rm -rf "${iso_dir}/${iso_file}"
|
2015-05-11 23:32:40 +02:00
|
|
|
fi
|
2016-02-26 16:09:34 +01:00
|
|
|
assemble_iso
|
2015-02-13 15:17:00 +01:00
|
|
|
msg "Done [Build ISO]"
|
2014-12-12 05:18:17 +01:00
|
|
|
}
|
|
|
|
|
2015-01-26 21:48:37 +01:00
|
|
|
# $1: file
|
2015-01-29 00:17:15 +01:00
|
|
|
make_checksum(){
|
2015-11-30 23:12:27 +01:00
|
|
|
cd ${iso_dir}
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Creating [%s] sum ..." "${iso_checksum}"
|
2015-03-05 10:54:09 +01:00
|
|
|
local cs=$(${iso_checksum}sum $1)
|
2016-02-14 23:13:39 +01:00
|
|
|
msg2 "%s sum: %s" "${iso_checksum}" "${cs}"
|
2015-03-05 10:54:09 +01:00
|
|
|
echo "${cs}" > $1.${iso_checksum}
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Done [%s] sum" "${iso_checksum}"
|
2015-02-13 15:17:00 +01:00
|
|
|
cd ..
|
2015-01-26 21:48:37 +01:00
|
|
|
}
|
|
|
|
|
2016-02-18 22:02:01 +01:00
|
|
|
gen_iso_fn(){
|
|
|
|
local vars=() name
|
|
|
|
vars+=("${iso_name}")
|
2016-02-25 18:54:25 +01:00
|
|
|
[[ -n ${profile} ]] && vars+=("${profile}")
|
2016-07-14 06:56:29 +02:00
|
|
|
# [[ ${edition} == 'community' ]] && vars+=("${edition}")
|
2016-02-18 22:02:01 +01:00
|
|
|
[[ ${initsys} == 'openrc' ]] && vars+=("${initsys}")
|
|
|
|
vars+=("${dist_release}")
|
2016-07-14 06:56:29 +02:00
|
|
|
vars+=("${target_branch}")
|
2016-06-06 20:08:09 +02:00
|
|
|
vars+=("${target_arch}")
|
2016-02-18 22:02:01 +01:00
|
|
|
for n in ${vars[@]};do
|
|
|
|
name=${name:-}${name:+-}${n}
|
|
|
|
done
|
|
|
|
echo $name
|
|
|
|
}
|
|
|
|
|
2016-05-21 00:05:49 +02:00
|
|
|
reset_pac_conf(){
|
|
|
|
info "Restoring [%s/etc/pacman.conf] ..." "$1"
|
|
|
|
sed -e 's|^.*HoldPkg.*|HoldPkg = pacman glibc manjaro-system|' \
|
|
|
|
-e "s|^.*#CheckSpace|CheckSpace|" \
|
|
|
|
-i "$1/etc/pacman.conf"
|
|
|
|
}
|
|
|
|
|
2014-12-08 23:50:56 +01:00
|
|
|
# Base installation (root-image)
|
2015-01-13 04:48:04 +01:00
|
|
|
make_image_root() {
|
2015-02-13 15:17:00 +01:00
|
|
|
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
|
|
|
|
msg "Prepare [Base installation] (root-image)"
|
|
|
|
local path="${work_dir}/root-image"
|
2015-06-04 22:50:38 +02:00
|
|
|
mkdir -p ${path}
|
2015-06-29 04:08:45 +02:00
|
|
|
|
2016-06-10 19:31:08 +02:00
|
|
|
chroot_create "${path}" "${packages}" || die
|
2015-06-29 04:08:45 +02:00
|
|
|
|
2015-02-13 15:17:00 +01:00
|
|
|
pacman -Qr "${path}" > "${path}/root-image-pkgs.txt"
|
2015-12-18 01:22:00 +01:00
|
|
|
copy_overlay "${profile_dir}/root-overlay" "${path}"
|
2015-12-06 22:38:51 +01:00
|
|
|
configure_root_image "${path}"
|
2016-05-20 19:42:16 +02:00
|
|
|
|
|
|
|
reset_pac_conf "${path}"
|
|
|
|
|
2016-03-04 00:05:44 +01:00
|
|
|
clean_up_image "${path}"
|
2015-02-13 15:17:00 +01:00
|
|
|
: > ${work_dir}/build.${FUNCNAME}
|
|
|
|
msg "Done [Base installation] (root-image)"
|
2014-12-08 23:50:56 +01:00
|
|
|
fi
|
2014-12-10 19:06:52 +01:00
|
|
|
}
|
|
|
|
|
2015-01-29 05:16:15 +01:00
|
|
|
make_image_custom() {
|
2015-02-13 15:17:00 +01:00
|
|
|
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
|
2016-02-25 18:37:29 +01:00
|
|
|
msg "Prepare [Desktop installation] (%s-image)" "${profile}"
|
|
|
|
local path="${work_dir}/${profile}-image"
|
2015-06-04 22:50:38 +02:00
|
|
|
mkdir -p ${path}
|
2015-06-25 00:16:18 +02:00
|
|
|
|
2016-02-25 15:51:25 +01:00
|
|
|
mount_image "${path}"
|
2015-06-25 00:16:18 +02:00
|
|
|
|
2016-02-25 06:40:39 +01:00
|
|
|
chroot_create "${path}" "${packages}"
|
2015-06-29 04:08:45 +02:00
|
|
|
|
2016-02-25 18:37:29 +01:00
|
|
|
pacman -Qr "${path}" > "${path}/${profile}-image-pkgs.txt"
|
|
|
|
cp "${path}/${profile}-image-pkgs.txt" ${iso_dir}/$(gen_iso_fn)-pkgs.txt
|
|
|
|
[[ -e ${profile_dir}/${profile}-overlay ]] && copy_overlay "${profile_dir}/${profile}-overlay" "${path}"
|
2015-02-13 15:17:00 +01:00
|
|
|
configure_custom_image "${path}"
|
2015-06-25 00:16:18 +02:00
|
|
|
|
2016-05-20 19:42:16 +02:00
|
|
|
reset_pac_conf "${path}"
|
|
|
|
|
2016-02-27 12:31:29 +01:00
|
|
|
umount_image
|
2016-03-04 00:05:44 +01:00
|
|
|
clean_up_image "${path}"
|
2015-02-13 15:17:00 +01:00
|
|
|
: > ${work_dir}/build.${FUNCNAME}
|
2016-02-25 18:37:29 +01:00
|
|
|
msg "Done [Desktop installation] (%s-image)" "${profile}"
|
2016-02-25 15:51:25 +01:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
mount_image_select(){
|
|
|
|
if [[ -f "${packages_custom}" ]]; then
|
|
|
|
mount_image_custom "$1"
|
|
|
|
else
|
|
|
|
mount_image "$1"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2014-12-08 23:50:56 +01:00
|
|
|
}
|
|
|
|
|
2015-12-18 18:25:13 +01:00
|
|
|
make_image_live() {
|
2015-02-13 15:17:00 +01:00
|
|
|
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
|
2016-02-25 15:51:25 +01:00
|
|
|
msg "Prepare [Live installation] (live-image)"
|
2015-12-18 18:25:13 +01:00
|
|
|
local path="${work_dir}/live-image"
|
2015-06-04 22:50:38 +02:00
|
|
|
mkdir -p ${path}
|
2015-06-25 00:16:18 +02:00
|
|
|
|
2016-02-25 15:51:25 +01:00
|
|
|
mount_image_select "${path}"
|
2015-06-25 00:16:18 +02:00
|
|
|
|
2016-02-25 06:40:39 +01:00
|
|
|
chroot_create "${path}" "${packages}"
|
2015-06-29 04:08:45 +02:00
|
|
|
|
2015-12-18 18:25:13 +01:00
|
|
|
pacman -Qr "${path}" > "${path}/live-image-pkgs.txt"
|
2015-12-18 01:22:00 +01:00
|
|
|
copy_overlay "${profile_dir}/live-overlay" "${path}"
|
2015-12-18 18:25:13 +01:00
|
|
|
configure_live_image "${path}"
|
2015-06-25 00:16:18 +02:00
|
|
|
|
2016-05-20 19:42:16 +02:00
|
|
|
reset_pac_conf "${path}"
|
|
|
|
|
2016-02-27 12:31:29 +01:00
|
|
|
umount_image
|
2015-06-25 00:16:18 +02:00
|
|
|
|
2015-06-24 11:05:07 +02:00
|
|
|
# Clean up GnuPG keys
|
|
|
|
rm -rf "${path}/etc/pacman.d/gnupg"
|
2016-03-04 00:05:44 +01:00
|
|
|
clean_up_image "${path}"
|
2015-02-13 15:17:00 +01:00
|
|
|
: > ${work_dir}/build.${FUNCNAME}
|
2016-02-25 15:51:25 +01:00
|
|
|
msg "Done [Live installation] (live-image)"
|
2014-12-08 23:50:56 +01:00
|
|
|
fi
|
2014-12-15 23:12:04 +01:00
|
|
|
}
|
|
|
|
|
2015-07-04 10:54:56 +02:00
|
|
|
make_image_mhwd() {
|
2015-02-13 15:17:00 +01:00
|
|
|
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
|
2015-12-06 05:58:56 +01:00
|
|
|
msg "Prepare [drivers repository] (mhwd-image)"
|
2015-07-04 20:30:52 +02:00
|
|
|
local path="${work_dir}/mhwd-image"
|
2016-02-21 01:27:50 +01:00
|
|
|
mkdir -p ${path}/opt/live/pkgs
|
2015-06-25 00:16:18 +02:00
|
|
|
|
2016-02-25 15:51:25 +01:00
|
|
|
mount_image_select "${path}"
|
2015-06-29 04:08:45 +02:00
|
|
|
|
2016-05-20 19:42:16 +02:00
|
|
|
reset_pac_conf "${path}"
|
|
|
|
|
2016-06-12 00:03:48 +02:00
|
|
|
copy_from_cache "${path}" "${packages}"
|
2015-07-04 12:09:39 +02:00
|
|
|
|
2015-06-10 16:45:56 +02:00
|
|
|
if [[ -n "${packages_cleanup}" ]]; then
|
2015-07-04 10:54:56 +02:00
|
|
|
for mhwd_clean in ${packages_cleanup}; do
|
2016-02-21 01:27:50 +01:00
|
|
|
rm ${path}/opt/live/pkgs/${mhwd_clean}
|
2015-02-13 15:17:00 +01:00
|
|
|
done
|
|
|
|
fi
|
2016-02-21 01:27:50 +01:00
|
|
|
cp ${DATADIR}/pacman-gfx.conf ${path}/opt/live
|
2015-12-06 15:58:57 +01:00
|
|
|
make_repo "${path}"
|
2015-07-04 10:54:56 +02:00
|
|
|
configure_mhwd_drivers "${path}"
|
2015-06-25 00:16:18 +02:00
|
|
|
|
2016-02-27 12:31:29 +01:00
|
|
|
umount_image
|
2016-03-04 00:05:44 +01:00
|
|
|
clean_up_image "${path}"
|
2015-02-13 15:17:00 +01:00
|
|
|
: > ${work_dir}/build.${FUNCNAME}
|
2015-12-06 05:58:56 +01:00
|
|
|
msg "Done [drivers repository] (mhwd-image)"
|
2014-12-11 07:36:41 +01:00
|
|
|
fi
|
2014-12-08 23:50:56 +01:00
|
|
|
}
|
|
|
|
|
2015-01-13 04:48:04 +01:00
|
|
|
make_image_boot() {
|
2015-02-13 15:17:00 +01:00
|
|
|
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Prepare [%s/boot]" "${iso_name}"
|
2015-03-05 10:54:09 +01:00
|
|
|
local path_iso="${work_dir}/iso/${iso_name}/boot"
|
2016-06-06 20:08:09 +02:00
|
|
|
mkdir -p ${path_iso}/${target_arch}
|
|
|
|
cp ${work_dir}/root-image/boot/memtest86+/memtest.bin ${path_iso}/${target_arch}/memtest
|
|
|
|
cp ${work_dir}/root-image/boot/vmlinuz* ${path_iso}/${target_arch}/${iso_name}
|
2015-02-13 15:17:00 +01:00
|
|
|
local path="${work_dir}/boot-image"
|
|
|
|
mkdir -p ${path}
|
2015-06-25 09:59:35 +02:00
|
|
|
|
2016-02-25 15:51:25 +01:00
|
|
|
mount_image_select "${path}"
|
2015-06-25 09:59:35 +02:00
|
|
|
|
2016-02-25 06:40:39 +01:00
|
|
|
copy_initcpio "${profile_dir}" "${path}"
|
2015-06-29 04:08:45 +02:00
|
|
|
|
2016-02-25 06:40:39 +01:00
|
|
|
gen_boot_image "${path}"
|
2015-06-29 04:08:45 +02:00
|
|
|
|
2016-06-06 20:08:09 +02:00
|
|
|
mv ${path}/boot/${iso_name}.img ${path_iso}/${target_arch}/${iso_name}.img
|
2015-05-29 00:13:54 +02:00
|
|
|
[[ -f ${path}/boot/intel-ucode.img ]] && copy_ucode "${path}" "${path_iso}"
|
2015-06-25 09:59:35 +02:00
|
|
|
|
2016-02-27 12:31:29 +01:00
|
|
|
umount_image
|
2015-06-25 09:59:35 +02:00
|
|
|
|
2015-02-13 15:17:00 +01:00
|
|
|
rm -R ${path}
|
|
|
|
: > ${work_dir}/build.${FUNCNAME}
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Done [%s/boot]" "${iso_name}"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2014-12-08 23:50:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# Prepare /EFI
|
|
|
|
make_efi() {
|
2015-02-13 15:17:00 +01:00
|
|
|
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Prepare [%s/boot/EFI]" "${iso_name}"
|
2015-02-13 15:17:00 +01:00
|
|
|
local path_iso="${work_dir}/iso"
|
|
|
|
local path_efi="${path_iso}/EFI"
|
|
|
|
mkdir -p ${path_efi}/boot
|
2015-03-04 10:42:15 +01:00
|
|
|
copy_efi_loaders "${work_dir}/root-image" "${path_efi}/boot"
|
2015-02-13 15:17:00 +01:00
|
|
|
mkdir -p ${path_iso}/loader/entries
|
2015-03-04 00:40:44 +01:00
|
|
|
write_loader_conf "${path_iso}/loader"
|
|
|
|
write_efi_shellv1_conf "${path_iso}/loader/entries"
|
|
|
|
write_efi_shellv2_conf "${path_iso}/loader/entries"
|
2016-02-29 00:56:46 +01:00
|
|
|
write_usb_conf "${path_iso}/loader/entries" "${path_iso}"
|
|
|
|
write_usb_nonfree_conf "${path_iso}/loader/entries" "${path_iso}"
|
2015-02-18 04:28:11 +01:00
|
|
|
copy_efi_shells "${path_efi}"
|
2015-02-13 15:17:00 +01:00
|
|
|
: > ${work_dir}/build.${FUNCNAME}
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Done [%s/boot/EFI]" "${iso_name}"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2014-12-08 23:50:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# Prepare kernel.img::/EFI for "El Torito" EFI boot mode
|
|
|
|
make_efiboot() {
|
2015-02-13 15:17:00 +01:00
|
|
|
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Prepare [%s/iso/EFI]" "${iso_name}"
|
2015-02-13 15:17:00 +01:00
|
|
|
local path_iso="${work_dir}/iso"
|
|
|
|
mkdir -p ${path_iso}/EFI/miso
|
2015-05-06 21:05:12 +02:00
|
|
|
truncate -s ${efi_part_size} ${path_iso}/EFI/miso/${iso_name}.img
|
2016-05-14 01:22:57 +02:00
|
|
|
mkfs.fat -n MISO_EFI ${path_iso}/EFI/miso/${iso_name}.img
|
2015-02-13 15:17:00 +01:00
|
|
|
mkdir -p ${work_dir}/efiboot
|
2015-03-05 10:54:09 +01:00
|
|
|
mount ${path_iso}/EFI/miso/${iso_name}.img ${work_dir}/efiboot
|
2015-02-13 15:17:00 +01:00
|
|
|
local path_efi="${work_dir}/efiboot/EFI"
|
|
|
|
mkdir -p ${path_efi}/miso
|
2015-03-05 10:54:09 +01:00
|
|
|
copy_boot_images "${path_iso}/${iso_name}/boot" "${path_efi}/miso"
|
2015-02-13 15:17:00 +01:00
|
|
|
mkdir -p ${path_efi}/boot
|
2015-03-04 10:42:15 +01:00
|
|
|
copy_efi_loaders "${work_dir}/root-image" "${path_efi}/boot"
|
2015-03-04 01:43:47 +01:00
|
|
|
local efi_loader=${work_dir}/efiboot/loader
|
|
|
|
mkdir -p ${efi_loader}/entries
|
|
|
|
write_loader_conf "${efi_loader}"
|
|
|
|
write_efi_shellv1_conf "${efi_loader}/entries"
|
|
|
|
write_efi_shellv2_conf "${efi_loader}/entries"
|
2016-02-29 00:56:46 +01:00
|
|
|
write_dvd_conf "${efi_loader}/entries" "${path_iso}"
|
|
|
|
write_dvd_nonfree_conf "${efi_loader}/entries" "${path_iso}"
|
2015-03-04 10:42:15 +01:00
|
|
|
copy_efi_shells "${path_efi}"
|
2015-02-13 15:17:00 +01:00
|
|
|
umount ${work_dir}/efiboot
|
|
|
|
: > ${work_dir}/build.${FUNCNAME}
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Done [%s/iso/EFI]" "${iso_name}"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2014-12-08 23:50:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# Prepare /isolinux
|
|
|
|
make_isolinux() {
|
2015-02-13 15:17:00 +01:00
|
|
|
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Prepare [%s/iso/isolinux]" "${iso_name}"
|
2015-03-04 13:11:50 +01:00
|
|
|
local path=${work_dir}/iso/isolinux
|
|
|
|
mkdir -p ${path}
|
2015-12-19 15:12:46 +01:00
|
|
|
copy_overlay "${DATADIR}/isolinux" "${path}"
|
2016-02-29 00:56:46 +01:00
|
|
|
write_isolinux_cfg "${path}" "${work_dir}/iso"
|
2015-03-04 21:38:46 +01:00
|
|
|
write_isolinux_msg "${path}"
|
2015-12-06 18:40:05 +01:00
|
|
|
if [[ -e ${profile_dir}/isolinux-overlay ]]; then
|
|
|
|
copy_overlay "${profile_dir}/isolinux-overlay" "${path}"
|
2016-01-10 13:29:28 +01:00
|
|
|
update_isolinux_cfg "${profile_dir}/isolinux-overlay" "${path}"
|
|
|
|
update_isolinux_msg "${profile_dir}/isolinux-overlay" "${path}"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2015-03-04 13:11:50 +01:00
|
|
|
copy_isolinux_bin "${work_dir}/root-image" "${path}"
|
2015-02-13 15:17:00 +01:00
|
|
|
: > ${work_dir}/build.${FUNCNAME}
|
2016-02-14 23:13:39 +01:00
|
|
|
msg "Done [%s/iso/isolinux]" "${iso_name}"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2014-12-08 23:50:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
make_isomounts() {
|
2015-02-13 15:17:00 +01:00
|
|
|
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
|
2016-02-26 16:09:34 +01:00
|
|
|
msg "Prepare [isomounts]"
|
2015-12-18 04:18:28 +01:00
|
|
|
write_isomounts "${work_dir}/iso/${iso_name}"
|
2015-02-13 15:17:00 +01:00
|
|
|
: > ${work_dir}/build.${FUNCNAME}
|
2016-02-26 16:09:34 +01:00
|
|
|
msg "Done [isomounts]"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2014-12-08 23:50:56 +01:00
|
|
|
}
|
|
|
|
|
2015-12-19 00:20:43 +01:00
|
|
|
get_shared_list(){
|
|
|
|
local path
|
|
|
|
case ${edition} in
|
|
|
|
sonar|netrunner) path=${run_dir}/shared/${edition}/Packages-Desktop ;;
|
|
|
|
*) path=${run_dir}/shared/manjaro/Packages-Desktop ;;
|
|
|
|
esac
|
|
|
|
echo $path
|
|
|
|
}
|
|
|
|
|
2015-01-29 00:17:15 +01:00
|
|
|
# $1: file name
|
|
|
|
load_pkgs(){
|
2016-02-15 18:53:50 +01:00
|
|
|
info "Loading Packages: [%s] ..." "${1##*/}"
|
2015-01-29 00:17:15 +01:00
|
|
|
|
2015-06-16 21:32:26 +02:00
|
|
|
local _init _init_rm _multi _nonfree_default _nonfree_multi _arch _arch_rm _nonfree_i686 _nonfree_x86_64
|
2015-01-15 04:38:47 +01:00
|
|
|
|
2015-06-10 02:14:11 +02:00
|
|
|
if [[ ${initsys} == 'openrc' ]];then
|
|
|
|
_init="s|>openrc||g"
|
|
|
|
_init_rm="s|>systemd.*||g"
|
|
|
|
else
|
|
|
|
_init="s|>systemd||g"
|
|
|
|
_init_rm="s|>openrc.*||g"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2016-06-06 20:08:09 +02:00
|
|
|
if [[ "${target_arch}" == "i686" ]]; then
|
2015-06-10 17:05:47 +02:00
|
|
|
_arch="s|>i686||g"
|
|
|
|
_arch_rm="s|>x86_64.*||g"
|
2015-06-10 02:14:11 +02:00
|
|
|
_multi="s|>multilib.*||g"
|
2015-06-13 23:59:50 +02:00
|
|
|
_nonfree_multi="s|>nonfree_multilib.*||g"
|
2015-06-16 21:32:26 +02:00
|
|
|
_nonfree_x86_64="s|>nonfree_x86_64.*||g"
|
2015-06-10 02:14:11 +02:00
|
|
|
if ${nonfree_xorg};then
|
2015-06-13 23:59:50 +02:00
|
|
|
_nonfree_default="s|>nonfree_default||g"
|
2015-06-16 21:32:26 +02:00
|
|
|
_nonfree_i686="s|>nonfree_i686||g"
|
2015-01-15 04:38:47 +01:00
|
|
|
|
2015-06-10 02:14:11 +02:00
|
|
|
else
|
2015-06-13 23:59:50 +02:00
|
|
|
_nonfree_default="s|>nonfree_default.*||g"
|
2015-06-16 21:32:26 +02:00
|
|
|
_nonfree_i686="s|>nonfree_i686.*||g"
|
2015-06-10 02:14:11 +02:00
|
|
|
fi
|
|
|
|
else
|
2015-06-10 17:05:47 +02:00
|
|
|
_arch="s|>x86_64||g"
|
|
|
|
_arch_rm="s|>i686.*||g"
|
2015-06-16 21:32:26 +02:00
|
|
|
_nonfree_i686="s|>nonfree_i686.*||g"
|
2015-06-10 02:14:11 +02:00
|
|
|
if ${multilib};then
|
|
|
|
_multi="s|>multilib||g"
|
|
|
|
if ${nonfree_xorg};then
|
2015-06-13 23:59:50 +02:00
|
|
|
_nonfree_default="s|>nonfree_default||g"
|
2015-06-16 21:32:26 +02:00
|
|
|
_nonfree_x86_64="s|>nonfree_x86_64||g"
|
2015-06-10 02:14:11 +02:00
|
|
|
_nonfree_multi="s|>nonfree_multilib||g"
|
|
|
|
else
|
2015-06-13 23:59:50 +02:00
|
|
|
_nonfree_default="s|>nonfree_default.*||g"
|
2015-06-10 02:14:11 +02:00
|
|
|
_nonfree_multi="s|>nonfree_multilib.*||g"
|
2015-06-16 21:32:26 +02:00
|
|
|
_nonfree_x86_64="s|>nonfree_x86_64.*||g"
|
2015-06-10 02:14:11 +02:00
|
|
|
fi
|
|
|
|
else
|
|
|
|
_multi="s|>multilib.*||g"
|
|
|
|
if ${nonfree_xorg};then
|
2015-06-13 23:59:50 +02:00
|
|
|
_nonfree_default="s|>nonfree_default||g"
|
2015-06-16 21:32:26 +02:00
|
|
|
_nonfree_x86_64="s|>nonfree_x86_64||g"
|
2015-06-10 02:14:11 +02:00
|
|
|
_nonfree_multi="s|>nonfree_multilib.*||g"
|
|
|
|
else
|
2015-06-13 23:59:50 +02:00
|
|
|
_nonfree_default="s|>nonfree_default.*||g"
|
2015-06-16 21:32:26 +02:00
|
|
|
_nonfree_x86_64="s|>nonfree_x86_64.*||g"
|
2015-06-10 02:14:11 +02:00
|
|
|
_nonfree_multi="s|>nonfree_multilib.*||g"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
2015-06-10 11:44:45 +02:00
|
|
|
local _blacklist="s|>blacklist.*||g" \
|
|
|
|
_kernel="s|KERNEL|$kernel|g" \
|
2016-02-06 10:19:00 +01:00
|
|
|
_used_kernel=${kernel:5:2} \
|
2015-06-10 11:44:45 +02:00
|
|
|
_space="s| ||g" \
|
|
|
|
_clean=':a;N;$!ba;s/\n/ /g' \
|
|
|
|
_com_rm="s|#.*||g" \
|
|
|
|
_purge="s|>cleanup.*||g" \
|
|
|
|
_purge_rm="s|>cleanup||g"
|
|
|
|
|
2016-06-12 00:03:48 +02:00
|
|
|
local list="$1"
|
2015-06-26 21:19:52 +02:00
|
|
|
|
2016-06-12 00:03:48 +02:00
|
|
|
if [[ "$list" == "${packages_custom}" ]];then
|
|
|
|
sort -u $(get_shared_list) ${packages_custom} > ${tmp_dir}/packages-desktop.list
|
|
|
|
list=${tmp_dir}/packages-desktop.list
|
2015-06-26 21:19:52 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
packages=$(sed "$_com_rm" "$list" \
|
2015-06-17 20:05:11 +02:00
|
|
|
| sed "$_space" \
|
|
|
|
| sed "$_blacklist" \
|
|
|
|
| sed "$_purge" \
|
|
|
|
| sed "$_init" \
|
|
|
|
| sed "$_init_rm" \
|
|
|
|
| sed "$_arch" \
|
|
|
|
| sed "$_arch_rm" \
|
|
|
|
| sed "$_nonfree_default" \
|
|
|
|
| sed "$_multi" \
|
|
|
|
| sed "$_nonfree_i686" \
|
|
|
|
| sed "$_nonfree_x86_64" \
|
|
|
|
| sed "$_nonfree_multi" \
|
|
|
|
| sed "$_kernel" \
|
|
|
|
| sed "$_clean")
|
2015-05-03 23:32:21 +02:00
|
|
|
|
2016-02-23 18:23:28 +01:00
|
|
|
if [[ $1 == "${packages_mhwd}" ]]; then
|
2016-02-26 02:40:57 +01:00
|
|
|
|
|
|
|
local _used_kernel=${kernel:5:2}
|
|
|
|
[[ ${_used_kernel} < "42" ]] && local _amd="s|xf86-video-amdgpu||g"
|
|
|
|
|
2015-06-17 21:39:39 +02:00
|
|
|
packages_cleanup=$(sed "$_com_rm" "$1" \
|
|
|
|
| grep cleanup \
|
|
|
|
| sed "$_purge_rm" \
|
|
|
|
| sed "$_kernel" \
|
2016-02-26 02:40:57 +01:00
|
|
|
| sed "$_clean" \
|
|
|
|
| sed "$_amd")
|
2015-06-17 21:39:39 +02:00
|
|
|
fi
|
2015-05-04 21:32:04 +02:00
|
|
|
}
|
|
|
|
|
2016-02-25 18:07:13 +01:00
|
|
|
check_profile(){
|
|
|
|
local keyfiles=("${profile_dir}/mkinitcpio.conf"
|
|
|
|
"${profile_dir}/Packages-Root"
|
|
|
|
"${profile_dir}/Packages-Live")
|
|
|
|
|
|
|
|
local keydirs=("${profile_dir}/root-overlay"
|
|
|
|
"${profile_dir}/live-overlay")
|
|
|
|
|
2015-12-04 22:03:04 +01:00
|
|
|
local has_keyfiles=false has_keydirs=false
|
|
|
|
for f in ${keyfiles[@]}; do
|
|
|
|
if [[ -f $f ]];then
|
|
|
|
has_keyfiles=true
|
|
|
|
else
|
|
|
|
has_keyfiles=false
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
for d in ${keydirs[@]}; do
|
|
|
|
if [[ -d $d ]];then
|
|
|
|
has_keydirs=true
|
|
|
|
else
|
|
|
|
has_keydirs=false
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
if ! ${has_keyfiles} && ! ${has_keydirs};then
|
2016-02-25 18:07:13 +01:00
|
|
|
die "Profile [%s] sanity check failed!" "${profile_dir}"
|
2015-12-04 22:03:04 +01:00
|
|
|
fi
|
2015-12-18 04:18:28 +01:00
|
|
|
|
2016-02-25 18:07:13 +01:00
|
|
|
local files=$(ls ${profile_dir}/Packages*)
|
2015-12-18 04:18:28 +01:00
|
|
|
for f in ${files[@]};do
|
|
|
|
case $f in
|
2016-02-25 18:07:13 +01:00
|
|
|
${profile_dir}/Packages-Root|${profile_dir}/Packages-Live|${profile_dir}/Packages-Mhwd) continue ;;
|
2015-12-18 04:18:28 +01:00
|
|
|
*) packages_custom="$f" ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2016-02-25 18:07:13 +01:00
|
|
|
[[ -f "${profile_dir}/Packages-Mhwd" ]] && packages_mhwd=${profile_dir}/Packages-Mhwd
|
2015-12-04 22:03:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
check_requirements(){
|
2016-02-14 23:13:39 +01:00
|
|
|
[[ -f ${run_dir}/.buildiso ]] || die "%s is not a valid iso profiles directory!" "${run_dir}"
|
2016-06-06 20:08:09 +02:00
|
|
|
if ! $(is_valid_arch_iso ${target_arch});then
|
|
|
|
die "%s is not a valid arch!" "${target_arch}"
|
2015-12-04 22:03:04 +01:00
|
|
|
fi
|
2016-06-06 20:08:09 +02:00
|
|
|
if ! $(is_valid_branch ${target_branch});then
|
|
|
|
die "%s is not a valid branch!" "${target_branch}"
|
2015-12-04 22:03:04 +01:00
|
|
|
fi
|
2016-02-17 20:00:54 +01:00
|
|
|
|
2016-02-20 21:34:56 +01:00
|
|
|
if ! is_valid_init "${initsys}";then
|
2016-02-20 21:38:19 +01:00
|
|
|
die "%s is not a valid init system!" "${initsys}"
|
2016-02-20 21:34:56 +01:00
|
|
|
fi
|
|
|
|
|
2016-02-17 20:00:54 +01:00
|
|
|
local iso_kernel=${kernel:5:1} host_kernel=$(uname -r)
|
|
|
|
|
|
|
|
if [[ ${iso_kernel} < "4" ]] || [[ ${host_kernel%%*.} < "4" ]];then
|
|
|
|
use_overlayfs='false'
|
|
|
|
fi
|
|
|
|
|
|
|
|
if ${use_overlayfs};then
|
|
|
|
iso_fs="overlayfs"
|
|
|
|
else
|
|
|
|
iso_fs="aufs"
|
|
|
|
fi
|
2016-06-19 21:44:04 +02:00
|
|
|
import ${LIBDIR}/util-iso-${iso_fs}.sh
|
2015-12-04 22:03:04 +01:00
|
|
|
}
|
|
|
|
|
2016-02-23 19:57:45 +01:00
|
|
|
sign_iso(){
|
2016-02-22 21:57:55 +01:00
|
|
|
su ${OWNER} -c "signfile ${iso_dir}/$1"
|
2016-02-22 19:24:49 +01:00
|
|
|
}
|
|
|
|
|
2016-07-12 22:27:23 +02:00
|
|
|
make_torrent(){
|
2016-07-14 19:07:09 +02:00
|
|
|
local fn=${iso_file}.torrent
|
2016-07-12 22:50:08 +02:00
|
|
|
msg2 "Creating (%s) ..." "${fn}"
|
|
|
|
[[ -f ${iso_dir}/${fn} ]] && rm ${iso_dir}/${fn}
|
2016-07-14 19:07:09 +02:00
|
|
|
mktorrent ${mktorrent_args[*]} -o ${iso_dir}/${fn} ${iso_dir}/${iso_file}
|
2016-07-12 22:27:23 +02:00
|
|
|
}
|
|
|
|
|
2014-12-31 01:02:43 +01:00
|
|
|
compress_images(){
|
2015-02-18 04:28:11 +01:00
|
|
|
local timer=$(get_timer)
|
2016-02-25 06:40:39 +01:00
|
|
|
run_safe "make_iso"
|
2015-02-13 15:17:00 +01:00
|
|
|
make_checksum "${iso_file}"
|
2016-04-01 12:54:18 +02:00
|
|
|
${sign} && sign_iso "${iso_file}"
|
2016-07-12 22:27:23 +02:00
|
|
|
${is_torrent} && make_torrent
|
2016-07-14 19:38:54 +02:00
|
|
|
chown -R "${OWNER}:${OWNER}" "${iso_dir}"
|
2016-02-25 06:40:39 +01:00
|
|
|
show_elapsed_time "${FUNCNAME}" "${timer}"
|
2014-12-31 01:02:43 +01:00
|
|
|
}
|
|
|
|
|
2016-02-25 06:40:39 +01:00
|
|
|
prepare_images(){
|
2015-02-18 04:28:11 +01:00
|
|
|
local timer=$(get_timer)
|
2015-12-18 03:33:17 +01:00
|
|
|
load_pkgs "${profile_dir}/Packages-Root"
|
2016-02-23 22:00:59 +01:00
|
|
|
run_safe "make_image_root"
|
2015-02-13 15:17:00 +01:00
|
|
|
if [[ -f "${packages_custom}" ]] ; then
|
|
|
|
load_pkgs "${packages_custom}"
|
2016-02-23 22:00:59 +01:00
|
|
|
run_safe "make_image_custom"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2015-12-18 18:25:13 +01:00
|
|
|
if [[ -f ${profile_dir}/Packages-Live ]]; then
|
|
|
|
load_pkgs "${profile_dir}/Packages-Live"
|
2016-02-23 22:00:59 +01:00
|
|
|
run_safe "make_image_live"
|
2015-02-14 10:50:41 +01:00
|
|
|
fi
|
2016-02-23 18:23:28 +01:00
|
|
|
if [[ -f ${packages_mhwd} ]] ; then
|
2016-02-23 22:00:59 +01:00
|
|
|
load_pkgs "${packages_mhwd}"
|
|
|
|
run_safe "make_image_mhwd"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2016-02-23 22:00:59 +01:00
|
|
|
run_safe "make_image_boot"
|
2016-06-06 20:08:09 +02:00
|
|
|
if [[ "${target_arch}" == "x86_64" ]]; then
|
2016-02-23 22:00:59 +01:00
|
|
|
run_safe "make_efi"
|
|
|
|
run_safe "make_efiboot"
|
2015-02-13 15:17:00 +01:00
|
|
|
fi
|
2016-02-23 22:00:59 +01:00
|
|
|
run_safe "make_isolinux"
|
|
|
|
run_safe "make_isomounts"
|
2016-02-25 06:40:39 +01:00
|
|
|
show_elapsed_time "${FUNCNAME}" "${timer}"
|
2014-12-31 01:02:43 +01:00
|
|
|
}
|
2015-01-15 04:38:47 +01:00
|
|
|
|
2016-06-12 00:03:48 +02:00
|
|
|
archive_logs(){
|
|
|
|
local name=$(gen_iso_fn) ext=log.tar.xz src=${tmp_dir}/archives.list
|
|
|
|
find ${log_dir} -maxdepth 1 -name "$name*.log" -printf "%f\n" > $src
|
|
|
|
msg2 "Archiving log files [%s] ..." "$name.$ext"
|
|
|
|
tar -cJf ${log_dir}/$name.$ext -C ${log_dir} -T $src
|
|
|
|
msg2 "Cleaning log files ..."
|
|
|
|
find ${log_dir} -maxdepth 1 -name "$name*.log" -delete
|
|
|
|
}
|
|
|
|
|
2015-02-14 10:50:41 +01:00
|
|
|
make_profile(){
|
2016-02-25 18:07:13 +01:00
|
|
|
msg "Start building [%s]" "${profile}"
|
2015-12-04 22:03:04 +01:00
|
|
|
${clean_first} && chroot_clean "${work_dir}"
|
|
|
|
if ${iso_only}; then
|
2016-02-25 18:07:13 +01:00
|
|
|
[[ ! -d ${work_dir} ]] && die "Create images: buildiso -p %s -x" "${profile}"
|
2015-12-04 22:03:04 +01:00
|
|
|
compress_images
|
2016-06-12 00:03:48 +02:00
|
|
|
${verbose} && archive_logs
|
2015-12-04 22:03:04 +01:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
if ${images_only}; then
|
2016-02-25 06:40:39 +01:00
|
|
|
prepare_images
|
2016-06-12 00:03:48 +02:00
|
|
|
${verbose} && archive_logs
|
2016-02-25 18:07:13 +01:00
|
|
|
warning "Continue compress: buildiso -p %s -zc ..." "${profile}"
|
2015-12-04 22:03:04 +01:00
|
|
|
exit 1
|
|
|
|
else
|
2016-02-25 06:40:39 +01:00
|
|
|
prepare_images
|
2015-12-04 22:03:04 +01:00
|
|
|
compress_images
|
2016-06-12 00:03:48 +02:00
|
|
|
${verbose} && archive_logs
|
2015-12-04 22:03:04 +01:00
|
|
|
fi
|
2016-02-26 17:56:17 +01:00
|
|
|
reset_profile
|
2016-02-25 18:07:13 +01:00
|
|
|
msg "Finished building [%s]" "${profile}"
|
2016-02-15 16:47:52 +01:00
|
|
|
show_elapsed_time "${FUNCNAME}" "${timer_start}"
|
2015-01-15 04:38:47 +01:00
|
|
|
}
|
2016-02-25 06:40:39 +01:00
|
|
|
|
2016-06-09 12:49:28 +02:00
|
|
|
get_pacman_conf(){
|
|
|
|
local user_conf=${profile_dir}/user-repos.conf pac_arch='default' conf
|
|
|
|
[[ "${target_arch}" == 'x86_64' ]] && pac_arch='multilib'
|
2016-05-23 03:03:00 +02:00
|
|
|
if [[ -f ${user_conf} ]];then
|
|
|
|
info "detected: %s" "user-repos.conf"
|
|
|
|
check_user_repos_conf "${user_conf}"
|
2016-06-11 20:32:03 +02:00
|
|
|
conf=${tmp_dir}/custom-pacman.conf
|
2016-06-12 00:03:48 +02:00
|
|
|
cat ${DATADIR}/pacman-$pac_arch.conf ${user_conf} > "$conf"
|
2016-05-23 00:16:53 +02:00
|
|
|
else
|
2016-06-09 12:49:28 +02:00
|
|
|
conf="${DATADIR}/pacman-$pac_arch.conf"
|
2016-05-23 00:16:53 +02:00
|
|
|
fi
|
2016-06-09 12:49:28 +02:00
|
|
|
echo "$conf"
|
2016-05-23 00:16:53 +02:00
|
|
|
}
|
|
|
|
|
2016-07-14 19:07:09 +02:00
|
|
|
gen_webseed(){
|
|
|
|
local mirrors=('lweb' 'jaist' 'vorboss' 'netcologne') webseed url
|
|
|
|
url=${remote_url}/projects/${remote_project}/files/${dist_release}/${profile}/${iso_file}
|
|
|
|
for m in ${mirrors[@]};do
|
|
|
|
webseed=${webseed:-}${webseed:+,}"http://${m}.${url}"
|
|
|
|
done
|
|
|
|
echo ${webseed}
|
|
|
|
}
|
|
|
|
|
2016-02-25 06:40:39 +01:00
|
|
|
load_profile(){
|
2016-02-25 18:07:13 +01:00
|
|
|
conf="${profile_dir}/profile.conf"
|
2016-05-23 00:16:53 +02:00
|
|
|
|
2016-02-25 18:07:13 +01:00
|
|
|
info "Profile: [%s]" "${profile}"
|
2016-02-25 06:40:39 +01:00
|
|
|
|
2016-02-25 18:07:13 +01:00
|
|
|
load_profile_config "$conf"
|
2016-02-25 06:40:39 +01:00
|
|
|
|
2016-06-09 12:49:28 +02:00
|
|
|
pacman_conf=$(get_pacman_conf)
|
2016-05-23 00:16:53 +02:00
|
|
|
|
2016-06-10 11:55:41 +02:00
|
|
|
mirrors_conf=$(get_pac_mirrors_conf "${target_branch}")
|
|
|
|
|
2016-02-25 18:07:13 +01:00
|
|
|
iso_file=$(gen_iso_fn).iso
|
2016-02-25 06:40:39 +01:00
|
|
|
|
2016-06-06 20:08:09 +02:00
|
|
|
mkchroot_args+=(-C ${pacman_conf} -S ${mirrors_conf} -B "${build_mirror}/${target_branch}" -K)
|
|
|
|
work_dir=${chroots_iso}/${profile}/${target_arch}
|
2016-02-25 06:40:39 +01:00
|
|
|
|
2016-07-12 20:19:41 +02:00
|
|
|
iso_dir="${cache_dir_iso}/${edition}/${dist_release}/${profile}"
|
2016-02-25 06:40:39 +01:00
|
|
|
|
|
|
|
prepare_dir "${iso_dir}"
|
2016-07-13 15:28:37 +02:00
|
|
|
chown "${OWNER}:${OWNER}" "${iso_dir}"
|
2016-07-12 22:27:23 +02:00
|
|
|
|
|
|
|
mktorrent_args=(-v -p -l ${piece_size} -a ${tracker_url})
|
2016-07-12 22:50:08 +02:00
|
|
|
|
2016-07-14 19:07:09 +02:00
|
|
|
set_remote_project "${edition}"
|
|
|
|
|
2016-07-12 22:50:08 +02:00
|
|
|
if [[ "${edition}" == 'official' ]];then
|
2016-07-14 19:07:09 +02:00
|
|
|
mktorrent_args+=(-w $(gen_webseed))
|
2016-07-12 22:50:08 +02:00
|
|
|
fi
|
2016-02-25 06:40:39 +01:00
|
|
|
}
|
|
|
|
|
2016-07-12 20:19:41 +02:00
|
|
|
get_edition(){
|
|
|
|
local result=$(find ${run_dir} -maxdepth 2 -name "$1") path
|
|
|
|
[[ -z $result ]] && die "%s is not a valid profile or build list!" "$1"
|
|
|
|
path=${result%/*}
|
|
|
|
echo ${path##*/}
|
|
|
|
}
|
|
|
|
|
2016-02-25 06:40:39 +01:00
|
|
|
prepare_profile(){
|
2016-02-25 18:07:13 +01:00
|
|
|
profile=$1
|
|
|
|
edition=$(get_edition ${profile})
|
|
|
|
profile_dir=${run_dir}/${edition}/${profile}
|
|
|
|
check_profile
|
|
|
|
load_profile
|
2016-02-25 06:40:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
build(){
|
|
|
|
prepare_profile "$1"
|
2016-02-25 18:07:13 +01:00
|
|
|
make_profile
|
2016-02-25 06:40:39 +01:00
|
|
|
}
|