From c8ee596676ac0f52573a572a50ac91e949c33e37 Mon Sep 17 00:00:00 2001 From: 3029257 <3029257@stud.th-mannheim.de> Date: Mon, 12 Oct 2026 10:21:49 +0200 Subject: [PATCH] add dev container --- .decvontainer/Dockerfile | 13 +++++++ .decvontainer/devcontainer-lock.json | 19 +++++++++ .decvontainer/devcontainer.json | 29 ++++++++++++++ .decvontainer/scripts/install-subversion.sh | 43 +++++++++++++++++++++ 4 files changed, 104 insertions(+) create mode 100644 .decvontainer/Dockerfile create mode 100644 .decvontainer/devcontainer-lock.json create mode 100644 .decvontainer/devcontainer.json create mode 100644 .decvontainer/scripts/install-subversion.sh diff --git a/.decvontainer/Dockerfile b/.decvontainer/Dockerfile new file mode 100644 index 0000000..7709fd9 --- /dev/null +++ b/.decvontainer/Dockerfile @@ -0,0 +1,13 @@ +# [Choice] Debian OS version: trixie, bookworm +ARG VARIANT="trixie" +FROM rust:1-${VARIANT} + +# Fixing vulnerability issue by upgrading svn to 1.14.5. Ref https://subversion.apache.org/security/CVE-2024-46901-advisory.txt +COPY ./scripts/install-subversion.sh /tmp/install-subversion.sh +RUN chmod +x /tmp/install-subversion.sh +RUN /tmp/install-subversion.sh \ + && rm -f /tmp/install-subversion.sh + +# [Optional] Uncomment this section to install additional OS packages. +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends diff --git a/.decvontainer/devcontainer-lock.json b/.decvontainer/devcontainer-lock.json new file mode 100644 index 0000000..7b43312 --- /dev/null +++ b/.decvontainer/devcontainer-lock.json @@ -0,0 +1,19 @@ +{ + "features": { + "ghcr.io/devcontainers/features/common-utils:2": { + "version": "2.7.1", + "resolved": "ghcr.io/devcontainers/features/common-utils@sha256:e76a6a8a35d1ad824daad1540725e0ec9f8ed2dc00d2850e990a9830013c7d08", + "integrity": "sha256:e76a6a8a35d1ad824daad1540725e0ec9f8ed2dc00d2850e990a9830013c7d08" + }, + "ghcr.io/devcontainers/features/git:1": { + "version": "1.3.8", + "resolved": "ghcr.io/devcontainers/features/git@sha256:fd75977de13a9979000e0e78baf949adb0ca71d2398995fa22e0a36d7e7e7fe2", + "integrity": "sha256:fd75977de13a9979000e0e78baf949adb0ca71d2398995fa22e0a36d7e7e7fe2" + }, + "ghcr.io/devcontainers/features/rust:1": { + "version": "1.6.0", + "resolved": "ghcr.io/devcontainers/features/rust@sha256:846c949f52c9dea98d4f90a11957cbf152fb3f6e8a70ddd7cb83014a7d1d0c98", + "integrity": "sha256:846c949f52c9dea98d4f90a11957cbf152fb3f6e8a70ddd7cb83014a7d1d0c98" + } + } +} diff --git a/.decvontainer/devcontainer.json b/.decvontainer/devcontainer.json new file mode 100644 index 0000000..5e47092 --- /dev/null +++ b/.decvontainer/devcontainer.json @@ -0,0 +1,29 @@ +{ + "build": { + "dockerfile": "./Dockerfile", + "context": "." + }, + "features": { + "ghcr.io/devcontainers/features/common-utils:2": { + "installZsh": "true", + "username": "vscode", + "userUid": "1000", + "userGid": "1000", + "upgradePackages": "true" + }, + "ghcr.io/devcontainers/features/rust:1": "latest", + "ghcr.io/devcontainers/features/git:1": { + "version": "latest", + "ppa": "false" + } + }, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "rustc --version", + + // Set `remoteUser` to `root` to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "vscode" +} diff --git a/.decvontainer/scripts/install-subversion.sh b/.decvontainer/scripts/install-subversion.sh new file mode 100644 index 0000000..ab377c7 --- /dev/null +++ b/.decvontainer/scripts/install-subversion.sh @@ -0,0 +1,43 @@ +#!/bin/bash +set -eux + +REQUIRED="1.14.5" + +# Determine current svn version if present +current="" +if command -v svn >/dev/null 2>&1; then + current="$(svn --version --quiet 2>/dev/null || true)" +fi + +# If current version is >= REQUIRED, skip building +if [ -n "${current}" ] && dpkg --compare-versions "${current}" ge "${REQUIRED}"; then + echo "Subversion ${current} is >= ${REQUIRED}; skipping build." + exit 0 +fi + +URL="https://archive.apache.org/dist/subversion/subversion-1.14.5.tar.gz" +TMP="/tmp" +TARBALL="subversion-1.14.5.tar.gz" +SRCDIR="subversion-1.14.5" + +if wget -q -O "${TMP}/${TARBALL}" "${URL}"; then + echo "Downloaded ${TARBALL} — building..." + apt-get remove -y subversion libsvn1 || true + cd "${TMP}" + tar -xzf "${TARBALL}" + cd "${SRCDIR}" + apt-get update -y + apt-get install -y --no-install-recommends build-essential autoconf libtool libsqlite3-dev pkg-config libapr1-dev libaprutil1-dev liblz4-dev libutf8proc-dev zlib1g-dev + ./configure --with-lz4=internal --prefix=/usr + make -j"$(nproc 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1)" + make install + cd / + rm -rf "${TMP:?}/${SRCDIR}" "${TMP:?}/${TARBALL}" + apt-get purge -y --auto-remove build-essential autoconf libtool pkg-config + rm -rf /var/lib/apt/lists/* + echo "Subversion built and installed (build deps removed)" +else + echo "Downloading svn source failed, skipping Subversion build" +fi + +