Initial commit
This commit is contained in:
commit
ee007e28fb
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
variables.conf
|
||||||
|
.disabled
|
18
README.md
Normal file
18
README.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Containers management
|
||||||
|
|
||||||
|
These scripts and Systemd units manage the daily snapshoting of our Nspawn containers, and update of Docker containers.
|
||||||
|
|
||||||
|
### Introduction
|
||||||
|
All running Nspawn containers are stopped, snapshoted (using Btrfs subvolumes) and restarted
|
||||||
|
|
||||||
|
### Files
|
||||||
|
* `conts-snap.sh` runs the main process, which snapshots the Nspawn containers.
|
||||||
|
* `docker-upgrade.sh` pulls the newest version of running Docker containers.
|
||||||
|
* `variables.conf.template` contains examples variables definitions, and should be copied locally to `variables.conf`
|
||||||
|
(with any required modifications).
|
||||||
|
* `systemd-templates/` contains Systemd units templates for running the scripts unattended.
|
||||||
|
#### Installation
|
||||||
|
* `install.sh` script copies Systemd templates to their destination, and enables conts-snap and docker-upgrade timer.
|
||||||
|
|
||||||
|
### TODO
|
||||||
|
* RAS
|
15
conts-snap.sh
Normal file
15
conts-snap.sh
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source "$(dirname "$0")/variables.conf"
|
||||||
|
|
||||||
|
mount $containers_dir
|
||||||
|
|
||||||
|
cd /var/lib/machines
|
||||||
|
for filename in *; do
|
||||||
|
systemctl start cont-snap@$filename.service
|
||||||
|
btrfs subvolume delete $containers_dir/$filename/$(date -d "-15 days" +"%Y%m%d")*
|
||||||
|
done
|
||||||
|
|
||||||
|
umount $containers_dir
|
||||||
|
|
||||||
|
exit 0
|
24
docker-upgrade.sh
Normal file
24
docker-upgrade.sh
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Upgrade CODE Docker
|
||||||
|
code() {
|
||||||
|
docker pull collabora/code:latest | grep 'Image is up to date' && pulled='no' || pulled='yes'
|
||||||
|
|
||||||
|
if [[ "$pulled" = "yes" ]]; then
|
||||||
|
echo "$(date +%+4Y-%m-%d): Update" >> $logfile_path
|
||||||
|
docker stop CODE
|
||||||
|
docker rm CODE
|
||||||
|
docker run --name 'CODE' -t -d -p 9980:9980 -e 'domain=cloud\\.kto\\.black' --network host --restart always collabora/code
|
||||||
|
else
|
||||||
|
echo "$(date +%+4Y-%m-%d): No update" >> $logfile_path
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
logfile_path='/home/alex/docker-upgrade.log'
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
code
|
||||||
|
|
||||||
|
exit 0
|
47
install.sh
Executable file
47
install.sh
Executable file
@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
run_directory=$(dirname "$0")
|
||||||
|
user=$(whoami)
|
||||||
|
|
||||||
|
source "$run_directory/variables.conf"
|
||||||
|
|
||||||
|
if [ -f $run_directory/.disabled ]; then
|
||||||
|
echo "Installation is disabled. Exiting..."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Copying Systemd units to system directory..."
|
||||||
|
if [[ $user != 'root' ]]; then
|
||||||
|
sudo cp systemd-templates/cont-snap@.service /etc/systemd/system/
|
||||||
|
sudo cp systemd-templates/conts-snap.service /etc/systemd/system/
|
||||||
|
sudo sed -i -e "s:PH_DIRECTORY:$(pwd):g" /etc/systemd/system/conts-snap.service
|
||||||
|
sudo cp systemd-templates/conts-snap.timer /etc/systemd/system/
|
||||||
|
sudo cp systemd-templates/docker-upgrade.service /etc/systemd/system/
|
||||||
|
sudo sed -i -e "s:PH_DIRECTORY:$(pwd):g" /etc/systemd/system/docker-upgrade.service
|
||||||
|
sudo cp systemd-templates/docker-upgrade.timer /etc/systemd/system/
|
||||||
|
sudo cp systemd-templates/machines-start.service /etc/systemd/system/
|
||||||
|
else
|
||||||
|
cp systemd-templates/cont-snap@.service /etc/systemd/system/
|
||||||
|
cp systemd-templates/conts-snap.service /etc/systemd/system/
|
||||||
|
sed -i -e "s:PH_DIRECTORY:$(pwd):g" /etc/systemd/system/conts-snap.service
|
||||||
|
cp systemd-templates/conts-snap.timer /etc/systemd/system/
|
||||||
|
cp systemd-templates/docker-upgrade.service /etc/systemd/system/
|
||||||
|
sed -i -e "s:PH_DIRECTORY:$(pwd):g" /etc/systemd/system/docker-upgrade.service
|
||||||
|
cp systemd-templates/docker-upgrade.timer /etc/systemd/system/
|
||||||
|
cp systemd-templates/machines-start.service /etc/systemd/system/
|
||||||
|
fi
|
||||||
|
echo "Reloading Systemd..."
|
||||||
|
if [[ $user != 'root' ]]; then
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
else
|
||||||
|
systemctl daemon-reload
|
||||||
|
fi
|
||||||
|
echo "Enabling timer (not starting it, either do it manually or reboot)..."
|
||||||
|
if [[ $user != 'root' ]]; then
|
||||||
|
sudo systemctl enable conf-sync.timer
|
||||||
|
else
|
||||||
|
systemctl enable conf-sync.timer
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Finished install. Exiting..."
|
||||||
|
exit 0
|
14
systemd-templates/cont-snap@.service
Normal file
14
systemd-templates/cont-snap@.service
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Snapshot %i container
|
||||||
|
Requisite=systemd-nspawn@%i.service
|
||||||
|
Wants=mnt-containers.mount
|
||||||
|
After=systemd-nspawn@%i.service mnt-containers.mount
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStartPre=/usr/bin/machinectl stop %i
|
||||||
|
# Hereunder is a bit gross, but we need to make sure container is entirely stopped / 5 sec should be sufficient, but we have a problem with mail container; perhaps this sleep is too late anyway...
|
||||||
|
ExecStart=/usr/bin/bash -c 'sleep 10 && /usr/bin/btrfs subvolume snapshot -r /mnt/containers/%i/current /mnt/containers/%i/$$(date +%%Y%%m%%d)'
|
||||||
|
# As we now get random issues post snap (containers do not always restart...), we add another sleep... Real gros...
|
||||||
|
#ExecStartPost=/usr/bin/machinectl start %i
|
||||||
|
ExecStartPost=/usr/bin/bash -c 'sleep 10 && /usr/bin/machinectl start %i'
|
6
systemd-templates/conts-snap.service
Normal file
6
systemd-templates/conts-snap.service
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Snapshot Nspawn containers
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=PH_DIRECTORY/conts-snap.sh
|
9
systemd-templates/conts-snap.timer
Normal file
9
systemd-templates/conts-snap.timer
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Snapshot Nspawn containers regularly
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=*-*-* 04:00:00
|
||||||
|
Persistent=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
7
systemd-templates/docker-upgrade.service
Normal file
7
systemd-templates/docker-upgrade.service
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Upgrade Docker containers
|
||||||
|
Requisite=docker.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=PH_DIRECTORY/docker-upgrade.sh
|
9
systemd-templates/docker-upgrade.timer
Normal file
9
systemd-templates/docker-upgrade.timer
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Upgrade Docker containers regularly
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=*-*-* 04:30:00
|
||||||
|
Persistent=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
9
systemd-templates/machines-start.timer
Normal file
9
systemd-templates/machines-start.timer
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Make sure containers are started after snapshoting
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
Unit=machines.target
|
||||||
|
OnCalendar=*-*-* 04:15:00
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
5
variables.conf.template
Normal file
5
variables.conf.template
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copy this file as variables.conf, with the correct values
|
||||||
|
|
||||||
|
containers_dir="" # Path to containers subvolumes main directory
|
Loading…
Reference in New Issue
Block a user