From 0a16737398bd810b3055eadc2276f197763c6f89 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 13 Apr 2026 19:24:21 +0200 Subject: [PATCH] migrate scripts to nushell --- nix/image/bootstrap | 87 +++++++++++++++++ nix/image/bootstrap.sh | 94 ------------------- nix/image/configs/nc/redis-default.php | 1 - nix/image/configs/nc/redis-tls.php | 1 - nix/image/configs/supervisor/supervisord.conf | 1 + nix/image/haze.nix | 8 +- nix/image/scripts/install | 38 ++++---- nix/image/scripts/nc-auto-config | 80 +++++----------- nix/image/scripts/occ | 8 +- nix/image/scripts/tests | 10 +- 10 files changed, 143 insertions(+), 185 deletions(-) create mode 100755 nix/image/bootstrap delete mode 100755 nix/image/bootstrap.sh diff --git a/nix/image/bootstrap b/nix/image/bootstrap new file mode 100755 index 0000000..d16e605 --- /dev/null +++ b/nix/image/bootstrap @@ -0,0 +1,87 @@ +#!/bin/nu + +touch /var/log/nginx/access.log +touch /var/log/nginx/error.log +touch /var/log/cron/owncloud.log + +mkdir /config +echo "# Options in here overwrite the builtin php.ini\n" | save /config/php.ini +echo "# xdebug.mode = debug\n" | save -a /config/php.ini +echo "# xdebug.start_with_request = yes\n\n" | save -a /config/php.ini +chmod 0777 /config/php.ini +let PHP_INI_DIR = php --ini | grep 'Scan' | cut -d ' ' -f7 | tr -d '"' +ln -s /config/php.ini $"($PHP_INI_DIR)/zz_extra.ini" + +let HAZE_UID = $env.HAZE_UID | default "1000" +let HAZE_GID = $env.HAZE_GID | default "1000" + +nc-auto-config +shadow-setup + +echo $"Running as ($HAZE_UID):($HAZE_GID)" + +mkdir /var/www/html/core/skeleton /var/www/html/build/integration/vendor /var/www/html/build/integration/output /var/www/html/build/integration/work /var/www/html/core/skeleton /var/www/.composer/cache /var/www/html/apps/spreed/tests/integration/vendor/composer +chown -R $"($HAZE_UID):($HAZE_GID)" /var/www/html/data /var/www/html/config +chown $"($HAZE_UID):($HAZE_GID)" /var/www/html/core/skeleton /var/www/html/build/integration/vendor /var/www/html/build/integration/composer.lock /var/www/html/build/integration/output /var/www/html/build/integration/work /var/www/html/core/skeleton /var/www/.composer/cache /var/www/html/apps/spreed/tests/integration/vendor/composer + +echo "{}\n" | save -f /var/www/html/build/integration/composer.lock + +echo $"Starting server using ($env.SQL) database…" + +chmod +sx /sbin/sudo + +mkdir /var/log/nginx /tmp /var/run/blackfire +touch /var/log/nginx/access.log +touch /var/log/nginx/error.log + +if ((getent group $HAZE_GID | length) > 0) { + groupadd haze + useradd -u $HAZE_UID -g $HAZE_GID -G haze haze +} else { + groupadd -g $HAZE_GID haze + useradd -u $HAZE_UID -g $HAZE_GID haze +} +chown -R $"haze:($HAZE_GID)" /home/haze + +if ("/var/run/docker.sock" | path exists) { + let dockerGid = stat --format "%g" /var/run/docker.sock + groupadd docker -g $dockerGid + usermod -a -G docker haze +} + +if ("REDIS_TLS" in $env) { + cp /etc/supervisor/redis-tls.conf /etc/supervisor/enabled/ +} else { + cp /etc/supervisor/redis-plain.conf /etc/supervisor/enabled/ +} + +if ("BLACKFIRE_SERVER_ID" in $env) { + blackfire agent:config --server-id $env.BLACKFIRE_SERVER_ID --server-token $env.BLACKFIRE_SERVER_TOKEN + cp /etc/supervisor/blackfire.conf /etc/supervisor/enabled/ +} + +if ("PROXY_BASE" in $env) { + let UPSTREAM_DNS = cat /etc/resolv.conf | grep nameserver | cut -d' ' -f 2 + let RC = sed '/nameserver/d' /etc/resolv.conf + echo $RC | save -f /etc/resolv.conf + + echo "\nnameserver 127.0.0.22\n" | save -a /etc/resolv.conf + + echo $"s/UPSTREAM_DNS/($UPSTREAM_DNS)" + sed -i $"s/UPSTREAM_DNS/($UPSTREAM_DNS)/" /etc/dnsmasq.conf + echo $"s/PROXY_BASE/($env.PROXY_BASE)" + sed -i $"s/PROXY_BASE/($env.PROXY_BASE)/" /etc/dnsmasq.conf + echo $"s/HOST_IP/($env.HOST_IP)" + sed -i $"s/HOST_IP/($env.HOST_IP)/" /etc/dnsmasq.conf + + cp /etc/supervisor/dnsmasq.conf /etc/supervisor/enabled/ +} + +if ("FRANKENPHP" in $env) { + cp /etc/supervisor/frankenphp.conf /etc/supervisor/enabled/ +} else { + cp /etc/supervisor/php-fpm.conf /etc/supervisor/enabled/ + cp /etc/supervisor/nginx.conf /etc/supervisor/enabled/ +} + +exec supervisord -c /etc/supervisor/supervisord.conf diff --git a/nix/image/bootstrap.sh b/nix/image/bootstrap.sh deleted file mode 100755 index ce3d0e3..0000000 --- a/nix/image/bootstrap.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env bash - -touch /var/log/nginx/access.log -touch /var/log/nginx/error.log -touch /var/log/cron/owncloud.log - -mkdir -p /config -echo "# Options in here overwrite the builtin php.ini" > /config/php.ini -echo "# xdebug.mode = debug" >> /config/php.ini -echo "# xdebug.start_with_request = yes" >> /config/php.ini -chmod 0777 /config/php.ini -PHP_INI_DIR="$(php --ini | grep 'Scan' | cut -d ' ' -f7 | tr -d '"')" -ln -s /config/php.ini "$PHP_INI_DIR/zz_extra.ini" - -HAZE_UID=${HAZE_UID:-www-data} -HAZE_GID=${HAZE_GID:-www-data} - -nc-auto-config -shadow-setup - -echo "Running as $HAZE_UID:$HAZE_GID" - -mkdir -p /var/www/html/core/skeleton /var/www/html/build/integration/vendor /var/www/html/build/integration/output /var/www/html/build/integration/work /var/www/html/core/skeleton /var/www/.composer/cache /var/www/html/apps/spreed/tests/integration/vendor/composer -chown -R "$HAZE_UID":"$HAZE_GID" /var/www/html/data /var/www/html/config -chown "$HAZE_UID":"$HAZE_GID" /var/www/html/core/skeleton /var/www/html/build/integration/vendor /var/www/html/build/integration/composer.lock /var/www/html/build/integration/output /var/www/html/build/integration/work /var/www/html/core/skeleton /var/www/.composer/cache /var/www/html/apps/spreed/tests/integration/vendor/composer - -echo "{}" > /var/www/html/build/integration/composer.lock - -echo "Starting server using $SQL database…" - -chmod +sx /sbin/sudo - -mkdir -p /var/log/nginx /tmp /var/run/blackfire -touch /var/log/nginx/access.log -touch /var/log/nginx/error.log - -HAZE_UID=${HAZE_UID:-1000} -HAZE_GID=${HAZE_GID:-1000} - -if [ "$(getent group "$HAZE_GID")" ]; then - groupadd haze - EXTRA_GROUP=" -G haze" -else - groupadd -g "$HAZE_GID" haze - EXTRA_GROUP="" -fi - -useradd -u "$HAZE_UID" -g "$HAZE_GID""$EXTRA_GROUP" haze -chown -R haze:"$HAZE_GID" /home/haze - -if [ -f "/var/run/docker.sock" ]; then - groupadd docker -g "$(stat --format "%g" /var/run/docker.sock)" - usermod -a -G docker haze -fi - -if [ -n "${REDIS_TLS:-}" ] -then - cp /etc/supervisor/redis-tls.conf /etc/supervisor/enabled/ -else - cp /etc/supervisor/redis-plain.conf /etc/supervisor/enabled/ -fi - -if [ -n "${BLACKFIRE_SERVER_ID:-}" ] -then - blackfire agent:config --server-id="$BLACKFIRE_SERVER_ID" --server-token="$BLACKFIRE_SERVER_TOKEN" - cp /etc/supervisor/blackfire.conf /etc/supervisor/enabled/ -fi - -if [ -n "${PROXY_BASE:-}" ]; then - UPSTREAM_DNS=$(cat /etc/resolv.conf | grep nameserver | cut -d' ' -f 2) - ( - RC=$(sed '/nameserver/d' /etc/resolv.conf) - echo "$RC" > /etc/resolv.conf - ) - echo 'nameserver 127.0.0.22' >> /etc/resolv.conf - - echo "s/UPSTREAM_DNS/${UPSTREAM_DNS}" - sed -i "s/UPSTREAM_DNS/${UPSTREAM_DNS}/" /etc/dnsmasq.conf - echo "s/PROXY_BASE/${PROXY_BASE}" - sed -i "s/PROXY_BASE/${PROXY_BASE}/" /etc/dnsmasq.conf - echo "s/HOST_IP/${HOST_IP}" - sed -i "s/HOST_IP/${HOST_IP}/" /etc/dnsmasq.conf - - cp /etc/supervisor/dnsmasq.conf /etc/supervisor/enabled/ -fi - -if [ -n "${FRANKENPHP:-}" ]; then - cp /etc/supervisor/frankenphp.conf /etc/supervisor/enabled/ -else - cp /etc/supervisor/php-fpm.conf /etc/supervisor/enabled/ - cp /etc/supervisor/nginx.conf /etc/supervisor/enabled/ -fi - -exec supervisord -c /etc/supervisor/supervisord.conf \ No newline at end of file diff --git a/nix/image/configs/nc/redis-default.php b/nix/image/configs/nc/redis-default.php index 2ba24aa..71b18a8 100644 --- a/nix/image/configs/nc/redis-default.php +++ b/nix/image/configs/nc/redis-default.php @@ -1,2 +1 @@ 'redis' => ['host' => 'localhost'], -//PLACEHOLDER diff --git a/nix/image/configs/nc/redis-tls.php b/nix/image/configs/nc/redis-tls.php index cb454ac..c3b9abe 100644 --- a/nix/image/configs/nc/redis-tls.php +++ b/nix/image/configs/nc/redis-tls.php @@ -8,4 +8,3 @@ 'verify_peer_name' => false, ], ], -//PLACEHOLDER diff --git a/nix/image/configs/supervisor/supervisord.conf b/nix/image/configs/supervisor/supervisord.conf index 2fedc90..bed7885 100644 --- a/nix/image/configs/supervisor/supervisord.conf +++ b/nix/image/configs/supervisor/supervisord.conf @@ -3,6 +3,7 @@ logfile = /dev/stdout logfile_maxbytes = 0 nodaemon = true pidfile = /var/run/supervisord.pid +user = root [unix_http_server] file = /var/run/supervisor.sock diff --git a/nix/image/haze.nix b/nix/image/haze.nix index 18ea63e..8c7551e 100644 --- a/nix/image/haze.nix +++ b/nix/image/haze.nix @@ -7,6 +7,7 @@ blackfire, coreutils, getent, + writers, shadow, runCommand, callPackage, @@ -44,11 +45,7 @@ phpVersion = concatStringsSep "." (take 2 (splitString "." php.version)); phpEnv = callPackage ./php.nix {inherit debug php;}; - bootstrap = writeShellApplication { - name = "bootstrap"; - runtimeInputs = [getent]; - text = readFile ./bootstrap.sh; - }; + bootstrap = writers.writeNuBin "bootstrap" (readFile ./bootstrap); shadowSetupScript = writeShellApplication { name = "shadow-setup"; text = dockerTools.shadowSetup; @@ -144,6 +141,7 @@ python3Packages.supervisor dnsmasq nushell + getent ]; }; diff --git a/nix/image/scripts/install b/nix/image/scripts/install index 2a86fcc..35d3f00 100755 --- a/nix/image/scripts/install +++ b/nix/image/scripts/install @@ -1,20 +1,22 @@ -#!/bin/sh +#!/bin/nu -USER=$1 -PASSWORD=$2 +def main [username: string, password: string] { + cd $env.WEBROOT; + let sql = match $env.SQL { + "oracle" => "oci" + "mariadb" => "mysql" + _ => $env.SQL + } + let dbName = match $env.SQL { + "oracle" => "xe" + _ => "haze" + } + let dbUser = match $env.SQL { + "oracle" => "system" + _ => "haze" + } + let dbPass = "haze" + let dbHost = $env.SQL -if [ -z "$USER" ] || [ -z "$PASSWORD" ]; then - echo "Usage: install \$USER \$PASSWORD" - exit; -fi - -cd $WEBROOT - -if [ "$SQL" = "oracle" ]; then - # oracle is a special snowflake - occ maintenance:install --admin-user=$USER --admin-pass=$PASSWORD --database=oci --database-name=xe --database-host=$SQL --database-user=system --database-pass=haze -elif [ "$SQL" = "mariadb" ]; then - occ maintenance:install --admin-user=$USER --admin-pass=$PASSWORD --database=mysql --database-name=haze --database-host=$SQL --database-user=haze --database-pass=haze -else - occ maintenance:install --admin-user=$USER --admin-pass=$PASSWORD --database=$SQL --database-name=haze --database-host=$SQL --database-user=haze --database-pass=haze -fi; + occ maintenance:install --admin-user $username --admin-pass $password --database $sql --database-name $dbName --database-host $dbHost --database-user $dbUser --database-pass $dbPass +} diff --git a/nix/image/scripts/nc-auto-config b/nix/image/scripts/nc-auto-config index fc8d95c..b7a2c07 100755 --- a/nix/image/scripts/nc-auto-config +++ b/nix/image/scripts/nc-auto-config @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/nu touch /var/log/nginx/access.log touch /var/log/nginx/error.log @@ -7,64 +7,30 @@ touch /var/log/cron/owncloud.log cp /etc/nc/config.php /var/www/html/config/config.php chmod 0755 /var/www/html/config/config.php -if [ "$SQL" = "mysql" ] -then - cp /etc/nc/autoconfig_mysql.php /var/www/html/config/autoconfig.php -fi +let configName = match $env.SQL { + "oracle" => "oci" + _ => $env.SQL -if [ "$SQL" = "mariadb" ] -then - cp /etc/nc/autoconfig_mariadb.php /var/www/html/config/autoconfig.php -fi +} +let configPath = $"/etc/nc/autoconfig_($configName).php" -if [ "$SQL" = "pgsql" ] -then - cp /etc/nc/autoconfig_pgsql.php /var/www/html/config/autoconfig.php -fi +if ($configPath | path exists) { + cp $configPath /var/www/html/config/autoconfig.php +} -if [ "$SQL" = "oci" ] -then - cp /etc/nc/autoconfig_oci.php /var/www/html/config/autoconfig.php -fi +def loadExtraConfig [name: string] { + sed -i $'/\/\/PLACEHOLDER/ r /etc/nc/($name).php' /var/www/html/config/config.php +} -if [ -n "${S3:-}" ] -then - sed -i '/\/\/PLACEHOLDER/ r /etc/nc/s3.php' /var/www/html/config/config.php -fi +let extraConfigs = ["S3", "S3S", "S3MB", "S3M", "SWIFT", "SWIFTV3", "AZURE"]; +$extraConfigs | each { + if ($in in $env) { + loadExtraConfig ($in | str downcase) + } +} -if [ -n "${S3S:-}" ] -then - sed -i '/\/\/PLACEHOLDER/ r /etc/nc/s3s.php' /var/www/html/config/config.php -fi - -if [ -n "${S3MB:-}" ] -then - sed -i '/\/\/PLACEHOLDER/ r /etc/nc/s3mb.php' /var/www/html/config/config.php -fi - -if [ -n "${S3M:-}" ] -then - sed -i '/\/\/PLACEHOLDER/ r /etc/nc/s3m.php' /var/www/html/config/config.php -fi - -if [ -n "${SWIFT:-}" ] -then - sed -i '/\/\/PLACEHOLDER/ r /etc/nc/swift.php' /var/www/html/config/config.php -fi - -if [ -n "${SWIFTV3:-}" ] -then - sed -i '/\/\/PLACEHOLDER/ r /etc/nc/swiftv3.php' /var/www/html/config/config.php -fi - -if [ -n "${AZURE:-}" ] -then - sed -i '/\/\/PLACEHOLDER/ r /etc/nc/azure.php' /var/www/html/config/config.php -fi - -if [ -n "${REDIS_TLS:-}" ] -then - sed -i '/\/\/PLACEHOLDER/ r /etc/nc/redis-tls.php' /var/www/html/config/config.php -else - sed -i '/\/\/PLACEHOLDER/ r /etc/nc/redis-default.php' /var/www/html/config/config.php -fi +if ("REDIS_TLS" in $env) { + loadExtraConfig "redis-tls" +} else { + loadExtraConfig "redis-default" +} diff --git a/nix/image/scripts/occ b/nix/image/scripts/occ index cf7d6fa..07a443b 100755 --- a/nix/image/scripts/occ +++ b/nix/image/scripts/occ @@ -1,5 +1,5 @@ -#!/bin/sh +#!/bin/nu -export XDEBUG_SESSION=haze - -php $WEBROOT/occ "$@" +def --wrapped main [...rest] { + XDEBUG_SESSION=haze php $"($env.WEBROOT)/occ" ...$rest +} diff --git a/nix/image/scripts/tests b/nix/image/scripts/tests index 70691c0..524172c 100755 --- a/nix/image/scripts/tests +++ b/nix/image/scripts/tests @@ -1,7 +1,7 @@ -#!/bin/sh +#!/bin/nu -cd $WEBROOT +def main [...rest] { + cd $env.WEBROOT -export XDEBUG_SESSION=haze - -phpunit --configuration $WEBROOT/tests/phpunit-autotest.xml $@ + XDEBUG_SESSION=haze phpunit --configuration $"($env.WEBROOT)/tests/phpunit-autotest.xml" ...$rest +}