diff --git a/Containers/mastercontainer/start.sh b/Containers/mastercontainer/start.sh index 77587767..f3b1723b 100755 --- a/Containers/mastercontainer/start.sh +++ b/Containers/mastercontainer/start.sh @@ -63,6 +63,19 @@ else fi # Check for other options +if [ -n "$NEXTCLOUD_DATADIR" ]; then + if ! echo "$NEXTCLOUD_DATADIR" | grep -q "^/mnt/" \ + && ! echo "$NEXTCLOUD_DATADIR" | grep -q "^/media/" + then + echo "You've set NEXTCLOUD_DATADIR but not to an allowed value. +The string must start with '/mnt/' or '/media/'. E.g. '/mnt/ncdata'" + exit 1 + elif [ "$NEXTCLOUD_DATADIR" = "/mnt/" ] || [ "$NEXTCLOUD_DATADIR" = "/media/" ]; then + echo "You've set NEXTCLOUD_DATADIR but not to an allowed value. +The string must start with '/mnt/' or '/media/' and not be equal to these." + exit 1 + fi +fi if [ -n "$NEXTCLOUD_MOUNT" ]; then if ! echo "$NEXTCLOUD_MOUNT" | grep -q "^/mnt/" \ && ! echo "$NEXTCLOUD_MOUNT" | grep -q "^/media/" \ diff --git a/Containers/nextcloud/entrypoint.sh b/Containers/nextcloud/entrypoint.sh index 8778ab02..0e7e86ac 100644 --- a/Containers/nextcloud/entrypoint.sh +++ b/Containers/nextcloud/entrypoint.sh @@ -21,6 +21,15 @@ redis.session.lock_retries = -1 redis.session.lock_wait_time = 10000 REDIS_CONF +# Check permissions in ncdata +touch "/mnt/ncdata/this-is-a-test-file" +if ! [ -f "/mnt/ncdata/this-is-a-test-file" ]; then + echo "The www-data user doesn't seem to have access rights in /mnt/ncdata. +Did you maybe change the datadir and did forget to apply the correct permissions?" + exit 1 +fi +rm "/mnt/ncdata/this-is-a-test-file" + if [ -f /var/www/html/version.php ]; then # shellcheck disable=SC2016 installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')" @@ -223,6 +232,13 @@ if ! [ -f "/mnt/ncdata/skip.update" ]; then fi fi +# Check if appdata is present +# If not, something broke (e.g. changing ncdatadir after aio was first started) +if [ -z "$(find "/mnt/ncdata/" -maxdepth 1 -mindepth 1 -type d -name "appdata_*")" ]; then + echo "Appdata is not present. Did you maybe change the datadir after aio was first started?" + exit 1 +fi + # Apply one-click-instance settings echo "Applying one-click-instance settings..." php /var/www/html/occ config:system:set one-click-instance --value=true --type=bool diff --git a/php/containers.json b/php/containers.json index b9d423ef..2066a10c 100644 --- a/php/containers.json +++ b/php/containers.json @@ -96,7 +96,7 @@ "writeable": true }, { - "name": "nextcloud_aio_nextcloud_data", + "name": "%NEXTCLOUD_DATADIR%", "location": "/mnt/ncdata", "writeable": true }, @@ -215,7 +215,7 @@ "writeable": true }, { - "name": "nextcloud_aio_nextcloud_data", + "name": "%NEXTCLOUD_DATADIR%", "location": "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data", "writeable": true }, diff --git a/php/src/ContainerDefinitionFetcher.php b/php/src/ContainerDefinitionFetcher.php index ddb8d280..60e92305 100644 --- a/php/src/ContainerDefinitionFetcher.php +++ b/php/src/ContainerDefinitionFetcher.php @@ -78,6 +78,11 @@ class ContainerDefinitionFetcher if($value['name'] === '') { continue; } + } elseif ($value['name'] === '%NEXTCLOUD_DATADIR%') { + $value['name'] = $this->configurationManager->GetNextcloudDatadirMount(); + if ($value['name'] === '') { + continue; + } } if($value['location'] === '%NEXTCLOUD_MOUNT%') { $value['location'] = $this->configurationManager->GetNextcloudMount(); diff --git a/php/src/Data/ConfigurationManager.php b/php/src/Data/ConfigurationManager.php index f98cab2b..0a4bd990 100644 --- a/php/src/Data/ConfigurationManager.php +++ b/php/src/Data/ConfigurationManager.php @@ -309,4 +309,27 @@ class ConfigurationManager return $mount; } } + + public function GetNextcloudDatadirMount() : string { + $mount = getenv('NEXTCLOUD_DATADIR'); + if ($mount === false) { + $config = $this->GetConfig(); + if (!isset($config['nextcloud_datadir']) || $config['nextcloud_datadir'] === '') { + $config['nextcloud_datadir'] = 'nextcloud_aio_nextcloud_data'; + } + return $config['nextcloud_datadir']; + } else { + if(file_exists(DataConst::GetConfigFile())) { + $config = $this->GetConfig(); + if (!isset($config['nextcloud_datadir'])) { + $config['nextcloud_datadir'] = ''; + } + if ($mount !== $config['nextcloud_datadir']) { + $config['nextcloud_datadir'] = $mount; + $this->WriteConfig($config); + } + } + return $mount; + } + } }