From bf4f9e73980965cbd17c4a2b284576b5657ef217 Mon Sep 17 00:00:00 2001 From: Erald Totraku Date: Sat, 23 Dec 2023 11:29:01 +0100 Subject: [PATCH 1/6] code-server: rust initial release --- .github/workflows/BuildImage.yml | 6 +-- Dockerfile | 25 ++++++++-- Dockerfile.complex | 25 ---------- README.md | 31 +++++------- .../dependencies.d/init-mods | 0 .../init-mod-code-server-rust-install/run | 49 +++++++++++++++++++ .../init-mod-code-server-rust-install/type | 1 + .../init-mod-code-server-rust-install/up | 1 + .../run | 30 ------------ .../type | 1 - .../init-mod-imagename-modname-add-package/up | 1 - .../init-mod-imagename-modname-install/run | 8 --- .../init-mod-imagename-modname-install/type | 1 - .../init-mod-imagename-modname-install/up | 1 - .../init-mod-code-server-rust-install} | 0 .../init-mod-imagename-modname-add-package | 0 .../dependencies.d/init-services | 0 .../s6-rc.d/svc-mod-imagename-modname/run | 7 --- .../s6-rc.d/svc-mod-imagename-modname/type | 1 - .../init-mod-code-server-rust-install} | 0 .../init-mod-imagename-modname-add-package | 0 .../init-mod-imagename-modname-install | 0 .../user/contents.d/svc-mod-imagename-modname | 0 23 files changed, 87 insertions(+), 101 deletions(-) delete mode 100644 Dockerfile.complex rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-add-package => init-mod-code-server-rust-install}/dependencies.d/init-mods (100%) create mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/type create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/up delete mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up delete mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-install/dependencies.d/init-mods-package-install => init-mods-package-install/dependencies.d/init-mod-code-server-rust-install} (100%) delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package delete mode 100644 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services delete mode 100755 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run delete mode 100644 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type rename root/etc/s6-overlay/s6-rc.d/{init-mods-end/dependencies.d/init-mod-imagename-modname-install => user/contents.d/init-mod-code-server-rust-install} (100%) delete mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package delete mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install delete mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index 39a64e9..9148ee6 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -5,8 +5,8 @@ on: [push, pull_request_target, workflow_dispatch] env: GITHUB_REPO: "linuxserver/docker-mods" #don't modify ENDPOINT: "linuxserver/mods" #don't modify - BASEIMAGE: "replace_baseimage" #replace - MODNAME: "replace_modname" #replace + BASEIMAGE: "code-server" + MODNAME: "rust" jobs: set-vars: @@ -20,7 +20,7 @@ jobs: echo "BASEIMAGE=${{ env.BASEIMAGE }}" >> $GITHUB_OUTPUT echo "MODNAME=${{ env.MODNAME }}" >> $GITHUB_OUTPUT # **** If the mod needs to be versioned, set the versioning logic below. Otherwise leave as is. **** - MOD_VERSION="" + MOD_VERSION=$(curl -s https://api.github.com/repos/rust-lang/rust/releases/latest | jq -r .tag_name) echo "MOD_VERSION=${MOD_VERSION}" >> $GITHUB_OUTPUT outputs: GITHUB_REPO: ${{ steps.outputs.outputs.GITHUB_REPO }} diff --git a/Dockerfile b/Dockerfile index aa66170..99a8f0b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,27 @@ # syntax=docker/dockerfile:1 +FROM ghcr.io/linuxserver/baseimage-alpine:3.19 as buildstage + +ARG MOD_VERSION + +RUN apk add --no-cache curl jq && \ + if [ -z "$MOD_VERSION" ]; then \ + MOD_VERSION=$(curl -s https://api.github.com/repos/rust-lang/rust/releases/latest | jq -r .tag_name); \ + fi && \ + mkdir -p /root-layer/rust-bins && \ + SUPPORTED_PLATFORMS="x86_64-unknown-linux-musl x86_64-unknown-linux-gnu aarch64-unknown-linux-musl aarch64-unknown-linux-gnu" && \ + for PLATFORM in $SUPPORTED_PLATFORMS; do \ + ARCH=${PLATFORM%%-*}; \ + MUSL_OR_GNU=${PLATFORM##*-}; \ + RUST_BINS=/root-layer/rust-bins/rust-${ARCH}-${MUSL_OR_GNU}.tar.gz; \ + RUST_BINS_URL=https://static.rust-lang.org/dist/rust-${MOD_VERSION}-${PLATFORM}.tar.gz; \ + echo "Downloading rust for $PLATFORM"; \ + curl -o $RUST_BINS -sSf $RUST_BINS_URL; \ + done; + +COPY root/ /root-layer/ FROM scratch -LABEL maintainer="username" +LABEL maintainer="totraku" -# copy local files -COPY root/ / +COPY --from=buildstage /root-layer/ / diff --git a/Dockerfile.complex b/Dockerfile.complex deleted file mode 100644 index c0b5cf7..0000000 --- a/Dockerfile.complex +++ /dev/null @@ -1,25 +0,0 @@ -# syntax=docker/dockerfile:1 - -## Buildstage ## -FROM ghcr.io/linuxserver/baseimage-alpine:3.17 as buildstage - -RUN \ - echo "**** install packages ****" && \ - apk add --no-cache \ - curl && \ - echo "**** grab rclone ****" && \ - mkdir -p /root-layer && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-amd64.deb" - -# copy local files -COPY root/ /root-layer/ - -## Single layer deployed image ## -FROM scratch - -LABEL maintainer="username" - -# Add files from buildstage -COPY --from=buildstage /root-layer/ / diff --git a/README.md b/README.md index c8bfc60..f852957 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,16 @@ -# Rsync - Docker mod for openssh-server +# Rust - Docker mod for code-server and openvscode-server +This mod adds Rust to code-server and openvscode-server. -This mod adds rsync to openssh-server, to be installed/updated during container start. +In code-server or openvscode-server docker arguments, set an environment variable DOCKER_MODS=linuxserver/mods:code-server-rust -In openssh-server docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:openssh-server-rsync` +If adding multiple mods, enter them in an array separated by |, such as DOCKER_MODS=linuxserver/mods:code-server-rust|linuxserver/mods:code-server-mod2 -If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:openssh-server-rsync|linuxserver/mods:openssh-server-mod2` +By default, the mod will install the latest stable version of Rust. If you'd like to install a different version, you can specify the version as a tag, from a list of published tags: https://hub.docker.com/r/linuxserver/mods/tags?page=1&name=code-server-rust -# Mod creation instructions +Supported architectures: +- [x] linux/amd64 +- [x] linux/aarch64 -* Fork the repo, create a new branch based on the branch `template`. -* Edit the `Dockerfile` for the mod. `Dockerfile.complex` is only an example and included for reference; it should be deleted when done. -* Inspect the `root` folder contents. Edit, add and remove as necessary. -* After all init scripts and services are created, run `find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print -exec chmod +x {} +` to fix permissions. -* Edit this readme with pertinent info, delete these instructions. -* Finally edit the `.github/workflows/BuildImage.yml`. Customize the vars for `BASEIMAGE` and `MODNAME`. Set the versioning logic if needed. -* Ask the team to create a new branch named `-`. Baseimage should be the name of the image the mod will be applied to. The new branch will be based on the `template` branch. -* Submit PR against the branch created by the team. - - -## Tips and tricks - -* Some images have helpers built in, these images are currently: - * [Openvscode-server](https://github.com/linuxserver/docker-openvscode-server/pull/10/files) - * [Code-server](https://github.com/linuxserver/docker-code-server/pull/95) +Supported docker base images: +- [x] ubuntu:jammy (tested) +- [x] alpine (untested) \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/dependencies.d/init-mods b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/dependencies.d/init-mods similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/dependencies.d/init-mods rename to root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/dependencies.d/init-mods diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run new file mode 100755 index 0000000..de83f06 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run @@ -0,0 +1,49 @@ +#!/usr/bin/with-contenv bash + +set -e + +RUST_BINS_PATH="/rust-bins" +ALPINE_RELEASE_PATH="/etc/alpine-release" +PACKAGES_TO_INSTALL_LIST="/mod-repo-packages-to-install.list" + +ARCH=$(uname -m) +SUPPORTED_ARCHS=("x86_64" "aarch64") + +if [[ ! " ${SUPPORTED_ARCHS[@]} " =~ " ${ARCH} " ]]; then + echo "+++ unsupported architecture: $ARCH +++" + exit 1 +fi + +MUSL_OR_GNU=$(ldd /bin/sh | grep -q musl && echo "musl" || echo "gnu") +RUST_BINARY_ARCHIVE_PATH="$RUST_BINS_PATH/rust-$ARCH-$MUSL_OR_GNU.tar.gz" + +grep_os_release() { + grep -q "$1" /etc/os-release && echo true || echo false +} + +if [[ -f "$RUST_BINARY_ARCHIVE_PATH" ]]; then + echo "+++ unpacking rust tar +++" + tar -xzf "$RUST_BINARY_ARCHIVE_PATH" -C "$RUST_BINS_PATH" --strip-components=1 + + if [[ -f "$ALPINE_RELEASE_PATH" ]]; then + # in alpine ldconfig requires the configuration directory + sed -i 's/ldconfig/ldconfig \/etc\/ld.so.conf.d/g' "$RUST_BINS_PATH/install.sh" + fi + + + echo "+++ installing rust +++" + "$RUST_BINS_PATH/install.sh" + rm -rf "$RUST_BINS_PATH" + + echo "+++ adding build tools +++" + if grep_os_release "debian"; then + echo "build-essential" >>"$PACKAGES_TO_INSTALL_LIST" + elif grep_os_release "alpine"; then + echo "build-base" >>"$PACKAGES_TO_INSTALL_LIST" + else + echo "gcc" >>"$PACKAGES_TO_INSTALL_LIST" + fi + +else + echo "+++ rust tar not found +++" +fi diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/type b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/type new file mode 100644 index 0000000..bdd22a1 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/type @@ -0,0 +1 @@ +oneshot diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/up b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/up new file mode 100644 index 0000000..550ed3a --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/up @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run deleted file mode 100755 index 063b570..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is the init file used for adding os or pip packages to install lists. -# It takes advantage of the built-in init-mods-package-install init script that comes with the baseimages. -# If using this, we need to make sure we set this init as a dependency of init-mods-package-install so this one runs first - -if ! command -v apprise; then - echo "**** Adding apprise and its deps to package install lists ****" - echo "apprise" >> /mod-pip-packages-to-install.list - ## Ubuntu - if [ -f /usr/bin/apt ]; then - echo "\ - python3 \ - python3-pip \ - runc" >> /mod-repo-packages-to-install.list - fi - # Alpine - if [ -f /sbin/apk ]; then - echo "\ - cargo \ - libffi-dev \ - openssl-dev \ - python3 \ - python3-dev \ - python3 \ - py3-pip" >> /mod-repo-packages-to-install.list - fi -else - echo "**** apprise already installed, skipping ****" -fi diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type deleted file mode 100644 index 3d92b15..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type +++ /dev/null @@ -1 +0,0 @@ -oneshot \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up deleted file mode 100644 index 6414139..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up +++ /dev/null @@ -1 +0,0 @@ -/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run deleted file mode 100755 index 59a4b77..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is an install script that is designed to run after init-mods-package-install -# so it can take advantage of packages installed -# init-mods-end depends on this script so that later init and services wait until this script exits - -echo "**** Setting up apprise ****" -apprise blah blah diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type deleted file mode 100644 index 3d92b15..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type +++ /dev/null @@ -1 +0,0 @@ -oneshot \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up deleted file mode 100644 index 03d298d..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up +++ /dev/null @@ -1 +0,0 @@ -/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/dependencies.d/init-mods-package-install b/root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-code-server-rust-install similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/dependencies.d/init-mods-package-install rename to root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-code-server-rust-install diff --git a/root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package b/root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run deleted file mode 100755 index 02ffe39..0000000 --- a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is an example service that would run for the mod -# It depends on init-services, the baseimage hook for start of all longrun services - -exec \ - s6-setuidgid abc run my app diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type deleted file mode 100644 index 1780f9f..0000000 --- a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type +++ /dev/null @@ -1 +0,0 @@ -longrun \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-imagename-modname-install b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-code-server-rust-install similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-imagename-modname-install rename to root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-code-server-rust-install diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname b/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname deleted file mode 100644 index e69de29..0000000 From c9a528af64ff9c6d2ebe51cce443ddb63809c345 Mon Sep 17 00:00:00 2001 From: Erald Totraku Date: Thu, 4 Jan 2024 13:56:24 +0100 Subject: [PATCH 2/6] Remove musl --- Dockerfile | 5 ++--- README.md | 3 +-- .../s6-rc.d/init-mod-code-server-rust-install/run | 14 ++------------ 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index 99a8f0b..9295644 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,11 +8,10 @@ RUN apk add --no-cache curl jq && \ MOD_VERSION=$(curl -s https://api.github.com/repos/rust-lang/rust/releases/latest | jq -r .tag_name); \ fi && \ mkdir -p /root-layer/rust-bins && \ - SUPPORTED_PLATFORMS="x86_64-unknown-linux-musl x86_64-unknown-linux-gnu aarch64-unknown-linux-musl aarch64-unknown-linux-gnu" && \ + SUPPORTED_PLATFORMS="x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu" && \ for PLATFORM in $SUPPORTED_PLATFORMS; do \ ARCH=${PLATFORM%%-*}; \ - MUSL_OR_GNU=${PLATFORM##*-}; \ - RUST_BINS=/root-layer/rust-bins/rust-${ARCH}-${MUSL_OR_GNU}.tar.gz; \ + RUST_BINS=/root-layer/rust-bins/rust-${ARCH}-gnu.tar.gz; \ RUST_BINS_URL=https://static.rust-lang.org/dist/rust-${MOD_VERSION}-${PLATFORM}.tar.gz; \ echo "Downloading rust for $PLATFORM"; \ curl -o $RUST_BINS -sSf $RUST_BINS_URL; \ diff --git a/README.md b/README.md index f852957..382d22a 100644 --- a/README.md +++ b/README.md @@ -12,5 +12,4 @@ Supported architectures: - [x] linux/aarch64 Supported docker base images: -- [x] ubuntu:jammy (tested) -- [x] alpine (untested) \ No newline at end of file +- [x] ubuntu:jammy diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run index de83f06..dfe7e61 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run @@ -3,7 +3,6 @@ set -e RUST_BINS_PATH="/rust-bins" -ALPINE_RELEASE_PATH="/etc/alpine-release" PACKAGES_TO_INSTALL_LIST="/mod-repo-packages-to-install.list" ARCH=$(uname -m) @@ -14,23 +13,16 @@ if [[ ! " ${SUPPORTED_ARCHS[@]} " =~ " ${ARCH} " ]]; then exit 1 fi -MUSL_OR_GNU=$(ldd /bin/sh | grep -q musl && echo "musl" || echo "gnu") -RUST_BINARY_ARCHIVE_PATH="$RUST_BINS_PATH/rust-$ARCH-$MUSL_OR_GNU.tar.gz" +RUST_BINARY_ARCHIVE_PATH="$RUST_BINS_PATH/rust-$ARCH-gnu.tar.gz" grep_os_release() { - grep -q "$1" /etc/os-release && echo true || echo false + grep -q "$1" /etc/os-release && true || false } if [[ -f "$RUST_BINARY_ARCHIVE_PATH" ]]; then echo "+++ unpacking rust tar +++" tar -xzf "$RUST_BINARY_ARCHIVE_PATH" -C "$RUST_BINS_PATH" --strip-components=1 - if [[ -f "$ALPINE_RELEASE_PATH" ]]; then - # in alpine ldconfig requires the configuration directory - sed -i 's/ldconfig/ldconfig \/etc\/ld.so.conf.d/g' "$RUST_BINS_PATH/install.sh" - fi - - echo "+++ installing rust +++" "$RUST_BINS_PATH/install.sh" rm -rf "$RUST_BINS_PATH" @@ -38,8 +30,6 @@ if [[ -f "$RUST_BINARY_ARCHIVE_PATH" ]]; then echo "+++ adding build tools +++" if grep_os_release "debian"; then echo "build-essential" >>"$PACKAGES_TO_INSTALL_LIST" - elif grep_os_release "alpine"; then - echo "build-base" >>"$PACKAGES_TO_INSTALL_LIST" else echo "gcc" >>"$PACKAGES_TO_INSTALL_LIST" fi From 17a69de8dac0032eacf7a1c5d84d93f510f92019 Mon Sep 17 00:00:00 2001 From: Erald Totraku Date: Fri, 5 Jan 2024 18:52:37 +0100 Subject: [PATCH 3/6] remove jq curl install since present in base image check if rustc is already installed --- Dockerfile | 3 +-- .../s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run | 5 +++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9295644..2bd2074 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,8 +3,7 @@ FROM ghcr.io/linuxserver/baseimage-alpine:3.19 as buildstage ARG MOD_VERSION -RUN apk add --no-cache curl jq && \ - if [ -z "$MOD_VERSION" ]; then \ +RUN if [ -z "$MOD_VERSION" ]; then \ MOD_VERSION=$(curl -s https://api.github.com/repos/rust-lang/rust/releases/latest | jq -r .tag_name); \ fi && \ mkdir -p /root-layer/rust-bins && \ diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run index dfe7e61..c887119 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run @@ -2,6 +2,11 @@ set -e +if command -v rustc >/dev/null 2>&1; then + echo "+++ rust is already installed +++" + exit 0 +fi + RUST_BINS_PATH="/rust-bins" PACKAGES_TO_INSTALL_LIST="/mod-repo-packages-to-install.list" From c780149083b0591461d58498b0c72d52561c8969 Mon Sep 17 00:00:00 2001 From: Erald Totraku Date: Fri, 5 Jan 2024 19:15:06 +0100 Subject: [PATCH 4/6] Replace +++ message part with **** Change rust message if already installed --- .../init-mod-code-server-rust-install/run | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run index c887119..17e9353 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run @@ -2,11 +2,6 @@ set -e -if command -v rustc >/dev/null 2>&1; then - echo "+++ rust is already installed +++" - exit 0 -fi - RUST_BINS_PATH="/rust-bins" PACKAGES_TO_INSTALL_LIST="/mod-repo-packages-to-install.list" @@ -14,7 +9,7 @@ ARCH=$(uname -m) SUPPORTED_ARCHS=("x86_64" "aarch64") if [[ ! " ${SUPPORTED_ARCHS[@]} " =~ " ${ARCH} " ]]; then - echo "+++ unsupported architecture: $ARCH +++" + echo "**** unsupported architecture: $ARCH ****" exit 1 fi @@ -25,20 +20,19 @@ grep_os_release() { } if [[ -f "$RUST_BINARY_ARCHIVE_PATH" ]]; then - echo "+++ unpacking rust tar +++" + echo "**** unpacking rust tar ****" tar -xzf "$RUST_BINARY_ARCHIVE_PATH" -C "$RUST_BINS_PATH" --strip-components=1 - echo "+++ installing rust +++" + echo "**** installing rust ****" "$RUST_BINS_PATH/install.sh" rm -rf "$RUST_BINS_PATH" - echo "+++ adding build tools +++" + echo "**** adding build tools ****" if grep_os_release "debian"; then echo "build-essential" >>"$PACKAGES_TO_INSTALL_LIST" else echo "gcc" >>"$PACKAGES_TO_INSTALL_LIST" fi - else - echo "+++ rust tar not found +++" + echo "**** rust already installed ****" fi From a993afa0c9e7e3a56d5f4b3dbb6c256fa0cca2ea Mon Sep 17 00:00:00 2001 From: Erald Totraku Date: Fri, 5 Jan 2024 20:19:52 +0100 Subject: [PATCH 5/6] Extract package check out of the rust bin condition --- .../init-mod-code-server-rust-install/run | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run index 17e9353..fef2d97 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run @@ -13,11 +13,14 @@ if [[ ! " ${SUPPORTED_ARCHS[@]} " =~ " ${ARCH} " ]]; then exit 1 fi -RUST_BINARY_ARCHIVE_PATH="$RUST_BINS_PATH/rust-$ARCH-gnu.tar.gz" +if ! dpkg -l | grep build-essential >/dev/null; then + echo "**** adding build-essential to install list ****" + echo "build-essential" >>"$PACKAGES_TO_INSTALL_LIST" +else + echo "**** build-essential already installed ****" +fi -grep_os_release() { - grep -q "$1" /etc/os-release && true || false -} +RUST_BINARY_ARCHIVE_PATH="$RUST_BINS_PATH/rust-$ARCH-gnu.tar.gz" if [[ -f "$RUST_BINARY_ARCHIVE_PATH" ]]; then echo "**** unpacking rust tar ****" @@ -26,13 +29,6 @@ if [[ -f "$RUST_BINARY_ARCHIVE_PATH" ]]; then echo "**** installing rust ****" "$RUST_BINS_PATH/install.sh" rm -rf "$RUST_BINS_PATH" - - echo "**** adding build tools ****" - if grep_os_release "debian"; then - echo "build-essential" >>"$PACKAGES_TO_INSTALL_LIST" - else - echo "gcc" >>"$PACKAGES_TO_INSTALL_LIST" - fi else - echo "**** rust already installed ****" + echo "**** rust bin does not exist ****" fi From baf40da9dfe48b90a5e2566f2a158cfccce5228e Mon Sep 17 00:00:00 2001 From: Erald Totraku Date: Sat, 6 Jan 2024 09:43:02 +0100 Subject: [PATCH 6/6] Fix message when no bin path exists --- .../s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run index fef2d97..969f10d 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-rust-install/run @@ -30,5 +30,5 @@ if [[ -f "$RUST_BINARY_ARCHIVE_PATH" ]]; then "$RUST_BINS_PATH/install.sh" rm -rf "$RUST_BINS_PATH" else - echo "**** rust bin does not exist ****" + echo "**** latest rust is already installed ****" fi