OpenWRT实践4:Open vSwitch

2019-07-13 08:33发布

序言

本文我们介绍OVS在OpenWRT下的编译,编译OVS一般都是为SDN的应用所预设的。与click不同的是,OVS的添加可以不用手动编译,而是直接通过feeds的方式进行添加即可,只是具体配置的过程会复杂一些。注:一些配置过程也可以参考:github

Open vSwitch编译

第一步:安装依赖,这里有可能会存在之前编译openWRT以外还额外需要的程序包,所以需要添加一下。如果不添加,直接利用以前的环境可能问题也不大,笔者建议还是添加一下为好。
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev subversion git gawk asciidoc libz-dev 第二步:在feeds的配置文件中添加OVS的源,即采用以下命令:
echo 'src-git openvswitch git://github.com/pichuang/openvwrt.git' >> feeds.conf 该命令中描述将该行内容添加进feeds.conf文件中,feeds软件可以根据这个文件,进行OVS的下载。我们解释该行命令如下
  • 在该命令中,src-git代表源的类型,这里的源是git类型的,除了src-git以外,还包含以下几种类型:
    • src-hg:通过使用hg从数据源path/URL下载数据

    • src-cpy:从数据源path拷贝数据

    • src-svn:通过使用svn从数据源path/URL下载数据
    • src-bzr:通过使用bzr从数据源的pxiaath/URL下载数据

    • src-link:创建一个数据源path的symlink

    • src-darcs:通过使用darcs从数据源path/URL下载数据

  • 该命令中,openvswitch是代表将这个源命名为openvswitch,后文可以指定用feeds安装该源,如下就是指定更新和安装openvswitch组件:
    • ./scripts/feeds update openvswitch ./scripts/feeds install -a -p openvswitch
  • 该命令中,最后的(git://github.com/pichuang/ope)代表真实源的地址。
第三步:更新和安装OVS的源,以及安装一个patch
./scripts/feeds update openvswitch ./scripts/feeds install -a -p openvswitch 安装patch(为了避免源失效,我们这里对patch做了一个备份:download.csdn.net/detai
wget https://gist.githubusercontent.com/pichuang/7372af6d5d3bd1db5a88/raw/4e2290e3e184288de7623c02f63fb57c536e035a/openwrt-add-libatomic.patch -q -O - | patch -p1 第四步:编译组件,请按照以下步骤一步步进行操作。
1. 运行make menuconfig,勾选(Advanced configuration options (for developers) -> Toolchain Options 和 Advanced configuration options (for developers) -> Target Options),然后保存退出。

2. 勾选(Network -> openvswitch-switch, openvswitch-switch, openvswitch-ipsec (Optional))

3. 勾选(Advanced configuration options (for developers) -> Toolchain Options -> Binutils Version -> Linaro binutils 2.24(SELECT)),取消勾选(Advanced configuration options (for developers) -> Target Options -> Build packages with MIPS16 instructions(UNSELECT)),然后保存退出。
注意:这里需要注意先做步骤1(第四步中的步骤1),之后再做该步骤,否则会发现(Advanced configuration options (for developers) -> Toolchain Options 和 Advanced configuration options (for developers) -> Target Options)两个文件夹内都是空的,如下图:

第五步:每一次menuconfig之后,都需要执行运行命令,即取消Bridge。
echo '# CONFIG_KERNEL_BRIDGE is not set' >> .config 第六步:编译固件,这里建议采用V=s的配置,代替V=99的配置,笔者测试中,后者可能会有点问题,这个编译时间比较长,慢慢等待即可。
make V=s 第七步:烧写固件到路由器,这里参阅之前的文档中的操作即可。

注意:烧写固件之后,需要修改/etc/config/wireless文件,将wireless disable 1中的1改为0,然后进行reboot操作,用以开启无线。