diff --git a/Makefile b/Makefile index 574cd09..c0eda11 100644 --- a/Makefile +++ b/Makefile @@ -28,3 +28,6 @@ last: 20.10 ## Build last version available (20.10) 20.10: ## Build Centreon OSS 20.10 over Centos ISO @packer build -parallel=false -var-file vars/centreon-2010.json centreon-local.json + +20.10-centos8: ## Build Centreon OSS 20.10 over Centos 8 ISO + @packer build -parallel=false -var-file vars/centreon-2010-centos8.json centreon-local.json diff --git a/boot/ks-20.10.0-centos8.cfg b/boot/ks-20.10.0-centos8.cfg new file mode 100644 index 0000000..218dfc3 --- /dev/null +++ b/boot/ks-20.10.0-centos8.cfg @@ -0,0 +1,52 @@ +install +cdrom +text + +firstboot --disable + +keyboard --vckeymap=us --xlayouts=us +lang en_US.UTF-8 +timezone Europe/Paris --nontp + +network --bootproto=dhcp --device=link --noipv6 --activate +network --hostname=centreon + +#auth --enableshadow --passalgo=sha512 +rootpw --plaintext centreon +user --name=centreon --plaintext --password=centreon --groups=wheel + +firewall --disabled +selinux --disabled +skipx + +url --url=http://centos.mirrors.ovh.net/ftp.centos.org/8/BaseOS/x86_64/os/ + +# Accept Eula +eula --agreed + +zerombr +clearpart --all --initlabel +bootloader --location=mbr --append="crashkernel=auto" +part /boot --label=boot --fstype=ext4 --size=512 --asprimary +part /boot/efi --fstype=ext4 --size=512 +part pv.01 --grow +volgroup vg-sys pv.01 +logvol / --vgname=vg-sys --name=root --fstype=xfs --size=20480 +logvol /var/cache/centreon/backup --fstype=xfs --size=5120 --vgname=vg-sys --name=centreon-backup +logvol /var/lib/centreon --fstype=xfs --size=7168 --vgname=vg-sys --name=centreon-lib +logvol /var/lib/centreon-broker --fstype=xfs --size=5120 --vgname=vg-sys --name=centreon-broker +logvol /var/lib/mysql --fstype=xfs --size=16384 --vgname=vg-sys --name=mysql +logvol /var/log --fstype=xfs --size=10240 --vgname=vg-sys --name=log +logvol swap --vgname=vg-sys --name=swap --fstype=swap --recommended + +services --enabled=NetworkManager,sshd +reboot + +%packages +@^minimal-environment +@standard +%end + +%addon com_redhat_kdump --disable --reserve-mb='auto' + +%end \ No newline at end of file diff --git a/centreon-local.json b/centreon-local.json index ed16458..8fa9d69 100644 --- a/centreon-local.json +++ b/centreon-local.json @@ -32,14 +32,13 @@ "iso_checksum": "{{user `iso_checksum`}}", "iso_checksum_type": "{{user `iso_checksum_type`}}", "guest_os_type": "RedHat_64", - "hard_drive_interface": "scsi", "disk_size": "793600", - "floppy_files": [ - "./boot/ks-{{user `artifact_version`}}.cfg" - ], + "http_directory": "boot", "headless": false, "guest_additions_mode": "disable", - "boot_command": " inst.ks=hd:fd0:/ks-{{user `artifact_version`}}.cfg ", + "boot_command": [ + "text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks-{{user `artifact_version`}}.cfg" + ], "boot_wait": "5s", "ssh_username": "root", "ssh_password": "centreon", @@ -55,10 +54,10 @@ "iso_checksum_type": "{{user `iso_checksum_type`}}", "guest_os_type": "RedHat_64", "disk_size": "793600", - "floppy_files": [ - "./boot/ks-{{user `artifact_version`}}.cfg" + "http_directory": "boot", + "boot_command": [ + "text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks-{{user `artifact_version`}}.cfg" ], - "boot_command": " inst.ks=hd:fd0:/ks-{{user `artifact_version`}}.cfg ", "boot_wait": "5s", "ssh_username": "root", "ssh_password": "centreon", @@ -81,10 +80,10 @@ "net_device": "virtio-net", "disk_interface": "virtio-scsi", "disk_size": "793600", - "floppy_files": [ - "./boot/ks-{{user `artifact_version`}}.cfg" + "http_directory": "boot", + "boot_command": [ + "text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks-{{user `artifact_version`}}.cfg" ], - "boot_command": " inst.ks=hd:fd0:/ks-{{user `artifact_version`}}.cfg ", "boot_wait": "5s", "ssh_username": "root", "ssh_password": "centreon", @@ -101,8 +100,8 @@ "instance_type" : "t2.micro", "source_ami" : "ami-e0eac385", "ssh_username" : "centos", - "ami_name" : "Centreon 20.04 Build 0.0.1", - "ami_description" : "Centreon 20.04 OSS", + "ami_name" : "Centreon 20.10 Build 0.0.1", + "ami_description" : "Centreon 20.10 OSS", "run_tags" : { "Name" : "packer-builder-centreon", "Tool" : "Packer", diff --git a/scripts/centreon-20.10.0-centos8.sh b/scripts/centreon-20.10.0-centos8.sh new file mode 100644 index 0000000..6bd61b5 --- /dev/null +++ b/scripts/centreon-20.10.0-centos8.sh @@ -0,0 +1,202 @@ +#!/bin/sh + +DEBUG=1 + +MYSQL_HOST="localhost" +MYSQL_PORT="3306" +MYSQL_USER="centreon" +MYSQL_PASSWD="c3ntr30n" +MYSQL_ROOT_PASSWORD="change123" +CENTREON_ADMIN_NAME="Administrator" +CENTREON_ADMIN_EMAIL="admin@admin.co" +CENTREON_ADMIN_PASSWD="change123" + +function InstallDbCentreon() { + + CENTREON_HOST="http://localhost" + COOKIE_FILE="/tmp/install.cookie" + CURL_CMD="curl -q -o /dev/null -b ${COOKIE_FILE}" + + curl -q -c ${COOKIE_FILE} ${CENTREON_HOST}/centreon/install/install.php + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/step.php?action=stepContent" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/step.php?action=nextStep" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/step.php?action=nextStep" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/process_step3.php" \ + --data "install_dir_engine=%2Fusr%2Fshare%2Fcentreon-engine¢reon_engine_stats_binary=%2Fusr%2Fsbin%2Fcentenginestats&monitoring_var_lib=%2Fvar%2Flib%2Fcentreon-engine¢reon_engine_connectors=%2Fusr%2Flib64%2Fcentreon-connector¢reon_engine_lib=%2Fusr%2Flib64%2Fcentreon-engine¢reonplugins=%2Fusr%2Flib%2Fcentreon%2Fplugins%2F" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/step.php?action=nextStep" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/process_step4.php" \ + --data "centreonbroker_etc=%2Fetc%2Fcentreon-broker¢reonbroker_cbmod=%2Fusr%2Flib64%2Fnagios%2Fcbmod.so¢reonbroker_log=%2Fvar%2Flog%2Fcentreon-broker¢reonbroker_varlib=%2Fvar%2Flib%2Fcentreon-broker¢reonbroker_lib=%2Fusr%2Fshare%2Fcentreon%2Flib%2Fcentreon-broker" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/step.php?action=nextStep" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/process_step5.php" \ + --data "admin_password=${CENTREON_ADMIN_PASSWD}&confirm_password=${CENTREON_ADMIN_PASSWD}&firstname=${CENTREON_ADMIN_NAME}&lastname=${CENTREON_ADMIN_NAME}&email=${CENTREON_ADMIN_EMAIL}" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/step.php?action=nextStep" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/process_step6.php" \ + --data "address=${MYSQL_HOST}&port=${MYSQL_PORT}&root_user=root&root_password=${MYSQL_ROOT_PASSWORD}&db_configuration=centreon&db_storage=centreon_storage&db_user=${MYSQL_USER}&db_password=${MYSQL_PASSWD}&db_password_confirm=${MYSQL_PASSWD}" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/step.php?action=nextStep" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/configFileSetup.php" -X POST + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/installConfigurationDb.php" -X POST + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/installStorageDb.php" -X POST + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/createDbUser.php" -X POST + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/insertBaseConf.php" -X POST + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/partitionTables.php" -X POST + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/step.php?action=nextStep" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/process_step8.php" \ + --data "modules%5B%5D=centreon-license-manager&modules%5B%5D=centreon-pp-manager&modules%5B%5D=centreon-autodiscovery-server" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/step.php?action=nextStep" + ${CURL_CMD} "${CENTREON_HOST}/centreon/install/steps/process/process_step9.php" \ + --data "send_statistics=1" +} + +function installPlugins() { + + # Install JQ tool (https://stedolan.github.io/jq/) + # to help manage json output in shell + curl -q -o /usr/sbin/jq -L https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 + chmod +x /usr/sbin/jq + + SLUGS=$(curl -q -L -g 'https://api.imp.centreon.com/api/pluginpack/pluginpack?sort=catalog_level&by=asc&page[number]=1&page[size]=20') + + PLUGINS=( + base-generic + applications-databases-mysql + operatingsystems-linux-snmp + applications-monitoring-centreon-database + applications-monitoring-centreon-central + ) + + CENTREON_HOST="http://localhost" + CURL_CMD="curl " + + for PLUGIN in "${PLUGINS[@]}"; do + JSON_PLUGIN="{\"slug\": \"${PLUGIN}\", \"version\": $(echo $SLUGS | tr '\r\n' ' ' | jq ".data[].attributes | select(.slug | contains(\"${PLUGIN}\")).version"), \"action\": \"install\"}" + STATUS=0 + while [ $STATUS -eq 0 ]; do + API_TOKEN=$(curl -q -d "username=admin&password=${CENTREON_ADMIN_PASSWD}" \ + "${CENTREON_HOST}/centreon/api/index.php?action=authenticate" \ + | cut -f2 -d":" | sed -e "s/\"//g" -e "s/}//" + ) + CURL_OUTPUT=$(${CURL_CMD} -X POST \ + -H "Content-Type: application/json" \ + -H "centreon-auth-token: $(read <<<"$API_TOKEN";echo "$REPLY")" \ + -d "{\"pluginpack\":[${JSON_PLUGIN}]}" \ + "${CENTREON_HOST}/centreon/api/index.php?object=centreon_pp_manager_pluginpack&action=installupdate" + ) + if [ $DEBUG -eq 1 ]; then + echo "Curl ouput: ${CURL_OUTPUT}" + fi + if ! [ $(echo $CURL_OUTPUT | grep "Forbidden") ]; then + STATUS=1 + fi + done + done +} + +function installWidgets() { + WIDGETS=( + engine-status + global-health + graph-monitoring + grid-map + host-monitoring + hostgroup-monitoring + httploader + live-top10-cpu-usage + live-top10-memory-usage + service-monitoring + servicegroup-monitoring + tactical-overview + ) + + CENTREON_HOST="http://localhost" + CURL_CMD="curl -q -o /dev/null" + + for WIDGET in "${WIDGETS[@]}"; do + # Install package + yum install -y centreon-widget-${WIDGET} + API_TOKEN=$(curl -q -d "username=admin&password=${CENTREON_ADMIN_PASSWD}" \ + "${CENTREON_HOST}/centreon/api/index.php?action=authenticate" \ + | cut -f2 -d":" | sed -e "s/\"//g" -e "s/}//" + ) + # Configure widget in Centreon + ${CURL_CMD} -X POST \ + -H "Content-Type: application/json" \ + -H "centreon-auth-token: $(read <<<"$API_TOKEN";echo "$REPLY")" \ + "${CENTREON_HOST}/centreon/api/index.php?object=centreon_module&action=install&id=${WIDGET}&type=widget" + done +} + +function initialConfiguration() { + + # Add server and set snmp configuration + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -o HG -a add -v "Linux;Linux servers" + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -o HOST -a ADD -v "centreon-central;Centreon Central;127.0.0.1;App-Monitoring-Centreon-Central-custom|App-Monitoring-Centreon-Database-custom;central;Linux" + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -o HOST -a setmacro -v "centreon-central;MYSQLPASSWORD;${MYSQL_PASSWD}" + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -o HOST -a setparam -v "centreon-central;snmp_community;public" + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -o HOST -a setparam -v "centreon-central;snmp_version;2c" + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -o HOST -a applytpl -v "centreon-central" + + # add a plugin to monitor each ethernet interface + ip -o link show | awk -F': ' '{print $2}' | grep -v 'lo' | while read IFNAME; do + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -o SERVICE -a add -v "centreon-central;Interface-${IFNAME};OS-Linux-Traffic-Generic-Name-SNMP" + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -o SERVICE -a setmacro -v "centreon-central;Interface-${IFNAME};INTERFACENAME;${IFNAME}" + done + + # add mount point from partition of system to monitor + lsblk -o MOUNTPOINT | sed -e 1d -e '/^$/d' | while read MP; do + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -o SERVICE -a add -v "centreon-central;Mountpoint-${MP};OS-Linux-Disk-Generic-Name-SNMP" + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -o SERVICE -a setmacro -v "centreon-central;Mountpoint-${MP};DISKNAME;${MP}" + done + + # Apply configuration + centreon -u admin -p ${CENTREON_ADMIN_PASSWD} -a CFGMOVE -v 1 +} + +dnf install -y wget curl openssh-server +dnf install -y 'dnf-command(config-manager)' +dnf config-manager --set-enabled PowerTools +dnf install -y http://yum.centreon.com/standard/20.10/el8/stable/noarch/RPMS/centreon-release-20.10-2.el8.noarch.rpm +#curl -L https://raw.githubusercontent.com/centreon/centreon/master/unattended.sh | sh + +dnf install -y centreon centreon-database + +systemctl daemon-reload +systemctl restart mariadb +mysqladmin -u root password $MYSQL_ROOT_PASSWORD # Set password to root mysql +systemctl restart php-fpm +systemctl restart httpd +sleep 5 # waiting start httpd process +InstallDbCentreon # Configure database +su - centreon -c "/bin/php /usr/share/centreon/cron/centreon-partitioning.php" +systemctl restart cbd + +# Install Plugins +installPlugins + +# Install widgets and configure +#installWidgets + +# Apply initial configuration from owner server +initialConfiguration + +# Enable all others services +systemctl enable mariadb +systemctl enable httpd +systemctl enable snmpd +systemctl enable snmptrapd +#systemctl enable ntpd +systemctl enable php-fpm +systemctl enable gorgoned +systemctl enable centreontrapd +systemctl enable cbd +systemctl enable centengine +systemctl enable centreon + +# Set profile script +mkdir -p /srv/centreon +mv -v /tmp/scripts/generateUUID.php /srv/centreon/generateUUID.php +mv -v /tmp/scripts/generateAppKey.php /srv/centreon/generateAppKey.php +# install banner binary from Epel, used by centreon profile.d +yum install -y epel-release \ + && yum install -y banner \ + && yum remove -y epel-release +mv -v /tmp/scripts/centreon-profile.sh /etc/profile.d/centreon.sh diff --git a/vars/centreon-2010-centos8.json b/vars/centreon-2010-centos8.json new file mode 100644 index 0000000..bf49559 --- /dev/null +++ b/vars/centreon-2010-centos8.json @@ -0,0 +1,8 @@ +{ + "iso_url": "http://centos.mirrors.ovh.net/ftp.centos.org/8/isos/x86_64/CentOS-8.2.2004-x86_64-boot.iso", + "iso_checksum": "c67876a5602faa17f68b40ccf2628799b87454aa67700f0f57eec15c6ccdd98c", + "artifact_description": "Centreon 20.10.0 (CentOS-8.2.2004-x86_64-boot.iso), 62GB /, nothing extra", + "artifact_version": "20.10.0-centos8", + "centreon_release": "20.10-centos8", + "redhat_release": "8.2" +}