Merge ~vpa1977/ubuntu/+source/ca-certificates-java:dpkg-trigger into ubuntu/+source/ca-certificates-java:ubuntu/devel

Proposed by Vladimir Petko
Status: Merged
Merged at revision: 1a1275024ad4cbf1cea8fd74dfc78dce54e62806
Proposed branch: ~vpa1977/ubuntu/+source/ca-certificates-java:dpkg-trigger
Merge into: ubuntu/+source/ca-certificates-java:ubuntu/devel
Diff against target: 249 lines (+124/-31)
9 files modified
debian/ca-certificates-java.postinst (+19/-26)
debian/ca-certificates-java.triggers (+2/-3)
debian/changelog (+18/-0)
debian/control (+9/-2)
debian/tests/can-convert-keystore (+24/-0)
debian/tests/can-install-jre (+26/-0)
debian/tests/can-install-libreoffice (+4/-0)
debian/tests/can-install-multiple-jdks (+13/-0)
debian/tests/control (+9/-0)
Reviewer Review Type Date Requested Status
Steve Langasek (community) Approve
git-ubuntu import Pending
Review via email: mp+438150@code.launchpad.net

Description of the change

NOTE: Please do not merge this until all OpenJDK package updates are performed. This package breaks existing OpenJDK packages.

This change depends on openjdk-jre-headless triggering certificate updates in the postinst script. Prerequisite updates:
 - openjdk-8 [1] (merged)
 - openjdk-lts [2] (merged)
 - openjdk-17 [3] (merged)
 - openjdk-18 [4] (merged)
 - openjdk-19 [5] (merged)
 - openjdk-20 [6] (merged)
 - openjdk-21 [7] (merged)
Summary of changes:

  * Resolve circular JRE dependency (LP: #2003750, LP: #1999103, LP: #2004061)
    - debian/ca-certificates-java.postinst: remove setup_path, remove
      update_cacerts from "configure" stage.
    - debian/ca-certificates-java.postinst: do "fresh" update if cacerts file is not found. Certificates are refreshed only in response to the trigger activated by OpenJDK packages.
    - debian/ca-certificates-java.postinst: fix cacert enumeration command for Java 8.
    - debian/control: remove JRE dependency.
    - debian/control: add Breaks condition.
    - debian/tests: add smoke tests.
    - debian/ca-certificates-java.triggers: remove file trigger /usr/jvm.

PPA: ppa:vpa1977/ca-certificates-java-dpkg [8]

Steps to test:
   autopackage tests should pass

Autopackage test results:
autopkgtest [08:33:54]: @@@@@@@@@@@@@@@@@@@@ summary
can-convert-keystore PASS
can-install-jre PASS
can-install-multiple-jdks PASS
can-install-libreoffice PASS

[1] https://code.launchpad.net/~vpa1977/ubuntu/+source/openjdk-8/+git/openjdk-8/+merge/438158
[2] https://code.launchpad.net/~vpa1977/ubuntu/+source/openjdk-lts/+git/openjdk-lts/+merge/438159
[3] https://code.launchpad.net/~vpa1977/ubuntu/+source/openjdk-17/+git/openjdk-17/+merge/438151
[4] https://code.launchpad.net/~vpa1977/ubuntu/+source/openjdk-18/+git/openjdk-18/+merge/438160
[5] https://code.launchpad.net/~vpa1977/ubuntu/+source/openjdk-19/+git/openjdk-19/+merge/438187
[6] https://code.launchpad.net/~vpa1977/ubuntu/+source/openjdk-20/+git/openjdk-20/+merge/438161
[7] https://code.launchpad.net/~vpa1977/ubuntu/+source/openjdk-21/+git/openjdk-21/+merge/438162
[8] https://launchpad.net/~vpa1977/+archive/ubuntu/ca-certificates-java-dpkg

To post a comment you must log in.
Revision history for this message
Steve Langasek (vorlon) wrote :

> This package breaks existing OpenJDK packages.

Well currently debian/control lists the Breaks but they are commented out! Provided we actually land the Breaks: correctly, we don't have to wait for all openjdk updates before landing this (though it will make each of those JREs uninstallable in -proposed and break builds of anything build-depending on them, so we should make sure *default*-jre is sorted before landing this.)

Revision history for this message
Vladimir Petko (vpa1977) wrote (last edit ):

> Well currently debian/control lists the Breaks but they are commented out!
> Provided we actually land the Breaks: correctly, we don't have to wait for all
> openjdk updates before landing this (though it will make each of those JREs
> uninstallable in -proposed and break builds of anything build-depending on
> them, so we should make sure *default*-jre is sorted before landing this.)

I will wait for the ppa to finish building OpenJDK 18 and will uncomment the Breaks section.
We will have to land all the JDKs first so that they could build themselves from unbroken build.

Revision history for this message
Steve Langasek (vorlon) :
review: Needs Fixing
Revision history for this message
Vladimir Petko (vpa1977) wrote :

Uncommented Breaks, uploaded new version of openjdk-19. Once it builds I will update autopkgtest results.

Revision history for this message
Vladimir Petko (vpa1977) wrote :

> Uncommented Breaks, uploaded new version of openjdk-19. Once it builds I will
> update autopkgtest results.

updated tests results

Revision history for this message
Steve Langasek (vorlon) :
review: Needs Fixing
Revision history for this message
Steve Langasek (vorlon) wrote :

closing the version number gaps in the Breaks: is the last thing to change before sponsoring.

Revision history for this message
Steve Langasek (vorlon) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/debian/ca-certificates-java.postinst b/debian/ca-certificates-java.postinst
index 94c6c03..f53c4ee 100644
--- a/debian/ca-certificates-java.postinst
+++ b/debian/ca-certificates-java.postinst
@@ -18,30 +18,6 @@ LOCALCERTSDIR=/usr/local/share/ca-certificates
18ETCCERTSDIR=/etc/ssl/certs18ETCCERTSDIR=/etc/ssl/certs
19CACERTS=$ETCCERTSDIR/java/cacerts19CACERTS=$ETCCERTSDIR/java/cacerts
2020
21setup_path()
22{
23 for version in 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ; do
24 for jvm in \
25 java-${version}-openjdk-${arch} \
26 java-${version}-openjdk \
27 oracle-java${version}-jre-${arch} \
28 oracle-java${version}-server-jre-${arch} \
29 oracle-java${version}-jdk-${arch}
30 do
31 if [ -x /usr/lib/jvm/$jvm/bin/java ]; then
32 export JAVA_HOME=/usr/lib/jvm/$jvm
33 PATH=$JAVA_HOME/bin:$PATH
34 break 2
35 fi
36 done
37 done
38
39 if ! which java >/dev/null; then
40 echo "No JRE found. Skipping Java certificates setup."
41 exit 0
42 fi
43}
44
45check_proc()21check_proc()
46{22{
47 if ! mountpoint -q /proc; then23 if ! mountpoint -q /proc; then
@@ -90,7 +66,10 @@ update_cacerts()
90 exit 066 exit 0
91 fi67 fi
9268
93 setup_path69 if ! which java >/dev/null; then
70 echo "No JRE found. Skipping Java certificates setup."
71 exit 0
72 fi
9473
95 if [ -f /var/lib/ca-certificates-java/convert_pkcs12_keystore_to_jks ]; then74 if [ -f /var/lib/ca-certificates-java/convert_pkcs12_keystore_to_jks ]; then
96 convert_pkcs12_keystore_to_jks75 convert_pkcs12_keystore_to_jks
@@ -103,7 +82,17 @@ update_cacerts()
10382
104 if [ -f "$CACERTS" ]; then83 if [ -f "$CACERTS" ]; then
105 check_proc84 check_proc
106 cacerts_aliases=$(keytool -cacerts -storepass "$storepass" -list -rfc | sed -n 's/^Alias name: *debian://ip' | tr '\n' ' ')85
86 # Java 8 does not have -cacerts option
87 if java -version 2>&1 | grep "1.8" > /dev/null ;
88 then
89 castore="-keystore ${CACERTS}"
90 else
91 castore="-cacerts"
92 fi
93
94 cacerts_aliases=$(keytool ${castore} -storepass "$storepass" -list -rfc | sed -n 's/^Alias name: *debian://ip' | tr '\n' ' ')
95
107 etc_ssl_certs_aliases=$(for pem in $pem_files ; do echo -n "$(basename "$pem" | tr A-Z a-z) "; done)96 etc_ssl_certs_aliases=$(for pem in $pem_files ; do echo -n "$(basename "$pem" | tr A-Z a-z) "; done)
108 for alias in $cacerts_aliases ; do97 for alias in $cacerts_aliases ; do
109 case " $etc_ssl_certs_aliases " in98 case " $etc_ssl_certs_aliases " in
@@ -177,5 +166,9 @@ if [ "$1" = "triggered" ]; then
177 ;;166 ;;
178 esac167 esac
179168
169 if [ ! -f $CACERTS ]; then
170 touch /var/lib/ca-certificates-java/fresh
171 fi
172
180 update_cacerts173 update_cacerts
181fi174fi
diff --git a/debian/ca-certificates-java.triggers b/debian/ca-certificates-java.triggers
index bde4336..e97bbf5 100644
--- a/debian/ca-certificates-java.triggers
+++ b/debian/ca-certificates-java.triggers
@@ -1,3 +1,2 @@
1interest update-ca-certificates-java1interest-await update-ca-certificates-java
2interest update-ca-certificates-java-fresh2interest-await update-ca-certificates-java-fresh
3interest /usr/lib/jvm
diff --git a/debian/changelog b/debian/changelog
index c316775..b92bc31 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,21 @@
1ca-certificates-java (20230103ubuntu1) lunar; urgency=medium
2
3 * Resolve circular JRE dependency (LP: #2003750, LP: #1999103, LP: #2004061)
4 - debian/ca-certificates-java.postinst: remove setup_path from "configure"
5 stage.
6 - debian/ca-certificates-java.postinst: do "fresh" update if cacerts file is
7 not found. Certificates are refreshed only in response to the trigger
8 activated by OpenJDK packages.
9 - debian/ca-certificates-java.postinst: fix cacert enumeration command for
10 Java 8.
11 - debian/control: remove JRE dependency.
12 - debian/control: add Breaks condition.
13 - debian/tests: add smoke tests.
14 - debian/ca-certificates-java.triggers: remove file trigger /usr/jvm,
15 explicitly declare triggers as -await.
16
17 -- Vladimir Petko <vladimir.petko@canonical.com> Wed, 01 Mar 2023 13:31:58 +1300
18
1ca-certificates-java (20230103) unstable; urgency=medium19ca-certificates-java (20230103) unstable; urgency=medium
220
3 * Promote again the JRE recommendation to a dependency. Otherwise21 * Promote again the JRE recommendation to a dependency. Otherwise
diff --git a/debian/control b/debian/control
index 87cfc5f..5545acd 100644
--- a/debian/control
+++ b/debian/control
@@ -1,7 +1,8 @@
1Source: ca-certificates-java1Source: ca-certificates-java
2Section: java2Section: java
3Priority: optional3Priority: optional
4Maintainer: Debian Java Maintainers <pkg-java-maintainers@lists.alioth.debian.org>4Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
5XSBC-Original-Maintainer: Debian Java Maintainers <pkg-java-maintainers@lists.alioth.debian.org>
5Uploaders: Matthias Klose <doko@ubuntu.com>,6Uploaders: Matthias Klose <doko@ubuntu.com>,
6 James Page <james.page@ubuntu.com>7 James Page <james.page@ubuntu.com>
7Build-Depends:8Build-Depends:
@@ -20,7 +21,13 @@ Multi-Arch: foreign
20Depends:21Depends:
21 ca-certificates (>= 20210120),22 ca-certificates (>= 20210120),
22 ${misc:Depends},23 ${misc:Depends},
23 default-jre-headless (>= 2:1.8) | java8-runtime-headless,24Breaks: openjdk-8-jre-headless (<<8u362-ga-0ubuntu2~),
25 openjdk-11-jre-headless (<<11.0.18+10-0ubuntu3~),
26 openjdk-17-jre-headless (<<17.0.6+10-1ubuntu1~),
27 openjdk-18-jre-headless (<<18.0.2+9-2ubuntu1~),
28 openjdk-19-jre-headless (<<19.0.2+7-0ubuntu4~),
29 openjdk-20-jre-headless (<<20~26ea-1ubuntu1~),
30 openjdk-21-jre-headless (<<21~7ea-1ubuntu1~)
24Description: Common CA certificates (JKS keystore)31Description: Common CA certificates (JKS keystore)
25 This package uses the hooks of the ca-certificates package to update the32 This package uses the hooks of the ca-certificates package to update the
26 cacerts JKS keystore used for many java runtimes.33 cacerts JKS keystore used for many java runtimes.
diff --git a/debian/tests/can-convert-keystore b/debian/tests/can-convert-keystore
27new file mode 10064434new file mode 100644
index 0000000..041189b
--- /dev/null
+++ b/debian/tests/can-convert-keystore
@@ -0,0 +1,24 @@
1#!/bin/bash
2set -e
3# GIVEN a PKCS12 Java keystore
4ETCCERTSDIR=/etc/ssl/certs
5CACERTS=$ETCCERTSDIR/java/cacerts
6rm $CACERTS
7keytool -importcert -noprompt -alias Amazon -file /etc/ssl/certs/Amazon_Root_CA_1.pem -trustcacerts -storepass changeit -storetype PKCS12 -keystore test.store 2> /dev/null
8apt-get remove -y ca-certificates-java
9
10mkdir -p /etc/ssl/certs/java/
11mkdir -p /var/lib/ca-certificates-java/
12mv test.store $CACERTS
13# WHEN ca-certificates-java is requested to convert the keystore
14touch /var/lib/ca-certificates-java/convert_pkcs12_keystore_to_jks
15
16# THEN conversion is successful
17output=`mktemp`
18apt-get install -y openjdk-8-jre-headless | tee ${output}
19
20if [[ $(grep -L "Entry for alias amazon successfully imported." ${output}) ]];
21then
22 echo "Certificates were not imported !!!"
23 exit 255
24fi
diff --git a/debian/tests/can-install-jre b/debian/tests/can-install-jre
0new file mode 10064425new file mode 100644
index 0000000..fd27d6e
--- /dev/null
+++ b/debian/tests/can-install-jre
@@ -0,0 +1,26 @@
1#!/bin/bash
2set -e
3versions=$(apt-cache search jre-headless | awk '{print $1}')
4for version in ${versions}
5do
6# WHEN openjdk-jre-headless package is installed from scratch
7
8 # Java 18 is EOL 09.2022 but is present in Lunar so that we could do clean
9 # builds. Ignore it in certificate tests
10 if [[ ${version} == "openjdk-18-jre-headless" ]];
11 then
12 continue
13 fi
14 output=`mktemp`
15 echo "installing ${version}"
16 apt-get install -y ${version} | tee ${output}
17# THEN installation is successfull
18# AND certificates are updated
19 if [[ $(grep -L "Adding debian:Amazon_Root_CA_1.pem" ${output}) ]]; then
20 echo "Certificates were not imported !!!"
21 exit 255
22 fi
23 rm $output
24 # purge in order to remove keytstore
25 apt-get purge -y ca-certificates-java ${version}
26done
0\ No newline at end of file27\ No newline at end of file
diff --git a/debian/tests/can-install-libreoffice b/debian/tests/can-install-libreoffice
1new file mode 10075528new file mode 100755
index 0000000..b1d9937
--- /dev/null
+++ b/debian/tests/can-install-libreoffice
@@ -0,0 +1,4 @@
1#!/bin/bash
2set -e
3
4apt-get install -y libreoffice
0\ No newline at end of file5\ No newline at end of file
diff --git a/debian/tests/can-install-multiple-jdks b/debian/tests/can-install-multiple-jdks
1new file mode 1007556new file mode 100755
index 0000000..614a9f6
--- /dev/null
+++ b/debian/tests/can-install-multiple-jdks
@@ -0,0 +1,13 @@
1#!/bin/bash
2set -e
3
4output=`mktemp`
5# WHEN multiple JDKs are installed
6apt-get install -y openjdk-11-jdk openjdk-17-jdk openjdk-8-jdk | tee ${output}
7
8# THEN installation is successful
9if [[ $(grep -L "Adding debian:Amazon_Root_CA_1.pem" ${output}) ]]; then
10 echo "Certificates were not imported !!!"
11 exit 255
12fi
13rm $output
diff --git a/debian/tests/control b/debian/tests/control
0new file mode 10064414new file mode 100644
index 0000000..17f2dac
--- /dev/null
+++ b/debian/tests/control
@@ -0,0 +1,9 @@
1Tests: can-convert-keystore
2Depends: default-jre-headless
3Restrictions: needs-root
4
5Tests: can-install-jre, can-install-multiple-jdks, can-install-libreoffice
6# No depends, this is a test for a clean install
7Depends:
8Restrictions: needs-root
9

Subscribers

People subscribed via source and target branches