On 25/08/16 06:53, Jonathan de Boyne Pollard wrote:
http://adrianchadd.blogspot.co.uk/2016/08/freebsd-on-tiny-system-whats-missing.html?showComment=1471236502051#c1305086913155850955
, Adrian Chadd:

We're using s6 at work, and it works out mostly ok. Mostly once you
get around the linuxisms, and the lack of sensible time code in it
(its calculations for daemon run duration is based on system time, not
wall clock, so if your box boots jan 1, 1970 then gets NTP, things
are.. hilarious), and some of the arcane bits to get logging working
right.

What are these Linuxisms in s6?  s6-linux-utils and s6-linux-init have
Linuxisms, obviously.  But what Linuxisms does s6 have?


The skalibs library used by s6 to calculate the deadlines should use clock_gettime(CLOCK_MONOTONIC) on FreeBSD and as such shouldn't be affected by changes to the wall clock.

I'm currently working on a FreeBSD only potential init replacement as well just without the mandatory per service supervisor process. The new kqueue EVFILT_PROCDESC filter type in FreeBSD 11 combined with pdfork() should make it really easy to deal child processes in a single unified kevent loop. Forking services could still be handled by a supervisor using procctl(PROC_REAP_ACQUIRE).

At the moment I'm fighting with some corner cases in the file descriptor passing code and redesigning the API to work without access to a writable file system. My last API required a writable file system because FreeBSD doesn't support listen()ing on unbound unix domain seqpacket sockets and I don't want to require something like the Linux /run tmpfs. Instead my new API uses socketpair() to create a connected pair of anonymous unix domain sockets for each supervised process. Next I have to find out if fexecve() works at least for fd 0, 1 and 2 without a mounted fdescfs.

I want to implement the following features in a single process capable of running as PID 1:
- Track service dependencies (want, require, bind, conflict)
- Store, Retrieve and close file descriptors.
- Spawn and supervise processes in a well defined environment.
- Reliable event notification with coalescing.
- Bootstrap the system with help from a default service.

With those features it should be able to wrap existing rc.d scripts without resorting to polling.

Reply via email to