#!/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" MACHINES="/var/lib/machines" echo -n "Creating new config files " # FIXME: only touch config files of this system for FILE in "${CONFIG}"/*.conf do CONTAINER="$(basename ${FILE} .conf)" CNT_AUTO="$(awk -F= '/^cnt.auto=/ { print $2 }' ${FILE})" CNT_AUTO="${CNT_AUTO:-FIXME}" 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})" BOOT="${BOOT:-no}" CAPABILITY="$(awk -F= '/^capability=/ { print $2 }' ${FILE})" DIRECTORY="${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}" PRIVATE_USERS="$(awk -F= '/^private-users=/ { print $2 }' ${FILE})" PRIVATE_USERS="${PRIVATE_USERS:-no}" REGISTER="$(awk -F= '/^register=/ { print $2 }' ${FILE})" REGISTER="${REGISTER:-yes}" while read LINE do if echo ${LINE} | grep -qs '^cnt.network-bridge=' then VETH="$(echo ${LINE} | awk -F: '{ print $1 }')" BRIDGE="$(echo ${LINE} | awk -F: '{ print $2 }')" IP="$(ip address show ${VETH} | awk '/inet / { print $2 }' | sed -e 's|/.*||')" CNT_NETWORK_BRIDGE="veth-$(echo ${IP} | awk -F. '{ print $3 }')-$(echo ${IP} | awk -F. '{ print $4 }'):${BRIDGE}" elif echo ${LINE} | grep -qs '^network-veth-extra=' then VETH="$(echo ${LINE} | awk -F: '{ print $1 }')" ETH="$(echo ${LINE} | awk -F: '{ print $2 }')" IP="$(ip address show ${VETH} | awk '/inet / { print $2 }' | sed -e 's|/.*||')" NETWORK_VETH_EXTRA="veth-$(echo ${IP} | awk -F. '{ print $3 }')-$(echo ${IP} | awk -F. '{ print $4 }'):${ETH}" fi done < "${FILE}" 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