.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
APEX Installation Guide
***********************
.. contents::
:depth: 3
Requirements
^^^^^^^^^^^^
.. container:: sectionbody
.. container:: paragraph
APEX is 100% written in Java and runs on any platform that
supports a JVM, e.g. Windows, Unix, Cygwin. Some APEX
applications (such as the monitoring application) come as
web archives, they do require a war-capable web server
installed.
Installation Requirements
-------------------------
.. container:: ulist
- Downloaded distribution: JAVA runtime environment
(JRE, Java 8 or later, APEX is tested with the Oracle
Java)
- Building from source: JAVA development kit (JDK, Java
8 or later, APEX is tested with the Oracle Java)
- A web archive capable webserver, for instance for the
monitoring application
.. container:: ulist
- for instance `Apache
Tomcat `__
- Sufficient rights to install APEX on the system
- Installation tools depending on the installation
method used:
.. container:: ulist
- ZIP to extract from a ZIP distribution
.. container:: ulist
- Windows for instance
`7Zip `__
- TAR and GZ to extract from that TAR.GZ
distribution
.. container:: ulist
- Windows for instance
`7Zip `__
- RPM to install from the RPM distribution
.. container:: ulist
- Install: ``sudo apt-get install rpm``
- DPKG to install from the DEB distribution
.. container:: ulist
- Install: ``sudo apt-get install dpkg``
Feature Requirements
--------------------
.. container:: paragraph
APEX supports a number of features that require extra
software being installed.
.. container:: ulist
- `Apache Kafka `__ to
connect APEX to a Kafka message bus
- `Hazelcast `__ to use
distributed hash maps for context
- `Infinispan `__ for
distributed context and persistence
- `Docker `__ to run APEX
inside a Docker container
Build (Install from Source) Requirements
----------------------------------------
.. container:: paragraph
Installation from source requires a few development tools
.. container:: ulist
- GIT to retrieve the source code
- Java SDK, Java version 8 or later
- Apache Maven 3 (the APEX build environment)
Get the APEX Source Code
^^^^^^^^^^^^^^^^^^^^^^^^
.. container:: sectionbody
.. container:: paragraph
The first APEX source code was hosted on Github in January
2018. By the end of 2018, APEX was added as a project in the
ONAP Policy Framework, released later in the ONAP Casablanca
release.
.. container:: paragraph
The APEX source code is hosted in ONAP as project APEX. The
current stable version is in the master branch. Simply clone
the master branch from ONAP using HTTPS.
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
git clone https://gerrit.onap.org/r/policy/apex-pdp
Build APEX
^^^^^^^^^^
.. container:: sectionbody
.. container:: paragraph
The examples in this document assume that the APEX source
repositories are cloned to:
.. container:: ulist
- Unix, Cygwin: ``/usr/local/src/apex-pdp``
- Windows: ``C:\dev\apex-pdp``
- Cygwin: ``/cygdrive/c/dev/apex-pdp``
.. important::
A Build requires ONAP Nexus
APEX has a dependency to ONAP parent projects. You might need to adjust your Maven M2 settings. The most current
settings can be found in the ONAP oparent repo: `Settings `__.
.. important::
A Build needs Space
Building APEX requires approximately 2-3 GB of hard disc space, 1 GB for the actual build with full distribution and 1-2 GB for
the downloaded dependencies
.. important::
A Build requires Internet (for first build)
During the build, several (a lot) of Maven dependencies will be downloaded and stored in the configured local Maven
repository. The first standard build (and any first specific build) requires Internet access to download those dependencies.
.. important::
Building RPM distributions
RPM images are only built if the ``rpm`` package is installed (Unix). To install ``rpm`` run ``sudo apt-get install rpm``,
then build APEX.
.. container:: paragraph
Use Maven for a standard build without any tests.
+-------------------------------------------------------+--------------------------------------------------------+
| Unix, Cygwin | Windows |
+=======================================================+========================================================+
| .. container:: | .. container:: |
| | |
| .. container:: content | .. container:: content |
| | |
| .. code:: bash | .. code:: bash |
| :number-lines: | :number-lines: |
| | |
| >c: | # cd /usr/local/src/apex-pdp |
| >cd \dev\apex | # mvn clean install -Pdocker -DskipTests |
| >mvn clean install -Pdocker -DskipTests | |
+-------------------------------------------------------+--------------------------------------------------------+
.. container:: paragraph
The build takes 2-3 minutes on a standard development laptop. It
should run through without errors, but with a lot of messages from
the build process.
.. container:: paragraph
When Maven is finished with the build, the final screen should look
similar to this (omitting some ``success`` lines):
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
[INFO] tools .............................................. SUCCESS [ 0.248 s]
[INFO] tools-common ....................................... SUCCESS [ 0.784 s]
[INFO] simple-wsclient .................................... SUCCESS [ 3.303 s]
[INFO] model-generator .................................... SUCCESS [ 0.644 s]
[INFO] packages ........................................... SUCCESS [ 0.336 s]
[INFO] apex-pdp-package-full .............................. SUCCESS [01:10 min]
[INFO] Policy APEX PDP - Docker build 2.0.0-SNAPSHOT ...... SUCCESS [ 10.307 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:43 min
[INFO] Finished at: 2018-09-03T11:56:01+01:00
[INFO] ------------------------------------------------------------------------
.. container:: paragraph
The build will have created all artifacts required for an APEX
installation. The following example show how to change to the target
directory and how it should look.
+----------------------------------------------------------------------------------------------------------------------------+
| Unix, Cygwin |
+============================================================================================================================+
| .. container:: |
| |
| .. container:: listingblock |
| |
| .. container:: content |
| |
| .. code:: bash |
| :number-lines: |
| |
| -rwxrwx---+ 1 esvevan Domain Users 772 Sep 3 11:55 apex-pdp-package-full_2.0.0~SNAPSHOT_all.changes* |
| -rwxrwx---+ 1 esvevan Domain Users 146328082 Sep 3 11:55 apex-pdp-package-full-2.0.0-SNAPSHOT.deb* |
| -rwxrwx---+ 1 esvevan Domain Users 15633 Sep 3 11:54 apex-pdp-package-full-2.0.0-SNAPSHOT.jar* |
| -rwxrwx---+ 1 esvevan Domain Users 146296819 Sep 3 11:55 apex-pdp-package-full-2.0.0-SNAPSHOT-tarball.tar.gz* |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 archive-tmp/ |
| -rwxrwx---+ 1 esvevan Domain Users 89 Sep 3 11:54 checkstyle-cachefile* |
| -rwxrwx---+ 1 esvevan Domain Users 10621 Sep 3 11:54 checkstyle-checker.xml* |
| -rwxrwx---+ 1 esvevan Domain Users 584 Sep 3 11:54 checkstyle-header.txt* |
| -rwxrwx---+ 1 esvevan Domain Users 86 Sep 3 11:54 checkstyle-result.xml* |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 classes/ |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 dependency-maven-plugin-markers/ |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 etc/ |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 examples/ |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:55 install_hierarchy/ |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 maven-archiver/ |
+----------------------------------------------------------------------------------------------------------------------------+
+--------------------------------------------------------------------------------------------------------+
| Windows |
+========================================================================================================+
| .. container:: |
| |
| .. container:: listingblock |
| |
| .. container:: content |
| |
| .. code:: bash |
| :number-lines: |
| |
| 03/09/2018 11:55 . |
| 03/09/2018 11:55 .. |
| 03/09/2018 11:55 146,296,819 apex-pdp-package-full-2.0.0-SNAPSHOT-tarball.tar.gz |
| 03/09/2018 11:55 146,328,082 apex-pdp-package-full-2.0.0-SNAPSHOT.deb |
| 03/09/2018 11:54 15,633 apex-pdp-package-full-2.0.0-SNAPSHOT.jar |
| 03/09/2018 11:55 772 apex-pdp-package-full_2.0.0~SNAPSHOT_all.changes |
| 03/09/2018 11:54 archive-tmp |
| 03/09/2018 11:54 89 checkstyle-cachefile |
| 03/09/2018 11:54 10,621 checkstyle-checker.xml |
| 03/09/2018 11:54 584 checkstyle-header.txt |
| 03/09/2018 11:54 86 checkstyle-result.xml |
| 03/09/2018 11:54 classes |
| 03/09/2018 11:54 dependency-maven-plugin-markers |
| 03/09/2018 11:54 etc |
| 03/09/2018 11:54 examples |
| 03/09/2018 11:55 install_hierarchy |
| 03/09/2018 11:54 maven-archiver |
| 8 File(s) 292,652,686 bytes |
| 9 Dir(s) 14,138,720,256 bytes free |
+--------------------------------------------------------------------------------------------------------+
Install APEX
^^^^^^^^^^^^
.. container:: paragraph
APEX can be installed in different ways:
.. container:: ulist
- Unix: automatically using ``rpm`` or ``dpkg`` from ``.rpm``
or ``.deb`` archive
- Windows, Unix, Cygwin: manually from a ``.tar.gz`` archive
- Windows, Unix, Cygwin: build from source using Maven, then
install manually
Install with RPM and DPKG
-------------------------
.. container:: paragraph
The install distributions of APEX automatically install the
system. The installation directory is
``/opt/app/policy/apex-pdp``. Log files are located in
``/var/log/onap/policy/apex-pdp``. The latest APEX version
will be available as ``/opt/app/policy/apex-pdp/apex-pdp``.
.. container:: paragraph
For the installation, a new user ``apexuser`` and a new
group ``apexuser`` will be created. This user owns the
installation directories and the log file location. The user
is also used by the standard APEX start scripts to run APEX
with this user’s permissions.
+-----------------------------------------------------------------------+
| RPM Installation |
+=======================================================================+
| .. container:: |
| |
| .. container:: listingblock |
| |
| .. container:: content |
| |
| .. code:: bash |
| :number-lines: |
| |
| # sudo rpm -i apex-pdp-package-full-2.0.0-SNAPSHOT.rpm |
| ********************preinst******************* |
| arguments 1 |
| ********************************************** |
| creating group apexuser . . . |
| creating user apexuser . . . |
| ********************postinst**************** |
| arguments 1 |
| *********************************************** |
+-----------------------------------------------------------------------+
+--------------------------------------------------------------------------------------+
| DPKG Installation |
+======================================================================================+
| .. container:: |
| |
| .. container:: listingblock |
| |
| .. container:: content |
| |
| .. code:: bash |
| :number-lines: |
| |
| # sudo dpkg -i apex-pdp-package-full-2.0.0-SNAPSHOT.deb |
| Selecting previously unselected package apex-uservice. |
| (Reading database ... 288458 files and directories currently installed.) |
| Preparing to unpack apex-pdp-package-full-2.0.0-SNAPSHOT.deb ... |
| ********************preinst******************* |
| arguments install |
| ********************************************** |
| creating group apexuser . . . |
| creating user apexuser . . . |
| Unpacking apex-uservice (2.0.0-SNAPSHOT) ... |
| Setting up apex-uservice (2.0.0-SNAPSHOT) ... |
| ********************postinst**************** |
| arguments configure |
| *********************************************** |
+--------------------------------------------------------------------------------------+
.. container:: paragraph
Once the installation is finished, APEX is fully installed and ready
to run.
Install Manually from Archive (Unix, Cygwin)
--------------------------------------------
.. container:: paragraph
Download a ``tar.gz`` archive. Create a directory where APEX
should be installed. Extract the ``tar`` archive. The following
example shows how to install APEX in ``/opt/apex`` and create a
link to ``/opt/apex/apex`` for the most recent installation.
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
# cd /opt
# mkdir apex
# cd apex
# mkdir apex-full-2.0.0-SNAPSHOT
# tar xvfz ~/Downloads/apex-pdp-package-full-2.0.0-SNAPSHOT.tar.gz -C apex-full-2.0.0-SNAPSHOT
# ln -s apex apex-pdp-package-full-2.0.0-SNAPSHOT
Install Manually from Archive (Windows, 7Zip, GUI)
--------------------------------------------------
.. container:: paragraph
Download a ``tar.gz`` archive and copy the file into the install
folder (in this example ``C:\apex``). Assuming you are using 7Zip,
right click on the file and extract the ``tar`` archive. Note: the
screenshots might show an older version than you have.
.. container:: imageblock
.. container:: content
|Extract the TAR archive|
.. container:: paragraph
The right-click on the new created TAR file and extract the actual
APEX distribution.
.. container:: imageblock
.. container:: content
|Extract the APEX distribution|
.. container:: paragraph
Inside the new APEX folder you see the main directories: ``bin``,
``etc``, ``examples``, ``lib``, and ``war``
.. container:: paragraph
Once extracted, please rename the created folder to
``apex-full-2.0.0-SNAPSHOT``. This will keep the directory name in
line with the rest of this documentation.
Install Manually from Archive (Windows, 7Zip, CMD)
--------------------------------------------------
.. container:: paragraph
Download a ``tar.gz`` archive and copy the file into the install
folder (in this example ``C:\apex``). Start ``cmd``, for instance
typing ``Windows+R`` and then ``cmd`` in the dialog. Assuming
``7Zip`` is installed in the standard folder, simply run the
following commands (for APEX version 2.0.0-SNAPSHOT full
distribution)
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
>c:
>cd \apex
>"\Program Files\7-Zip\7z.exe" x apex-pdp-package-full-2.0.0-SNAPSHOT.tar.gz -so | "\Program Files\7-Zip\7z.exe" x -aoa -si -ttar -o"apex-full-2.0.0-SNAPSHOT"
.. container:: paragraph
APEX is now installed in the folder
``C:\apex\apex-full-2.0.0-SNAPSHOT``.
Build from Source
^^^^^^^^^^^^^^^^^
Build and Install Manually (Unix, Windows, Cygwin)
--------------------------------------------------
.. container:: paragraph
Clone the APEX GIT repositories into a directory. Go to that
directory. Use Maven to build APEX (all details on building
APEX from source can be found in *APEX HowTo: Build*).
Install from the created artifacts (``rpm``, ``deb``,
``tar.gz``, or copy manually).
.. important::
Building RPM distributions
RPM images are only build if the ``rpm`` package is installed (Unix). To install ``rpm`` run ``sudo apt-get install rpm``,
then build APEX.
.. container:: paragraph
The following example shows how to build the APEX system,
without tests (``-DskipTests``) to save some time. It
assumes that the APEX GIT repositories are cloned to:
.. container:: ulist
- Unix, Cygwin: ``/usr/local/src/apex``
- Windows: ``C:\dev\apex``
+-------------------------------------------------------+--------------------------------------------------------+
| Unix, Cygwin | Windows |
+=======================================================+========================================================+
| .. container:: | .. container:: |
| | |
| .. container:: content | .. container:: content |
| | |
| .. code:: bash | .. code:: bash |
| :number-lines: | :number-lines: |
| | |
| >c: | # cd /usr/local/src/apex |
| >cd \dev\apex | # mvn clean install -Pdocker -DskipTests |
| >mvn clean install -Pdocker -DskipTests | |
+-------------------------------------------------------+--------------------------------------------------------+
.. container:: paragraph
The build takes about 2 minutes without test and about 4-5 minutes
with tests on a standard development laptop. It should run through
without errors, but with a lot of messages from the build process. If
built with tests (i.e. without ``-DskipTests``), there will be error
messages and stack trace prints from some tests. This is normal, as
long as the build finishes successfully.
.. container:: paragraph
When Maven is finished with the build, the final screen should look
similar to this (omitting some ``success`` lines):
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
[INFO] tools .............................................. SUCCESS [ 0.248 s]
[INFO] tools-common ....................................... SUCCESS [ 0.784 s]
[INFO] simple-wsclient .................................... SUCCESS [ 3.303 s]
[INFO] model-generator .................................... SUCCESS [ 0.644 s]
[INFO] packages ........................................... SUCCESS [ 0.336 s]
[INFO] apex-pdp-package-full .............................. SUCCESS [01:10 min]
[INFO] Policy APEX PDP - Docker build 2.0.0-SNAPSHOT ...... SUCCESS [ 10.307 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:43 min
[INFO] Finished at: 2018-09-03T11:56:01+01:00
[INFO] ------------------------------------------------------------------------
.. container:: paragraph
The build will have created all artifacts required for an APEX
installation. The following example show how to change to the target
directory and how it should look like.
+-----------------------------------------------------------------------------------------------------------------------------+
| Unix, Cygwin |
+=============================================================================================================================+
| .. container:: |
| |
| .. container:: listingblock |
| |
| .. code:: bash |
| :number-lines: |
| |
| # cd packages/apex-pdp-package-full/target |
| # ls -l |
| -rwxrwx---+ 1 esvevan Domain Users 772 Sep 3 11:55 apex-pdp-package-full_2.0.0~SNAPSHOT_all.changes* |
| -rwxrwx---+ 1 esvevan Domain Users 146328082 Sep 3 11:55 apex-pdp-package-full-2.0.0-SNAPSHOT.deb* |
| -rwxrwx---+ 1 esvevan Domain Users 15633 Sep 3 11:54 apex-pdp-package-full-2.0.0-SNAPSHOT.jar* |
| -rwxrwx---+ 1 esvevan Domain Users 146296819 Sep 3 11:55 apex-pdp-package-full-2.0.0-SNAPSHOT-tarball.tar.gz* |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 archive-tmp/ |
| -rwxrwx---+ 1 esvevan Domain Users 89 Sep 3 11:54 checkstyle-cachefile* |
| -rwxrwx---+ 1 esvevan Domain Users 10621 Sep 3 11:54 checkstyle-checker.xml* |
| -rwxrwx---+ 1 esvevan Domain Users 584 Sep 3 11:54 checkstyle-header.txt* |
| -rwxrwx---+ 1 esvevan Domain Users 86 Sep 3 11:54 checkstyle-result.xml* |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 classes/ |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 dependency-maven-plugin-markers/ |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 etc/ |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 examples/ |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:55 install_hierarchy/ |
| drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 maven-archiver/ |
+-----------------------------------------------------------------------------------------------------------------------------+
+-----------------------------------------------------------------------------------------------------------------------------+
| Windows |
+=============================================================================================================================+
| .. container:: |
| |
| .. container:: listingblock |
| |
| .. code:: bash |
| :number-lines: |
| |
| >cd packages\apex-pdp-package-full\target |
| >dir |
| 03/09/2018 11:55 . |
| 03/09/2018 11:55 .. |
| 03/09/2018 11:55 146,296,819 apex-pdp-package-full-2.0.0-SNAPSHOT-tarball.tar.gz |
| 03/09/2018 11:55 146,328,082 apex-pdp-package-full-2.0.0-SNAPSHOT.deb |
| 03/09/2018 11:54 15,633 apex-pdp-package-full-2.0.0-SNAPSHOT.jar |
| 03/09/2018 11:55 772 apex-pdp-package-full_2.0.0~SNAPSHOT_all.changes |
| 03/09/2018 11:54 archive-tmp |
| 03/09/2018 11:54 89 checkstyle-cachefile |
| 03/09/2018 11:54 10,621 checkstyle-checker.xml |
| 03/09/2018 11:54 584 checkstyle-header.txt |
| 03/09/2018 11:54 86 checkstyle-result.xml |
| 03/09/2018 11:54 classes |
| 03/09/2018 11:54 dependency-maven-plugin-markers |
| 03/09/2018 11:54 etc |
| 03/09/2018 11:54 examples |
| 03/09/2018 11:55 install_hierarchy |
| 03/09/2018 11:54 maven-archiver |
| 8 File(s) 292,652,686 bytes |
| 9 Dir(s) 14,138,720,256 bytes free |
+-----------------------------------------------------------------------------------------------------------------------------+
.. container:: paragraph
Now, take the ``.deb`` or the ``.tar.gz`` file and install APEX.
Alternatively, copy the content of the folder ``install_hierarchy``
to your APEX directory.
Installation Layout
^^^^^^^^^^^^^^^^^^^
.. container:: paragraph
A full installation of APEX comes with the following layout.
.. container:: listingblock
.. container:: content
::
$APEX_HOME
├───bin (1)
├───etc (2)
│ ├───editor
│ ├───hazelcast
│ ├───infinispan
│ └───META-INF
├───examples (3)
│ ├───config (4)
│ ├───docker (5)
│ ├───events (6)
│ ├───html (7)
│ ├───models (8)
│ └───scripts (9)
├───lib (10)
│ └───applications (11)
└───war (12)
.. container:: colist arabic
+-----------------------------------+-----------------------------------+
| **1** | binaries, mainly scripts (bash |
| | and bat) to start the APEX engine |
| | and applications |
+-----------------------------------+-----------------------------------+
| **2** | configuration files, such as |
| | logback (logging) and third party |
| | library configurations |
+-----------------------------------+-----------------------------------+
| **3** | example policy models to get |
| | started |
+-----------------------------------+-----------------------------------+
| **4** | configurations for the examples |
| | (with sub directories for |
| | individual examples) |
+-----------------------------------+-----------------------------------+
| **5** | Docker files and additional |
| | Docker instructions for the |
| | exampples |
+-----------------------------------+-----------------------------------+
| **6** | example events for the examples |
| | (with sub directories for |
| | individual examples) |
+-----------------------------------+-----------------------------------+
| **7** | HTML files for some examples, |
| | e.g. the Decisionmaker example |
+-----------------------------------+-----------------------------------+
| **8** | the policy models, generated for |
| | each example (with sub |
| | directories for individual |
| | examples) |
+-----------------------------------+-----------------------------------+
| **9** | additional scripts for the |
| | examples (with sub directories |
| | for individual examples) |
+-----------------------------------+-----------------------------------+
| **10** | the library folder with all Java |
| | JAR files |
+-----------------------------------+-----------------------------------+
| **11** | applications, also known as jar |
| | with dependencies (or fat jars), |
| | individually deployable |
+-----------------------------------+-----------------------------------+
| **12** | WAR files for web applications |
+-----------------------------------+-----------------------------------+
System Configuration
^^^^^^^^^^^^^^^^^^^^
.. container:: paragraph
Once APEX is installed, a few configurations need to be done:
.. container:: ulist
- Create an APEX user and an APEX group (optional, if not
installed using RPM and DPKG)
- Create environment settings for ``APEX_HOME`` and
``APEX_USER``, required by the start scripts
- Change settings of the logging framework (optional)
- Create directories for logging, required (execution might
fail if directories do not exist or cannot be created)
APEX User and Group
-------------------
.. container:: paragraph
On smaller installations and test systems, APEX can run as
any user or group.
.. container:: paragraph
However, if APEX is installed in production, we strongly
recommend you set up a dedicated user for running APEX. This
will isolate the execution of APEX to that user. We
recommend you use the userid ``apexuser`` but you may use
any user you choose.
.. container:: paragraph
The following example, for UNIX, creates a group called
``apexuser``, an APEX user called ``apexuser``, adds the
group to the user, and changes ownership of the APEX
installation to the user. Substitute ```` with the
directory where APEX is installed.
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
# sudo groupadd apexuser
# sudo useradd -g apexuser apexuser
# sudo chown -R apexuser:apexuser
.. container:: paragraph
For other operating systems please consult your manual or system
administrator.
Environment Settings: APEX_HOME and APEX_USER
---------------------------------------------
.. container:: paragraph
The provided start scripts for APEX require two environment
variables being set:
.. container:: ulist
- ``APEX_USER`` with the user under whose name and permission APEX
should be started (Unix only)
- ``APEX_HOME`` with the directory where APEX is installed (Unix,
Windows, Cygwin)
.. container:: paragraph
The first row in the following table shows how to set these
environment variables temporarily (assuming the user is
``apexuser``). The second row shows how to verify the settings.
The last row explains how to set those variables permanently.
+------------------------------------------------+---------------------------------------------------------+
| Unix, Cygwin (bash/tcsh) | Windows |
+================================================+=========================================================+
| .. container:: | .. container:: |
| | |
| .. container:: content | .. container:: content |
| | |
| .. code:: bash | .. code:: bash |
| :number-lines: | :number-lines: |
| | |
| # export APEX_USER=apexuser | >set APEX_HOME=C:\apex\apex-full-2.0.0-SNAPSHOT |
| # cd /opt/app/policy/apex-pdp | |
| # export APEX_HOME=`pwd` | |
| | |
+------------------------------------------------+ |
| .. container:: | |
| | |
| .. container:: content | |
| | |
| .. code:: tcsh | |
| :number-lines: | |
| | |
| # setenv APEX_USER apexuser | |
| # cd /opt/app/policy/apex-pdp | |
| # setenv APEX_HOME `pwd` | |
| | |
+------------------------------------------------+---------------------------------------------------------+
| .. container:: | .. container:: |
| | |
| .. container:: content | .. container:: content |
| | |
| .. code:: bash | .. code:: bash |
| :number-lines: | :number-lines: |
| | |
| # env | grep APEX | >set APEX_HOME |
| # APEX_USER=apexuser | APEX_HOME=\apex\apex-full-2.0.0-SNAPSHOT |
| # APEX_HOME=/opt/app/policy/apex-pdp | |
| | |
+------------------------------------------------+---------------------------------------------------------+
Making Environment Settings Permanent (Unix, Cygwin)
####################################################
.. container:: paragraph
For a per-user setting, edit the user’s ``bash`` or ``tcsh``
settings in ``~/.bashrc`` or ``~/.tcshrc``. For system-wide
settings, edit ``/etc/profiles`` (requires permissions).
Making Environment Settings Permanent (Windows)
###############################################
.. container:: paragraph
On Windows 7 do
.. container:: ulist
- Click on the **Start** Menu
- Right click on **Computer**
- Select **Properties**
.. container:: paragraph
On Windows 8/10 do
.. container:: ulist
- Click on the **Start** Menu
- Select **System**
.. container:: paragraph
Then do the following
.. container:: ulist
- Select **Advanced System Settings**
- On the **Advanced** tab, click the **Environment Variables**
button
- Edit an existing variable, or create a new System variable:
'Variable name'="APEX_HOME", 'Variable
value'="C:\apex\apex-full-2.0.0-SNAPSHOT"
.. container:: paragraph
For the settings to take effect, an application needs to be
restarted (e.g. any open ``cmd`` window).
Edit the APEX Logging Settings
------------------------------
.. container:: paragraph
Configure the APEX logging settings to your requirements, for
instance:
.. container:: ulist
- change the directory where logs are written to, or
- change the log levels
.. container:: paragraph
Edit the file ``$APEX_HOME/etc/logback.xml`` for any required
changes. To change the log directory change the line
.. container:: paragraph
````
.. container:: paragraph
to
.. container:: paragraph
````
.. container:: paragraph
On Windows, it is recommended to change the log directory to:
.. container:: paragraph
````
.. container:: paragraph
Note: Be careful about when to use ``\`` vs. ``/`` as the path
separator!
Create Directories for Logging
------------------------------
.. container:: paragraph
Make sure that the log directory exists. This is important when
APEX is installed manually or when the log directory is changed
in the settings (see above).
+------------------------------------------------------------------+-------------------------------------------------------+
| Unix, Cygwin | Windows |
+==================================================================+=======================================================+
| .. container:: | .. container:: |
| | |
| .. container:: content | .. container:: content |
| | |
| .. code:: bash | .. code:: bash |
| :number-lines: | :number-lines: |
| | |
| mkdir -p /var/log/onap/policy/apex-pdp | >mkdir C:\apex\apex-full-2.0.0-SNAPSHOT\logs |
| chown -R apexuser:apexuser /var/log/onap/policy/apex-pdp | |
+------------------------------------------------------------------+-------------------------------------------------------+
Verify the APEX Installation
############################
.. container:: sectionbody
.. container:: paragraph
When APEX is installed and all settings are realized, the
installation can be verified.
Verify Installation - run Engine
--------------------------------
.. container:: paragraph
A simple verification of an APEX installation can be done by
simply starting the APEX engine without any configuration.
On Unix (or Cygwin) start the engine using
``$APEX_HOME/bin/apexEngine.sh``. On Windows start the
engine using ``%APEX_HOME%\bin\apexEngine.bat``. The engine
will fail to fully start. However, if the output looks
similar to the following line, the APEX installation is
realized.
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
Starting Apex service with parameters [] . . .
start of Apex service failed: Apex configuration file was not specified as an argument
2018-09-03 13:11:33,914 Apex [main] ERROR o.o.p.a.service.engine.main.ApexMain - start of Apex service failed
org.onap.policy.apex.model.basicmodel.concepts.ApexException: Apex configuration file was not specified as an argument
at org.onap.policy.apex.service.engine.main.ApexCommandLineArguments.validateReadableFile(ApexCommandLineArguments.java:267)
at org.onap.policy.apex.service.engine.main.ApexCommandLineArguments.validate(ApexCommandLineArguments.java:161)
at org.onap.policy.apex.service.engine.main.ApexMain.(ApexMain.java:68)
at org.onap.policy.apex.service.engine.main.ApexMain.main(ApexMain.java:165)
usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]
options
-c,--config-file the full path to the configuration file to use, the configuration file must be a Json file
containing the Apex configuration parameters
-h,--help outputs the usage of this command
-m,--model-file the full path to the model file to use, if set it overrides the model file set in the
configuration file
-v,--version outputs the version of Apex
Verify Installation - run an Example
------------------------------------
.. container:: paragraph
A full APEX installation comes with several examples. Here, we can
fully verify the installation by running one of the examples.
.. container:: paragraph
We use the example called *SampleDomain* and configure the engine
to use standard in and standard out for events. Run the engine
with the provided configuration. Note: Cygwin executes scripts as
Unix scripts but runs Java as a Windows application, thus the
configuration file must be given as a Windows path.
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
# $APEX_HOME/bin/apexEngine.sh -c $APEX_HOME/examples/config/SampleDomain/Stdin2StdoutJsonEventJava.json (1)
# $APEX_HOME/bin/apexEngine.sh -c C:/apex/apex-full-2.0.0-SNAPSHOT/examples/config/SampleDomain/Stdin2StdoutJsonEventJava.json (2)
>%APEX_HOME%\bin\apexEngine.bat -c %APEX_HOME%\examples\config\SampleDomain\Stdin2StdoutJsonEventJava.json :: (3)
.. container:: colist arabic
+-------+---------+
| **1** | UNIX |
+-------+---------+
| **2** | Cygwin |
+-------+---------+
| **3** | Windows |
+-------+---------+
.. container:: paragraph
The engine should start successfully. Assuming the logging levels are
not changed (default level is ``info``), the output should look
similar to this (last few lines)
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
Starting Apex service with parameters [-c, v:/dev/ericsson/apex/onap/apex-pdp/packages/apex-pdp-package-full/target/install_hierarchy/examples/config/SampleDomain/Stdin2StdoutJsonEventJava.json] . . .
2018-09-05 15:16:42,800 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-0:0.0.1 .
2018-09-05 15:16:42,804 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-1:0.0.1 .
2018-09-05 15:16:42,804 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-2:0.0.1 .
2018-09-05 15:16:42,805 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-3:0.0.1 .
2018-09-05 15:16:42,805 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - APEX service created.
2018-09-05 15:16:43,962 Apex [main] INFO o.o.p.a.s.e.e.EngDepMessagingService - engine<-->deployment messaging starting . . .
2018-09-05 15:16:43,963 Apex [main] INFO o.o.p.a.s.e.e.EngDepMessagingService - engine<-->deployment messaging started
2018-09-05 15:16:44,987 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Registering apex model on engine MyApexEngine-0:0.0.1
2018-09-05 15:16:45,112 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Registering apex model on engine MyApexEngine-1:0.0.1
2018-09-05 15:16:45,113 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Registering apex model on engine MyApexEngine-2:0.0.1
2018-09-05 15:16:45,113 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Registering apex model on engine MyApexEngine-3:0.0.1
2018-09-05 15:16:45,120 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Added the action listener to the engine
Started Apex service
.. container:: paragraph
Important are the last two lines, stating that APEX has added the
final action listener to the engine and that the engine is started.
.. container:: paragraph
The engine is configured to read events from standard input and write
produced events to standard output. The policy model is a very simple
policy.
.. container:: paragraph
The following table shows an input event in the left column and an
output event in the right column. Paste the input event into the
console where APEX is running, and the output event should appear in
the console. Pasting the input event multiple times will produce
output events with different values.
+-------------------------------------------------------------+-------------------------------------------------------------+
| Input Event | Example Output Event |
+=============================================================+=============================================================+
| .. container:: | .. container:: |
| | |
| .. container:: content | .. container:: content |
| | |
| .. code:: bash | .. code:: bash |
| :number-lines: | :number-lines: |
| | |
| { | { |
| "nameSpace": "org.onap.policy.apex.sample.events", | "name": "Event0004", |
| "name": "Event0000", | "version": "0.0.1", |
| "version": "0.0.1", | "nameSpace": "org.onap.policy.apex.sample.events", |
| "source": "test", | "source": "Act", |
| "target": "apex", | "target": "Outside", |
| "TestSlogan": "Test slogan for External Event0", | "TestActCaseSelected": 2, |
| "TestMatchCase": 0, | "TestActStateTime": 1536157104627, |
| "TestTimestamp": 1469781869269, | "TestDecideCaseSelected": 0, |
| "TestTemperature": 9080.866 | "TestDecideStateTime": 1536157104625, |
| } | "TestEstablishCaseSelected": 0, |
| | "TestEstablishStateTime": 1536157104623, |
| | "TestMatchCase": 0, |
| | "TestMatchCaseSelected": 1, |
| | "TestMatchStateTime": 1536157104620, |
| | "TestSlogan": "Test slogan for External Event0", |
| | "TestTemperature": 9080.866, |
| | "TestTimestamp": 1469781869269 |
| | } |
+-------------------------------------------------------------+-------------------------------------------------------------+
.. container:: paragraph
Terminate APEX by simply using ``CTRL+C`` in the console.
Verify a Full Installation - REST Editor
----------------------------------------
.. container:: paragraph
APEX has a REST application for viewing policy models. The
application can also be used to create new policy models close to
the engine native policy language. Start the REST editor as
follows.
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
# $APEX_HOME/bin/apexApps.sh rest-editor
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
>%APEX_HOME%\bin\apexApps.bat rest-editor
.. container:: paragraph
The script will start a simple web server
(`Grizzly `__) and deploy a
``war`` web archive in it. Once the editor is started, it will be
available on ``localhost:18989``. The last few line of the messages
should be:
.. container:: listingblock
.. container:: content
.. code:: bash
:number-lines:
Apex Editor REST endpoint (ApexEditorMain: Config=[ApexEditorParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=READY) starting at http://localhost:18989/apexservices/ . . .
Sep 05, 2018 10:35:57 PM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [localhost:18989]
Sep 05, 2018 10:35:57 PM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Apex Editor REST endpoint (ApexEditorMain: Config=[ApexEditorParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=RUNNING) started at http://localhost:18989/apexservices/
.. container:: paragraph
Now open a browser (Firefox, Chrome, Opera, Internet Explorer) and
use the URL ``http://localhost:18989/``. This will connect the
browser to the started REST editor. The start screen should be as
follows.
.. container:: imageblock
.. container:: content
|REST Editor Start Screen|
.. container:: title
Figure 1. REST Editor Start Screen
.. container:: paragraph
Now load a policy model by clicking the menu ``File`` and then
``Open``. In the opened dialog, go to the directory where APEX is
installed, then ``examples``, ``models``, ``SampleDomain``, and there
select the file ``SamplePolicyModelJAVA.json``. This will load the
policy model used to verify the policy engine (see above). Once
loaded, the screen should look as follows.
.. container:: imageblock
.. container:: content
|REST Editor with loaded SampleDomain Policy Model|
.. container:: title
Figure 2. REST Editor with loaded SampleDomain Policy Model
.. container:: paragraph
Now you can use the REST editor. To finish this verification, simply
terminate your browser (or the tab), and then use ``CTRL+C`` in the
console where you started the REST editor.
Installing WAR Applications
^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. container:: sectionbody
.. container:: paragraph
APEX comes with a set of WAR files. These are complete
applications that can be installed and run in an application
server. All of these applications are realized as servlets. You
can find the WAR applications in ``$APEX_HOME/war`` (UNIX,
Cygwin) or ``%APEX_HOME%\war`` (Windows).
.. container:: paragraph
Installing and using the WAR applications requires a web server
that can execute ``war`` web archives. We recommend using
`Apache Tomcat `__, however other
web servers can be used as well.
.. container:: paragraph
Install Apache Tomcat including the ``Manager App``, see `V9.0
Docs `__
for details. Start the Tomcat service, or make sure that Tomcat
is running.
.. container:: paragraph
There are multiple ways to install the APEX WAR applications:
.. container:: ulist
- copy the ``.war`` file into the Tomcat ``webapps`` folder
- use the Tomcat ``Manager App`` to deploy via the web
interface
- deploy using a REST call to Tomcat
.. container:: paragraph
For details on how to install ``war`` files please consult the
`Tomcat
Documentation `__
or the `Manager App
HOW-TO `__.
Once you have installed an APEX WAR application (and wait for
sufficient time for Tomcat to finalize the installation), open
the ``Manager App`` in Tomcat. You should see the APEX WAR
application being installed and running.
.. container:: paragraph
In case of errors, examine the log files in the Tomcat log
directory. In a conventional install, those log files are in
the logs directory where Tomcat is installed.
.. container:: paragraph
The current APEX version provides the following WAR
applications:
.. container:: ulist
- client-deployment-2.0.0-SNAPSHOT.war - a client to deploy
new policy models to a running engine
- client-editor-2.0.0-SNAPSHOT.war - the standard policy REST
editor GUI
- client-monitoring-2.0.0-SNAPSHOT.war - a client for
monitoring a running APEX engine
- client-full-2.0.0-SNAPSHOT.war - a full client with a
one-stop-access to deployment, monitoring, and REST editor
- examples-servlet-2.0.0-SNAPSHOT.war - an example APEX
servlet
Running APEX in Docker
^^^^^^^^^^^^^^^^^^^^^^
.. container:: sectionbody
.. container:: paragraph
Since APEX is in ONAP, we provide a full virtualization
environment for the engine.
Run in ONAP
-----------
.. container:: paragraph
Running APEX from the ONAP docker repository only requires 2
commands:
.. container:: olist arabic
#. Log into the ONAP docker repo
.. container:: listingblock
.. container:: content
::
docker login -u docker -p docker nexus3.onap.org:10003
.. container:: olist arabic
#. Run the APEX docker image
.. container:: listingblock
.. container:: content
::
docker run -it --rm nexus3.onap.org:10003/onap/policy-apex-pdp:latest
Build a Docker Image
--------------------
.. container:: paragraph
Alternatively, one can use the Dockerfile defined in the
Docker package to build an image.
.. container:: listingblock
.. container:: title
APEX Dockerfile
.. container:: content
.. code:: bash
:number-lines:
#
# Docker file to build an image that runs APEX on Java 8 in Ubuntu
#
FROM ubuntu:16.04
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y software-properties-common && \
add-apt-repository ppa:openjdk-r/ppa -y && \
apt-get update && \
apt-get install -y openjdk-8-jdk
# Create apex user and group
RUN groupadd apexuser
RUN useradd --create-home -g apexuser apexuser
# Add Apex-specific directories and set ownership as the Apex admin user
RUN mkdir -p /opt/app/policy/apex-pdp
RUN mkdir -p /var/log/onap/policy/apex-pdp
RUN chown -R apexuser:apexuser /var/log/onap/policy/apex-pdp
# Unpack the tarball
RUN mkdir /packages
COPY apex-pdp-package-full.tar.gz /packages
RUN tar xvfz /packages/apex-pdp-package-full.tar.gz --directory /opt/app/policy/apex-pdp
RUN rm /packages/apex-pdp-package-full.tar.gz
# Ensure everything has the correct permissions
RUN find /opt/app -type d -perm 755
RUN find /opt/app -type f -perm 644
RUN chmod a+x /opt/app/policy/apex-pdp/bin/*
# Copy examples to Apex user area
RUN cp -pr /opt/app/policy/apex-pdp/examples /home/apexuser
RUN apt-get clean
RUN chown -R apexuser:apexuser /home/apexuser/*
USER apexuser
ENV PATH /opt/app/policy/apex-pdp/bin:$PATH
WORKDIR /home/apexuser
.. container::
:name: footer
.. container::
:name: footer-text
2.0.0-SNAPSHOT
Last updated 2018-09-10 15:38:16 IST
.. |Extract the TAR archive| image:: images/install-guide/win-extract-tar-gz.png
.. |Extract the APEX distribution| image:: images/install-guide/win-extract-tar.png
.. |REST Editor Start Screen| image:: images/install-guide/rest-start.png
.. |REST Editor with loaded SampleDomain Policy Model| image:: images/install-guide/rest-loaded.png