#!/bin/sh # container-tools - Manage systemd-nspawn containers # Copyright (C) 2016-2017 David Kunz # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . #set -e CONFIG="/etc/container-tools/config" echo -n "Creating new config files " for FILE in "${CONFIG}"/*.conf do CONTAINER="$(basename ${FILE} .conf)" NET="$(dig @8.8.8.8 +short ${CONTAINER} | awk -F. '{ print $3 }')" IP="$(dig @8.8.8.8 +short ${CONTAINER} | awk -F. '{ print $4 }')" BRIDGE="$(awk -F: '/^cnt.network-bridge=/ { print $2 }' ${FILE})" CNT_AUTO="$(awk -F= '/^cnt.auto=/ { print $2 }' ${FILE})" CNT_AUTO="${CNT_AUTO:-FIXME}" CNT_NETWORK_BRIDGE="veth-${NET}-${IP}:${BRIDGE}" CNT_OVERLAY="$(awk -F= '/^cnt.overlay=/ { print $2 }' ${FILE})" BIND="$(awk -F= '/^bind=/ { print $2 }' ${FILE})" BIND="${BIND:-/srv/data/${CONTAINER}:/srv/${CONTAINER};}" BOOT="$(awk -F= '/^boot=/ { print $2 }' ${FILE})" CAPABILITY="$(awk -F= '/^capability=/ { print $2 }' ${FILE})" DIRECTORY="/var/lib/machines/${CONTAINER}" DROP_CAPABILITY="$(awk -F= '/^drop-capability=/ { print $2 }' ${FILE})" LINK_JOURNAL="$(awk -F= '/^link-journal=/ { print $2 }' ${FILE})" LINK_JOURNAL="${LINK_JOURNAL:-no}" MACHINE="${CONTAINER}" NETWORK_VETH_EXTRA="veth-${NET}-${IP}:eth0" PRIVATE_USERS="$(awk -F= '/^private-users=/ { print $2 }' ${FILE})" PRIVATE_USERS="${PRIVATE_USERS:-no}" REGISTER="$(awk -F= '/^register=/ { print $2 }' ${FILE})" REGISTER="${REGISTER:-yes}" cat > ${FILE}-new << EOF # container-tools: ${CONTAINER} [start] cnt.auto=${CNT_AUTO} cnt.network-bridge=${CNT_NETWORK_BRIDGE} cnt.overlay=${CNT_OVERLAY} bind=${BIND} boot=${BOOT} capability=${CAPABILITY} directory=${DIRECTORY} drop-capability=${DROP_CAPABILITY} link-journal=${LINK_JOURNAL} machine=${MACHINE} network-veth-extra=${NETWORK_VETH_EXTRA} private-users=${PRIVATE_USERS} register=${REGISTER} EOF echo -n "." done echo " done." for FILE in "${CONFIG}"/*.conf-new do if [ ! -e "${CONFIG}/$(basename ${FILE} -new)" ] then continue fi clear echo "diff -Naurp ${CONFIG}/$(basename ${FILE} -new) ${FILE}" diff -Naurp "${CONFIG}/$(basename ${FILE} -new)" "${FILE}" echo echo -n "Accept $(basename ${FILE}) [y|N] " read ACCEPT case "${ACCEPT}" in y|Y) rm -f "${CONFIG}/$(basename ${FILE} -new)" mv "${FILE}" "${CONFIG}/$(basename ${FILE} -new)" ;; esac done