summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Wessel <jason.wessel@windriver.com>2012-05-02 06:30:46 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-05-03 15:48:09 +0100
commit76551e02edb51a0638762a8b0e6cea0976b5d85e (patch)
tree204a0b02b62600e2bac0e9701f1e12ffc816d014
parente8005eb9360070aef131c74e17bc7ca3f070053d (diff)
downloadpoky-76551e02edb51a0638762a8b0e6cea0976b5d85e.tar.gz
runqemu: Fix TAP='TUNSETGROUP: Invalid argument' by falling back to tunctl -u
By default the runqemu script tries to set the group permissions on any tap device it creates. The TUNSETGROUP ioctl is not implemented on some popular host enterprise linux distributions. Internally the script will exit as follows: ++ /opt/qemux86/bitbake_build/tmp/sysroots/x86_64-linux/usr/bin/tunctl -b -g 100 + TAP='TUNSETGROUP: Invalid argument' + STATUS=1 + '[' 1 -ne 0 ']' + echo 'tunctl failed:' tunctl failed: + echo TUNSETGROUP: Invalid argument This patch implements a fallback to using the userid as the owner of the tap device which is supported by all 2.6 kernels, the default remains to try and use the groupid first. (From OE-Core rev: 3af2bc59776fb738bd795160512a2f3f49ce6d32) Signed-off-by: Jason Wessel <jason.wessel@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-xscripts/runqemu-ifup20
-rwxr-xr-xscripts/runqemu-internal5
2 files changed, 16 insertions, 9 deletions
diff --git a/scripts/runqemu-ifup b/scripts/runqemu-ifup
index f80538f53c..e4c3dafeef 100755
--- a/scripts/runqemu-ifup
+++ b/scripts/runqemu-ifup
@@ -34,7 +34,7 @@
34# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 34# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
35 35
36usage() { 36usage() {
37 echo "sudo $(basename $0) <gid> <native-sysroot-basedir>" 37 echo "sudo $(basename $0) <uid> <gid> <native-sysroot-basedir>"
38} 38}
39 39
40if [ $EUID -ne 0 ]; then 40if [ $EUID -ne 0 ]; then
@@ -42,13 +42,14 @@ if [ $EUID -ne 0 ]; then
42 exit 1 42 exit 1
43fi 43fi
44 44
45if [ $# -ne 2 ]; then 45if [ $# -ne 3 ]; then
46 usage 46 usage
47 exit 1 47 exit 1
48fi 48fi
49 49
50GROUP="-g $1" 50USERID="-u $1"
51NATIVE_SYSROOT_DIR=$2 51GROUP="-g $2"
52NATIVE_SYSROOT_DIR=$3
52 53
53TUNCTL=$NATIVE_SYSROOT_DIR/usr/bin/tunctl 54TUNCTL=$NATIVE_SYSROOT_DIR/usr/bin/tunctl
54if [ ! -x "$TUNCTL" ]; then 55if [ ! -x "$TUNCTL" ]; then
@@ -59,9 +60,14 @@ fi
59TAP=`$TUNCTL -b $GROUP 2>&1` 60TAP=`$TUNCTL -b $GROUP 2>&1`
60STATUS=$? 61STATUS=$?
61if [ $STATUS -ne 0 ]; then 62if [ $STATUS -ne 0 ]; then
62 echo "tunctl failed:" 63# If tunctl -g fails, try using tunctl -u, for older host kernels
63 echo $TAP 64# which do not support the TUNSETGROUP ioctl
64 exit 1 65 TAP=`$TUNCTL -b $USERID 2>&1`
66 STATUS=$?
67 if [ $STATUS -ne 0 ]; then
68 echo "tunctl failed:"
69 exit 1
70 fi
65fi 71fi
66 72
67IFCONFIG=`which ifconfig 2> /dev/null` 73IFCONFIG=`which ifconfig 2> /dev/null`
diff --git a/scripts/runqemu-internal b/scripts/runqemu-internal
index 1831a098c6..fb0d80660f 100755
--- a/scripts/runqemu-internal
+++ b/scripts/runqemu-internal
@@ -173,13 +173,14 @@ if [ "$TAP" = "" ]; then
173 fi 173 fi
174 174
175 GROUPID=`id -g` 175 GROUPID=`id -g`
176 USERID=`id -u`
176 echo "Setting up tap interface under sudo" 177 echo "Setting up tap interface under sudo"
177 # Redirect stderr since we could see a LD_PRELOAD warning here if pseudo is loaded 178 # Redirect stderr since we could see a LD_PRELOAD warning here if pseudo is loaded
178 # but inactive. This looks scary but is harmless 179 # but inactive. This looks scary but is harmless
179 tap=`sudo $QEMUIFUP $GROUPID $OECORE_NATIVE_SYSROOT 2> /dev/null` 180 tap=`sudo $QEMUIFUP $USERID $GROUPID $OECORE_NATIVE_SYSROOT 2> /dev/null`
180 if [ $? -ne 0 ]; then 181 if [ $? -ne 0 ]; then
181 # Re-run standalone to see verbose errors 182 # Re-run standalone to see verbose errors
182 sudo $QEMUIFUP $GROUPID $OECORE_NATIVE_SYSROOT 183 sudo $QEMUIFUP $USERID $GROUPID $OECORE_NATIVE_SYSROOT
183 return 184 return
184 fi 185 fi
185 LOCKFILE="$LOCKDIR/$tap" 186 LOCKFILE="$LOCKDIR/$tap"