From 3e7d1d316037bd9f2e2857c08dea65f516383568 Mon Sep 17 00:00:00 2001 From: yu-i-i Date: Fri, 6 Dec 2024 12:45:15 +0100 Subject: [PATCH] Allow selecting a TeX Live image for a project --- server-ce/config/settings.js | 8 +------- services/clsi/app/js/DockerRunner.js | 4 ++-- .../app/src/Features/Project/ProjectEditorHandler.js | 5 +---- .../app/src/Features/Project/ProjectOptionsHandler.js | 3 +-- services/web/config/settings.defaults.js | 10 ++++++++++ 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/server-ce/config/settings.js b/server-ce/config/settings.js index 06c3011484..550477a9fb 100644 --- a/server-ce/config/settings.js +++ b/server-ce/config/settings.js @@ -462,13 +462,7 @@ if (process.env.SANDBOXED_COMPILES === 'true') { dockerRunner: true, docker: { image: process.env.TEX_LIVE_DOCKER_IMAGE, - env: { - HOME: '/tmp', - PATH: - process.env.COMPILER_PATH || - '/usr/local/bin:/usr/bin:/bin', - }, - user: 'www-data', + user: process.env.TEX_LIVE_DOCKER_USER || 'www-data', } } diff --git a/services/clsi/app/js/DockerRunner.js b/services/clsi/app/js/DockerRunner.js index c1f08c26e7..45438ce35b 100644 --- a/services/clsi/app/js/DockerRunner.js +++ b/services/clsi/app/js/DockerRunner.js @@ -234,8 +234,8 @@ const DockerRunner = { } } // set the path based on the image year - const match = image.match(/:([0-9]+)\.[0-9]+/) - const year = match ? match[1] : '2014' + const match = image.match(/:([0-9]+)\.[0-9]+|:TL([0-9]+)/) + const year = match ? match[1] || match[2] : '2014' env.PATH = `/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/texlive/${year}/bin/x86_64-linux/` const options = { Cmd: command, diff --git a/services/web/app/src/Features/Project/ProjectEditorHandler.js b/services/web/app/src/Features/Project/ProjectEditorHandler.js index d9c4978e9f..14b2ff2aa8 100644 --- a/services/web/app/src/Features/Project/ProjectEditorHandler.js +++ b/services/web/app/src/Features/Project/ProjectEditorHandler.js @@ -36,10 +36,7 @@ module.exports = ProjectEditorHandler = { ), members: [], invites: this.buildInvitesView(invites), - imageName: - project.imageName != null - ? Path.basename(project.imageName) - : undefined, + imageName: project.imageName, } ;({ owner, ownerFeatures, members } = diff --git a/services/web/app/src/Features/Project/ProjectOptionsHandler.js b/services/web/app/src/Features/Project/ProjectOptionsHandler.js index 5ca89ce145..ab684ab317 100644 --- a/services/web/app/src/Features/Project/ProjectOptionsHandler.js +++ b/services/web/app/src/Features/Project/ProjectOptionsHandler.js @@ -22,7 +22,6 @@ const ProjectOptionsHandler = { if (!imageName || !Array.isArray(settings.allowedImageNames)) { return } - imageName = imageName.toLowerCase() const isAllowed = settings.allowedImageNames.find( allowed => imageName === allowed.imageName ) @@ -30,7 +29,7 @@ const ProjectOptionsHandler = { throw new Error(`invalid imageName: ${imageName}`) } const conditions = { _id: projectId } - const update = { imageName: settings.imageRoot + '/' + imageName } + const update = { imageName: imageName } return Project.updateOne(conditions, update, {}) }, diff --git a/services/web/config/settings.defaults.js b/services/web/config/settings.defaults.js index 3c23e40d77..aecbf8ffd4 100644 --- a/services/web/config/settings.defaults.js +++ b/services/web/config/settings.defaults.js @@ -1007,6 +1007,16 @@ module.exports = { managedUsers: { enabled: false, }, + + allowedImageNames: (() => { + if (process.env.SANDBOXED_COMPILES != 'true') return null + const imageNames = parseTextExtensions(process.env.ALL_TEX_LIVE_DOCKER_IMAGES); + const imageDescs = parseTextExtensions(process.env.ALL_TEX_LIVE_DOCKER_IMAGE_NAMES); + return imageNames.map((imageName, index) => ({ + imageName, + imageDesc: imageDescs[index] || imageName.split(':')[1], + })) + })() } module.exports.mergeWith = function (overrides) {