工作需要,要在公司的虚拟机Centos系统上安装部署openvswitch,前前后后忙了两天才安装成功,下面记录一下安装过程和发现的问题及最后的解决方法。
操作系统:
[root@mysql-test-host RPMS]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
openvswitch版本:
[root@mysql-test-host ovswitch]# ll openvswitch-2.11.1.tar.gz -rw-r--r--. 1 ovswitch ovswitch 7682693 Oct 10 06:58 openvswitch-2.11.1.tar.gz
一、 错误的安装方法:
根据以往源码安装方式已经上网搜索的安装方式,
1、 先下载安装包:openvswitch-2.11.1.tar.gz;
2、 解压:tar zxvf openvswitch-2.11.1.tar.gz
3、 执行配置脚本:./configure --with-linux=/lib/modules/`uname -r`/build;如果没有配置文件则执行./boot.sh生成;
到这一步报错,发现是因为没有安装内核开发包,于是按照网上方法:
4、 安装内核开发包:yum -y install kernel-devel,安装完成后运行rpm -qa | grep "kernel-devel"发现默认安装的包和系统内核版本不一致;
执行配置文件还是报错,以为是内核安装包版本不一致导致,于是从网上下载了kernel-devel-3.10.0-957.21.3.el7.centos.plus.x86_64.rpm这个包,安装后依然报错:
configure error: linux kernel source in /lib/modules/3.10.0-957.1.3.el7.x86_64/build is not configured.
在这里卡住了很久,不知道解决方法,后来想到去配置文件里面找问题;
5、 进入配置文件:vi configure,搜索错误信息is not configured
有如下脚本:
if (test ! -e "$KBUILD"/include/linux/version.h && test ! -e "$KBUILD"/include/generated/uapi/linux/version.h)|| (test ! -e "$KBUILD"/include/linux/autoconf.h && test ! -e "$KBUILD"/include/generated/autoconf.h); then as_fn_error $? "Linux kernel source in $KBUILD is not configured" "$LINENO" 5 fi
想到可能是由于缺少文件导致,遂去目录找相关文件,并把文件按照相关路径拷贝过去;执行配置脚本,配置成功;
6、 编译程序:make;发现有很多错误,基本上都是定义冲突的错误,上网找不到资料,最后根据错误提示,去源码中注释掉一些冲突的定义,再编译还是无法通过;
7、 这边卡住了一段时间,思考是不是系统版本和OpenVSwitch版本不兼容所致,接着就去官网查了一下版本:
发现版本原来的OpenVSwitch1.3版本对内核3.10不支持,随即换成了最新的版本,再编译依然不通过;接着在官方网站http://docs.openvswitch.org上搜索查找,仍然没找到解决方法;
7、 最后无意中搜索相关的冲突代码,找到一些相关信息:
链接:https://blog.csdn.net/sqzhao/article/details/71077143
大概意思就是Centos系统安装openvswitch会出问题,和其他系统不太一致;
最后上网搜索了Centos系统安装OpenVSwitch,发现了很多资料,找了一篇教程安装,最后安装成功;
二、正确的安装方法
1、 安装依赖包:yum -y install openssl-devel wget kernel-devel
2、 安装开发工具:yum groupinstall "Development Tools"
3、 添加用户:adduser ovswitch,切换用户并跳转至用户文件夹:su - ovswitch //此步骤并不是必须,仅仅为为了有一个用户文件夹好用来执行后面的命令,可以是用当前的非root 用户执行下面相关的命令
4、 下载源码:openvswitch-2.11.1.tar.gz
5、 解压:tar xfz openvswitch-2.11.1.tar.gz
6、 创建编译目录:mkdir -p ~/rpmbuild/SOURCES
7、 从spec文件中删除openvswitch-kmod的依赖包,并创建一个新的spec文件:
sed 's/openvswitch-kmod, //g' openvswitch-2.11.1/rhel/openvswitch.spec > openvswitch-2.11.1/rhel/openvswitch_no_kmod.spec
8、 开始编译:rpmbuild -bb --without=check ~/openvswitch-2.11.1/rhel/openvswitch_no_kmod.spec
可能出现以下错误:
error: File /home/ovswitch/rpmbuild/SOURCES/openvswitch-2.11.1.tar.gz: No such file or directory
解决办法:cp openvswitch-2.11.1.tar.gz rpmbuild/SOURCES
(rpmbuild是一个工具,需要自己安装)
9、 退出当前用户使用root: exit
10、 安装编译生成的rpm文件:
yum localinstall /home/ovswitch/rpmbuild/RPMS/x86_64/openvswitch-2.11.1-1.x86_64.rpm
11、 启动服务:systemctl start openvswitch.service
12、 查看服务状态:systemctl -l status openvswitch.service
可能出现以下错误:
openvswitch.service - LSB: Open vSwitch switch
Loaded: loaded (/etc/rc.d/init.d/openvswitch)
Active: activating (start) since 四 2014-12-04 18:35:32 CST; 1min 30s ago
Control: 13694 (openvswitch)
CGroup: /system.slice/openvswitch.service
├─13694 /bin/sh /etc/rc.d/init.d/openvswitch start
├─13696 /bin/sh /usr/share/openvswitch/scripts/ovs-ctl start --system-id=random
├─13697 tee -a /var/log/openvswitch/ovs-ctl.log
├─13723 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
├─13724 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
└─13725 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
12月 04 18:35:33 localhost.localdomain openvswitch[13694]: /etc/openvswitch/conf.db does not exist ... (warning).
12月 04 18:35:33 localhost.localdomain openvswitch[13694]: Creating empty database /etc/openvswitch/conf.db ovsdb-tool: I/O error: /etc/openvswitch/conf.db: failed to lock lockfile (Resource temporarily unavailable)
12月 04 18:35:33 localhost.localdomain openvswitch[13694]: [FAILED]
12月 04 18:35:33 localhost.localdomain openvswitch[13694]: Inserting openvswitch module [ OK ]
解决办法:
yum install policycoreutils-python.x86_64 0:2.2.5-11.el7
mkdir /etc/openvswitch
semanage fcontext -a -t openvswitch_rw_t "/etc/openvswitch(/.*)?"
restorecon -Rv /etc/openvswitch
再次使用:
systemctl stop openvswitch.service
systemctl start openvswitch.service
再次查看服务状态:systemctl -l status openvswitch.service
openvswitch.service - LSB: Open vSwitch switch
Loaded: loaded (/etc/rc.d/init.d/openvswitch)
Active: active (running) since 四 2014-12-04 18:38:52 CST; 6s ago
Process: 13741 ExecStart=/etc/rc.d/init.d/openvswitch start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/openvswitch.service
├─13724 ovs-vswitchd: monitoring pid 13725 (healthy)
├─13725 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
├─13764 ovsdb-server: monitoring pid 13765 (healthy)
└─13765 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor
12月 04 18:38:51 localhost.localdomain systemd[1]: Starting LSB: Open vSwitch switch...
12月 04 18:38:51 localhost.localdomain openvswitch[13741]: /etc/openvswitch/conf.db does not exist ... (warning).
12月 04 18:38:51 localhost.localdomain openvswitch[13741]: Creating empty database /etc/openvswitch/conf.db [ OK ]
12月 04 18:38:52 localhost.localdomain openvswitch[13741]: Starting ovsdb-server [ OK ]
12月 04 18:38:52 localhost.localdomain openvswitch[13741]: Configuring Open vSwitch system IDs [ OK ]
12月 04 18:38:52 localhost.localdomain openvswitch[13741]: ovs-vswitchd is already running.
12月 04 18:38:52 localhost.localdomain openvswitch[13741]: Enabling remote OVSDB managers [ OK ]
12月 04 18:38:52 localhost.localdomain systemd[1]: Started LSB: Open vSwitch switch.
12月 04 18:38:52 localhost.localdomain openvswitch[13694]: Starting ovs-vswitchd [ OK ]
12月 04 18:38:52 localhost.localdomain openvswitch[13694]: Enabling remote OVSDB managers [ OK ]