Skip to content

Commit

Permalink
Merge pull request #97 from Rider128/default-option-phoebus
Browse files Browse the repository at this point in the history
phoebus-setup-hook: add java heap size and change encoding by default for phoebus
  • Loading branch information
minijackson authored Jan 23, 2025
2 parents d9be6ce + 68cb91e commit 864aef3
Show file tree
Hide file tree
Showing 9 changed files with 180 additions and 108 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,6 @@ outputs

# Created by running NixOS tests in interactive mode
.nixos-test-history

#VScode extra files
*.code-workspace
4 changes: 4 additions & 0 deletions docs/nixos-services/options-reference/phoebus-client.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Phoebus Client
==============

.. nix:automodule:: programs.phoebus-client
6 changes: 6 additions & 0 deletions docs/release-notes/2411.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ Breaking changes
due to its license.
Migrate your data by following :ref:`mongodb-to-ferretdb`.

New features
------------

- A new module :nix:option:`programs.phoebus-client` was added
to install Phoebus and set up Java options.

Detailed migration information
------------------------------

Expand Down
1 change: 1 addition & 0 deletions nixos/module-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
./modules/channel-finder/service.nix
./modules/phoebus/alarm-logger.nix
./modules/phoebus/alarm-server.nix
./modules/phoebus/client.nix
./modules/phoebus/olog.nix
./modules/phoebus/save-and-restore.nix
]
28 changes: 28 additions & 0 deletions nixos/modules/phoebus/client.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.programs.phoebus-client;
pkg = pkgs.epnix.phoebus.override {java_opts = cfg.java_opts;};
in {
options.programs.phoebus-client = {
enable = lib.mkEnableOption "installing and configuring the Phoebus client";
java_opts = lib.mkOption {
type = lib.types.str;
default = "-XX:MinHeapSize=128m -XX:MaxHeapSize=4g -XX:InitialHeapSize=1g -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:-ShrinkHeapInSteps -XX:NativeMemoryTracking=detail";
example = "-XX:MinHeapSize=128m -XX:MaxHeapSize=4g -XX:InitialHeapSize=1g";
description = ''
Set Java options for the Phoebus client.
For more information, see:
https://docs.oracle.com/en/java/javase/21/docs/specs/man/java.html#extra-options-for-java
'';
};
};

config = lib.mkIf cfg.enable {
environment.systemPackages = [pkg];
};
}
3 changes: 2 additions & 1 deletion pkgs/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ in

pcas = callPackage ./epnix/tools/pcas {};

phoebus = callPackage ./epnix/tools/phoebus/client {
phoebus = callPackage ./epnix/tools/phoebus/client {};
phoebus-unwrapped = callPackage ./epnix/tools/phoebus/client-unwrapped {
jdk = prev.jdk21;
openjfx = prev.openjfx21;
};
Expand Down
90 changes: 90 additions & 0 deletions pkgs/epnix/tools/phoebus/client-unwrapped/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{
lib,
epnixLib,
stdenv,
substituteAll,
maven,
makeWrapper,
epnix,
jdk,
openjfx,
python3,
}: let
buildDate = "2022-02-24T07:56:00Z";
in
stdenv.mkDerivation {
pname = "phoebus-unwrapped";
inherit (epnix.phoebus-deps) version src;

patches = [
(substituteAll {
src = ./fix-python-path.patch;
python = lib.getExe python3;
})
];

# TODO: make a scope, so that we don't pass around the whole `epnix`
nativeBuildInputs = [
maven
makeWrapper
(epnix.phoebus-setup-hook.override {
jdk = jdk.override {
enableJavaFX = true;
openjfx_jdk = openjfx.override {
withWebKit = true;
};
};
})
];

# Put runtime dependencies in propagated
# because references get thrown into a jar
# which is compressed,
# so the Nix scanner won't always be able to see them
propagatedBuildInputs = [
python3
];

buildPhase = ''
runHook preBuild
# Copy deps to a writable directory, due to the usage of "install-jars"
local deps=$PWD/deps
cp -r --no-preserve=mode "${epnix.phoebus-deps}" $deps
# TODO: tests fail
mvn package \
--projects "./phoebus-product" \
--also-make \
--offline \
-Dmaven.javadoc.skip=true -Dmaven.source.skip=true -DskipTests \
-Dproject.build.outputTimestamp=${buildDate} \
-Dmaven.repo.local="$deps"
runHook postBuild
'';

installPhase = ''
runHook preInstall
installPhoebusJar \
"phoebus-product/" \
"product-$version.jar" \
"phoebus" \
"org.phoebus.product.Launcher"
# MIME types for PV Tables
install -D -m 444 phoebus-product/phoebus.xml -t $out/share/mime/packages
runHook postInstall
'';

meta = {
description = "Control System Studio's Phoebus client";
homepage = "https://control-system-studio.readthedocs.io/en/latest/index.html";
mainProgram = "phoebus";
license = lib.licenses.epl10;
maintainers = with epnixLib.maintainers; [minijackson];
inherit (jdk.meta) platforms;
};
}
153 changes: 46 additions & 107 deletions pkgs/epnix/tools/phoebus/client/default.nix
Original file line number Diff line number Diff line change
@@ -1,111 +1,50 @@
{
lib,
epnixLib,
stdenv,
substituteAll,
maven,
makeWrapper,
epnix,
epnixLib,
lib,
makeDesktopItem,
copyDesktopItems,
epnix,
jdk,
openjfx,
python3,
}: let
buildDate = "2022-02-24T07:56:00Z";
in
stdenv.mkDerivation {
pname = "phoebus";
inherit (epnix.phoebus-deps) version src;

patches = [
(substituteAll {
src = ./fix-python-path.patch;
python = lib.getExe python3;
})
];

# TODO: make a scope, so that we don't pass around the whole `epnix`
nativeBuildInputs = [
maven
copyDesktopItems
makeWrapper
(epnix.phoebus-setup-hook.override {
jdk = jdk.override {
enableJavaFX = true;
openjfx_jdk = openjfx.override {
withWebKit = true;
};
};
})
];

# Put runtime dependencies in propagated
# because references get thrown into a jar
# which is compressed,
# so the Nix scanner won't always be able to see them
propagatedBuildInputs = [
python3
];

desktopItems = [
(makeDesktopItem {
name = "phoebus";
exec = "phoebus -server 4918 -resource %f";
desktopName = "Phoebus";
keywords = ["epics" "css"];
# https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry
categories = [
# Main
"Office"

# Additional
"Java"
"Viewer"
];
})
];

buildPhase = ''
runHook preBuild
# Copy deps to a writable directory, due to the usage of "install-jars"
local deps=$PWD/deps
cp -r --no-preserve=mode "${epnix.phoebus-deps}" $deps
# TODO: tests fail
mvn package \
--projects "./phoebus-product" \
--also-make \
--offline \
-Dmaven.javadoc.skip=true -Dmaven.source.skip=true -DskipTests \
-Dproject.build.outputTimestamp=${buildDate} \
-Dmaven.repo.local="$deps"
runHook postBuild
'';

installPhase = ''
runHook preInstall
installPhoebusJar \
"phoebus-product/" \
"product-$version.jar" \
"phoebus" \
"org.phoebus.product.Launcher"
# MIME types for PV Tables
install -D -m 444 phoebus-product/phoebus.xml -t $out/share/mime/packages
runHook postInstall
'';

meta = {
description = "Control System Studio's Phoebus client";
homepage = "https://control-system-studio.readthedocs.io/en/latest/index.html";
mainProgram = "phoebus";
license = lib.licenses.epl10;
maintainers = with epnixLib.maintainers; [minijackson];
inherit (jdk.meta) platforms;
};
}
stdenv,
# Inspired by:
# https://epics.anl.gov/tech-talk/2024/msg00895.php
java_opts ? "-XX:MinHeapSize=128m -XX:MaxHeapSize=4g -XX:InitialHeapSize=1g -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:-ShrinkHeapInSteps -XX:NativeMemoryTracking=detail",
}:
stdenv.mkDerivation {
pname = "phoebus";
inherit (epnix.phoebus-unwrapped) version;
nativeBuildInputs = [makeWrapper copyDesktopItems];

dontUnpack = true;
dontBuild = true;
dontConfigure = true;

installPhase = ''
runHook preInstall
# This wrapper for the `phoebus-unwrapped` executable sets the `JAVA_OPTS`
makeWrapper "${lib.getExe epnix.phoebus-unwrapped}" "$out/bin/$pname" \
--prefix JAVA_OPTS " " "${java_opts}"
runHook postInstall
'';

desktopItems = [
(makeDesktopItem {
name = "phoebus";
exec = "phoebus -server 4918 -resource %f";
desktopName = "Phoebus";
keywords = ["epics" "css"];
# https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry
categories = [
# Main
"Office"
# Additional
"Java"
"Viewer"
];
})
];

inherit (epnix.phoebus-unwrapped) meta;
}

0 comments on commit 864aef3

Please sign in to comment.