#!/bin/sh # container-tools - Manage systemd-nspawn containers # Copyright (C) 2014-2019 Daniel Baumann # # SPDX-License-Identifier: GPL-3.0+ # # 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 SOFTWARE="container-tools" PROGRAM="container" COMMAND="$(basename ${0})" LC_ALL="C.UTF-8" Usage () { echo "Usage: ${PROGRAM}-shell" >&2 exit 1 } Shell () { COMMAND="${1}" if [ -z "${COMMAND}" ] then return fi shift 1 OPTIONS="${@}" case "${COMMAND}" in about) man ${PROGRAM} || true return ;; logout|exit) exit 0 ;; help) case "${OPTIONS}" in "") echo echo "The following ${PROGRAM} commands are available:" echo cd "/usr/lib/${SOFTWARE}/${PROGRAM}" find . -type f -printf " %f\n" | sort cd "${OLDPWD}" if [ -n "${CONTAINER_COMMANDS_ENABLE}" ] then echo echo "The following container commands are enabled for the current user:" echo " ${CONTAINER_COMMANDS_ENABLE}" fi if [ -n "${CONTAINER_COMMANDS_DISABLE}" ] then echo echo "The following container commands are disabled for the current user:" echo " ${CONTAINER_COMMANDS_DISABLE}" fi echo echo "Use 'help COMMAND' for more information." return ;; *) man ${PROGRAM}-${1} || true return ;; esac ;; esac if [ ! -e "/usr/lib/${SOFTWARE}/${PROGRAM}/${COMMAND}" ] then echo "'${COMMAND}': no such ${PROGRAM} command" >&2 return fi if [ -n "${CONTAINER_COMMANDS_ENABLE}" ] then COMMAND_ALLOWED="" for CONTAINER_COMMAND in ${CONTAINER_COMMANDS_ENABLE} do case "${CONTAINER_COMMAND}" in ${COMMAND}|all|about|logout|exit|help) COMMAND_ALLOWED="true" ;; esac done case "${COMMAND_ALLOWED}" in true) ;; *) echo "'${COMMAND}': command not allowed for current user" >&2 return ;; esac fi if [ -n "${CONTAINER_COMMANDS_DISABLE}" ] then COMMAND_DISALLOWED="" for CONTAINER_COMMAND in ${CONTAINER_COMMANDS_DISABLE} do case "${CONTAINER_COMMAND}" in ${COMMAND}|all|about|logout|exit|help) COMMAND_DISALLOWED="true" ;; esac done case "${COMMAND_DISALLOWED}" in true) echo "'${COMMAND}': command not allowed for current user" >&2 return ;; esac fi echo sudo ${PROGRAM} ${COMMAND} ${OPTIONS} || true } trap 'echo' EXIT HUP INT QUIT TERM echo "${SOFTWARE} $(${PROGRAM} version)" echo "Type \"about\" or \"help\" for more information, \"logout\" to exit." while true do echo echo -n "${PROGRAM}: " read CMDLINE Shell ${CMDLINE} done