JDK-8230507 : Findings in Debian packaging
  • Type: Bug
  • Component: tools
  • Sub-Component: jpackage
  • Affected Version: internal
  • Priority: P2
  • Status: Resolved
  • Resolution: Fixed
  • OS: linux
  • CPU: generic
  • Submitted: 2019-09-03
  • Updated: 2019-10-08
  • Resolved: 2019-10-01
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
internalFixed
Related Reports
Relates :  
Relates :  
Sub Tasks
JDK-8231277 :  
JDK-8231279 :  
JDK-8231280 :  
JDK-8231282 :  
Description
Feedback from Mark Reinhold:

- The resulting package does not depend upon any others, i.e., the
`Depends:` line in its control file is empty. This can���t possibly be
right, since the embedded JDK depends on many system libraries for
proper operation (`libc`, `libfreetype`, `libpthread`, etc.).

- The resulting package would install into `/opt/hello`, as expected,
but the `/opt/hello/bin` directory would contain not just the `hello`
application launcher but also `hello.desktop`, `hello.png`, and
`libapplauncher.so`. These aren���t appropriate for a `bin` directory
and should be placed elsewhere, most likely `/opt/hello/lib`.

- The resulting package would install `/opt/hello/app` and
`/opt/hello/runtime` directories. These are not strictly forbidden
by the Linux FHS [1], but it���d be better to put both of them under
`/opt/hello/lib`, per convention.

- The resulting package would install the copyright file into
`/usr/share/doc/hello/copyright`, which is wrong -- a package that
installs into `/opt` should never touch anything under /usr [1]. This
file should be at `/opt/hello/share/doc/copyright`.

- I attempted to install the package on a fresh Ubuntu 18.04 machine:

# dpkg -i hello-1.0.deb Selecting previously unselected package hello.
(Reading database ... 135670 files and directories currently installed.)
Preparing to unpack hello-1.0.deb ...
Unpacking hello (1.0) ...
Setting up hello (1.0) ...
Adding shortcut to the menu
/var/lib/dpkg/info/hello.postinst: 25: /var/lib/dpkg/info/hello.postinst: xdg-desktop-menu: not found
dpkg: error processing package hello (--install):
installed hello package post-installation script subprocess returned error exit status 127
Errors were encountered while processing:
hello
mr-dev # uname -a
Linux mr-dev 4.15.0-1018-oracle #20-Ubuntu SMP Wed Jul 3 06:46:12 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
mr-dev # cat /etc/lsb-release DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
#
Apparently the package should depend upon `xdg-utils`, so that its
post-install script can find `xdg-desktop-menu`. Even better,
though, would be for this trivial non-graphical application not to
depend upon any desktop utilities, per my comment above.

- Installing the package succeeded despite the above error.

- Then I tried to uninstall it:

mr-dev # dpkg --remove hello
(Reading database ... 135923 files and directories currently installed.)
Removing hello (1.0) ...
Removing shortcut
/var/lib/dpkg/info/hello.prerm: 25: /var/lib/dpkg/info/hello.prerm: xdg-desktop-menu: not found
dpkg: error processing package hello (--remove):
installed hello package pre-removal script subprocess returned error exit status 127
Errors were encountered while processing:
hello
mr-dev #

I installed `xdg-utils` by hand to get `xdg-desktop-menu`, but it still
didn���t work:

mr-dev # dpkg --remove hello
(Reading database ... 136878 files and directories currently installed.)
Removing hello (1.0) ...
Removing shortcut
xdg-desktop-menu: No writable system menu directory found.
dpkg: error processing package hello (--remove):
installed hello package pre-removal script subprocess returned error exit status 3
Errors were encountered while processing:
hello
mr-dev #
I eventually figured out how to create a fake writable system menu
directory and was then able to remove the package.

- The `--linux-deb-copyright` option is confusing. Its description
should mention that if this option is specified then the `--license`
option is, so far as I can tell, ignored.

- The `--identifier` option appears to have no use for Debian packages.
Perhaps this option should be package-type specific? Or at least its
description should mention that it���s irrelevant to Debian packages.

- I tried to create a package that would install into the `/usr`
hierarchy by adding `--install-dir /usr` to the above command line.
The resulting package would create a `/usr/hello` directory, with
`app`, `bin`, and `runtime` directories under that. That���s not
right. To install an application in the `/usr` hierarchy its command
should go into `/usr/bin`, and libraries and other files should go
into `/usr/lib/$APPNAME`, and documentation and copyright files
should go into `/usr/share/doc/$APPNAME`.

- Many of the above observations could also apply to RPM packages