Date: Friday, February 18, 2022 @ 23:07:15 Author: artafinde Revision: 1134439
keycloak: use quarkus distribution Keycloak 17.x officially introduced the Quarkus distribution [1]. With this almost the whole package has changed along with its service. The new Keycloak quarkus server has a two phase start up of the service [2] and part of it is persisting its configuration in serialized format within binary files (jar, dat files). Currently this is an issue since there's no way of having /usr/share/java/keycloak/lib/quarkus in a different directory (e.g. /var/lib/keycloak). This is raised upstream [3]. [1]: https://www.keycloak.org/docs/latest/release_notes/#keycloak-17-0-0 [2]: https://www.keycloak.org/server/configuration [3]: https://github.com/keycloak/keycloak/discussions/10323 Added: keycloak/trunk/keycloak.install Modified: keycloak/trunk/PKGBUILD keycloak/trunk/keycloak.service keycloak/trunk/keycloak.sysusers keycloak/trunk/keycloak.tmpfiles keycloak/trunk/pin-java-version.patch Deleted: keycloak/trunk/layers.conf keycloak/trunk/postgresql-module.xml ------------------------+ PKGBUILD | 79 ++++++++++++++++++++++------------------------- keycloak.install | 7 ++++ keycloak.service | 30 ++++++++++++++++- keycloak.sysusers | 2 - keycloak.tmpfiles | 8 +--- layers.conf | 1 pin-java-version.patch | 31 +++++++++++++++++- postgresql-module.xml | 12 ------- 8 files changed, 106 insertions(+), 64 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2022-02-18 23:06:48 UTC (rev 1134438) +++ PKGBUILD 2022-02-18 23:07:15 UTC (rev 1134439) @@ -3,9 +3,8 @@ pkgname=keycloak pkgver=17.0.0 -_postgresql_jdbc=42.3.2 _java=11 -pkgrel=1 +pkgrel=2 pkgdesc="Open Source Identity and Access Management For Modern Applications and Services" arch=('any') url="https://www.keycloak.org/" @@ -13,36 +12,26 @@ depends=("java-runtime=${_java}" 'grep' 'bash' 'coreutils' 'util-linux') makedepends=('maven' 'git' "java-environment=${_java}") backup=( - opt/keycloak/standalone/configuration/application-roles.properties - opt/keycloak/standalone/configuration/application-users.properties - opt/keycloak/standalone/configuration/logging.properties - opt/keycloak/standalone/configuration/mgmt-groups.properties - opt/keycloak/standalone/configuration/mgmt-users.properties - opt/keycloak/standalone/configuration/standalone-ha.xml - opt/keycloak/standalone/configuration/standalone.xml + 'etc/keycloak/keycloak.conf' ) +install=keycloak.install options=(emptydirs) source=(https://github.com/keycloak/keycloak/archive/$pkgver/$pkgname-$pkgver.tar.gz keycloak.service keycloak.sysusers keycloak.tmpfiles - layers.conf - postgresql-module.xml - https://jdbc.postgresql.org/download/postgresql-${_postgresql_jdbc}.jar common.sh pin-java-version.patch) sha512sums=('5d6cde979db234dc58d591958fbf4acdb45d461666e4fa9d9616551ce792c18c750f4d5336853052408c0e88ca445944937f1f167ec9ce1eb50732981e84b770' - 'dd10a38e4c8867de6d1fcbb4939c6c5946684842462eba3d5355bf1de13fa059edfd5eba37adce587c824ddd618b6bb88d4bbe1ee568ca5abd0f72296da3ddfe' - 'c53b734598ccf675930754514bd2af628355025197e77541e5acb8718629a8ece763c814e8373278758a30475e6a716febeff10bdebf0847d914bc193e732c79' - '9382b42f09040e34fe1a27d9ff4fb87cabd41525ca26f8ea9629df0169cf93d95cc4bb62bcc5c2ca30efdfd7eeeb13a6f090df9a05823baf701ba729a47f6fd1' - 'd54a04c120edb933c4f7168460bd813ff92a4e3771cedcabfeeb76c5d3e057b3cd0d0486dc11ddbd91e8d87ca90193e4c74cc3414e45106dd556d455ac7e60b2' - '5eece4f3eb57372969f0e5319804198b546455828e938ff7f37bbcfb58be08efde43a5b0376c98f359c4bc5eb069e0cd9410daefe19da1c03e9e9c57d3c1b75b' - 'e28b5a2b15b7b12f3b0c76b914f9aca25867175bc87a0ca84da58e50a5c518c5de94e27ea6d570499b1320c9f8072f1022d08356e9a0e96b3bf9b1084e1f9aea' + '1512520528b6893997b8a3c4899fbb84a897f604f279f64fc1228785a27544499f1c8951f8997129fb2b857d2d3c11b09fb9493f83faa20a0594c759adbe0823' + '2e2ba147007ad74e38579a8838d79de47beac509b4bd1a14d7f80905953d79a7396d781f141b461ec688f5ceef9a1081a825a4ca8afc1ea12c178d8ae7f5a7dd' + '362be58e0f18094a6849aaec56ee51aeb72bf62805c87709aa1f435770891138a6cfe2a7de9a1f106212bda0b905f225fcace299a8b811cc6d977783449538e6' '4ae3f9fc42bfee602480c1c8cc2d65b44305622b426b74070758fe1c92a06ff12901ffebacbfe2ba34cbf783a8787f6073f74db3674c96e7a6109ed5b45d3a07' - 'cb7d95aef66303c7935714c58c51aa1714419c455a6f46c32a79e80dbe4b6523d0dd77bb5f606c5cfdf0380f01220af720f93285658fc19a38b860344a2b9198') + 'c0351896427c7b7b73f446481a30dc735365a91541e7039cd613d1c7357c55c9559e388bc260e004c2a52211df1d23d9e24cc9c8ca956398f6e508ef96cb0ee2') prepare() { cd $pkgname-$pkgver + patch -Np1 -i "$srcdir"/pin-java-version.patch } @@ -50,39 +39,47 @@ cd $pkgname-$pkgver export PATH="/usr/lib/jvm/java-${_java}-openjdk/bin:$PATH" - mvn -Pdistribution \ + mvn -am \ -s maven-settings.xml \ - -pl distribution/server-dist \ - -am \ - -Dmaven.test.skip \ - clean install + -DskipTestsuite \ + -DskipExamples \ + -DskipTests \ + -Dproject.build.outputTimestamp="$SOURCE_DATE_EPOCH" \ + clean package } package() { cd $pkgname-$pkgver - mkdir -p "$pkgdir/opt" - cp -r "distribution/server-dist/target/keycloak-$pkgver" "$pkgdir/opt/keycloak" - install -Dm 644 "$srcdir"/layers.conf -t "$pkgdir/opt/keycloak/modules" - install -d "$pkgdir"/opt/keycloak/standalone/{data,log} + install -vdm 755 "${pkgdir}"/{usr/share/java,var/log}/"${pkgname}" + install -vdm 755 "${pkgdir}"/var/lib/"${pkgname}"/{deployments,data} + install -vdm 755 "${pkgdir}"/usr/bin - install -Dm644 "$srcdir"/postgresql-${_postgresql_jdbc}.jar "$pkgdir"/opt/keycloak/modules/system/layers/keycloak/org/postgresql/main/postgresql-${_postgresql_jdbc}.jar - sed "s/@JDBC_POSTGRESQL_JAR@/postgresql-${_postgresql_jdbc}.jar/g" "$srcdir"/postgresql-module.xml > "$pkgdir"/opt/keycloak/modules/system/layers/keycloak/org/postgresql/main/module.xml + tar xf quarkus/dist/target/${pkgname}-${pkgver}.tar.gz --strip 1 \ + -C "${pkgdir}/usr/share/java/${pkgname}" + install -vDm 755 "${srcdir}/common.sh" "${pkgdir}/usr/share/java/${pkgname}/bin/common.sh" + # Clean up unwanted files + rm -rvf "${pkgdir}/usr/share/java/${pkgname}"/LICENSE.txt + rm -rvf "${pkgdir}/usr/share/java/${pkgname}"/bin/*.bat + # Fix permissions from untar + chown -R root:root "${pkgdir}/usr/share/java/${pkgname}" - install -d "$pkgdir/"{etc,var/log,var/lib/keycloak} - ln -s /opt/keycloak/standalone/configuration "$pkgdir/etc/keycloak" - ln -s /opt/keycloak/standalone/log "$pkgdir/var/log/keycloak" - ln -s /opt/keycloak/standalone/deployments "$pkgdir/var/lib/keycloak/deployments" + install -vdm 755 "${pkgdir}/etc" + mv -v "${pkgdir}/usr/share/java/${pkgname}/conf" "${pkgdir}/etc/${pkgname}" - install -Dm644 "$srcdir"/keycloak.service "$pkgdir"/usr/lib/systemd/system/keycloak.service - install -Dm644 "$srcdir"/keycloak.sysusers "$pkgdir"/usr/lib/sysusers.d/keycloak.conf - install -Dm644 "$srcdir"/keycloak.tmpfiles "$pkgdir"/usr/lib/tmpfiles.d/keycloak.conf + ln -svf /var/log/keycloak "${pkgdir}/usr/share/java/${pkgname}/log" + ln -svf /var/lib/keycloak/deployments "${pkgdir}/usr/share/java/${pkgname}/deployments" + ln -svf /var/lib/keycloak/data "${pkgdir}/usr/share/java/${pkgname}/data" - mkdir -p "$pkgdir"/usr/bin - ln -s /opt/keycloak/bin/kcadm.sh "$pkgdir"/usr/bin/kcadm - ln -s /opt/keycloak/bin/kcreg.sh "$pkgdir"/usr/bin/kcreg + install -vDm 644 "${srcdir}"/keycloak.service "${pkgdir}"/usr/lib/systemd/system/keycloak.service + install -vDm 644 "${srcdir}"/keycloak.sysusers "${pkgdir}"/usr/lib/sysusers.d/keycloak.conf + install -vDm 644 "${srcdir}"/keycloak.tmpfiles "${pkgdir}"/usr/lib/tmpfiles.d/keycloak.conf - install -Dm644 "$srcdir"/common.sh "$pkgdir"/opt/keycloak/bin/common.sh + ln -svf /usr/share/java/keycloak/bin/kc.sh "${pkgdir}"/usr/bin/kc.sh + ln -svf /usr/share/java/keycloak/bin/kcadm.sh "${pkgdir}"/usr/bin/kcadm.sh + ln -svf /usr/share/java/keycloak/bin/kcreg.sh "${pkgdir}"/usr/bin/kcreg.sh + + install -Dm 644 LICENSE.txt "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.txt" } # vim: ts=2 sw=2 et: Added: keycloak.install =================================================================== --- keycloak.install (rev 0) +++ keycloak.install 2022-02-18 23:07:15 UTC (rev 1134439) @@ -0,0 +1,7 @@ +post_upgrade() { + if [ "$1" = "17.0.0-2" ]; then + usermod -d /var/lib/keycloak keycloak + fi +} + +# vim: ts=2 sw=2 et: \ No newline at end of file Modified: keycloak.service =================================================================== --- keycloak.service 2022-02-18 23:06:48 UTC (rev 1134438) +++ keycloak.service 2022-02-18 23:07:15 UTC (rev 1134439) @@ -6,10 +6,34 @@ [Service] User=keycloak Group=keycloak -ExecStart=/opt/keycloak/bin/standalone.sh -WorkingDirectory=/opt/keycloak -ReadWritePaths=/opt/keycloak/standalone/data /opt/keycloak/standalone/tmp /opt/keycloak/standalone/log /opt/keycloak/standalone/configuration /opt/keycloak/standalone/deployments +# Running the ExecStartPre as root is not ideal, but at the moment +# the only solution for Quarkus modifying the serialized +# data under <keycloak-home>/lib/quarkus +# Raised upstream as https://github.com/keycloak/keycloak/discussions/10323 +ExecStartPre=!/usr/bin/kc.sh -cf /etc/keycloak/keycloak.conf build + +ExecStart=/usr/bin/kc.sh -cf /etc/keycloak/keycloak.conf start +ReadWritePaths=/var/lib/keycloak +ReadWritePaths=/var/log/keycloak +ReadWritePaths=/usr/share/java/keycloak/lib/quarkus +ReadOnlyPaths=/etc/keycloak + +# Disable timeout logic and wait until process is stopped +TimeoutStopSec=0 + +# SIGTERM signal is used to stop the Java process +KillSignal=SIGTERM + +# Send the signal only to the JVM rather than its control group +KillMode=process + +# Java process is never killed +SendSIGKILL=no + +# When a JVM receives a SIGTERM signal it exits with code 143 +SuccessExitStatus=143 + # Hardening options CapabilityBoundingSet= AmbientCapabilities= Modified: keycloak.sysusers =================================================================== --- keycloak.sysusers 2022-02-18 23:06:48 UTC (rev 1134438) +++ keycloak.sysusers 2022-02-18 23:07:15 UTC (rev 1134439) @@ -1 +1 @@ -u keycloak - "keycloak user" /opt/keycloak - +u keycloak - "keycloak user" /var/lib/keycloak - Modified: keycloak.tmpfiles =================================================================== --- keycloak.tmpfiles 2022-02-18 23:06:48 UTC (rev 1134438) +++ keycloak.tmpfiles 2022-02-18 23:07:15 UTC (rev 1134439) @@ -1,5 +1,3 @@ -z /opt/keycloak/standalone/tmp - keycloak keycloak - -z /opt/keycloak/standalone/data - keycloak keycloak - -z /opt/keycloak/standalone/log - keycloak keycloak - -Z /opt/keycloak/standalone/configuration - keycloak keycloak - -Z /opt/keycloak/standalone/deployments - keycloak keycloak - +z /usr/log/keycloak - keycloak keycloak - +z /var/lib/keycloak/data - keycloak keycloak - +Z /var/lib/keycloak/deployments - keycloak keycloak - \ No newline at end of file Deleted: layers.conf =================================================================== --- layers.conf 2022-02-18 23:06:48 UTC (rev 1134438) +++ layers.conf 2022-02-18 23:07:15 UTC (rev 1134439) @@ -1 +0,0 @@ -layers=keycloak Modified: pin-java-version.patch =================================================================== --- pin-java-version.patch 2022-02-18 23:06:48 UTC (rev 1134438) +++ pin-java-version.patch 2022-02-18 23:07:15 UTC (rev 1134439) @@ -13,7 +13,7 @@ +$JAVA $KC_OPTS -cp $DIRNAME/client/keycloak-admin-cli-${project.version}.jar org.keycloak.client.admin.cli.KcAdmMain "$@" diff --git a/integration/client-cli/client-registration-cli/src/main/bin/kcreg.sh b/integration/client-cli/client-registration-cli/src/main/bin/kcreg.sh -index 83bd4b70e4..0acb8692ce 100755 +index 83bd4b70e4..9cac612b5f 100755 --- a/integration/client-cli/client-registration-cli/src/main/bin/kcreg.sh +++ b/integration/client-cli/client-registration-cli/src/main/bin/kcreg.sh @@ -20,4 +20,6 @@ if [ "x$RESOLVED_NAME" = "x" ]; then @@ -25,3 +25,32 @@ +. "$DIRNAME/common.sh" + +$JAVA $KC_OPTS -cp $DIRNAME/client/keycloak-client-registration-cli-${project.version}.jar org.keycloak.client.registration.cli.KcRegMain "$@" +\ No newline at end of file +diff --git a/quarkus/dist/src/main/content/bin/kc.sh b/quarkus/dist/src/main/content/bin/kc.sh +index 3097ea7a0a..90f134538a 100644 +--- a/quarkus/dist/src/main/content/bin/kc.sh ++++ b/quarkus/dist/src/main/content/bin/kc.sh +@@ -22,6 +22,7 @@ fi + + GREP="grep" + DIRNAME=`dirname "$RESOLVED_NAME"` ++. "$DIRNAME/common.sh" + + SERVER_OPTS="-Dkc.home.dir=$DIRNAME/../ -Djboss.server.config.dir=$DIRNAME/../conf -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Dquarkus-log-max-startup-records=10000" + +@@ -88,11 +89,11 @@ CLASSPATH_OPTS="$DIRNAME/../lib/quarkus-run.jar" + JAVA_RUN_OPTS="$JAVA_OPTS $SERVER_OPTS -cp $CLASSPATH_OPTS io.quarkus.bootstrap.runner.QuarkusEntryPoint ${CONFIG_ARGS#?}" + + if [[ $CONFIG_ARGS = *"--auto-build"* ]]; then +- eval java -Dkc.config.rebuild-and-exit=true $JAVA_RUN_OPTS ++ eval $JAVA -Dkc.config.rebuild-and-exit=true $JAVA_RUN_OPTS + EXIT_CODE=$? + if [ $EXIT_CODE != 0 ]; then + exit $EXIT_CODE + fi + fi + +-eval exec java ${JAVA_RUN_OPTS} +\ No newline at end of file ++eval exec $JAVA ${JAVA_RUN_OPTS} +\ No newline at end of file Deleted: postgresql-module.xml =================================================================== --- postgresql-module.xml 2022-02-18 23:06:48 UTC (rev 1134438) +++ postgresql-module.xml 2022-02-18 23:07:15 UTC (rev 1134439) @@ -1,12 +0,0 @@ -<?xml version="1.0" ?> -<module xmlns="urn:jboss:module:1.3" name="org.postgresql"> - - <resources> - <resource-root path="@JDBC_POSTGRESQL_JAR@"/> - </resources> - - <dependencies> - <module name="javax.api"/> - <module name="javax.transaction.api"/> - </dependencies> -</module>
