diff --git a/modules/ghidra-server/default.nix b/modules/ghidra-server/default.nix index 8299949..eb119ea 100644 --- a/modules/ghidra-server/default.nix +++ b/modules/ghidra-server/default.nix @@ -1,6 +1,11 @@ { config, lib, pkgs, ... }: with lib; -let cfg = config.services.ghidra-server; in { +let + cfg = config.services.ghidra-server; + adminCli = pkgs.callPackage ../../pkgs/ghidra-server-cli { + inherit (cfg) package jdkPackage directory; + }; +in { options.services.ghidra-server = { enable = mkEnableOption "ghidra-server"; enableAdminCli = mkEnableOption "ghidra-svrAdmin"; @@ -80,5 +85,6 @@ let cfg = config.services.ghidra-server; in { }; wantedBy = ["multi-user.target"]; }; + environment.systemPackages = optionals cfg.enableAdminCli [ adminCli ]; }; } diff --git a/pkgs/ghidra-server-cli/default.nix b/pkgs/ghidra-server-cli/default.nix new file mode 100644 index 0000000..9a969bc --- /dev/null +++ b/pkgs/ghidra-server-cli/default.nix @@ -0,0 +1,20 @@ +{ + writeShellScriptBin, + writeText, + + directory, + jdkPackage, + package +}: + +let + server_conf = writeText "server.conf" "ghidra.repositories.dir=${directory}/repositories"; +in writeShellScriptBin "ghidra-svrAdmin" '' + exec ${jdkPackage}/bin/java \ + -cp ${package}/lib/ghidra/Ghidra/Framework/Utility/lib/Utility.jar \ + -Djava.system.class.loader=ghidra.GhidraClassLoader \ + -Dfile.encoding=UTF8 \ + -Duser.country=US -Duser.language=en -Duser.variant= \ + -Xshare:off ghidra.Ghidra ghidra.server.ServerAdmin \ + ${server_conf} "$@" +''