From fa0c3b8e1196700ca7ff9f9adcb43df3df7f40cb Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Mon, 29 Oct 2007 21:13:01 +0000 Subject: [PATCH] Add vmount, a wrapper to mount something in a guest. git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2632 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- scripts/Makefile-files | 3 +- scripts/vmount | 103 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100755 scripts/vmount diff --git a/scripts/Makefile-files b/scripts/Makefile-files index c59390a..158e3c8 100644 --- a/scripts/Makefile-files +++ b/scripts/Makefile-files @@ -97,7 +97,8 @@ scripts_sbin_src_PRGS = scripts/chbind \ scripts/vsomething \ scripts/vtop \ scripts/vupdateworld \ - scripts/vyum + scripts/vyum \ + scripts/vmount scripts_sbin_gen_PRGS = scripts_sbincfg_gen_DTA = diff --git a/scripts/vmount b/scripts/vmount new file mode 100755 index 0000000..0afe144 --- /dev/null +++ b/scripts/vmount @@ -0,0 +1,103 @@ +#!/bin/bash +# $Id$ + +# Copyright (C) 2007 Daniel Hokka Zakrisson +# +# 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; version 2 of the License. +# +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +: ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars} +test -e "$UTIL_VSERVER_VARS" || { + echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2 + exit 1 +} +. "$UTIL_VSERVER_VARS" +. "$_LIB_FUNCTIONS" + + +function showHelp() +{ + echo \ +$"Usage: $0 -- [-o options] [--bind|--rbind] + [-t ] [-a] [-n] [--move] + + + ... what to mount, this is relative to the host's root + ... where to mount it, this is relative to the guest's root + +Report bugs to <$PACKAGE_BUGREPORT>." + exit 0 +} + +function showVersion() +{ + echo \ +$"vmount $PACKAGE_VERSION -- mount for guests +This program is part of $PACKAGE_STRING + +Copyright (C) 2007 Daniel Hokka Zakrisson +This program is free software; you may redistribute it under the terms of +the GNU General Public License. This program has absolutely no warranty." + exit 0 +} + + +declare -a guests +while true; do + case "$1" in + (--) shift; break;; + (*) + _setVserverDir "$1" + guests=( "${guests[@]}" "$VSERVER_DIR" ) + ;; + esac + shift +done + +tmp=$(getopt -o +o:t:an --long help,version,debug,bind,rbind,move -n "$0" -- "$@") || exit 1 +eval set -- "$tmp" + +declare -a options + +while true; do + case "$1" in + (--help) showHelp $0 ;; + (--version) showVersion ;; + (--debug) set -x;; + (--bind|--rbind|--move|-n|-a) + options=( "${options[@]}" "$1" ) + ;; + (-t|-o) options=( "${options[@]}" "$1" "$2" ) + shift + ;; + (--) shift; break;; + (*) echo $"vmount: internal error; arg=='$1'" >&2; exit 1;; + esac + shift +done + +case "$1" in + (/*) ;; + (*) panic $"vmount: the source must be an absolute path";; +esac + +rc=0 +for guest in "${guests[@]}"; do + pushd "$guest/vdir" &> /dev/null + $_VNAMESPACE -e "$guest" -- \ + $_SECURE_MOUNT --chroot --fstab "$guest/fstab" "${options[@]}" "$@" + test "$?" -eq 0 || rc=$? + popd &> /dev/null +done + +exit $rc -- 1.8.1.5