zamba-lxc-toolbox/install.sh

147 lines
4.4 KiB
Bash
Raw Normal View History

2021-04-07 22:20:10 +02:00
#!/bin/bash
# This script will create and fire up a standard debian buster lxc container on your Proxmox VE.
# On a Proxmox cluster, the script will create the container on the local node, where it's executed.
# The container ID will be automatically assigned by increasing (+1) the highest number of
# existing LXC containers in your environment. If the assigned ID is already taken by a VM
# or no containers exist yet, the script falls back to the ID 100.
2021-04-07 22:20:10 +02:00
# Authors:
# (C) 2021 Idea an concept by Christian Zengel <christian@sysops.de>
2021-04-16 16:58:46 +02:00
# (C) 2021 Script design and prototype by Markus Helmke <m.helmke@nettwarker.de>
2021-04-09 18:10:07 +02:00
# (C) 2021 Script rework and documentation by Thorsten Spille <thorsten@spille-edv.de>
2021-04-07 22:20:10 +02:00
# IMPORTANT NOTE:
# Please adjust th settings in 'zamba.conf' to your needs before running the script
2021-04-07 22:20:10 +02:00
############### ZAMBA INSTALL SCRIPT ###############
2021-04-07 22:20:10 +02:00
# Load configuration file
source $PWD/zamba.conf
2021-04-07 22:20:10 +02:00
2021-04-17 10:13:49 +02:00
LXC_MP="0"
LXC_UNPRIVILEGED="1"
LXC_NESTING="0"
select opt in zmb-standalone zmb-ad zmb-member mailpiler matrix debian-unpriv debian-priv quit; do
2021-04-17 10:13:49 +02:00
case $opt in
debian-unpriv)
2021-04-17 10:13:49 +02:00
echo "Debian-only LXC container unprivileged mode selected"
break
;;
debian-priv)
2021-04-17 10:13:49 +02:00
echo "Debian-only LXC container privileged mode selected"
LXC_UNPRIVILEGED="0"
break
;;
zmb-standalone)
echo "Configuring LXC container '$opt'!"
LXC_MP="1"
LXC_UNPRIVILEGED="0"
break
;;
zmb-member)
echo "Configuring LXC container '$opt'!"
LXC_MP="1"
LXC_UNPRIVILEGED="0"
break
;;
zmb-ad)
echo "Selected Zamba AD DC"
LXC_NESTING="1"
LXC_UNPRIVILEGED="0"
break
;;
mailpiler)
echo "Configuring LXC container for '$opt'!"
LXC_NESTING="1"
break
;;
matrix)
echo "Install Matrix chat server and element web service"
break
;;
quit)
echo "Script aborted by user interaction."
exit 0
;;
*)
echo "Invalid option! Exiting..."
exit 1
;;
esac
done
2021-04-07 22:20:10 +02:00
# CHeck is the newest template available, else download it.
DEB_LOC=$(pveam list $LXC_TEMPLATE_STORAGE | grep debian-10-standard | cut -d'_' -f2)
2021-04-07 22:20:10 +02:00
DEB_REP=$(pveam available --section system | grep debian-10-standard | cut -d'_' -f2)
if [[ $DEB_LOC == $DEB_REP ]];
then
echo "Newest Version of Debian 10 Standard $DEP_REP exists.";
else
echo "Will now download newest Debian 10 Standard $DEP_REP.";
pveam download $LXC_TEMPLATE_STORAGE debian-10-standard_$DEB_REP\_amd64.tar.gz
2021-04-07 22:20:10 +02:00
fi
# Get next free LXC-number
LXC_LST=$( lxc-ls -1 | tail -1 )
2021-04-07 22:20:10 +02:00
LXC_CHK=$((LXC_LST+1));
if [ $LXC_CHK -lt 100 ] || [ -f /etc/pve/qemu-server/$LXC_CHK.conf ]; then
LXC_NBR=$(pvesh get /cluster/nextid);
else
LXC_NBR=$LXC_CHK;
fi
echo "Will now create LXC Container $LXC_NBR!";
# Create the container
pct create $LXC_NBR -unprivileged $LXC_UNPRIVILEGED $LXC_TEMPLATE_STORAGE:vztmpl/debian-10-standard_$DEB_REP\_amd64.tar.gz -rootfs $LXC_ROOTFS_STORAGE:$LXC_ROOTFS_SIZE;
2021-04-07 22:20:10 +02:00
sleep 2;
2021-04-08 20:34:40 +02:00
# Check vlan configuration
if [[ $LXC_VLAN != "" ]];then
2021-04-11 23:36:16 +02:00
VLAN=",tag=$LXC_VLAN"
else
VLAN=""
fi
2021-04-08 20:34:40 +02:00
# Reconfigure conatiner
2021-04-22 19:37:46 +02:00
pct set $LXC_NBR -memory $LXC_MEM -swap $LXC_SWAP -hostname $LXC_HOSTNAME -onboot 1 -timezone $LXC_TIMEZONE -features nesting=$LXC_NESTING;
if [ $LXC_DHCP == true ]; then
2021-04-22 21:18:11 +02:00
pct set $LXC_NBR -net0 name=eth0,bridge=$LXC_BRIDGE,ip=dhcp,type=veth$VLAN;
2021-04-22 19:37:46 +02:00
else
pct set $LXC_NBR -net0 name=eth0,bridge=$LXC_BRIDGE,firewall=1,gw=$LXC_GW,ip=$LXC_IP,type=veth$VLAN -nameserver $LXC_DNS -searchdomain $LXC_DOMAIN;
fi
2021-04-17 10:13:49 +02:00
sleep 2
if [ $LXC_MP -gt 0 ]; then
pct set $LXC_NBR -mp0 $LXC_SHAREFS_STORAGE:$LXC_SHAREFS_SIZE,mp=/$LXC_SHAREFS_MOUNTPOINT
fi
2021-04-07 22:20:10 +02:00
sleep 2;
PS3="Select the Server-Function: "
2021-04-13 23:40:43 +02:00
pct start $LXC_NBR;
2021-04-08 20:34:40 +02:00
sleep 5;
# Set the root password and key
2021-04-20 23:26:12 +02:00
echo "Setting root password"
2021-04-08 20:34:40 +02:00
echo -e "$LXC_PWD\n$LXC_PWD" | lxc-attach -n$LXC_NBR passwd;
2021-04-20 23:26:12 +02:00
echo "Creating /root/.ssh"
lxc-attach -n$LXC_NBR mkdir /root/.ssh;
echo "Copying authorized_keys"
pct push $LXC_NBR $LXC_AUTHORIZED_KEY /root/.ssh/authorized_keys
echo "Copying sources.list"
pct push $LXC_NBR ./sources.list /etc/apt/sources.list
2021-04-20 23:26:12 +02:00
echo "Copying zamba.conf"
2021-04-08 20:34:40 +02:00
pct push $LXC_NBR ./zamba.conf /root/zamba.conf
2021-04-20 23:26:12 +02:00
echo "Copying install script"
2021-04-08 20:34:40 +02:00
pct push $LXC_NBR ./$opt.sh /root/$opt.sh
echo "Install '$opt'!"
2021-04-12 01:49:10 +02:00
lxc-attach -n$LXC_NBR bash /root/$opt.sh
if [[ $opt == "zmb-ad" ]]; then
pct stop $LXC_NBR
pct set $LXC_NBR \-nameserver $(echo $LXC_IP | cut -d'/' -f 1)
pct start $LXC_NBR
2021-04-16 16:58:46 +02:00
fi