Fedora 44, install/configure improvements, Nextcloud desktop client fixes #24
@@ -13,7 +13,7 @@ echo "Setup Nextcloud- Sync"
|
|||||||
BASECMD="/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=nextcloud com.nextcloud.desktopclient.nextcloud"
|
BASECMD="/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=nextcloud com.nextcloud.desktopclient.nextcloud"
|
||||||
|
|
||||||
#Check Token
|
#Check Token
|
||||||
if [ "${DAVTOKEN_USER}." == "." ]; then
|
if [ "${DAVTOKEN_USER}." = "." ]; then
|
||||||
# Todo: Move all task to some function to logon as user and get all vars, call it and proceed here
|
# 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."
|
echo "Error: Script cannot be executed standalone and needs a prereserved Environment. Quit."
|
||||||
exit 1
|
exit 1
|
||||||
@@ -22,29 +22,29 @@ fi
|
|||||||
#Remove Nextcloud from autostart anyway! Must be started by this script manually, because if it was started befor the ecrypted mount,
|
#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
|
#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
|
if [ -f "$SUDO_HOME/.config/autostart/com.nextcloud.desktopclient.nextcloud.desktop" ]; then
|
||||||
echo "Remove Autostart Nextcloud"
|
echo "Remove Autostart Nextcloud"
|
||||||
rm $SUDO_HOME/.config/autostart/com.nextcloud.desktopclient.nextcloud.desktop
|
rm $SUDO_HOME/.config/autostart/com.nextcloud.desktopclient.nextcloud.desktop
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NC_PID=$( pgrep -u $USER nextcloud )
|
NC_PID=$( pgrep -u $USER nextcloud )
|
||||||
if [[ ! -z ${NC_PID} ]]; then
|
if [ -n "${NC_PID}" ]; then
|
||||||
echo "Stopping Nextcloud with PID ${NC_PID}"
|
echo "Stopping Nextcloud with PID ${NC_PID}"
|
||||||
/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=nextcloud com.nextcloud.desktopclient.nextcloud --quit >/dev/null
|
/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=nextcloud com.nextcloud.desktopclient.nextcloud --quit >/dev/null
|
||||||
if [[ $? -ne 0 ]]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Service could not be stopped, please check why."
|
echo "Service could not be stopped, please check why."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NC_PID=$( pgrep -u $USER nextcloud )
|
NC_PID=$( pgrep -u $USER nextcloud )
|
||||||
if [[ ! -z ${NC_PID} ]]; then
|
if [ -n "${NC_PID}" ]; then
|
||||||
echo "Nextcloud still running with PID ${NC_PID}. Force stop"
|
echo "Nextcloud still running with PID ${NC_PID}. Force stop"
|
||||||
# Kill does not remove lockfiles in ~/.var/app/com.nextcloud.desktopclient.nextcloud/cache/tmp/ which will prevent next start
|
# Kill does not remove lockfiles in ~/.var/app/com.nextcloud.desktopclient.nextcloud/cache/tmp/ which will prevent next start
|
||||||
kill ${NC_PID}
|
kill ${NC_PID}
|
||||||
if [[ $? -ne 0 ]]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Service could not be stopped, please check why."
|
echo "Service could not be stopped, please check why."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
rm -rif ${HOME}/.var/app/com.nextcloud.desktopclient.nextcloud/cache/temp/*
|
rm -rif ${HOME}/.var/app/com.nextcloud.desktopclient.nextcloud/cache/temp/*
|
||||||
@@ -55,17 +55,14 @@ declare -p CLIENT_DATA_SYNC_DECLARE >/dev/null
|
|||||||
eval "${CLIENT_DATA_SYNC_DECLARE}"
|
eval "${CLIENT_DATA_SYNC_DECLARE}"
|
||||||
declare -p CLIENT_DATA_SYNC_DECLARE CLIENT_DATA_SYNC >/dev/null
|
declare -p CLIENT_DATA_SYNC_DECLARE CLIENT_DATA_SYNC >/dev/null
|
||||||
eval "${CLIENT_DATA_SYNC}"
|
eval "${CLIENT_DATA_SYNC}"
|
||||||
if [[ "${#CLIENT_DATA_SYNC[@]}" == "0" ]]; then
|
if [ "${#CLIENT_DATA_SYNC[@]}" -eq 0 ]; then
|
||||||
echo "CLIENT_DATA_SYNC not set, skipping setup of Nextcloud Desktop sync"
|
echo "CLIENT_DATA_SYNC not set, skipping setup of Nextcloud Desktop sync"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#Loop through all Entries
|
#Loop through all Entries
|
||||||
for i in {0..99}; do
|
_nc_first=1
|
||||||
if [[ -z ${CLIENT_DATA_SYNC[$i]} ]]; then
|
for CLIENT_DATA_DECLARE_LINE in "${CLIENT_DATA_SYNC[@]}"; do
|
||||||
break
|
|
||||||
fi
|
|
||||||
CLIENT_DATA_DECLARE_LINE="${CLIENT_DATA_SYNC[$i]}"
|
|
||||||
eval "${CLIENT_DATA_DECLARE_LINE}"
|
eval "${CLIENT_DATA_DECLARE_LINE}"
|
||||||
# echo "DEBUG user_run.sh(0020)_2: ${CLIENT_DATA_SYNC_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
|
# Now, CLIENT_DATA_SYNC_LINE[0] contains the local path and CLIENT_DATA_SYNC_LINE[1] contains the remote path
|
||||||
@@ -73,10 +70,11 @@ for i in {0..99}; do
|
|||||||
echo "Already found configured local folder ${CLIENT_DATA_SYNC_LINE[0]} syncing with ${CLIENT_DATA_SYNC_LINE[1]} . Leaving it unchanged."
|
echo "Already found configured local folder ${CLIENT_DATA_SYNC_LINE[0]} syncing with ${CLIENT_DATA_SYNC_LINE[1]} . Leaving it unchanged."
|
||||||
else
|
else
|
||||||
echo "Setup new sync from remote ${CLIENT_DATA_SYNC_LINE[1]} to local ${CLIENT_DATA_SYNC_LINE[0]}"
|
echo "Setup new sync from remote ${CLIENT_DATA_SYNC_LINE[1]} to local ${CLIENT_DATA_SYNC_LINE[0]}"
|
||||||
if [[ $i -gt 0 ]]; then
|
if [ "${_nc_first}" -eq 0 ]; then
|
||||||
echo "Due to Bug in Nextcloud Client, more than one synced Folder cannot be setup currently. Maybe in the Future."
|
echo "Due to Bug in Nextcloud Client, more than one synced Folder cannot be setup currently. Maybe in the Future."
|
||||||
continue;
|
continue
|
||||||
fi
|
fi
|
||||||
|
_nc_first=0
|
||||||
if [ -d "${CLIENT_DATA_SYNC_LINE[0]}" ]; then
|
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."
|
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"
|
mv "${CLIENT_DATA_SYNC_LINE[0]}" "${CLIENT_DATA_SYNC_LINE[0]}_bak"
|
||||||
@@ -96,50 +94,50 @@ for i in {0..99}; do
|
|||||||
echo "Please check the above output!"
|
echo "Please check the above output!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# The Flatpak autoprovisioning may not successfully write the apppassword to
|
# The Flatpak autoprovisioning may not successfully write the apppassword to
|
||||||
# KWallet from inside the sandbox, so write it directly via D-Bus.
|
# KWallet from inside the sandbox, so write it directly via D-Bus.
|
||||||
# Nextcloud stores HTTP credentials in folder "Nextcloud" with keys:
|
# Nextcloud stores HTTP credentials in folder "Nextcloud" with keys:
|
||||||
# user:url/:0 (legacy password entry)
|
# user:url/:0 (legacy password entry)
|
||||||
# user_app-password:url/:0 (app password entry, used for auth)
|
# user_app-password:url/:0 (app password entry, used for auth)
|
||||||
NC_WALLET_URL="https://${SERVERFQDN_NC}/"
|
NC_WALLET_URL="https://${SERVERFQDN_NC}/"
|
||||||
NC_WALLET_APPID="logon_script"
|
NC_WALLET_APPID="logon_script"
|
||||||
NC_QB_CMD="qdbus-qt6"
|
NC_QB_CMD="qdbus-qt6"
|
||||||
if ! command -v ${NC_QB_CMD} >/dev/null 2>&1; then NC_QB_CMD="qdbus"; fi
|
if ! command -v ${NC_QB_CMD} >/dev/null 2>&1; then NC_QB_CMD="qdbus"; fi
|
||||||
# Only attempt KWallet on KDE: check that the service is registered on the session bus.
|
# Only attempt KWallet on KDE: check that the service is registered on the session bus.
|
||||||
if command -v "${NC_QB_CMD}" >/dev/null 2>&1 && \
|
if command -v "${NC_QB_CMD}" >/dev/null 2>&1 && \
|
||||||
"${NC_QB_CMD}" 2>/dev/null | grep -q "org.kde.kwalletd"; then
|
"${NC_QB_CMD}" 2>/dev/null | grep -q "org.kde.kwalletd"; then
|
||||||
NC_QB_SVC="org.kde.kwalletd"
|
NC_QB_SVC="org.kde.kwalletd"
|
||||||
NC_QB_PATH="/modules/kwalletd6"
|
NC_QB_PATH="/modules/kwalletd6"
|
||||||
if ! ( ${NC_QB_CMD} "${NC_QB_SVC}" | grep -q "${NC_QB_PATH}" ); then
|
if ! ( ${NC_QB_CMD} "${NC_QB_SVC}" | grep -q "${NC_QB_PATH}" ); then
|
||||||
NC_QB_PATH="/modules/kwalletd5"
|
NC_QB_PATH="/modules/kwalletd5"
|
||||||
fi
|
|
||||||
echo "Checking Nextcloud app password in KWallet via D-Bus (${NC_QB_PATH})"
|
|
||||||
NC_WALLET_HANDLE=$(${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.open "kdewallet" 0 "${NC_WALLET_APPID}")
|
|
||||||
if [[ -n "${NC_WALLET_HANDLE}" && "${NC_WALLET_HANDLE}" != "-1" ]]; then
|
|
||||||
HAS_FOLDER=$(${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.hasFolder "${NC_WALLET_HANDLE}" "Nextcloud" "${NC_WALLET_APPID}")
|
|
||||||
if [[ "${HAS_FOLDER}" != "true" ]]; then
|
|
||||||
${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.createFolder "${NC_WALLET_HANDLE}" "Nextcloud" "${NC_WALLET_APPID}" >/dev/null
|
|
||||||
fi
|
|
||||||
HAS_PW1=$(${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.hasEntry "${NC_WALLET_HANDLE}" "Nextcloud" "${DAVTOKEN_USER}:${NC_WALLET_URL}:0" "${NC_WALLET_APPID}")
|
|
||||||
HAS_PW2=$(${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.hasEntry "${NC_WALLET_HANDLE}" "Nextcloud" "${DAVTOKEN_USER}_app-password:${NC_WALLET_URL}:0" "${NC_WALLET_APPID}")
|
|
||||||
if [[ "${HAS_PW1}" == "true" && "${HAS_PW2}" == "true" ]]; then
|
|
||||||
echo "Nextcloud app password already present in KWallet — no change needed."
|
|
||||||
else
|
|
||||||
${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.writePassword "${NC_WALLET_HANDLE}" "Nextcloud" "${DAVTOKEN_USER}:${NC_WALLET_URL}:0" "${DAVTOKEN_PASS}" "${NC_WALLET_APPID}" >/dev/null
|
|
||||||
${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.writePassword "${NC_WALLET_HANDLE}" "Nextcloud" "${DAVTOKEN_USER}_app-password:${NC_WALLET_URL}:0" "${DAVTOKEN_PASS}" "${NC_WALLET_APPID}" >/dev/null
|
|
||||||
echo "Nextcloud app password written to KWallet successfully."
|
|
||||||
fi
|
|
||||||
${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.sync "${NC_WALLET_HANDLE}" "${NC_WALLET_APPID}" >/dev/null
|
|
||||||
${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.close "${NC_WALLET_HANDLE}" false "${NC_WALLET_APPID}" >/dev/null
|
|
||||||
else
|
|
||||||
echo "Warning: Could not open KWallet (handle: ${NC_WALLET_HANDLE}). Nextcloud may prompt for credentials on next start."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "KWallet not available (non-KDE desktop) — skipping credential storage."
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
echo "Checking Nextcloud app password in KWallet via D-Bus (${NC_QB_PATH})"
|
||||||
|
NC_WALLET_HANDLE=$(${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.open "kdewallet" 0 "${NC_WALLET_APPID}")
|
||||||
|
if [ -n "${NC_WALLET_HANDLE}" ] && [ "${NC_WALLET_HANDLE}" != "-1" ]; then
|
||||||
|
HAS_FOLDER=$(${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.hasFolder "${NC_WALLET_HANDLE}" "Nextcloud" "${NC_WALLET_APPID}")
|
||||||
|
if [ "${HAS_FOLDER}" != "true" ]; then
|
||||||
|
${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.createFolder "${NC_WALLET_HANDLE}" "Nextcloud" "${NC_WALLET_APPID}" >/dev/null
|
||||||
|
fi
|
||||||
|
HAS_PW1=$(${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.hasEntry "${NC_WALLET_HANDLE}" "Nextcloud" "${DAVTOKEN_USER}:${NC_WALLET_URL}:0" "${NC_WALLET_APPID}")
|
||||||
|
HAS_PW2=$(${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.hasEntry "${NC_WALLET_HANDLE}" "Nextcloud" "${DAVTOKEN_USER}_app-password:${NC_WALLET_URL}:0" "${NC_WALLET_APPID}")
|
||||||
|
if [ "${HAS_PW1}" = "true" ] && [ "${HAS_PW2}" = "true" ]; then
|
||||||
|
echo "Nextcloud app password already present in KWallet — no change needed."
|
||||||
|
else
|
||||||
|
${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.writePassword "${NC_WALLET_HANDLE}" "Nextcloud" "${DAVTOKEN_USER}:${NC_WALLET_URL}:0" "${DAVTOKEN_PASS}" "${NC_WALLET_APPID}" >/dev/null
|
||||||
|
${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.writePassword "${NC_WALLET_HANDLE}" "Nextcloud" "${DAVTOKEN_USER}_app-password:${NC_WALLET_URL}:0" "${DAVTOKEN_PASS}" "${NC_WALLET_APPID}" >/dev/null
|
||||||
|
echo "Nextcloud app password written to KWallet successfully."
|
||||||
|
fi
|
||||||
|
${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.sync "${NC_WALLET_HANDLE}" "${NC_WALLET_APPID}" >/dev/null
|
||||||
|
${NC_QB_CMD} ${NC_QB_SVC} ${NC_QB_PATH} org.kde.KWallet.close "${NC_WALLET_HANDLE}" false "${NC_WALLET_APPID}" >/dev/null
|
||||||
|
else
|
||||||
|
echo "Warning: Could not open KWallet (handle: ${NC_WALLET_HANDLE}). Nextcloud may prompt for credentials on next start."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "KWallet not available (non-KDE desktop) — skipping credential storage."
|
||||||
|
fi
|
||||||
|
|
||||||
# Now start Nextcloud
|
# Now start Nextcloud
|
||||||
echo "Starting Nextcloud Client in Background"
|
echo "Starting Nextcloud Client in Background"
|
||||||
|
|||||||
Reference in New Issue
Block a user