Contents

mininet , ovs , ryu 分别进行源码安装

OVS安装

ovs与linux内核版本对应

OVS版本是需要与linux内核版本对应的,否则会导致内核函数与OVS调用的函数不匹配,简称装不上。 https://docs.openvswitch.org/en/latest/faq/releases/ linux 内核版本查看uname -r

安装过程

这里要注意,如果下载的是官网的压缩文件,则不用./boot.sh直接从./configure开始即可, 如果是在github上下载的,则需要./boot.sh再configure

官方教程: https://docs.openvswitch.org/en/latest/intro/install/#

下载链接: http://www.openvswitch.org/download/

下载版本: 2.13.6, 解压后进入根目录

参考资料:

https://www.cnblogs.com/goldsunshine/p/10331606.html https://blog.csdn.net/zhangmeimei_pku/article/details/97929098

  • 在这之前要先安装python和python-pip, 这么做会让系统自动安装c编译器 sudo apt install python sudo apt install python-pip

OVS的源码安装命令如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
./configure 
make 
make install

## 安装内核
make modules_install 
## 将openvswitch载入到内核模块中
/sbin/modprobe openvswitch 
## 看内核模块是否被加载
/sbin/lsmod |grep openvswitch

## 启动(这里要注意一下使用sudo找不到命令的问题,所以需要找到原来的目录运行一下)
export PATH=$PATH:/usr/local/share/openvswitch/scripts
ovs-ctl start 

export PATH=$PATH:/usr/local/share/openvswitch/scripts
ovs-ctl --no-ovs-vswitchd start

export PATH=$PATH:/usr/local/share/openvswitch/scripts
ovs-ctl --no--ovsdb-server start

## 下面的是要配置ovsdb的数据库 (配置数据库了套接字都需要使用sudo,命令找不到就使用which, 然后使用绝对路径运行命令)
## 原文:In addition to using the automated script to start Open vSwitch, you may wish to manually start the various daemons. Before starting ovs-vswitchd itself, you need to start its configuration database, ovsdb-server. Each machine on which Open vSwitch is installed should run its own copy of ovsdb-server. Before ovsdb-server itself can be started, configure a database that it can use:
## 这里要注意, 需要在openvswitch要目录运行该命令
mkdir -p /usr/local/etc/openvswitch
ovsdb-tool create /usr/local/etc/openvswitch/conf.db \
    vswitchd/vswitch.ovsschema


## 配置ovsdb-server以使用上面创建的数据库,监听Unix域套接字
## 原文: Configure ovsdb-server to use database created above, to listen on a Unix domain socket, to connect to any managers specified in the database itself, and to use the SSL configuration in the database:

mkdir -p /usr/local/var/run/openvswitch
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
    --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
    --private-key=db:Open_vSwitch,SSL,private_key \
    --certificate=db:Open_vSwitch,SSL,certificate \
    --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
    --pidfile --detach --log-file

ovs-vsctl --no-wait init
ovs-vswitchd --pidfile --detach --log-file

若对OVS的源码有修改,改完ovs之后,再次按照这个步骤重新安装一下自己的ovs

重启系统后: 这个时候启动ovs会失败, 这是因为OVS自带的数据库不会自动启动

因此我们需要把后三个命令再运行一下才行, 即:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
    --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
    --private-key=db:Open_vSwitch,SSL,private_key \
    --certificate=db:Open_vSwitch,SSL,certificate \
    --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
    --pidfile --detach --log-file
    
ovs-vsctl --no-wait init

ovs-vswitchd --pidfile --detach --log-file

自动脚本

这里是我修改OVS源码时为了方便而写的一些自动脚本

OVS删除脚本

修改完OVS源码需要重新安装前需要先停止并删除本机运行的OVS,这是自动脚本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
# 停止其运行
sudo /usr/local/share/openvswitch/scripts/ovs-ctl stop

sleep 2

# 依次删除脚本;还有两个不知道干嘛的
sudo rm -rf /usr/local/share/openvswitch/scripts
sudo rm -rf /usr/local/etc/openvswitch/
sudo rm -rf /usr/local/var/run/openvswitch/

sleep 2

# 移除内核模块
echo 'lsmod | grep openvswitch'
lsmod | grep openvswitch
echo 'sudo rmmod openvswitch'
sudo rmmod openvswitch
echo 'lsmod | grep openvswitch'
lsmod | grep openvswitch


# 若移除内核失败,执行下面两条命令
#    sudo ovs-dpctl show # 查看是否被占用
#    sudo ovs-dpctl del-dp ovs-system # 删除

OVS一键安装脚本

修改完OVS时需要重新安装它,这是它的安装一键脚本,在这之前别忘记删除本机上已安装的OVS,否则易失败

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash
./configure --with-linux=/lib/modules/$(uname -r)/build
echo ''
echo -e "\033[47;30m end configure \033[0m"
sleep 3

make
echo -e "\033[47;30m end make \033[0m"
sleep 3

sudo make install
echo -e "\033[47;30m end make install \033[0m"
sleep 3

sudo make modules_install
echo -e "\033[47;30m end sudo make modules_install \033[0m"
sleep 3

sudo /sbin/modprobe openvswitch
echo -e "\033[47;30m end sudo /sbin/modprobe openvswitch \033[0m"
sleep 3

/sbin/lsmod | grep openvswitch
echo -e "\033[47;30m end /sbin/lsmod | grep openvswitch \033[0m"
sleep 3

sudo mkdir -p /usr/local/etc/openvswitch
echo -e "\033[47;30m end sudo mkdir -p /usr/local/etc/openvswitch \033[0m"
sleep 3

sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema # 这里没出现找不到路径的问题,可能是安装了内核版本的原因
echo -e "\033[47;30m end ovsdb-tool \033[0m"
sleep 3

sudo mkdir -p /usr/local/var/run/openvswitch
echo -e "\033[47;30m end sudo mkdir -p /usr/local/var/run/openvswitch \033[0m"

sleep 3
sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
             --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
             --private-key=db:Open_vSwitch,SSL,private_key \
             --certificate=db:Open_vSwitch,SSL,certificate \
             --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
             --pidfile --detach --log-file
echo -e "\033[47;30m end sudo ovsdb-server \033[0m"
sleep 3

sudo ovs-vsctl --no-wait init
echo -e "\033[47;30m end sudo ovs-vsctl --no-wait init \033[0m"
sleep 3

sudo ovs-vswitchd --pidfile --detach --log-file
echo -e "\033[47;30m end sudo ovs-vswitchd --pidfile --detach --log-file \033[0m"
sleep 3

sudo mn --test pingall
echo -e "\033[47;30m end sudo mn --test pingall \033[0m"
sleep 3

echo -e "\033[47;30m show dmesg \033[0m"
dmesg | tail # 这时能查到我们插入源码的信息

OVS重启脚本

在重启系统后,OVS自带的一些服务数据库啥的不会一同启动,因此需要手动启动

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
     --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
     --private-key=db:Open_vSwitch,SSL,private_key \
     --certificate=db:Open_vSwitch,SSL,certificate \
     --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
     --pidfile --detach --log-file
echo -e "\033[47;30m sudo ovsdb-server \033[0m"
sleep 3

sudo ovs-vsctl --no-wait init
echo -e "\033[47;30m sudo ovs-vsctl --no-wait init \033[0m"
sleep 3

sudo ovs-vswitchd --pidfile --detach --log-file
echo -e "\033[47;30m sudo ovs-vswitchd --pidfile --detach --log-file \033[0m"

OVS迁移脚本

源码被一个系统编译过,再复制到其他系统中编译不成功,需要运行下这个脚本才可

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash
autoscan
echo -e "\033[47;30m autoscan \033[0m"
sleep 1

aclocal
echo -e "\033[47;30m aclocal \033[0m"
sleep 1

autoconf
echo -e "\033[47;30m autoconf \033[0m"
sleep 1

automake --add-missing
echo -e "\033[47;30m automake --add-missing \033[0m"

Mininet安装(官网上的安装教程最全)

下载:http://mininet.org/download/ 去github上下载它的源码 解压后进入根目录 使用git tag可以查看所有的版本, 不切换当前默认安装3.2.1b1. 使用的安装命令:

1
2
## 只安装mininet和openflow1.3, 因此使用命令:
./util/install.sh -n3

测试

运行 sudo mn –test pingall, 成功则说明2个都安装好了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 
*** Adding switches:
s1 
*** Adding links:
(h1, s1) (h2, s1) 
*** Configuring hosts
h1 h2 
*** Starting controller
c0 
*** Starting 1 switches
s1 ...
*** Waiting for switches to connect
s1 
*** Ping: testing ping reachability
h1 -> h2 
h2 -> h1 
*** Results: 0% dropped (2/2 received)
*** Stopping 1 controllers
c0 
*** Stopping 2 links
..
*** Stopping 1 switches
s1 
*** Stopping 2 hosts
h1 h2 
*** Done
completed in 6.082 seconds

ryu源码安装

下载源码 git clone https://github.com/faucetsdn/ryu.git github上的readme里面有相关的安装依赖说明, 直接使用pip安装没成功, 因此我们这里使用python3安装.

  1. 安装pip3 sudo apt install python3-pip

  2. 安装依赖 sudo pip3 install -r tools/pip-requires

  3. 安装ryu(此之前应已安装python3) sudo python3 setup.py install

  4. 运行 ryu-manager

1
2
loading app ryu.controller.ofp_handler
instantiating app ryu.controller.ofp_handler of OFPHandler

成功