92 lines
3.0 KiB
Markdown
92 lines
3.0 KiB
Markdown
# FreeBSD Support Improvements
|
||
|
||
- **Native Build Artefacts**
|
||
Update `oc2r-native-networking/build.sh` so producing
|
||
`liboc2rnet-bsd-{x86_64,arm64}.so` is part of the normal build pipeline. At
|
||
the moment the script never emits BSD binaries, so new resources would be
|
||
missing from CI outputs.
|
||
|
||
## Build and install (FreeBSD)
|
||
|
||
1. **Install prerequisites**
|
||
```sh
|
||
pkg install openjdk17 clang gmake
|
||
export JAVA_HOME=/usr/local/openjdk17 # adjust if your JDK lives elsewhere
|
||
```
|
||
|
||
2. **Build the FreeBSD JNI bridge**
|
||
```sh
|
||
cd oc2r-native-networking
|
||
./build-freebsd.sh
|
||
cp build/liboc2rnet-bsd-*.so ../oc2r/src/main/resources/natives/bsd/ # Adjust to your oc2r sources location
|
||
```
|
||
|
||
3. **Compile and install the helper**
|
||
```sh
|
||
cc -O2 -Wall -Wextra -pedantic oc2rnet-helper.c -o oc2rnet-helper
|
||
install -o root -g wheel -m 0755 oc2rnet-helper /usr/local/libexec/oc2rnet-helper
|
||
chmod u+s /usr/local/libexec/oc2rnet-helper
|
||
```
|
||
|
||
## Launch helper and validation
|
||
|
||
4. **Launch the helper**
|
||
- Foreground check:
|
||
```sh
|
||
/usr/local/libexec/oc2rnet-helper
|
||
```
|
||
- Background:
|
||
```sh
|
||
daemon -r -f /usr/local/libexec/oc2rnet-helper
|
||
```
|
||
|
||
5. **Validate the socket and raw privileges**
|
||
```sh
|
||
ls -l /var/run/oc2rnet-helper.sock
|
||
sockstat -l | grep oc2rnet
|
||
```
|
||
|
||
6. **Test the jni against helper**
|
||
```sh
|
||
cc -DCLITEST -O2 -Wall -Wextra -pedantic -Ijni-headers -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/freebsd" bsd_impl.c -o pingtest
|
||
./pingtest 9.9.9.9
|
||
```
|
||
Expect a successful payload echo when the helper is reachable; a `NULL`
|
||
result signals the helper was unavailable, matching the mod’s fallback
|
||
behaviour.
|
||
|
||
7. **(optional) Kill daemon**
|
||
```sh
|
||
kill "$(pgrep -fx 'daemon -r -f /usr/local/libexec/oc2rnet-helper')"
|
||
|
||
```
|
||
|
||
## Recompile java mod with freebsd compat
|
||
|
||
1. If not already done copy the so file(s) compiled in step 2 of the build section
|
||
|
||
2. (optional) Change o2cr mod version in `gradle.properties`
|
||
|
||
3. Run `./gradlew build` in the oc2r sources files modified to support FreeBSD
|
||
|
||
4. Get the file located in `./build/libs/oc2r-*-all.jar` and put it in your `mods` directory
|
||
|
||
## Important note
|
||
|
||
Run the helper with `daemon(8)` or an `rc.d` script so it stays available. The
|
||
JNI bridge will fall back to returning `null` if the helper is unreachable.
|
||
|
||
## Optional helper configuration
|
||
|
||
Set these environment variables before launching the helper to adjust runtime
|
||
behaviour:
|
||
|
||
- `OC2RNET_SOCKET_MODE` (octal, default `0666`) — override the UNIX socket mode.
|
||
- `OC2RNET_SOCKET_GROUP` — chown the socket to this group after `bind(2)`.
|
||
- `OC2RNET_DROP_USER` (default `nobody`) — unprivileged account the helper
|
||
switches to once initialisation is complete.
|
||
- `OC2RNET_SOCK` (default `/var/run/oc2rnet-helper.sock`) — alternate socket
|
||
path for jails or non-standard hierarchies.
|
||
- `OC2RNET_NO_CAPSICUM` — set to any value to skip `cap_enter()` when Capsicum
|
||
blocks raw sockets on older releases.
|