#!/usr/bin/env sh # SPDX-FileCopyrightText: Daniel Pätzold # SPDX-License-Identifier: AGPL-3.0-or-later # # Sofwareinstallation script for Nextcloud Desktop # echo "Setup Nextcloud- Sync" #Local Vars BASECMD="/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=nextcloud com.nextcloud.desktopclient.nextcloud" #Check Token if [ "${DAVTOKEN_USER}." == "." ]; then # Todo: Move all task to some function to logon as user and get all vars, call it and proceed here echo "Error: Script cannot be executed standalone and needs a prereserved Environment. Quit." exit 1 fi #Remove Nextcloud from autostart anyway! Must be started by this script manually, because if it was started befor the ecrypted mount, #it will never sync and always throw an error that the local dir is missing if [ -f "$SUDO_HOME/.config/autostart/com.nextcloud.desktopclient.nextcloud.desktop" ]; then echo "Remove Autostart Nextcloud" rm $SUDO_HOME/.config/autostart/com.nextcloud.desktopclient.nextcloud.desktop #Stopping Nextcloud su -c "$BASECMD --quit 1>/dev/null 2>/dev/null" $SUDO_USER sleep 5 fi NC_PID=$( pgrep -u $USER nextcloud ) if [[ ! -z ${NC_PID} ]]; then echo "Stopping Nextcloud with PID ${NC_PID}" # $BASECMD --quit 1>/dev/null 2>/dev/null && sleep 5 kill ${NC_PID} if [[ $? -ne 0 ]]; then echo "Service could not be stopped, please check why." exit 1 fi fi sleep 0.5 #Check if Option is Configured to use Nextcloud Desktop Data- Sync declare -p CLIENT_DATA_SYNC_DECLARE >/dev/null eval "${CLIENT_DATA_SYNC_DECLARE}" declare -p CLIENT_DATA_SYNC_DECLARE CLIENT_DATA_SYNC >/dev/null eval "${CLIENT_DATA_SYNC}" if [[ "${#CLIENT_DATA_SYNC[@]}" == "0" ]]; then echo "CLIENT_DATA_SYNC not set, skipping setup of Nextcloud Desktop sync" exit 0 fi #Loop through all Entries for i in {0..99}; do if [[ -z ${CLIENT_DATA_SYNC[$i]} ]]; then break fi CLIENT_DATA_DECLARE_LINE="${CLIENT_DATA_SYNC[$i]}" eval "${CLIENT_DATA_DECLARE_LINE}" # echo "DEBUG user_run.sh(0020)_2: ${CLIENT_DATA_SYNC_LINE[@]}" # Now, CLIENT_DATA_SYNC_LINE[0] contains the local path and CLIENT_DATA_SYNC_LINE[1] contains the remote path if grep -q "localPath=${CLIENT_DATA_SYNC_LINE[0]}" "/${HOME}/.var/app/com.nextcloud.desktopclient.nextcloud/config/Nextcloud/nextcloud.cfg"; then echo "Already found configured local folder ${CLIENT_DATA_SYNC_LINE[0]} syncing with ${CLIENT_DATA_SYNC_LINE[1]} . Leaving it unchanged." else echo "Setup new sync from remote ${CLIENT_DATA_SYNC_LINE[1]} to local ${CLIENT_DATA_SYNC_LINE[0]}" if [[ $i -gt 0 ]]; then echo "Due to Bug in Nextcloud Client, more than one synced Folder cannot be setup currently. Maybe in the Future." continue; fi if [ -d "${CLIENT_DATA_SYNC_LINE[0]}" ]; then echo "Old unsynced Folder ${CLIENT_DATA_SYNC_LINE[0]} was found, renaming to ${CLIENT_DATA_SYNC_LINE[0]}_bak." mv "${CLIENT_DATA_SYNC_LINE[0]}" "${CLIENT_DATA_SYNC_LINE[0]}_bak" fi mkdir -p ${CLIENT_DATA_SYNC_LINE[0]} SYNCCMD="$BASECMD --userid ${DAVTOKEN_USER} --apppassword ${DAVTOKEN_PASS} --localdirpath ${CLIENT_DATA_SYNC_LINE[0]} --remotedirpath ${CLIENT_DATA_SYNC_LINE[1]} --serverurl https://${SERVERFQDN_NC}" SYNCCMD_HIDDENPW=$( echo "${SYNCCMD/${DAVTOKEN_PASS}/***HIDDEN***}" ) echo "Exec: ${SYNCCMD_HIDDENPW}" # Due to Bugs in Nextcloud, autoprovisioning will only work when no configuration is existent. Therefore delete any exitsing configs that may be there rm -rif ${HOME}/.var/app/com.nextcloud.desktopclient.nextcloud/data/Nextcloud #Now, execute Nextcloud autoprovisionig ${SYNCCMD} if [ $? -ne 0 ]; then echo "=========== !!! ========================" echo "Error: It looks like this did not work!" echo "Please check the above output!" exit 1 fi fi done ##Check if Nextcloud was already setup #if [ $SETUP_NEEDED = "0" ]; then # echo "Nextcloud was already setup, skipping configure and starting Service" # echo "If you want to reset, please delete the Folder [HOME]/.var/app/com.nextcloud.desktopclient.nextcloud manually." # echo "Command: rm -rif ~/.var/app/com.nextcloud.desktopclient.nextcloud/" # su -c "nohup ${BASECMD} 1>/dev/null 2>/dev/null &" $SUDO_USER # exit $? #fi #No check for installed Nextcloud needed, because it will be installed by calling script sync_client_software.sh #Cleanup Nextcloud Configuration completely, while otherwise, the configure will not work #echo "Remove $SUDO_HOME/.var/app/com.nextcloud.desktopclient.nextcloud" #rm -rif "$SUDO_HOME/.var/app/com.nextcloud.desktopclient.nextcloud" #echo "Exec as $SUDO_USER: ${SYNCCMD}" #echo "Exec as $SUDO_USER: ${SYNCCMD_HIDDENPW}" #su -c "${SYNCCMD}" $SUDO_USER #if [ $? -ne 0 ]; then # echo "=========== !!! ========================" # echo "Error: It looks like this did not work!" # echo "Please check the above output!" # exit 1 #fi # Now start Nextcloud nohup ${BASECMD} 1>/dev/null 2>/dev/null & echo "Done Setup of Nextcloud." exit 0