バイナリの/etc/qemu-ifup
起動時に実行される次のスクリプトがあります。/usr/bin/qemu-system-i386
#!/bin/sh
set -x
switch=br0
if [ -n "$1" ];then
/usr/sbin/tunctl -u `whoami` -t $1
/sbin/ip link set dev $1 up
sleep 0.5s
/sbin/brctl addif $switch $1
exit 0
else
echo "Error: no interface specified"
exit 1
fi
問題は、tunctl
デバイスまたはリソースが使用中であると文句を言うことです。
root@VM-host:~# qemu -hda /root/1.raw -device e1000,netdev=net0,mac=DE:AD:BE:EF:69:01 -netdev tap,id=net0 -display vnc=:1
+ switch=br0
+ [ -n tap0 ]
+ whoami
+ /usr/sbin/tunctl -u root -t tap0
TUNSETIFF: Device or resource busy
+ /sbin/ip link set dev tap0 up sleep 0.5s
Error: either "dev" is duplicate, or "sleep" is a garbage.
+ /sbin/brctl addif br0 tap0
+ exit 0
単に実行すると、問題なく/usr/sbin/tunctl -u root -t tap0
thentap0
が生成されます。
root@VM-host:~# /usr/sbin/tunctl -u root -t tap0
Set 'tap0' persistent and owned by uid 0
root@VM-host:~#
この動作の原因は何ですか?
答え1
(いつからはわかりません)qemuは最初にタブを作成してからスクリプトを呼び出します/etc/qemu-ifup
。したがって、同じ蛇口がすでに存在するため、エラーレポートが表示されます。
参照: qemu ソースコード: (net/tap-linux.c
機能を見る:) tap_open()
。
答え2
エラーメッセージは"Error: either "dev" is duplicate, or "sleep" is a garbage"
問題の原因を知らせます。
Tap インターフェイスを呼び出すには、次のコマンドを使用する必要があります。
/sbin/ip link set $1 up