The pki CLI has been modified to use the java.ext.dirs property
to load the dependencies instead of listing them one-by-one. The
dependencies are stored as links in /usr/share/pki/lib folder.
This allows the RPM spec to customize the links for different
platforms.

https://fedorahosted.org/pki/ticket/2403

--
Endi S. Dewata
>From 7c13f90b3f6addc36a65bc3f593382f87cf95b3a Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Thu, 21 Jul 2016 05:08:25 +0200
Subject: [PATCH] Removed hard-coded paths in pki CLI.

The pki CLI has been modified to use the java.ext.dirs property
to load the dependencies instead of listing them one-by-one. The
dependencies are stored as links in /usr/share/pki/lib folder.
This allows the RPM spec to customize the links for different
platforms.

https://fedorahosted.org/pki/ticket/2403
---
 base/common/CMakeLists.txt     | 45 ++++++++++++++++++++++++++++++++++++++++++
 base/common/share/etc/pki.conf |  3 +++
 base/java-tools/bin/pki        | 43 ++++------------------------------------
 3 files changed, 52 insertions(+), 39 deletions(-)

diff --git a/base/common/CMakeLists.txt b/base/common/CMakeLists.txt
index 121392512de0b4695c5508fa432bca4f18d167cf..dc5cecf8590f3d5c18afdcf6f5c3b8d73495d45b 100644
--- a/base/common/CMakeLists.txt
+++ b/base/common/CMakeLists.txt
@@ -11,6 +11,51 @@ configure_file(
     ${CMAKE_CURRENT_BINARY_DIR}/etc/pki.conf
 )
 
+# Create /usr/share/pki/lib. This can be customized for different platforms in RPM spec.
+
+add_custom_target(pki-lib ALL)
+
+add_custom_command(
+    TARGET pki-lib
+    COMMAND ${CMAKE_COMMAND} -E make_directory lib
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/commons-cli.jar lib/commons-cli.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/commons-codec.jar lib/commons-codec.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/commons-httpclient.jar lib/commons-httpclient.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/commons-io.jar lib/commons-io.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/commons-lang.jar lib/commons-lang.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/commons-logging.jar lib/commons-logging.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/httpcomponents/httpclient.jar lib/httpclient.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/httpcomponents/httpcore.jar lib/httpcore.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/jackson/jackson-core-asl.jar lib/jackson-core-asl.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/jackson/jackson-jaxrs.jar lib/jackson-jaxrs.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/jackson/jackson-mapper-asl.jar lib/jackson-mapper-asl.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/jackson/jackson-mrbean.jar lib/jackson-mrbean.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/jackson/jackson-smile.jar lib/jackson-smile.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/jackson/jackson-xc.jar lib/jackson-xc.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/jaxb-api.jar lib/jaxb-api.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/lib/java/jss4.jar lib/jss4.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/ldapjdk.jar lib/ldapjdk.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/pki/pki-certsrv.jar lib/pki-certsrv.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/pki/pki-cmsutil.jar lib/pki-cmsutil.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/pki/pki-nsutil.jar lib/pki-nsutil.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/pki/pki-tools.jar lib/pki-tools.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink ${RESTEASY_LIB}/resteasy-atom-provider.jar lib/resteasy-atom-provider.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink ${RESTEASY_LIB}/resteasy-client.jar lib/resteasy-client.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink ${RESTEASY_LIB}/resteasy-jackson-provider.jar lib/resteasy-jackson-provider.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink ${RESTEASY_LIB}/resteasy-jaxb-provider.jar lib/resteasy-jaxb-provider.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink ${RESTEASY_LIB}/jaxrs-api.jar lib/resteasy-jaxrs-api.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink ${RESTEASY_LIB}/resteasy-jaxrs-jandex.jar lib/resteasy-jaxrs-jandex.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink ${RESTEASY_LIB}/resteasy-jaxrs.jar lib/resteasy-jaxrs.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/servlet.jar lib/servlet.jar
+)
+
+install(
+    DIRECTORY
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/
+    DESTINATION
+        ${DATA_INSTALL_DIR}/lib
+)
+
 install(
     FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/share/etc/logging.properties
diff --git a/base/common/share/etc/pki.conf b/base/common/share/etc/pki.conf
index f43d9148c614d8f5ed3b288e02942910d5104807..97f3777fed9d2b5274a4fb305c81234900857a88 100644
--- a/base/common/share/etc/pki.conf
+++ b/base/common/share/etc/pki.conf
@@ -4,5 +4,8 @@ JAVA_HOME=${JAVA_HOME}
 # JNI jar file location
 JNI_JAR_DIR=/usr/lib/java
 
+# PKI library
+PKI_LIB=/usr/share/pki/lib
+
 # logging configuration location
 LOGGING_CONFIG=/usr/share/pki/etc/logging.properties
diff --git a/base/java-tools/bin/pki b/base/java-tools/bin/pki
index c1ba34ead0466e43e2376343de724a168b0c3cf1..ba321be9698b385d2c726c8930f079663089ab6d 100644
--- a/base/java-tools/bin/pki
+++ b/base/java-tools/bin/pki
@@ -76,11 +76,11 @@ class PKICLI(pki.cli.CLI):
             shell=True)
         java_home = value.decode(sys.getfilesystemencoding()).strip()
 
-        # read RESTEasy library path
+        # read PKI library
         value = subprocess.check_output(
-            '. /usr/share/pki/etc/pki.conf && . /etc/pki/pki.conf && echo $RESTEASY_LIB',
+            '. /usr/share/pki/etc/pki.conf && . /etc/pki/pki.conf && echo $PKI_LIB',
             shell=True)
-        resteasy_lib = value.decode(sys.getfilesystemencoding()).strip()
+        pki_lib = value.decode(sys.getfilesystemencoding()).strip()
 
         # read logging configuration path
         value = subprocess.check_output(
@@ -88,44 +88,9 @@ class PKICLI(pki.cli.CLI):
             shell=True)
         logging_config = value.decode(sys.getfilesystemencoding()).strip()
 
-        # construct classpath
-        classpath = [
-            '/usr/share/java/commons-cli.jar',
-            '/usr/share/java/commons-codec.jar',
-            '/usr/share/java/commons-httpclient.jar',
-            '/usr/share/java/commons-io.jar',
-            '/usr/share/java/commons-lang.jar',
-            '/usr/share/java/commons-logging.jar',
-            '/usr/share/java/httpcomponents/httpclient.jar',
-            '/usr/share/java/httpcomponents/httpcore.jar',
-            '/usr/share/java/jackson/jackson-core-asl.jar',
-            '/usr/share/java/jackson/jackson-jaxrs.jar',
-            '/usr/share/java/jackson/jackson-mapper-asl.jar',
-            '/usr/share/java/jackson/jackson-mrbean.jar',
-            '/usr/share/java/jackson/jackson-smile.jar',
-            '/usr/share/java/jackson/jackson-xc.jar',
-            '/usr/share/java/jaxb-api.jar',
-            '/usr/share/java/ldapjdk.jar',
-            '/usr/share/java/servlet.jar',
-            resteasy_lib + '/jaxrs-api.jar',
-            resteasy_lib + '/resteasy-atom-provider.jar',
-            resteasy_lib + '/resteasy-client.jar',
-            resteasy_lib + '/resteasy-jaxb-provider.jar',
-            resteasy_lib + '/resteasy-jaxrs.jar',
-            resteasy_lib + '/resteasy-jaxrs-jandex.jar',
-            resteasy_lib + '/resteasy-jackson-provider.jar',
-            '/usr/share/java/pki/pki-nsutil.jar',
-            '/usr/share/java/pki/pki-cmsutil.jar',
-            '/usr/share/java/pki/pki-certsrv.jar',
-            '/usr/share/java/pki/pki-tools.jar',
-            '/usr/lib64/java/jss4.jar',
-            '/usr/lib/java/jss4.jar'
-        ]
-
         cmd = [
             java_home + '/bin/java',
-            '-cp',
-            ':'.join(classpath),
+            '-Djava.ext.dirs=' + pki_lib,
             '-Djava.util.logging.config.file=' + logging_config,
             'com.netscape.cmstools.cli.MainCLI'
         ]
-- 
2.5.5

>From 1425bc3b420066586e40a71c7e4cd29f14958ebf Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Sat, 23 Jul 2016 01:48:27 +0200
Subject: [PATCH] RPM spec changes for removing hard-coded paths in pki CLI.

https://fedorahosted.org/pki/ticket/2403
---
 specs/pki-core.spec | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/specs/pki-core.spec b/specs/pki-core.spec
index 9faaf14637b21877c00ec1f080468ed14717e711..cd3488143e050a353e34b887cdce9c52cfd21f3d 100644
--- a/specs/pki-core.spec
+++ b/specs/pki-core.spec
@@ -35,9 +35,16 @@
 
 # RESTEasy
 %if 0%{?rhel}
+%define jaxrs_api_jar /usr/share/java/resteasy-base/jaxrs-api.jar
 %define resteasy_lib /usr/share/java/resteasy-base
 %else
+%if 0%{?fedora} >= 25
+%define jaxrs_api_jar /usr/share/java/jboss-jaxrs-2.0-api.jar
 %define resteasy_lib /usr/share/java/resteasy
+%else
+%define jaxrs_api_jar /usr/share/java/resteasy/jaxrs-api.jar
+%define resteasy_lib /usr/share/java/resteasy
+%endif
 %endif
 
 # Dogtag
@@ -107,6 +114,9 @@ BuildRequires:    resteasy-base-jaxrs-api >= 3.0.6-1
 BuildRequires:    resteasy-base-jackson-provider >= 3.0.6-1
 %else
 %if 0%{?fedora} >= 25
+BuildRequires:    jboss-annotations-1.2-api
+BuildRequires:    jboss-jaxrs-2.0-api
+BuildRequires:    jboss-logging
 BuildRequires:    resteasy-atom-provider >= 3.0.17-1
 BuildRequires:    resteasy-client >= 3.0.17-1
 BuildRequires:    resteasy-jaxb-provider >= 3.0.17-1
@@ -799,6 +809,7 @@ cd build
 %if ! %{with_tomcat8}
 	-DWITH_TOMCAT8:BOOL=OFF \
 %endif
+	-DJAXRS_API_JAR=%{jaxrs_api_jar} \
 	-DRESTEASY_LIB=%{resteasy_lib} \
 %if ! %{with server}
 	-DWITH_SERVER:BOOL=OFF \
@@ -844,6 +855,33 @@ ln -s %{_datadir}/pki/java-tools/KRATool.cfg %{buildroot}%{_datadir}/pki/java-to
 
 %if %{with server}
 
+# Customize symlinks for each platform
+%if 0%{?fedora} >= 25
+    # /usr/share/pki/lib
+    rm -f %{buildroot}%{_datadir}/pki/lib/scannotation.jar
+    rm -f %{buildroot}%{_datadir}/pki/lib/resteasy-jaxrs-api.jar
+    rm -f %{buildroot}%{_datadir}/pki/lib/resteasy-jaxrs-jandex.jar
+    ln -sf %{jaxrs_api_jar} %{buildroot}%{_datadir}/pki/lib/jboss-jaxrs-2.0-api.jar
+    ln -sf /usr/share/java/jboss-logging/jboss-logging.jar %{buildroot}%{_datadir}/pki/lib/jboss-logging.jar
+    ln -sf /usr/share/java/jboss-annotations-1.2-api/jboss-annotations-api_1.2_spec.jar %{buildroot}%{_datadir}/pki/lib/jboss-annotations-api_1.2_spec.jar
+
+%else
+
+if [ -f /etc/debian_version ]; then
+    # /usr/share/pki/lib
+    ln -sf /usr/share/java/httpclient.jar %{buildroot}%{_datadir}/pki/lib/httpclient.jar
+    ln -sf /usr/share/java/httpcore.jar %{buildroot}%{_datadir}/pki/lib/httpcore.jar
+    ln -sf /usr/share/java/jackson-core-asl.jar %{buildroot}%{_datadir}/pki/lib/jackson-core-asl.jar
+    ln -sf /usr/share/java/jackson-jaxrs.jar %{buildroot}%{_datadir}/pki/lib/jackson-jaxrs.jar
+    ln -sf /usr/share/java/jackson-mapper-asl.jar %{buildroot}%{_datadir}/pki/lib/jackson-mapper-asl.jar
+    ln -sf /usr/share/java/jackson-mrbean.jar %{buildroot}%{_datadir}/pki/lib/jackson-mrbean.jar
+    ln -sf /usr/share/java/jackson-smile.jar %{buildroot}%{_datadir}/pki/lib/jackson-smile.jar
+    ln -sf /usr/share/java/jackson-xc.jar %{buildroot}%{_datadir}/pki/lib/jackson-xc.jar
+    ln -sf /usr/share/java/jss4.jar %{buildroot}%{_datadir}/pki/lib/jss4.jar
+fi
+
+%endif
+
 %if ! 0%{?rhel}
 # Scanning the python code with pylint.
 %{__python2} ../pylint-build-scan.py rpm --prefix %{buildroot}
@@ -1001,6 +1039,7 @@ systemctl daemon-reload
 
 %if 0%{?package_fedora_packages} || 0%{?package_rhel_packages}
 %files -n pki-base-java
+%{_datadir}/pki/lib/
 %dir %{_javadir}/pki
 %{_javadir}/pki/pki-cmsutil.jar
 %{_javadir}/pki/pki-nsutil.jar
-- 
2.5.5

_______________________________________________
Pki-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/pki-devel

Reply via email to