#!/bin/bash set -e cd "$(dirname "${BASH_SOURCE[0]}")/.." PROJECT=${PROJECT:-"startos"} if [ "${PROJECT}" = "startos" ]; then INSTALL_TARGET="start-os-install" PROJECT_DIR="projects/start-os" else INSTALL_TARGET="${PROJECT}-install" PROJECT_DIR="projects/${PROJECT}" fi BASENAME=${BASENAME:-"$(./build/env/basename.sh)"} VERSION=${VERSION:-$(./build/env/version.sh "$PROJECT")} # Recorded in the control file below so a published .deb can be tied back to the # commit that produced it. The apt pool cannot carry that on its own: dpkg-name # renames each file to __.deb, dropping the hash the # build basename has, and Version alone repeats across every master build of a # version. scripts/manage-release.sh checks this field before promoting a build # from alpha to stable. GIT_HASH=${GIT_HASH:-$(cat ./build/env/GIT_HASH.txt 2> /dev/null || echo unknown)} if [ "$PLATFORM" = "x86_64" ] || [ "$PLATFORM" = "x86_64-nonfree" ] || [ "$PLATFORM" = "x86_64-nvidia" ]; then DEB_ARCH=amd64 elif [ "$PLATFORM" = "aarch64" ] || [ "$PLATFORM" = "aarch64-nonfree" ] || [ "$PLATFORM" = "aarch64-nvidia" ] || [ "$PLATFORM" = "raspberrypi" ] || [ "$PLATFORM" = "rockchip64" ]; then DEB_ARCH=arm64 elif [ "$PLATFORM" = "riscv64" ] || [ "$PLATFORM" = "riscv64-nonfree" ]; then DEB_ARCH=riscv64 else DEB_ARCH="$PLATFORM" fi rm -rf dpkg-workdir/$BASENAME mkdir -p dpkg-workdir/$BASENAME make "${INSTALL_TARGET}" DESTDIR=dpkg-workdir/$BASENAME REMOTE= if [ -f dpkg-workdir/$BASENAME/usr/lib/$PROJECT/depends ]; then if [ -n "$DEPENDS" ]; then DEPENDS="$DEPENDS," fi DEPENDS="${DEPENDS}$(cat dpkg-workdir/$BASENAME/usr/lib/$PROJECT/depends | tr $'\n' ',' | sed 's/,,\+/,/g' | sed 's/,$//')" fi if [ -f dpkg-workdir/$BASENAME/usr/lib/$PROJECT/conflicts ]; then if [ -n "$CONFLICTS" ]; then CONFLICTS="$CONFLICTS," fi CONFLICTS="${CONFLICTS}$(cat dpkg-workdir/$BASENAME/usr/lib/$PROJECT/conflicts | tr $'\n' ',' | sed 's/,,\+/,/g' | sed 's/,$//')" fi if [ -z "$CONFLICTS" ] && [ -f dpkg-workdir/$BASENAME/usr/lib/startos/conflicts ]; then CONFLICTS="$(cat dpkg-workdir/$BASENAME/usr/lib/startos/conflicts | tr $'\n' ',' | sed 's/,,\+/,/g' | sed 's/,$//')" fi if [ -d "${PROJECT_DIR}/debian" ]; then cp -r "${PROJECT_DIR}/debian" dpkg-workdir/$BASENAME/DEBIAN else mkdir -p dpkg-workdir/$BASENAME/DEBIAN fi cat > dpkg-workdir/$BASENAME/DEBIAN/control << EOF Package: ${PROJECT} Version: ${VERSION} Git-Hash: ${GIT_HASH} Section: unknown Priority: required Maintainer: Aiden McClelland Homepage: https://start9.com Architecture: ${DEB_ARCH} Multi-Arch: foreign Depends: ${DEPENDS} Conflicts: ${CONFLICTS} Description: StartOS Debian Package EOF mkdir -p dpkg-workdir/$BASENAME/usr/share/doc/${PROJECT} { echo "Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/" echo "Upstream-Name: ${PROJECT}" echo "Source: https://github.com/Start9Labs/start-technologies" echo echo "Files: *" echo "Copyright: 2023 Start9 Labs, Inc." echo "License: MIT" sed 's/^$/./; s/^/ /' LICENSE echo echo "Comment: Files under other terms are listed in NOTICE.md." sed 's/^$/./; s/^/ /' NOTICE.md } > dpkg-workdir/$BASENAME/usr/share/doc/${PROJECT}/copyright cd dpkg-workdir/$BASENAME find . -type f -not -path "./DEBIAN/*" -exec md5sum {} \; | sort -k 2 | sed 's/\.\/\(.*\)/\1/' > DEBIAN/md5sums cd ../.. cd dpkg-workdir dpkg-deb --root-owner-group -Zzstd -b $BASENAME mkdir -p ../results mv $BASENAME.deb ../results/$BASENAME.deb rm -rf $BASENAME