tunctl은 /etc/qemu-ifup 스크립트에 사용된 장치나 리소스가 사용 중인지 불평합니다.

tunctl은 /etc/qemu-ifup 스크립트에 사용된 장치나 리소스가 사용 중인지 불평합니다.

바이너리가 /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 tap0then tap0이 생성됩니다.

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

관련 정보