From 19599e55600bd19482b0a46c617caaa23e5ff46d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Tue, 25 Oct 2016 15:55:31 +0200 Subject: Readding container enter command. Signed-off-by: Daniel Baumann --- bin/container-nsenter | 22 +++++++++ lib/container/enter | 102 ++++++++++++++++++++++++++++++++++++++++ share/bash-completion/container | 20 ++++++++ share/man/container-enter.1.txt | 72 ++++++++++++++++++++++++++++ share/man/container.1.txt | 3 ++ 5 files changed, 219 insertions(+) create mode 100755 bin/container-nsenter create mode 100755 lib/container/enter create mode 100644 share/man/container-enter.1.txt diff --git a/bin/container-nsenter b/bin/container-nsenter new file mode 100755 index 0000000..7c83361 --- /dev/null +++ b/bin/container-nsenter @@ -0,0 +1,22 @@ +#!/bin/sh + +# container-tools - Manage systemd-nspawn containers +# Copyright (C) 2014-2016 Daniel Baumann +# +# 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 + +# Run +script -c "/bin/bash -l" -q /dev/null diff --git a/lib/container/enter b/lib/container/enter new file mode 100755 index 0000000..4eff504 --- /dev/null +++ b/lib/container/enter @@ -0,0 +1,102 @@ +#!/bin/sh + +# container-tools - Manage systemd-nspawn containers +# Copyright (C) 2014-2016 Daniel Baumann +# +# 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 + +COMMAND="$(basename ${0})" + +MACHINES="/var/lib/machines" + +Parameters () +{ + LONG_OPTIONS="name:," + OPTIONS="n:," + + PARAMETERS="$(getopt --longoptions ${LONG_OPTIONS} --name=${COMMAND} --options ${OPTIONS} --shell sh -- ${@})" + + if [ "${?}" != "0" ] + then + echo "'${COMMAND}': getopt exit" >&2 + exit 1 + fi + + eval set -- "${PARAMETERS}" + + while true + do + case "${1}" in + -n|--name) + NAME="${2}" + shift 2 + ;; + + --) + shift 1 + break + ;; + + *) + echo "'${COMMAND}': getopt error" >&2 + exit 1 + ;; + esac + done +} + +Usage () +{ + echo "Usage: container ${COMMAND} -n|--name NAME" >&2 + exit 1 +} + +Parameters "${@}" + +if [ -z "${NAME}" ] +then + Usage +fi + +if [ ! -e "${MACHINES}/${NAME}" ] +then + echo "'${NAME}': no such container" >&2 + exit 1 +fi + +STATE="$(machinectl show ${NAME} 2>&1 | awk -F= '/^State=/ { print $2 }')" + +case "${STATE}" in + running) + ;; + + *) + echo "'${NAME}': container is not running" >&2 + exit 1 + ;; +esac + +LEADER="$(machinectl status ${NAME} | awk '/Leader: / { print $2 }')" + +# Run +if [ -e "${MACHINES}/${NAME}/usr/bin/container-nsenter" ] +then + OPTIONS="/usr/bin/container-nsenter" +else + OPTIONS="" +fi + +nsenter --target ${LEADER} --mount --uts --ipc --net --pid --root --wd=/root ${OPTIONS} diff --git a/share/bash-completion/container b/share/bash-completion/container index a283d5f..f6434f8 100644 --- a/share/bash-completion/container +++ b/share/bash-completion/container @@ -82,6 +82,26 @@ _container() esac ;; + enter) + case "${cur}" in + -*) + opts="-n --name" + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + ;; + + *) + case "${prev}" in + -n|--name) + opts=$(container list -s -f short) + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + ;; + esac + ;; + esac + ;; + limit) case "${cur}" in -*) diff --git a/share/man/container-enter.1.txt b/share/man/container-enter.1.txt new file mode 100644 index 0000000..61c0f66 --- /dev/null +++ b/share/man/container-enter.1.txt @@ -0,0 +1,72 @@ +// container-tools - Manage systemd-nspawn containers +// Copyright (C) 2014-2016 Daniel Baumann +// +// 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 . + +CONTAINER-CONSOLE(1) +==================== +:doctype: manpage +:man manual: Open Infrastructure +:man source: container-tools +:man version: {revnumber} + + +NAME +---- +container-enter - Enter a container namespace + + +SYNOPSIS +-------- +*container enter* ['OPTIONS'] + + +DESCRIPTION +----------- +The container enter enters a container namespace. + + +OPTIONS +------- +The following container options are available: + +*-n, --name='NAME'*:: + Specify container name. + + +EXAMPLES +-------- +*Enter to example.net container namespace:*:: + sudo container enter -n example.net + + +SEE ALSO +-------- +container-tools(7), +container(1). + + +HOMEPAGE +-------- +More information about container-tools and the Open Infrastructure project can be found on the homepage at https://open-infrastructure.net. + + +BUGS +---- +Bugs can be reported by sending a bug report to the Debian Bug Tracking System at https://bugs.debian.org. + + +AUTHORS +------- +container-tools was written by Daniel Baumann . diff --git a/share/man/container.1.txt b/share/man/container.1.txt index 2182319..32bd393 100644 --- a/share/man/container.1.txt +++ b/share/man/container.1.txt @@ -67,6 +67,9 @@ The following container commands are available: *console*:: Attach console to a container, see container-console(1). +*enter*:: + Enter a container namespace, see container-enter(1). + *limit*:: Limit ressources of a container, see container-limit(1). -- cgit v1.2.3