You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hestiacp/src/lxd_build_all.sh

97 lines
2.4 KiB

#!/bin/bash
#
# Script for preparing lxd environment and building Hestia packages for all supported distros
# - Run with sudo, not directly as root!
#
# Arguments:
# ./lxd_build_all --cleanup
# - Stop and delete all containers
#
# ./lxd_build_all --background
# - Execute the build script on all containers simultaneously
#
# Configs:
# Use focal and jammy instead of "20.04 an 22.04"
oslist=('debian=10,11' 'ubuntu=18.04,focal,jammy')
branch='main'
function setup_container() {
if [ "$osname" = 'ubuntu' ]; then
lxc init $osname:$osver "${containername}"
else
lxc init images:$osname/$osver "${containername}"
fi
mkdir -p "${__DIR__}/build/${containername}"
chown $user: "${__DIR__}/build/${containername}"
lxc config set ${containername} raw.idmap "both $user_id $user_gid"
lxc config device add ${containername} debdir disk path=/opt/hestiacp source=${__DIR__}/build/${containername}
}
cmd=$1
__DIR__="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null 2>&1 && pwd)" #"
# user=$(logname)
user=$SUDO_USER
user_id=$(id -u $user)
user_gid=$(id -g $user)
if [ -z "$user" ] || [ -z "$user_id" ] || [ -z "$user_gid" ] || [ "$user" = 'root' ]; then
echo "Script must be run with sudo, not directly as root" && exit 1
fi
if ! which lxd > /dev/null 2>&1; then
# Use snapd instead
apt -y install snapd
snap install lxd
lxd init --auto
echo "root:$user_id:1" | sudo tee -a /etc/subuid
echo "root:$user_gid:1" | sudo tee -a /etc/subgid
fi
for osdef in "${oslist[@]}"; do
osname=${osdef%%=*}
osversions=$(echo ${osdef##*=} | tr "," "\n")
for osver in $osversions; do
containername="hst-${osname}-${osver/\./}"
container_ip=""
echo "Container $containername"
if [ "$cmd" = '--cleanup' ]; then
# Stop and delete container
lxc stop $containername
lxc rm $containername
continue
fi
if ! lxc info $containername > /dev/null 2>&1; then
setup_container
fi
lxc start $containername > /dev/null 2>&1
# Wait for container to start
while [ -z "$container_ip" ]; do
sleep 1
container_ip=$(lxc list --format csv -c 4,n | grep ",$containername$" | cut -d "," -f 1)
done
echo $container_ip
cp -f "${__DIR__}/lxd_compile.sh" "${__DIR__}/build/${containername}/lxd_compile.sh"
if [ "$cmd" = '--background' ]; then
# Run build script in background
lxc exec $containername -- /opt/hestiacp/lxd_compile.sh $branch > /dev/null 2>&1 &
else
lxc exec $containername -- /opt/hestiacp/lxd_compile.sh $branch
fi
done
done