
Init rápido para sistemas Linux. Reverso diseñado desde el FastInit EEEPC por Claudio Matsuoka - "espacios llenos de ADN de rana ..."

Figura 1: Captura de pantalla de Finit Booting Alpine Linux (Howto).
Las características incluyen:
/etc/rc.local Soport/etc/network/interfacesinitctl topsulogin agrupada para la carcasa de mantenimiento protegidasyslogd haya comenzado, consulte el proyecto Sysklogd recomendado para la integración completa de registro y cómo iniciar sesión en el búfer de anillo del kernel desde los scripts utilizando loggerEl enfoque está en sistemas pequeños e integrados, aunque FINIT también se puede utilizar en los sistemas de servidor y de escritorio. Para ejemplos de trabajo, consulte la sección Contrib/ con tutoriales para las siguientes distribuciones de Linux:
Nota: El soporte para varias distribuciones de Linux no significa instalaciones finas fácilmente en todas las arquitecturas. Los scripts de instalación agrupados son ejemplos para instalaciones estándar, probadas en sistemas AMD64 (x86_64). Las configuraciones personalizadas, por ejemplo, para sistemas integrados, se pueden encontrar en cualquiera de los siguientes ejemplos basados en BuildRoot: MyLinux, Infix o el BR2-Finit-Demo.
Este ejemplo /etc/finit.conf también se puede dividir en múltiples archivos .conf en /etc/finit.d . Disponible, pero aún no está habilitado, los servicios se pueden colocar en /etc/finit.d/available y habilitado por un operador que utiliza la herramienta InitCTL. Vea las distribuciones de Linux mencionadas anteriormente, o MyLinux.
Nota: A partir de FINIT v4.4, las líneas .Conf se pueden dividir utilizando el carácter de continuación de UNIX estándar (
), ahora se admiten comentarios finales. Este último significa que debe escapar de cualquier hash utilizado en directivas y descripciones (#). Para obtener más información sobre esto y los ejemplos, consulte el manual Finit.conf (5) o Doc/config.md.
# Fallback if /etc/hostname is missing
host default
# Runlevel to start after bootstrap, 'S', default: 2
# runlevel 2
# Support for setting global environment variables, using foo=bar syntax
# be careful though with variables like PATH, SHELL, LOGNAME, etc.
# PATH=/usr/bin:/bin:/usr/sbin:/sbin
# Max file size for each log file: 100 kiB, rotate max 4 copies:
# log => log.1 => log.2.gz => log.3.gz => log.4.gz
log size=100k count=4
# Services to be monitored and respawned as needed
service [S12345] env:-/etc/conf.d/watchdog watchdog $WATCHDOG_OPTS $WATCHDOG_DEV -- System watchdog daemon
service [S12345] env:-/etc/conf.d/syslog syslogd -n $SYSLOGD_OPTS -- System log daemon
service [S12345] < pid /syslogd> env:-/etc/conf.d/klogd klogd -n $KLOGD_OPTS -- Kernel log daemon
service [2345] env:-/etc/conf.d/lldpd lldpd -d $LLDPD_OPTS -- LLDP daemon (IEEE 802.1ab)
# The BusyBox ntpd does not use syslog when running in the foreground
# So we use this trick to redirect stdout/stderr to a log file. The
# log file is rotated with the above settings. The condition declares
# a dependency on a system default route (gateway) to be set. A single
# <!> at the beginning means ntpd does not respect SIGHUP for restart.
service [2345] log:/var/log/ntpd.log <!net/route/default> ntpd -n -l -I eth0 -- NTP daemon
# For multiple instances of the same service, add :ID somewhere between
# the service/run/task keyword and the command.
service :80 [2345] merecat -n -p 80 /var/www -- Web server
service :8080 [2345] merecat -n -p 8080 /var/www -- Old web server
# Alternative method instead of below runparts, can also use /etc/rc.local
# sysv [S] /etc/init.d/keyboard-setup -- Setting up preliminary keymap
# sysv [S] /etc/init.d/acpid -- Starting ACPI Daemon
# task [S] /etc/init.d/kbd -- Preparing console
# Hidden from boot progress, using empty `--` description
# sysv [S] /etc/init.d/keyboard-setup --
# sysv [S] /etc/init.d/acpid --
# task [S] /etc/init.d/kbd --
# Run start scripts from this directory
# runparts /etc/start.d
# Virtual consoles run BusyBox getty, keep kernel default speed
tty [12345] /sbin/getty -L 0 /dev/tty1 linux nowait noclear
tty [2345] /sbin/getty -L 0 /dev/tty2 linux nowait noclear
tty [2345] /sbin/getty -L 0 /dev/tty3 linux nowait noclear
# Use built-in getty for serial port and USB serial
# tty [12345] /dev/ttyAMA0 noclear nowait
# tty [12345] /dev/ttyUSB0 noclear
# Just give me a shell, I need to debug this embedded system!
# tty [12345] console noclear nologin La estrofa service , así como task , run y otras se describen en su totalidad en DOC/config.md. Aquí hay una visión general rápida de algunos de los componentes más comunes necesarios para iniciar un demonio unix:
service [LVLS] <COND> log env:[-]/etc/default/daemon daemon ARGS -- Daemon daemon
^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | `---------- Optional description
| | | | | | `------------------ Daemon arguments
| | | | | `------------------------- Path to daemon
| | | | `---------------------------------------------------- Optional env. file
| | | `-------------------------------------------------------- Redirect output to log
| | `--------------------------------------------------------------- Optional conditions
| `---------------------------------------------------------------------- Optional Runlevels
`------------------------------------------------------------------------------ Monitored application
Algunos componentes son opcionales: RunLevel (s), condiciones y descripción, lo que facilita la creación de scripts de inicio simples y aún es posible para usos más avanzados también:
service /usr/sbin/sshd -D
Las dependencias se manejan utilizando condiciones. Una de las condiciones más comunes es esperar a que las redes básicas estén disponibles:
service <net/route/default> nginx -- High performance HTTP server
Aquí hay otro ejemplo en el que instruimos a Finit que no comience a BusyBox ntpd hasta que syslogd haya comenzado correctamente. Finit espera que syslogd cree su archivo PID, por defecto /var/run/syslogd.pid .
service [2345] log <!pid/syslogd> ntpd -n -N -p pool.ntp.org
service [S12345] syslogd -n -- Syslog daemon
Observe la palabra clave log , BusyBox ntpd usa stderr para registrarse cuando se ejecuta en primer plano. Con log Finit redirige stdout + stderr al Daemon de registro del sistema utilizando la herramienta logger(1) .
Un servicio o tarea puede tener múltiples dependencias enumeradas. Aquí esperamos que ambos syslogd hayan comenzado y las redes básicas estén activas:
service [2345] log <pid/syslogd,net/route/default> ntpd -n -N -p pool.ntp.org
Si cualquier condición falla, por ejemplo, la pérdida de redes, ntpd se detiene y tan pronto como vuelva a aparecer, ntpd se reinicia automáticamente.
NOTA: Asegúrese de que los demonios no se desanimen y se separen del control de Tty, generalmente un indicador -n o -f , o -D como en el caso de OpenSsh arriba. Si se separa, Finit no puede monitorearlo y, en su lugar, intentará reiniciarlo.
Supervisión de procesos
Iniciar, monitorear y reiniciar los servicios si fallan.
Getty
Finit admite Getty externo, pero también viene con un Getty limitado, útil para sistemas realmente pequeños. A Getty configura el TTY y espera la entrada del usuario antes de entregar /bin/login , que es responsable de manejar la autenticación real.
tty [12345] /dev/tty1 nowait linux
tty [12345] /dev/ttyAMA0 noclear vt100
tty [12345] /sbin/getty -L /dev/ttyAMA0 vt100
Los usuarios de sistemas integrados pueden querer habilitar la consola de serie automática con el dispositivo especial @console . Esto funciona independientemente del clima que el sistema use ttyS0 , ttyAMA0 , ttyMXC0 o cualquier otra cosa. Finit lo considera consultando sysfs: /sys/class/tty/console/active .
tty [12345] @console linux noclear
Observe las banderas opcionales noclear , nowait y nologin . Este último es para omitir el proceso de inicio de sesión por completo. Para obtener más información, consulte Doc/config.md.
Niveles
El soporte para RunLevels de estilo init SYSV está disponible, en el mismo estilo mínimo que todo lo demás en finito. La sintaxis [2345] se puede aplicar al servicio, tarea, ejecución y estrofas TTY.
Los niveles reservados son 0 y 6, se detienen y reinician, respectivamente, al igual que SYSV Init. RunLevel 1 se puede configurar libremente, pero se recomienda que se mantenga como el sistema de uso de un solo usuario, ya que FINIT no comenzará a establecer contactos aquí. El runlevel NUM configurado de /etc/finit.conf es lo que los cambios finos a después de bootstrap, a menos que 'sencillo' (o 's') se dan en la línea CMD del núcleo, en cuyo caso se inicia RunLevel 1.
Todos los servicios en RunLevel s) se inician primero, seguidos por el tiempo de ejecución deseado. Las tareas Ejecutar en RunLevel s se pueden iniciar en secuencia usando run [S] cmd . Cambiar los niveles de ejecución en tiempo de ejecución se realiza como cualquier otro init, por ejemplo, init 4 , pero también utilizando la herramienta intictl más avanzada.
Condiciones
Como se mencionó anteriormente, Finit tiene un sistema de dependencia avanzado para manejar la sincronización, llamado condiciones. Se puede usar de muchas maneras; Depende de otro servicio, disponibilidad de red, etc.
Un ejemplo realmente genial útil para los sistemas integrados es ejecutar ciertos scripts si una placa tiene una determinada característica codificada en su árbol de dispositivos. En Bootstrap ejecutamos el siguiente script ident :
#! /bin/sh
conddir=/var/run/finit/cond/hw/model
dtmodel=/sys/firmware/devicetree/base/model
if ! test -e $dtmodel ; then
exit 0
fi
model= $( cat $dtmodel | tr " [A-Z] " " [a-z]- " )
mkdir -p $conddir && ln -s ../../reconf $conddir / $model Siempre que el nodo del árbol del dispositivo exista y sea una cadena, podemos usar la condición <hw/model/foo> al iniciar otros scripts. Aquí hay un ejemplo:
run [S] /path/to/ident --
task [2] <hw/model/foo> /path/to/foo-init -- Initializing Foo board
Observe el truco con una descripción vacía para ocultar la llamada a
identen la salida de progreso finitario.
Complementos
Los complementos pueden extender la funcionalidad de FINIT y enganchar a las diferentes etapas del proceso de arranque y en tiempo de ejecución. Los complementos se escriben en C y se compilan en una biblioteca dinámica cargada automáticamente por Finit al arranque. Un conjunto básico de complementos se agrupa en los plugins/ directorio.
Capacidades:
Las extensiones y la funcionalidad no son puramente relacionadas con lo que un /sbin/init necesita para iniciar un sistema están disponibles como un conjunto de complementos que conectan el proceso de arranque o responden a varias E/S.
Para obtener más información, consulte Doc/Plugins.md.
Recarga automática
De forma predeterminada, finit monitores /etc/finit.d/ y /etc/finit.d/enabled/ registrando cualquier cambio en archivos .conf . Para activar un cambio, el usuario debe llamar initctl reload , que recarga todos los archivos modificados, detiene los servicios eliminados, inicia otros nuevos y reinicia cualquiera de los modificados. Si los argumentos de la línea de comandos de un servicio han cambiado, el proceso se terminará y luego comenzará nuevamente con los argumentos actualizados. Si los argumentos no se han modificado y el proceso admite suspiro, el proceso recibirá un suspiro en lugar de ser terminado y iniciado.
Para algunos casos de uso, el paso adicional de llamar initctl reload crea una sobrecarga innecesaria, que puede eliminarse a tiempo de construcción usando:
configure --enable-auto-reload
CGROUPS
FINIT admite CGroups V2 y viene con los siguientes grupos predeterminados en los que se colocan los servicios y las sesiones de usuario:
/sys/fs/cgroup
|-- init/ # cpu.weight:100
|-- system/ # cpu.weight:9800
`-- user/ # cpu.weight:100
Finit en sí y sus scripts y servicios auxiliar se colocan en el grupo de nodos de hoja de nivel superior init/ , que también está reservado .
Todos los procesos Run/Task/Service/SYSV se colocan en su propio subgrupo en system/ . El nombre de cada subgrupo se toma del archivo .conf respectivo de /etc/finit.d .
Todos los procesos Getty/ TTY se colocan en su propio subgrupo en user/ . El nombre de cada subgrupo se toma del nombre de usuario.
También existe un cuarto grupo, el grupo root . También está reservado y principalmente destinado a tareas RT. Si tiene tareas RT, deben ser declaradas como tal en su estrofa de servicio como esta:
service [...] <...> cgroup.root /path/to/foo args -- description
o
cgroup.root
service [...] <...> /path/to/foo args -- description
service [...] <...> /path/to/bar args -- description
Consulte Doc/config.md para obtener más información, por ejemplo, cómo configurar los límites por grupo.
La herramienta initctl tiene tres comandos para ayudar a depurar y optimizar la configuración y el monitoreo de CGROUPS. Vea los comandos ps , top y cgroup para obtener más detalles.
Nota: Los sistemas que no admiten CGROUPS, específicamente la versión 2, se detectan automáticamente. En tales sistemas, la funcionalidad anterior se deshabilita temprano en el arranque.
Al final del arranque, cuando todas las tareas y servicios de bootstrap ( S ) han comenzado, pero no en la red, Finit llama a su comando incorporado (8) en cualquier directorio runparts <DIR> configurado. Esto sucede justo antes de cambiar a RunLevel configurado (predeterminado 2). (La red está habilitada justo antes de cambiar del modo de usuario único).
runparts /etc/rc.d/ Justo después del cambio de RunLevel, cuando todos los servicios han comenzado correctamente, se llama a /etc/rc.local .
No se requiere una estrofa de configuración en /etc/finit.conf para rc.local . Si existe y es un script de shell ejecutable, Finit lo llama al final del arranque, antes de llamar a HOOK_SYSTEM_UP . Vea más sobre los ganchos en DOC/Plugins.md.
No es posible llamar a FINIT a través de señales o usar initctl en cualquier script runparts o /etc/rc.local . Esto se debe a que Finit está en un solo rostro y está llamando a estos guiones de manera bloqueadora al final de RunLevel S, momento en el cual el bucle del evento aún no se ha iniciado.
El bucle del evento es todo el cual se construye Finit, excepto RunLevel S, que sigue siendo una procesión lenta a través de una gran cantidad de configuración, con algunos ganchos y llamadas de bloqueo a scripts externos.
Sin embargo, no todos los comandos initctl están prohibidos. Comandos compatibles:
inictl cond : solo funciona de archivos en /run/finit/condinitctl enable/disable : la ejecución/tarea/servicio habilitada se activa en el cambio RunLevel de S a 2initctl touch/show/create/delete/list : create , siempre que se use el modo no interactivo, nuevamente los cambios surtan efecto en el cambio RunLevel directamente después de Bootstrapinitctl -f reboot/poweroff/halt : siempre que el indicador -f se use para forzar los comandos de núcleo directo Ejemplo: puede establecer un usr/ condición en /etc/rc.local y tener un servicio/tarea en RunLevel 2 depende de él para ejecutar.
El soporte básico para RunLevels se incluye en FINIT de V1.8. De manera predeterminada, todos los servicios, tareas, comandos Ejecutar y TTYS enumerados sin un conjunto de RunLevels obtienen un conjunto predeterminado [234] asignado. El RunLevel predeterminado después del arranque es 2.
Finit admite RunLevels 0-9 y S, con 0 reservado para Halt, 6 reiniciados y S para que los servicios solo se ejecuten en Bootstrap. RunLevel 1 es el nivel de usuario único, donde generalmente no se habilita la red. En finitos, esto es más una política para que el usuario defina. Normalmente, solo se usan los niveles 1-6, y aún más comúnmente, solo se usa el nivel predeterminado.
Para especificar un conjunto permitido de ejecutivos para un service , run comando, task o tty , agregue [NNN] a su /etc/finit.conf , así: así:
service [S12345] syslogd -n -x -- System log daemon
run [S] /etc/init.d/acpid start -- Starting ACPI Daemon
task [S] /etc/init.d/kbd start -- Preparing console
service [S12345] <pid/syslogd> klogd -n -x -- Kernel log daemon
tty [12345] /dev/tty1
tty [2] /dev/tty2
tty [2] /dev/tty3
tty [2] /dev/tty4
tty [2] /dev/tty5
tty [2] /dev/tty6
En este ejemplo, Syslogd se inicia primero, en paralelo, y luego ACPID se llama utilizando un script de inicio de SYSV convencional. Se llama con el comando Ejecutar, lo que significa que el siguiente comando de tarea para iniciar el script KBD no se llama hasta que el script ACPID init se haya completado completamente. Luego, el script de configuración del teclado se llama en paralelo con Klogd como un servicio monitoreado.
Una vez más, las tareas y los servicios se inician en paralelo, mientras que los comandos de ejecución se llaman en el pedido enumerado y no se inician los comandos posteriores hasta que se haya completado un comando Ejecutar. Además, los comandos de tareas y ejecución se ejecutan en un shell, por lo que se pueden usar tuberías y redireccionamientos.
Los siguientes ejemplos ilustran esto. Los comandos de tareas y ejecución de Bootstrap también se eliminan cuando se hayan completado, initctl show no los enumerará.
task [S] echo "foo" | cat >/tmp/bar
run [S] echo "$HOME" >/tmp/secret
El cambio entre RunLevels se puede hacer llamando a Init con un solo argumento, por ejemplo, Init 5 , o usando initctl runlevel 5 , ambos cambian a RunLevel 5. Al cambiar RunLevels Finit, también recarga automáticamente todos los archivos .conf en el directorio /etc/finit.d/ . Entonces, si desea establecer una nueva configuración del sistema, cambie a RunLevel 1, cambie todos los archivos de configuración en el sistema y toque todos los archivos .conf en /etc/finit.d antes de volver a cambiar el anterior RunLevel nuevamente, de esa manera Finit puede detener los servicios antiguos e iniciar otros nuevos para usted, sin reiniciar el sistema.
Tradicionalmente, reiniciar y detener un sistema UNIX se realiza cambiando su RunLevel. Finit viene con sus propias herramientas que proporcionan: shutdown , reboot , poweroff y suspend , pero también la herramienta initctl , detallada en la siguiente sección.
Por razones de compatibilidad, Finit escucha el mismo conjunto de señales que BusyBox Init. Esto no es 100% compatible con SYSV Init, pero claramente la combinación más común para FINIT. Para más detalles, consulte Doc/Signals.md.
Finit también implementa una API moderna para la consulta del estado, y los servicios de inicio/parada, llamados initctl . A diferencia de telinit la herramienta initctl no regresa hasta que el comando dado se haya completado por completo.
Usage: initctl [OPTIONS] [COMMAND]
Options:
-b, --batch Batch mode, no screen size probing
-c, --create Create missing paths (and files) as needed
-f, --force Ignore missing files and arguments, never prompt
-h, --help This help text
-j, --json JSON output in 'status' and 'cond' commands
-1, --once Only one lap in commands like 'top'
-p, --plain Use plain table headings, no ctrl chars
-q, --quiet Silent, only return status of command
-t, --no-heading Skip table headings
-v, --verbose Verbose output
-V, --version Show program version
Commands:
debug Toggle Finit (daemon) debug
help This help text
version Show program version
ls | list List all .conf in /etc/finit.d
create <CONF> Create .conf in /etc/finit.d/available
delete <CONF> Delete .conf in /etc/finit.d/available
show <CONF> Show .conf in /etc/finit.d/available
edit <CONF> Edit .conf in /etc/finit.d/available
touch <CONF> Change .conf in /etc/finit.d/available
enable <CONF> Enable .conf in /etc/finit.d/available
disable <CONF> Disable .conf in /etc/finit.d/enabled
reload Reload *.conf in /etc/finit.d (activate changes)
cond set <COND> Set (assert) user-defined conditions +usr/COND
cond get <COND> Get status of user-defined condition, see $? and -v
cond clear <COND> Clear (deassert) user-defined conditions -usr/COND
cond status Show condition status, default cond command
cond dump [TYPE] Dump all, or a type of, conditions and their status
log [NAME] Show ten last Finit, or NAME, messages from syslog
start <NAME>[:ID] Start service by name, with optional ID
stop <NAME>[:ID] Stop/Pause a running service by name
reload <NAME>[:ID] Reload service as if .conf changed (SIGHUP or restart)
This allows restart of run/tasks that have already run
Note: Finit .conf file(s) are *not* reloaded!
restart <NAME>[:ID] Restart (stop/start) service by name
signal <NAME>[:ID] <S> Send signal S to service by name, with optional ID
ident [NAME] Show matching identities for NAME, or all
status <NAME>[:ID] Show service status, by name
status Show status of services, default command
cgroup List cgroup config overview
ps List processes based on cgroups
top Show top-like listing based on cgroups
plugins List installed plugins
runlevel [0-9] Show or set runlevel: 0 halt, 6 reboot
reboot Reboot system
halt Halt system
poweroff Halt and power off system
suspend Suspend system
utmp show Raw dump of UTMP/WTMP db
Para los servicios que no admiten SIGHUP la notación <!> En el archivo .conf debe usarse para decirle a Finit que se detenga y comience en los cambios reload y runlevel . Si <> tiene más condiciones, esto también afectará la forma en que se mantiene un servicio.
NOTA: Aunque es posible iniciar servicios que no pertenecen al RunLevel actual, estos servicios no serán respaldados automáticamente por FINIT si salen (bloqueo). Por lo tanto, si el RunLevel es 2, el servicio SSH a continuación no se reiniciará si se mata o saldrá.
El comando status es el valor predeterminado, muestra una descripción general rápida de todas las ejecuciones/tareas/servicios monitoreados. Aquí llamamos initctl -p , adecuado para secuencias de comandos y documentación:
alpine:~# initctl -p
PID IDENT STATUS RUNLEVELS DESCRIPTION
======================================================================
1506 acpid running [---2345----] ACPI daemon
1509 crond running [---2345----] Cron daemon
1489 dropbear running [---2345----] Dropbear SSH daemon
1511 klogd running [S-12345----] Kernel log daemon
1512 ntpd running [---2345----] NTP daemon
1473 syslogd running [S-12345----] Syslog daemon
alpine:~# initctl -pv
PID IDENT STATUS RUNLEVELS COMMAND
======================================================================
1506 acpid running [---2345----] acpid -f
1509 crond running [---2345----] crond -f -S $CRON_OPTS
1489 dropbear running [---2345----] dropbear -R -F $DROPBEAR_OPTS
1511 klogd running [S-12345----] klogd -n $KLOGD_OPTS
1512 ntpd running [---2345----] ntpd -n $NTPD_OPTS
1473 syslogd running [S-12345----] syslogd -n
Las variables de entorno a cada uno de los servicios anteriores se leen, en el caso de Alpine Linux, /etc/conf.d/ . Otras distribuciones pueden tener otros directorios, por ejemplo, uso de Debian /etc/default/ .
El comando status toma un NAME:ID . Aquí verificamos el estado de dropbear , que solo tiene una instancia en este sistema:
alpine:~# initctl -p status dropbear
Status : running
Identity : dropbear
Description : Dropbear SSH daemon
Origin : /etc/finit.d/enabled/dropbear.conf
Environment : -/etc/conf.d/dropbear
Condition(s):
Command : dropbear -R -F $DROPBEAR_OPTS
PID file : !/run/dropbear.pid
PID : 1485
User : root
Group : root
Uptime : 2 hour 46 min 56 sec
Runlevels : [---2345----]
Memory : 1.2M
CGroup : /system/dropbear cpu 0 [100, max] mem [--.--, max]
|- 1485 dropbear -R -F
|- 2634 dropbear -R -F
|- 2635 ash
`- 2652 initctl -p status dropbear
Apr 8 12:19:49 alpine authpriv.info dropbear[1485]: Not backgrounding
Apr 8 12:37:45 alpine authpriv.info dropbear[2300]: Child connection from 192.168.121.1:47834
Apr 8 12:37:46 alpine authpriv.notice dropbear[2300]: Password auth succeeded for 'root' from 192.168.121.1:47834
Apr 8 12:37:46 alpine authpriv.info dropbear[2300]: Exit (root) from <192.168.121.1:47834>: Disconnect received
Apr 8 15:02:11 alpine authpriv.info dropbear[2634]: Child connection from 192.168.121.1:48576
Apr 8 15:02:12 alpine authpriv.notice dropbear[2634]: Password auth succeeded for 'root' from 192.168.121.1:48576
Finit es capaz de ejecutarse en sistemas de escritorio/servidor con UDEV y sistemas integrados que generalmente vienen con BusyBox MDEV. Algunos sistemas tienen Systemd-UDV o EUDV hoy en lugar del UDEV original, sondas finitas para todos en tiempo de ejecución y espera /dev/ ser un sistema de archivos de escritura utilizando devtmpfs . También es posible ejecutarse en una configuración /dev estáticamente si es necesario. Sin embargo, no es una buena idea tener UDEV y MDEV instalados al mismo tiempo, esto conducirá a resultados impredecibles.
A Boot Finit llama a mdev o udevd a poblar /dev , esto se hace de manera ligeramente diferente y en los sistemas con UDEV, es posible que desee agregar la siguiente tarea de una sola vez al principio de su /etc/finit.conf :
run [S] udevadm settle --timeout=120 -- Waiting for udev
Finit tiene una getty incorporada para TTYS, pero requiere un trabajo /bin/login o /bin/sh , si no se configuran TTYS en /etc/finit.conf .
Para un sistema completamente operativo /var , /run y /tmp debe configurarse correctamente en /etc/fstab , que se itera en el arranque.
Este proyecto se basa en el Finito original de Claudio Matsuoka, que fue diseñado inversamente de Syscalls del EEEPC FastInit - "espacios llenos de ADN de rana ..."
Finit es desarrollado y mantenido por Joachim Wiberg en Github. POR FAVOR ARRIBA DE INFORMES DE ERROR, clonarlo o enviar solicitudes de extracción de correcciones de errores y extensiones propuestas.