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",