nextcloud_hardening/skripte/update-nc-office.sh
hhftechnologies 307beae924 update
2024-10-21 13:51:04 +05:30

228 lines
8.3 KiB
Bash

#!/bin/bash
# Nextcloud-Updateskript
# --------------------------------------------------------------
# Bitte setzen Sie diese Parameter entsprechend Ihrer Nextcloud
# --------------------------------------------------------------
WEBSERVER="nginx"
# alternativ "apache2"
PHPVERSION="8.3"
# alternativ "8.1" oder "8.2"
DPATH="/var/www/nextcloud"
# alternativ "/Pfad/zur/Nextcloud-Software"
NCALIASGROUP="https://ihre.hhf.technology:443,https://ihre\\.domain\\.de:443"
# ersetzen Sie "ihre", "domain" und "de"
NCOUSERNAME="NextcloudOfficeAdmin-Benutzername"
# ersetzen Sie "NextcloudOfficeAdmin-Benutzername"
NCOUSERPWD="NextcloudOfficeAdmin-Passwort"
# ersetzen Sie "NextcloudOfficeAdmin-Passwort"
SPATH="/sicherung/sql"
SNPATH="/sicherung/nextcloud"
# Sicherungverzeichnisse angeben
# --------------------------------------------------------------
# »»» Ab hier KEINE Änderungen mehr vornehmen! «««
# --------------------------------------------------------------
if [ -f /tmp/ncupdateskript ]; then
clear
clear
echo " ++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo ""
echo " » Das Updateskript ist bereits aktiv - *ABBRUCH*"
echo " » Oder wurde ein vorheriger Prozess abgebrochen?"
echo ""
echo " » "$(ls /tmp/ncupdateskript)
echo ""
echo " » Entfernen Sie ggf. die Datei mit diesem Befehl:"
echo " » sudo rm -f /tmp/ncupdateskript"
echo ""
echo " ++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo ""
exit 1
fi
if [ "$USER" != "root" ]
then
clear
echo ""
echo " » KEINE ROOT-BERECHTIGUNGEN | NO ROOT PERMISSIONS"
echo ""
echo "----------------------------------------------------------"
echo " » Bitte starten Sie das Skript als root: 'sudo ./zero.sh'"
echo " » Please run this script as root using: 'sudo ./zero.sh'"
echo "----------------------------------------------------------"
echo ""
exit 1
fi
touch /tmp/ncupdateskript
clear
echo ""
echo " » Die Parameter der Nextcloud werden ermittelt..."
echo ""
NEXTCLOUDVERSION=$(sudo -u www-data php $DPATH/occ config:system:get version)
NEXTCLOUDDATEN=$(sudo -u www-data php $DPATH/occ config:system:get datadirectory)
NEXTCLOUDDBTYPE=$(sudo -u www-data php $DPATH/occ config:system:get dbtype)
NEXTCLOUDDBHOST=$(sudo -u www-data php $DPATH/occ config:system:get dbhost)
NEXTCLOUDDB=$(sudo -u www-data php $DPATH/occ config:system:get dbname)
NEXTCLOUDDBUSER=$(sudo -u www-data php $DPATH/occ config:system:get dbuser)
NEXTCLOUDDBPASSWORD=$(sudo -u www-data php $DPATH/occ config:system:get dbpassword)
NEXTCLOUDDBTYPE=$(sudo -u www-data php $DPATH/occ config:system:get dbtype)
SDATE="nextcloud.sql"
apt update
if [ $NEXTCLOUDDBTYPE = "pgsql" ]; then
apt-mark unhold pgsql*
apt-mark unhold postgresql*
else
apt-mark unhold mariadb-*
apt-mark unhold mysql-*
apt-mark unhold galera-*
fi
apt-mark unhold $WEBSERVER*
apt-mark unhold redis*
apt-mark unhold php-* php$PHPVERSION-*
apt-mark unhold elasticsearch*
apt upgrade -V
if [ $NEXTCLOUDDBTYPE = "pgsql" ]; then
apt-mark hold pgsql*
apt-mark hold postgresql*
else
apt-mark hold mariadb-*
apt-mark hold mysql-*
apt-mark hold galera-*
fi
apt-mark hold $WEBSERVER*
apt-mark hold redis*
apt-mark hold php-* php$PHPVERSION-*
apt-mark hold elasticsearch*
apt autoremove
apt autoclean
chown -R www-data:www-data $DPATH
find $DPATH/ -type d -exec chmod 750 {} \;
find $DPATH/ -type f -exec chmod 640 {} \;
if [ -d "$DPATH/apps/notify_push" ]; then
sudo chmod ug+x $DPATH/apps/notify_push/bin/x86_64/notify_push
fi
clear
echo ""
echo -n " » Soll eine DB- und Nextcloud-Dateisicherung erstellt werden [y|n]?"
read answer
if [ "$answer" != "${answer#[YyjJ]}" ];then
echo -n " » Sollen die vorherigen Sicherungen gelöscht werden [y|n]?"
read answer
if [ "$answer" != "${answer#[YyjJ]}" ];then
rm -Rf $SPATH-* $SNPATH-*
fi
if [ ! -d $SPATH-$NEXTCLOUDVERSION ]; then
mkdir -p $SPATH-$NEXTCLOUDVERSION
fi
if [ ! -d $SNPATH-$NEXTCLOUDVERSION ]; then
mkdir -p $SNPATH-$NEXTCLOUDVERSION
fi
echo ""
sudo -u www-data php $DPATH/occ maintenance:mode --on
echo ""
echo " » Die Datenbanksicherung wird gestartet..."
if [ $NEXTCLOUDDBTYPE = "pgsql" ]; then
PGPASSWORD="$NEXTCLOUDDBPASSWORD" pg_dump $NEXTCLOUDDB -h $NEXTCLOUDDBHOST -U $NEXTCLOUDDBUSER -f $SPATH-$NEXTCLOUDVERSION/$SDATE
else
mysqldump --single-transaction --routines -h $NEXTCLOUDDBHOST -u$NEXTCLOUDDBUSER -p$NEXTCLOUDDBPASSWORD -e $NEXTCLOUDDB > $SPATH-$NEXTCLOUDVERSION/$SDATE
fi
echo ""
echo " » Die Datenbankgröße wird ermittelt..."
echo -e "\033[32m » $(du -sh $SPATH-$NEXTCLOUDVERSION/$SDATE | awk '{ print $1 }')\033[0m"
echo ""
echo " » Das Nextcloudverzeichnis wird gesichert..."
rsync -a --exclude="data/" $DPATH/ $SNPATH-$NEXTCLOUDVERSION
echo -e "\033[32m » $(du -sh $SNPATH-$NEXTCLOUDVERSION | awk '{ print $1 }')\033[0m"
echo ""
sudo -u www-data php $DPATH/occ maintenance:mode --off
echo ""
fi
echo ""
echo -n " » Nextcloud Updates gewünscht [y|n]?"
read answer
if [ "$answer" != "${answer#[YyjJ]}" ] ;then
echo ""
sudo -u www-data php $DPATH/updater/updater.phar --no-backup
sudo -u www-data php $DPATH/occ status
sudo -u www-data php $DPATH/occ -V
sudo -u www-data php $DPATH/occ db:add-missing-primary-keys
sudo -u www-data php $DPATH/occ db:add-missing-indices
sudo -u www-data php $DPATH/occ db:add-missing-columns
sudo -u www-data php $DPATH/occ db:convert-filecache-bigint
sudo -u www-data php $DPATH/occ maintenance:repair --include-expensive
sudo -u www-data sed -i "s/output_buffering=.*/output_buffering=0/" $DPATH/.user.ini
clear
echo ""
echo " » Liste zu aktualisierender Apps:"
echo ""
sudo -u www-data php $DPATH/occ app:update --showonly -v
echo ""
echo -n " » Möchten Sie die Nextcloud Apps aktualisieren [y|n]?"
read answer
if [ "$answer" != "${answer#[YyjJ]}" ] ;then
sudo -u www-data php $DPATH/occ app:update --all -v
sudo -u www-data php $DPATH/occ app:list | grep -i richdocuments &> /dev/null
if [ $? -eq 0 ]; then
sudo -u www-data php $DPATH/occ richdocuments:update-empty-templates
fi
else
clear
echo " » Nextcloud Apps wurden nicht aktualisiert."
echo ""
fi
else
clear
echo " » Nextcloud wurde nicht aktualisiert/überprüft."
echo ""
fi
echo -n " » Möchten Sie den Nextcloud Office Docker Container aktualisieren [y|n]?"
read answer
if [ "$answer" != "${answer#[YyjJ]}" ]
then
docker stop NEXTCLOUDOFFICE
docker rm NEXTCLOUDOFFICE
docker image rm $(docker image ls | grep collabora/code | awk '{ print $3 }')
docker run -t -d -p 127.0.0.1:9980:9980 -e "aliasgroup1=$NCALIASGROUP" -e "username=$NCOUSERNAME" -e "password=$NCOUSERPWD" --name NEXTCLOUDOFFICE --memory="4G" --memory-swap="4G" -e "lang=de_DE" -e "dictionaries=de_DE en_GB en_US" -e "extra_params=--o:home_mode.enable=true" --restart always collabora/code
sudo -u www-data php $DPATH/occ richdocuments:update-empty-templates
else
clear
echo " » Nextcloud Office Docker Container wird nicht aktualisiert"
echo ""
fi
clear
sudo -u www-data php $DPATH/occ setupchecks
echo ""
echo " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo ""
echo " » Dienste werden neu gestartet..."
echo ""
dpkg -s elasticsearch &> /dev/null
if [ $? -eq 0 ]; then
echo " » Elasticsearch wird zuerst neu gestartet"
systemctl restart elasticsearch.service
else
echo " » Elasticsearch ist nicht installiert!"
fi
echo ""
if [ $NEXTCLOUDDBTYPE = "pgsql" ]; then
sudo systemctl restart postgresql.service redis-server.service php$PHPVERSION-fpm.service $WEBSERVER.service
else
sudo systemctl restart mariadb.service redis-server.service php$PHPVERSION-fpm.service $WEBSERVER.service
fi
if [ -e /var/run/reboot-required ]; then
echo -e " »\e[1;31m ACHTUNG: ES IST EIN SERVERNEUSTART ERFORDERLICH.\033[0m"
echo ""
echo " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
else
echo -e " »\033[32m KEIN Serverneustart notwendig.\033[0m"
echo ""
echo " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
fi
echo ""
rm -f /tmp/ncupdateskript
exit 0