#!/bin/bash # Updater for NextCloudPlus # # Copyleft 2017 by Ignacio Nunez Hernanz # GPL licensed (see end of file) * Use at your own risk! # # More at https://ownyourbits.com/ # CONFDIR=/usr/local/etc/ncp-config.d/ # don't make sense in a docker container EXCL_DOCKER=" nc-automount.sh nc-format-USB.sh nc-datadir.sh nc-database.sh nc-ramlogs.sh nc-swapfile.sh nc-static-IP.sh nc-wifi.sh nc-nextcloud.sh nc-init.sh UFW.sh nc-snapshot.sh nc-snapshot-auto.sh nc-audit.sh SSH.sh fail2ban.sh NFS.sh " # better use a designated container EXCL_DOCKER+=" samba.sh " # check running apt pgrep apt &>/dev/null && { echo "apt is currently running. Try again later"; exit 1; } cp etc/library.sh /usr/local/etc/ source /usr/local/etc/library.sh mkdir -p "$CONFDIR" # prevent installing some apt packages in the docker version [[ -f /.docker-image ]] && { for opt in $EXCL_DOCKER; do touch $CONFDIR/$opt done } # copy all files in bin and etc for file in bin/* etc/*; do [ -f "$file" ] || continue; cp "$file" /usr/local/"$file" done # install new entries of ncp-config and update others for file in etc/ncp-config.d/*; do [ -f "$file" ] || continue; # skip dirs [ -f /usr/local/"$file" ] || { # new entry install_script "$file" # install # configure if active by default grep -q '^ACTIVE_=yes$' "$file" && activate_script "$file" } # save current configuration to (possibly) updated script [ -f /usr/local/"$file" ] && { VARS=( $( grep "^[[:alpha:]]\+_=" /usr/local/"$file" | cut -d= -f1 ) ) VALS=( $( grep "^[[:alpha:]]\+_=" /usr/local/"$file" | cut -d= -f2 ) ) for i in $( seq 0 1 ${#VARS[@]} ); do sed -i "s|^${VARS[$i]}=.*|${VARS[$i]}=${VALS[$i]}|" "$file" done } cp "$file" /usr/local/"$file" done # install localization files cp -rT etc/ncp-config.d/l10n "$CONFDIR"/l10n # these files can contain sensitive information, such as passwords chown -R root:www-data "$CONFDIR" chmod 660 "$CONFDIR"/* chmod 750 "$CONFDIR"/l10n # install web interface cp -r ncp-web /var/www/ chown -R www-data:www-data /var/www/ncp-web chmod 770 /var/www/ncp-web # remove unwanted packages for the docker version [[ -f /.docker-image ]] && { for opt in $EXCL_DOCKER; do rm $CONFDIR/$opt done } ## BACKWARD FIXES ( for older images ) # not for image builds, only live updates [[ ! -f /.ncp-image ]] && { # Update btrfs-sync wget -q https://raw.githubusercontent.com/nachoparker/btrfs-sync/master/btrfs-sync -O /usr/local/bin/btrfs-sync chmod +x /usr/local/bin/btrfs-sync # for non docker images [[ ! -f /.docker-image ]] && { # install avahi-daemon in armbian images [[ -f /lib/systemd/system/avahi-daemon.service ]] || { apt-get update apt-get install -y --no-install-recommends avahi-daemon } } # fix wrong user for notifications DATADIR="$( grep datadirectory /var/www/nextcloud/config/config.php | awk '{ print $3 }' | grep -oP "[^']*[^']" | head -1 )" F="$CONFDIR"/nc-notify-updates.sh test -d "$DATADIR" && { [[ -d "$DATADIR"/ncp ]] && [[ ! -d "$DATADIR"/admin ]] \ && grep -q '^USER_=admin$' "$F" && grep -q '^ACTIVE_=yes$' "$F" && { sed -i 's|^USER_=admin|USER_=ncp|' "$F" cd "$CONFDIR" &>/dev/null activate_script nc-notify-updates.sh cd - &>/dev/null } } # update nc-backup and nc-restore cd "$CONFDIR" &>/dev/null install_script nc-backup.sh install_script nc-restore.sh cd - &>/dev/null } # end - only live updates exit 0 # License # # This script is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This script is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this script; if not, write to the # Free Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA