From 21d70a7302c0d03ae8cc538a97d4b279c4da5792 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 3 May 2022 08:18:48 +0200 Subject: [PATCH] Support readonly tmp directory --- server/initializers/installer.ts | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/server/initializers/installer.ts b/server/initializers/installer.ts index 0517e0084..c18998244 100644 --- a/server/initializers/installer.ts +++ b/server/initializers/installer.ts @@ -1,4 +1,4 @@ -import { ensureDir, remove } from 'fs-extra' +import { ensureDir, readdir, remove } from 'fs-extra' import passwordGenerator from 'password-generator' import { UserRole } from '@shared/models' import { logger } from '../helpers/logger' @@ -50,14 +50,28 @@ function removeCacheAndTmpDirectories () { // Cache directories for (const key of Object.keys(cacheDirectories)) { const dir = cacheDirectories[key] - tasks.push(remove(dir)) + tasks.push(removeDirectoryOrContent(dir)) } - tasks.push(remove(CONFIG.STORAGE.TMP_DIR)) + tasks.push(removeDirectoryOrContent(CONFIG.STORAGE.TMP_DIR)) return Promise.all(tasks) } +async function removeDirectoryOrContent (dir: string) { + try { + await remove(dir) + } catch (err) { + logger.debug('Cannot remove directory %s. Removing content instead.', dir, { err }) + + const files = await readdir(dir) + + for (const file of files) { + await remove(file) + } + } +} + function createDirectoriesIfNotExist () { const storage = CONFIG.STORAGE const cacheDirectories = Object.keys(FILES_CACHE)