diff --git a/mcbe/assets/systemd/mcbe-backup.service b/mcbe/assets/systemd/mcbe-backup.service index 212818c..ac0a485 100644 --- a/mcbe/assets/systemd/mcbe-backup.service +++ b/mcbe/assets/systemd/mcbe-backup.service @@ -7,5 +7,4 @@ Requisite=mcbe.service ExecStart=/usr/local/bin/maint StandardOutput=journal StandardError=journal -KillMode=none Type=oneshot diff --git a/nextcloud/Containerfile b/nextcloud/Containerfile index 668ef58..14ea355 100644 --- a/nextcloud/Containerfile +++ b/nextcloud/Containerfile @@ -25,7 +25,7 @@ ENV DBNAME=nextcloud # install packages we want RUN apt update -y && apt install -y apache2 php-fpm php-gd php-zip php-pgsql \ php-curl php-mbstring php-intl php-imagick php-xml php-gmp php-json \ - redis php-redis postgresql postgresql-doc php-ldap php-bcmath cron + redis php-redis postgresql postgresql-doc php-ldap php-bcmath jq # put database variables in /etc/environment so anyone can access them @@ -72,8 +72,6 @@ COPY --chown=postgres:postgres assets/postgresql ./ RUN mv postgresql/pg_hba.conf /etc/postgresql/${PSQLV:?}/main/ & \ cat postgresql/postgresql.conf >> /etc/postgresql/${PSQLV:?}/main/postgresql.conf - - ### ### Apache ### @@ -120,22 +118,15 @@ RUN cd nextcloud/config && \ ln -s /vol/data/secret.config.php ### -### DB Auto Load/Dump +### Systemd ### -# copy service -COPY assets/db-updown.service /etc/systemd/system/ +# copy services +COPY assets/systemd/ /etc/systemd/system/ # enable service RUN systemctl enable db-updown.service -### -### Crontab -### -COPY assets/crontab /root/ -# crontab for www-data -RUN crontab -u www-data /root/crontab - ### ### Bugfix ### @@ -145,10 +136,6 @@ COPY assets/bugfix/redis-server.service /etc/systemd/system/redis-server.service COPY assets/bugfix/apache2.override /etc/systemd/system/apache2.service.d/override.conf -# bugfix for cron -COPY assets/bugfix/cronfix /root/ -RUN chmod +x /root/cronfix && /root/cronfix - ### ### Workdir ### diff --git a/nextcloud/assets/bin/db-load b/nextcloud/assets/bin/db-load index a70f8e9..d70c379 100755 --- a/nextcloud/assets/bin/db-load +++ b/nextcloud/assets/bin/db-load @@ -1,9 +1,20 @@ #!/bin/bash +. /usr/local/bin/maint-mode +mode_get +mode_on + if [[ ! -f $1 ]]; then >&2 echo "Error: could not find file \"$1\"" exit 2 fi +mode=$(nc-occ maintenance:mode | cut -d' ' -f 5) +if [[ $mode != "enabled" ]]; then + nc-occ maintenance:mode --on +fi + db-make psql -U $DBUSER -d $DBNAME -f $1 + +mode_off diff --git a/nextcloud/assets/bin/db-make b/nextcloud/assets/bin/db-make index 7a230d6..d3f1336 100755 --- a/nextcloud/assets/bin/db-make +++ b/nextcloud/assets/bin/db-make @@ -4,9 +4,17 @@ cmd() { sudo -u postgres psql -c "$1" } +. /usr/local/bin/maint-mode +mode_get +mode_on + cd /var/lib/postgresql cmd "DROP DATABASE IF EXISTS ${DBNAME:?};" cmd "DROP USER IF EXISTS ${DBUSER:?};" cmd "CREATE USER ${DBUSER:?};" cmd "CREATE DATABASE ${DBNAME:?};" cmd "GRANT ALL PRIVILEGES ON DATABASE ${DBNAME:?} TO ${DBUSER:?};" + +redis-cli -s /var/run/redis/redis-server.sock flushall + +mode_off diff --git a/nextcloud/assets/bin/maint b/nextcloud/assets/bin/maint-backup similarity index 60% rename from nextcloud/assets/bin/maint rename to nextcloud/assets/bin/maint-backup index e4d670d..1b4676a 100755 --- a/nextcloud/assets/bin/maint +++ b/nextcloud/assets/bin/maint-backup @@ -1,5 +1,7 @@ #!/bin/bash +. /usr/local/bin/maint-mode + # load environment variables . /etc/environment @@ -20,23 +22,25 @@ if [[ $# -lt 2 ]]; then fi if [[ $hour == $1 ]]; then - nc-occ maintenance:mode --on + mode_get + mode_on + nc-occ maintenance:mode --on fi db-dump $DBNAME-hourly-$hour.sql 2>> $errlog if [[ $hour == $1 ]]; then - systemctl restart postgresql - nc-occ maintenance:mode --off - mv $DBNAME-hourly-$hour.sql $DBNAME-daily-$day.sql 2>> $errlog + systemctl restart postgresql + mode_off + mv $DBNAME-hourly-$hour.sql $DBNAME-daily-$day.sql 2>> $errlog - if [[ $day == $2 ]]; then - mv $DBNAME-daily-$day.sql $DBNAME-$year-$month-$day.sql 2>> $errlog - fi + if [[ $day == $2 ]]; then + mv $DBNAME-daily-$day.sql $DBNAME-$year-$month-$day.sql 2>> $errlog + fi fi # If error log is size 0, erase it because I don't like seeing it if [[ ! -s $errlog ]]; then - rm $errlog - rmdir --ignore-fail-on-non-empty error + rm $errlog + rmdir --ignore-fail-on-non-empty error fi diff --git a/nextcloud/assets/bin/maint-mode b/nextcloud/assets/bin/maint-mode new file mode 100644 index 0000000..8742638 --- /dev/null +++ b/nextcloud/assets/bin/maint-mode @@ -0,0 +1,22 @@ +#!/bin/bash + +mode_get() { + mode=$(nc-occ maintenance:mode | cut -d' ' -f 5) + if [[ $mode == "enabled" || $mode == "disabled" ]]; then + echo $mode + return 0 + else + echo "Error: failed to get maintenance mode" 1>&2 + return 1 + fi +} + +mode_on() { + nc-occ maintenance:mode --on +} + +mode_off() { + if [[ $mode == "disabled" ]]; then + nc-occ maintenance:mode --off + fi +} diff --git a/nextcloud/assets/bin/maint-scan b/nextcloud/assets/bin/maint-scan new file mode 100644 index 0000000..8e938fc --- /dev/null +++ b/nextcloud/assets/bin/maint-scan @@ -0,0 +1,9 @@ +#!/bin/bash + +if [[ -n $1 ]]; then + nc-occ files:scan --path="/$1/files/" +else + for user in $(nc-occ user:list --output=json | jq -r 'keys[]'); do + nc-occ files:scan --path="/$user/files/" + done +fi diff --git a/nextcloud/assets/bugfix/cronfix b/nextcloud/assets/bugfix/cronfix deleted file mode 100755 index 483c9dc..0000000 --- a/nextcloud/assets/bugfix/cronfix +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -sed -i '/session required pam_loginuid.so/c\#session required pam_loginuid.so' /etc/pam.d/cron diff --git a/nextcloud/assets/systemd/nextcloud-backup.timer b/nextcloud/assets/systemd/nextcloud-backup.timer new file mode 100644 index 0000000..1d483ae --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-backup.timer @@ -0,0 +1,8 @@ +[Unit] +Description=Scan files every 15 minutes + +[Timer] +OnCalendar=0/15:00 + +[Install] +WantedBy=timers.target diff --git a/nextcloud/assets/systemd/nextcloud-cron.service b/nextcloud/assets/systemd/nextcloud-cron.service new file mode 100644 index 0000000..47c8165 --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-cron.service @@ -0,0 +1,9 @@ +[Unit] +Description=Nextcloud cron.php job + +[Service] +User=www-data +ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php +StandardOutput=journal +StandardError=journal +KillMode=process diff --git a/nextcloud/assets/systemd/nextcloud-cron.timer b/nextcloud/assets/systemd/nextcloud-cron.timer new file mode 100644 index 0000000..b6ccabf --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-cron.timer @@ -0,0 +1,9 @@ +[Unit] +Description=Run Nextcloud cron.php every 5 minutes + +[Timer] +OnBootSec=5min +OnUnitActiveSec=5min + +[Install] +WantedBy=timers.target diff --git a/nextcloud/assets/systemd/nextcloud-scan.service b/nextcloud/assets/systemd/nextcloud-scan.service new file mode 100644 index 0000000..ebc8198 --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-scan.service @@ -0,0 +1,8 @@ +[Unit] +Description=Scan Nextcloud files for changes + +[Service] +ExecStart=/usr/local/bin/maint-scan +StandardOutput=journal +StandardError=journal +Type=oneshot diff --git a/nextcloud/assets/systemd/nextcloud-scan.timer b/nextcloud/assets/systemd/nextcloud-scan.timer new file mode 100644 index 0000000..1d483ae --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-scan.timer @@ -0,0 +1,8 @@ +[Unit] +Description=Scan files every 15 minutes + +[Timer] +OnCalendar=0/15:00 + +[Install] +WantedBy=timers.target diff --git a/nextcloud/assets/db-updown.service b/nextcloud/assets/systemd/nextcloud-updown.service similarity index 76% rename from nextcloud/assets/db-updown.service rename to nextcloud/assets/systemd/nextcloud-updown.service index f795b57..615bfc4 100644 --- a/nextcloud/assets/db-updown.service +++ b/nextcloud/assets/systemd/nextcloud-updown.service @@ -1,6 +1,6 @@ [Unit] Description=Load/Dump database on start/stop -After=postgresql.service +After=postgresql.service php* Requires=postgresql.service [Service] @@ -8,7 +8,7 @@ Type=oneshot RemainAfterExit=yes EnvironmentFile=/etc/environment ExecStart=/bin/bash -c "if [[ $(ls -t /vol/data/sql/ | head -1) == $DBNAME-updown.sql ]]; then db-load /vol/data/sql/$DBNAME-updown.sql; else echo 'updown.sql is not most recent file in database dir, skipping db-load'; fi" -ExecStop=/bin/bash -c "db-dump /vol/data/sql/$DBNAME-updown.sql" +ExecStop=/bin/bash -c "nc-occ maintenance:mode --on; db-dump /vol/data/sql/$DBNAME-updown.sql" [Install] WantedBy=multi-user.target