diff --git a/spk/owncloud/Makefile b/spk/owncloud/Makefile index 4b5b31a54a6..3573594f7e8 100644 --- a/spk/owncloud/Makefile +++ b/spk/owncloud/Makefile @@ -5,32 +5,37 @@ SPK_ICON = src/owncloud.png DSM_UI_DIR = app DEPENDS = cross/$(SPK_NAME) +SPK_DEPENDS = "WebStation:PHP7.4:Apache2.4" + +REQUIRED_MIN_DSM = 6.0 MAINTAINER = ymartin59 DESCRIPTION = ownCloud is a personal cloud which runs on your own server and gives you freedom and control over your own data. -ADMIN_URL = /owncloud/ +CHANGELOG = "1. Update ownCloud to 10.11.
2. Use faster SQLite database." DISPLAY_NAME = ownCloud -CHANGELOG = "1. Update ownCloud to 10.11." +HOMEPAGE = https://owncloud.org/ +LICENSE = AGPL -HOMEPAGE = https://owncloud.org/ -LICENSE = AGPL +STARTABLE = yes +SERVICE_USER = auto +SERVICE_SETUP = src/service-setup.sh -REQUIRED_MIN_DSM = 5.0 +SYSTEM_GROUP = http -WIZARDS_DIR = src/wizard/ -CONF_DIR = src/conf/ +# Admin link for in DSM UI +ADMIN_URL = /owncloud/ +ADMIN_PROTOCOL = https -SERVICE_SETUP = src/service-setup.sh -SERVICE_COMMAND = $(INSTALL_PREFIX)/bin/owncloud-daemon +CONF_DIR = src/conf/ +WIZARDS_DIR = src/wizard/ -SPK_DEPENDS = "WebStation:MariaDB10:PHP7.4:Apache2.4" -INSTALL_DEP_SERVICES = apache-web mysql -START_DEP_SERVICES = apache-web mysql -INSTUNINST_RESTART_SERVICES = apache-web -SYSTEM_GROUP = http +DSM_UI_CONFIG = src/app/config POST_STRIP_TARGET = owncloud_extra_install +# TMPDIR is used for owncloud built in backup and update +USE_ALTERNATE_TMPDIR = 1 + include ../../mk/spksrc.spk.mk .PHONY: owncloud_extra_install @@ -38,4 +43,3 @@ owncloud_extra_install: install -m 755 -d $(STAGING_DIR)/app -d $(STAGING_DIR)/bin install -m 644 src/app/config $(STAGING_DIR)/app/config install -m 755 src/bin/owncloud-daemon $(STAGING_DIR)/bin/owncloud-daemon - install -m 755 src/bin/owncloud.sh $(STAGING_DIR)/bin/owncloud.sh diff --git a/spk/owncloud/src/app/config b/spk/owncloud/src/app/config index 12b4dce2509..b8070b79a97 100644 --- a/spk/owncloud/src/app/config +++ b/spk/owncloud/src/app/config @@ -1,15 +1,12 @@ { - ".url": { - "com.synocommunity.packages.owncloud": { - "title": "ownCloud", - "desc": "ownCloud", - "icon": "images/owncloud-{0}.png", - "type": "url", - "protocol": "http", - "port": "80", - "url": "/owncloud", - "allUsers": true, - "grantPrivilege": "local" - } + ".url":{ + "com.synocommunity.packages.owncloud":{ + "allUsers":true, + "desc":"ownCloud", + "icon":"images/owncloud-{0}.png", + "title":"ownCloud", + "type":"url", + "url":"/owncloud" + } } -} + } \ No newline at end of file diff --git a/spk/owncloud/src/bin/owncloud-daemon b/spk/owncloud/src/bin/owncloud-daemon index 9d9af0a72ac..e235e820172 100644 --- a/spk/owncloud/src/bin/owncloud-daemon +++ b/spk/owncloud/src/bin/owncloud-daemon @@ -1,77 +1,25 @@ #!/bin/sh -# Package -PACKAGE="owncloud" -DNAME="ownCloud" +set -e -# Others +# ownCloud service setup WEB_DIR="/var/services/web_packages" -PATH="${SYNOPKG_PKGDEST}/bin:${PATH}" -BUILDNUMBER="$(/bin/get_key_value /etc.defaults/VERSION buildnumber)" -USER="$([ "${BUILDNUMBER}" -ge "4418" ] && echo -n http || echo -n nobody)" -OWNCLOUD="${SYNOPKG_PKGDEST}/bin/owncloud.sh" -PID_FILE="${SYNOPKG_PKGDEST}/var/owncloud.pid" - - -start_daemon () -{ - start-stop-daemon -S -q -m -b -N 10 -x ${OWNCLOUD} -c ${USER} -u ${USER} -p ${PID_FILE} > /dev/null -} - -stop_daemon () -{ - start-stop-daemon -K -q -u ${USER} -p ${PID_FILE} - wait_for_status 1 20 || start-stop-daemon -K -s 9 -q -p ${PID_FILE} -} - -daemon_status () -{ - start-stop-daemon -K -q -t -u ${USER} -p ${PID_FILE} -} - -wait_for_status () -{ - counter=$2 - while [ ${counter} -gt 0 ]; do - daemon_status - [ $? -eq $1 ] && return - let counter=counter-1 - sleep 1 - done - return 1 -} - - -case $1 in - start) - if daemon_status; then - echo ${DNAME} is already running - else - echo Starting ${DNAME} ... - start_daemon - fi - ;; - stop) - if daemon_status; then - echo Stopping ${DNAME} ... - stop_daemon - else - echo ${DNAME} is not running - fi - ;; - status) - if daemon_status; then - echo ${DNAME} is running - exit 0 - else - echo ${DNAME} is not running - exit 1 - fi - ;; - log) - exit 1 - ;; - *) - exit 1 - ;; -esac +# for backwards compatability +if [ $SYNOPKG_DSM_VERSION_MAJOR -lt 7 ];then + WEB_DIR="/var/services/web" +fi +OWNCLOUD="${WEB_DIR}/${SYNOPKG_PKGNAME}/occ background:cron" +HOME_DIR="${SYNOPKG_PKGVAR}" +PHP="/usr/local/bin/php74" +SLEEP_TIME="1800" + +# Main loop +while true; do + # Update + echo "Updating..." + ${PHP} ${OWNCLOUD} >> "${SYNOPKG_PKGVAR}/daemon.log" 2>&1 + + # Wait + echo "Waiting ${SLEEP_TIME} seconds..." + sleep ${SLEEP_TIME} +done diff --git a/spk/owncloud/src/bin/owncloud.sh b/spk/owncloud/src/bin/owncloud.sh deleted file mode 100644 index fe6b6d7c50a..00000000000 --- a/spk/owncloud/src/bin/owncloud.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -set -e - -PHP="php -d open_basedir=none -f" -OWNCLOUD="/var/services/web_packages/owncloud/cron.php" -SLEEP_TIME="1800" - -# Main loop -while true; do - # Update - echo "Updating..." - ${PHP} ${OWNCLOUD} - - # Wait - echo "Waiting ${SLEEP_TIME} seconds..." - sleep ${SLEEP_TIME} -done diff --git a/spk/owncloud/src/conf/resource b/spk/owncloud/src/conf/resource index a5f6464c44f..4999e6d67ce 100644 --- a/spk/owncloud/src/conf/resource +++ b/spk/owncloud/src/conf/resource @@ -1,21 +1,4 @@ { - "mariadb10-db":{ - "admin-account-m10":"root", - "admin-pw-m10":"{{wizard_mysql_password_root}}", - "create-db":{ - "db-collision":"skip", - "db-name":"owncloud", - "flag":true - }, - "drop-db-uninst":false, - "drop-user-uninst":false, - "grant-user":{ - "db-name":"owncloud", - "flag":true, - "user-name":"owncloud", - "user-pw":"{{wizard_mysql_password_owncloud}}" - } - }, "webservice":{ "migrate":{ "root":[ @@ -39,8 +22,8 @@ "alias":"owncloud", "app":"com.synocommunity.packages.owncloud", "display_name":"ownCloud", - "name":"owncloud", - "service":"owncloud", + "name":"ownCloud", + "service":"ownCloud", "type":"alias" } ], @@ -62,7 +45,8 @@ "intl", "ldap", "openssl", - "pdo_mysql", + "pdo_sqlite", + "sqlite3", "ssh2", "zip", "zlib" @@ -70,16 +54,16 @@ "group":"http", "php_settings":{ "error_log":"/var/services/web_packages/owncloud/php_errors.log", - "pdo_mysql.default_socket":"/run/mysqld/mysqld10.sock" + "max_execution_time":"900" }, - "profile_desc":"PHP Profile for owncloud", - "profile_name":"owncloud Profile", - "read_timeout":3600, - "send_timeout":120, + "profile_desc":"PHP Profile for ownCloud", + "profile_name":"ownCloud Profile", "user":"sc-owncloud" }, + "read_timeout":3600, "root":"owncloud", - "service":"owncloud", + "send_timeout":120, + "service":"ownCloud", "type":"apache_php" } ] diff --git a/spk/owncloud/src/owncloud.png b/spk/owncloud/src/owncloud.png old mode 100755 new mode 100644 index 758ace0265d..ba5eef2a138 Binary files a/spk/owncloud/src/owncloud.png and b/spk/owncloud/src/owncloud.png differ diff --git a/spk/owncloud/src/service-setup.sh b/spk/owncloud/src/service-setup.sh index c908f7efdd0..63f5f7de825 100755 --- a/spk/owncloud/src/service-setup.sh +++ b/spk/owncloud/src/service-setup.sh @@ -1,174 +1,305 @@ -# Package -PACKAGE_NAME="com.synocommunity.packages.${SYNOPKG_PKGNAME}" - -# Others +# ownCloud service setup WEB_DIR="/var/services/web_packages" -if [ $SYNOPKG_DSM_VERSION_MAJOR -lt 7 ];then - WEB_DIR="/var/services/web" -fi -TMP_DIR="${SYNOPKG_PKGVAR}/tmp" # for backwards compatability if [ $SYNOPKG_DSM_VERSION_MAJOR -lt 7 ];then - TMP_DIR="${SYNOPKG_PKGDEST}/../../@tmp" + WEB_DIR="/var/services/web" fi -BUILDNUMBER="$(/bin/get_key_value /etc.defaults/VERSION buildnumber)" -HTTP_USER="$([ $(/bin/get_key_value /etc.defaults/VERSION buildnumber) -ge 4418 ] && echo -n http || echo -n nobody)" -MARIADB_10_INSTALL_DIRECTORY="/var/packages/MariaDB10" -MARIADB_10_BIN_DIRECTORY="${MARIADB_10_INSTALL_DIRECTORY}/target/usr/local/mariadb10/bin" -MARIADB_10_SERVER_PORT="$(grep -A1 '\[mysqld\]' /var/packages/MariaDB10/etc/my_port.cnf | tail -n1 | awk -F= '{print $2}')" -MYSQL="${MARIADB_10_BIN_DIRECTORY}/mysql" -MYSQLDUMP="${MARIADB_10_BIN_DIRECTORY}/mysqldump" -MYSQL_USER="${SYNOPKG_PKGNAME}" -MYSQL_DATABASE="${SYNOPKG_PKGNAME}" +# Others +PHP="/usr/local/bin/php74" +SQLITE="/bin/sqlite3" +OCROOT="${WEB_DIR}/${SYNOPKG_PKGNAME}" +OCC="${PHP} ${OCROOT}/occ" + +if [ ${SYNOPKG_DSM_VERSION_MAJOR} -lt 7 ]; then + GROUP="http" +fi +service_prestart () +{ + # Replace generic service startup, fork process in background + echo "Starting owncloud-daemon at ${SYNOPKG_PKGDEST}/bin" >> ${LOG_FILE} + COMMAND="${SYNOPKG_PKGDEST}/bin/owncloud-daemon" + ${COMMAND} >> ${LOG_FILE} 2>&1 & + echo "$!" > "${PID_FILE}" +} service_preinst () { - if [ "${SYNOPKG_PKG_STATUS}" == "INSTALL" ]; then + : + + exit 0 +} - # Check database - if ! ${MYSQL} -u root -p"${wizard_mysql_password_root}" -e quit > /dev/null 2>&1; then - echo "Incorrect MySQL root password" - exit 1 - fi - if ${MYSQL} -u root -p"${wizard_mysql_password_root}" mysql -e "SELECT User FROM user" | grep ^${MYSQL_USER}$ > /dev/null 2>&1; then - echo "MySQL user ${MYSQL_USER} already exists" - exit 1 - fi - if ${MYSQL} -u root -p"${wizard_mysql_password_root}" -e "SHOW DATABASES" | grep ^${MYSQL_DATABASE}$ > /dev/null 2>&1; then - echo "MySQL database ${MYSQL_DATABASE} already exists" - exit 1 - fi +service_postinst () +{ + if [ ${SYNOPKG_DSM_VERSION_MAJOR} -lt 7 ]; then + # Install the web interface + ${MKDIR} ${OCROOT} + rsync -aX ${SYNOPKG_PKGDEST}/share/${SYNOPKG_PKGNAME}/ ${OCROOT} 2>&1 + # Fix permissions + chgrp -R ${GROUP} ${OCROOT} 2>&1 + chmod -R 0755 ${OCROOT} 2>&1 + fi - if [ "${SYNOPKG_DSM_VERSION_MAJOR}" -lt 7 ]; then + if [ "${SYNOPKG_PKG_STATUS}" = "INSTALL" ]; then + # Create data directory + ${MKDIR} "${wizard_owncloud_datadirectory}" - # Check directory - if [ ! -d ${wizard_owncloud_datadirectory:=/volume1/owncloud} ]; then - echo "Directory does not exist" - exit 1 + # Setup configuration file + ${OCC} maintenance:install \ + --database "sqlite" \ + --database-name "${SYNOPKG_PKGNAME}" \ + --data-dir "${wizard_owncloud_datadirectory}" \ + --admin-user "${wizard_owncloud_admin_username}" \ + --admin-pass "${wizard_owncloud_admin_password}" 2>&1 + + # Get the trusted domains + DOMAINS="$(${OCC} config:system:get trusted_domains)" + + # Fix trusted domains array + line_number=0 + echo "${DOMAINS}" | while read -r line; do + if [ "$(echo "$line" | grep -cE ':5000|:5001')" -gt 0 ]; then + # Remove ":5000" or ":5001" from the line and update the trusted_domains array + new_line=$(echo "$line" | sed -E 's/(:5000|:5001)//') + ${OCC} config:system:set trusted_domains $line_number --value="$new_line" fi - + line_number=$((line_number+1)) + done + + # Add HTTP to HTTPS redirect to Apache configuration file + APACHE_CONF="${OCROOT}/.htaccess" + if [ -f "${APACHE_CONF}" ]; then + echo "RewriteEngine On" >> ${APACHE_CONF} + echo "RewriteCond %{HTTPS} off" >> ${APACHE_CONF} + echo "RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]" >> ${APACHE_CONF} fi - fi - return 0 + exit 0 } -service_postinst () +service_preuninst () { - if [ "${SYNOPKG_PKG_STATUS}" == "INSTALL" ]; then - - if [ "${SYNOPKG_DSM_VERSION_MAJOR}" -lt 7 ]; then - # Install the web interface - ${CP} ${SYNOPKG_PKGDEST}/share/${SYNOPKG_PKGNAME} ${WEB_DIR} - - # Configure open_basedir - if [ "${HTTP_USER}" == "nobody" ]; then - echo -e "\nphp_admin_value open_basedir none\n" > /usr/syno/etc/sites-enabled-user/${SYNOPKG_PKGNAME}.conf - else - echo -e "extension = fileinfo.so\n[PATH=${WEB_DIR}/${SYNOPKG_PKGNAME}]\nopen_basedir = Null" > /etc/php/conf.d/${PACKAGE_NAME}.ini - echo -e "\nXSendFilePath /\n" > /etc/httpd/sites-enabled-user/${PACKAGE_NAME}.conf - fi + if [ "${SYNOPKG_PKG_STATUS}" = "UNINSTALL" ]; then + # Check database export location + if [ -f "${wizard_dbexport_path}" ] || [ -e "${wizard_dbexport_path}/${SYNOPKG_PKGNAME}.db" ]; then + echo "The export location already exists as a file or a directory containing a file named ${SYNOPKG_PKGNAME}.db. Please remove the file or choose a different location." + exit 1 fi - # Create data directory - ${MKDIR} "${wizard_owncloud_datadirectory}" - - # Setup configuration file - { - echo ' "mysql",'; - echo ' "dbname" => "'${MYSQL_DATABASE}'",'; - echo ' "dbuser" => "'${MYSQL_USER}'",'; - echo ' "dbpass" => "'${wizard_mysql_password_owncloud}'",'; - echo ' "dbhost" => "localhost:'${MARIADB_10_SERVER_PORT}'",'; - echo ' "dbtableprefix" => "",'; - echo ' "adminlogin" => "'${wizard_owncloud_admin_username}'",'; - echo ' "adminpass" => "'${wizard_owncloud_admin_password}'",'; - echo ' "directory" => "'${wizard_owncloud_datadirectory}'",'; - echo ');'; - } >>"${WEB_DIR}/${SYNOPKG_PKGNAME}/config/autoconfig.php" - - if [ "${SYNOPKG_DSM_VERSION_MAJOR}" -lt 7 ]; then - # Fix permissions - chown -R ${HTTP_USER} ${WEB_DIR}/${SYNOPKG_PKGNAME} + # Check that the path is writable + if [ -d "${wizard_dbexport_path}" ] && [ ! -w "${wizard_dbexport_path}" ]; then + echo "Export directory exists but does not allow writing. Please add write permissions for the user 'sc-${SYNOPKG_PKGNAME}'." + exit 1 fi + # Get data directory + DATADIR="$(${OCC} config:system:get datadirectory)" + # Export database + if [ -n "${wizard_dbexport_path}" ]; then + ${MKDIR} -p ${wizard_dbexport_path} + ${SQLITE} "${DATADIR}/${SYNOPKG_PKGNAME}.db" ".backup '${wizard_dbexport_path}/${SYNOPKG_PKGNAME}.db'" 2>&1 + fi fi - return 0 + exit 0 } -service_preuninst () +service_postuninst () { - # Check database - if [ "${SYNOPKG_PKG_STATUS}" == "UNINSTALL" ] && ! ${MYSQL} -u root -p"${wizard_mysql_password_root}" -e quit > /dev/null 2>&1; then - echo "Incorrect MySQL root password" - exit 1 + if [ ${SYNOPKG_DSM_VERSION_MAJOR} -lt 7 ]; then + # Remove the web interface + ${RM} ${OCROOT} fi - # Check database export location - if [ "${SYNOPKG_PKG_STATUS}" == "UNINSTALL" -a -n "${wizard_dbexport_path}" ]; then - if [ -f "${wizard_dbexport_path}" -o -e "${wizard_dbexport_path}/${MYSQL_DATABASE}.sql" ]; then - echo "File ${wizard_dbexport_path}/${MYSQL_DATABASE}.sql already exists. Please remove or choose a different location" - exit 1 - fi + exit 0 +} + +### NEW LOGIC TO CREATE / VALIDATE FOR UPGRADES ### + +# From: https://doc.owncloud.com/server/next/admin_manual/maintenance/upgrading/manual_upgrade.html + +### PREPARATION + +# 1. Put your server in maintenance mode and disable Cron jobs. +# From: https://doc.owncloud.com/server/next/admin_manual/maintenance/enable_maintenance.html +# sudo -u www-data ./occ maintenance:mode --on +# From: https://doc.owncloud.com/server/next/admin_manual/troubleshooting/remove_non_existent_bg_jobs.html#remove-the-background-job +# sudo -u www-data ./occ background:queue:status +# sudo -u www-data ./occ background:queue:delete ID +# 2. Stop your webserver to prevent users trying to access ownCloud via the web +# sudo service apache2 stop +# 3. Backup ownCloud and the server database +# From: https://doc.owncloud.com/server/next/admin_manual/maintenance/backup_and_restore/backup.html +# rsync -Aax config data apps apps-external /oc-backupdir/ +# sqlite3 data/owncloud.db .dump > owncloud-dbbackup_`date +"%Y%m%d"`.bak +# ?? sudo crontab -u www-data -l > www-data_crontab.bak +# 4. Review any installed third-party apps for compatibility with the new ownCloud release. +# Ensure that they are all disabled before beginning the upgrade. +# sudo -u www-data ./occ app:list +# sudo -u www-data ./occ app:disable +# 5. Backup Manual Changes in .htaccess +# 6. Backup Manual Changes in .user.ini + +### UPGRADE + +# 7.Move Current ownCloud Directory +# sudo mv /var/www/owncloud /var/www/backup_owncloud +# 8. Extract the New Source +# ?? Should this automatically happen as part of the package function and put in place? +# 9. Copy the data/ Directory +# ?? Check if the data directory is inside your owncloud/ directory. Sample code to check pre-upgrade: +# if [[ $(realpath $potential_subdir) =~ ^$(realpath $parent_dir) ]]; then +# echo "$potential_subdir is a subdirectory of $parent_dir" +# else +# echo "$potential_subdir is not a subdirectory of $parent_dir" +# fi +# ?? If true, move it from your old version of ownCloud to your new version +# sudo mv /var/www/backup_owncloud/data /var/www/owncloud/data +#10. Copy Relevant config.php Content +# sudo cp /var/www/backup_owncloud/config/*config.php \ +# /var/www/owncloud/config/ +# sudo cp /var/www/backup_owncloud/config/*.json \ +# /var/www/owncloud/config/ +#11. Market and Marketplace App Upgrades +#12. Copy Old Apps +# ?? If you are using third party applications, look in your new /var/www/owncloud/apps/ +# or /var/www/owncloud/apps-external/ directory to see if they are present. +# If not, copy them from your old instance to your new one. +#13. Set correct ownership +# sudo find -L /var/www/owncloud \ +# \( -path ./data -o -path ./config \) -prune -o \ +# -type f -print0 | sudo xargs -0 chown root:www-data +#14. Set correct permissions +# sudo find -L /var/www/owncloud -type f -print0 | sudo xargs -0 chmod 640 +# sudo find -L /var/www/owncloud -type d -print0 | sudo xargs -0 chmod 750 +# sudo chmod +x /var/www/owncloud/occ + +### FINALIZE + +#15. Start the Upgrade +# sudo -u www-data ./occ upgrade +#16. Reapply Manual Changes +# ?? Manual Changes in .htaccess can be re-applied using installer logic +# diff -y -W 70 --suppress-common-lines owncloud/.user.ini owncloud_2022-02-15-09.18.48/.user.ini +#17. Strong Permissions +# Check that chmod with 0640 for .htaccess and .user.ini files has been applied. +#18. Disable Maintenance Mode +# sudo -u www-data ./occ maintenance:mode --off +#19. Enable Browser Access +# sudo service apache2 start +#20. Check the Upgrade +# After the upgrade is complete, re-enable any third-party apps that are compatible with the new release. +# ?? Use occ app:enable to enable all compatible third-party apps. + +service_preupgrade () +{ + # Place server in maintenance mode + ${OCC} maintenance:mode --on + + # Identify data directory for restore + DATADIR=$(realpath "$(${OCC} config:system:get datadirectory)") + WEBROOT=$(realpath "${OCROOT}") + if echo "$DATADIR" | grep -q "^$WEBROOT"; then + echo "${DATADIR#"$WEBROOT/"}" > "${SYNOPKG_TEMP_UPGRADE_FOLDER}/.datadirectory" fi - # Stop the package - ${SSS} stop > /dev/null + # Backup configuration and data + [ -d ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME} ] && ${RM} ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME} + echo "Backup existing distribution to ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}" + ${MKDIR} ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME} + rsync -aX ${OCROOT}/ ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME} 2>&1 - return 0 + exit 0 } -service_postuninst () +service_restore () { - if [ "${SYNOPKG_DSM_VERSION_MAJOR}" -lt 7 ]; then - # Remove open_basedir configuration - ${RM} /usr/syno/etc/sites-enabled-user/${SYNOPKG_PKGNAME}.conf - ${RM} /etc/php/conf.d/${PACKAGE_NAME}.ini - ${RM} /etc/httpd/sites-enabled-user/${PACKAGE_NAME}.conf + # Validate data directory for restore + if [ -f ${SYNOPKG_TEMP_UPGRADE_FOLDER}/.datadirectory ]; then + DATAPATH="$(cat ${SYNOPKG_TEMP_UPGRADE_FOLDER}/.datadirectory)" + # Data directory inside owncloud directory and needs to be restored + [ -d ${OCROOT}/${DATAPATH} ] && ${RM} ${OCROOT}/${DATAPATH} + echo "Restore previous data directory from ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}/${DATAPATH}" + rsync -aX ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}/${DATAPATH} ${OCROOT}/ 2>&1 + ${RM} ${SYNOPKG_TEMP_UPGRADE_FOLDER}/.datadirectory fi - # Export and remove database - if [ "${SYNOPKG_PKG_STATUS}" == "UNINSTALL" ]; then - if [ -n "${wizard_dbexport_path}" ]; then - mkdir -p ${wizard_dbexport_path} - ${MYSQLDUMP} -u root -p"${wizard_mysql_password_root}" ${MYSQL_DATABASE} > ${wizard_dbexport_path}/${MYSQL_DATABASE}.sql + # Restore the configuration files + echo "Restoring previous configuration from ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}" + source="${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}/config" + patterns=( + "*config.php" + "*.json" + ) + target="${OCROOT}/config" + # Process each pattern of files in the source directory + for pattern in "${patterns[@]}"; do + files=$(find "$source" -type f -name "$pattern") + if [ -n "$files" ]; then + for file in "${files[@]}"; do + file_name=$(basename "$file") + [ -f $target/$file_name ] && ${MV} $target/$file_name $target/$file_name.bak + rsync -aX "$file" "$target/" 2>&1 + done fi - ${MYSQL} -u root -p"${wizard_mysql_password_root}" -e "DROP DATABASE ${MYSQL_DATABASE}; DROP USER '${MYSQL_USER}'@'localhost';" + done + if [ -f ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}/.user.ini ]; then + [ -f ${OCROOT}/.user.ini ] && ${MV} ${OCROOT}/.user.ini ${OCROOT}/.user.ini.bak + rsync -aX ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}/.user.ini ${OCROOT}/ 2>&1 fi - - if [ "${SYNOPKG_DSM_VERSION_MAJOR}" -lt 7 ]; then - # Remove the web interface - ${RM} ${WEB_DIR}/${SYNOPKG_PKGNAME} + if [ -f ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}/.htaccess ]; then + [ -f ${OCROOT}/.htaccess ] && ${MV} ${OCROOT}/.htaccess ${OCROOT}/.htaccess.bak + rsync -aX ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}/.htaccess ${OCROOT}/ 2>&1 fi - return 0 -} + echo "Restoring manually installed apps from ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}" + # Migrate manually installed apps from source to destination directories + dirs=( + "${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}/apps" + "${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME}/apps-external" + ) + dest="${OCROOT}" + # Process the subdirectories in each of the source directories + for dir in "${dirs[@]}"; do + dir_name=$(basename "$dir") + sub_dirs=() + for item in "$dir"/*; do + if [ -d "$item" ]; then + sub_dirs+=("$item") + fi + done + if [ ! -d "$dest/$dir_name" ]; then + rsync -aX "$dir" "$dest/" 2>&1 + elif [ -n "$sub_dirs" ]; then + for sub_dir in "${sub_dirs[@]}"; do + sub_dir_name=$(basename "$sub_dir") + # Check if the subdirectory is missing from the destination + if [ ! -d "$dest/$dir_name/$sub_dir_name" ]; then + rsync -aX "$sub_dir" "$dest/$dir_name/" 2>&1 + fi + done + fi + done -service_preupgrade () -{ - # Stop the package - ${SSS} stop > /dev/null + # Disable maintenance mode + ${OCC} maintenance:mode --off + + # Finalize upgrade + ${OCC} upgrade - # Save the configuration file and data - rm -fr ${TMP_DIR}/${SYNOPKG_PKGNAME} - mkdir -p ${TMP_DIR}/${SYNOPKG_PKGNAME} - mv ${WEB_DIR}/${SYNOPKG_PKGNAME}/config/config.php ${TMP_DIR}/${SYNOPKG_PKGNAME}/ + # Remove upgrade backup files + ${RM} ${SYNOPKG_TEMP_UPGRADE_FOLDER}/${SYNOPKG_PKGNAME} - return 0 + exit 0 } service_postupgrade () { - # Restore the configuration file and data - mv ${TMP_DIR}/${SYNOPKG_PKGNAME}/config.php ${WEB_DIR}/${SYNOPKG_PKGNAME}/config/ - rm -fr ${TMP_DIR}/${SYNOPKG_PKGNAME} - - return 0 + : + + exit 0 } diff --git a/spk/owncloud/src/wizard/install_uifile b/spk/owncloud/src/wizard/install_uifile index b5b2dc83b42..383197aaa7e 100644 --- a/spk/owncloud/src/wizard/install_uifile +++ b/spk/owncloud/src/wizard/install_uifile @@ -1,29 +1,4 @@ [{ - "step_title": "ownCloud database configuration", - "items": [{ - "type": "password", - "desc": "Enter your MySQL root password.", - "subitems": [{ - "key": "wizard_mysql_password_root", - "desc": "Root database password", - "defaultValue": "", - "validator": { - "allowBlank": false - } - }] - }, { - "type": "password", - "desc": "A 'owncloud' MySQL user and database will be created. Please enter a password for the 'owncloud' user.", - "subitems": [{ - "key": "wizard_mysql_password_owncloud", - "desc": "owncloud database password", - "defaultValue": "", - "validator": { - "allowBlank": false - } - }] - }] -}, { "step_title": "ownCloud admin configuration", "items": [{ "type": "textfield", diff --git a/spk/owncloud/src/wizard/uninstall_uifile b/spk/owncloud/src/wizard/uninstall_uifile index b72f074bdf4..44280fb6733 100644 --- a/spk/owncloud/src/wizard/uninstall_uifile +++ b/spk/owncloud/src/wizard/uninstall_uifile @@ -2,17 +2,6 @@ "step_title": "Remove owncloud database", "items": [{ "desc": "Attention: The owncloud database will be removed during package uninstallation. All users will be deleted." - }, { - "type": "password", - "desc": "Enter your MySQL root password", - "subitems": [{ - "key": "wizard_mysql_password_root", - "desc": "Root password", - "defaultValue": "", - "validator": { - "allowBlank": false - } - }] }, { "type": "textfield", "desc": "Optional: Provide directory for database export. Leave blank to skip export. The directory will be created if it does not exist",