summaryrefslogtreecommitdiffstats
path: root/selftest/ns/mk_nsenter.sh
blob: 6ba506536354ee72848b238b9ee9450ee3f741a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/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 unwieldy 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"