2
0
mirror of git://github.com/lxc/lxc synced 2025-08-31 08:19:32 +00:00

Fix lxc-netstat script

Recent changes around the configuration tree broke the current
implementation of the lxc-netstat.

Instead of retrieving the init_pid in the /var/lxc/<name>/...,
pick one in the cgroup tasks list.

There is still a restriction with this command making impossible
to run it as non-root, any idea is welcome :(

Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
This commit is contained in:
Daniel Lezcano
2009-11-13 11:48:29 +01:00
committed by Daniel Lezcano
parent 3fb0a9bb6e
commit 07ede90408

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# set -ex
lxcpath=@LXCPATH@
lxcpath=/var/lib/lxc
exec=""
if [ ! -r $lxcpath ]; then
@@ -15,15 +15,15 @@ fi
for i in $*; do
case $i in
-n)
name=$2; shift 2;;
--exec)
exec="exec"; shift;;
-n)
name=$2; shift 2;;
--exec)
exec="exec"; shift;;
esac
done
if [ -z "$exec" ]; then
exec @BINDIR@/lxc-unshare -s MOUNT -- @BINDIR@/lxc-netstat -n $name --exec $*
exec /usr/bin/lxc-unshare -s MOUNT -- /usr/bin/lxc-netstat -n $name --exec $*
fi
if [ -z "$name" ]; then
@@ -31,20 +31,31 @@ if [ -z "$name" ]; then
exit 1
fi
if [ ! -d $lxcpath/$name ]; then
echo "'$name' does not exists"
cgroups=$(mount -l -t cgroup)
cgroup_path=""
for i in "$cgroups"; do
cgroup_name=$(echo $i | awk ' { print $1 } ')
cgroup_path=$(echo $i | awk ' { print $3 } ')
if [ "$cgroup_name" == "lxc" ]; then
break;
fi
done
if [ -z "$cgroup_path" ]; then
echo "no cgroup mount point found"
exit 1
fi
if [ ! -r $lxcpath/$name ]; then
echo "Can not access '$name': permission denied"
pid=$(head -1 $cgroup_path/$name/tasks)
if [ -z "$pid" ]; then
echo "no process found for '$name'"
exit 1
fi
if [ ! -f $lxcpath/$name/init ]; then
exit 0
fi
initpid=$(cat $lxcpath/$name/init) && \
mount --bind /proc/$initpid/net /proc/$$/net && \
mount --bind /proc/$pid/net /proc/$$/net && \
exec netstat $*