This is an experimental repo for finit on Artix. UPDATE: See Conclusion ======================================================================== What's (not) working: 1. LVM/cryptsetup support The main problem is the boot up seem to run in parallel, processes don't wait for tasks to be finish before moving to the next stage (eventhough I used the <hook/mount/root> which (I think) is the first thing in line, before everything in /etc/fstab will be mounted). Also, the boot up process don't accept input, which would be a problem for a passphrase-only encrypted systems. The creator recommended to either: - Use initramfs even for non-root partitions - Use the native plugin system (unfortunately, I'm not well-versed in C) https://github.com/troglobit/finit/issues/74 UPDATE: I discovered that apparently it is possible to run cryptsetup script with runparts, however, this can mean that we need to do the mounting twice, once by finit, and once by Artix since we unlocked the LVM and cryptsetup scripts in runparts. It's a dirty way, but it's rather simple comparing to creating a C program. ======================================================================== Directory and Configuration Structure ===================================== finit's main configuration resides in /etc/finit.conf, while service files are located in /etc/finit.d/available, for all installed services, and /etc/finit.d/enabled, for all *enabled* services. Due to a lot of services that may have some prior commands that must be run, those services will need a wrapper script. We will place it in /etc/finit.d/scripts for services, /etc/finit.d/rc.init for boot up, and /etc/finit.d/rc.shutdown for shutdown respectively. General syntax ============== finit's general syntax configuration for standalone services look like this: service [2345] <pid/dependencies> serviceexec -- Service Description Service wrappers ================ If a service requires additional commands before starting the service proper, it is generally recommended to put the service in a wrapper script first, we'll place it in /etc/finit.d/scripts as described above. Suppose a service (let's say chrony) needs some file to exists before it started, we simply add a file to /etc/finit.d/scripts with the name chronyd: #!/bin/sh install -d -m750 -o chrony -g chrony /var/run/chrony exec chronyd -n -u chrony Then we invoke the wrapper script to the proper service file in /etc/finit.d/available: service [2345] /etc/finit.d/scripts/chronyd Oneshots ======== Fortunately, finit supports oneshots. There are two possible operations for oneshots: - task, for services to be run in parallel in a runlevel - run, for services to be run in sequence in a runlevel Snytax should be similar to the usual service operation. Background ========== While finit prefers a foreground-only process, there will be a process which cannot be run in foreground. While finit does support it, we'll need to specify the PID file, so the syntax would be something like this: service [2345] pid:!/path/to/process.pid /usr/bin/process Conclusion (but still under construction) ========================================= Well, it's been a fun adventure. I like finit. I really do. But I think there are some pretty killer disadvantages. I'll try to address it (along with the advantage of course). 1. Advantages of finit - Simple service syntax This is one of my absolute favourites feature of finit. It's general service syntax is pretty much easy to write. Though I would prefer a daemontools/runit/s6 per-file configuration, I have a very pleasant experience with finit. - Integrated CGroups v2 support - Quite fast boot times 2. Disadvantage(s) - Inflexibility of Stage 1 (bootup) and Stage 3 (shutdown) One of the pain points I experienced for sure, one of the killer disadvantages that too bad, made finit not suitable for us. Since some of Artix users inevitably use LVM and LUKS, a nested FS support would be great, but it's not in finit creator's use case, so that's understandable. We can of course add the support ourselves, but the barrier is quite high (creating finit modules will probably use C instead of shell, and personally, I'm quite s**t at C), so we can't just add our own modules, unless someone wants to contribute. Overall, it's a fun experience and experiment. If you like to try finit, I absolutely recommend it. But unfortunately, I won't be officially supporting it for Artix.
Description
Languages
Shell
100%