Skip to end of metadata
Go to start of metadata

Install the Operating System 

NOTE: At this time we only support openSuSE. We are looking for help porting this process to other platforms.

  1. Download the image from openSuSE:

  2. Install the image on bare metal or a VM and configure the network.
    1. Recommended at least 60GB in root filesystem, 6GB of RAM
  3. Here is an example on how to install the ISO in a vCenter instance
    1. VCenter Deployment

It is recommended for the time being you do NOT accept OpenSUSE software updates to your system until we've had a chance to determine how those updates impacts the software we're installing below.  Allowing software updates to occur before performing the steps in this wiki may result in your CoprHD services failing to deploy.

NOTE: To install the minimun set of packages to get started, install git and make:

zypper --non-interactive install --no-recommends git make

Get the Source

The CoprHD source code is mirrored to GitHub (see Repository Structure & Code Flow), but those wishing to contribute to the project should get the source from the primary repository as follows:

git clone

Be sure Git knows who you are!

Anywhere you clone the source, it's important to configure Git with your name and email address before making any commits. Per CoprHD's DCO requirement, the name should be your real name and the email address should match the one associated with your Stash username.

Configure Your Development Environment

You can setup/update your developer environment in a single line (as the root user) that configures the OS with all requirements needed to start building CoprHD:

make -f coprhd-controller/packaging/appliance-images/openSUSE/13.2/CoprHDDevKit/Makefile devkit

If you would like to perform a step by step configuration you can also run scripts to setup the operating system. Note that if you have a development environment ready, you can also run one of the substeps from below to configure specific items (additional repositories, RPM dependencies, java versions, etc.), but there is no need to run them after running the command from above.

 Click here to view an alternative setup with detailed sub-steps.

Configure Additional RPM Repositories

In order to install all of the packages CoprHD requires, additional package repositories must be added. You can do this using the commands below:

bash coprhd-controller/packaging/appliance-images/openSUSE/13.2/CoprHDDevKit/ installRepositories

Install Additional RPMs

Now that you have the extra package repositories configured, install additional RPMs needed by CoprHD:

bash coprhd-controller/packaging/appliance-images/openSUSE/13.2/CoprHDDevKit/ installPackages

Install Patched Nginx Server

CoprHD uses Nginx as a reverse proxy/load balancer and it needs extra patches beyond those found in the standard openSUSE RPM. Follow these steps to install or replace the existing nginx with the required version:

bash coprhd-controller/packaging/appliance-images/openSUSE/13.2/CoprHDDevKit/ installNginx

Configure Java 8

Make Java 8 the default Java environment on the host:

# NOTE: Though the name may imply java installation, the line below does not install the packages for java.
# It just switches the java/javac paths, so a specific version is set on the system (7 or 8). To install the packages, run:
# zypper --non-interactive --no-gpg-checks install --details --no-recommends --force-resolution java-1_8_0-openjdk java-1_8_0-openjdk-devel
bash coprhd-controller/packaging/appliance-images/openSUSE/13.2/CoprHDDevKit/ installJava 8

Create the storageos user and group

To add the user and group, run the following:

bash coprhd-controller/packaging/appliance-images/openSUSE/13.2/CoprHDDevKit/ installStorageOS

Create the Default CoprHD Network Configuration File

CoprHD takes its initial network configuration parameters from a file called /etc/ Create a blank file after running this command:

bash coprhd-controller/packaging/appliance-images/openSUSE/13.2/CoprHDDevKit/ installNetworkConfigurationFile

This should allow you to edit a configuration file like below:

Example /etc/

Customize CoprHD's Network Configuration

Customize the default settings in /etc/ as described below.

  1. network_1_ipaddr
    1. this should match the IPv4 address you assigned to your CoprHD host
  2. network_gateway
    1. this should match the IPv4 address of your CoprHD host's gateway
  3. network_netmask
    1. this should match the IPv4 netmask associated with your CoprHD host's subnet
  4. network_vip
    1. this should be another available IPv4 address on the same subnet as network_1_ipaddr. 
    2. It will be used as the virtual IP (vip) address for CoprHD
    3. for a standalone (single node) installation, it is acceptable to use network_1_ipaddr for network_vip
  5. For now the remaining options should remain at their default values

If you are building behind a Proxy:

if you are working behind a proxy server, there are two options to setup your environment so that the build tools/scripts work correctly.  This has been tested on OpenSUSE.

Option 1: Set Environment Variables

Set Env Vars
export http_proxy=http://[Proxy Address]:[Proxy Port];
export https_proxy=http://[Proxy Address]:[Proxy Port]
export JAVA_TOOL_OPTIONS="-Dhttp.proxyHost=http://[Proxy Address] -Dhttp.proxyPort=[Proxy Port] -Dhttps.proxyHost=http://[Proxy Address] -Dhttps.proxyPort=[Proxy Port]”

Option 2: Setup a Transparent Proxy

1. Set proxy for terminal: 
	export http_proxy=httpurl:port; 
	export https_proxy=httpsurl:port, 
   if you already set it before you can ignore this step.
2. Download redsocks for OpenSuse:
   install it: sudo rpm –Uvh redsocks-0.4.99_2e3f648-8.1.x86_64.rpm
3. Set iptables rules:
	iptables -t nat -N REDSOCKS || truels
	iptables -t nat -F REDSOCKS
	iptables -t nat -I OUTPUT -p tcp -j REDSOCKS

	iptables -t nat -A REDSOCKS -d -j RETURN
	iptables -t nat -A REDSOCKS -d -j RETURN
	iptables -t nat -A REDSOCKS -d -j RETURN

	iptables -t nat -A REDSOCKS -d -j RETURN
	iptables -t nat -A REDSOCKS -d -j RETURN
	iptables -t nat -A REDSOCKS -d -j RETURN

	iptables -t nat -A REDSOCKS -d -j RETURN
	iptables -t nat -A REDSOCKS -d -j RETURN
	iptables -t nat -A REDSOCKS -p tcp -j DNAT --to-destination

	iptables -t nat -A REDSOCKS -p udp -j DNAT --to-destination
	iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
	iptables -t nat -A PREROUTING -p tcp -j REDSOCKS
4. Change /etc/redsocks/redsocks.conf for redsock as follows:  then restart redsocks service by "systemctl restart redsocks"
	base {
		log_debug = off;
		log_info = on;
		log = "syslog:daemon";
		daemon = on;
		user = redsocks;
		group = redsocks; 
		redirector = iptables;
	redsocks { 
 		local_ip =;
 		local_port = 6666;
        	//'ip' and 'port' are IP and tcp-port of proxy-server 
 		ip = your_Proxy_server_IP;
 		port = 1080; 
 		type = socks5; 
	redudp {
 		local_ip =;
 		local_port = 8888;
 		// `ip' and `port' of socks5 proxy server.
 		ip = your_proxy_server_ip;
 		port = 1080;
 		dest_ip =;
 		dest_port = 53;
 		udp_timeout = 30;
 		udp_timeout_stream = 180;
	dnstc { 
 		local_ip =;
 		local_port = 5300;
5. save iptable rules for next time reboot machine:
		iptables-save > proxy.rules
   next time reboot machine reload the rules:
		iptables-restore < proxy.rules
   Or we can use SuSEfirewall2 to save proxy rules. 

Build the RPM

Once you have the source, you will want to build the RPM.

# If you have not the source yet, the repository can be cloned and and settings defined like the comments below:
# 1) git clone
# 2) git config --global "Your Name"
# 3) git config --global
cd coprhd-controller
make clobber BUILD_TYPE=oss rpm

When working with the CoprHD build, it is important to always supply the oss build flag. There are number of different ways to do this:

  • If using make (as shown above), specify BUILD_TYPE=oss
  • If using the gradle wrapper, use "./gradlew-oss" (e.g. ./gradlew-oss eclipse to generate Eclipse project files)
  • If calling gradle that's already installed on your system (CoprHD currently uses gradle 1.11), invoke it with "gradle -PbuildType=oss"

If your CoprHD build operation fails with unresolved artifact dependencies and references to hosts within the domain, you most likely forgot to specify the oss build type.

Install the RPM

When the RPM build completes, it should print out the location of the freshly built RPM.

rpm -Uvh /path/to/storageos/rpm  # e.g. rpm -Uvh build/RPMS/x86_64/storageos-

Monitor Startup

CoprHD should start immediately when the RPM is installed, but it takes some time to initialize the database and be ready for requests.

You may find it useful to monitor the startup of the apisvc in order to know when everything is ready for requests. It won't complete its initialization and start accepting requests until after the coordinator and database services are ready.

tail -f /opt/storageos/logs/apisvc.log

Watch the log scroll by. When you see output similar to the following, CoprHD is ready.

INFO (line 333) Started SslSelectChannelConnector@
INFO (line 147) Registering Service in path: /service/storageapisvc/1/api-standalone
INFO (line 153) Service info registered

When you first install CoprHD, the apisvc.log won't exist. And it will continue that way for a couple of minutes after installation because the apisvc gives the coordinatorsvc and dbsvcs some time to initialize before it starts.

Launch the UI

 Before launching the UI, please ensure all services and nginx server is active/running

  1. /etc/storageos/storageos status (If any of the services are not active/running please try restarting)  
  2. systemctl status nginx (Normally Nginx server takes 5-10 mins to start post the ViPR services successful start)

If any of the ViPR services or nginx server are not active and running, further debugging is required - UI may not be successfully launched 

Once CoprHD is up and running, you can log in to the UI.

  1. Point your modern web browser to
  2. When prompted for credentials, login with root/ChangeMe

Once authenticated, you're ready to begin exploring CoprHD!

Ports & Protocols

As indicated above, the CoprHD UI should be accessed through the VIP on the default https port, 443.

The CoprHD REST API should be accessed over https on port 4443.


  • No labels


  1. These steps are not working for me for the upcoming 2.5 release.  Reaching out to other team members to see what's missing.

    1. The steps failed because I allowed OpenSUSE to perform software updates to the installed packages before performing the steps in this wiki.  This caused a few issues:

      1. It caused the zypper of the installation packages (especially the big one at the beginning) to fail with issues around dependencies failing.
      2. It caused CoprHD 2.5 services to fail to come up, likely because support packages were not installed or installed properly.

      It's best to not allow OpenSUSE to perform software updates (which as easy as ignoring the notifications that come from the KDE task tray, I believe) for now.  Eventually we do need to figure out how an updated OpenSUSE setup impacts these steps.

      I added a Note above, hope it helps.


  2. Sections "Configure Additional RPM Repositories", "Install Additional RPMs", "Install Patched Nginx Server", "Configure Java", "Create the storageos user and group", "Create the Default CoprHD Network Configuration File", "Customize CoprHD's Network Configuration", "Get the Source" were scripted and added to source: (COP-20005). Should we update this page to simplify the instructions of the environment setup? From an ISO install (minimal text server or KDE GUI, etc.) the steps should be:

    Then we either configure the proxy as it is described or "Build the RPM":

    • make clobber BUILD_TYPE=oss rpm

    Much easier now...

    1. Yes, I think we should definitely update the page.  Your work is going to make getting started much simpler.

      • Rather than just removing all of that and replacing it with your script command, I think we should have text along these lines: Once you have the base operating system installed, there are a number of additional configurations that have to be performed.  These include ... (and sort of list out the steps enumerated in your comment).  And then you go on to say they can all be performed automatically if you run ... (your command there).  If you want to inspect the details of what commands are being run on your system, you can refer to (and you can list out the Makefile and the configure script that it runs).

      Make sense?

      1. It does. Also, each of those sections has an equivalent " installRepositories, installPackages, etc.". I will update the sections that way then. Above all, as the first instruction I will add the "make devkit" one as this is the simplest all-in-one command that enclosures all others... + the explanation of what this is about as you mentioned...

        1. Okay.  Just to be clear, I wasn't asking that we keep 100% of the detail on the Wiki.  Just the flavor of the kinds of things the script is going to do, while pointing them toward the scripts themselves if they want to know more.

  3. For the Proxy, if the above solution doesn't work (as it doesn't work for me /:), try to set proxy in the


    systemProp.http.proxyHost=[Proxy Address]

    systemProp.http.proxyPort=[Proxy Port]

    systemProp.https.proxyHost[Proxy Address]

    systemProp.https.proxyPort=[Proxy Port]

  4. I ran into the same error, but my host vm has 8GB memory, shouldn't be a memory issue.

    Here is the error:
    OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
    log4j:WARN No appenders could be found for logger (
    log4j:WARN Please initialize the log4j system properly.
    :: loading settings :: url = jar:file:/root/coprhd-controller/build/gradle/vipr-portal/portal/play/play-1.3.1/framework/lib/ivy-2.4.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
    ~        _            _
    ~  _ __ | | __ _ _  _| |
    ~ | '_ \| |/ _' | || |_|
    ~ |  __/|_|\____|\__ (_)
    ~ |_|            |__/
    ~ framework ID is prod
    ~ using java version "1.8.0_77"
    Product: Unknown
    Product Base: Unknown
    Git Repository: Unknown
    Git Branch: Unknown
    Git Revision: Unknown
    Platform: Unknown
    Kernel Version: Unknown
    IP Address:
    2016-04-28 14:58:41,899 [main]  INFO (line 308) Starting /root/coprhd-controller/build/gradle/vipr-portal/portal/compile
    2016-04-28 14:58:43,182 [main]  INFO (line 308) Precompiling ...
    2016-04-28 14:58:43,666 [main] ERROR (line 604)
    Cannot start in PROD mode with errors
    Compilation error (In /app/controllers/security/ around line 20)
    The file /app/controllers/security/ could not be compiled. Error raised is : DeadboltHandler cannot be resolved to a type
    play.exceptions.CompilationException: DeadboltHandler cannot be resolved to a type
     at play.classloading.ApplicationCompiler$2.acceptResult(
     at org.eclipse.jdt.internal.compiler.Compiler.handleInternalException(
     at org.eclipse.jdt.internal.compiler.Compiler.compile(
     at play.classloading.ApplicationCompiler.compile(
     at play.classloading.ApplicationClassloader.getAllClasses(
     at play.Play.preCompile(
     at play.Play.init(
     at play.server.Server.main(
    :portal:playCompile FAILED
    FAILURE: Build failed with an exception.
    * What went wrong:
    Execution failed for task ':portal:playCompile'.
    > /root/coprhd-controller/build/gradle/vipr-portal/portal/play/play-1.3.1/play precompile --%prod -DINSTALL_HOME=/root/coprhd-controller/build/gradle/vipr-portal/portal terminated with non-zero value (255)
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
    Total time: 27.723 secs
    Host VM environment:  OpenSuse VM on vSphere
    Pretty sure installed all the repos and packages listed in;
    Command used to bulid rpm: make clobber BUILD_TYPE=oss rpm and ./gradlew-oss all; but all returned same error as above
    I tested the coprhd repo with my OpenStack vm environment, it doesn't have any issue. But it seems always have issue with vSphere environment.  I am working on transferring coprHD/CoprHD driver deployment into ansible scripts, you can check the repo ( ) if you would like to reproduce the issue in your environment.
    Any thoughts will be appreciated!!
    Thank you for any help!