Usage:
./lxcupdate.sh container1 container2 container3
Usage:
./lxcupdate.sh container1 container2 container3
| #!/bin/bash | |
| ### | |
| # Update LXC Container with automatic Snapshot | |
| # Author: Sebastian Preisner | |
| # Version: 0.1 | |
| # Date: 2016-07-24 | |
| ### | |
| DATE=$(date +%Y%m%dT%H%M) | |
| function update() { | |
| # Check if Container is Running or not | |
| if [[ `lxc-info -n ${1} -s` == *"RUNNING"* ]]; then | |
| RUNNING=true | |
| echo "=== Stop running container ===" | |
| lxc-stop -n ${1} || { echo "lxc-stop failed"; exit 1; } | |
| else | |
| RUNNING=false | |
| fi | |
| # Create the Snapshot | |
| echo "=== Container Snapshot ===" | |
| echo "Automatical Backup ${Date}" > /tmp/snap-comm | |
| lxc-snapshot -n ${1} -c /tmp/snap-comm || { echo "lxc-snapshot failed"; rm /tmp/snap-comm; exit 1; } | |
| rm /tmp/snap-comm | |
| # Start Container for the Updateprocess | |
| echo "=== Container Start/Update ===" | |
| lxc-start -n $1 -d || { echo "lxc-start failed"; exit 1; } | |
| lxc-wait -n $1 -s 'RUNNING' | |
| sleep 5 | |
| ## For ArchLinux | |
| lxc-attach -n $1 -- pacman -Syy | |
| lxc-attach -n $1 -- pacman -Suw --noconfirm | |
| #lxc-attach -n $1 -- pacman -Su --noconfirm | |
| ## For Debian based systems | |
| #lxc-attach -n $1 -- apt-get -qq update for Debian based systems | |
| #lxc-attach -n $1 -- apt-get -qq -y upgrade | |
| #lxc-attach -n $1 -- apt-get -qq -y clean | |
| #lxc-attach -n $1 -- apt-get -qq -y autoclean | |
| #lxc-attach -n $1 -- apt-get -qq autoremove | |
| # Stop Container if not running on start | |
| if [[ ${RUNNING} == false ]]; then | |
| echo "=== Stop container ===" | |
| lxc-stop -n $1 | |
| fi | |
| echo "=== Update complete ===" | |
| } | |
| # Function to check if container exist | |
| function containerExist() { | |
| local e | |
| for e in `lxc-ls`; do | |
| if [[ "$e" == "$1" ]]; then | |
| return 0 | |
| fi | |
| done | |
| return 1 | |
| } | |
| # Loop throw the Commant | |
| while [ $# -gt 0 ]; do | |
| if containerExist ${1}; then | |
| echo "=== Update ${1} ===" | |
| update ${1} | |
| else | |
| echo "=== Container dosn't exist ===" | |
| echo "Container: ${1}" | |
| fi | |
| shift | |
| done |