From 9f3102d4bcc9d5a585b46b9b974cf4a0ec372704 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Wed, 18 Sep 2024 11:40:02 +1200 Subject: [PATCH 01/18] feat: openjdk-17 slices Add openjdk-17 slices except AWT slice as it needs harfbuzz to be merged. --- slices/openjdk-17-jdk-headless.yaml | 147 ++++++++++++++++ slices/openjdk-17-jre-headless.yaml | 160 ++++++++++++++++++ .../openjdk-17-jdk-headless/Main.java | 5 + .../openjdk-17-jdk-headless/task.yaml | 31 ++++ .../openjdk-17-jre-headless/Main.java | 5 + .../ReadCertificate.java | 14 ++ .../openjdk-17-jre-headless/certificate.pem | 21 +++ .../openjdk-17-jre-headless/task.yaml | 38 +++++ 8 files changed, 421 insertions(+) create mode 100644 slices/openjdk-17-jdk-headless.yaml create mode 100644 slices/openjdk-17-jre-headless.yaml create mode 100644 tests/spread/integration/openjdk-17-jdk-headless/Main.java create mode 100644 tests/spread/integration/openjdk-17-jdk-headless/task.yaml create mode 100644 tests/spread/integration/openjdk-17-jre-headless/Main.java create mode 100644 tests/spread/integration/openjdk-17-jre-headless/ReadCertificate.java create mode 100644 tests/spread/integration/openjdk-17-jre-headless/certificate.pem create mode 100644 tests/spread/integration/openjdk-17-jre-headless/task.yaml diff --git a/slices/openjdk-17-jdk-headless.yaml b/slices/openjdk-17-jdk-headless.yaml new file mode 100644 index 000000000..f47a166e1 --- /dev/null +++ b/slices/openjdk-17-jdk-headless.yaml @@ -0,0 +1,147 @@ +package: openjdk-17-jdk-headless + +essential: + - openjdk-17-jdk-headless_copyright + +slices: + bins: + essential: + - openjdk-17-jre-headless_core + - openjdk-17-jre-headless_javac + contents: + /usr/lib/jvm/java-17-openjdk-*/bin/jar: + /usr/lib/jvm/java-17-openjdk-*/bin/jarsigner: + /usr/lib/jvm/java-17-openjdk-*/bin/javac: + /usr/lib/jvm/java-17-openjdk-*/bin/javadoc: + /usr/lib/jvm/java-17-openjdk-*/bin/javap: + /usr/lib/jvm/java-17-openjdk-*/bin/jcmd: + /usr/lib/jvm/java-17-openjdk-*/bin/jdb: + /usr/lib/jvm/java-17-openjdk-*/bin/jdeprscan: + /usr/lib/jvm/java-17-openjdk-*/bin/jdeps: + /usr/lib/jvm/java-17-openjdk-*/bin/jfr: + /usr/lib/jvm/java-17-openjdk-*/bin/jhsdb: + arch: + - amd64 + - arm64 + /usr/lib/jvm/java-17-openjdk-*/bin/jimage: + /usr/lib/jvm/java-17-openjdk-*/bin/jinfo: + /usr/lib/jvm/java-17-openjdk-*/bin/jlink: + /usr/lib/jvm/java-17-openjdk-*/bin/jmap: + /usr/lib/jvm/java-17-openjdk-*/bin/jmod: + /usr/lib/jvm/java-17-openjdk-*/bin/jps: + /usr/lib/jvm/java-17-openjdk-*/bin/jrunscript: + /usr/lib/jvm/java-17-openjdk-*/bin/jshell: + /usr/lib/jvm/java-17-openjdk-*/bin/jstack: + /usr/lib/jvm/java-17-openjdk-*/bin/jstat: + /usr/lib/jvm/java-17-openjdk-*/bin/jstatd: + /usr/lib/jvm/java-17-openjdk-*/bin/serialver: + + modules: + essential: + - openjdk-17-jdk-headless_bins + contents: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.base.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.compiler.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.datatransfer.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.desktop.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.instrument.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.logging.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.management.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.management.rmi.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.naming.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.net.http.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.prefs.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.rmi.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.scripting.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.se.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.security.jgss.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.security.sasl.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.smartcardio.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.sql.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.sql.rowset.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.transaction.xa.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.xml.crypto.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/java.xml.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.accessibility.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.attach.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.charsets.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.compiler.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.crypto.cryptoki.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.crypto.ec.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.dynalink.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.editpad.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.hotspot.agent.jmod: + arch: + - amd64 + - arm64 + - ppc64el + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.httpserver.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.incubator.foreign.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.incubator.vector.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.internal.ed.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.internal.jvmstat.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.internal.le.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.internal.opt.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.internal.vm.ci.jmod: + arch: + - amd64 + - arm64 + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.internal.vm.compiler.jmod: + arch: + - amd64 + - arm64 + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.internal.vm.compiler.management.jmod: + arch: + - amd64 + - arm64 + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jartool.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.javadoc.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jcmd.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jconsole.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jdeps.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jdi.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jdwp.agent.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jfr.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jlink.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jpackage.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jshell.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jsobject.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.jstatd.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.localedata.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.management.agent.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.management.jfr.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.management.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.naming.dns.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.naming.rmi.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.net.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.nio.mapmode.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.random.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.sctp.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.security.auth.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.security.jgss.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.unsupported.desktop.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.unsupported.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.xml.dom.jmod: + /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.zipfs.jmod: + + headers: + essential: + - openjdk-17-jre-headless_core + contents: + /usr/lib/jvm/java-17-openjdk-*/include/classfile_constants.h: + /usr/lib/jvm/java-17-openjdk-*/include/jni.h: + /usr/lib/jvm/java-17-openjdk-*/include/jvmti.h: + /usr/lib/jvm/java-17-openjdk-*/include/jvmticmlr.h: + /usr/lib/jvm/java-17-openjdk-*/include/linux/jni_md.h: + + debug-headers: + essential: + - openjdk-17-jre-headless_core + contents: + /usr/lib/jvm/java-17-openjdk-*/include/jdwpTransport.h: + + copyright: + essential: + - openjdk-17-jre-headless_copyright + contents: + /usr/share/doc/openjdk-17-jdk-headless: diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml new file mode 100644 index 000000000..21b08b214 --- /dev/null +++ b/slices/openjdk-17-jre-headless.yaml @@ -0,0 +1,160 @@ +package: openjdk-17-jre-headless + +essential: + - openjdk-17-jre-headless_copyright + +slices: + + standard: + essential: + - openjdk-17-jre-headless_core + - openjdk-17-jre-headless_prefs + - openjdk-17-jre-headless_rmi + - openjdk-17-jre-headless_security + + core: + essential: + - libc6_libs + - libgcc-s1_libs + - libstdc++6_libs + - zlib1g_libs + contents: + /etc/java-17-openjdk/jvm-*.cfg: + /etc/java-17-openjdk/logging.properties: + /etc/java-17-openjdk/management/jmxremote.access: + /etc/java-17-openjdk/management/management.properties: + /etc/java-17-openjdk/net.properties: + /etc/java-17-openjdk/security/java.policy: + /etc/java-17-openjdk/security/java.security: + /usr/lib/jvm/java-17-openjdk-*/bin/java: + /usr/lib/jvm/java-17-openjdk-*/conf/logging.properties: + /usr/lib/jvm/java-17-openjdk-*/conf/management/jmxremote.access: + /usr/lib/jvm/java-17-openjdk-*/conf/management/management.properties: + /usr/lib/jvm/java-17-openjdk-*/conf/net.properties: + /usr/lib/jvm/java-17-openjdk-*/conf/security/java.policy: + /usr/lib/jvm/java-17-openjdk-*/conf/security/java.security: + /usr/lib/jvm/java-17-openjdk-*/lib/jexec: + /usr/lib/jvm/java-17-openjdk-*/lib/jspawnhelper: + /usr/lib/jvm/java-17-openjdk-*/lib/jvm.cfg: + /usr/lib/jvm/java-17-openjdk-*/lib/jvm.cfg-default: + /usr/lib/jvm/java-17-openjdk-*/lib/libextnet.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libjava.so: + # lib/modules support + /usr/lib/jvm/java-17-openjdk-*/lib/libjimage.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libjli.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libjsig.so: + # required for IO. + /usr/lib/jvm/java-17-openjdk-*/lib/libnet.so: + # required for IO. + /usr/lib/jvm/java-17-openjdk-*/lib/libnio.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libverify.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libzip.so: + /usr/lib/jvm/java-17-openjdk-*/lib/modules: + /usr/lib/jvm/java-17-openjdk-*/lib/server/libjsig.so: + /usr/lib/jvm/java-17-openjdk-*/lib/server/libjvm.so: + /usr/lib/jvm/java-17-openjdk-*/lib/tzdb.dat: + + prefs: + essential: + - openjdk-17-jre-headless_core + contents: + /usr/lib/jvm/java-17-openjdk-*/lib/libprefs.so: + + rmi: + essential: + - openjdk-17-jre-headless_core + contents: + /usr/lib/jvm/java-17-openjdk-*/lib/librmi.so: + + stcp: + essential: + - openjdk-17-jre-headless_core + contents: + /usr/lib/jvm/java-17-openjdk-*/lib/libsctp.so: + + debug: + essential: + - openjdk-17-jre-headless_core + contents: + /usr/lib/jvm/java-17-openjdk-*/lib/libattach.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libdt_socket.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libinstrument.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libjdwp.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libsaproc.so: + arch: + - amd64 + - arm64 + - armhf + - ppc64el + + management: + essential: + - openjdk-17-jre-headless_core + contents: + /etc/java-17-openjdk/management/jmxremote.access: + /etc/java-17-openjdk/management/management.properties: + /usr/lib/jvm/java-17-openjdk-*/conf/management/jmxremote.access: + /usr/lib/jvm/java-17-openjdk-*/conf/management/management.properties: + /usr/lib/jvm/java-17-openjdk-*/lib/libmanagement.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libmanagement_agent.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libmanagement_ext.so: + + security: + essential: + - libnss3_libs + - libpcsclite1_libs + - openjdk-17-jre-headless_core + contents: + /etc/java-17-openjdk/security/blocked.certs: + /etc/java-17-openjdk/security/default.policy: + /etc/java-17-openjdk/security/nss.cfg: + /etc/java-17-openjdk/security/policy/limited/default_US_export.policy: + /etc/java-17-openjdk/security/policy/limited/default_local.policy: + /etc/java-17-openjdk/security/policy/limited/exempt_local.policy: + /etc/java-17-openjdk/security/policy/unlimited/default_US_export.policy: + /etc/java-17-openjdk/security/policy/unlimited/default_local.policy: + /etc/java-17-openjdk/security/public_suffix_list.dat: + /usr/lib/jvm/java-17-openjdk-*/conf/security/nss.cfg: + /usr/lib/jvm/java-17-openjdk-*/conf/security/policy/limited/default_US_export.policy: + /usr/lib/jvm/java-17-openjdk-*/conf/security/policy/limited/default_local.policy: + /usr/lib/jvm/java-17-openjdk-*/conf/security/policy/limited/exempt_local.policy: + /usr/lib/jvm/java-17-openjdk-*/conf/security/policy/unlimited/default_US_export.policy: + /usr/lib/jvm/java-17-openjdk-*/conf/security/policy/unlimited/default_local.policy: + /usr/lib/jvm/java-17-openjdk-*/lib/libj2gss.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libj2pcsc.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libj2pkcs11.so: + /usr/lib/jvm/java-17-openjdk-*/lib/libjaas.so: + /usr/lib/jvm/java-17-openjdk-*/lib/security/blocked.certs: + /usr/lib/jvm/java-17-openjdk-*/lib/security/cacerts: + /usr/lib/jvm/java-17-openjdk-*/lib/security/default.policy: + /usr/lib/jvm/java-17-openjdk-*/lib/security/public_suffix_list.dat: + + tools: + essential: + - openjdk-17-jre-headless_core + contents: + /usr/lib/jvm/java-17-openjdk-*/bin/keytool: + /usr/lib/jvm/java-17-openjdk-*/bin/rmiregistry: + /usr/lib/jvm/java-17-openjdk-amd64/bin/jpackage: + arch: + - amd64 + + jfr: + essential: + - openjdk-17-jre-headless_core + contents: + /etc/java-17-openjdk/jfr/default.jfc: + /etc/java-17-openjdk/jfr/profile.jfc: + /usr/lib/jvm/java-17-openjdk-*/lib/jfr/default.jfc: + /usr/lib/jvm/java-17-openjdk-*/lib/jfr/profile.jfc: + /usr/lib/jvm/java-17-openjdk-*/lib/jrt-fs.jar: + + javac: + essential: + - openjdk-17-jre-headless_core + contents: + /usr/lib/jvm/java-17-openjdk-*/lib/ct.sym: + + copyright: + contents: + /usr/share/doc/openjdk-17-jre-headless/copyright: diff --git a/tests/spread/integration/openjdk-17-jdk-headless/Main.java b/tests/spread/integration/openjdk-17-jdk-headless/Main.java new file mode 100644 index 000000000..40b5eeef0 --- /dev/null +++ b/tests/spread/integration/openjdk-17-jdk-headless/Main.java @@ -0,0 +1,5 @@ +public class Main { + public static void main(String[] args){ + System.out.println("Hello world"); + } +} diff --git a/tests/spread/integration/openjdk-17-jdk-headless/task.yaml b/tests/spread/integration/openjdk-17-jdk-headless/task.yaml new file mode 100644 index 000000000..ff68a8858 --- /dev/null +++ b/tests/spread/integration/openjdk-17-jdk-headless/task.yaml @@ -0,0 +1,31 @@ +summary: Integration tests for openjdk-17-jdk-headless + +environment: + SLICE/bins: "bins" + SLICE/modules: "modules" + +execute: | + # Test different slice installations + echo "SLICE=${SLICE}" + rootfs="$(install-slices openjdk-17-jdk-headless_${SLICE})" + cp Main.java ${rootfs}/ + cd ${rootfs} + mkdir -p proc/self + + case ${SLICE} in + bins) + for java in `find usr/lib/jvm -name java`; do + ln -sf /${java} proc/self/exe + chroot . ${java} --version + chroot . ${java} /Main.java + done + ;; + modules) + mkdir -p ${rootfs}/opt/java + cd ${rootfs} + for jlink in `find usr/lib/jvm -name jlink`; do + ln -sf /${jlink} proc/self/exe + chroot . ${jlink} --add-modules java.base --output ${rootfs}/opt/java + done + ;; + esac diff --git a/tests/spread/integration/openjdk-17-jre-headless/Main.java b/tests/spread/integration/openjdk-17-jre-headless/Main.java new file mode 100644 index 000000000..40b5eeef0 --- /dev/null +++ b/tests/spread/integration/openjdk-17-jre-headless/Main.java @@ -0,0 +1,5 @@ +public class Main { + public static void main(String[] args){ + System.out.println("Hello world"); + } +} diff --git a/tests/spread/integration/openjdk-17-jre-headless/ReadCertificate.java b/tests/spread/integration/openjdk-17-jre-headless/ReadCertificate.java new file mode 100644 index 000000000..ef92fd99b --- /dev/null +++ b/tests/spread/integration/openjdk-17-jre-headless/ReadCertificate.java @@ -0,0 +1,14 @@ +import java.security.cert.*; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; + +public class ReadCertificate { + + public static void main(String[] args) throws Throwable { + byte[] pem = Files.readAllBytes(Path.of("certificate.pem")); + java.security.cert.Certificate cert = CertificateFactory.getInstance("X509").generateCertificate(new ByteArrayInputStream(pem)); + if (cert == null) + throw new RuntimeException("It should be possible to decode a certificate"); + } +} diff --git a/tests/spread/integration/openjdk-17-jre-headless/certificate.pem b/tests/spread/integration/openjdk-17-jre-headless/certificate.pem new file mode 100644 index 000000000..645e9f80c --- /dev/null +++ b/tests/spread/integration/openjdk-17-jre-headless/certificate.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDazCCAlOgAwIBAgIULvuqN3MiptnZSYS9y1qJAZYKFA4wDQYJKoZIhvcNAQEL +BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM +GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDA4MTUwMjQzNDhaFw0yNTA4 +MTUwMjQzNDhaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw +HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDm3990peBuPYaz0UEEc75Q7i79P4RzrD84MxhDpoPs +MSdnmO3rTkIG84Wp72+8T7TGjGjBhX++8UmZLrXy2AfcejZi3JcddMWH4V5XEnAj +hTBe1HLkiotayZst/cxuTP6KmuahjsROAqriCv/A4BBA8KjYx1e4E9k9+81FreZy +PJ8p3m7R8qZ/DtjuW1aMQ3oDRKA/iqQhLHVpJy/iYiyjwTdJm6/lA3ywGCr6ZMWm +9tWUT+4TvhyRM67Y0gcCtH51cwxPqUFGEKAkLWIu2fS6DaoXtHylxgGeKKPes3JX +uSn9QezEEqvrgLFQRqIUS8tNZFEhoJQ7dmxMP/XKAD51AgMBAAGjUzBRMB0GA1Ud +DgQWBBSb70j+xaI3eTxp4H7MDm1MLVRGNTAfBgNVHSMEGDAWgBSb70j+xaI3eTxp +4H7MDm1MLVRGNTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAp +0GIjKtwvD7BkQy+cf3dsdwYodxoIYl4E8UvHfBSPQQfFNh+chHPmrNYRuFM3Q6sT +ogNhHKLecQMK4tNUDa/vVRGnqmZVWjxqLnyH/qFKtakqPB6h6x4h50huzA+twhNm +SDjg3QqqpOuUzrs77JqYkxSjqd0QgmwmgxOdbcF0SY+ebQhAd0UXY7wIs6ByDEHO +kElgJmnGKhOpf1SFpQh2qpKGq/MvcdHWN4oKri440wCf+czkrOTyGVc275oTbRnM +Z76Ro4JDuomyWeR9iQ5pP5ug4ciflLa7hlYcH0xJbF3b2M3BlnUYKMqih/TjqKdr +NBs121h64SPY0gh7kIvF +-----END CERTIFICATE----- diff --git a/tests/spread/integration/openjdk-17-jre-headless/task.yaml b/tests/spread/integration/openjdk-17-jre-headless/task.yaml new file mode 100644 index 000000000..2c941f517 --- /dev/null +++ b/tests/spread/integration/openjdk-17-jre-headless/task.yaml @@ -0,0 +1,38 @@ +summary: Integration tests for openjdk-17-jre-headless + +environment: +# SLICE/core: "core" + SLICE/debug: "debug" + SLICE/jfr: "jfr" +# SLICE/management: "management" + SLICE/security: "security" +# SLICE/stcp: "stcp" +# SLICE/tools: "tools" + +execute: | + # Test different slice installations + echo "SLICE=${SLICE}" + rootfs="$(install-slices openjdk-17-jre-headless_${SLICE} busybox_bins)" + cp Main.java ${rootfs}/ + cp ReadCertificate.java ${rootfs}/ + cp certificate.pem ${rootfs}/ + cd ${rootfs} + mkdir -p proc/self + for java in `find usr/lib/jvm -name java`; do + ln -sf /${java} proc/self/exe + chroot . ${java} --version + case ${SLICE} in + classescache) + chroot . ${java} -XX:ArchiveClassesAtExit=archive.cds /Main.java + ;; + debug) + chroot . ${java} -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 /Main.java + ;; + jfr) + chroot . ${java} -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=dump.jfr /Main.java + ;; + security) + chroot . ${java} /ReadCertificate.java + ;; + esac + done From b2a5d050439c34cc0ce45f5e0b90f2638a7c7ca7 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Wed, 18 Sep 2024 17:17:18 +1200 Subject: [PATCH 02/18] fix: tools depend on security keytool requires security slice to be installed to work. --- slices/openjdk-17-jre-headless.yaml | 2 +- tests/spread/integration/openjdk-17-jre-headless/task.yaml | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml index 21b08b214..bb39bd177 100644 --- a/slices/openjdk-17-jre-headless.yaml +++ b/slices/openjdk-17-jre-headless.yaml @@ -131,7 +131,7 @@ slices: tools: essential: - - openjdk-17-jre-headless_core + - openjdk-17-jre-headless_security contents: /usr/lib/jvm/java-17-openjdk-*/bin/keytool: /usr/lib/jvm/java-17-openjdk-*/bin/rmiregistry: diff --git a/tests/spread/integration/openjdk-17-jre-headless/task.yaml b/tests/spread/integration/openjdk-17-jre-headless/task.yaml index 2c941f517..508cdb6e9 100644 --- a/tests/spread/integration/openjdk-17-jre-headless/task.yaml +++ b/tests/spread/integration/openjdk-17-jre-headless/task.yaml @@ -7,7 +7,7 @@ environment: # SLICE/management: "management" SLICE/security: "security" # SLICE/stcp: "stcp" -# SLICE/tools: "tools" + SLICE/tools: "tools" execute: | # Test different slice installations @@ -34,5 +34,9 @@ execute: | security) chroot . ${java} /ReadCertificate.java ;; + tools) + DNAME="CN=Sample Cert, OU=R&D, O=Company Ltd., L=Dublin 4, S=Dublin, C=IE" + chroot . $(dirname ${java})/keytool -genkeypair -keystore foo -storepass barbar -keyalg RSA -dname "$DNAME" + ;; esac done From 27036a766a5b61b568fa1d265bdeeee08c48233b Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Tue, 24 Sep 2024 11:32:15 +1200 Subject: [PATCH 03/18] feat: add classescache slice Classes cache https://openjdk.org/jeps/310 is used to improve startup and footprint of the JVM. --- slices/openjdk-17-jre-headless.yaml | 6 ++++++ tests/spread/integration/openjdk-17-jre-headless/task.yaml | 2 ++ 2 files changed, 8 insertions(+) diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml index bb39bd177..ca76072c2 100644 --- a/slices/openjdk-17-jre-headless.yaml +++ b/slices/openjdk-17-jre-headless.yaml @@ -12,6 +12,12 @@ slices: - openjdk-17-jre-headless_rmi - openjdk-17-jre-headless_security + classescache: + essential: + - openjdk-17-jre-headless_core + contents: + /usr/lib/jvm/java-17-openjdk-amd64/lib/classlist: + core: essential: - libc6_libs diff --git a/tests/spread/integration/openjdk-17-jre-headless/task.yaml b/tests/spread/integration/openjdk-17-jre-headless/task.yaml index 508cdb6e9..31d877c5e 100644 --- a/tests/spread/integration/openjdk-17-jre-headless/task.yaml +++ b/tests/spread/integration/openjdk-17-jre-headless/task.yaml @@ -2,6 +2,7 @@ summary: Integration tests for openjdk-17-jre-headless environment: # SLICE/core: "core" + SLICE/classescache: "classescache" SLICE/debug: "debug" SLICE/jfr: "jfr" # SLICE/management: "management" @@ -23,6 +24,7 @@ execute: | chroot . ${java} --version case ${SLICE} in classescache) + chroot . ${java} -Xshare:dump chroot . ${java} -XX:ArchiveClassesAtExit=archive.cds /Main.java ;; debug) From 85be9960ea51eb8d5cb6929d4e3710dd2f18ec04 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Tue, 24 Sep 2024 11:36:51 +1200 Subject: [PATCH 04/18] feat: amend standard slice Include management, debug and jfr into the standard slice. --- slices/openjdk-17-jre-headless.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml index ca76072c2..d239cd1b8 100644 --- a/slices/openjdk-17-jre-headless.yaml +++ b/slices/openjdk-17-jre-headless.yaml @@ -8,6 +8,9 @@ slices: standard: essential: - openjdk-17-jre-headless_core + - openjdk-17-jre-headless_debug + - openjdk-17-jre-headless_jfr + - openjdk-17-jre-headless_management - openjdk-17-jre-headless_prefs - openjdk-17-jre-headless_rmi - openjdk-17-jre-headless_security From 5a73e9e1534de46ed2d5fe4588976eeb794767c8 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Tue, 24 Sep 2024 11:55:08 +1200 Subject: [PATCH 05/18] fix: use wildcard in classescache --- slices/openjdk-17-jre-headless.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml index d239cd1b8..ca0a7d824 100644 --- a/slices/openjdk-17-jre-headless.yaml +++ b/slices/openjdk-17-jre-headless.yaml @@ -19,7 +19,7 @@ slices: essential: - openjdk-17-jre-headless_core contents: - /usr/lib/jvm/java-17-openjdk-amd64/lib/classlist: + /usr/lib/jvm/java-17-openjdk-*/lib/classlist: core: essential: From ea770343a8a71c9896368854017f646e3adcdfb4 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Tue, 24 Sep 2024 13:39:29 +1200 Subject: [PATCH 06/18] fix: remove management config from core slice --- slices/openjdk-17-jre-headless.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml index ca0a7d824..e33503bd6 100644 --- a/slices/openjdk-17-jre-headless.yaml +++ b/slices/openjdk-17-jre-headless.yaml @@ -30,15 +30,11 @@ slices: contents: /etc/java-17-openjdk/jvm-*.cfg: /etc/java-17-openjdk/logging.properties: - /etc/java-17-openjdk/management/jmxremote.access: - /etc/java-17-openjdk/management/management.properties: /etc/java-17-openjdk/net.properties: /etc/java-17-openjdk/security/java.policy: /etc/java-17-openjdk/security/java.security: /usr/lib/jvm/java-17-openjdk-*/bin/java: /usr/lib/jvm/java-17-openjdk-*/conf/logging.properties: - /usr/lib/jvm/java-17-openjdk-*/conf/management/jmxremote.access: - /usr/lib/jvm/java-17-openjdk-*/conf/management/management.properties: /usr/lib/jvm/java-17-openjdk-*/conf/net.properties: /usr/lib/jvm/java-17-openjdk-*/conf/security/java.policy: /usr/lib/jvm/java-17-openjdk-*/conf/security/java.security: From a2b960727deb3551692dc10688b86033aa6bccd8 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Tue, 24 Sep 2024 13:46:36 +1200 Subject: [PATCH 07/18] doc: add slice descriptions --- slices/openjdk-17-jre-headless.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml index e33503bd6..e1b6b7dc6 100644 --- a/slices/openjdk-17-jre-headless.yaml +++ b/slices/openjdk-17-jre-headless.yaml @@ -5,6 +5,7 @@ essential: slices: + # A set of slices to run headless openjdk runtime standard: essential: - openjdk-17-jre-headless_core @@ -15,12 +16,14 @@ slices: - openjdk-17-jre-headless_rmi - openjdk-17-jre-headless_security + # List of classes required to create the Class Data Sharing archive classescache: essential: - openjdk-17-jre-headless_core contents: /usr/lib/jvm/java-17-openjdk-*/lib/classlist: + # Minimal set of files to run Java application core: essential: - libc6_libs @@ -59,24 +62,28 @@ slices: /usr/lib/jvm/java-17-openjdk-*/lib/server/libjvm.so: /usr/lib/jvm/java-17-openjdk-*/lib/tzdb.dat: + # Native part of jdk.prefs modules prefs: essential: - openjdk-17-jre-headless_core contents: /usr/lib/jvm/java-17-openjdk-*/lib/libprefs.so: + # Native part of java.rmi rmi: essential: - openjdk-17-jre-headless_core contents: /usr/lib/jvm/java-17-openjdk-*/lib/librmi.so: + # Native part of STCP protocol implementation stcp: essential: - openjdk-17-jre-headless_core contents: /usr/lib/jvm/java-17-openjdk-*/lib/libsctp.so: + # Debug support debug: essential: - openjdk-17-jre-headless_core @@ -92,6 +99,7 @@ slices: - armhf - ppc64el + # Configuration and native part of Java Management Extensions management: essential: - openjdk-17-jre-headless_core @@ -104,6 +112,7 @@ slices: /usr/lib/jvm/java-17-openjdk-*/lib/libmanagement_agent.so: /usr/lib/jvm/java-17-openjdk-*/lib/libmanagement_ext.so: + # Security configuration files and native libraries security: essential: - libnss3_libs @@ -134,6 +143,7 @@ slices: /usr/lib/jvm/java-17-openjdk-*/lib/security/default.policy: /usr/lib/jvm/java-17-openjdk-*/lib/security/public_suffix_list.dat: + # OpenJDK tools tools: essential: - openjdk-17-jre-headless_security @@ -144,6 +154,7 @@ slices: arch: - amd64 + # Java Flight Recorder configuration and jar file jfr: essential: - openjdk-17-jre-headless_core @@ -154,6 +165,7 @@ slices: /usr/lib/jvm/java-17-openjdk-*/lib/jfr/profile.jfc: /usr/lib/jvm/java-17-openjdk-*/lib/jrt-fs.jar: + # Javac JDK API signatures for the backwards compatibility javac: essential: - openjdk-17-jre-headless_core From b3033ee7f3d984bc2bf590247a8a07cb6b786b2b Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Tue, 24 Sep 2024 13:49:24 +1200 Subject: [PATCH 08/18] doc: add comments for jdk slices --- slices/openjdk-17-jdk-headless.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/slices/openjdk-17-jdk-headless.yaml b/slices/openjdk-17-jdk-headless.yaml index f47a166e1..032e9fe5d 100644 --- a/slices/openjdk-17-jdk-headless.yaml +++ b/slices/openjdk-17-jdk-headless.yaml @@ -4,6 +4,7 @@ essential: - openjdk-17-jdk-headless_copyright slices: + # OpenJDK binaries slice bins: essential: - openjdk-17-jre-headless_core @@ -36,6 +37,7 @@ slices: /usr/lib/jvm/java-17-openjdk-*/bin/jstatd: /usr/lib/jvm/java-17-openjdk-*/bin/serialver: + # OpenJDK modules required for build runtime image modules: essential: - openjdk-17-jdk-headless_bins @@ -124,6 +126,7 @@ slices: /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.xml.dom.jmod: /usr/lib/jvm/java-17-openjdk-*/jmods/jdk.zipfs.jmod: + # OpenJDK headers for JNI headers: essential: - openjdk-17-jre-headless_core @@ -134,6 +137,7 @@ slices: /usr/lib/jvm/java-17-openjdk-*/include/jvmticmlr.h: /usr/lib/jvm/java-17-openjdk-*/include/linux/jni_md.h: + # OpenJDK headers for the debug agent development debug-headers: essential: - openjdk-17-jre-headless_core From 7931998a3841fa91f1e84be1c4c6b44b418c05d3 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Tue, 24 Sep 2024 14:14:10 +1200 Subject: [PATCH 09/18] doc: fix typos in slice definitions comments --- slices/openjdk-17-jdk-headless.yaml | 2 +- slices/openjdk-17-jre-headless.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/slices/openjdk-17-jdk-headless.yaml b/slices/openjdk-17-jdk-headless.yaml index 032e9fe5d..648e4fef3 100644 --- a/slices/openjdk-17-jdk-headless.yaml +++ b/slices/openjdk-17-jdk-headless.yaml @@ -37,7 +37,7 @@ slices: /usr/lib/jvm/java-17-openjdk-*/bin/jstatd: /usr/lib/jvm/java-17-openjdk-*/bin/serialver: - # OpenJDK modules required for build runtime image + # OpenJDK modules required to build the runtime image modules: essential: - openjdk-17-jdk-headless_bins diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml index e1b6b7dc6..e1ac5649a 100644 --- a/slices/openjdk-17-jre-headless.yaml +++ b/slices/openjdk-17-jre-headless.yaml @@ -23,7 +23,7 @@ slices: contents: /usr/lib/jvm/java-17-openjdk-*/lib/classlist: - # Minimal set of files to run Java application + # Minimal set of files to run a Java application core: essential: - libc6_libs From e1c021ac4e62d8ffe2012f19bf337aac28601a8a Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Tue, 24 Sep 2024 14:23:13 +1200 Subject: [PATCH 10/18] lint: add newline before comment --- slices/openjdk-17-jdk-headless.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/slices/openjdk-17-jdk-headless.yaml b/slices/openjdk-17-jdk-headless.yaml index 648e4fef3..d87428fea 100644 --- a/slices/openjdk-17-jdk-headless.yaml +++ b/slices/openjdk-17-jdk-headless.yaml @@ -4,6 +4,7 @@ essential: - openjdk-17-jdk-headless_copyright slices: + # OpenJDK binaries slice bins: essential: From d24b959d71fbf196edbfd50d25f7e6ea59c4ccf5 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Wed, 2 Oct 2024 10:45:20 +1300 Subject: [PATCH 11/18] fix: update openjdk-17 slices as per review comments --- slices/openjdk-17-jdk-headless.yaml | 31 ++++++++++++++++------------- slices/openjdk-17-jre-headless.yaml | 30 ++++++++++++++++------------ 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/slices/openjdk-17-jdk-headless.yaml b/slices/openjdk-17-jdk-headless.yaml index d87428fea..c4418bf8f 100644 --- a/slices/openjdk-17-jdk-headless.yaml +++ b/slices/openjdk-17-jdk-headless.yaml @@ -6,43 +6,50 @@ essential: slices: # OpenJDK binaries slice - bins: + core: essential: - openjdk-17-jre-headless_core - openjdk-17-jre-headless_javac contents: - /usr/lib/jvm/java-17-openjdk-*/bin/jar: - /usr/lib/jvm/java-17-openjdk-*/bin/jarsigner: /usr/lib/jvm/java-17-openjdk-*/bin/javac: /usr/lib/jvm/java-17-openjdk-*/bin/javadoc: /usr/lib/jvm/java-17-openjdk-*/bin/javap: - /usr/lib/jvm/java-17-openjdk-*/bin/jcmd: - /usr/lib/jvm/java-17-openjdk-*/bin/jdb: /usr/lib/jvm/java-17-openjdk-*/bin/jdeprscan: /usr/lib/jvm/java-17-openjdk-*/bin/jdeps: + /usr/lib/jvm/java-17-openjdk-*/bin/jimage: + /usr/lib/jvm/java-17-openjdk-*/bin/serialver: + + standard: + essential: + - openjdk-11-jdk-headless_core + - openjdk-11-jre-headless_standard + contents: + /usr/lib/jvm/java-17-openjdk-*/bin/jar: + /usr/lib/jvm/java-17-openjdk-*/bin/jarsigner: + /usr/lib/jvm/java-17-openjdk-*/bin/jcmd: + /usr/lib/jvm/java-17-openjdk-*/bin/jdb: /usr/lib/jvm/java-17-openjdk-*/bin/jfr: /usr/lib/jvm/java-17-openjdk-*/bin/jhsdb: arch: - amd64 - arm64 - /usr/lib/jvm/java-17-openjdk-*/bin/jimage: /usr/lib/jvm/java-17-openjdk-*/bin/jinfo: - /usr/lib/jvm/java-17-openjdk-*/bin/jlink: /usr/lib/jvm/java-17-openjdk-*/bin/jmap: - /usr/lib/jvm/java-17-openjdk-*/bin/jmod: /usr/lib/jvm/java-17-openjdk-*/bin/jps: /usr/lib/jvm/java-17-openjdk-*/bin/jrunscript: /usr/lib/jvm/java-17-openjdk-*/bin/jshell: /usr/lib/jvm/java-17-openjdk-*/bin/jstack: /usr/lib/jvm/java-17-openjdk-*/bin/jstat: /usr/lib/jvm/java-17-openjdk-*/bin/jstatd: - /usr/lib/jvm/java-17-openjdk-*/bin/serialver: + # OpenJDK modules required to build the runtime image modules: essential: - - openjdk-17-jdk-headless_bins + - openjdk-17-jdk-headless_core contents: + /usr/lib/jvm/java-17-openjdk-*/bin/jlink: + /usr/lib/jvm/java-17-openjdk-*/bin/jmod: /usr/lib/jvm/java-17-openjdk-*/jmods/java.base.jmod: /usr/lib/jvm/java-17-openjdk-*/jmods/java.compiler.jmod: /usr/lib/jvm/java-17-openjdk-*/jmods/java.datatransfer.jmod: @@ -129,8 +136,6 @@ slices: # OpenJDK headers for JNI headers: - essential: - - openjdk-17-jre-headless_core contents: /usr/lib/jvm/java-17-openjdk-*/include/classfile_constants.h: /usr/lib/jvm/java-17-openjdk-*/include/jni.h: @@ -140,8 +145,6 @@ slices: # OpenJDK headers for the debug agent development debug-headers: - essential: - - openjdk-17-jre-headless_core contents: /usr/lib/jvm/java-17-openjdk-*/include/jdwpTransport.h: diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml index e1ac5649a..75e046e6f 100644 --- a/slices/openjdk-17-jre-headless.yaml +++ b/slices/openjdk-17-jre-headless.yaml @@ -5,9 +5,19 @@ essential: slices: - # A set of slices to run headless openjdk runtime + # A minimal set of files to run a Java application + # excluded dependencies: + # - ca-certificates-java_essential - needs chisel support to run + # maintainer scripts. + # - java-common - provides update-alternatives, + # not relevant. + # - util-linux - needed for bash completion + # not relevant. + # - libjpeg8 - used in awt, not relevant + # - liblcms2-2 - used in awt, not relevant standard: essential: + - openjdk-17-jre-headless_class-data-sharing - openjdk-17-jre-headless_core - openjdk-17-jre-headless_debug - openjdk-17-jre-headless_jfr @@ -15,15 +25,16 @@ slices: - openjdk-17-jre-headless_prefs - openjdk-17-jre-headless_rmi - openjdk-17-jre-headless_security + - openjdk-17-jre-headless_tools # List of classes required to create the Class Data Sharing archive - classescache: + class-data-sharing: essential: - openjdk-17-jre-headless_core contents: /usr/lib/jvm/java-17-openjdk-*/lib/classlist: - # Minimal set of files to run a Java application + # A minimal set of files to run a Java application core: essential: - libc6_libs @@ -72,17 +83,11 @@ slices: # Native part of java.rmi rmi: essential: - - openjdk-17-jre-headless_core + - openjdk-17-jre-headless_security contents: + /usr/lib/jvm/java-17-openjdk-*/bin/rmiregistry: /usr/lib/jvm/java-17-openjdk-*/lib/librmi.so: - # Native part of STCP protocol implementation - stcp: - essential: - - openjdk-17-jre-headless_core - contents: - /usr/lib/jvm/java-17-openjdk-*/lib/libsctp.so: - # Debug support debug: essential: @@ -102,7 +107,7 @@ slices: # Configuration and native part of Java Management Extensions management: essential: - - openjdk-17-jre-headless_core + - openjdk-17-jre-headless_rmi contents: /etc/java-17-openjdk/management/jmxremote.access: /etc/java-17-openjdk/management/management.properties: @@ -149,7 +154,6 @@ slices: - openjdk-17-jre-headless_security contents: /usr/lib/jvm/java-17-openjdk-*/bin/keytool: - /usr/lib/jvm/java-17-openjdk-*/bin/rmiregistry: /usr/lib/jvm/java-17-openjdk-amd64/bin/jpackage: arch: - amd64 From 25da431d138f5762617b760a4f5158fc62a4114e Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Wed, 2 Oct 2024 10:45:42 +1300 Subject: [PATCH 12/18] test: update openjdk-17 tests as per review comments add tests for individual binaries --- .../MonitoringTest.java | 7 ++ .../RemoteInterface.java | 4 + .../SerializableObject.java | 4 + .../openjdk-17-jdk-headless/all.policy | 3 + .../openjdk-17-jdk-headless/task.yaml | 107 ++++++++++++++++-- .../openjdk-17-jre-headless/Main.java | 2 +- .../openjdk-17-jre-headless/PrefsTest.java | 13 +++ .../openjdk-17-jre-headless/TestJMX.java | 39 +++++++ .../openjdk-17-jre-headless/TestJMXMBean.java | 3 + .../openjdk-17-jre-headless/task.yaml | 40 +++++-- 10 files changed, 198 insertions(+), 24 deletions(-) create mode 100644 tests/spread/integration/openjdk-17-jdk-headless/MonitoringTest.java create mode 100644 tests/spread/integration/openjdk-17-jdk-headless/RemoteInterface.java create mode 100644 tests/spread/integration/openjdk-17-jdk-headless/SerializableObject.java create mode 100644 tests/spread/integration/openjdk-17-jdk-headless/all.policy create mode 100644 tests/spread/integration/openjdk-17-jre-headless/PrefsTest.java create mode 100644 tests/spread/integration/openjdk-17-jre-headless/TestJMX.java create mode 100644 tests/spread/integration/openjdk-17-jre-headless/TestJMXMBean.java diff --git a/tests/spread/integration/openjdk-17-jdk-headless/MonitoringTest.java b/tests/spread/integration/openjdk-17-jdk-headless/MonitoringTest.java new file mode 100644 index 000000000..aa09573ff --- /dev/null +++ b/tests/spread/integration/openjdk-17-jdk-headless/MonitoringTest.java @@ -0,0 +1,7 @@ +public class MonitoringTest { + public static void main(String[] args) throws InterruptedException { + while (true) { + Thread.sleep(1000); + } + } +} diff --git a/tests/spread/integration/openjdk-17-jdk-headless/RemoteInterface.java b/tests/spread/integration/openjdk-17-jdk-headless/RemoteInterface.java new file mode 100644 index 000000000..d19403634 --- /dev/null +++ b/tests/spread/integration/openjdk-17-jdk-headless/RemoteInterface.java @@ -0,0 +1,4 @@ +import java.rmi.Remote; + +public class RemoteInterface implements Remote { +} diff --git a/tests/spread/integration/openjdk-17-jdk-headless/SerializableObject.java b/tests/spread/integration/openjdk-17-jdk-headless/SerializableObject.java new file mode 100644 index 000000000..b46056421 --- /dev/null +++ b/tests/spread/integration/openjdk-17-jdk-headless/SerializableObject.java @@ -0,0 +1,4 @@ +import java.io.Serializable; + +public class SerializableObject implements Serializable { +} diff --git a/tests/spread/integration/openjdk-17-jdk-headless/all.policy b/tests/spread/integration/openjdk-17-jdk-headless/all.policy new file mode 100644 index 000000000..1d0ce8867 --- /dev/null +++ b/tests/spread/integration/openjdk-17-jdk-headless/all.policy @@ -0,0 +1,3 @@ +grant { + permission java.security.AllPermission; +}; diff --git a/tests/spread/integration/openjdk-17-jdk-headless/task.yaml b/tests/spread/integration/openjdk-17-jdk-headless/task.yaml index ff68a8858..e7afc330a 100644 --- a/tests/spread/integration/openjdk-17-jdk-headless/task.yaml +++ b/tests/spread/integration/openjdk-17-jdk-headless/task.yaml @@ -1,31 +1,114 @@ summary: Integration tests for openjdk-17-jdk-headless environment: - SLICE/bins: "bins" + SLICE/core: "core" + SLICE/standard: "standard" SLICE/modules: "modules" execute: | + pids=() + cleanup() { + for pid in "${pids[@]}"; do + kill "$pid" || true + done + } + for sig in INT QUIT HUP TERM; do trap "cleanup; trap - $sig EXIT; kill -s $sig "'"$$"' "$sig"; done + trap cleanup EXIT + + apt install --update -y openjdk-11-jdk-headless + # Test different slice installations echo "SLICE=${SLICE}" - rootfs="$(install-slices openjdk-17-jdk-headless_${SLICE})" - cp Main.java ${rootfs}/ - cd ${rootfs} - mkdir -p proc/self + rootfs="$(install-slices openjdk-17-jdk-headless_${SLICE} dash_bins)" + cp *.java ${rootfs}/ + cp all.policy ${rootfs}/ + javac *.java + nohup java -cp . MonitoringTest & + pid=$! + pids+=("$pid") + + cp *.class ${rootfs}/ + cd ${rootfs} + mkdir -p proc sys tmp + mount --bind /proc proc + mount --bind /sys sys + mount --bind /tmp tmp case ${SLICE} in - bins) + core) for java in `find usr/lib/jvm -name java`; do - ln -sf /${java} proc/self/exe - chroot . ${java} --version - chroot . ${java} /Main.java + home=$(dirname ${java}) + # /usr/lib/jvm/java-17-openjdk-*/bin/javac: + chroot . ${home}/javac /Main.java -d / + # /usr/lib/jvm/java-17-openjdk-*/bin/javadoc: + chroot . ${home}/javadoc /Main.java + # /usr/lib/jvm/java-17-openjdk-*/bin/javap: + chroot . ${home}/javap -l /Main.class + # /usr/lib/jvm/java-17-openjdk-*/bin/jdeprscan: + chroot . ${home}/jdeprscan --class-path . Main + # /usr/lib/jvm/java-17-openjdk-*/bin/jdeps: + chroot . ${home}/jdeps -m java.base + # /usr/lib/jvm/java-17-openjdk-*/bin/jimage: + chroot . ${home}/jimage info ${home}/../lib/modules + # /usr/lib/jvm/java-17-openjdk-*/bin/serialver: + chroot . ${home}/serialver -classpath / SerializableObject + done + ;; + standard) + for java in `find usr/lib/jvm -name java`; do + home=$(dirname ${java}) + # /usr/lib/jvm/java-17-openjdk-*/bin/jar: + # /usr/lib/jvm/java-17-openjdk-*/bin/jarsigner: + chroot . ${home}/jar cvf test.jar *.java + DNAME="CN=Sample Cert, OU=R&D, O=Company Ltd., L=Dublin 4, S=Dublin, C=IE" + chroot . ${home}/keytool -genkeypair -keystore foo -storepass barbar -keyalg RSA -dname "$DNAME" -alias foo + chroot . ${home}/jarsigner -keystore foo -storepass barbar test.jar foo + # /usr/lib/jvm/java-17-openjdk-*/bin/jdb: + chroot . /usr/bin/sh -c "echo run | ${home}/jdb Main.java" + # /usr/lib/jvm/java-17-openjdk-*/bin/jcmd: + chroot . ${home}/jcmd MonitoringTest VM.version + # /usr/lib/jvm/java-17-openjdk-*/bin/jhsdb: + if [ -f ${home}/jhsdb ]; then + chroot . ${home}/jhsdb jstack --pid ${pid} + fi + # /usr/lib/jvm/java-17-openjdk-*/bin/jfr: + chroot . ${home}/jcmd ${pid} JFR.start name=recording maxsize=1MB + chroot . ${home}/jcmd ${pid} JFR.dump name=recording filename=/tmp/recording.jfr + chroot . ${home}/jfr print /tmp/recording.jfr > /dev/null + # /usr/lib/jvm/java-17-openjdk-*/bin/jinfo: + chroot . ${home}/jinfo ${pid} + # /usr/lib/jvm/java-17-openjdk-*/bin/jrunscript: + chroot . /usr/bin/sh -c "echo 'exit()' | ${home}/jrunscript" + # /usr/lib/jvm/java-17-openjdk-*/bin/jshell: + chroot . /usr/bin/sh -c "echo 'System.out.println(\"hello world\")' | ${home}/jshell" + # /usr/lib/jvm/java-17-openjdk-*/bin/jstack: + chroot . ${home}/jstack ${pid} + # /usr/lib/jvm/java-17-openjdk-*/bin/jstat: + chroot . ${home}/jstat -gc ${pid} + # /usr/lib/jvm/java-17-openjdk-*/bin/jstatd: + nohup chroot . ${home}/jstatd -J-Djava.security.policy=all.policy > ./jstatd.log & + pids+=($!) + for retry in 0 1 2 3 4 5; do + if [ ${retry} -eq 5 ]; then + exit 1 + fi + grep -q "bound to /JStatRemoteHost" "jstatd.log" && break + sleep 10 + done + # /usr/lib/jvm/java-17-openjdk-*/bin/rmic + chroot . ${home}/rmic -classpath . RemoteInterface done ;; modules) - mkdir -p ${rootfs}/opt/java cd ${rootfs} for jlink in `find usr/lib/jvm -name jlink`; do - ln -sf /${jlink} proc/self/exe - chroot . ${jlink} --add-modules java.base --output ${rootfs}/opt/java + output=$(basename $(mktemp -u)) + chroot . ${jlink} --add-modules java.base --output ${output} + rm -rf ${rootfs}/${output} + done + for jmod in `find usr/lib/jvm -name jmod`; do + home=$(dirname ${jmod}) + chroot . ${jmod} list ${home}/../jmods/java.rmi.jmod done ;; esac diff --git a/tests/spread/integration/openjdk-17-jre-headless/Main.java b/tests/spread/integration/openjdk-17-jre-headless/Main.java index 40b5eeef0..47e5d0af7 100644 --- a/tests/spread/integration/openjdk-17-jre-headless/Main.java +++ b/tests/spread/integration/openjdk-17-jre-headless/Main.java @@ -1,5 +1,5 @@ public class Main { - public static void main(String[] args){ + public static void main(String[] args) { System.out.println("Hello world"); } } diff --git a/tests/spread/integration/openjdk-17-jre-headless/PrefsTest.java b/tests/spread/integration/openjdk-17-jre-headless/PrefsTest.java new file mode 100644 index 000000000..73c4ee63e --- /dev/null +++ b/tests/spread/integration/openjdk-17-jre-headless/PrefsTest.java @@ -0,0 +1,13 @@ +import java.util.prefs.*; + +public class PrefsTest { + public static void main(String[] args) { + if ("put".equals(args[0])) { + Preferences.userRoot().put("a", "b"); + } else if ("get".equals(args[0])) { + if (!"b".equals(Preferences.userRoot().get("a", null))) { + throw new RuntimeException("Unable to read the preference"); + } + } + } +} diff --git a/tests/spread/integration/openjdk-17-jre-headless/TestJMX.java b/tests/spread/integration/openjdk-17-jre-headless/TestJMX.java new file mode 100644 index 000000000..e27d058d8 --- /dev/null +++ b/tests/spread/integration/openjdk-17-jre-headless/TestJMX.java @@ -0,0 +1,39 @@ +import java.lang.management.ManagementFactory; +import javax.management.Attribute; +import javax.management.AttributeList; +import javax.management.AttributeNotFoundException; +import javax.management.DynamicMBean; +import javax.management.InstanceAlreadyExistsException; +import javax.management.InvalidAttributeValueException; +import javax.management.MBeanException; +import javax.management.MBeanInfo; +import javax.management.MBeanRegistrationException; +import javax.management.MBeanServer; +import javax.management.MBeanServerConnection; +import javax.management.MalformedObjectNameException; +import javax.management.NotCompliantMBeanException; +import javax.management.ObjectName; +import javax.management.ReflectionException; +import javax.management.remote.*; +import com.sun.tools.attach.*; + +public class TestJMX implements TestJMXMBean { + + static final String CONNECTOR_ADDRESS = + "com.sun.management.jmxremote.localConnectorAddress"; + + @Override + public void test() { + } + + public static void main(String[] args) throws Throwable { + ObjectName objectName = new ObjectName("test:type=basic,name=mbeantest"); + MBeanServer server = ManagementFactory.getPlatformMBeanServer(); + server.registerMBean(new TestJMX(), objectName); + JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:5000/jmxrmi"); + int count = JMXConnectorFactory.connect(url) + .getMBeanServerConnection() + .getMBeanCount(); + System.out.println(count); + } +} diff --git a/tests/spread/integration/openjdk-17-jre-headless/TestJMXMBean.java b/tests/spread/integration/openjdk-17-jre-headless/TestJMXMBean.java new file mode 100644 index 000000000..c75f6c573 --- /dev/null +++ b/tests/spread/integration/openjdk-17-jre-headless/TestJMXMBean.java @@ -0,0 +1,3 @@ +public interface TestJMXMBean { + void test(); +} diff --git a/tests/spread/integration/openjdk-17-jre-headless/task.yaml b/tests/spread/integration/openjdk-17-jre-headless/task.yaml index 31d877c5e..275c4a6a1 100644 --- a/tests/spread/integration/openjdk-17-jre-headless/task.yaml +++ b/tests/spread/integration/openjdk-17-jre-headless/task.yaml @@ -1,21 +1,26 @@ summary: Integration tests for openjdk-17-jre-headless environment: -# SLICE/core: "core" - SLICE/classescache: "classescache" + SLICE/classdatasharing: "class-data-sharing" + SLICE/core: "core" + SLICE/prefs: "prefs" +# SLICE/rmi: "rmi" # Tested in management slice SLICE/debug: "debug" + SLICE/management: "management" SLICE/jfr: "jfr" -# SLICE/management: "management" SLICE/security: "security" -# SLICE/stcp: "stcp" SLICE/tools: "tools" execute: | # Test different slice installations echo "SLICE=${SLICE}" - rootfs="$(install-slices openjdk-17-jre-headless_${SLICE} busybox_bins)" - cp Main.java ${rootfs}/ - cp ReadCertificate.java ${rootfs}/ + rootfs="$(install-slices openjdk-17-jre-headless_${SLICE} dash_bins)" + apt install --update -y openjdk-11-jdk-headless + javac *.java + jar cvf test.jar *.java + cp *.jar ${rootfs}/ + cp *.java ${rootfs}/ + cp *.class ${rootfs}/ cp certificate.pem ${rootfs}/ cd ${rootfs} mkdir -p proc/self @@ -23,18 +28,31 @@ execute: | ln -sf /${java} proc/self/exe chroot . ${java} --version case ${SLICE} in - classescache) + class-data-sharing) chroot . ${java} -Xshare:dump chroot . ${java} -XX:ArchiveClassesAtExit=archive.cds /Main.java ;; + core) + chroot . ${java} -cp . Main + ;; + prefs) + chroot . ${java} -cp . PrefsTest put + chroot . ${java} -cp . PrefsTest get + ;; debug) - chroot . ${java} -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 /Main.java + chroot . ${java} -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -cp . Main + ;; + management) + chroot . ${java} -Dcom.sun.management.jmxremote.port=5000 \ + -Dcom.sun.management.jmxremote.authenticate=false \ + -Dcom.sun.management.jmxremote=true \ + -Dcom.sun.management.jmxremote.ssl=false -cp . TestJMX ;; jfr) - chroot . ${java} -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=dump.jfr /Main.java + chroot . ${java} -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=dump.jfr -cp . Main ;; security) - chroot . ${java} /ReadCertificate.java + chroot . ${java} -cp . ReadCertificate ;; tools) DNAME="CN=Sample Cert, OU=R&D, O=Company Ltd., L=Dublin 4, S=Dublin, C=IE" From 638873a56671055d56e07db267252a60098516e2 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Wed, 2 Oct 2024 11:07:00 +1300 Subject: [PATCH 13/18] fix: standard slice dependencies --- slices/openjdk-17-jdk-headless.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slices/openjdk-17-jdk-headless.yaml b/slices/openjdk-17-jdk-headless.yaml index c4418bf8f..4ca69861a 100644 --- a/slices/openjdk-17-jdk-headless.yaml +++ b/slices/openjdk-17-jdk-headless.yaml @@ -21,8 +21,8 @@ slices: standard: essential: - - openjdk-11-jdk-headless_core - - openjdk-11-jre-headless_standard + - openjdk-17-jdk-headless_core + - openjdk-17-jre-headless_standard contents: /usr/lib/jvm/java-17-openjdk-*/bin/jar: /usr/lib/jvm/java-17-openjdk-*/bin/jarsigner: From a7e325c1a1a26cf68345fd6ba3b9d7c9ff9e8c6b Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Wed, 2 Oct 2024 11:37:29 +1300 Subject: [PATCH 14/18] test: use openjdk-17 for host jdk --- tests/spread/integration/openjdk-17-jdk-headless/task.yaml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/spread/integration/openjdk-17-jdk-headless/task.yaml b/tests/spread/integration/openjdk-17-jdk-headless/task.yaml index e7afc330a..a25411f91 100644 --- a/tests/spread/integration/openjdk-17-jdk-headless/task.yaml +++ b/tests/spread/integration/openjdk-17-jdk-headless/task.yaml @@ -15,7 +15,7 @@ execute: | for sig in INT QUIT HUP TERM; do trap "cleanup; trap - $sig EXIT; kill -s $sig "'"$$"' "$sig"; done trap cleanup EXIT - apt install --update -y openjdk-11-jdk-headless + apt install --update -y openjdk-17-jdk-headless # Test different slice installations echo "SLICE=${SLICE}" @@ -78,7 +78,7 @@ execute: | # /usr/lib/jvm/java-17-openjdk-*/bin/jinfo: chroot . ${home}/jinfo ${pid} # /usr/lib/jvm/java-17-openjdk-*/bin/jrunscript: - chroot . /usr/bin/sh -c "echo 'exit()' | ${home}/jrunscript" + chroot . ${home}/jrunscript -q # /usr/lib/jvm/java-17-openjdk-*/bin/jshell: chroot . /usr/bin/sh -c "echo 'System.out.println(\"hello world\")' | ${home}/jshell" # /usr/lib/jvm/java-17-openjdk-*/bin/jstack: @@ -95,8 +95,6 @@ execute: | grep -q "bound to /JStatRemoteHost" "jstatd.log" && break sleep 10 done - # /usr/lib/jvm/java-17-openjdk-*/bin/rmic - chroot . ${home}/rmic -classpath . RemoteInterface done ;; modules) From 8bbfea8861ea69f69682277d7e2f50333ebd2b14 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Wed, 2 Oct 2024 11:52:29 +1300 Subject: [PATCH 15/18] doc: fix comment --- slices/openjdk-17-jre-headless.yaml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml index 75e046e6f..cf5f9081d 100644 --- a/slices/openjdk-17-jre-headless.yaml +++ b/slices/openjdk-17-jre-headless.yaml @@ -5,16 +5,6 @@ essential: slices: - # A minimal set of files to run a Java application - # excluded dependencies: - # - ca-certificates-java_essential - needs chisel support to run - # maintainer scripts. - # - java-common - provides update-alternatives, - # not relevant. - # - util-linux - needed for bash completion - # not relevant. - # - libjpeg8 - used in awt, not relevant - # - liblcms2-2 - used in awt, not relevant standard: essential: - openjdk-17-jre-headless_class-data-sharing @@ -35,6 +25,15 @@ slices: /usr/lib/jvm/java-17-openjdk-*/lib/classlist: # A minimal set of files to run a Java application + # excluded dependencies: + # - ca-certificates-java_essential - needs chisel support to run + # maintainer scripts. + # - java-common - provides update-alternatives, + # not relevant. + # - util-linux - needed for bash completion + # not relevant. + # - libjpeg8 - used in awt, not relevant + # - liblcms2-2 - used in awt, not relevant core: essential: - libc6_libs From d94ffc03e46f991d509f0a55bee16e18cf827b99 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Wed, 2 Oct 2024 11:59:35 +1300 Subject: [PATCH 16/18] lint: remove empty line --- slices/openjdk-17-jdk-headless.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/slices/openjdk-17-jdk-headless.yaml b/slices/openjdk-17-jdk-headless.yaml index 4ca69861a..2d57fbae4 100644 --- a/slices/openjdk-17-jdk-headless.yaml +++ b/slices/openjdk-17-jdk-headless.yaml @@ -42,7 +42,6 @@ slices: /usr/lib/jvm/java-17-openjdk-*/bin/jstat: /usr/lib/jvm/java-17-openjdk-*/bin/jstatd: - # OpenJDK modules required to build the runtime image modules: essential: From 17428d920951a46d7eda7545e5cfed218359a565 Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Wed, 2 Oct 2024 13:36:54 +1300 Subject: [PATCH 17/18] lint: add libc6 and zlib1g explicit dependencies --- slices/openjdk-17-jdk-headless.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slices/openjdk-17-jdk-headless.yaml b/slices/openjdk-17-jdk-headless.yaml index 2d57fbae4..72ca2c274 100644 --- a/slices/openjdk-17-jdk-headless.yaml +++ b/slices/openjdk-17-jdk-headless.yaml @@ -8,8 +8,10 @@ slices: # OpenJDK binaries slice core: essential: + - libc6_libs - openjdk-17-jre-headless_core - openjdk-17-jre-headless_javac + - zlib1g_libs contents: /usr/lib/jvm/java-17-openjdk-*/bin/javac: /usr/lib/jvm/java-17-openjdk-*/bin/javadoc: From 743b55b53faee65b7e4110eb1dc92d58276db1be Mon Sep 17 00:00:00 2001 From: Vladimir Petko Date: Wed, 9 Oct 2024 09:20:20 +1300 Subject: [PATCH 18/18] fix: remove jvm.cfg default See https://github.com/canonical/chisel-releases/pull/363. Remove a sample packaging artifact. --- slices/openjdk-17-jre-headless.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/slices/openjdk-17-jre-headless.yaml b/slices/openjdk-17-jre-headless.yaml index cf5f9081d..45d5c1b1c 100644 --- a/slices/openjdk-17-jre-headless.yaml +++ b/slices/openjdk-17-jre-headless.yaml @@ -54,7 +54,6 @@ slices: /usr/lib/jvm/java-17-openjdk-*/lib/jexec: /usr/lib/jvm/java-17-openjdk-*/lib/jspawnhelper: /usr/lib/jvm/java-17-openjdk-*/lib/jvm.cfg: - /usr/lib/jvm/java-17-openjdk-*/lib/jvm.cfg-default: /usr/lib/jvm/java-17-openjdk-*/lib/libextnet.so: /usr/lib/jvm/java-17-openjdk-*/lib/libjava.so: # lib/modules support