#!/bin/bash ARCHITECTURES=( amd64 arm64 i386 armhf ) RELEASES=( buster bullseye sid ) CHROOT_PATH="/var/tmp" main() { if [ $# -lt 2 ]; then echo "Not enough arguments" >&2 return 2 fi # Get host architecture local host_arch="$(dpkg --print-architecture)" if [ -z "${host_arch}" ]; then echo "Could not discover host architecture" >&2 return 1 fi local package="${1}" local sources="${2}" # Create some temporary directory local tmp="$(mktemp -d)" # Extract the sources into it mkdir -p "${tmp}/sources" tar xvfa "${sources}" -C "${tmp}/sources" # Copy the tarball under the correct Debian name cp -vf "${sources}" "${tmp}/sources/${package//-/_}.orig.tar.xz" # Change into temporary directory pushd "${tmp}" # Build the package for each release local release for release in ${RELEASES[@]}; do local chroot="${release}-${host_arch}-sbuild" mkdir -p "${release}" pushd "${release}" # Create a chroot environment if [ ! -d "/etc/sbuild/chroot/${chroot}" ]; then if ! sbuild-createchroot --arch="${host_arch}" "${release}" \ "${CHROOT_PATH}/${chroot}"; then echo "Could not create chroot for ${release} on ${host_arch}" >&2 rm -rf "${tmp}" return 1 fi fi # And for each architecture we want to support local arch for arch in ${ARCHITECTURES[@]}; do mkdir -p "${arch}" pushd "${arch}" # Copy sources cp -r "${tmp}/sources" . # Run the build process if ! sbuild --dist="${release}" --host="${arch}" --source "sources/${package}"; then echo "Could not build package for ${release} on ${arch}" >&2 rm -rf "${tmp}" return 1 fi # Remove the sources rm -rf "sources/${package}" popd done popd done # Remove sources rm -rf "${tmp}/sources" popd # Done! echo "SUCCESS!" echo " You can find your Debian packages in ${tmp}" return 0 } main "$@" || exit $?