services: separate volume clear and rm

This commit is contained in:
Girish Ramakrishnan
2025-01-12 18:08:53 +01:00
parent 665f7c849b
commit e34e479c33
5 changed files with 47 additions and 16 deletions
+4 -10
View File
@@ -17,8 +17,7 @@ if [[ "$1" == "--check" ]]; then
exit 0
fi
cmd="$1"
volume_dir="$2"
volume_dir="12"
if [[ "${BOX_ENV}" == "test" ]]; then
# be careful not to nuke some random directory when testing
@@ -30,11 +29,6 @@ if [[ -d "${volume_dir}" ]]; then
find "${volume_dir}" -maxdepth 1 -mindepth 1 -exec rm -rf '{}' \;
fi
if [[ "${cmd}" == "clear" ]]; then
mkdir -p "${volume_dir}"
# set it up so that we can restore here as normal user
chown $SUDO_USER:$SUDO_USER "${volume_dir}"
else
# this make not succeed if volume is a mount point
rmdir "${volume_dir}" || true
fi
mkdir -p "${volume_dir}"
# set it up so that we can restore here as normal user
chown $SUDO_USER:$SUDO_USER "${volume_dir}"
+33
View File
@@ -0,0 +1,33 @@
#!/bin/bash
set -eu -o pipefail
if [[ ${EUID} -ne 0 ]]; then
echo "This script should be run as root." > /dev/stderr
exit 1
fi
if [[ $# -eq 0 ]]; then
echo "No arguments supplied"
exit 1
fi
if [[ "$1" == "--check" ]]; then
echo "OK"
exit 0
fi
volume_dir="$1"
if [[ "${BOX_ENV}" == "test" ]]; then
# be careful not to nuke some random directory when testing
[[ "${volume_dir}" != *"/.cloudron_test/"* ]] && exit 1
fi
if [[ -d "${volume_dir}" ]]; then
# this removes hidden files
find "${volume_dir}" -maxdepth 1 -mindepth 1 -exec rm -rf '{}' \;
fi
# this make not succeed if volume is a mount point
rmdir "${volume_dir}" || true
+5 -4
View File
@@ -74,7 +74,8 @@ const NOOP = async function (/*app, options*/) {};
const RMADDONDIR_CMD = path.join(__dirname, 'scripts/rmaddondir.sh');
const RESTART_SERVICE_CMD = path.join(__dirname, 'scripts/restartservice.sh');
const CLEARVOLUME_CMD = path.join(__dirname, 'scripts/clearvolume.sh');
const MKDIRVOLUME_CMD = path.join(__dirname, 'scripts/mkdirvolume.sh');
const RMVOLUME_CMD = path.join(__dirname, 'scripts/rmvolume.sh');
const SETUPVOLUME_CMD = path.join(__dirname, 'scripts/setupvolume.sh');
// setup can be called multiple times for the same app (configure crash restart) and existing data must not be lost
// teardown is destructive. app data stored with the addon is lost
@@ -879,7 +880,7 @@ async function setupLocalStorage(app, options) {
const volumeDataDir = await apps.getStorageDir(app);
const [error] = await safe(shell.promises.sudo([ MKDIRVOLUME_CMD, volumeDataDir ], {}));
const [error] = await safe(shell.promises.sudo([ SETUPVOLUME_CMD, volumeDataDir ], {}));
if (error) throw new BoxError(BoxError.FS_ERROR, `Error creating app storage data dir: ${error.message}`);
}
@@ -890,7 +891,7 @@ async function clearLocalStorage(app, options) {
debug('clearLocalStorage');
const volumeDataDir = await apps.getStorageDir(app);
const [error] = await safe(shell.promises.sudo([ CLEARVOLUME_CMD, 'clear', volumeDataDir ], {}));
const [error] = await safe(shell.promises.sudo([ CLEARVOLUME_CMD, volumeDataDir ], {}));
if (error) throw new BoxError(BoxError.FS_ERROR, error);
}
@@ -901,7 +902,7 @@ async function teardownLocalStorage(app, options) {
debug('teardownLocalStorage');
const volumeDataDir = await apps.getStorageDir(app);
const [error] = await safe(shell.promises.sudo([ CLEARVOLUME_CMD, 'rmdir', volumeDataDir ], {}));
const [error] = await safe(shell.promises.sudo([ RMVOLUME_CMD, volumeDataDir ], {}));
if (error) throw new BoxError(BoxError.FS_ERROR, error);
// sqlite files are automatically cleared