commit ca7b767250c02bc4656695daa0c99a8ac97e7a63 Author: didier amyot Date: Mon Jun 26 07:44:13 2023 -0400 Wrapped keycloak in a nix flake diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b2be92b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result diff --git a/dev-server.sh b/dev-server.sh new file mode 100644 index 0000000..08ce79c --- /dev/null +++ b/dev-server.sh @@ -0,0 +1,24 @@ + +resolved_keycloak_data_dir="${KEYCLOAK_DATA_DIR:-$HOME/.keycloak}" +mkdir -p "$resolved_keycloak_data_dir" +exec java -Dkc.config.built=true \ + -Xms64m \ + -Xmx512m \ + -XX:MetaspaceSize=96M \ + -XX:MaxMetaspaceSize=256m \ + -Djava.net.preferIPv4Stack=true \ + -Dfile.encoding=UTF-8 \ + -Dsun.stdout.encoding=UTF-8 \ + -Dsun.err.encoding=UTF-8 \ + -Dstdout.encoding=UTF-8 \ + -Dstderr.encoding=UTF-8 \ + --add-opens=java.base/java.util=ALL-UNNAMED \ + --add-opens=java.base/java.util.concurrent=ALL-UNNAMED \ + --add-opens=java.base/java.security=ALL-UNNAMED \ + -Dkc.home.dir="$resolved_keycloak_data_dir" \ + -Djboss.server.config.dir="${keycloak}/conf" \ + -Djava.util.logging.manager=org.jboss.logmanager.LogManager \ + -Dquarkus-log-max-startup-records=10000 \ + -cp "${keycloak}/lib/quarkus-run.jar" \ + io.quarkus.bootstrap.runner.QuarkusEntryPoint \ + --profile=dev start-dev \ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..a1a200a --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1687171271, + "narHash": "sha256-BJlq+ozK2B1sJDQXS3tzJM5a+oVZmi1q0FlBK/Xqv7M=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "abfb11bd1aec8ced1c9bb9adfe68018230f4fb3c", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1687245362, + "narHash": "sha256-+f9tH+k3u9lSS136M2LCsl5NJTNPvhmHEiVOcypiu1E=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "205ee073b053fc4d87d5adf2ebd44ebbef7bca4d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..64bf011 --- /dev/null +++ b/flake.nix @@ -0,0 +1,52 @@ +{ + description = "Nix flake wrapper around keycloak"; + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + keycloak-src = pkgs.fetchzip { + url = "https://github.com/keycloak/keycloak/releases/download/21.1.1/keycloak-21.1.1.tar.gz"; + hash = "sha256-ZX5UKjU9BEtO/uA25WhSUmeO6jQ1FpKF1irFx2fwPBU="; + }; + keycloak-build-script = '' + export JAVA_HOME=${pkgs.graalvm17-ce} + cp lib/lib/main/org.keycloak.keycloak-themes-21.1.1.jar providers + mkdir -p data/password-blacklists + mkdir -p data/tmp + echo "$(tail -n +2 bin/kc.sh)" >> bin/kc.new.sh + chmod +x bin/kc.new.sh + bin/kc.new.sh build --db dev-file + ''; + keycloak-dev-build = pkgs.stdenv.mkDerivation { + name = "keycloak-dev-build"; + src = keycloak-src; + buildPhase = keycloak-build-script; + installPhase = '' + cp -r . $out + ''; + }; + dev-server = pkgs.writeShellApplication { + name = "custom-server"; + runtimeInputs = [pkgs.graalvm17-ce keycloak-dev-build]; + text = "export keycloak=${keycloak-dev-build}\n" + (builtins.readFile ./dev-server.sh); + }; + server = pkgs.writeShellApplication { + name = "keycloak"; + runtimeInputs = [pkgs.graalvm17-ce keycloak-src]; + text = "export keycloak=${keycloak-dev-build}\n" + (builtins.readFile ./server.sh); + + }; + + in + { + packages = { + default = server; + }; + } + ); +} diff --git a/server.sh b/server.sh new file mode 100644 index 0000000..758aec5 --- /dev/null +++ b/server.sh @@ -0,0 +1,24 @@ + +resolved_keycloak_data_dir="${KEYCLOAK_DATA_DIR:-$HOME/.keycloak}" +mkdir -p "$resolved_keycloak_data_dir" +exec java -Dkc.config.built=true \ + -Xms64m \ + -Xmx512m \ + -XX:MetaspaceSize=96M \ + -XX:MaxMetaspaceSize=256m \ + -Djava.net.preferIPv4Stack=true \ + -Dfile.encoding=UTF-8 \ + -Dsun.stdout.encoding=UTF-8 \ + -Dsun.err.encoding=UTF-8 \ + -Dstdout.encoding=UTF-8 \ + -Dstderr.encoding=UTF-8 \ + --add-opens=java.base/java.util=ALL-UNNAMED \ + --add-opens=java.base/java.util.concurrent=ALL-UNNAMED \ + --add-opens=java.base/java.security=ALL-UNNAMED \ + -Dkc.home.dir="$resolved_keycloak_data_dir" \ + -Djboss.server.config.dir="${keycloak}/conf" \ + -Djava.util.logging.manager=org.jboss.logmanager.LogManager \ + -Dquarkus-log-max-startup-records=10000 \ + -cp "${keycloak}/lib/quarkus-run.jar" \ + io.quarkus.bootstrap.runner.QuarkusEntryPoint \ + "$@" \