Davin McCall [Thu, 7 Jun 2018 23:13:13 +0000 (00:13 +0100)]
Don't keep char * from array_string temporary.
The string might not be resolved as a compile-time constant, and the
temporary object may be destroyed before the string within it is used.
Davin McCall [Thu, 7 Jun 2018 22:17:11 +0000 (23:17 +0100)]
array_string: declare 'arr' member as const.
Davin McCall [Thu, 7 Jun 2018 22:13:59 +0000 (23:13 +0100)]
mconfig-gen: generate constexpr declarations.
Davin McCall [Thu, 7 Jun 2018 20:21:47 +0000 (21:21 +0100)]
Fix mconfig.h generation.
Re-work mconfig-gen so that it takes the variables at run-time on the
command line, rather than receiving them as macros at compile time. The
latter makes it impossible to use some values.
Davin McCall [Thu, 7 Jun 2018 18:05:48 +0000 (19:05 +0100)]
Add loading test for environment variable substitution.
Davin McCall [Thu, 7 Jun 2018 17:38:10 +0000 (18:38 +0100)]
Avoid logging service stop after failure to start.
The "FAILED" followed by "STOPPED" is somewhat redundant and arguably
incorrect.
Davin McCall [Tue, 5 Jun 2018 17:37:05 +0000 (18:37 +0100)]
Fix acquire/release counting in some sitations.
In particular, failure to start did not always cause a release as it
should have.
Davin McCall [Tue, 5 Jun 2018 09:12:43 +0000 (10:12 +0100)]
Add service load test.
Davin McCall [Mon, 4 Jun 2018 21:09:02 +0000 (22:09 +0100)]
proctests: add a new test, currently failing.
This also includes more OS abstraction in bp_sys so that we can test
different exit statuses.
Davin McCall [Mon, 4 Jun 2018 09:43:09 +0000 (10:43 +0100)]
Introduce "load-options" setting and "sub-vars" option.
This allows for specifying a service command line with parameters in the
form of $NAME, where NAME is an environment variable. The parameter is
replaced with the contents of the environment variable as a single
value.
Davin McCall [Mon, 21 May 2018 17:28:27 +0000 (18:28 +0100)]
Use control socket path and sbin directory from config.
Use configured paths rather than hardcoded paths for the control socket
(normally /dev/dinitctl) and the sbin directory (/sbin).
Davin McCall [Tue, 15 May 2018 20:36:03 +0000 (21:36 +0100)]
Generate mconfig.h file with selected variables from mconfig.
Davin McCall [Fri, 18 May 2018 18:19:13 +0000 (19:19 +0100)]
Implement a compile-time string manipulation class.
Currently very simple, allows for concatenation only.
Davin McCall [Wed, 16 May 2018 12:31:51 +0000 (13:31 +0100)]
Minor fixes to rootfscheck script.
Davin McCall [Wed, 16 May 2018 12:24:07 +0000 (13:24 +0100)]
shutdown: set passed-via-environment control socket to blocking.
We don't expect non-blocking errors like EAGAIN so we need it in
blocking mode.
Davin McCall [Tue, 15 May 2018 22:43:23 +0000 (23:43 +0100)]
Set main log format earlier.
This is necessary to avoid buffering messages in incorrect format
(without the priority indicator).
Davin McCall [Tue, 15 May 2018 21:23:36 +0000 (22:23 +0100)]
Correct some logic for handling overflow messages in log.
Davin McCall [Tue, 15 May 2018 20:57:58 +0000 (21:57 +0100)]
Install man pages with correct permissions mask.
Davin McCall [Mon, 14 May 2018 20:22:43 +0000 (21:22 +0100)]
Look in multiple directories for service descriptions.
Previously we checked only /etc/dinit.d; now, check /etc/dinit.d,
/usr/local/lib/dinit.d, and /lib/dinit.d, in that order.
Davin McCall [Mon, 14 May 2018 09:24:01 +0000 (10:24 +0100)]
dirload_service_set: add support for multiple service directories.
Davin McCall [Mon, 14 May 2018 09:06:50 +0000 (10:06 +0100)]
Update MacOS build defaults.
Davin McCall [Wed, 25 Apr 2018 08:36:48 +0000 (09:36 +0100)]
Set example filesystem services to have no start timeout.
File system checks take as long as they take; let them run.
Davin McCall [Fri, 6 Apr 2018 21:00:18 +0000 (22:00 +0100)]
Update bundled Dasynq to 1.1.4.
Davin McCall [Fri, 6 Apr 2018 18:25:04 +0000 (19:25 +0100)]
shutdown: push all output through a cyclic buffer.
Push all output, including from subprocesses, through a cyclic
buffer, and discard buffer contents if it cannot be output fast
enough. I.e. shutdown should not hang if the console is blocked
(such as due to a hardware issue with serial console, or user
having pressed ctrl+S to stop console output on a VT).
Davin McCall [Thu, 22 Mar 2018 18:26:49 +0000 (18:26 +0000)]
Update COMPARISON, TODO.
Shuffle around a few TODO items.
Davin McCall [Tue, 20 Mar 2018 20:40:25 +0000 (20:40 +0000)]
Update version number to 0.1.1.
Davin McCall [Tue, 20 Mar 2018 20:39:04 +0000 (20:39 +0000)]
Update man page with --log-file documentation.
Davin McCall [Tue, 20 Mar 2018 19:01:02 +0000 (19:01 +0000)]
Add --log-file (-l) option to specify logging to file.
The default is to log to the syslog facility. Also in this commit: start
logging from the beginning if not system init, rather than waiting for
logging service.
Davin McCall [Tue, 20 Mar 2018 18:28:40 +0000 (18:28 +0000)]
Make "syslog" formatting of main log entries optional.
Davin McCall [Tue, 20 Mar 2018 09:58:32 +0000 (09:58 +0000)]
load service: simplify conditional in while loop.
Davin McCall [Tue, 20 Mar 2018 09:54:23 +0000 (09:54 +0000)]
tests: add a new test.
Davin McCall [Tue, 20 Mar 2018 00:11:17 +0000 (00:11 +0000)]
Fix issue with incorrect acquisition counts with waits_for dependencies.
Davin McCall [Mon, 19 Mar 2018 22:59:32 +0000 (22:59 +0000)]
service stopped(): release console if have_console is set.
Previously relied on onstart_flags.runs_on_console, which should also be
accurate, but seeing as we have a flag available with the exact
semantics guaranteed then we should use that.
Davin McCall [Mon, 19 Mar 2018 22:57:00 +0000 (22:57 +0000)]
Handle startup timer expiry using failed_to_start.
Reduces code duplication, and probably handles some things that were not
being handled correctly.
Davin McCall [Mon, 19 Mar 2018 22:45:17 +0000 (22:45 +0000)]
Make sure listeners are notified of start cancellation.
Start cancellation was only working for process-based services.
Davin McCall [Mon, 19 Mar 2018 19:08:49 +0000 (19:08 +0000)]
Log service start timeout.
Davin McCall [Mon, 19 Mar 2018 19:08:12 +0000 (19:08 +0000)]
Add a test, adjustments to other tests.
Davin McCall [Mon, 19 Mar 2018 19:01:56 +0000 (19:01 +0000)]
When stopping dependents, also release waits_for/soft dependencies.
waits for / soft dependencies should treat a start failure or other
dependency stop as a prompt to check for start conditions having been
met, after the dependency link is unchained.
Davin McCall [Sun, 4 Mar 2018 02:28:54 +0000 (02:28 +0000)]
Minor fixes to README.
Davin McCall [Thu, 1 Mar 2018 19:59:20 +0000 (19:59 +0000)]
Bump version to 0.1.0.
Davin McCall [Wed, 28 Feb 2018 16:04:43 +0000 (16:04 +0000)]
Update COMPARISON with other systems.
Davin McCall [Wed, 28 Feb 2018 15:29:40 +0000 (15:29 +0000)]
tests: build fix for OpenBSD.
Davin McCall [Wed, 28 Feb 2018 15:29:29 +0000 (15:29 +0000)]
man page: rework slightly.
Davin McCall [Wed, 28 Feb 2018 12:32:11 +0000 (12:32 +0000)]
man pages: reword description of depends-ms dependency.
Davin McCall [Wed, 28 Feb 2018 12:08:37 +0000 (12:08 +0000)]
Fix: stop milestone dependency before started.
Stopping a milestone dependency before its dependent has started must
also stop the dependent (the "milestone" hasn't been reached).
Add a test.
Davin McCall [Tue, 27 Feb 2018 17:55:58 +0000 (17:55 +0000)]
Set default log level for main log (not console) to INFO.
Davin McCall [Tue, 27 Feb 2018 17:47:42 +0000 (17:47 +0000)]
Log system startup.
Davin McCall [Tue, 27 Feb 2018 17:27:39 +0000 (17:27 +0000)]
Logging: support for supressing output to console per message.
Davin McCall [Tue, 27 Feb 2018 14:10:40 +0000 (14:10 +0000)]
Minor man-page fixes.
Davin McCall [Tue, 27 Feb 2018 13:16:33 +0000 (13:16 +0000)]
logging: refactoring, add comment.
Davin McCall [Mon, 26 Feb 2018 22:53:40 +0000 (22:53 +0000)]
Read environment from file at startup.
Davin McCall [Fri, 23 Feb 2018 18:40:45 +0000 (18:40 +0000)]
Allow setting working directory for services.
Davin McCall [Tue, 20 Feb 2018 20:09:44 +0000 (20:09 +0000)]
Clean up a comparison warning.
Davin McCall [Tue, 20 Feb 2018 19:07:04 +0000 (19:07 +0000)]
Add another (passing) test.
Davin McCall [Tue, 20 Feb 2018 18:59:41 +0000 (18:59 +0000)]
Add another test and a fix to make it pass.
Davin McCall [Tue, 20 Feb 2018 11:43:51 +0000 (11:43 +0000)]
Move processing of start pin in do_stop.
The pin should prevent the process from stopping, but not from any other
effects on dependencies. This change makes dependencies of a
start-pinned service potentially go into STOPPING state, if the pinned
service is issued a stop.
Davin McCall [Tue, 20 Feb 2018 10:19:06 +0000 (10:19 +0000)]
Additional comment to better explain two-phase service transition.
Davin McCall [Mon, 19 Feb 2018 10:57:40 +0000 (10:57 +0000)]
Add comment.
Davin McCall [Mon, 19 Feb 2018 10:39:24 +0000 (10:39 +0000)]
Add a new test.
Davin McCall [Fri, 16 Feb 2018 10:09:54 +0000 (10:09 +0000)]
Don't bypass queue cycle in emergency_stop.
Rather than calling stopped() directly from emergency_stop(), wait for
the transition cycle.
Davin McCall [Thu, 15 Feb 2018 19:04:25 +0000 (19:04 +0000)]
Update TODO.
Davin McCall [Thu, 15 Feb 2018 18:32:19 +0000 (18:32 +0000)]
On interrupting start of scripted service, run stop script.
If a scripted service startup is interrupted via signal, run the stop
script in case cleanup is required.
Davin McCall [Tue, 13 Feb 2018 18:32:01 +0000 (18:32 +0000)]
Mock tcsetpgrp() and getpgrp() for tests.
Davin McCall [Tue, 13 Feb 2018 18:14:29 +0000 (18:14 +0000)]
Refactoring in utilities.
Davin McCall [Mon, 12 Feb 2018 20:46:05 +0000 (20:46 +0000)]
Fix test build failures.
Davin McCall [Mon, 12 Feb 2018 20:34:56 +0000 (20:34 +0000)]
dinitctl: query protocol version at beginning + refactoring.
Davin McCall [Mon, 5 Feb 2018 10:58:44 +0000 (10:58 +0000)]
Factor out some Dinit client functions tp a new header (dinit-client.h).
Davin McCall [Sun, 11 Feb 2018 15:02:25 +0000 (15:02 +0000)]
On FreeBSD, build without -fno-rtti.
It seems to stop exception handling from being able to recognise which
exception was thrown.
Davin McCall [Sun, 11 Feb 2018 13:05:44 +0000 (13:05 +0000)]
Allow initial services to be specified on command-line on non-Linux OS.
Davin McCall [Sat, 10 Feb 2018 19:59:51 +0000 (19:59 +0000)]
Mark as a subreaper on FreeBSD (as for Linux).
This means double-forking processes become a child of Dinit rather than
PID 1 (in case they are different).
Davin McCall [Sat, 10 Feb 2018 17:22:41 +0000 (17:22 +0000)]
Implement service unloading.
Implements the requisite control protocol parts and the dinitctl
"unload" command.
Davin McCall [Sat, 10 Feb 2018 16:53:09 +0000 (16:53 +0000)]
base_process_service: properly clean up in destructor.
Davin McCall [Sat, 10 Feb 2018 15:53:35 +0000 (15:53 +0000)]
Renaming: camelCase to snake_case.
Davin McCall [Sat, 10 Feb 2018 15:51:35 +0000 (15:51 +0000)]
control: rework handle allocation.
Davin McCall [Sat, 10 Feb 2018 15:32:51 +0000 (15:32 +0000)]
control conn. allocate_service_handle(): exception safety.
Davin McCall [Sat, 10 Feb 2018 14:42:03 +0000 (14:42 +0000)]
Make sure a process service starts-on-console matches runs-on-console.
Davin McCall [Fri, 9 Feb 2018 22:37:18 +0000 (22:37 +0000)]
Implement a timeout (of 5 seconds) for log to flush on shutdown.
Davin McCall [Fri, 9 Feb 2018 22:04:07 +0000 (22:04 +0000)]
Upgrade bundled Dasynq to 1.1.2.
Davin McCall [Sat, 3 Feb 2018 19:26:56 +0000 (19:26 +0000)]
Up version to 0.08.
Davin McCall [Sat, 3 Feb 2018 19:21:35 +0000 (19:21 +0000)]
Add "shutdown" subcommand to dinitctl.
This provides a handy way to shut down a non-system instance of Dinit,
and wait until shutdown is complete.
Davin McCall [Sat, 3 Feb 2018 19:20:16 +0000 (19:20 +0000)]
Update bundled Dasynq (to 1.1.0).
Davin McCall [Sat, 3 Feb 2018 18:38:48 +0000 (18:38 +0000)]
Fix error in control protocol implementation in dinitctl/shutdown.
Davin McCall [Sat, 3 Feb 2018 17:12:53 +0000 (17:12 +0000)]
Adjust compile/link options.
Linux: build with -fno-plt and LTO.
All: build with -std=c++11 rather than -std=gnu++11.
Davin McCall [Sat, 3 Feb 2018 16:41:23 +0000 (16:41 +0000)]
Add #include's to fix OpenBSD build.
Davin McCall [Sat, 3 Feb 2018 16:27:27 +0000 (16:27 +0000)]
dinitctl: various renaming from camelCase
Davin McCall [Thu, 25 Jan 2018 23:14:17 +0000 (23:14 +0000)]
Process tests: check timer status in various tests.
Make sure that timers have been stopped appropriately after state
transitions.
Davin McCall [Thu, 25 Jan 2018 23:13:35 +0000 (23:13 +0000)]
Stop the stop timer when a service stops.
Davin McCall [Thu, 25 Jan 2018 22:17:02 +0000 (22:17 +0000)]
process service: allow start timeout, but don't arm timer.
Timeout for process services is currently meaningless, although when
startup notification is implemented it will take on meaning. This is a
slightly cleaner fix than just forcing the timeout to 0 in the
constructor (since it can then still be later set to a value that won't
work).
Davin McCall [Wed, 24 Jan 2018 23:39:26 +0000 (23:39 +0000)]
Disable default start timeout for process services.
Davin McCall [Sun, 21 Jan 2018 15:34:40 +0000 (15:34 +0000)]
Rename load_service.cc to load-service.cc for consistency.
Davin McCall [Sun, 21 Jan 2018 14:34:58 +0000 (14:34 +0000)]
Fix processing of "run-as" parameter.
Davin McCall [Sun, 21 Jan 2018 12:56:50 +0000 (12:56 +0000)]
Man pages: split service description format to separate man page.
Davin McCall [Sat, 20 Jan 2018 20:42:11 +0000 (20:42 +0000)]
Support for running services as a different user (run-as=...).
Davin McCall [Fri, 19 Jan 2018 23:41:54 +0000 (23:41 +0000)]
Refactoring / clean up.
Davin McCall [Fri, 19 Jan 2018 20:15:05 +0000 (20:15 +0000)]
Move some #include's around to fix build issue.
Davin McCall [Fri, 19 Jan 2018 18:00:35 +0000 (18:00 +0000)]
Move some data/functions from service_record to base_process_service.
Davin McCall [Fri, 19 Jan 2018 10:15:25 +0000 (10:15 +0000)]
Rename getShutdownType function - eliminate snake case.
Davin McCall [Fri, 19 Jan 2018 10:12:24 +0000 (10:12 +0000)]
Re-work console acquisition/release.
Use variables to track when a service is waiting for the console or has
acquired console, rather than using complex combinations of service
state.
Davin McCall [Thu, 18 Jan 2018 23:24:46 +0000 (23:24 +0000)]
Add test for console release for STARTING to STOPPED transition.
Test for console release when a service goes from STARTING to STOPPED.
Currently fails.
Davin McCall [Thu, 18 Jan 2018 22:09:21 +0000 (22:09 +0000)]
Build: rename EXTRA_LIBS to the more conventional LDFLAGS.