From f86e3bde43e1607aa98dff6e59b3f64c6fab1970 Mon Sep 17 00:00:00 2001 From: The-going <48602507+The-going@users.noreply.github.com> Date: Thu, 29 Apr 2021 10:26:41 +0300 Subject: [PATCH] chroot packaging: build script as separate function Signed-off-by: The-going <48602507+The-going@users.noreply.github.com> --- lib/chroot-buildpackages.sh | 154 ++++++++++++++++++++++-------------- 1 file changed, 93 insertions(+), 61 deletions(-) diff --git a/lib/chroot-buildpackages.sh b/lib/chroot-buildpackages.sh index 1e09bcad0e..eb680e083e 100644 --- a/lib/chroot-buildpackages.sh +++ b/lib/chroot-buildpackages.sh @@ -203,72 +203,18 @@ chroot_build_packages() [[ -v $dist_builddeps_name ]] && package_builddeps="${package_builddeps} ${!dist_builddeps_name}" # create build script - cat <<-EOF > "${target_dir}"/root/build.sh - #!/bin/bash - export PATH="/usr/lib/ccache:\$PATH" - export HOME="/root" - export DEBIAN_FRONTEND="noninteractive" - export DEB_BUILD_OPTIONS="nocheck noautodbgsym" - export CCACHE_TEMPDIR="/tmp" - # distcc is disabled to prevent compilation issues due to different host and cross toolchain configurations - #export CCACHE_PREFIX="distcc" - # uncomment for debug - #export CCACHE_RECACHE="true" - #export CCACHE_DISABLE="true" - export DISTCC_HOSTS="$distcc_bindaddr" - export DEBFULLNAME="$MAINTAINER" - export DEBEMAIL="$MAINTAINERMAIL" - $(declare -f display_alert) - cd /root/build - if [[ -n "${package_builddeps}" ]]; then - # can be replaced with mk-build-deps - deps=() - installed=\$(dpkg-query -W -f '\${db:Status-Abbrev}|\${binary:Package}\n' '*' 2>/dev/null | grep '^ii' | awk -F '|' '{print \$2}' | cut -d ':' -f 1) - for packet in $package_builddeps; do grep -q -x -e "\$packet" <<< "\$installed" || deps+=("\$packet"); done - if [[ \${#deps[@]} -gt 0 ]]; then - display_alert "Installing build dependencies" - apt-get -y -q update - apt-get -y -q --no-install-recommends --show-progress -o DPKG::Progress-Fancy=1 install "\${deps[@]}" - fi - fi - display_alert "Copying sources" - rsync -aq /root/sources/"${package_name}" /root/build/ - cd /root/build/"${package_name}" - # copy overlay / "debianization" files - [[ -d "/root/overlay/${package_name}/" ]] && rsync -aq /root/overlay/"${package_name}" /root/build/ - # set upstream version - [[ -n "${package_upstream_version}" ]] && debchange --preserve --newversion "${package_upstream_version}" "Import from upstream" - # set local version - # debchange -l~armbian${REVISION}-${builddate}+ "Custom $VENDOR release" - debchange -l~armbian"${REVISION}"+ "Custom $VENDOR release" - display_alert "Building package" - dpkg-buildpackage -b -us -j2 - if [[ \$? -eq 0 ]]; then - cd /root/build - # install in chroot if other libraries depend on them - if [[ -n "$package_install_chroot" ]]; then - display_alert "Installing packages" - for p in $package_install_chroot; do - dpkg -i \${p}_*.deb - done - fi - display_alert "Done building" "$package_name $release/$arch" "ext" - ls *.deb 2>/dev/null - mv *.deb /root 2>/dev/null - exit 0 - else - display_alert "Failed building" "$package_name $release/$arch" "err" - exit 2 - fi - EOF - - chmod +x "${target_dir}"/root/build.sh + create_build_script fetch_from_repo "$package_repo" "extra/$package_name" "$package_ref" - eval systemd-nspawn -a -q --capability=CAP_MKNOD -D "${target_dir}" --tmpfs=/root/build --tmpfs=/tmp:mode=777 --bind-ro "${SRC}"/packages/extras-buildpkgs/:/root/overlay \ + eval systemd-nspawn -a -q \ + --capability=CAP_MKNOD -D "${target_dir}" \ + --tmpfs=/root/build \ + --tmpfs=/tmp:mode=777 \ + --bind-ro "${SRC}"/packages/extras-buildpkgs/:/root/overlay \ --bind-ro "${SRC}"/cache/sources/extra/:/root/sources /bin/bash -c "/root/build.sh" 2>&1 \ ${PROGRESS_LOG_TO_FILE:+' | tee -a $DEST/debug/buildpkg.log'} + if [[ ${PIPESTATUS[0]} -eq 2 ]]; then failed+=("$package_name:$release/$arch") else @@ -294,6 +240,92 @@ chroot_build_packages() fi } ############################################################################# +# create build script +create_build_script () +{ + cat <<-EOF > "${target_dir}"/root/build.sh + #!/bin/bash + export PATH="/usr/lib/ccache:\$PATH" + export HOME="/root" + export DEBIAN_FRONTEND="noninteractive" + export DEB_BUILD_OPTIONS="nocheck noautodbgsym" + export CCACHE_TEMPDIR="/tmp" + # distcc is disabled to prevent compilation issues due + # to different host and cross toolchain configurations + #export CCACHE_PREFIX="distcc" + # uncomment for debug + #export CCACHE_RECACHE="true" + #export CCACHE_DISABLE="true" + export DISTCC_HOSTS="$distcc_bindaddr" + export DEBFULLNAME="$MAINTAINER" + export DEBEMAIL="$MAINTAINERMAIL" + $(declare -f display_alert) + + cd /root/build + if [[ -n "${package_builddeps}" ]]; then + # can be replaced with mk-build-deps + deps=() + installed=\$( + dpkg-query -W -f '\${db:Status-Abbrev}|\${binary:Package}\n' '*' 2>/dev/null | \ + grep '^ii' | \ + awk -F '|' '{print \$2}' | \ + cut -d ':' -f 1 + ) + + for packet in $package_builddeps + do + grep -q -x -e "\$packet" <<< "\$installed" || deps+=("\$packet") + done + + if [[ \${#deps[@]} -gt 0 ]]; then + display_alert "Installing build dependencies" + apt-get -y -q update + apt-get -y -q \ + --no-install-recommends \ + --show-progress \ + -o DPKG::Progress-Fancy=1 install "\${deps[@]}" + fi + fi + + display_alert "Copying sources" + rsync -aq /root/sources/"${package_name}" /root/build/ + + cd /root/build/"${package_name}" + # copy overlay / "debianization" files + [[ -d "/root/overlay/${package_name}/" ]] && rsync -aq /root/overlay/"${package_name}" /root/build/ + + # set upstream version + [[ -n "${package_upstream_version}" ]] && debchange --preserve --newversion "${package_upstream_version}" "Import from upstream" + + # set local version + # debchange -l~armbian${REVISION}-${builddate}+ "Custom $VENDOR release" + debchange -l~armbian"${REVISION}"+ "Custom $VENDOR release" + + display_alert "Building package" + dpkg-buildpackage -b -us -j2 + + if [[ \$? -eq 0 ]]; then + cd /root/build + # install in chroot if other libraries depend on them + if [[ -n "$package_install_chroot" ]]; then + display_alert "Installing packages" + for p in $package_install_chroot; do + dpkg -i \${p}_*.deb + done + fi + display_alert "Done building" "$package_name $release/$arch" "ext" + ls *.deb 2>/dev/null + mv *.deb /root 2>/dev/null + exit 0 + else + display_alert "Failed building" "$package_name $release/$arch" "err" + exit 2 + fi + EOF + + chmod +x "${target_dir}"/root/build.sh +} + # chroot_installpackages_local # chroot_installpackages_local()