#!/bin/bash shopt -s extglob # sets extended pattern matching options in the bash shell #================================================= # GENERIC STARTING #================================================= # IMPORT GENERIC HELPERS #================================================= source _common.sh source /usr/share/yunohost/helpers #================================================= # MANAGE SCRIPT FAILURE #================================================= ynh_abort_if_errors # Stop script if an error is detected #================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= app=$YNH_APP_INSTANCE_NAME # Retrieve arguments domain=$YNH_APP_ARG_DOMAIN path=$YNH_APP_ARG_PATH port=$(ynh_find_port $YNH_APP_ARG_PORT) admin=$YNH_APP_ARG_ADMIN is_public=$YNH_APP_ARG_IS_PUBLIC # Source YunoHost helpers source /usr/share/yunohost/helpers # Fix path if needed path=$(fix_path $path) # Check domain/path availability sudo yunohost app checkurl "${domain}${path}" -a "$app" \ || ynh_die "Path not available: ${domain}${path}" # Save app settings ynh_app_setting_set "$app" admin "$admin" ynh_app_setting_set "$app" is_public "$is_public" ynh_app_setting_set "$app" port "$port" # Install dependencies install_dependencies # Declare services for YunoHost monitoring sudo yunohost service add influxdb sudo yunohost service add grafana-server --log "/var/log/grafana/grafana.log" # If NetData is installed, configure it to feed InfluxDB netdata_conf="/opt/netdata/etc/netdata/netdata.conf" if [[ -f "$netdata_conf" ]] ; then # If there is already a [backend] section if [ -n "$(sudo cat $netdata_conf | grep '\[backend\]')" ] ; then # These regexps replaces patterns inside ini [sections] ([backend] section, here) sudo sed -i '/^\[backend\]$/,/^\[/ { s/# enabled = no/enabled = yes/ s/# type = graphite/type = opentsdb/ s/# destination = localhost/destination = localhost:4242/ s/# update every = 10/update every = 60/ }' $netdata_conf else # Otherwise create the section echo "[backend] enabled = yes type = opentsdb destination = localhost:4242" | sudo tee -a $netdata_conf fi # Restart NetData sudo systemctl restart netdata fi # Generate MySQL password and create database dbuser=$app dbname=$app dbpass=$(ynh_string_random 12) ynh_app_setting_set "$app" mysqlpwd "$dbpass" ynh_mysql_create_db "$dbname" "$dbuser" "$dbpass" # Configure InfluxDB if [ -f /etc/influxdb/influxdb.conf ] ; then sudo sed -i '/^\[\[opentsdb\]\]$/,/^\[/ s/enabled = false/enabled = true/' /etc/influxdb/influxdb.conf else [ -d /etc/influxdb ] || sudo mkdir /etc/influxdb sudo cp ../conf/influxdb.conf /etc/influxdb fi # Start InfluxDB server sudo systemctl restart influxdb # Configure Grafana sudo cp ../conf/ldap.toml /etc/grafana grafana_conf="/etc/grafana/grafana.ini" # Set final port sudo sed -i "/^\[server\]$/,/^\[/ s@;http_port = .*@http_port = $port@" $grafana_conf # Set domain sudo sed -i "/^\[server\]$/,/^\[/ s@;domain = .*@domain = $domain@" $grafana_conf # Set final URL sudo sed -i "/^\[server\]$/,/^\[/ s@;root_url = .*@root_url = %(protocol)s://%(domain)s$path@" $grafana_conf # Disable check for updates sudo sed -i '/^\[analytics\]$/,/^\[/ s/;check_for_updates = .*/check_for_updates = false/' $grafana_conf # Disable organization creation sudo sed -i '/^\[users\]$/,/^\[/ s/;allow_org_create = .*/allow_org_create = false/' $grafana_conf # Enable HTTP and LDAP authentication sudo sed -i '/^\[auth.basic\]$/,/^\[/ s/;enabled = .*/enabled = false/' $grafana_conf sudo sed -i '/^\[auth.proxy\]$/,/^\[/ s/;enabled = .*/enabled = true/' $grafana_conf sudo sed -i '/^\[auth.ldap\]$/,/^\[/ { s/;enabled = .*/enabled = true/ s/;allow_sign_up = .*/allow_sign_up = true/ }' $grafana_conf # Set log level to debug sudo sed -i '/^\[log\]$/,/^\[/ s/;level = .*/level = debug/' $grafana_conf # Change URL and database credentials sudo sed -i "/^\[database\]$/,/^\[/ { s/;type = .*/type = mysql/ s/;name = .*/name = $dbname/ s/;user = .*/user = $dbuser/ s/;\?password =.*/password = $dbpass/ }" $grafana_conf # Start Grafana and wait for it to be fully started ynh_check_starting "HTTP Server Listen" "/var/log/grafana/grafana.log" "240" "grafana-server" # Change admin name to the specified one mail=$(ynh_user_get_info "$admin" 'mail') ynh_mysql_connect_as $dbuser $dbpass $dbname <<< "UPDATE user SET login=\"$admin\", email=\"$mail\" WHERE login=\"admin\";" # Import default dashboard for NetData hostname=$(hostname) sed -i "s@yunohost.yunohost.org@$hostname@g" ../conf/grafana_init_data.sql ynh_mysql_connect_as $dbuser $dbpass $dbname < ../conf/grafana_init_data.sql # Restart grafana server to take db change into account sudo systemctl restart grafana-server # Enable the systemd service so that InfluxDB and Grafana start at boot sudo systemctl enable influxdb.service sudo systemctl enable grafana-server.service # Store useful files for backup/restore scripts sudo cp _common.sh /etc/grafana # Modify Nginx configuration file and copy it to Nginx conf directory if [[ "$path" == "/" ]] ; then nginx_conf=../conf/nginx_root.conf else nginx_conf=../conf/nginx_sub_dir.conf fi sed -i "s@YNH_WWW_PATH@$path@g" $nginx_conf sed -i "s@YNH_WWW_PORT@$port@g" $nginx_conf sudo cp $nginx_conf /etc/nginx/conf.d/$domain.d/$app.conf # If app is public, add url to SSOWat conf as skipped_uris if [[ $is_public -eq 1 ]]; then # unprotected_uris allows SSO credentials to be passed anyway. ynh_app_setting_set "$app" unprotected_uris "/" fi # Start Grafana and wait for it to be fully started ynh_check_starting "HTTP Server Listen" "/var/log/grafana/grafana.log" "240" "grafana-server" # Reload services sudo systemctl reload nginx