diff options
Diffstat (limited to 'selftest/ns')
-rwxr-xr-x | selftest/ns/mk_nsenter.sh | 32 | ||||
-rwxr-xr-x | selftest/ns/nsenter-helper.sh | 31 | ||||
-rwxr-xr-x | selftest/ns/start_in_ns.sh | 11 |
3 files changed, 71 insertions, 3 deletions
diff --git a/selftest/ns/mk_nsenter.sh b/selftest/ns/mk_nsenter.sh new file mode 100755 index 00000000000..f175d6bae73 --- /dev/null +++ b/selftest/ns/mk_nsenter.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# +# Helper script. If you want a 2nd shell that communicates with the testenv DC +# you can use the nsenter command to change the namespace you're in. However, +# this command is a bit unwieldly and changes depending on the testenv PID. +# We can generate a helper script on the fly that abstracts all this +# complexity, allowing you to use the same, simple command to change the +# namespace that you're in, e.g. +# st/ad_dc/nsenter.sh + +pid=$1 +exports_file=$2 + +# The basic command to enter the testenv's network namespace. +# We enter the user namespace as well (as ourself, which is really the root +# user for the namespace), otherwise we need sudo to make this work. +nsenter_cmd="nsenter -t $pid --net --user --preserve-credentials" + +# By default, the nsenter command will just start a new shell in the namespace. +# we use a wrapper helper script, which first loads all the environment +# variables that are usually defined in selftest (and prints some basic help). +helper_script="$(dirname $0)/nsenter-helper.sh $exports_file" + +# generate the dynamic script +dyn_script="$(dirname $2)/nsenter.sh" +echo "#!/bin/sh" > $dyn_script +echo "$nsenter_cmd $helper_script" >> $dyn_script +chmod 755 $dyn_script + +# return the script we created +echo "$dyn_script" + diff --git a/selftest/ns/nsenter-helper.sh b/selftest/ns/nsenter-helper.sh new file mode 100755 index 00000000000..f396ed4d98c --- /dev/null +++ b/selftest/ns/nsenter-helper.sh @@ -0,0 +1,31 @@ +#!/bin/sh +# +# Helper script that gets run with nsenter to manually setup a secondary shell +# session to a given namespace testenv. This basically just sets up the same +# environment variables as you normally get with selftest, for convenience. + +if [ $# -lt 1 ] ; then + echo "Usage: $0 <exports-file>" + exit 1 +fi + +# we get passed a exports file with all the environment variables defined +exports_file=$1 + +# read the exports file so the new shell has appropriate variables setup +# (we export rather than sourcing here so they get inherited by the subshell) +while read -r line ; do + export $line + # dump them for the user too + echo $line +done < $exports_file + +echo "" +echo "Entered $NETBIOSNAME namespace, with above variables defined." +echo "Use CTRL+D or exit to leave the namespace." +echo "" + +# start a shell session in the new namespace +$SHELL + + diff --git a/selftest/ns/start_in_ns.sh b/selftest/ns/start_in_ns.sh index 5831a0b2e24..f16767d545b 100755 --- a/selftest/ns/start_in_ns.sh +++ b/selftest/ns/start_in_ns.sh @@ -17,9 +17,14 @@ parent_pid=$3 # The namespaces we use are anonymous, which means other processes would need # to use our PID to access the new namespace echo "-------------------------------------------------------------" -echo "Created namespace for $NETBIOSNAME" -echo "To communicate with this testenv, use: nsenter -t $$ --net sh" -echo "To copy its environment variables, use: . $exports_file" +echo "Created namespace for $NETBIOSNAME ($ENVNAME) PID $$" + +# generate a helper script if the developer wants to talk to this namespace +# in another shell +mk_nsenter_script="$(dirname $0)/mk_nsenter.sh" +helper_script=$($mk_nsenter_script $$ $exports_file) + +echo "To communicate with this testenv, use: $helper_script" echo "-------------------------------------------------------------" # the rest of the args are the samba command to run |