Running CloudRouter OSv Images
OSv
OSv is a lightweight operating system specifically designed for cloud workloads. It includes only the functionality 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 ONOS SDN controller, 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-2.0-OSv-OpenDaylight-20150824.qemu.xz
The uncompressed CloudRouter-2.0-OSv-OpenDaylight-20150824.qemu disk image can now be run on your hypervisor of choice. The image has been tested using KVM with virt-manager on Fedora 22.
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 directory 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