mirror of
https://github.com/nextcloud/nextcloudpi.git
synced 2026-01-09 14:42:01 -03:30
* Update nextcloud to 24.0.4 * ncp-update-nc: Upgrade php to version 8.1 when installing NC >= 24 * ncp-update-nc: Use /etc/shadow workaround for installing systemd * ncp-update-nc: Run nc-limits after php upgrade * ncp-update-nc: Rollback after failed php upgrade * ncp-update-nc: Add success message * ncp-update-nc: Prevent installation of NC >= 24 on debian 10/PHP <= 7.3 * lamp.sh: Install php8.1 from sury.org * lamp.sh: Use /etc/shadow workaround for installing systemd * Dockerfile: Install wget, ca-certificates, lsb-release and procps before installing lamp.sh * Dockerfile: Make sure, ncp-templates are available when installing lamp.sh * Migrate all scripts to use template for writing opcache.ini and get_nc_config_value for retrieving datadir * nc-nextcloud.sh Fix crash if nc-datadir has not been installed yet * opcache.ini.sh: Don't try to get tmpl values from nc-datadir in containers
263 lines
7.0 KiB
Bash
263 lines
7.0 KiB
Bash
#!/bin/bash
|
|
|
|
is_supported() {
|
|
[[ "${DOCKERBUILD:-0}" == 1 ]] && [[ "$(lsb_release -r)" =~ .*10 ]] && return 1
|
|
return 0
|
|
}
|
|
|
|
is_active() {
|
|
is_supported || return 1
|
|
|
|
metrics_services status > /dev/null 2>&1 || return 1
|
|
# systemctl is-active -q prometheus-node-exporter || return 1
|
|
return 0
|
|
}
|
|
|
|
tmpl_metrics_enabled() {
|
|
(
|
|
. /usr/local/etc/library.sh
|
|
local param_active="$(find_app_param metrics.sh ACTIVE)"
|
|
[[ "$param_active" == yes ]] || exit 1
|
|
)
|
|
}
|
|
|
|
reload_metrics_config() {
|
|
is_supported || return 0
|
|
|
|
install_template ncp-metrics.cfg.sh "/usr/local/etc/ncp-metrics.cfg" || {
|
|
echo -e "ERROR while generating ncp-metrics.conf!"
|
|
return 1
|
|
}
|
|
service ncp-metrics-exporter status > /dev/null && {
|
|
service ncp-metrics-exporter restart
|
|
service ncp-metrics-exporter status > /dev/null 2>&1 || {
|
|
rc=$?
|
|
echo -e "WARNING: ncp-metrics-exporter failed to start (exit-code $rc)!"
|
|
return $rc
|
|
}
|
|
}
|
|
}
|
|
|
|
metrics_services() {
|
|
cmd="${1?}"
|
|
|
|
if [[ "$cmd" =~ (start|stop|restart|reload|status) ]]
|
|
then
|
|
if ! is_docker && [[ "$INIT_SYSTEM" != "systemd" ]]
|
|
then
|
|
echo "Probably running in chroot. Ignoring 'metrics_services $cmd'..."
|
|
return 0
|
|
fi
|
|
rc1=0
|
|
rc2=0
|
|
service prometheus-node-exporter "$cmd" || rc1=$?
|
|
service ncp-metrics-exporter "$cmd" || rc2=$?
|
|
[[ $rc1 > $rc2 ]] && return $rc1
|
|
return $rc2
|
|
fi
|
|
|
|
if ! [[ "$cmd" =~ (en|dis)able ]]
|
|
then
|
|
echo -e "ERROR: Invalid command: metrics_services ${cmd}!"
|
|
exit 1
|
|
fi
|
|
|
|
if is_docker
|
|
then
|
|
rc1=0
|
|
rc2=0
|
|
update-rc.d ncp-metrics-exporter "$cmd" || rc1=$?
|
|
update-rc.d prometheus-node-exporter "$cmd" || rc2=$?
|
|
[[ $rc1 > $rc2 ]] && return $rc1
|
|
return $rc2
|
|
else
|
|
systemctl "$cmd" prometheus-node-exporter ncp-metrics-exporter
|
|
return $?
|
|
fi
|
|
}
|
|
|
|
install() {
|
|
|
|
# Subshell to return on failure instead of exiting (due to set -e)
|
|
(
|
|
|
|
set -e
|
|
set +u
|
|
|
|
is_supported || {
|
|
echo -e "Metrics app is not supported in debian 10 docker containers. Installation will be skipped."
|
|
return 0
|
|
}
|
|
|
|
cat > /etc/default/prometheus-node-exporter <<'EOF'
|
|
ARGS="--collector.filesystem.ignored-mount-points=\"^/(dev|proc|run|sys|mnt|var/log|var/lib/docker)($|/)\""
|
|
EOF
|
|
|
|
arch="$(uname -m)"
|
|
[[ "${arch}" =~ ^"arm" ]] && arch="armv7"
|
|
|
|
mkdir -p /usr/local/lib/ncp-metrics
|
|
wget -qO "/usr/local/lib/ncp-metrics/ncp-metrics-exporter" \
|
|
"https://github.com/theCalcaholic/ncp-metrics-exporter/releases/download/v1.1.0/ncp-metrics-exporter-${arch}"
|
|
chmod +x /usr/local/lib/ncp-metrics/ncp-metrics-exporter
|
|
|
|
# Apply fix to init-d-script (https://salsa.debian.org/debian/sysvinit/-/commit/aa40516c)
|
|
# Otherwise the init.d scripts of prometheus-node-exporter won't work
|
|
# shellcheck disable=SC2016
|
|
sed -i 's|status_of_proc "$DAEMON" "$NAME" ${PIDFILE:="-p ${PIDFILE}"}|status_of_proc ${PIDFILE:+-p "$PIDFILE"} "$DAEMON" "$NAME"|' /lib/init/init-d-script
|
|
|
|
apt-get update --allow-releaseinfo-change
|
|
install_with_shadow_workaround -o Dpkg::Options::=--force-confdef -o Dpkg::Options::="--force-confold" prometheus-node-exporter
|
|
|
|
if is_docker
|
|
then
|
|
cat > /etc/init.d/ncp-metrics-exporter <<'EOF'
|
|
#!/bin/sh
|
|
# Generated by sysd2v v0.3 -- http://www.trek.eu.org/devel/sysd2v
|
|
# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
|
|
if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
|
|
set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
|
|
fi
|
|
### BEGIN INIT INFO
|
|
# Provides: ncp-metrics-exporter
|
|
# Required-Start: $remote_fs
|
|
# Required-Stop: $remote_fs
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Description: NCP Metrics Exporter
|
|
### END INIT INFO
|
|
set -a
|
|
NCP_CONFIG_DIR=/usr/local/etc
|
|
set +a
|
|
|
|
NAME=ncp-exporter
|
|
DAEMON=/usr/local/lib/ncp-metrics/ncp-metrics-exporter
|
|
PIDFILE=/var/run/ncp-metrics-exporter.pid
|
|
LOGFILE=/var/log/ncp-metrics.log
|
|
START_ARGS="--background --make-pidfile"
|
|
EOF
|
|
chmod +x /etc/init.d/ncp-metrics-exporter
|
|
update-rc.d ncp-metrics-exporter defaults
|
|
|
|
cat > /etc/services-available.d/101ncp-metrics <<EOF
|
|
#!/bin/bash
|
|
|
|
source /usr/local/etc/library.sh
|
|
[[ "\$1" == "stop" ]] && {
|
|
echo "stopping prometheus-node-exporter..."
|
|
service prometheus-node-exporter stop
|
|
echo "done."
|
|
echo "stopping ncp-metrics-exporter"
|
|
service ncp-metrics-exporter stop
|
|
echo "done."
|
|
exit 0
|
|
}
|
|
|
|
persistent_cfg /etc/default/prometheus-node-exporter
|
|
|
|
echo "starting prometheus-node-exporter..."
|
|
service prometheus-node-exporter start
|
|
[[ -n "\$(pgrep prometheus)" ]] || echo -e "ERROR: prometheus-node-exporter failed to start!"
|
|
echo "starting ncp-metrics-exporter
|
|
service ncp-metrics-exporter start
|
|
EOF
|
|
chmod +x /etc/services-available.d/101ncp-metrics
|
|
|
|
else #=> if not is_docker
|
|
|
|
cat <<EOF > /etc/systemd/system/ncp-metrics-exporter.service
|
|
[Unit]
|
|
Description=NCP Metrics Exporter
|
|
|
|
[Service]
|
|
Environment=NCP_CONFIG_DIR=/usr/local/etc
|
|
ExecStart=/usr/local/lib/ncp-metrics/ncp-metrics-exporter
|
|
SyslogIdentifier=ncp-metrics
|
|
Restart=on-failure
|
|
RestartSec=30
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
|
|
fi
|
|
|
|
metrics_services stop
|
|
metrics_services disable
|
|
|
|
)
|
|
}
|
|
|
|
configure() {
|
|
set +u
|
|
|
|
if [[ "$ACTIVE" != yes ]]
|
|
then
|
|
|
|
install_template nextcloud.conf.sh /etc/apache2/sites-available/nextcloud.conf || {
|
|
install_template nextcloud.conf.sh /etc/apache2/sites-available/nextcloud.conf --allow-fallback
|
|
echo -e "ERROR while generating nextcloud.conf! Exiting..."
|
|
return 1
|
|
}
|
|
echo "Disabling and stopping services..."
|
|
metrics_services disable
|
|
metrics_services stop
|
|
echo "done."
|
|
else
|
|
|
|
is_supported || {
|
|
echo -e "Metrics app is not supported in debian 10 docker containers. Terminating..."
|
|
return 0
|
|
}
|
|
|
|
[[ -n "$USER" ]] || {
|
|
echo -e "ERROR: User can not be empty!" >&2
|
|
return 1
|
|
}
|
|
|
|
if [[ "$METRICS_SKIP_PASSWORD_CONFIG" != "true" ]]
|
|
then
|
|
[[ -n "$PASSWORD" ]] || {
|
|
echo -e "ERROR: Password can not be empty!" >&2
|
|
return 1
|
|
}
|
|
|
|
[[ ${#PASSWORD} -ge 10 ]] || {
|
|
echo -e "ERROR: Password must be at least 10 characters long!" >&2
|
|
return 1
|
|
}
|
|
|
|
local htpasswd_file="/usr/local/etc/metrics.htpasswd"
|
|
rm -f "${htpasswd_file}"
|
|
echo "$PASSWORD" | htpasswd -ciB "${htpasswd_file}" "$USER"
|
|
fi
|
|
|
|
echo "Generate config..."
|
|
reload_metrics_config
|
|
echo "done."
|
|
|
|
echo "Enabling and starting services..."
|
|
metrics_services enable
|
|
metrics_services start
|
|
metrics_services status || {
|
|
echo -e "ERROR: Metrics services not running!"
|
|
return 1
|
|
}
|
|
echo "done."
|
|
|
|
|
|
install_template nextcloud.conf.sh /etc/apache2/sites-available/nextcloud.conf || {
|
|
install_template nextcloud.conf.sh /etc/apache2/sites-available/nextcloud.conf --allow-fallback
|
|
echo -e "ERROR while generating nextcloud.conf! Exiting..."
|
|
return 1
|
|
}
|
|
|
|
echo "Metrics endpoint enabled. You can test it at https://nextcloudpi.local/metrics/system and https://nextcloudpi.local/metrics/ncp (or under your NC domain under the same paths)"
|
|
fi
|
|
|
|
bash -c "sleep 2 && service apache2 reload" &>/dev/null &
|
|
|
|
}
|