]> granicus.if.org Git - icinga2/blobdiff - INSTALL.md
Use std::vector::emplace_back instead of std::vector::push_back
[icinga2] / INSTALL.md
index 32353bcb40c83efa897d9caa4c2f63e37f79eb88..23d3d5b68e406e06a1be03c18a11b322fa70ec9b 100644 (file)
@@ -27,23 +27,23 @@ parentheses):
 
 * cmake >= 2.6
 * GNU make (make)
-* C++ compiler which supports C++11 (gcc-c++ >= 4.7 on RHEL/SUSE, build-essential on Debian, alternatively clang++)
+* C++ compiler which supports C++11 (gcc-c++ >= 4.7 on RHEL/SUSE, build-essential on Debian, alternatively clang++, build-base on Alpine)
  * RedHat Developer Tools on RHEL5/6 (details on building below)
 * pkg-config
-* OpenSSL library and header files >= 0.9.8 (openssl-devel on RHEL, libopenssl1-devel on SLES11,
-libopenssl-devel on SLES12, libssl-dev on Debian)
-* Boost library and header files >= 1.41.0 (boost-devel on RHEL, libboost-all-dev on Debian)
+* OpenSSL library and header files >= 1.0.1 (openssl-devel on RHEL, libopenssl1-devel on SLES11,
+libopenssl-devel on SLES12, libssl-dev on Debian, libressl-dev on Alpine)
+* Boost library and header files >= 1.48.0 (boost148-devel on EPEL for RHEL / CentOS, libboost-all-dev on Debian, boost-dev on Alpine)
 * GNU bison (bison)
 * GNU flex (flex) >= 2.5.35
 * recommended: libexecinfo on FreeBSD (automatically used when Icinga 2 is
                installed via port or package)
-* optional: MySQL (mysql-devel on RHEL, libmysqlclient-devel on SUSE, libmysqlclient-dev on Debian);
+* optional: MySQL (mysql-devel on RHEL, libmysqlclient-devel on SUSE, libmysqlclient-dev until Debian 8 jessie / default-libmysqlclient-dev from Debian 9 stretch, mariadb-dev on Alpine);
             set CMake variable `ICINGA2_WITH_MYSQL` to `OFF` to disable this module
-* optional: PostgreSQL (postgresql-devel on RHEL, libpq-dev on Debian); set CMake
+* optional: PostgreSQL (postgresql-devel on RHEL, libpq-dev on Debian, postgresql-dev on Alpine); set CMake
             variable `ICINGA2_WITH_PGSQL` to `OFF` to disable this module
-* optional: YAJL (yajl-devel on RHEL, libyajl-dev on Debian)
+* optional: YAJL (yajl-devel on RHEL, libyajl-dev on Debian, yajl-dev on Alpine)
 * optional: libedit (libedit-devel on CentOS (RHEL requires rhel-7-server-optional-rpms
-            repository for el7 e.g.), libedit-dev on Debian)
+            repository for el7 e.g.), libedit-dev on Debian and Alpine)
 * optional: Termcap (libtermcap-devel on RHEL, not necessary on Debian) - only
             required if libedit doesn't already link against termcap/ncurses
 * optional: libwxgtk2.8-dev or newer (wxGTK-devel and wxBase) - only required when building the Icinga 2 Studio
@@ -65,6 +65,13 @@ using the `ICINGA2_USER`, `ICINGA2_GROUP` and `ICINGA2_COMMAND_GROUP` variables.
     # groupadd icingacmd
     # useradd -c "icinga" -s /sbin/nologin -G icingacmd -g icinga icinga
 
+On Alpine (which uses ash busybox) you can run:
+
+    # addgroup -S icinga
+    # addgroup -S icingacmd
+    # adduser -S -D -H -h /var/spool/icinga2 -s /sbin/nologin -G icinga -g icinga icinga
+    # adduser icinga icingacmd
+
 Add the web server user to the icingacmd group in order to grant it write
 permissions to the external command pipe and livestatus socket:
 
@@ -126,14 +133,64 @@ overridden by creating a file called `icinga-version.h.force` in the source
 directory. Alternatively the `-DICINGA2_GIT_VERSION_INFO=OFF` option for CMake
 can be used to disable the usage of `git describe`.
 
-### Building Icinga 2 RPMs
+## Build Icinga 2 RPMs
+
+### Build Environment on RHEL, CentOS, Fedora, Amazon Linux
+
+Setup your build environment:
+
+    yum -y install rpmdevtools
+
+### Build Environment on SuSE/SLES
+
+SLES:
+
+    zypper addrepo http://download.opensuse.org/repositories/devel:tools/SLE_12_SP2/devel:tools.repo
+    zypper refresh
+    zypper install rpmdevtools spectool
+
+OpenSuSE:
+
+    zypper addrepo http://download.opensuse.org/repositories/devel:tools/openSUSE_Leap_42.3/devel:tools.repo
+    zypper refresh
+    zypper install rpmdevtools spectool
+
+### Package Builds
+
+Prepare the rpmbuild directory tree:
+
+    cd $HOME
+    rpmdev-setuptree
+
+Copy the icinga2.spec file to `rpmbuild/SPEC` or fetch the latest version:
+
+    curl https://raw.githubusercontent.com/Icinga/icinga2/master/icinga2.spec -o $HOME/rpmbuild/SPECS/icinga2.spec
+
+Copy the tarball to `rpmbuild/SOURCES` e.g. by using the `spectool` binary
+provided with `rpmdevtools`:
+
+    cd $HOME/rpmbuild/SOURCES
+    spectool -g ../SPECS/icinga2.spec
+
+    cd $HOME/rpmbuild
+
+Install the build dependencies. Example for CentOS 7:
 
-Setup your build environment on RHEL/SUSE and copy the generated tarball from your git
-repository to `rpmbuild/SOURCES`.
+    yum -y install libedit-devel ncurses-devel gcc-c++ libstdc++-devel openssl-devel \
+    cmake flex bison boost-devel systemd mysql-devel postgresql-devel httpd \
+    selinux-policy-devel checkpolicy selinux-policy selinux-policy-doc
 
-Copy the icinga2.spec file to `rpmbuild/SPEC` and then run this command:
+Note: If you are using Amazon Linux, systemd is not required.
 
-    $ rpmbuild -ba SPEC/icinga2.spec
+A shorter way is available using the `yum-builddep` command on RHEL based systems:
+
+    yum-builddep SPECS/icinga2.spec
+
+Build the RPM:
+
+    rpmbuild -ba SPECS/icinga2.spec
+
+### Additional Hints
 
 #### SELinux policy module
 
@@ -156,21 +213,27 @@ C++11 features.
     gpgcheck=0
     REPO
 
-    yum install -y devtoolset-2-gcc devtoolset-2-gcc-c++ devtoolset-2-binutils
+Dependencies to devtools-2 are used in the RPM SPEC, so the correct tools
+should be used for building.
+
+As an alternative, you can use newer Boost packages provided on
+[packages.icinga.com](https://packages.icinga.com/epel).
 
-    export LD_LIBRARY_PATH=/opt/rh/devtoolset-2/root/usr/lib:$LD_LIBRARY_PATH
-    export PATH=/opt/rh/devtoolset-2/root/usr/bin:$PATH
-    ln -sf /opt/rh/devtoolset-2/root/usr/bin/ld.bfd /opt/rh/devtoolset-2/root/usr/bin/ld
-    for file in `find /opt/rh/devtoolset-2/root/usr/include/c++ -name c++config.h`; do
-      echo '#define _GLIBCXX__PTHREADS' >> $file
-    done
+    cat >$HOME/.rpmmacros <<MACROS
+    %build_icinga_org 1
+    MACROS
+
+#### Amazon Linux
+
+If you prefer to build packages offline, a suitable Vagrant box is located
+[here](https://atlas.hashicorp.com/mvbcoding/boxes/awslinux/).
 
 #### SLES 11
 
 The Icinga repository provides the required boost package version and must be
 added before building.
 
-### Building Icinga 2 Debs
+## Build Icinga 2 Debian/Ubuntu packages
 
 Setup your build environment on Debian/Ubuntu, copy the 'debian' directory from
 the Debian packaging Git repository (https://github.com/Icinga/pkg-icinga2-debian)
@@ -178,7 +241,19 @@ into your source tree and run the following command:
 
     $ dpkg-buildpackage -uc -us
 
-### Building Post Install Tasks
+
+## Build Alpine Linux packages
+
+A simple way to setup a build environment is installing Alpine in a chroot.
+In this way, you can set up an Alpine build environment in a chroot under a
+different Linux distro.
+There is a script that simplifies these steps with just two commands, and
+can be found [here](https://github.com/alpinelinux/alpine-chroot-install).
+
+Once the build environment is installed, you can setup the system to build
+the packages by following [this document](https://wiki.alpinelinux.org/wiki/Creating_an_Alpine_package).
+
+## Build Post Install Tasks
 
 After building Icinga 2 yourself, your package build system should at least run the following post
 install requirements:
@@ -186,9 +261,9 @@ install requirements:
 * enable the `checker`, `notification` and `mainlog` feature by default
 * run 'icinga2 api setup' in order to enable the `api` feature and generate SSL certificates for the node
 
-## Running Icinga 2
+## Run Icinga 2
 
-Icinga 2 comes with a single binary that takes care of loading all the relevant
+Icinga 2 comes with a binary that takes care of loading all the relevant
 components (e.g. for check execution, notifications, etc.):
 
     # icinga2 daemon
@@ -197,15 +272,38 @@ components (e.g. for check execution, notifications, etc.):
     [2016-12-08 16:44:25 +0100] information/ConfigItem: Committing config item(s).
     ...
 
+### Init Script
+
 Icinga 2 can be started as a daemon using the provided init script:
 
     # /etc/init.d/icinga2
     Usage: /etc/init.d/icinga2 {start|stop|restart|reload|checkconfig|status}
 
-Or if your distribution uses systemd:
+### Systemd
+
+If your distribution uses Systemd:
 
     # systemctl {start|stop|reload|status|enable|disable} icinga2
 
+In case the distribution is running Systemd >227, you'll also
+need to package and install the `etc/initsystem/icinga2.service.limits.conf`
+file into `/etc/systemd/system/icinga2.service.d`.
+
+### openrc
+
+Or if your distribution uses openrc (like Alpine):
+
+    # rc-service icinga2
+       Usage: /etc/init.d/icinga2 {start|stop|restart|reload|checkconfig|status}
+
+Note: the openrc's init.d is not shipped by default.
+A working init.d with openrc can be found here: (https://git.alpinelinux.org/cgit/aports/plain/community/icinga2/icinga2.initd). If you have customized some path, edit the file and adjust it according with your setup. 
+Those few steps can be followed:
+
+    # wget https://git.alpinelinux.org/cgit/aports/plain/community/icinga2/icinga2.initd
+    # mv icinga2.initd /etc/init.d/icinga2
+       # chmod +x /etc/init.d/icinga2
+
 Icinga 2 reads a single configuration file which is used to specify all
 configuration settings (global settings, hosts, services, etc.). The
 configuration format is explained in detail in the [doc/](doc/) directory.