DebArrs/build.sh

151 lines
3.9 KiB
Bash
Raw Normal View History

2024-05-19 14:02:06 +10:00
#!/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: $@"
2024-05-19 14:14:49 +10:00
control_file="Source: $target
Section: $SECTION
2024-05-19 14:02:06 +10:00
Priority: optional
2024-05-19 14:23:00 +10:00
Maintainer: alex
Package: $target
Depends: $DEPENDS
Version: $VERSION
Architecture: REPLACE_ARCHITECTURE
Description: $target"
2024-05-19 14:14:49 +10:00
package_control_file="Package: $target
2024-05-19 14:23:00 +10:00
Maintainer: alex
2024-05-19 14:02:06 +10:00
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)
2024-05-19 14:23:00 +10:00
deb_dir=$dir/debian
2024-05-19 14:14:49 +10:00
mkdir -p $deb_dir
2024-05-19 14:24:56 +10:00
echo $control_file | sed -E "s/REPLACE_ARCHITECTURE/$arch/g" > $deb_dir/control
pkgdir=$deb_dir/$target
2024-05-19 14:02:06 +10:00
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
2024-05-19 14:23:00 +10:00
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
2024-05-19 14:02:06 +10:00
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