From 148e54bc1386c60356faaaf533e12bc61d5d9eb6 Mon Sep 17 00:00:00 2001 From: Christoph Friedrich Date: Wed, 13 Mar 2024 09:01:20 +0100 Subject: [PATCH] code-server: php-cli initial release code-server: php-cli Adding php-cli and composer to code-server container --- .github/workflows/BuildImage.yml | 10 +-- Dockerfile | 2 +- Dockerfile.complex | 33 -------- README.md | 47 +++++++----- .../dependencies.d/init-mods | 0 .../run | 76 +++++++++++++++++++ .../type | 0 .../up | 1 + .../dependencies.d/init-mods-package-install | 0 .../init-mod-code-server-php-cli-install/run | 41 ++++++++++ .../type | 0 .../init-mod-code-server-php-cli-install/up | 1 + .../run | 30 -------- .../init-mod-imagename-modname-add-package/up | 1 - .../init-mod-imagename-modname-install/run | 8 -- .../init-mod-imagename-modname-install/up | 1 - ...l => init-mod-code-server-php-cli-install} | 0 ... init-mod-code-server-php-cli-add-package} | 0 .../s6-rc.d/svc-mod-imagename-modname/run | 7 -- .../s6-rc.d/svc-mod-imagename-modname/type | 1 - .../init-mod-code-server-php-cli-add-package} | 0 ...e => init-mod-code-server-php-cli-install} | 0 .../init-mod-imagename-modname-install | 0 .../user/contents.d/svc-mod-imagename-modname | 0 24 files changed, 155 insertions(+), 104 deletions(-) delete mode 100644 Dockerfile.complex rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-add-package => init-mod-code-server-php-cli-add-package}/dependencies.d/init-mods (100%) create mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-add-package/run rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-add-package => init-mod-code-server-php-cli-add-package}/type (100%) create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-add-package/up rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-install => init-mod-code-server-php-cli-install}/dependencies.d/init-mods-package-install (100%) create mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-install/run rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-install => init-mod-code-server-php-cli-install}/type (100%) create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-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/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/up rename root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/{init-mod-imagename-modname-install => init-mod-code-server-php-cli-install} (100%) rename root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/{init-mod-imagename-modname-add-package => init-mod-code-server-php-cli-add-package} (100%) 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/{svc-mod-imagename-modname/dependencies.d/init-services => user/contents.d/init-mod-code-server-php-cli-add-package} (100%) rename root/etc/s6-overlay/s6-rc.d/user/contents.d/{init-mod-imagename-modname-add-package => init-mod-code-server-php-cli-install} (100%) 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 6008e85..ff58a2a 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -3,11 +3,11 @@ name: Build Image 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 - MULTI_ARCH: "true" #set to false if not needed + GITHUB_REPO: "linuxserver/docker-mods" + ENDPOINT: "linuxserver/mods" + BASEIMAGE: "code-server" + MODNAME: "php-cli" + MULTI_ARCH: "false" jobs: set-vars: diff --git a/Dockerfile b/Dockerfile index aa66170..cc6047f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM scratch -LABEL maintainer="username" +LABEL maintainer="Saij" # copy local files COPY root/ / diff --git a/Dockerfile.complex b/Dockerfile.complex deleted file mode 100644 index eb80898..0000000 --- a/Dockerfile.complex +++ /dev/null @@ -1,33 +0,0 @@ -# syntax=docker/dockerfile:1 - -## Buildstage ## -FROM ghcr.io/linuxserver/baseimage-alpine:3.19 as buildstage - -RUN \ - echo "**** install packages ****" && \ - apk add --no-cache \ - curl && \ - echo "**** grab rclone ****" && \ - mkdir -p /root-layer && \ - if [ $(uname -m) = "x86_64" ]; then \ - echo "Downloading x86_64 tarball" && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-amd64.deb"; \ - elif [ $(uname -m) = "aarch64" ]; then \ - echo "Downloading aarch64 tarball" && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-arm64.deb"; \ - fi && \ - -# 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 1700668..cffa967 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,38 @@ -# Rsync - Docker mod for openssh-server +# PHP-CLI - Docker mod for code-server/openvscode-server -This mod adds rsync to openssh-server, to be installed/updated during container start. +This mod adds php-cli and composer to code-server/openvscode-server, to be installed/updated during container start. -In openssh-server docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:openssh-server-rsync` +In code-server/openvscode-server docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:code-server-php-cli` -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` +If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:code-server-php-cli|linuxserver/mods:code-server-mod2` -# Mod creation instructions +## Installing specific PHP version -* 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 and `MULTI_ARCH` 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. +To install a specific PHP version simply define the environment variable `PHP_VERSION` with the version of your choice. As this mod uses the `ondrej/php` repository you can choose from the available versions there. +As default this mod will install PHP 8.2. -## Tips and tricks +Example: `PHP_VERSION=8.1` -* 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) +__WARNING__\ +Composer requires at least PHP 7.4 to run! + +## Installing PHP extensions + +To install PHP extensions simply define the environment variable `PHP_EXTENSIONS`. If you want to install multiple extensions, seperate them with `|`. + +Example: `PHP_EXTENSIONS=simplexml|gd|zip` + +## Enable Composer binary + +To enable the installation of the `composer` binary, set the environment variable `ENABLE_COMPOSER` to `yes`. + +Example: `ENABLE_COMPOSER=yes` + +__WARNING__\ +Composer requires at least PHP 7.4 to run! + +## PHP configuration files + +You can find all the PHP configuration files at `/config/.php`. +They are symlinked to `/etc/php` \ 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-php-cli-add-package/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-php-cli-add-package/dependencies.d/init-mods diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-add-package/run b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-add-package/run new file mode 100755 index 0000000..42e4090 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-add-package/run @@ -0,0 +1,76 @@ +#!/usr/bin/with-contenv bash + +PHP_VERSION=${PHP_VERSION:=8.2} + +HAS_PHP="no" +if command -v php${PHP_VERSION} &> /dev/null; then + HAS_PHP="yes" +fi + +if [ "${HAS_PHP}" = "no" ]; then + echo "**** Installing PHP ${PHP_VERSION} ****" + + if [ ! -f "/etc/apt/sources.list.d/php8source.list" ]; then + echo "**** Setting up APT repository ****" + + source /etc/lsb-release + + curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c" | gpg --dearmor | tee /usr/share/keyrings/php8.gpg >/dev/null + echo "deb [signed-by=/usr/share/keyrings/php8.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu ${DISTRIB_CODENAME} main" \ + > /etc/apt/sources.list.d/php8source.list + + apt-get update + fi + + if apt-cache show php${PHP_VERSION}-cli &> /dev/null; then + echo "\ + php${PHP_VERSION}-cli" >> /mod-repo-packages-to-install.list + + HAS_PHP="yes" + else + echo "** PHP ${PHP_VERSION} not found! (please specify minor version too!) **" + fi +else + echo "**** PHP ${PHP_VERSION} already installed, skipping ****" +fi + +if [ "${HAS_PHP}" = "yes" ]; then + if [ -z "${PHP_EXTENSIONS+x}" ]; then + echo "**** No PHP extensions to install ****" + exit 0 + fi + + IFS='|' + PHP_EXTENSIONS=(${PHP_EXTENSIONS}) + for EXT in "${PHP_EXTENSIONS[@]}"; do + if apt-cache show php${PHP_VERSION}-${EXT} &> /dev/null; then + echo "**** Installing PHP extension php${PHP_VERSION}-${EXT} ****" + echo "\ + php${PHP_VERSION}-${EXT}" >> /mod-repo-packages-to-install.list + else + echo "**** PHP extension php${PHP_VERSION}-${EXT} not found! ****" + fi + done +else + echo "**** PHP ${PHP_VERSION} is not installed! Check log! ****" +fi + +if [ "${ENABLE_COMPOSER}" = "yes" ] && [ "${HAS_PHP}" = yes ]; then + echo "**** Installing composer dependencies ****" + + if ! command -v unrar &> /dev/null; then + echo "\ + unrar" >> /mod-repo-packages-to-install.list + fi + + if ! command -v unzip &> /dev/null; then + echo "\ + unzip" >> /mod-repo-packages-to-install.list + fi + + if ! command -v 7z &> /dev/null; then + echo "\ + p7zip-full\ + p7zip-rar" >> /mod-repo-packages-to-install.list + fi +fi \ No newline at end of file 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-code-server-php-cli-add-package/type similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type rename to root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-add-package/type diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-add-package/up b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-add-package/up new file mode 100644 index 0000000..03493ed --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-add-package/up @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-add-package/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-mod-code-server-php-cli-install/dependencies.d/init-mods-package-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-mod-code-server-php-cli-install/dependencies.d/init-mods-package-install diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-install/run new file mode 100755 index 0000000..b77d61c --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-install/run @@ -0,0 +1,41 @@ +#!/usr/bin/with-contenv bash + +echo "**** Setting up PHP configuration files ****" +if [ ! -d /config/.php ]; then + cp -rf /etc/php /config/.php + chown -R abc:abc /config/.php +fi +rm -rf /etc/php +ln -s /config/.php /etc/php + +if ! [ "${ENABLE_COMPOSER}" = "yes" ]; then + echo "**** Composer will not be installed ****" + exit 0 +fi + +echo "**** Installing Composer ****" + +if ! command -v php &> /dev/null; then + echo "** Missing installed PHP! **" + exit 127; +fi + +EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')" +php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" +ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" + +if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ] +then + echo "** ERROR: Invalid installer checksum **" + rm composer-setup.php + exit 1 +fi + +php composer-setup.php --quiet +RESULT=$? +rm composer-setup.php +if [ "${RESULT}" = "0" ]; then + echo "** Installing composer system wide **" + mv composer.phar /usr/local/bin/composer +fi +exit $RESULT \ No newline at end of file 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-code-server-php-cli-install/type similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type rename to root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-install/type diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-install/up b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-install/up new file mode 100644 index 0000000..5aea9d8 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-install/up @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/init-mod-code-server-php-cli-install/run \ No newline at end of file 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/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/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-mods-end/dependencies.d/init-mod-imagename-modname-install b/root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-code-server-php-cli-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/init-mods-end/dependencies.d/init-mod-code-server-php-cli-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-code-server-php-cli-add-package similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package rename to root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-code-server-php-cli-add-package 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/svc-mod-imagename-modname/dependencies.d/init-services b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-code-server-php-cli-add-package similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services rename to root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-code-server-php-cli-add-package 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-code-server-php-cli-install similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package rename to root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-code-server-php-cli-install 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