#!/usr/bin/env zsh SCRIPT_PATH="${0:A:h}" source $SCRIPT_PATH/apikeys.sh if (( $+commands[gsed] )); then alias sed=gsed fi if [ $# -lt 2 ]; then echo "please give me target and architecture(s) plss..." exit fi target=${1:l} shift NAME_CAPS=${(C)target} config_path=$SCRIPT_PATH/config/$target.config.sh if [ ! -f $config_path ]; then echo "Config for $NAME_CAPS not found:" echo "Expected config at $config_path" exit 1 fi source $config_path export VERSION=$(jq -r '.name' <<<$JSON) echo "Building $NAME_CAPS v$VERSION for architectures: $@" control_file="Source: $target Section: $SECTION Priority: optional Maintainer: alex Package: $target Depends: $DEPENDS Version: $VERSION Architecture: REPLACE_ARCHITECTURE Description: $target" package_control_file="Package: $target Maintainer: alex Depends: $DEPENDS Version: $VERSION Architecture: REPLACE_ARCHITECTURE Description: $target" package_info="PackageAuthor=alex UpdateMethod=External UpdateMethodMessage=rebuild apt packages Branch=$BRANCH" service_file="# Be sure to use \`systemctl edit $target\` to modify this service with an override.conf because # direct changes will be overwritten by package updates. [Unit] Description=$NAME_CAPS Service Wants=network-online.target After=network-online.target [Service] User=$target Group=$target SyslogIdentifier=$target ExecStart=/usr/lib/$target/bin/$NAME_CAPS -nobrowser -data=/var/lib/$target Type=simple [Install] WantedBy=multi-user.target" sysusers_file="u $target - \"$target daemon\" /var/lib/$target" tmpfiles_file="# Override this file with a modified version in /etc/tmpfiles.d/ d /var/lib/$target 0755 $target $target Z /var/lib/$target - $target $target Z /usr/lib/$target - $target $target L /var/log/$target - - - - /var/lib/$target/logs/" postinst_file="#!/bin/sh SERVER_GROUP=$target if ! getent group | grep -q \"^$target:\" ; then echo -n \"Adding group $target..\" addgroup --quiet --system $target 2>/dev/null ||true echo \"..done\" fi adduser $target \ --system \ --home /var/lib/$target \ --ingroup $target \ --disabled-password" rel_info=$(jq '.assets[] | select(.name | contains("linux")) | select(.name | contains("musl") | not)' <<<$JSON) declare -a tarballs=($(jq '"\(.browser_download_url) /\(.name)"' <<<$rel_info | tr -d '"' | tr "\n" " ")) for ((i = 1; i < ${#tarballs[@]}; i += 2)); do url="${tarballs[i]}" filename="${tarballs[i + 1]#/}" arch=$(sed -E "s/^.+?linux-(.+?).tar.gz$/\1/g" <<<"${tarballs[i + 1]}") if [[ "$arch" == "x64" ]] || [[ "$arch" == "core-x64" ]]; then arch="amd64" fi if [[ "$arch" == "core-x86" ]]; then arch="i386" fi if [[ "$arch" == "arm" ]] || [[ "$arch" == "core-arm" ]]; then arch="armhf" fi if [[ "$arch" == "core-arm64" ]]; then arch="arm64" fi if (( $@[(Ie)$arch])); then echo "Building for $arch..." dir=$(mktemp -d) deb_dir=$dir/debian mkdir -p $deb_dir echo $control_file > $deb_dir/control pkgdir=$dir/$target mkdir -p $pkgdir/usr/lib/systemd/system echo $service_file > $pkgdir/usr/lib/systemd/system/$target.service mkdir -p $pkgdir/usr/lib/tmpfiles.d echo $tmpfiles_file > $pkgdir/usr/lib/tmpfiles.d/$target.conf mkdir -p $pkgdir/usr/lib/$target echo "$package_info\nPackageVersion=$VERSION" >$pkgdir/usr/lib/$target/package_info curl -Ls $url | tar xz -C $pkgdir/ rm -rf $pkgdir/$NAME_CAPS/$NAME_CAPS.Update mv $pkgdir/$NAME_CAPS $pkgdir/usr/lib/$target/bin chmod -R a=,a+rX,u+w $pkgdir/usr/lib/$target/bin chmod +x $pkgdir/usr/lib/$target/bin/$NAME_CAPS deb_pkg_dir=$pkgdir/DEBIAN mkdir -p $deb_pkg_dir echo $package_control_file | sed -E "s/REPLACE_ARCHITECTURE/$arch/g" > $deb_pkg_dir/control echo $sysusers_file > $deb_pkg_dir/sysusers cd $dir dpkg-deb --build $target mkdir -p $SCRIPT_PATH/debs deb_file=$SCRIPT_PATH/debs/$target-$VERSION-$arch.deb rm -f $deb_file cp $target.deb $deb_file rm -rf $dir else echo "Skipping arch $arch" fi done