I am currently trying to make a custom PKGBUILD for the Java 17 JDK based on the one for the
java-openjdk-xdg (https://aur.archlinux.org/pkgbase/java-openjdk-xdg) AUR group. For whatever reason, I keep running into the following situation.
==> WARNING: The package group has already been built, installing existing packages...
==> Installing java17-openjdk-xdg package group with pacman -U...
loading packages...
resolving dependencies...
looking for conflicting packages...
error: unresolvable package conflicts detected
error: failed to prepare transaction (conflicting dependencies)
:: jre17-openjdk-headless-xdg and jre17-openjdk-xdg are in conflict
==> WARNING: Failed to install built package(s).
Under normal circumstances, these would be able to install all at once, with the JRE depending on the headless JRE and the JDK in turn depending on the JRE. In spite of minimal editing — tacking on version numbers and fixing SHA256 sums — it ends up suffering from an irreconcilable conflict.
What could I be doing wrong here?
In the dir with the packages could you run and post
pacman -Qi --file *.zst
Sure thing.
Name : jdk17-openjdk-xdg
Version : 17.0.6.u10-1
Description : OpenJDK Java 17 development kit - with improved Support for the XDG Base Directory Specification
Architecture : x86_64
URL : https://openjdk.java.net/
Licenses : custom
Groups : None
Provides : java-environment=17 java-environment-openjdk=17 jdk17-openjdk=17.0.6.u10-1
Depends On : jre17-openjdk=17.0.6.u10-1 java-environment-common=3 hicolor-icon-theme libelf glibc gcc-libs
Optional Deps : None
Conflicts With : jre17-openjdk-headless jre17-openjdk jdk17-openjdk openjdk17-src openjdk17-doc
Replaces : None
Compressed Size : 238.17 MiB
Installed Size : 248.29 MiB
Packager : Unknown Packager
Build Date : Tue 21 Mar 2023 19:07:38 GMT
Install Script : Yes
Validated By : None
Signatures : None
Name : jre17-openjdk-headless-xdg
Version : 17.0.6.u10-1
Description : OpenJDK Java 17 headless runtime environment - with improved Support for the XDG Base Directory Specification
Architecture : x86_64
URL : https://openjdk.java.net/
Licenses : custom
Groups : None
Provides : java-runtime-headless=17 java-runtime-headless-openjdk=17 jre17-openjdk-headless=17.0.6.u10-1
Depends On : java-runtime-common>=3 ca-certificates-utils nss libjpeg-turbo libjpeg.so=8-64 lcms2 liblcms2.so=2-64 libnet freetype2 libfreetype.so=6-64 harfbuzz libharfbuzz.so=0-64 glibc gcc-libs
Optional Deps : java-rhino: for some JavaScript support
Conflicts With : jre17-openjdk-headless jre17-openjdk jdk17-openjdk openjdk17-src openjdk17-doc
Replaces : None
Compressed Size : 50.99 MiB
Installed Size : 171.17 MiB
Packager : Unknown Packager
Build Date : Tue 21 Mar 2023 19:07:38 GMT
Install Script : Yes
Validated By : None
Signatures : None
Name : jre17-openjdk-xdg
Version : 17.0.6.u10-1
Description : OpenJDK Java 17 full runtime environment - with improved Support for the XDG Base Directory Specification
Architecture : x86_64
URL : https://openjdk.java.net/
Licenses : custom
Groups : None
Provides : java-runtime=17 java-runtime-openjdk=17 jre17-openjdk=17.0.6.u10-1
Depends On : jre17-openjdk-headless=17.0.6.u10-1 giflib libgif.so glibc gcc-libs libpng
Optional Deps : alsa-lib: for basic sound support
gtk2: for the Gtk+ 2 look and feel - desktop usage
gtk3: for the Gtk+ 3 look and feel - desktop usage
Conflicts With : jre17-openjdk-headless jre17-openjdk jdk17-openjdk openjdk17-src openjdk17-doc
Replaces : None
Compressed Size : 227.28 KiB
Installed Size : 493.45 KiB
Packager : Unknown Packager
Build Date : Tue 21 Mar 2023 19:07:38 GMT
Install Script : Yes
Validated By : None
Signatures : None
Name : openjdk17-doc-xdg
Version : 17.0.6.u10-1
Description : OpenJDK Java 17 documentation - with improved Support for the XDG Base Directory Specification
Architecture : x86_64
URL : https://openjdk.java.net/
Licenses : custom
Groups : None
Provides : openjdk17-doc=17.0.6.u10-1
Depends On : jdk17-openjdk=17.0.6.u10-1
Optional Deps : None
Conflicts With : jre17-openjdk-headless jre17-openjdk jdk17-openjdk openjdk17-src openjdk17-doc
Replaces : None
Compressed Size : 20.43 MiB
Installed Size : 263.01 MiB
Packager : Unknown Packager
Build Date : Tue 21 Mar 2023 19:07:38 GMT
Install Script : No
Validated By : None
Signatures : None
Name : openjdk17-src-xdg
Version : 17.0.6.u10-1
Description : OpenJDK Java 17 sources - with improved Support for the XDG Base Directory Specification
Architecture : x86_64
URL : https://openjdk.java.net/
Licenses : custom
Groups : None
Provides : openjdk17-src=17.0.6.u10-1
Depends On : jdk17-openjdk=17.0.6.u10-1
Optional Deps : None
Conflicts With : jre17-openjdk-headless jre17-openjdk jdk17-openjdk openjdk17-src openjdk17-doc
Replaces : None
Compressed Size : 45.76 MiB
Installed Size : 49.35 MiB
Packager : Unknown Packager
Build Date : Tue 21 Mar 2023 19:07:38 GMT
Install Script : No
Validated By : None
Signatures : None
...okay, it looks like
everything is conflicting with everything else within this group.
And just to reiterate, the changes to the PKGBUILD for this version of Java over the one in the original group this was adapted from were still minimal. The diff attached should show that the bulk of the changes were made to the version number rather than anything else.
I did have a look at the PKGBUILD and couldn't see why they should conflict.
Afraid to say the pacman -Qi output says the same thing to me. I don't see why they do?
pacman -Uv might shed more light, though it's a bit hopeful.
Are these packages just for you or do you plan to publish somewhere ?
If the former I'd be tempted to just remove the 'conflicts=' line and see what happens.
Or try it anyway just to test. Logic suggests you'll still get the error.
Every package has the same conflicts
jre17-openjdk-headless jre17-openjdk jdk17-openjdk openjdk17-src openjdk17-doc
All your packages suffix -xdg so I can't why there should be any package conflicts ?
Sorry thinking out loud a bit.
I think the clue is
error: failed to prepare transaction (conflicting dependencies)
I can't spot it but maybe the issue stems from the various Provides= & Depends= lines not the Conflict= line ?
Not much luck there either from what I can spot.
Root : /
Conf File : /etc/pacman.conf
DB Path : /var/lib/pacman/
Cache Dirs: /var/cache/pacman/pkg/
Hook Dirs : /usr/share/libalpm/hooks/ /etc/pacman.d/hooks/
Lock File : /var/lib/pacman/db.lck
Log File : /var/log/pacman.log
GPG Dir : /etc/pacman.d/gnupg/
Targets : jdk17-openjdk-xdg-17.0.6.u10-1-x86_64.pkg.tar.zst jre17-openjdk-xdg-17.0.6.u10-1-x86_64.pkg.tar.zst jre17-openjdk-headless-xdg-17.0.6.u10-1-x86_64.pkg.tar.zst openjdk17-src-xdg-17.0.6.u10-1-x86_64.pkg.tar.zst openjdk17-doc-xdg-17.0.6.u10-1-x86_64.pkg.tar.zst
loading packages...
resolving dependencies...
looking for conflicting packages...
error: unresolvable package conflicts detected
error: failed to prepare transaction (conflicting dependencies)
:: jdk17-openjdk-xdg and jre17-openjdk-headless-xdg are in conflict
For the time being just for myself, though I may intend on pushing this to the AUR as well at some point.
I'll give it a go right now without the conflicts line and with
makepkg -sfi but I'm anticipating the same.
It'd still be odd given that this combination of provisions, dependencies and conflicts poses no issue for the original group.
Does seem odd. But they often do until you figure it out then it's "Shit, of course".
I haven't studied the PKGBUILD. Do you actually need to rename packages.
I'm just thinking it might me easier to just change the version numbers, major minor etc, and nothing else ?
Unless you need the Java versions to coexist ?
I would rather they co-existed. Some software, I've found, still relies specifically on Java versions before 19 such as IntelliJ IDEA's debugger and — go figure — older versions of Minecraft. I'd generally prefer having LTS versions like 8 and 17 available alongside whatever is the most recent stable version.
Arch forum came back with the following answer:
The only question that remains is
how did this package then manage to do the exact same mistake I'm doing and still work just fine?
That sounds wrong.
It's often the case that you want your version of a package to both 'provide' the original (to keep the dependencies of other packages happy) and 'conflict' with the original, as only one can be installed at a time.
I've done this exact thing many times in the past.
Proof of concept.
pkgname='food'
pkgver=0.1
pkgrel=1
arch=(any)
provides=(cakes tarts muffins)
conflicts=(cakes tarts muffins)
Builds and installs just fine.
What they are saying would make sense if the packages in the group had the same name as the package names in 'conflicts'. But they don't. All the packages in the group have the -xdg suffix.
But also I've just found the thread on the Arch forum.
You didn't post your PKGBUILD so aren't they just looking at the original on AUR ? I'm confused ?
I would guess from your first post and error message that the conflicting dependencies come from these bits for the individual packages:
package_jre17-openjdk-headless-xdg() {
pkgdesc="OpenJDK Java ${_majorver} headless runtime environment - with improved Support for the XDG Base Directory Specification"
depends=('java-runtime-common>=3' 'ca-certificates-utils' 'nss' 'libjpeg-turbo' 'libjpeg.so'
'lcms2' 'liblcms2.so' 'libnet' 'freetype2' 'libfreetype.so' 'harfbuzz' 'libharfbuzz.so'
'glibc' 'gcc-libs')
package_jre17-openjdk-xdg() {
pkgdesc="OpenJDK Java ${_majorver} full runtime environment - with improved Support for the XDG Base Directory Specification"
depends=("jre${_majorver}-openjdk-headless=${pkgver}-${pkgrel}" 'giflib' 'libgif.so'
'glibc' 'gcc-libs' 'libpng')
You can delete depends OK and it should still build and even run if the depends are installed, so I would delete some selectively to find what is causing the trouble by simple trial and error. Also if you want to get the actual shell expansion of some value you can throw in something like
echo "jre${_majorver}-openjdk-headless=${pkgver}-${pkgrel}"
at any convenient point in the PKGBUILD after the relevant variables are set and it will (hopefully!) print it out during the build if you were trying to figure out whether it was expanding to what you expected.
Actually, it wasn't even the individual packages at fault. Another user over on Arch clarified that the conflicts line at the top in global scope was the culprit.
I went and removed that, moving individual conflicts to their respective packages, and they all built just fine. Now I've even got a custom build of the Java 8 and 17 JDK! :D
Well I take it back then! They must be right. I'm still not fully understanding it in regard to why it worked in the original, but not your version. But you got it working so happy days.
The original explicitly specifies its own sub-package name in the depends while in yours this name is only in your provides / conflicts:
"jre${_majorver}-openjdk-headless=${pkgver}-${pkgrel}"
so this might also have worked if there was some internal makepkg confusion over the global provides / conflicts of as yet unbuilt sub packages, don't know though:
"jre${_majorver}-openjdk-headless-xdg=${pkgver}-${pkgrel}"
(And look at the end of that line, as it also demands openjdk-headless has the exact same pkgver and pkgrel as you define in your PKGBUILD)
Oh, interesting, I must have missed that originally then.
I'll have another look soon, but for now I'm pleased that I at least got these built. :)