From c972645d614c832be68c14ecb73abea9861d980e Mon Sep 17 00:00:00 2001 From: Ryogo Ragnarson Date: Tue, 2 Apr 2024 14:34:33 +0200 Subject: [PATCH] added the Dockerfile for the custom image of code-server --- code-server/Dockerfile | 53 +++++++++++++++++++ code-server/code-server.yml | 4 +- .../dependencies.d/init-config | 0 .../s6-overlay/s6-rc.d/init-code-server/run | 31 +++++++++++ .../s6-overlay/s6-rc.d/init-code-server/type | 1 + .../s6-overlay/s6-rc.d/init-code-server/up | 1 + .../dependencies.d/init-code-server | 0 .../dependencies.d/init-services | 0 .../s6-rc.d/svc-code-server/notification-fd | 1 + .../s6-overlay/s6-rc.d/svc-code-server/run | 26 +++++++++ .../s6-overlay/s6-rc.d/svc-code-server/type | 1 + .../s6-rc.d/user/contents.d/init-code-server | 0 .../s6-rc.d/user/contents.d/svc-code-server | 0 .../root/usr/local/bin/install-extension | 10 ++++ 14 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 code-server/Dockerfile create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/dependencies.d/init-config create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/run create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/type create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/up create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/init-config-end/dependencies.d/init-code-server create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/dependencies.d/init-services create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/notification-fd create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/run create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/type create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-code-server create mode 100644 code-server/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-code-server create mode 100644 code-server/root/usr/local/bin/install-extension diff --git a/code-server/Dockerfile b/code-server/Dockerfile new file mode 100644 index 0000000..7b03e84 --- /dev/null +++ b/code-server/Dockerfile @@ -0,0 +1,53 @@ +FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy + +# set version label +ARG BUILD_DATE +ARG VERSION +ARG CODE_RELEASE +LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" +LABEL maintainer="aptalca" + +# environment settings +ARG DEBIAN_FRONTEND="noninteractive" +ENV HOME="/config" + +RUN \ + echo "**** install runtime dependencies ****" && \ + apt-get update && \ + apt-get install -y \ + git \ + jq \ + libatomic1 \ + nano \ + net-tools \ + python3\ + python3-pip\ + netcat \ + sudo && \ + echo "**** install code-server ****" && \ + if [ -z ${CODE_RELEASE+x} ]; then \ + CODE_RELEASE=$(curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest \ + | awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||'); \ + fi && \ + mkdir -p /app/code-server && \ + curl -o \ + /tmp/code-server.tar.gz -L \ + "https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-amd64.tar.gz" && \ + tar xf /tmp/code-server.tar.gz -C \ + /app/code-server --strip-components=1 && \ + echo "**** install flask ****" &&\ + pip3 install flask &&\ + echo "**** clean up ****" && \ + apt-get clean && \ + rm -rf \ + /config/* \ + /tmp/* \ + /var/lib/apt/lists/* \ + /var/tmp/* + +# add local files +COPY /root / +RUN chmod +x /etc/s6-overlay/s6-rc.d/init-code-server/run + +# ports and volumes +EXPOSE 8443 diff --git a/code-server/code-server.yml b/code-server/code-server.yml index 50d57a6..7547933 100644 --- a/code-server/code-server.yml +++ b/code-server/code-server.yml @@ -1,7 +1,7 @@ version: "3.7" services: code-server: - image: lscr.io/linuxserver/code-server:latest + image: code:latest container_name: code-server environment: - PUID=1000 @@ -17,4 +17,4 @@ services: - /datato/code/config:/config ports: - 8443:8443 - restart: unless-stopped \ No newline at end of file + restart: unless-stopped diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/dependencies.d/init-config b/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/dependencies.d/init-config new file mode 100644 index 0000000..e69de29 diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/run new file mode 100644 index 0000000..d93a4d2 --- /dev/null +++ b/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -0,0 +1,31 @@ +#!/usr/bin/with-contenv bash + +mkdir -p /config/{extensions,data,workspace,.ssh} + +if [ -n "${SUDO_PASSWORD}" ] || [ -n "${SUDO_PASSWORD_HASH}" ]; then + echo "setting up sudo access" + if ! grep -q 'abc' /etc/sudoers; then + echo "adding abc to sudoers" + echo "abc ALL=(ALL:ALL) ALL" >> /etc/sudoers + fi + if [ -n "${SUDO_PASSWORD_HASH}" ]; then + echo "setting sudo password using sudo password hash" + sed -i "s|^abc:\!:|abc:${SUDO_PASSWORD_HASH}:|" /etc/shadow + else + echo "setting sudo password using SUDO_PASSWORD env var" + echo -e "${SUDO_PASSWORD}\n${SUDO_PASSWORD}" | passwd abc + fi +fi + +[[ ! -f /config/.bashrc ]] && \ + cp /root/.bashrc /config/.bashrc +[[ ! -f /config/.profile ]] && \ + cp /root/.profile /config/.profile + +# fix permissions (ignore contents of /config/workspace) +find /config -path /config/workspace -prune -o -exec chown abc:abc {} + +chown abc:abc /config/workspace +chmod 700 /config/.ssh +if [ -n "$(ls -A /config/.ssh)" ]; then + chmod 600 /config/.ssh/* +fi diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/type b/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/type new file mode 100644 index 0000000..3d92b15 --- /dev/null +++ b/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/type @@ -0,0 +1 @@ +oneshot \ No newline at end of file diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/up b/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/up new file mode 100644 index 0000000..4efdc97 --- /dev/null +++ b/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/up @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/init-code-server/run \ No newline at end of file diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/init-config-end/dependencies.d/init-code-server b/code-server/root/etc/s6-overlay/s6-rc.d/init-config-end/dependencies.d/init-code-server new file mode 100644 index 0000000..e69de29 diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/dependencies.d/init-services b/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/dependencies.d/init-services new file mode 100644 index 0000000..e69de29 diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/notification-fd b/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/notification-fd new file mode 100644 index 0000000..e440e5c --- /dev/null +++ b/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/notification-fd @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/run b/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/run new file mode 100644 index 0000000..373dc0a --- /dev/null +++ b/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/run @@ -0,0 +1,26 @@ +#!/usr/bin/with-contenv bash + +if [ -n "${PASSWORD}" ] || [ -n "${HASHED_PASSWORD}" ]; then + AUTH="password" +else + AUTH="none" + echo "starting with no password" +fi + +if [ -z ${PROXY_DOMAIN+x} ]; then + PROXY_DOMAIN_ARG="" +else + PROXY_DOMAIN_ARG="--proxy-domain=${PROXY_DOMAIN}" +fi + +exec \ + s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z 127.0.0.1 8443" \ + s6-setuidgid abc \ + /app/code-server/bin/code-server \ + --bind-addr 0.0.0.0:8443 \ + --user-data-dir /config/data \ + --extensions-dir /config/extensions \ + --disable-telemetry \ + --auth "${AUTH}" \ + "${PROXY_DOMAIN_ARG}" \ + "${DEFAULT_WORKSPACE:-/config/workspace}" diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/type b/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/type new file mode 100644 index 0000000..1780f9f --- /dev/null +++ b/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-code-server b/code-server/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-code-server new file mode 100644 index 0000000..e69de29 diff --git a/code-server/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-code-server b/code-server/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-code-server new file mode 100644 index 0000000..e69de29 diff --git a/code-server/root/usr/local/bin/install-extension b/code-server/root/usr/local/bin/install-extension new file mode 100644 index 0000000..79c922a --- /dev/null +++ b/code-server/root/usr/local/bin/install-extension @@ -0,0 +1,10 @@ +#!/usr/bin/with-contenv bash +# shellcheck shell=bash + +_install=(/app/code-server/bin/code-server "--extensions-dir" "/config/extensions" "--install-extension") + +if [ "$(whoami)" == "abc" ]; then + "${_install[@]}" "$@" +else + s6-setuidgid abc "${_install[@]}" "$@" +fi