diff --git a/packages/default.nix b/packages/default.nix index 3e9472f..8bd458e 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -20,6 +20,7 @@ docker-jellyseerr = import ./docker/jellyseerr { inherit pkgs; }; docker-littlelink-server = import ./docker/littlelink-server { inherit pkgs inputs system; }; docker-mariadb = import ./docker/mariadb { inherit pkgs; }; + docker-mysql = import ./docker/mysql { inherit pkgs; }; docker-nextcloud = import ./docker/nextcloud { inherit pkgs; }; docker-nginx = import ./docker/nginx { inherit pkgs; }; docker-ntfy = import ./docker/ntfy { inherit pkgs; }; diff --git a/packages/docker/mariadb/default.nix b/packages/docker/mariadb/default.nix index ece913c..9128807 100644 --- a/packages/docker/mariadb/default.nix +++ b/packages/docker/mariadb/default.nix @@ -16,7 +16,6 @@ pkgs.dockerTools.buildImage { paths = with pkgs; [ entrypoint mariadb - gnused ]; pathsToLink = [ "/bin" diff --git a/packages/docker/mariadb/entrypoint.sh b/packages/docker/mariadb/entrypoint.sh index c9d00c0..5e1505d 100644 --- a/packages/docker/mariadb/entrypoint.sh +++ b/packages/docker/mariadb/entrypoint.sh @@ -6,8 +6,8 @@ set -o nounset MYSQL_USER="${MYSQL_USER:-mariadb}" MYSQL_PASSWORD="${MYSQL_PASSWORD:-mariadb}" MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-$MYSQL_PASSWORD}" -MYSQL_DB="${MYSQL_DB:-$MYSQL_USER}" -export DATADIR="${DATADIR:-/var/lib/mysql}" +MYSQL_DB="${MYSQL_DB}" +DATADIR="${DATADIR:-/var/lib/mysql}" if [ ! -f "$DATADIR/mysql_upgrade_info" ]; then mariadb-install-db --datadir="$DATADIR" --skip-test-db diff --git a/packages/docker/mysql/default.nix b/packages/docker/mysql/default.nix new file mode 100644 index 0000000..6a72e8f --- /dev/null +++ b/packages/docker/mysql/default.nix @@ -0,0 +1,41 @@ +{ pkgs, ... }: +let + entrypoint = pkgs.writeTextFile { + name = "entrypoint"; + executable = true; + destination = "/bin/entrypoint"; + text = builtins.readFile ./entrypoint.sh; + }; +in +pkgs.dockerTools.buildImage { + name = "mysql"; + fromImage = import ../base { inherit pkgs; }; + + copyToRoot = pkgs.buildEnv { + name = "root"; + paths = with pkgs; [ + entrypoint + mysql84 + ]; + pathsToLink = [ + "/bin" + "/lib" + "/share" + ]; + }; + + runAsRoot = '' + mkdir -p /run/mysqld + ''; + + config = { + Entrypoint = [ "entrypoint" ]; + ExposedPorts = { + "3306/tcp" = { }; + }; + WorkingDir = "/var/lib/mysql"; + Volumes = { + "/var/lib/mysql" = { }; + }; + }; +} diff --git a/packages/docker/mysql/entrypoint.sh b/packages/docker/mysql/entrypoint.sh new file mode 100644 index 0000000..9ee411b --- /dev/null +++ b/packages/docker/mysql/entrypoint.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +set -o errexit +set -o nounset + +MYSQL_USER="${MYSQL_USER:-mysql}" +MYSQL_PASSWORD="${MYSQL_PASSWORD:-mysql}" +MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-$MYSQL_PASSWORD}" +MYSQL_DB="${MYSQL_DB}" +DATADIR="${DATADIR:-/var/lib/mysql}" + +if [ ! -f "$DATADIR/mysql_upgrade_history" ]; then + mysqld --initialize-insecure --datadir="$DATADIR" + + mysqld --user=root --datadir="$DATADIR" --skip-networking --skip-grant-tables & + PID="$!" + + while ! mysql --protocol=socket -e " + FLUSH PRIVILEGES; + + ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD'; + + CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD'; + GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' WITH GRANT OPTION; + + CREATE DATABASE \`$MYSQL_DB\`; + "; do + sleep 0.1 + done + + kill -QUIT "$PID" + wait "$PID" || true +fi + +trap 'kill -QUIT "$PID"' INT TERM +mysqld --user=root --datadir="$DATADIR" "$@" & +PID=$! +wait "$PID" +exit $? diff --git a/packages/docker/nextcloud/entrypoint.sh b/packages/docker/nextcloud/entrypoint.sh index 5c30649..b1ea2f3 100644 --- a/packages/docker/nextcloud/entrypoint.sh +++ b/packages/docker/nextcloud/entrypoint.sh @@ -8,7 +8,7 @@ if [ ! -f "/var/www/nextcloud/config/config.php" ]; then POSTGRES_PORT="${POSTGRES_PORT:-5432}" POSTGRES_USER="${POSTGRES_USER:-nextcloud}" POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-nextcloud}" - POSTGRES_DB="${POSTGRES_DB:-$POSTGRES_USER}" + POSTGRES_DB="${POSTGRES_DB}" ADMIN_USER="admin" ADMIN_PASS="$(head -c 128 /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 64)" diff --git a/packages/docker/postgresql/entrypoint.sh b/packages/docker/postgresql/entrypoint.sh index 88ea4df..f011650 100644 --- a/packages/docker/postgresql/entrypoint.sh +++ b/packages/docker/postgresql/entrypoint.sh @@ -5,7 +5,7 @@ set -o nounset POSTGRES_USER="${POSTGRES_USER:-postgres}" POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-postgres}" -POSTGRES_DB="${POSTGRES_DB:-$POSTGRES_USER}" +POSTGRES_DB="${POSTGRES_DB}" export PGDATA="${PGDATA:-/var/lib/postgresql/data}" LOG_PIPE="$(mktemp -u)"