tap0
qemuにネットワークインターフェースとして提供したいTapデバイス()を作成しました。デバイスを作成し、以下を使用して設定したブリッジに接続しました。
tunctl -t tap0
ifconfig tap0 up
brctl addif virbr0 tap0
その後、提案されたコマンドを実行しました。この回答:
chgrp netdev /dev/net/tun
chmod 660 /dev/net/tun
どちらのコマンドも正常に完了し、適用されたことを確認しました。
nathan@nathan-desktop:~$ stat /dev/net/tun
File: ‘/dev/net/tun’
Size: 0 Blocks: 0 IO Block: 4096 character special file
Device: 6h/6d Inode: 1224 Links: 1 Device type: a,c8
Access: (0660/crw-rw----) Uid: ( 0/ root) Gid: ( 108/ netdev)
Access: 2015-11-16 10:16:35.127338320 -0800
Modify: 2015-11-16 10:16:35.127338320 -0800
Change: 2015-11-16 10:37:18.338948110 -0800
Birth: -
また、私がnetdev
グループに属していることを確認しました。
nathan@nathan-desktop:~$ groups
[...] netdev [...]
しかし、そのインターフェイスを使用して qemu 仮想マシンを起動しようとすると、次のエラーが発生します。
nathan@nathan-desktop:~$ qemu-system-arm [...] -net tap,ifname=tap0
qemu-system-arm: -net tap,ifname=tap0: could not configure /dev/net/tun (tap0): Operation not permitted
qemu-system-arm: -net tap,ifname=tap0: Device 'tap' could not be initialized
ストレス
関連出力はstrace
次のとおりです。
open("/dev/net/tun", O_RDWR) = 7
ioctl(7, TUNGETFEATURES, 0x7ffcc532ab2c) = 0
ioctl(7, TUNSETVNETHDRSZ, 0x7ffcc532ab28) = -1 EBADFD (File descriptor in bad state)
ioctl(7, TUNSETIFF, 0x7ffcc532ab30) = -1 EPERM (Operation not permitted)
write(2, "qemu-system-arm:", 16qemu-system-arm:) = 16
write(2, " -net", 5 -net) = 5
write(2, " tap,ifname=tap0", 16 tap,ifname=tap0) = 16
write(2, ": ", 2: ) = 2
write(2, "could not configure /dev/net/tun"..., 64could not configure /dev/net/tun (tap0): Operation not permitted) = 64
write(2, "\n", 1
) = 1
close(7) = 0
write(2, "qemu-system-arm:", 16qemu-system-arm:) = 16
write(2, " -net", 5 -net) = 5
write(2, " tap,ifname=tap0", 16 tap,ifname=tap0) = 16
write(2, ": ", 2: ) = 2
write(2, "Device 'tap' could not be initia"..., 37Device 'tap' could not be initialized) = 37
write(2, "\n", 1
)
ベストアンサー1
qemuはいくつかのデフォルトスクリプトを実行しようとしますが、rootではない場合は失敗します。これは、適切なクリックデバイスへの適切なアクセス権がある場合に有効なコマンドラインオプションです。
qemu-system-x86_64 ... \
-net nic,model=virtio -net tap,ifname=tap0,script=no,downscript=no
script=no,downscript=no
これらの失敗を避けることが重要です。
また、タブ装置(制御装置だけでなく)のもう一方の端にアクセスできることを確認する必要があります/dev/net/tun
。わかりませんが、tunctl
iproute2の場合は話す必要がありますip tuntap add dev tap0 mode tap group netdev
(またはuser
待つ必要があります)。