当前位置: 首页 > ONOS > 正文

ONOS白手起家—ONOS from Scratch

ONOS白手起家——ONOS from Scratch

本文档由http://sdnhub.cn译自:

https://wiki.onosproject.org/display/ONOS/ONOS+from+Scratch

如果你想更方便的离线阅读,请下载PDF版本:ONOS from Scratch中文版,另,PDF版已经自带书签 :)。

概述

如果你阅读过Installing and Running ONOS,那么你可能已经注意到有好几种方法可以安装和运行ONOS。在本教程中,将关注基于ONOS源代码包在Ubuntu VM或OS X上进行安装和部署。

通过本教程,你讲学到如下内容:

  • 使用“cell definition”配置ONOS编译环境,以定制ONOS包。
  • 配置ONOS默认加载的二进制模块。
  • 使用onos-install工具将ONOS安装到一台虚拟机上。
  • 访问ONOS的CLI命令行和远程监控ONOS。

约定(conventions)

虚拟机的shell以$或#开头:

 $ sudo -s 
 #

在build machine上的shell以~$开头:

 build:~$ sudo -s
 build:~#

先决条件

你需要一台build machine用于打包ONOS和运行VM。build machine必须是Unix-like操作系统。本教程假设build machine的操作系统是Ubuntu 14.04,64-bit.

你需要在build machine上安装一款虚拟机软件,例如VirtualBox。本教程假设使用VirtualBox。(当然也可以使用vmware的虚拟机软件)

最后,还需要的build machine上生成SSH public key:

build:~$ ssh-keygen -t rsa

对于本教程推荐使用默认选项和无密码。

1 准备虚拟机

下载:Ubuntu Server 14.04 LTS 64-bit的映像文件。创建一个VM,VM选项如下:

  • 2G RAM
  • 2 processors
  • 至少5GB磁盘空间
  • 两个网络接口,网卡1连到NAT,网卡2连到host-only适配器vboxnet0。两个网卡都是用DHCP。

1.1 Ubuntu的安装

  • 创建一个用户:sdn,密码:rocks。这将作为本教程使用的主要帐号。
  • 不加密磁盘
  • 分区时选择“Guided-use entire disk”,使用默认配置。
  • 选择最适合你的网络环境的代理信息。
  • 提示选择安装软件时选择OpenSSH Server

本教程中称此虚拟机为:onos-scratch

1.2 VM首次启动

以sdn用户登录你的新虚拟机。运行sudu visudo,添加以下内容到文件的最后:

sdn ALL=(ALL) NOPASSWD:ALL

然后,更新软件仓库:

$ sudo apt-get update

验证两个网络接口eth0eth1

$ ifconfig
eth0 Link encap:Ethernet  HWaddr 08:00:27:15:7e:e1 
      inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
      inet6 addr: fe80::a00:27ff:fe15:7ee1/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:35 errors:0 dropped:0 overruns:0 frame:0
      TX packets:43 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:3535 (3.5 KB)  TX bytes:3749 (3.7 KB)

eth1  Link encap:Ethernet  HWaddr 08:00:27:b7:18:47 
      inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0
      inet6 addr: fe80::a00:27ff:feb7:1847/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:157 errors:0 dropped:0 overruns:0 frame:0
      TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:19323 (19.3 KB)  TX bytes:7379 (7.3 KB)

lo    Link encap:Local Loopback 
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

build machine上应该可以SSH到VM:

build:~$ ssh -l sdn 192.168.56.101

如果拒绝连接,则确认VM中已经安装并启动了openssh-server:

$ sudo apt-get install openssh-server

2 安装需要的软件

2.1 在build machine

安装Git:

build:~$ sudo apt-get install git-core

在用户主目录下创建两个子目录:~/Downloads~/Applications。下载Karaf 3.0.2Maven 3.2.2的二进制软件包(tar.gz),放到~/Download目录下,解压缩到~/Application目录。

build:~$ cd; mkdir Downloads Applications
build:~$ cd Downloads
build:~$ wget http://download.nextag.com/apache/karaf/3.0.2/apache-karaf-3.0.2.tar.gz
build:~$ wget http://www.apache.org/dist/maven/binaries/apache-maven-3.2.2-bin.tar.gz
build:~$ tar -zxvf apache-karaf-3.0.2.tar.gz -C ../Applications/
build:~$ tar -zxvf apache-maven-3.2.2-bin.tar.gz -C ../Applications/ 

接下来,安装Oracle Java 8:

build:~$ sudo apt-get install software-properties-common -y
build:~$ sudo add-apt-repository ppa:webupd8team/java -y
build:~$ sudo apt-get update
build:~$ sudo apt-get install oracle-java8-installer oracle-java8-set-default -y

可能会遇到许可证提示,提示安装python-software-properties,just do so。

最后,克隆ONOS源码到sdn用户的主目录:

build:~$ git clone https://gerrit.onosproject.org/onos -b 1.0.0

这将创建一个onos目录来保存下载的源代码。

2.2 在VM上的操作

VM上只需要安装MavenJava 8,请参考上面的过程。

编辑~/.profile:添加如下内容:

PATH=/root/Applications/apache-maven-3.2.2/bin/:$PATH
export PATH
JAVA_HOME=/usr/lib/jvm/java-8-oracle

3 设置编译环境

3.1 设置环境变量

首先,需要设置几个环境变量。ONOS源代码中包含了一个bash_profile设置环境变量的范例。这个范例文件可以直接引入到~/.profile文件的最后:

. ~/onos/tools/dev/bash_profile

接着,使用如下命令使改动生效(点后面有个空格):

build:~$ . ~/.profile

然后,可以使用env命令查看系统中多了几个环境变量(例如:ONOS_ROOT,OCI,KARAF_ROOT)。

注意
如果你在安装Ubuntu时使用了不同的用户名,需要设置环境变量ONOS_USER,你也可以自定义ONOS_GROUP(通常与用户名相同)。

$ export ONOS_USER=<username>
$ export ONOS_GROUP=<groupname>

也可以将这两条命令加入到~/.profile中。

3.2 编译ONOS

编辑~/Applications/apache-karaf-3.0.2/etc/org.apache.karaf.features.cfg,追加下面的一行内容到featuresRepositories:

mvn:org.onosproject/onos-features/1.0.0-SNAPSHOT/xml/features

现在,已经准备好使用Maven来编译ONOS了,开始编译:

build:~$ cd ~/onos
build:~$ mvn clean install  # or use the alias 'mci'
注意:上面这条命令如果提示找不到mvn的话,加上他的全路径~/Applications/apache-maven-3.2.2/bin/。

现在,开始定制,创建和安装ONOS包。

注意
如果有之前的ONOS正在运行,在使用mvn编译强,应该首先停止对应的服务(sudo service onos stop)。否则,在onlab.nio包上运行测试时将导致失败(address already in use)。

4 创建一个定制的单元定义(cell definition)

4.1 cells的快速介绍

在ONOS的术语中,cell是一个环境变量的聚集,被用于:

  • 包含在ONOS内的实用脚本。下面我们将要讨论这样一个脚本文件。
  • 告诉打包进程,我们想怎样自定义我们的ONOS包。

cells令实用脚本去打包、配置、安装和运行ONOS更加容易。

这里,我们将创建一个ONOS包,当安装和启动时,启动一个single-instance(non-clustering)的ONOS实例(使用intent-based forwarding应用)。

4.2 创建一个单元定义文件

一个cell被定义在一个单元定义(cell definition)文件中。我们将创建如下的单元定义文件tutorial(在~/onos/tools/test/cells/tutorial

# ONOS from Scratch tutorial cell

# the address of the VM to install the package onto
export OC1="192.168.56.101"

# the default address used by ONOS utilities when none are supplied
export OCI="192.168.56.101"

# the ONOS apps to load at startup
export ONOS_FEATURES="onos-api,onos-core-trivial,onos-cli,onos-openflow,onos-app-ifwd" 

# the Mininet VM (if you have one)
export OCN="192.168.56.102"

# pattern to specify which address to use for inter-ONOS node communication (not used with single-instance core)

export ONOS_NIC="192.168.56.*"

注意

  • OC1OCI设置为我们虚拟机中的eth1的IP地址。
  • ONOS_FEATURE包括non-clusteredONOS核心模块(onos-core-trivial)和intent-based forwarding应用(onos-app-ifwd

4.3 Applying a cell

build:~$ cell tutorial

5 打包和部署ONOS

5.1 使用SSH无密码访问VM的设置

为了方便起见,在部署到VM之前,使用onos-push-keys命令设置一下从build machineSSH无密码登录VM:

build:~$ onos-push-keys 192.168.56.101
sdn@192.168.56.101's password:
sdn@192.168.56.101's password:

注意
本教程只有一个VM,如果你想创建一个ONOS集群,可以克隆第1个VM,onos-patch-vm脚本可以用来设置新克隆的VM的主机名等。

build:~$ onos-patch-vm $OC2 onos-scratch2
192.168.56.102: onos-scratch2

5.2 创建包

运行onos-package命令(或者使用op这个短命令),创建ONOS二进制包:

build:~$ onos-package
-rw-rw-r--  1 onosuser  onosuser  33395409 Dec  4 16:12 /tmp/onos-1.0.0.onosuser.tar.gz

上面的命令将在/tmp目录下创建一个ONOS的tar包。

5.3 部署生成的ONOS包

现在可以进行实际的部署,使用如下命令将生成的ONOS包部署到VM中:

build:~$ onos-install -f $OC1
onos start/running, process 2028

一旦onos-install命令返回了上面的最后一条消息,我们就可以尝试从build machine登录虚拟机内部署的ONOS了,如下所示:

build:~$ onos $OC1
Logging in as karaf
Welcome to Open Network Operating System (ONOS)!
  ____  _  ______  ____   
 / __ \/ |/ / __ \/ __/    
/ /_/ /    / /_/ /\ \       
\____/_/|_/\____/___/      

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown ONOS.
onos>

注意:如果输出“Logging in as karaf”后直接就退出,而没有进入ONOS的CLI的话,需要在虚拟机的/opt/onos/var/下查看日志信息。

如上所示,我们已经登录到了部署好的ONOS实例的CLI。使用list命令可以看到我们前面配置的默认需要加载的模块信息:

onos> list
START LEVEL 100 , List Threshold: 50
 ID | State     | Lvl | Version        | Name                                  
-------------------------------------------------------------------------------
 40 | Active    |  80 | 2.6            | Commons Lang                          
 41 | Active    |  80 | 3.3.2          | Apache Commons Lang                   
 ...
 72 | Active    |  80 | 1.0.0.SNAPSHOT | onos-api                              
 73 | Active    |  80 | 1.0.0.SNAPSHOT | onos-cli
 ...
 86 | Active    |  80 | 1.0.0.SNAPSHOT | onos-of-provider-device               
 87 | Active    |  80 | 1.0.0.SNAPSHOT | onos-of-provider-packet               
 88 | Active    |  80 | 1.0.0.SNAPSHOT | onos-of-provider-flow                 
 98 | Active    |  80 | 1.0.0.SNAPSHOT | onos-core-net                         
 99 | Active    |  80 | 1.0.0.SNAPSHOT | onos-core-trivial       <--single-instance core      
112 | Active    |  80 | 1.0.0.SNAPSHOT | onos-app-ifwd           <--intent forwarding application
onos>

注意,还有更多模块,这些模块是ONOS OpenFlow即核心组件的组成部分。关于其他更多模块的信息请参看:Appendix C : Source Tree Organization

使用logout命令或者Ctrl-D,退出登录。

提示$OC1可以使用$OCI代替,或者干脆忽略此参数。当不使用此参数时,将使用存储在OCI中的值。

部署到Mac OS X:Ubuntu系统中,onos-install使用upstart/initctl系统去半自动化的启动和关闭ONOS。而OX X使用launchd/launchctl管理守护进程,但是onos-install目前不支持launchd/launchctl,所以我们需要指定“nostart”(-n):

onos-install -fn $OC1

使用手动的方式启动ONOS服务:

/opt/onos/apache-karaf-$KARAF_VERSION/bin/karaf clean

下一步干什么?

本文档由http://sdnhub.cn译自:

https://wiki.onosproject.org/display/ONOS/ONOS+from+Scratch

本文固定链接: http://sdnhub.cn/index.php/onos-from-scratch/ | 软件定义网络SDN

该日志由 sdnhub 于2015年03月09日发表在 ONOS 分类下, 通告目前不可用,你可以至底部留下评论。
原创文章转载请注明: ONOS白手起家—ONOS from Scratch | 软件定义网络SDN
关键字: , ,

ONOS白手起家—ONOS from Scratch:等您坐沙发呢!

发表评论

*

快捷键:Ctrl+Enter