diff --git a/seqs/librenms.cfg.example b/seqs/librenms.cfg.example new file mode 100644 index 0000000..e858f65 --- /dev/null +++ b/seqs/librenms.cfg.example @@ -0,0 +1,5 @@ +#!/bin/bash + +LNMS_DIR="/opt/librenms" +LNMS_BU_DIR="/root/backup/librenms" +LNMS_DB_NAME="librenms_db" diff --git a/seqs/librenms.sh b/seqs/librenms.sh index c793807..851a444 100755 --- a/seqs/librenms.sh +++ b/seqs/librenms.sh @@ -4,10 +4,35 @@ ## Installation and maintenance for LibreNMS ## Using buster repositories for php 7.3 installation -toolName="LibreNMS" -librePhpDeps="composer php-cli-prompt php-composer-ca-bundle php-composer-semver php-composer-spdx-licenses php-json-schema php-psr-log php-symfony-console php-symfony-filesystem php-symfony-finder php-symfony-polyfill-mbstring php-symfony-process" -librePackages="fping git graphviz imagemagick mtr-tiny nmap python-memcache python-mysqldb rrdtool snmp snmpd whoisi nagios-plugins" +toolName="librenms" +phpVersion= +libreDeps="acl curl composer fping git graphviz imagemagick mtr-tiny nmap rrdtool snmp snmpd whois python3-dotenv python3-pymysql python3-redis python3-setuptools" + +librePhpDeps='php${phpVersion}-cli php${phpVersion}-curl php${phpVersion}-fpm php${phpVersion}-gd php${phpVersion}-json php${phpVersion}-mbstring php${phpVersion}-mysql php${phpVersion}-snmp php${phpVersion}-xml php${phpVersion}-zip' + +#librePhpDeps="composer php-cli-prompt php-composer-ca-bundle php-composer-semver php-composer-spdx-licenses php-json-schema php-psr-log php-symfony-console php-symfony-filesystem php-symfony-finder php-symfony-polyfill-mbstring php-symfony-process" +#librePackages="fping git graphviz imagemagick mtr-tiny nmap python-memcache python-mysqldb rrdtool snmp snmpd whoisi nagios-plugins" + +# Get script working directory +# (when called from a different directory) +WDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >>/dev/null 2>&1 && pwd )" +CONFIG=0 +SCRIPT_NAME=$(basename -- "$0") +SCRIPT_NAME=${SCRIPT_NAME%%.*} +CONFIG_FILE_NAME="${SCRIPT_NAME}.cfg" +CONFIG_FILE_TEMPLATE="$WDIR/${CONFIG_FILE_NAME}.example" + +step_config() { + initSeqConfig "$CONFIG_FILE_NAME" "$CONFIG_FILE_TEMPLATE" + if [ $? -eq 0 ] ; then + CONFIG=1 + echo " Install: $LNMS_DIR" + echo " Backup: $LNMS_BU_DIR" + else + exit 1 + fi +} step_1_info() { echo "Updating apt"; } step_1_alias() { ALIAS="install"; } @@ -15,18 +40,24 @@ step_1() { exe apt update } -step_2_info() { echo -e "Installing $toolname dependencies: $librePackages"; } +step_2_info() { + echo "Installing $toolname dependencies:" + echoinfo "$libreDeps" +} step_2() { exe apt install $librePackages - saveReturn $? - endReturn + endReturn -o $? "Failed to install $toolName dependencies" } -step_3_info() { echo -e "Installing -t buster PHP related packages:\n $librePhpDeps"; } +step_3_info() { + echo "Installing PHP related packages:" + fetchPhpVersion + echoinfo `eval echo "$librePhpDeps"` +} step_3() { - exe apt -t buster install $librePhpDeps - saveReturn $? - endReturn + fetchPhpVersion + exe apt install `eval echo "$librePhpDeps"` + endReturn -o $? "Failed to install $toolName php dependencies" } step_4_info() { echo "Adding $toolName user (librenms:librenms)"; } @@ -35,51 +66,20 @@ step_4() { saveReturn $? exe usermod -a -G librenms www-data saveReturn $? - endReturn + endReturn "Failed to create $toolName user" } step_5_info() { echo "Installing $toolName using composer"; } step_5() { cd /opt exe composer create-project --no-dev --keep-vcs librenms/librenms librenms dev-master - saveReturn $? - endReturn + endReturn -o $? "Failed to install php dependencies" } step_10_info() { echo "Create mysql database for $toolName"; } step_10() { - local mysqlDatabase - local mysqlUser - local mysqlPass - - echo "Existing mysql databases:" - exe mysql -u root -e 'SHOW DATABASES;' - - echo -en "Enter database name: " - read mysqlDatabase - endCheckEmpty mysqlDatabase "database name" - exe mysql -u root -e 'CREATE DATABASE '$mysqlDatabase' CHARACTER SET utf8 COLLATE utf8_unicode_ci;' - saveReturn $? - endReturn - - echo "Existing mysql user:" - exe mysql -u root -e 'SELECT User, Host FROM mysql.user;' - echo -en "Enter mysql user name: " - read mysqlUser - endCheckEmpty mysqlDatabase "user name" - - echo -en "Enter mysql user password: " - read mysqlPass - endCheckEmpty mysqlPass "password" - exe mysql -u root -e 'CREATE USER '"'"$mysqlUser"'"'@'"'"'localhost'"'"' IDENTIFIED BY '"'"$mysqlPass"'"';' - saveReturn $? - endReturn - - exe mysql -u root -e 'GRANT ALL PRIVILEGES ON '$mysqlDatabase'.* TO '"'"$mysqlUser"'"'@'"'"'localhost'"'"';' - saveReturn $? - endReturn - - exe mysql -u root -e 'FLUSH PRIVILEGES;' + ${WDIR}/mysql.sh -q createdb + endReturn -o $? "Failed to create mysql database $LNMS_DB_NAME" } step_11_info() { echo "MariaDB configuration"; } @@ -113,16 +113,26 @@ step_12() { echo "service php7.3-fpm restart" } -step_30_info() { echo "Backup installation directory"; } +step_30_info() { echo "Backup ${toolName} web direcotry"; } step_30_alias() { ALIAS="backup"; } step_30() { - echo "Backing up..." + [ $QUIET -ne 2 ] && echo " [I] Backup install directory ${LNMS_DIR}..." + exep "cd \"${LNMS_DIR}\"/.. && tar czf \"${LNMS_BU_DIR}/\`date +%Y%m%d\`_${toolName}_web.tar.gz\" \"$(basename "$LNMS_DIR")\"" } -step_31_info() { echo "Backup $toolName database"; } +step_31_info() { echo "Backup ${toolName} database [daily|monthly(default)]"; } step_31_alias() { ALIAS="backupdb"; } step_31() { - echo "Backing up database..." + case "$2" in + daily|Daily|DAILY) + [ $QUIET -ne 2 ] && echo " [I] Daily backup..." + exep "mysqldump --single-transaction -u root ${LNMS_DB_NAME} | bzip2 -c > \"${LNMS_BU_DIR}/${toolName}_daily.sql.bz2\"" + ;; + *) + [ $QUIET -ne 2 ] && echo " [I] Monthly backup..." + exep "mysqldump --single-transaction -u root ${LNMS_DB_NAME} | bzip2 -c > \"${LNMS_BU_DIR}/monthly/\`date +%Y%m%d\`_${toolName}.sql.bz2\"" + ;; + esac } step_40_info() { echo "Switch $toolName installation to monthly stable"; } @@ -146,11 +156,14 @@ step_42() { exe chmod -R ug=rwX /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/logs /opt/librenms/rrd } -# Sequence Revision -VERSION_SEQREV=3 +fetchPhpVersion() { + if [ ! -z $phpVersion ] ; then + return 0 + fi -# Workaround when called from different directory -# Not needed when path to sequencer is absolut -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >>/dev/null 2>&1 && pwd )" -# Path to sequencer -. ${DIR}/../sequencer/sequencer.sh + phpVersion="$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')" +} + +# Sequence Revision +VERSION_SEQREV=12 +. /usr/local/bin/sequencer.sh