CloudRouter includes a full distribution of OpenDaylight. Currently, CloudRouter 1.0 beta provides OpenDaylight Helium SR3, which is the latest upstream release.
...
If you are using a full image, OpenDaylight is pre-installed. If you are using a minimal image, OpenDaylight must be installed.
The OpenDaylight project provides zip and tar distributions of each release. CloudRouter takes these distributions, adds some modifications, and then packages them as RPMs. Installation is as simple as running:
$ sudo yum install -y opendaylight-helium
...
Before running OpenDaylight for the first time, you need to create karaf credentials. The upstream distributions of OpenDaylight includes default credentials (karaf/karaf), which have been removed from CloudRouter for security reasons.
To create karaf credentials, edit */opt/opendaylight/opendaylight-helium/etc/users.properties*. You will see a commented out user:
\# karaf = karaf,\_g\_:admingroup
Replace this with your own credentials, e.g.:
user = password,\_g\_:admingroup
To start OpenDaylight:
**$ sudo systemctl start opendaylight-helium**
To check the status of OpenDaylight:
**$ sudo systemctl status opendaylight-helium**
To connect to the karaf console via SSH:
**$ ssh -p 8101 -o StrictHostKeyChecking=no <USER\>@localhost'''
Where <USER\> matches the karaf credentials you created. You will then be prompted to enter the karaf password you set.
To stop OpenDaylight:
**$ sudo systemctl stop opendaylight-helium**
...
OSv
OSv is a lightweight operating system specifically designed for cloud workloads. It includes only the functionaly necessary to run a single Java or POSIX application, with no support for scheduling multiple processes. For more information, see osv.io.
CloudRouter OSv images
Currently, CloudRouter ships a single OSV image, providing the OpenDaylight SDN Controller. Further images, including one that provides the BIRD route server, are currently in development.
Running the OpenDaylight OSv image
There are two ways to run the OpenDaylight OSv image:
Option 1: Download the image from cloudrouter.org
Download the compressed image from repo.cloudrouter.org.
Uncompress the image:
$ unxz CloudRouter-Beta-OSv-OpenDaylight-20150320.qemu.xz
The uncompressed CloudRouter-Beta-OSv-OpenDaylight-20150320.qemu disk image can now be run on your hypervisor of choice. The image has been tested using KVM with virt-manager on Fedora 21.
Option 2: Build the image yourself from the Capstanfile
First, you must install capstan.
Next, clone the osv-apps repo:
$ git clone git@github.com:cloudius-systems/osv-apps.git
Cloning into 'osv-apps'...
remote: Counting objects: 1411, done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 1411 (delta 3), reused 0 (delta 0), pack-reused 1392
Receiving objects: 100% (1411/1411), 303.34 KiB | 72.00 KiB/s, done.
Resolving deltas: 100% (620/620), done.
Checking connectivity... done.
Change to the opendaylight and execute "capstan run". This will automatically build the image before running it:
$ cd osv-apps/opendaylight/
$ capstan run
Building opendaylight...
Downloading cloudius/osv-openjdk/index.yaml...
160 B / 160 B [======================================================================================================================================================] 100.00 %
Downloading cloudius/osv-openjdk/osv-openjdk.qemu.gz...
73.84 MB / 73.84 MB [================================================================================================================================================] 100.00 %
Uploading files...
5216 / 5216 [========================================================================================================================================================] 100.00 % Created instance: opendaylight
OSv v0.18
eth0: 192.168.122.15
Unable to update instance pid: Invalid argument
WARNING: fcntl(F_SETLK) stubbed
pthread_setcancelstate() stubbed
[ERROR] Failed to construct terminal; falling back to unsupported
java.io.IOException: Cannot run program "sh": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
at java.lang.Runtime.exec(Runtime.java:617)
at java.lang.Runtime.exec(Runtime.java:485)
at jline.internal.TerminalLineSettings.exec(TerminalLineSettings.java:183)
at jline.internal.TerminalLineSettings.exec(TerminalLineSettings.java:173)
at jline.internal.TerminalLineSettings.stty(TerminalLineSettings.java:168)
at jline.internal.TerminalLineSettings.get(TerminalLineSettings.java:72)
at jline.internal.TerminalLineSettings.<init>(TerminalLineSettings.java:52)
at jline.UnixTerminal.<init>(UnixTerminal.java:31)
at jline.NoInterruptUnixTerminal.<init>(NoInterruptUnixTerminal.java:22)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:374)
at jline.TerminalFactory.getFlavor(TerminalFactory.java:168)
at jline.TerminalFactory.create(TerminalFactory.java:81)
at org.apache.karaf.shell.console.impl.jline.TerminalFactory.init(TerminalFactory.java:37)
at org.apache.karaf.shell.console.impl.jline.TerminalFactory.getTerminal(TerminalFactory.java:30)
at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager.start(LocalConsoleManager.java:83)
at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager.<init>(LocalConsoleManager.java:66)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.aries.blueprint.utils.ReflectionUtils.newInstance(ReflectionUtils.java:329)
at org.apache.aries.blueprint.container.BeanRecipe.newInstance(BeanRecipe.java:962)
at org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:331)
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:806)
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)
at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)
at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183)
at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:681)
at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:378)
at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:269)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)
at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
... 48 more
________ ________ .__ .__ .__ __
\_____ \ ______ ____ ____ \______ \ _____ ___.__.| | |__| ____ | |___/ |_
/ | \\____ \_/ __ \ / \ | | \\__ \< | || | | |/ ___\| | \ __\
/ | \ |_> > ___/| | \| ` \/ __ \\___ || |_| / /_/ > Y \ |
\_______ / __/ \___ >___| /_______ (____ / ____||____/__\___ /|___| /__|
\/|__| \/ \/ \/ \/\/ /_____/ \/
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 OpenDaylight.
opendaylight-user@root>
The running image can be terminated with ctrl+c. Now that the image is built and stored in your local repository, you can run it again using "capstan run" without the build step:
$ capstan i
Name Description Version Created
cloudius/osv-openjdk OpenJDK 7/OSv base image for developers v0.18 2015-02-27T14:00:04
opendaylight
$ capstan run opendaylight