151 lines
3.9 KiB
Bash
Executable file
151 lines
3.9 KiB
Bash
Executable file
#!/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="$target home=/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 | sed -E "s/REPLACE_ARCHITECTURE/$arch/g" > $deb_dir/control
|
|
echo $sysusers_file > $deb_dir/$target.sysuser
|
|
pkgdir=$deb_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
|
|
|
|
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
|