From 3b7ea7bbdb976b1e6c6fb8420fff5fb8340b0164 Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Tue, 5 Dec 2023 21:38:04 +1100
Subject: [PATCH] provide scandir doc

---
 doc/66-scanctl.md |  74 ---------
 doc/66-scandir.md | 115 -------------
 doc/scandir.md    | 410 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 410 insertions(+), 189 deletions(-)
 delete mode 100644 doc/66-scanctl.md
 delete mode 100644 doc/66-scandir.md
 create mode 100644 doc/scandir.md

diff --git a/doc/66-scanctl.md b/doc/66-scanctl.md
deleted file mode 100644
index dcf2234f..00000000
--- a/doc/66-scanctl.md
+++ /dev/null
@@ -1,74 +0,0 @@
-title: The 66 Suite: 66-scanctl
-author: Eric Vidal <eric@obarun.org>
-
-[66](index.html)
-
-[Software](https://web.obarun.org/software)
-
-[obarun.org](https://web.obarun.org)
-
-# 66-scanctl
-
-Sends a *signal* to a scandir. Safe wrapper around [s6‑svscanctl](https://skarnet.org/software/s6/s6-svscanctl.html).
-
-## Interface
-
-```
-    66-scanctl [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -d notif ] [ -t rescan ] [ -e environment ] [ -o owner ] start|stop|reload|quit|nuke|zombies or any s6-svscanctl options.
-```
-
-This program sends a *signal* to an already running [scandir](scandir.html) at *live* where by default *live* is at `%%livedir%%` or the resulting path provided by the **‑l** option. If owner is not explicitely set with **‑o** then the user of the current process will be used instead.
-
-## Exit codes
-
-- *0* success
-- *100* wrong usage
-- *111* system call failed
-
-## Options
-
-- **-h** : prints this help.
-
-- **-z** : use color.
-
-- **-v** *verbosity* : increases/decreases the verbosity of the command.
-    * *1* : only print error messages. This is the default.
-    * *2* : also print warning messages.
-    * *3* : also print tracing messages.
-    * *4* : also print debugging messages.
-
-- **-l** *live* : changes the supervision directory of *service* to *live*. By default this will be `%%livedir%%`. The default can also be changed at compile time by passing the `--livedir=live` option to `./configure`. An existing absolute path is expected and should be within a writable and executable filesystem - likely a RAM filesystem—see [66-scandir](66-scandir.html).
-
-- **-d** *notif* : notify readiness on file descriptor notif. When *scandir* is ready to accept commands from [66‑scanctl](66-scanctl.html), it will write a newline to *notif*. *notif* **cannot be** lesser than `3`. By default, no notification is sent. If **-b** is set, this option have no effects.
-
-- **-t** *rescan* : perform a scan every *rescan* milliseconds. If *rescan* is set to 0 (the default), automatic scans are never performed after the first one and [s6‑svscan](https://skarnet.org/software/s6/s6-svscan.html) will only detect new services by issuing either [66‑scanctl](66-scanctl.html) reload or [s6‑svscanctl -a](https://skarnet.org/software/s6/s6-svscanctl.html). It is **strongly** discouraged to set rescan to a positive value under `500`.
-
-- **-e** *environment* : an absolute path. Merge the current environment variables with variables found in this directory before starting the *scandir*. Any file in environment not beginning with a dot and not containing the `=` character will be read and parsed.
-
-- **-o** *owner* : send the *signal* to a [scandir](66-scandir.html) owned by *owner* instead of the current owner of the process. *owner* needs adecuate permissions to deal with the scandir.
-
-## Signal
-
-Any signal accepted by [s6‑svscanctl](https://skarnet.org/software/s6/s6-svscanctl.html) can be passed but without the dash `‑` character. As a result if you wanted to send a **‑t** signal, you need to use: `66‑scanctl t`. Further a series of commands is also accepted in the same way: `66‑scanctl st`. A few convenient keywords were added to avoid having to remember basic and useful commands:
-
-- *reload*    = ‑an
-- *interrupt* = ‑i
-- *quit*      = ‑q
-- *halt*      = ‑0
-- *reboot*    = ‑6
-- *poweroff*  = ‑7
-
-## Usage examples
-
-```
-    66-scanctl reload
-```
-
-Updates the process supervision tree to exactly match the services listed in [scandir](66-scandir.html).
-This command is strictly equal to:
-
-```
-    s6-svscanctl -an /path_to_scandir
-```
-
-[s6‑svscan](https://skarnet.org/software/s6/s6-svscan.html).
diff --git a/doc/66-scandir.md b/doc/66-scandir.md
deleted file mode 100644
index 77d92def..00000000
--- a/doc/66-scandir.md
+++ /dev/null
@@ -1,115 +0,0 @@
-title: The 66 Suite: 66-scandir
-author: Eric Vidal <eric@obarun.org>
-
-[66](index.html)
-
-[Software](https://web.obarun.org/software)
-
-[obarun.org](https://web.obarun.org)
-
-# 66-scandir
-
-Handles the *scandir* for a given user. Designed to be either root or a branch of the supervision tree.
-
-## Interface
-
-```
-    66-scandir [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -b|B ] [ -c ] [ -L log_user ] [ -s skel ] [ -o owner ] create|remove
-```
-
-This program creates or remove the *scandir* (directory containing a collection of s6‑supervise processes) for the current owner of the proccess depending on the provided options.
-
-## Exit codes
-
-- *0* success
-- *100* wrong usage
-- *111* system call failed
-
-## Options
-
-- **-h** : prints this help.
-
-- **-z** : use color.
-
-- **-v** *verbosity* : increases/decreases the verbosity of the command.
-    * *1* : only print error messages. This is the default.
-    * *2* : also print warning messages.
-    * *3* : also print tracing messages.
-    * *4* : also print debugging messages.
-
-- **-l** *live* : changes the supervision directory of *service* to *live*. By default this will be `%%livedir%%`. The default can also be changed at compile time by passing the `--livedir=live` option to `./configure`. An existing absolute path is expected and should be within a writable and executable filesystem - likely a RAM filesystem.
-
-- **-b** : create specific files for boot. Only the root user can use this option. It is not meant to be used directly even with root. [66-boot](66‑boot.html) calls it during the boot process.
-
-- **-B** : create specific files for boot inside a container. This option modifies some behaviors:
-    * The ultimate output fallback (i.e. the place where error messages go when nothing catches them, e.g. the error messages from the catch-all logger and the s6-supervise process managing the catch-all logger) is not /dev/console, but the descriptor that was *init*'s standard error.
-    * Stopping the container with `reboot` will make the container's init program report being killed by a SIGHUP. Stopping it with `poweroff` will make it report being killed by a SIGINT. This is according to the [reboot(2)](http://man7.org/linux/man-pages/man2/reboot.2.html) specification.
-    * Stopping the container with `halt`, however, is different. It will make the container's pid 1 read a number in the `%%livedir%%/container/\<owner\>/halt` file which contents the variable `EXITCODE`, and exit with the code it has read. (Default is 0.) This means that in order to run a command in a container managed by [66-boot](66-boot.html) and exit the container when the command dies while reporting the exit code to its parent, [66-boot](66-boot.html) use the `%%skel%%/rc.init.container` file instead of the `%%skel%%/rc.init` file. This file should be modified to launch the command that you want to start inside this container. Then you need to stop that container calling `halt`.
-    * All the running services will be killed, all the zombies will be reaped, and the container will exit with the required exit code.
-
-- **-c** : run the system without a `catch-all` logger. On a non-containerized system, that means that all the logs from the s6 supervision tree will go to /dev/console, and that /dev/console will also be the default stdout and stderr for services running under the supervision tree: use of this option is ***discouraged***. On a containerized system (when paired with the **-B** option), it simply means that these outputs go to the default stdout and stderr given to the container's *init* - this should generally not be the default, but might be useful in some cases.
-
-- **-s** *skel* : an absolute path. Directory containing *skeleton* files. This option is not meant to be used directly even with root. [66‑boot](66-boot.html) calls it during the boot process. Default is `%%skel%%`.
-
-- **-L** *log_user* : will run the `catch-all` logger as *log_user*. Default is `%%s6log_user%%`. The default can also be changed at compile-time by passing the `‑‑with‑s6‑log‑user=user` option to `./configure`.
-
-- **-o** *owner* : handles the *scandir* for the given *owner*. Only the root user can use this option. Note that *owner* can be any valid user on the system. However, the given user must have sufficient permissions to create the necessary directories at its location. That is `%%livedir%%` by default or the resulting path provided by the **‑l** option.
-
-## Scandir creation process
-
-When creating the *scandir* various files and directories will be created at the *live* directory.
-
-If created with the user root, you will find the following in `%%livedir%%` (the directory created by default if **‑l** is not passed and 0 being the corresponding UID for the root user):
-
-- *%%livedir%%/scandir/0* : stores all longrun proccesses (commonly known as daemons) started by root.
-
-- *%%livedir%%/tree/0* : stores any [s6‑rc](https://skarnet.org/software/s6-rc) service database started by root.
-
-- *%%livedir%%/log/0* : stores the `catch-all` logger when the *scandir* is created for a boot procedure with the **‑b** option.
-
-- *%%livedir%%/state/0* : stores internal *66* ecosystem files.
-
-If the *scandir* was created with a regular user you will find the following in `%%livedir%%`
-(Default directories if **‑l** is not passed and 1000 being the UID for the user):
-
-- *%%livedir%%/scandir/1000*
-
-- *%%livedir%%/tree/1000*
-
-- *%%livedir%%/state/1000*
-
-The **-B** option create an extra directory at `%%livedir%%/scandir/<owner>/container` containing a file named *halt*. See [66-boot](boot.html) for further information.
-
-If a *scandir* already existed at the default location for the given user it will prevent its creation when calling `66‑scandir create`. If you wanted to create a different scandir for the same owner at the same live location you must delete it first with `66-scandir remove`.
-
-## Scandir removal process
-
-The *scandir* **must** first be stopped sending a signal with [66‑scanctl stop](66-scanctl.html) or similar to be able to remove it.
-
-Some directories of the *scandir* may not be removed if another user accesses them. In our previous example where we created a *scandir* for root with UID `0` and a regular user with the UID `1000` this would imply the following:
-
-- *%%livedir%%/scandir/0* # will be deleted
-
-- *%%livedir%%/tree/0*    # will be deleted
-
-- *%%livedir%%/log/0*     # will be deleted
-
-- *%%livedir%%/state/0*   # will be deleted
-
-The *live* directory of the root user (in this example and by default `%%livedir%%`) will not be removed because another user (the one from our example) can still use it. In fact *66‑scandir* will only remove the subdirectories of the corresponding UID of the *owner* while the *live* root directory is not touched. If *live* was created on a RAM filesystem as suggested the deletion happens on the next reboot.
-
-## Boot specification
-
-The **-b**, **-B**, **-c** and **-s** option are called by [66-boot](66-boot.html). **‑b** and **-B** will create .s6‑svscan control files (see [s6‑svscan](https://skarnet.org/software/s6/s6-svscan.html) interface documentation) specifically for stage1 (PID1 process). This special *scandir* is controlled by the safe wrappers `halt`, `poweroff`, `reboot`, `shutdown` provided with *66* tools. The [66-shutdownd](66‑shutdownd.html) daemon which controls the shutdown request will be created automatically at the correct location. Further this specific task needs to read the skeleton file `init.conf` containing the *live* directory location which is the purpose of the **‑s** option.
-
-The *live* directory for the boot process requires writable directories and an executable filesystem. In order to accommodate for read‑only root filesystems there needs to be a tmpfs mounted before [s6‑svscan](https://skarnet.org/software/s6/s6-svscan.html) can be run.
-
-## Environment configuration
-
-You can modify environment variables when starting the *scandir* with the **‑e** option. This option expects to find a valid absolute path to a directory containing one or more files where the format is the classic `key=value` pair. Each file found will be read and parsed.
-
-Any service launched on the *scandir* will inherit the environment variables of the scandir. A specific global `key=value` pair inherited by all service can be set using this option.
-
-### Limits
-
-The mentioned environment directory ***can not*** exceed more than `100` files. Each file can not contain more than `8095` bytes or more than `50` `key=value` pairs.
diff --git a/doc/scandir.md b/doc/scandir.md
new file mode 100644
index 00000000..4de94876
--- /dev/null
+++ b/doc/scandir.md
@@ -0,0 +1,410 @@
+title: The 66 Suite: scandir
+author: Eric Vidal <eric@obarun.org>
+
+[66](index.html)
+
+[Software](https://web.obarun.org/software)
+
+[obarun.org](https://web.obarun.org)
+
+# scandir
+
+Handles the *scandir* for a given user. Designed to be either root or a branch of the supervision tree(nested *scandir*).
+
+## Interface
+
+```
+scandir [ -h ] [ -o owner ] create|start|stop|remove|reload|check|quit|abort|nuke|annihilate|zombies [<command options>]
+```
+
+This program creates, removes or sends a signal to a *scandir* (directory containing a collection of s6‑supervise processes) for the current owner of the proccess depending on the provided options.
+
+When the `start` subcommand is invoked, this command launches the [s6-svscan](https://skarnet.org/software/s6/s6-svscan.html), responsible for supervising the [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) program, where [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) monitors a single service.
+
+## Options
+
+- **-h**: prints this help.
+
+- **-o** *owner*: handles the *scandir* for the given *owner*. Only the root user can use this option. Note that *owner* can be any valid user on the system. However, the given user must have sufficient permissions to create the necessary directories at its location. That is `%%livedir%%` by default or the resulting path provided by the `66  ‑l` option.
+
+## Subcommands
+
+- **create**: create a *scandir*.
+- **start**: start a *scandir*.
+- **stop**: stop a running *scandir*.
+- **remove**: remove a *scandir*.
+- **reload**: reload a running *scandir*.
+- **check**: check a running *scandir*.
+- **quit**: quit a running *scandir*.
+- **abort**: abort a running *scandir*.
+- **nuke**: nuke a running *scandir*.
+- **annihilate**: annihilate a running *scandir*.
+- **zombies**: destroy zombies from a running *scandir*.
+
+## Usage examples
+
+Creates a *scandir* for the *owner* of the process
+```
+66 scandir create
+```
+
+Creates a *scandir* for the *owner* `owner`
+```
+66 scandir -o owner create
+```
+
+Creates a *scandir* for a boot process
+```
+66 scandir create -b
+```
+
+Creates a *scandir* for the boot process using the specific account `logaccount` for the logger
+```
+66 scandir create -b -L logaccount
+```
+
+Creates (if doesn't exist yet) and starts a *scandir* for the boot process within a container adding an environment directory
+```
+66 scandir start -B -e /etc/66/environment
+```
+
+Stops an already running *scandir*
+```
+66 scandir stop
+```
+
+### create
+
+This subcommand create a *scandir*.
+
+#### Interface
+
+```
+scandir create [ -h ] [ -b|B ] [ -c ] [ -L log_user ] [ -s skel ]
+```
+
+This command create the necessary directory at `%%livedir%%`. If the *scandir* already exist for the given user it will prevent its creation. You *must* remove it first if you don't want to keep it.
+
+Various files and directories is created at `%%livedir%%`. Refers to [deeper understanding](deeper.html) documentation for futhers information.
+
+#### Options
+
+- **-h**: print this help.
+- **-b**: create scandir for a boot process. Only the root user can use this option. It is not meant to be used directly even with root. [66 boot](boot.html) calls it during the boot process.
+- **-B**: create scandir for a boot process inside a container. This option modifies some behaviors:
+
+    The ultimate output fallback (i.e. the place where error messages go when nothing catches them, e.g. the error messages from the catch-all logger and the [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) process managing the catch-all logger) is not `/dev/console`, but the descriptor that was init's standard error.
+    Stopping the container with reboot will make the container's init program report being killed by a `SIGHUP`. Stopping it with [66 poweroff](poweroff.html) will make it report being killed by a `SIGINT`. This is according to the reboot(2) specification.
+    Stopping the container with [66 halt](halt.html), however, is different. It will make the container's pid 1 read a number in the `/run/66/container/\<owner\>/halt` file which contents the variable `EXITCODE`, and exit with the code it has read. (Default is 0.) This means that in order to run a command in a container managed by [66 boot](boot.html) and exit the container when the command dies while reporting the exit code to its parent, [66 boot](boot.html) use the `/etc/66/rc.init.container` file instead of the `/etc/66/rc.init` file. This file should be modified to launch the command that you want to start inside this container. Then you need to stop that container calling [66 halt](halt.html).
+    All the running services will be killed, all the zombies will be reaped, and the container will exit with the required exit code.
+
+- **-c**: do not catch logs. On a non-containerized system, that means that all the logs from the *scandir* will go to `/dev/console`, and that `/dev/console` will also be the default `stdout` and `stderr` for services running under the supervision tree: use of this option is discouraged. On a containerized system (when paired with the `-B` option), it simply means that these outputs go to the default `stdout` and `stderr` given to the container's init - this should generally not be the default, but might be useful in some cases.
+
+- **-L** *log_user*: run catch-all logger as *log_user* user. Default is `%%s6log_user%%`. The default can also be changed at compile-time by passing the `‑‑with‑s6‑log‑user=user` option to `./configure`.
+
+- **-s** *skel*: use *skel* as skeleton directory. Directory containing *skeleton* files. This option is not meant to be used directly even with root. [66 boot](boot.html) calls it during the boot process. Default is `%%skel%%`.
+
+#### Usage examples
+
+Creates a scandir for the *owner* of the process
+```
+66 scandir create
+```
+
+Creates a scandir for the boot process using the specific account `logaccount` for the logger
+```
+66 scandir create -b -L logaccount
+```
+
+### start
+
+This subcommand starts a *scandir* and, if it doesn't exist yet, it possibly creates it .
+
+#### Interface
+
+```
+scandir start [ -h ] [ -d notif ] [ -s rescan ] [ -e environment ] [ -b|B ]
+```
+
+The *scandir* is created if it wasn't made previously, but you don't a fine-grained control over its creation as you do with the `create` subcommand.
+
+#### Options
+
+- **-h**: prints this help.
+
+- **-d** *notif*: notify readiness on file descriptor notif. When *scandir* is ready to accept signal, it will write a newline to *notif*. *notif* **cannot be** lesser than `3`. By default, no notification is sent. If **-b** is set, this option have no effects.
+
+- **-t** *rescan*: perform a scan every *rescan* milliseconds. If *rescan* is set to 0 (the default), automatic scans are never performed after the first one and [s6‑svscan](https://skarnet.org/software/s6/s6-svscan.html) will only detect new services by issuing either [scandir reload](scandir.html#reload) or [scandir check](scandir.html#rescan). It is **strongly** discouraged to set *rescan* to a positive value under `500`.
+
+- **-e** *environment*: an absolute path. Merge the current environment variables with variables found in this directory before starting the *scandir*. Any file in environment not beginning with a dot and not containing the `=` character will be read and parsed. Each services will inherit of the `key=value` pair define within *environment*. The mentioned environment directory ***can not*** exceed more than `100` files. Each file can not contain more than `8095` bytes or more than `50` `key=value` pairs.
+
+#### Usage examples
+
+Starts a scandir with notify readiness mechanism on file descriptor `3`
+```
+66 scandir start -d 3
+```
+
+Starts a scandir for the *owner* `owner`
+```
+66 scandir -o owner start
+```
+
+### stop
+
+This command stops a running *scandir*.
+
+#### Interface
+
+```
+scandir stop [ -h ]
+```
+
+This command stops the *scandir* sending a `SIGTERM` to all the [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) processes supervising a service and a `SIGHUP` to all the [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) processes supervising a logger, then exec into its finish procedure. This means that services will be brought down but loggers will exit naturally on `EOF`, and [s6-svscan](https://skarnet.org/software/s6/s6-svscan.html) will wait for them to exit before exec'ing into `.s6-svscan/finish` or exiting itself: it's a clean shutdown with no loss of logs.
+
+#### Options
+
+- **-h**: prints this help.
+
+#### Usage examples
+
+Stop an already running *scandir*
+```
+66 scandir stop
+```
+
+Stop an already running *scandir* for the owner `owner`
+```
+66 scandir -o owner stop
+```
+
+### remove
+
+This command remove a *scandir* from the *live* directory.
+
+#### Interface
+
+```
+scandir remove [ -h ]
+```
+
+The *scandir* **must** first be stopped with [scandir stop](#stop) subcommand or similar subcommand to be able to remove it.
+
+This subcommand remove some directories and files from the `%%livedir%%` directory. Refers to [deeper understanding](deeper.html) documentation for futhers documentation.
+
+#### Options
+
+- **-h**: prints this help.
+
+#### Usage examples
+
+Removes a *scandir*
+```
+66 scandir remove
+```
+
+Removes a *scandir* for the owner `owner`
+```
+66 scandir -o owner scandir
+```
+
+### reload
+
+This command reload configuration of a running *scandir*.
+
+#### Interface
+
+```
+scandir reload [ -h ]
+```
+
+[s6-svscan](https://skarnet.org/software/s6/s6-svscan.html) will perform a scan, and destroy inactive services.
+
+#### Options
+
+- **-h**: prints this help.
+
+#### Usage examples
+
+Reloads a running *scandir*.
+```
+66 scandir reload
+```
+
+Reloads a *scandir* for the owner `owner`
+```
+66 scandir -o owner reload
+```
+
+### check
+
+This command check the *scandir* for services.
+
+#### Interface
+
+```
+scandir check [ -h ]
+```
+
+[s6-svscan](https://skarnet.org/software/s6/s6-svscan.html) will immediately perform a scan of *scandir* to check for services.
+
+#### Options
+
+- **-h**: prints this help.
+
+#### Usage examples
+
+Checks a *scandir*
+```
+66 scandir check
+```
+
+Checks a *scandir* for the owner `owner`
+```
+66 scandir -o owner check
+```
+
+### quit
+
+Quits a running *scandir*.
+
+#### Interface
+
+```
+scandir quit [ -h ]
+```
+
+[s6-svscan](https://skarnet.org/software/s6/s6-svscan.html) will send all its [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) processes a `SIGTERM`, then exec into its finish procedure. This is different from `stop` subcommand in that services and loggers will be forcibly killed, so the quit procedure may be faster but in-flight logs may be lost.
+
+#### Options
+
+- **-h**: prints this help.
+
+#### Usage examples
+
+Quits a *scandir* running *scandir*.
+```
+66 scandir quit
+```
+
+Quits a *scandir* for the owner `owner`
+```
+66 scandir -o owner quit
+```
+
+### abort
+
+This command abort a running *scandir*.
+
+#### Interface
+
+```
+scandir abort [ -h ]
+```
+
+[s6-svscan](https://skarnet.org/software/s6/s6-svscan.html) will exec into its finishing procedure. It will not kill any of the maintained [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) processes.
+
+#### Options
+
+- **-h**: prints this help.
+
+#### Usage examples
+
+Aborts a *scandir*
+```
+66 scandir abort
+```
+
+Aborts a *scandir* for the owner `owner`
+```
+66 scandir -o owner abort
+```
+
+### nuke
+
+Kill all the [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) processes.
+
+#### Interface
+
+```
+scandir nuke [ -h ]
+```
+[s6-svscan](https://skarnet.org/software/s6/s6-svscan.html) kill all the [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) processes it has launched but that did not match a service directory last time *scandir* was scanned, i.e. it prunes the supervision tree so that it matches exactly what was in *scandir* at the time of the last scan. A `SIGTERM` is sent to the [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) processes supervising services and a `SIGHUP` is sent to the [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) processes supervising loggers.
+
+#### Options
+
+- **-h**: prints this help.
+
+#### Usage examples
+
+Kill s6-supervise processes from a *scandir*
+```
+66 scandir nuke
+```
+
+Kill s6-supervise processes from a *scandir* for the owner `owner`
+```
+66 scandir -o owner nuke
+```
+
+### annihilate
+
+Annihilates a running *scandir*.
+
+#### Interface
+
+```
+scandir annihilate [ -h ]
+```
+
+Does the same thing as [nuke](#nuke), except that `SIGTERM` is sent to all the relevant [s6-supervise](https://skarnet.org/software/s6/s6-supervise.html) processes, even if they are supervising loggers. This is not recommended in a situation where you do not need to tear down the supervision tree.
+
+#### Options
+
+- **-h**: prints this help.
+
+#### Usage examples
+
+Annihilates a *scandir*
+```
+66 scandir annihilate
+```
+
+Annihilates a *scandir* for the owner `owner`
+```
+66 scandir -o owner annihilate
+```
+
+### zombies
+
+Destroy zombies from a running *scandir*.
+
+#### Interface
+
+```
+scandir zombies [ -h ]
+```
+
+Immediately triggers s6-svscan's reaper mechanism.
+
+#### Options
+
+- **-h**: prints this help.
+
+#### Usage examples
+
+Removes zombies from a *scandir*
+```
+66 scandir zombies
+```
+
+Removes zombies from a *scandir* for the owner `owner`
+```
+66 scandir -o owner zombies
+```
+
+## Boot specification
+
+The **-b**, **-B**, **-c** and **-s** option are called by [66 boot](boot.html). **‑b** and **-B** will create `.s6‑svscan` control files (see [s6‑svscan](https://skarnet.org/software/s6/s6-svscan.html) interface documentation) specifically for stage1 (PID1 process). This special *scandir* is controlled by [66 halt](halt.html), [66 poweroff](poweroff.html) and  [66 reboot](reboot.html) command. The [66-shutdownd](66‑shutdownd.html) daemon which controls the shutdown request will be created automatically at the correct location. Further this specific task needs to read the skeleton file `init.conf` containing the *live* directory location which is the purpose of the **‑s** option.
+
+The *live* directory for the boot process requires writable directories and an executable filesystem. In order to accommodate for read‑only root filesystems there needs to be a tmpfs mounted before [s6‑svscan](https://skarnet.org/software/s6/s6-svscan.html) can be run.
-- 
GitLab