Compare commits
38 Commits
Author | SHA1 | Date |
---|---|---|
Milan Meduna | a338e5e026 | |
Milan Meduna | 49c2dd36ad | |
Milan Meduna | 19cef9c844 | |
Milan Meduna | 1fecc47f07 | |
Milan Meduna | 95467063fa | |
Milan Meduna | 6bc63929c4 | |
Milan Meduna | e2254f2fb7 | |
Milan Meduna | 79267154c3 | |
Milan Meduna | 3942645387 | |
Milan Meduna | 839ea82528 | |
Milan Meduna | 62b274d2e8 | |
Milan Meduna | cd47ef45e7 | |
root | 2716d5c54e | |
root | 4c29455bfb | |
root | 3fbeb460c0 | |
root | 237fe1eeff | |
root | acc49ac7fc | |
root | b30ab554be | |
root | 8c6c427fb9 | |
milanm | 1607afb78b | |
Milan Meduna | 7b6ccc4806 | |
Milan Meduna | 18f0220d61 | |
Milan Meduna | 947211c1c3 | |
Milan Meduna | bd0862a9d7 | |
Milan Meduna | ea0c545a4c | |
root | 85a9f8fe13 | |
root | d6cc0fb7f2 | |
root | ea54b3e021 | |
Milan Meduna | 483975199a | |
root | 68572fcea4 | |
root | d32f287de5 | |
root | 4e96d430d9 | |
Milan Meduna | a256a06f42 | |
Milan Meduna | 8b0fbc61e2 | |
Milan Meduna | 5c2fd28b83 | |
Milan Meduna | 018ebf7563 | |
Milan Meduna | 1687ec1c30 | |
Milan Meduna | 8cb2cfcbe0 |
20
README.md
20
README.md
|
@ -1,12 +1,20 @@
|
||||||
__Features:__
|
__Features:__
|
||||||
|
|
||||||
setup-usl-mm_install_requirements ->
|
copy_containers ->
|
||||||
configure main and universe repo in sources.list,
|
script for easy bulk container migrate via SSH between instalations of usl-mm, is also possible use it in non-interactive mode with parameters in this order: container-name, destination-host, destination-port(optional)
|
||||||
install dialog utility
|
|
||||||
|
|
||||||
setup-usl-mm
|
zfs-backup-mm-example-config ->
|
||||||
|
example config for zfs-backup-mm script, that backup all running containers, except those with "testing" or "deluge "in container name.
|
||||||
|
|
||||||
|
setup-usl-mm_install_requirements ->
|
||||||
|
configure main and universe repo in sources.list, install dialog utility
|
||||||
|
|
||||||
|
usl-mm-bionic-upgrade ->
|
||||||
|
replace current release codename with codename in first argument, upgrade LXD to 4.16 SNAP version, upgrade system, replace some lines in /root/onstart, reboot
|
||||||
|
|
||||||
|
setup-usl-mm ->
|
||||||
1. Pre-reboot script ->
|
1. Pre-reboot script ->
|
||||||
install zfs-utils and disable zpool auto-scrub,
|
install zfs-utils,
|
||||||
change timezone to Prague,
|
change timezone to Prague,
|
||||||
crypt swap partition with ecryptfs-utils,
|
crypt swap partition with ecryptfs-utils,
|
||||||
crypt some partition with dmcrypt to use with /var/lib/lxd and LXD ZFS storage,
|
crypt some partition with dmcrypt to use with /var/lib/lxd and LXD ZFS storage,
|
||||||
|
@ -27,7 +35,7 @@ for sure, stop lxd service and delete everything in /var/lib/lxd/*,
|
||||||
exec /root/onstart to decrypt partition and import zpool,
|
exec /root/onstart to decrypt partition and import zpool,
|
||||||
configure LXD to use encrypted partition as storage,
|
configure LXD to use encrypted partition as storage,
|
||||||
add some config to /root/.screenrc (for gnuscreen utility),
|
add some config to /root/.screenrc (for gnuscreen utility),
|
||||||
install htop mc zfsnap smartmontools and screen
|
install htop mc zfsnap smartmontools screen and pv
|
||||||
|
|
||||||
3. Install uptrack-upgrade ->
|
3. Install uptrack-upgrade ->
|
||||||
install ksplice tool for kernel live patching
|
install ksplice tool for kernel live patching
|
||||||
|
|
|
@ -0,0 +1,218 @@
|
||||||
|
#!/bin/bash
|
||||||
|
CONTS_LIST=$(lxc list | grep "RUNNING\|STOPPED" | awk {'print $2'})
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "No arguments supplied, doing interactive mode"
|
||||||
|
sleep 1
|
||||||
|
let i=0
|
||||||
|
W=()
|
||||||
|
while read -r line;
|
||||||
|
do
|
||||||
|
let i=$i+1
|
||||||
|
W+=($i "$line" off)
|
||||||
|
done < <( echo "$CONTS_LIST" )
|
||||||
|
CONTS=$(dialog --checklist "Choose containers to copy" 24 80 17 "${W[@]}" 3>&2 2>&1 1>&3)
|
||||||
|
DEST_IP=$(dialog --inputbox "Enter destination IP:" 25 25 --output-fd 1)
|
||||||
|
DEST_PORT=$(dialog --inputbox "Enter destination SSH port(leave blank for default 22):" 25 25 --output-fd 1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -z "$1" ]]; then
|
||||||
|
if [[ ! -z "$2" ]]; then
|
||||||
|
CONTS=$(echo "$CONTS_LIST" | nl | grep "$1" | awk {'print $1'})
|
||||||
|
DEST_IP="$2"
|
||||||
|
DEST_PORT="$3"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -z "$DEST_PORT" ] && DEST_PORT=22
|
||||||
|
|
||||||
|
|
||||||
|
DEST_ZPOOL=$(echo crypt)
|
||||||
|
DEST_ZPOOL_2=$(echo storage)
|
||||||
|
|
||||||
|
DATASETS=$(zfs list)
|
||||||
|
SNAPS=$(zfs list -t snapshot)
|
||||||
|
DEST_SNAPS=$(ssh $DEST_IP -p $DEST_PORT zfs list -t snapshot); (($? != 0)) && { echo "SSH command to fill DEST_SNAPS exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
|
||||||
|
bionic_checker=$(ssh $DEST_IP -p $DEST_PORT lsb_release -c | awk {'print $2'}); (($? != 0)) && { echo "SSH command to fill bionic_checker exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
for CONT in $CONTS;
|
||||||
|
do
|
||||||
|
CONT_VAR=$(echo "$CONTS_LIST"| sed -n "`echo "$CONT p" | sed 's/ //'`")
|
||||||
|
SNAPS_CLEANED=$(echo "$SNAPS" | grep crypt | grep lxd | grep storage | grep containers | grep -E "....-..-.._........--.d" | awk {'print $1'} | grep "$CONT_VAR"@)
|
||||||
|
DEST_SNAPS_CLEANED=$(echo "$DEST_SNAPS" | grep crypt | grep lxd | grep storage | grep containers | grep -E "....-..-.._........--.d" | awk {'print $1'} | grep "$CONT_VAR"@)
|
||||||
|
SOURCE_DEST_IDENTICAL_SNAPS=$(grep -Fxf <(echo "$SNAPS_CLEANED") <(echo "$DEST_SNAPS_CLEANED"))
|
||||||
|
SNAP_TO_SEND_FIRST=$(echo "$SOURCE_DEST_IDENTICAL_SNAPS" | tail -n1)
|
||||||
|
DATASET_VAR=$(echo "$DATASETS" | grep crypt | grep lxd | grep storage | grep containers | awk {'print $1'} | grep -E "$CONT_VAR"$)
|
||||||
|
DATASET_RECORDSIZE_VAR=$(zfs get recordsize -H -o value "$DATASET_VAR")
|
||||||
|
DATASET_ATIME_VAR=$(zfs get atime -H -o value "$DATASET_VAR")
|
||||||
|
DATASET_RELATIME_VAR=$(zfs get relatime -H -o value "$DATASET_VAR")
|
||||||
|
DATASET_QUOTA_VAR=$(zfs get quota -H -o value "$DATASET_VAR")
|
||||||
|
|
||||||
|
SNAP_TO_SEND_FIRST_FOR_LATER_CHECK=$(echo "$SNAP_TO_SEND_FIRST")
|
||||||
|
IFS="
|
||||||
|
"
|
||||||
|
|
||||||
|
echo "Start move "$CONT_VAR""
|
||||||
|
|
||||||
|
if [ -z "$SNAP_TO_SEND_FIRST" ]
|
||||||
|
then
|
||||||
|
|
||||||
|
if [ -z "$SNAPS_CLEANED" ]
|
||||||
|
then
|
||||||
|
|
||||||
|
echo "Creating first snapshot"
|
||||||
|
for command in $(zfSnap -n -zpool28fix -a 7d "$DATASET_VAR" | grep snapshot | grep "$DATASET_VAR")
|
||||||
|
do
|
||||||
|
SNAP_TO_SEND_FIRST=$(echo "$command" | awk '{print $3}')
|
||||||
|
echo "Doing "$command""
|
||||||
|
eval "$command";
|
||||||
|
done
|
||||||
|
|
||||||
|
else
|
||||||
|
SNAP_TO_SEND_FIRST=$(echo "$SNAPS_CLEANED" | tail -n 48 | head -n 1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Sending first snapshot"
|
||||||
|
echo "Sending "$SNAP_TO_SEND_FIRST""
|
||||||
|
zfs send "$SNAP_TO_SEND_FIRST" | lzop | pv | ssh "$DEST_IP" -p $DEST_PORT "lzop -d | zfs recv -o recordsize="$DATASET_RECORDSIZE_VAR" -o atime="$DATASET_ATIME_VAR" -o relatime="$DATASET_RELATIME_VAR" -o quota="$DATASET_QUOTA_VAR" "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR""; (($? != 0)) && { echo "SSH command to send first snapshot exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
|
||||||
|
echo "Sleep 2"
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Creating second snapshot"
|
||||||
|
for command in $(zfSnap -n -zpool28fix -a 7d "$DATASET_VAR" | grep snapshot | grep "$DATASET_VAR")
|
||||||
|
do
|
||||||
|
SNAP_TO_SEND_SECOND=$(echo "$command" | awk '{print $3}')
|
||||||
|
echo "Doing "$command""
|
||||||
|
eval "$command";
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Sending second snapshot"
|
||||||
|
echo "Sending "$SNAP_TO_SEND_FIRST" to "$SNAP_TO_SEND_SECOND" with -I parameter"
|
||||||
|
zfs send -I "$SNAP_TO_SEND_FIRST" "$SNAP_TO_SEND_SECOND" | lzop | pv | ssh "$DEST_IP" -p $DEST_PORT "lzop -d | zfs recv -o recordsize="$DATASET_RECORDSIZE_VAR" -o atime="$DATASET_ATIME_VAR" -o relatime="$DATASET_RELATIME_VAR" -o quota="$DATASET_QUOTA_VAR" "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR" -F"; (($? != 0)) && { echo "SSH command to send second snapshot exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
echo "Sleep 2"
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
echo "Creating third snapshot"
|
||||||
|
for command in $(zfSnap -n -zpool28fix -a 7d "$DATASET_VAR" | grep snapshot | grep "$DATASET_VAR")
|
||||||
|
do
|
||||||
|
SNAP_TO_SEND_THIRD=$(echo "$command" | awk '{print $3}')
|
||||||
|
echo "Doing "$command""
|
||||||
|
eval "$command";
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Sending third snapshot"
|
||||||
|
echo "Sending "$SNAP_TO_SEND_SECOND" to "$SNAP_TO_SEND_THIRD""
|
||||||
|
zfs send -i "$SNAP_TO_SEND_SECOND" "$SNAP_TO_SEND_THIRD" | lzop | pv | ssh "$DEST_IP" -p $DEST_PORT "lzop -d | zfs recv -o recordsize="$DATASET_RECORDSIZE_VAR" -o atime="$DATASET_ATIME_VAR" -o relatime="$DATASET_RELATIME_VAR" -o quota="$DATASET_QUOTA_VAR" "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR" -F"; (($? != 0)) && { echo "SSH command to send third snapshot exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
echo "Sleep 2"
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
echo "Creating fourth snapshot"
|
||||||
|
for command in $(zfSnap -n -zpool28fix -a 7d "$DATASET_VAR" | grep snapshot | grep "$DATASET_VAR")
|
||||||
|
do
|
||||||
|
SNAP_TO_SEND_FOURTH=$(echo "$command" | awk '{print $3}')
|
||||||
|
echo "Doing "$command""
|
||||||
|
eval "$command";
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Sending fourth snapshot"
|
||||||
|
echo "Sending "$SNAP_TO_SEND_THIRD" to "$SNAP_TO_SEND_FOURTH""
|
||||||
|
zfs send -i "$SNAP_TO_SEND_THIRD" "$SNAP_TO_SEND_FOURTH" | lzop | pv | ssh "$DEST_IP" -p $DEST_PORT "lzop -d | zfs recv -o recordsize="$DATASET_RECORDSIZE_VAR" -o atime="$DATASET_ATIME_VAR" -o relatime="$DATASET_RELATIME_VAR" -o quota="$DATASET_QUOTA_VAR" "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR" -F"; (($? != 0)) && { echo "SSH command to send fourth snapshot exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
echo "Sleep 2"
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
echo "Stopping "$CONT_VAR" on source"
|
||||||
|
lxc stop "$CONT_VAR" --timeout 30; (($? != 0)) && echo "lxc stop timed-out after 30 seconds, doing with force parameter" && lxc stop "$CONT_VAR" --force
|
||||||
|
|
||||||
|
echo "Sleep 2"
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
echo "Creating fifth snapshot"
|
||||||
|
for command in $(zfSnap -n -zpool28fix -a 7d "$DATASET_VAR" | grep snapshot | grep "$DATASET_VAR")
|
||||||
|
do
|
||||||
|
SNAP_TO_SEND_FIFTH=$(echo "$command" | awk '{print $3}')
|
||||||
|
echo "Doing "$command""
|
||||||
|
eval "$command";
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Sending fifth snapshot"
|
||||||
|
echo "Sending "$SNAP_TO_SEND_FOURTH" to "$SNAP_TO_SEND_FIFTH""
|
||||||
|
zfs send -i "$SNAP_TO_SEND_FOURTH" "$SNAP_TO_SEND_FIFTH" | lzop | pv | ssh "$DEST_IP" -p $DEST_PORT "lzop -d | zfs recv -o recordsize="$DATASET_RECORDSIZE_VAR" -o atime="$DATASET_ATIME_VAR" -o relatime="$DATASET_RELATIME_VAR" -o quota="$DATASET_QUOTA_VAR" "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR" -F"; (($? != 0)) && { echo "SSH command to send fifth snapshot exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
if [ $bionic_checker == bionic ]
|
||||||
|
then
|
||||||
|
|
||||||
|
if [ -z "$SNAP_TO_SEND_FIRST_FOR_LATER_CHECK" ]
|
||||||
|
then
|
||||||
|
|
||||||
|
echo "Setting up mountpoint on destination for "$CONT_VAR""
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT zfs set mountpoint=/var/lib/lxd/storage-pools/"$DEST_ZPOOL_2"/containers/"$CONT_VAR" "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR"; (($? != 0)) && { echo "SSH command to setup mountpoint on destination exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
echo "Fixing config for bionic"
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT sed -i '/volatile.idmap.current/d' /var/lib/lxd/storage-pools/"$DEST_ZPOOL_2"/containers/"$CONT_VAR"/backup.yaml; (($? != 0)) && { echo "SSH command to setup volatile.idmap exited with non-zero"; exit 1; }
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT sed -i '/volatile.uuid/d' /var/lib/lxd/storage-pools/"$DEST_ZPOOL_2"/containers/"$CONT_VAR"/backup.yaml; (($? != 0)) && { echo "SSH command to setup volatile.uuid exited with non-zero"; exit 1; }
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT sed -i '/volatile.cloud-init.instance-id/d' /var/lib/lxd/storage-pools/"$DEST_ZPOOL_2"/containers/"$CONT_VAR"/backup.yaml; (($? != 0)) && { echo "SSH command to setup volatile.cloud-init.instance-id exited with non-zero"; exit 1; }
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT sed -i '/volatile.last_state.ready/d' /var/lib/lxd/storage-pools/"$DEST_ZPOOL_2"/containers/"$CONT_VAR"/backup.yaml; (($? != 0)) && { echo "SSH command to setup volatile.last_state.ready exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
echo "Importing "$CONT_VAR" on destination"
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT lxd import "$CONT_VAR" --force; (($? != 0)) && { echo "SSH command to import container exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Starting "$CONT_VAR" on destination"
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT lxc start "$CONT_VAR"; (($? != 0)) && { echo "SSH command to start container exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
echo " "
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
if [ -z "$SNAP_TO_SEND_FIRST_FOR_LATER_CHECK" ]
|
||||||
|
then
|
||||||
|
echo "Setting up mountpoint on destination for "$CONT_VAR""
|
||||||
|
target_snap_version=$(ssh "$DEST_IP" -p $DEST_PORT snap info lxd| grep tracking: | awk {'print $2'} | cut -d"/" -f-1 | cut -d"." -f-1); (($? != 0)) && { echo "SSH command to fill target_snap_version exited with non-zero"; exit 1; }
|
||||||
|
if [[ "$target_snap_version" == 4 ]]
|
||||||
|
then
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT zfs set canmount=noauto "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR"; (($? != 0)) && { echo "SSH command to setup mountpoint on destination exited with non-zero"; exit 1; }
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT zfs set mountpoint=/var/snap/lxd/common/lxd/storage-pools/"$DEST_ZPOOL_2"/containers/"$CONT_VAR" "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR"; (($? != 0)) && { echo "SSH command to setup mountpoint on destination exited with non-zero"; exit 1; }
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT zfs mount "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR"; (($? != 0)) && { echo "SSH command to setup mountpoint on destination exited with non-zero"; exit 1; }
|
||||||
|
REMOTE_LXD_PID=$(ssh "$DEST_IP" -p $DEST_PORT cat /var/snap/lxd/common/lxd.pid); (($? != 0)) && { echo "SSH command to get REMOTE_LXD_PID on destination exited with non-zero"; exit 1; }
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT "nsenter -t $REMOTE_LXD_PID -m bash -c \"mount -t zfs "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR" /var/snap/lxd/common/lxd/storage-pools/"$DEST_ZPOOL_2"/containers/"$CONT_VAR"\""; (($? != 0)) && { echo "SSH command to set REMOTE_LXD_PID on destination exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
echo "Fixing config for lxd version 4"
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT sed -i '/volatile.cloud-init.instance-id/d' /var/snap/lxd/common/lxd/storage-pools/"$DEST_ZPOOL_2"/containers/"$CONT_VAR"/backup.yaml; (($? != 0)) && { echo "SSH command to setup volatile.cloud-init.instance-id exited with non-zero"; exit 1; }
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT sed -i '/volatile.last_state.ready/d' /var/snap/lxd/common/lxd/storage-pools/"$DEST_ZPOOL_2"/containers/"$CONT_VAR"/backup.yaml; (($? != 0)) && { echo "SSH command to setup volatile.last_state.ready exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
echo "Importing "$CONT_VAR" on destination"
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT /snap/bin/lxd import "$CONT_VAR" --force; (($? != 0)) && { echo "SSH command to import container exited with non-zero"; exit 1; }
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT zfs umount "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR"; (($? != 0)) && { echo "SSH command to import container exited with non-zero"; exit 1; }
|
||||||
|
else
|
||||||
|
|
||||||
|
echo "Doing lxd recover"
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT zfs set mountpoint=legacy "$DEST_ZPOOL"/lxd/storage/containers/"$CONT_VAR"; (($? != 0)) && { echo "SSH command to setup mountpoint=legacy on destination exited with non-zero"; exit 1; }
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT "cat <<EOF | lxd recover
|
||||||
|
no
|
||||||
|
yes
|
||||||
|
yes
|
||||||
|
EOF"; (($? != 0)) && { echo "SSH command lxd recover exited with non-zero"; exit 1; }
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Starting "$CONT_VAR" on destination"
|
||||||
|
ssh "$DEST_IP" -p $DEST_PORT /snap/bin/lxc start "$CONT_VAR"; (($? != 0)) && { echo "SSH command to start container exited with non-zero"; exit 1; }
|
||||||
|
|
||||||
|
echo " "
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
33
setup-usl-mm
33
setup-usl-mm
|
@ -21,14 +21,11 @@ lsblk
|
||||||
read -p "Enter partition to encrypt:" PARTITION
|
read -p "Enter partition to encrypt:" PARTITION
|
||||||
|
|
||||||
echo "Installing requirements"
|
echo "Installing requirements"
|
||||||
apt install cryptsetup ecryptfs-utils zfsutils-linux -y
|
apt install cryptsetup ecryptfs-utils zfsutils-linux lzop -y
|
||||||
|
|
||||||
echo "Setting timezone to Prague"
|
echo "Setting timezone to Prague"
|
||||||
timedatectl set-timezone Europe/Prague
|
timedatectl set-timezone Europe/Prague
|
||||||
|
|
||||||
echo "Disabling zpool auto-scrub"
|
|
||||||
sed -i 's/^/#/' /etc/cron.d/zfsutils-linux
|
|
||||||
|
|
||||||
echo "Starting ecryptfs-setup-swap"
|
echo "Starting ecryptfs-setup-swap"
|
||||||
ecryptfs-setup-swap -f
|
ecryptfs-setup-swap -f
|
||||||
|
|
||||||
|
@ -64,10 +61,18 @@ echo "Configuring sysctl"
|
||||||
echo "vm.swappiness = 1" > /etc/sysctl.d/50-usl-mm.conf
|
echo "vm.swappiness = 1" > /etc/sysctl.d/50-usl-mm.conf
|
||||||
echo "vm.min_free_kbytes = 131072" >> /etc/sysctl.d/50-usl-mm.conf
|
echo "vm.min_free_kbytes = 131072" >> /etc/sysctl.d/50-usl-mm.conf
|
||||||
echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.d/50-usl-mm.conf
|
echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.d/50-usl-mm.conf
|
||||||
|
echo "fs.inotify.max_queued_events = 1048576" >> /etc/sysctl.d/50-usl-mm.conf
|
||||||
|
echo "fs.inotify.max_user_instances = 1048576" >> /etc/sysctl.d/50-usl-mm.conf
|
||||||
|
echo "fs.inotify.max_user_watches = 1048576" >> /etc/sysctl.d/50-usl-mm.conf
|
||||||
|
echo "kernel.dmesg_restrict = 1" >> /etc/sysctl.d/50-usl-mm.conf
|
||||||
|
echo "net.netfilter.nf_conntrack_max = 4194304" >> /etc/sysctl.d/50-usl-mm.conf
|
||||||
|
#Ugly fix
|
||||||
|
echo "@reboot root /sbin/sysctl -w net.netfilter.nf_conntrack_max=4194304" > /etc/cron.d/conntrack_cron
|
||||||
|
|
||||||
echo "Configuring arc cache for zfs to min 256MB and max 1536MB"
|
echo "Configuring arc cache for zfs to min 256MB and max 1536MB + txg_timeout to 3"
|
||||||
echo "options zfs zfs_arc_min=268435456" > /etc/modprobe.d/zfs.conf
|
echo "options zfs zfs_arc_min=268435456" > /etc/modprobe.d/zfs.conf
|
||||||
echo "options zfs zfs_arc_max=1610612736" >> /etc/modprobe.d/zfs.conf
|
echo "options zfs zfs_arc_max=1610612736" >> /etc/modprobe.d/zfs.conf
|
||||||
|
echo "options zfs zfs_txg_timeout=3" >> /etc/modprobe.d/zfs.conf
|
||||||
|
|
||||||
echo "Doing update-initramfs -u"
|
echo "Doing update-initramfs -u"
|
||||||
update-initramfs -u
|
update-initramfs -u
|
||||||
|
@ -89,6 +94,10 @@ echo " bridge_ports $NET_IF" >> /etc/network/interfaces
|
||||||
echo " bridge_stp off" >> /etc/network/interfaces
|
echo " bridge_stp off" >> /etc/network/interfaces
|
||||||
echo " bridge_fd 0" >> /etc/network/interfaces
|
echo " bridge_fd 0" >> /etc/network/interfaces
|
||||||
|
|
||||||
|
echo "Add DNS to systemd-resolved"
|
||||||
|
echo "[Resolve]" > /etc/systemd/resolved.conf
|
||||||
|
echo "DNS=8.8.8.8" >> /etc/systemd/resolved.conf
|
||||||
|
echo "FallbackDNS=1.1.1.1" >> /etc/systemd/resolved.conf
|
||||||
|
|
||||||
echo "Purging netplan,disabling dhcpcd and install ifupdown"
|
echo "Purging netplan,disabling dhcpcd and install ifupdown"
|
||||||
apt purge nplan -y
|
apt purge nplan -y
|
||||||
|
@ -168,10 +177,18 @@ echo "scrollback 5000" >> /root/.screenrc
|
||||||
echo "hardstatus string \"%{=b kw} %?%-Lw%?%{=br kw}[%n %t]%{=b kw}%?%+Lw%? %= %c\"" >> /root/.screenrc
|
echo "hardstatus string \"%{=b kw} %?%-Lw%?%{=br kw}[%n %t]%{=b kw}%?%+Lw%? %= %c\"" >> /root/.screenrc
|
||||||
|
|
||||||
echo "Install utilities"
|
echo "Install utilities"
|
||||||
apt install -y mc htop screen zfsnap smartmontools
|
apt install -y mc htop screen zfsnap smartmontools pv
|
||||||
|
|
||||||
echo "Set max processes to 1500 in default profile in LXD"
|
echo "Setting-up wireguard"
|
||||||
lxc profile set default limits.processes 1500
|
apt update
|
||||||
|
apt install wireguard -y
|
||||||
|
lxc profile set default linux.kernel_modules wireguard
|
||||||
|
|
||||||
|
echo "Set max processes to 3000 in default profile in LXD"
|
||||||
|
lxc profile set default limits.processes 3000
|
||||||
|
|
||||||
|
echo "Set refresh.retain=2 in snap"
|
||||||
|
snap set system refresh.retain=2
|
||||||
|
|
||||||
read -p "Done, press any key to return to main menu"
|
read -p "Done, press any key to return to main menu"
|
||||||
main_menu
|
main_menu
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Use with first argument with codename of new ubuntu distro(eoan,focal, etc)
|
||||||
|
IFS='
|
||||||
|
'
|
||||||
|
current_release=$(lsb_release -c | awk {'print $2'})
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
apt update
|
||||||
|
apt dist-upgrade -y -o Dpkg::Options::="--force-confold"
|
||||||
|
apt install rpl -y
|
||||||
|
snap install --channel 4.16/stable lxd
|
||||||
|
if [ $current_release == bionic ]; then
|
||||||
|
lxd.migrate -yes
|
||||||
|
fi
|
||||||
|
zfs set mountpoint=/var/snap/lxd/common/lxd crypt/lxd/dir
|
||||||
|
rpl $current_release $1 /etc/apt/sources.list
|
||||||
|
rpl $current_release $1 /etc/apt/sources.list.d/*
|
||||||
|
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82562EA9AD986DA3
|
||||||
|
apt update
|
||||||
|
apt dist-upgrade -y -o Dpkg::Options::="--force-confold"
|
||||||
|
|
||||||
|
echo "Creating onstart-new script in /root"
|
||||||
|
echo "#!/bin/bash" > /root/onstart-new
|
||||||
|
echo "read -p \"Press any button to start...\"" >> /root/onstart-new
|
||||||
|
echo "pass_var=\$(dialog --passwordbox \"Enter password:\" 25 25 --output-fd 1)" >> /root/onstart-new
|
||||||
|
echo "pass_var2=\$(dialog --passwordbox \"Enter password again:\" 25 25 --output-fd 1)" >> /root/onstart-new
|
||||||
|
echo "if [ \"\$pass_var\" == \"\$pass_var2\" ]; then" >> /root/onstart-new
|
||||||
|
echo "echo \"Passwords match!\"" >> /root/onstart-new
|
||||||
|
echo "else" >> /root/onstart-new
|
||||||
|
echo "echo \"Passwords not match!\"" >> /root/onstart-new
|
||||||
|
echo "exit 1" >> /root/onstart-new
|
||||||
|
echo "fi" >> /root/onstart-new
|
||||||
|
echo "echo \"Stopping LXD snap daemon and deleting /var/snap/lxd/common/lxd/*\"" >> /root/onstart-new
|
||||||
|
echo "snap disable lxd" >> /root/onstart-new
|
||||||
|
echo "rm /var/snap/lxd/common/lxd/* -rf" >> /root/onstart-new
|
||||||
|
echo "echo \"Opening encrypted partition\"" >> /root/onstart-new
|
||||||
|
for i in $(cat /root/onstart | grep "cryptsetup open")
|
||||||
|
do echo "$i" >> /root/onstart-new
|
||||||
|
done
|
||||||
|
echo "partprobe" >> /root/onstart-new
|
||||||
|
for i in $(cat /root/onstart | grep "zpool import")
|
||||||
|
do echo "$i" >> /root/onstart-new
|
||||||
|
done
|
||||||
|
echo "snap enable lxd" >> /root/onstart-new
|
||||||
|
for i in $(cat /root/onstart | grep "iptables")
|
||||||
|
do echo "$i" >> /root/onstart-new
|
||||||
|
done
|
||||||
|
for i in $(cat /root/onstart | grep "firewall")
|
||||||
|
do echo "$i" >> /root/onstart-new
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "cryptdisks_start cryptswap1" >> /root/onstart-new
|
||||||
|
echo "swapon -a" >> /root/onstart-new
|
||||||
|
|
||||||
|
chmod +x /root/onstart-new
|
||||||
|
|
||||||
|
mv /root/onstart /root/onstart-old
|
||||||
|
mv /root/onstart-new /root/onstart
|
||||||
|
|
||||||
|
zfs set mountpoint=/var/snap/lxd/common/lxd crypt/lxd/dir
|
||||||
|
|
||||||
|
snap switch --channel 5.19/stable lxd
|
||||||
|
snap refresh
|
||||||
|
|
||||||
|
apt install uptrack -y
|
||||||
|
|
||||||
|
read -p "Press any key for reboot"
|
||||||
|
reboot
|
|
@ -0,0 +1,28 @@
|
||||||
|
#Backup server settings
|
||||||
|
|
||||||
|
backup_server="192.168.0.10"
|
||||||
|
backup_server_port="22"
|
||||||
|
backup_server_ipv=4
|
||||||
|
backup_server_dataset="tank/backups"
|
||||||
|
backup_server_delete_old_snaps=y
|
||||||
|
backup_server_number_keep_snaps=31
|
||||||
|
|
||||||
|
shape_megabytes=20
|
||||||
|
#Source server settings
|
||||||
|
#DO NOT CHANGE zfsnap_days_keep_snaps AFTER FIRST FULL BACKUP!
|
||||||
|
|
||||||
|
zfsnap_enable=y
|
||||||
|
zfsnap_days_keep_snaps=7
|
||||||
|
|
||||||
|
running_containers=$(lxc list | grep RUNNING | awk {'print $2'})
|
||||||
|
stopped_containers=$(lxc list | grep STOPPED | awk {'print $2'})
|
||||||
|
|
||||||
|
excluded_strings="deluge\|testing"
|
||||||
|
|
||||||
|
if [ -z "$stopped_containers" ]
|
||||||
|
then
|
||||||
|
source_datasets="$(zfs list | awk {'print $1'} | grep "crypt/lxd/storage/containers" | grep -ve "crypt/lxd/storage/containers$" | grep -e "$running_containers" | grep -ve "$excluded_strings")"
|
||||||
|
else
|
||||||
|
source_datasets="$(zfs list | awk {'print $1'} | grep "crypt/lxd/storage/containers" | grep -ve "crypt/lxd/storage/containers$" | grep -e "$running_containers" | grep -ve "$stopped_containers" | grep -ve "$excluded_strings")"
|
||||||
|
fi
|
||||||
|
|
Loading…
Reference in New Issue