Date: Sunday, June 20, 2021 @ 01:18:07
  Author: anthraxx
Revision: 965731

upgpkg: keycloak 14.0.0-3: pin java runtime for exeuction

Dependency constraint won't solve the issue as the default java can still be
any arbitrary java. In cases where we need to enforce a specific java we need
to hand select a java target and patch the runtime execution to actually force
use that specific version.

As keycloak shell scripts are out of tree and somewhere deep down the rabbit
hole lets use a patch file that we dyinamicall adjust and execute during
packaging.

Added:
  keycloak/trunk/pin-java-version.patch
Modified:
  keycloak/trunk/PKGBUILD

------------------------+
 PKGBUILD               |   27 ++++++++++++++++----
 pin-java-version.patch |   61 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 82 insertions(+), 6 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2021-06-19 23:45:25 UTC (rev 965730)
+++ PKGBUILD    2021-06-20 01:18:07 UTC (rev 965731)
@@ -4,13 +4,14 @@
 pkgname=keycloak
 pkgver=14.0.0
 _postgresql_jdbc=42.2.22
-pkgrel=2
+_java=11
+pkgrel=3
 pkgdesc="Open Source Identity and Access Management For Modern Applications 
and Services"
 arch=('any')
 url="https://www.keycloak.org/";
 license=('Apache')
-depends=('java-runtime>=8' 'java-runtime<=15' 'grep' 'bash' 'coreutils' 
'util-linux')
-makedepends=('maven' 'git' 'java-environment=8')
+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
@@ -27,7 +28,8 @@
         keycloak.tmpfiles
         layers.conf
         postgresql-module.xml
-        
https://jdbc.postgresql.org/download/postgresql-${_postgresql_jdbc}.jar)
+        https://jdbc.postgresql.org/download/postgresql-${_postgresql_jdbc}.jar
+        pin-java-version.patch)
 
sha512sums=('3bb865c71c62105420bc8975018441b9bab93326a3a8d63f12f390c6dcc72d6f88bdf44c61de6137b72cf5bacdda191fb06f7b1e363a6698a055193726c701c9'
             
'dd10a38e4c8867de6d1fcbb4939c6c5946684842462eba3d5355bf1de13fa059edfd5eba37adce587c824ddd618b6bb88d4bbe1ee568ca5abd0f72296da3ddfe'
             
'c53b734598ccf675930754514bd2af628355025197e77541e5acb8718629a8ece763c814e8373278758a30475e6a716febeff10bdebf0847d914bc193e732c79'
@@ -34,12 +36,23 @@
             
'9382b42f09040e34fe1a27d9ff4fb87cabd41525ca26f8ea9629df0169cf93d95cc4bb62bcc5c2ca30efdfd7eeeb13a6f090df9a05823baf701ba729a47f6fd1'
             
'd54a04c120edb933c4f7168460bd813ff92a4e3771cedcabfeeb76c5d3e057b3cd0d0486dc11ddbd91e8d87ca90193e4c74cc3414e45106dd556d455ac7e60b2'
             
'5eece4f3eb57372969f0e5319804198b546455828e938ff7f37bbcfb58be08efde43a5b0376c98f359c4bc5eb069e0cd9410daefe19da1c03e9e9c57d3c1b75b'
-            
'1464b50c1777347ca9b5d495aff6dfff7e87c5a3b90d18518f5c8ec9b9cedbe05a501a79f54363fc2d609e6578a39be0b373f22b22bddece15179e9a8f06421b')
+            
'1464b50c1777347ca9b5d495aff6dfff7e87c5a3b90d18518f5c8ec9b9cedbe05a501a79f54363fc2d609e6578a39be0b373f22b22bddece15179e9a8f06421b'
+            
'55a9f861cf5be2bdc64a4b831fbd4d832fae5b88c8c7d620b6ee0622602cce600124e571fff9847b5eb492bf9d522a9ead4179a60d0f90f4f1f70b1d530bde66')
 
+prepare() {
+  cd $pkgname-$pkgver
+  # Pin the java version. Keycloak produces all those shell scripts deep down
+  # the rabbit hole so applying them during packaging is the best we can get.
+  # Create a local copy and dynamically adjust the patch.
+  cp ../pin-java-version.patch .
+  sed "s|java-11-openjdk|java-${_java}-openjdk|g" -i pin-java-version.patch
+  sed "s|14.0.0|${pkgver}|g" -i pin-java-version.patch
+}
+
 build() {
   cd $pkgname-$pkgver
 
-  export PATH="/usr/lib/jvm/java-8-openjdk/bin:$PATH"
+  export PATH="/usr/lib/jvm/java-${_java}-openjdk/bin:$PATH"
   mvn -Pdistribution \
     -pl distribution/server-dist \
     -am \
@@ -70,6 +83,8 @@
   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
+
+  patch -Np1 -d "$pkgdir"/opt/keycloak/bin < pin-java-version.patch
 }
 
 # vim: ts=2 sw=2 et:

Added: pin-java-version.patch
===================================================================
--- pin-java-version.patch                              (rev 0)
+++ pin-java-version.patch      2021-06-20 01:18:07 UTC (rev 965731)
@@ -0,0 +1,61 @@
+From dbaf85e82f8da8ef85ce73bb882da1763952b86d Mon Sep 17 00:00:00 2001
+From: anthraxx <[email protected]>
+Date: Sun, 20 Jun 2021 02:45:24 +0200
+Subject: [PATCH] pin java version
+
+---
+ common.sh | 4 ++++
+ kcadm.sh  | 9 ++++-----
+ kcreg.sh  | 4 +++-
+ 3 files changed, 11 insertions(+), 6 deletions(-)
+
+diff --git a/common.sh b/common.sh
+index 48998b6..943d295 100755
+--- a/common.sh
++++ b/common.sh
+@@ -30,3 +30,7 @@ setDefaultModularJvmOptions() {
+     fi
+   fi
+ }
++
++# Pin java version
++export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
++export JAVA="$JAVA_HOME/bin/java"
+diff --git a/kcadm.sh b/kcadm.sh
+index e01a22a..64f1f54 100755
+--- a/kcadm.sh
++++ b/kcadm.sh
+@@ -20,14 +20,13 @@ if [ "x$RESOLVED_NAME" = "x" ]; then
+ fi
+ 
+ DIRNAME=`dirname "$RESOLVED_NAME"`
+-
++. "$DIRNAME/common.sh"
+ 
+ # Uncomment out these lines if you are integrating with `kcinit`
+ #if [ "$1" = "config" ]; then
+-#    java $KC_OPTS -cp $DIRNAME/client/keycloak-admin-cli-14.0.0.jar 
org.keycloak.client.admin.cli.KcAdmMain "$@"
++#    $JAVA $KC_OPTS -cp $DIRNAME/client/keycloak-admin-cli-14.0.0.jar 
org.keycloak.client.admin.cli.KcAdmMain "$@"
+ #else
+-#    java $KC_OPTS -cp $DIRNAME/client/keycloak-admin-cli-14.0.0.jar 
org.keycloak.client.admin.cli.KcAdmMain "$@" --noconfig --token $(kcinit token 
admin-cli) --server $(kcinit show server)
++#    $JAVA $KC_OPTS -cp $DIRNAME/client/keycloak-admin-cli-14.0.0.jar 
org.keycloak.client.admin.cli.KcAdmMain "$@" --noconfig --token $(kcinit token 
admin-cli) --server $(kcinit show server)
+ #fi
+ # Remove the next line if you have enabled kcinit
+-java $KC_OPTS -cp $DIRNAME/client/keycloak-admin-cli-14.0.0.jar 
org.keycloak.client.admin.cli.KcAdmMain "$@"
+-
++$JAVA $KC_OPTS -cp $DIRNAME/client/keycloak-admin-cli-14.0.0.jar 
org.keycloak.client.admin.cli.KcAdmMain "$@"
+diff --git a/kcreg.sh b/kcreg.sh
+index 9961dbf..c05ce40 100755
+--- a/kcreg.sh
++++ b/kcreg.sh
+@@ -20,4 +20,6 @@ if [ "x$RESOLVED_NAME" = "x" ]; then
+ fi
+ 
+ DIRNAME=`dirname "$RESOLVED_NAME"`
+-java $KC_OPTS -cp $DIRNAME/client/keycloak-client-registration-cli-14.0.0.jar 
org.keycloak.client.registration.cli.KcRegMain "$@"
++. "$DIRNAME/common.sh"
++
++$JAVA $KC_OPTS -cp 
$DIRNAME/client/keycloak-client-registration-cli-14.0.0.jar 
org.keycloak.client.registration.cli.KcRegMain "$@"
+-- 
+2.32.0
+

Reply via email to