You are not logged in.
This is the first step to accomplishing my goal as mentioned here: https://bbs.archlinux.org/viewtopic.php?id=283673.
The contents of the my PKGBUILD are as follows:
# Maintainer: Stephen Cenkner <scenkner at gmail>
pkgname=JICMP
pkgver=3.0.5
pkgrel=1
pkgdesc="A small library to allow the use of IPv4 ICMP (raw) packets in Java"
arch=('any')
url="https://github.com/OpenNMS/jicmp"
license=('GPL3')
depends=('git' 'jdk8-openjdk')
provides=(JICMP)
source=("https://github.com/OpenNMS/jicmp.git")
sha256sums=('8b22af6aec90ed0faf1634094d80612657dff1836225d83ef77b2f89f3ba1eeb')
build() {
cd "$pkgname-$pkgver"
git submodule update --init --recursive
autoreconf -fvi
./configure
make
}
package() {
cd "$pkgname-$pkgver"
make DESTDIR="$pkgdir/" install
}
I used updpkgsums to get the above checksum, however when I run makepkg, I get an error that it did not pass validity check.
Any help is appreciated.
I'm also confused as to referencing $pkgdir when it isn't defined at the top.
Thank you!
Offline
See https://wiki.archlinux.org/title/VCS_pa … CS_sources so
source=("https://github.com/OpenNMS/jicmp.git")
to
source=("git+https://github.com/OpenNMS/jicmp.git")
pkgname must be lower case.
If you are not intending the package to track upstream git then pin the checkout.
The source is in $pkgname not $pkgname-$pkgver so the cd commands will fail.
Last edited by loqs (2023-03-11 18:11:13)
Offline
$pkgdir is defined by makepkg itself, so it is not specified in the PKGBUILD, just used (the same goes for $srcdir).
I suspect git is not a runtime dependency, is it? It should likely be in makedepends, not depends. And remove the "provides"; every package provides itself, that's a given. Of course if you properly name the package with a -git suffix (which you either must add or instead use a pinned release as noted above), then you could keep the provides if you want.
EDIT: and the license is LGPL3 not GPL3.
EDIT 2: the submodule bits should be in prepare() not build() [and see comment below]. I believe autoreconf also belongs in prepare(), though I'm crap with autotools.
Last edited by Trilby (2023-03-11 18:37:05)
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
git submodule update --init --recursive
git submodules require a special tweak in a PKGBUILD, see https://wiki.archlinux.org/title/VCS_pa … submodules
Disliking systemd intensely, but not satisfied with alternatives so focusing on taming systemd.
clean chroot building not flexible enough ?
Try clean chroot manager by graysky
Offline
Thank you all for your help!
I believe jdk8 is also required for the build only.
Once installed, JICMP is a dependency of openNMS which requires jdk11.
Considering this, should both be indicated as makedepends?
Should I include anything under depends?
I don't think JICMP is useful without any java so it may need depends=('java-environment-openjdk') or something similar.
Last edited by heidegger (2023-03-11 19:35:52)
Offline
If it is a dependency of a package needing Java 11 then I would suggest makedepends include jdk11-openjdk and depends include jre11-openjdk.
From a brief inspection of the Makefile maven is required at build time so should also be in makedepends.
Offline
OK, I've successfully built the package using the following:
# Maintainer: Stephen Cenkner <scenkner at gmail>
pkgname=jicmp
pkgver=3.0.5
pkgrel=1
pkgdesc="A small library to allow the use of IPv4 ICMP (raw) packets in Java"
arch=('any')
url="https://github.com/OpenNMS/jicmp"
license=('LGPL3')
makedepends=('git' 'jdk8-openjdk')
provides=('jicmp')
conflicts=('jicmp')
source=("jicmp::git+https://github.com/OpenNMS/jicmp.git")
sha256sums=('SKIP')
prepare() {
cd "$pkgname"
git submodule update --init --recursive
}
build() {
cd "$pkgname"
autoreconf -fvi
./configure
make
}
package() {
cd "$pkgname"
make DESTDIR="$pkgdir/" install
}
When I change the package name to jicmp-git, I get errors from cd as it's trying to change into the jicmp-git directory per the $pkgname, but the folder being created is dropping the -git.
I'm not sure why.
Offline
When I change the package name to jicmp-git, I get errors from cd as it's trying to change into the jicmp-git directory per the $pkgname, but the folder being created is dropping the -git.
source=("$pkgname::git+https://github.com/OpenNMS/jicmp.git")
Offline
Or just cd to jicmp instead of using the variable. It really doesn't do anything for you and there's no reason to rename the source dir.
I'm seeing a lot of C in the upstream repo, are you sure this is arch=('any')? If there are any architecture-specific binaries, it can't be.
You didn't fix the submodule handling.
Last edited by Scimmia (2023-03-11 21:03:34)
Online
If it is a dependency of a package needing Java 11 then I would suggest makedepends include jdk11-openjdk and depends include jre11-openjdk.
From a brief inspection of the Makefile maven is required at build time so should also be in makedepends.
JICMP uses some deprecated code (no backwards compatibility) so it must be built against jdk8.
However, once it's built openNMS requires jdk11, so it's really only a build time dependency. (I think.)
Eventually I hope to put together a PKGBUILD for openNMS, and I would plan to include the jdk11 dependency there.
I'll look into maven as a dependency.
Thank you!
Offline
arch=('any')
The package includes the architecture specific libjicmp.so
./configure
missing --prefix=/usr so the default prefix /usr/local is used.
As a git package it should have a pkgver function.
Edit:
I checked building in a clean chroot without maven. It was not used, must not be being called by the default make target.
Edit2:
# Maintainer: Stephen Cenkner <scenkner at gmail>
pkgname=jicmp-git
pkgver=jicmp.3.0.4.1.r5.g8af53d1
pkgrel=1
pkgdesc="A small library to allow the use of IPv4 ICMP (raw) packets in Java"
arch=('x86_64')
url="https://github.com/OpenNMS/jicmp"
license=('LGPL3')
makedepends=('git' 'jdk8-openjdk')
provides=('jicmp')
conflicts=('jicmp')
source=(git+https://github.com/OpenNMS/jicmp.git
git+https://github.com/OpenNMS/autotools.git)
sha256sums=('SKIP'
'SKIP')
prepare() {
cd "${pkgname%%-git}"
git submodule init
git config submodule.libs/m4.url "$srcdir/autotools"
git -c protocol.file.allow=always submodule update
autoreconf -fvi
}
pkgver() {
cd "${pkgname%%-git}"
git describe --long --abbrev=7 | sed 's/\([^-]*-g\)/r\1/;s/-/./g'
}
build() {
cd "${pkgname%%-git}"
./configure --prefix=/usr
make
}
package() {
cd "${pkgname%%-git}"
make DESTDIR="$pkgdir/" install
}
Last edited by loqs (2023-03-11 21:31:56)
Offline
Happy I made it this far!
[camus@daftpunk AUR_jicmp]$ sudo pacman -Qi jicmp
Name : jicmp-git
Version : 3.0.5-1
Description : A small library to allow the use of IPv4 ICMP (raw) packets in Java
Architecture : x86_64
URL : https://github.com/OpenNMS/jicmp
Licenses : LGPL3
Groups : None
Provides : jicmp
Depends On : None
Optional Deps : None
Required By : None
Optional For : None
Conflicts With : jicmp
Replaces : None
Installed Size : 44.96 KiB
Packager : Unknown Packager
Build Date : Sat 11 Mar 2023 01:22:34 PM PST
Install Date : Sat 11 Mar 2023 01:24:57 PM PST
Install Reason : Explicitly installed
Install Script : No
Validated By : None
# Maintainer: Stephen Cenkner <scenkner at gmail>
pkgname=jicmp-git
pkgver=3.0.5
pkgrel=1
pkgdesc="A small library to allow the use of IPv4 ICMP (raw) packets in Java"
arch=('x86_64')
url="https://github.com/OpenNMS/jicmp"
license=('LGPL3')
depends=()
makedepends=('git' 'jdk8-openjdk')
provides=('jicmp')
conflicts=('jicmp')
source=("jicmp::git+https://github.com/OpenNMS/jicmp.git")
sha256sums=('SKIP')
prepare() {
cd "jicmp"
git submodule update --init --recursive
}
build() {
cd "jicmp"
autoreconf -fvi
./configure --prefix=/usr
make
}
package() {
cd "jicmp"
make DESTDIR="$pkgdir/" install
}
To Do:
Fix the submodule handling.
Include the pkgver function.
I appreciate any more notes you may have!
Stepping away for a while.
Offline
pkgver function and possibly changing how you handle the submodule see my edit2 to post #11
In the todo list.
If I understand correctly java 11 compatibility is broken by javah being dropped in java 10+, the replacement being javac -h which is available from java 8 but not supported by OpenNMS.
Last edited by loqs (2023-03-11 21:51:37)
Offline
Loqs, I think you've got the right idea regarding javah & javac -h.
I'm moving forward with loqs' corrections to the PKGBUILD, but have a few questions.
Can someone confirm that when makepkg runs, it uses the pkgver() function to modify the pkgver= line within the header and rewrite the PKGBUILD file in place?
How was it determined that arch needed to be 'x86_64'? Is C always architecture specific? Are there other clues to look for?
Honestly, I don't yet understand how loqs arrived at the correct submodule handling, but am moving forward with that code.
I was able to use loqs jicmp PKGBUILD as a template to also build the jicmp6 PKGBUILD and both are now installed using pacman.
I would like to move on to finally creating a PKGBUILD to install opennms, however I haven't found a good resource for creating a PKGBUILD which utilizes systemd. Does anyone have some suggested reading?
Offline
Can someone confirm that when makepkg runs, it uses the pkgver() function to modify the pkgver= line within the header and rewrite the PKGBUILD file in place?
https://wiki.archlinux.org/title/VCS_pa … )_function
Is C always architecture specific? Are there other clues to look for?
https://wiki.archlinux.org/title/PKGBUILD#arch
I would like to move on to finally creating a PKGBUILD to install opennms, however I haven't found a good resource for creating a PKGBUILD which utilizes systemd.
PKGBUILDs don't "utilize systemd" - what does that even mean? Packaged software can include service files - and there are countless examples of PKGBUILD for such software (hell, grab any one at random now and your odds are good it includes a service file for the software).
Does anyone have some suggested reading?
Given that these questions would have all been answered by looking at the wiki, I'd suggest reading the wiki.
Last edited by Trilby (2023-04-02 18:14:13)
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
Are there [architecture-specificity] clues to look for?
Generally any use of ./configure, make, make install would imply compiled code. This may not be quite 100% a perfect test as a Makefile could be provided for scripts - but I highly doubt any would use a configure script. You can also just check the content of the package for any binaries:
find pkg -type f -executable -exec file '{}' \+ | grep ELF
Or just use namcap, as this is one of many checks it will do for you.
EDIT: sorry for the double post - I meant to edit my last post to add this, but ended up quoting myself instead.
Last edited by Trilby (2023-04-02 18:20:29)
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
Thank you Trilby!
Offline