JEP 343: Packaging Tool
mark.reinhold at oracle.com
mark.reinhold at oracle.com
Wed Jun 5 21:16:45 UTC 2019
I saw that you moved JEP 343 to “Proposed to Target,” so I spent a
couple of hours looking at it. You’ve made good progress but I don’t
think this is in the “nearly finished” state that we ask of features
in the six-month cadence. I suggest that you move this JEP back to
Candidate for now and continue refining it. The next feature release,
JDK 14, is just six months away.
Some specific observations and suggestions:
- At the moment there are 75 open issues in JBS [1], 69 of which are
P3 or higher. JDK 13 will enter RDP 1 next week, so there’s not
much time to make progress on all those issues.
- The use of the term “installer” in the JEP and in the command-line
options is confusing. The tool only creates installers on Windows
and macOS (pkg); the other formats that it supports (macOS dmg,
Linux deb/rpm) are OS-specific packages rather than interactive
installers. Consider replacing the term “installer” with “package”
throughout. This would also align better with the name of the tool
itself.
- It’s not clear why there are distinct subcommands to create an image
vs. to create an OS-specific package. Given the name of the tool,
I’d expect creating a package to be the primary behavior. An option
to preserve the image, which is just a temporary result, could make
sense, as well as another option to skip the creation of the
package, but I don’t understand the need for subcommands.
- On a Debian machine I tried to create a package from a trivial,
two-module application using the command
$ jpackage create-installer -o /tmp -p lib -m org.openjdk.hello -n hello
This terminated with exit code 255 and an error message. In Linux,
and Unix/POSIX generally, an exit code of 255 means that the exit
status was out of range. I suggest you exit with the value 1 on
errors, at least on Linux.
- The error message from the above command was:
Bundler RPM Bundle skipped because of a configuration problem: Can not find rpmbuild 4 or newer..
Advice to fix: Install packages needed to build RPM, version 4 or newer.
I’m on a Debian machine, trying to create an OS-specific (i.e.,
Debian) image, so this was a confusing message. (Yes, I know it’s
possible to create rpms under Debian if you have the right tools
installed, but that’s not what I was trying to do here.)
- What’s more, even though the tool exited on error it still produced
a Debian package in the output directory, but I found it only by
accident.
- Looking at the content of the generated Debian package, the control
file has many fields that don’t have corresponding jpackage options.
That could be a problem for some developers.
- The data in the Debian package would place the application into a
directory named `/usr/bin/hello`, which is completely wrong. Please
see the Filesystem Hierarchy Standard [2] and the Debian Policy
Manual [3] for details.
- I tried to create a package that would install into the `/opt`
directory by appending `--install-dir /opt` to the above command
line. The data in the resulting package would indeed install into
`/opt`, but the structure within that directory would be incorrect.
There should be an `/opt/hello/bin` directory containing the `hello`
launcher, and the remainder of the content should be organized per
the usual conventions [4].
To get this into better shape I suggest that you seek advice and, when
appropriate, reviews from developers who have deep experience with the
rpm and deb package formats (there are several such people here in the
OpenJDK Community). It’d also be good to get feedback from macOS and
Windows packaging experts, but I don’t personally know of any.
- Mark
[1] https://bugs.openjdk.java.net/issues/?jql=project%20in%20(JDK)%20AND%20component%20in%20(tools)%20AND%20Subcomponent%20in%20(jpackage)%20and%20statuscategory%20not%20in%20(Done)
[2] http://www.pathname.com/fhs/pub/fhs-2.3.html#USRBINMOSTUSERCOMMANDS
[3] https://www.debian.org/doc/debian-policy/index.html
[4] http://www.pathname.com/fhs/pub/fhs-2.3.html#OPTADDONAPPLICATIONSOFTWAREPACKAGES
More information about the core-libs-dev
mailing list