From: Mathieu Baudier Date: Mon, 29 May 2023 08:29:14 +0000 (+0200) Subject: Introduce jbin X-Git-Tag: v2.1.0^2~3 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-freed.git;a=commitdiff_plain;h=627907b5273045f43d5c8f988a48094a82b36fd2 Introduce jbin --- diff --git a/usr/jbin/.classpath b/usr/jbin/.classpath new file mode 100644 index 0000000..81fe078 --- /dev/null +++ b/usr/jbin/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/usr/jbin/.gitignore b/usr/jbin/.gitignore new file mode 100644 index 0000000..411d6c1 --- /dev/null +++ b/usr/jbin/.gitignore @@ -0,0 +1,3 @@ +/bin/ +/src/* +!/src/*.java \ No newline at end of file diff --git a/usr/jbin/.project b/usr/jbin/.project new file mode 100644 index 0000000..dfb0678 --- /dev/null +++ b/usr/jbin/.project @@ -0,0 +1,28 @@ + + + freed-jbin + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/usr/jbin/META-INF/MANIFEST.MF b/usr/jbin/META-INF/MANIFEST.MF new file mode 100644 index 0000000..8b35d9a --- /dev/null +++ b/usr/jbin/META-INF/MANIFEST.MF @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Freed-jbin +Bundle-SymbolicName: freed-jbin +Bundle-Version: 1.0.0.qualifier +Automatic-Module-Name: freed.jbin +Bundle-RequiredExecutionEnvironment: JavaSE-17 diff --git a/usr/jbin/Makefile b/usr/jbin/Makefile new file mode 100644 index 0000000..e748529 --- /dev/null +++ b/usr/jbin/Makefile @@ -0,0 +1,15 @@ +# GNU coding standards +prefix ?= /usr/local +exec_prefix ?= $(prefix) +sbindir ?= $(exec_prefix)/sbin + +all: + cp src/FREEdInit.java src/freed-init + sed -i '1!b;s|//#!|#!|' src/freed-init + +clean: + $(RM) src/freed-init + +install: + cp src/freed-init $(DESTDIR)$(sbindir) + chmod u+x $(DESTDIR)$(sbindir)/freed-init diff --git a/usr/jbin/build.properties b/usr/jbin/build.properties new file mode 100644 index 0000000..5d082ea --- /dev/null +++ b/usr/jbin/build.properties @@ -0,0 +1,5 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . +additional.bundles = org.argeo.init diff --git a/usr/jbin/src/FREEdInit.java b/usr/jbin/src/FREEdInit.java new file mode 100644 index 0000000..53e0e61 --- /dev/null +++ b/usr/jbin/src/FREEdInit.java @@ -0,0 +1,53 @@ +//#! /usr/bin/java --source 17 -cp /usr/local/share/a2/osgi/equinox/org.argeo.tp.osgi/org.eclipse.osgi.3.18.jar:/usr/local/share/a2/org.argeo.cms/org.argeo.init.2.3.jar -Dosgi.configuration.cascaded=true -Dosgi.sharedConfiguration.area=/etc/freed -Dosgi.sharedConfiguration.area.readOnly=true -Dosgi.configuration.area=/var/lib/freed/state/ -Dosgi.instance.area=/var/lib/freed/data/ -Dosgi.console=true + +import java.lang.management.ManagementFactory; + +import org.argeo.init.Service; + +import jdk.jshell.tool.JavaShellToolBuilder; +import sun.misc.Signal; + +public class FREEdInit { + public static void main(String... args) { + final long pid = ProcessHandle.current().pid(); + System.out.println("FREEd Init daemon starting with pid " + pid + "..."); + System.out.println(System.getProperty("user.dir")); + System.out.println(System.getProperty("user.name")); + System.out.println(System.getProperty("user.home")); + System.out.flush(); + + Signal.handle(new Signal("TERM"), (signal) -> { + System.out.println("SIGTERM caught"); + System.exit(0); + }); + Signal.handle(new Signal("INT"), (signal) -> { + System.out.println("SIGINT caught"); + System.exit(0); + }); + Signal.handle(new Signal("HUP"), (signal) -> { + System.out.println("SIGHUP caught"); + System.exit(0); + }); + + if (args.length > 0 && ("1".equals(args[0]) // + || "single".equals(args[0]) // + || "emergency".equals(args[0]))) { + // TODO check if we can remove dependency to management + String classpath = ManagementFactory.getRuntimeMXBean().getClassPath(); + String feedbackMode = "concise"; + // TODO --startup script + JavaShellToolBuilder builder = JavaShellToolBuilder.builder(); + try { + builder.start("--execution", "direct", "--class-path", classpath, "--feedback", feedbackMode); + } catch (Exception e) { + e.printStackTrace(); + System.err.flush(); + System.exit(1); + return; + } + + } else { + Service.main(args); + } + } +}