KVM “qemu-ifup: could not configure /dev/net/tun: Operation not permitted”解决方案

今天帮一个同事解决在KVM Guest中使用虚拟网卡(桥接方式),我写了个qemu-ifup脚本拿来做guest启动之时使用。但是他使用时,遇到如下的问题。
/etc/qemu-ifup: could not launch network script
qemu-system-x86_64: -net tap,script=/etc/qemu-ifup: Device ‘tap’ could not be initialized

使用的命令为:
qemu-system-x86_64 -m 1024 -smp 2 -net nic,model=rtl8139 -net tap,scritp=/etc/qemu-ifup -hda /root/rhel6u2.img

我的qemu-ifup的小脚本如下:

View Code BASH
1
2
3
4
5
#!/bin/bash
 
switch=sw0
/sbin/ifconfig $1 0.0.0.0 up
brctl addif ${switch} $1

你能看出其中的错误吗?

网上找了一下,先需要确认如下几个问题:
1. 是否加载tun模块?
lsmod | grep tun
如果没有加载,那么就请先load tun模块:modprobe tun
当然,如果你是把tun模块编译进内核了的,是不需要(也不能)modprobe加载tun的,你可以检查你的kernel config文件(通常在/boot/config-$VERSION),如果有如下的配置,则说明已经编译进kernel了的。
CONFIG_TUN=y

2. 检查/dev/net/tun的权限
ls -l /dev/net/tun
crw-rw-rw- 1 root root 10, 200 Mar 23 18:11 /dev/net/tun
这样的权限是没有问题的。

3. 检查/etc/qemu-ifup的权限
当前用户需要有可执行权限

4. 检查是否已经安装bridge-utils软件包
rpm -qa | grep bridge 来查询,如果没有就请安装bridge-utils包,主要是脚本中一般需要用到brctl这个命令的。

我检查了网上常见的4种说法后,依然没有发现问题。我后来仔细分析我的这个小小脚本,我将其单独执行,这时我发现它会报错说是找不到解释器。

View Code BASH
1
2
[root@vt-nhm9 ~]# /etc/qemu-ifup tap0
-bash: /etc/qemu-ifup: /bin/bash^M: bad interpreter: No such file or directory

我猛然想起来,这个脚本是我在Windows上写的,然后copy到同事的Linux机器上去执行的,所以它被加了一个“奇特的”符号”^M”,然后就找不到bash了。
解决方法当然是很简单,在linux上重新建立这个文件即可(内容不变),或者使用dos2unix工具转换为linux下的格式类型即可。

关于为什么有个神奇的符号“^M”,可以从参考我曾写过的一篇文章:回车与换行的区别
关于shebang指定脚本解释器,可以参考我前阵子写过的:Linux上的Shebang符号(#!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值