
Linux 시스템의 빠른 초기. Claudio Matsuoka의 Eeepc Fastinit에서 리버스 엔지니어링 - "개구리 DNA로 채워진 갭…"

그림 1 : Finit Booting Alpine Linux (Howto)의 스크린 샷.
기능은 다음과 같습니다.
/etc/rc.local 지원/etc/network/interfaces 에 대한 내장 지원initctl top 의 구성 및 모니터링sulogin 있는 적절한 구조 모드syslogd 시작되기 전에 커널 링 버퍼에 로그를 작성하려면 전체 로깅 통합을 위해 권장 SYSKLOGD 프로젝트를 참조하고 logger 사용하여 스크립트에서 커널 링 버퍼에 로그인하는 방법Finit은 서버 및 데스크탑 시스템에서도 완전히 사용할 수 있지만 소규모 및 임베디드 시스템에 중점을 둡니다. 작업 예제는 다음 Linux 배포에 대한 튜토리얼이 포함 된 Contrib/ Section을 참조하십시오.
참고 : 다양한 Linux 배포를 지원한다고해서 모든 아키텍처에 유인 설치가 쉽게 설치되는 것은 아닙니다. 번들 설치 스크립트는 AMD64 (x86_64) 시스템에서 테스트 된 표준 설치의 예입니다. 임베디드 시스템의 경우 사용자 정의 설정은 Mylinux, Infix 또는 일반 BR2-FINIT-DEMO의 다음 빌드 root 기반 예제에서 찾을 수 있습니다.
이 예제 /etc/finit.conf /etc/finit.d 의 여러 .conf 파일로 나눌 수도 있습니다. 아직 활성화되지 않은 서비스는 /etc/finit.d/available 에 배치하고 INITCTL 도구를 사용하여 운영자가 활성화 할 수 있습니다. 위에서 언급 한 Linux 배포판 또는 Mylinux를 참조하십시오.
참고 : Finit v4.4의 기간 동안 표준 UNIX 연속 문자 (
)를 사용하여 .conf 라인을 분리 할 수 있으며, 후행 주석도 지원됩니다. 후자는 지침 및 설명 (#)에 사용 된 해시를 피해야한다는 것을 의미합니다. 이 예제 및 예에 대한 자세한 내용은 Finit.conf (5) 매뉴얼 또는 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 service Stanza 및 task , run 및 기타는 Doc/Config.md에 전체적으로 설명되어 있습니다. 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
일부 구성 요소는 선택 사항입니다 : Runlevel, 조건 및 설명은 간단한 시작 스크립트를 쉽게 만들 수 있으며보다 고급 용도로도 가능합니다.
service /usr/sbin/sshd -D
종속성은 조건을 사용하여 처리됩니다. 가장 일반적인 조건 중 하나는 기본 네트워킹을 사용할 수 있기를 기다리는 것입니다.
service <net/route/default> nginx -- High performance HTTP server
syslogd 제대로 시작될 때까지 BusyBox ntpd 시작하지 않도록 Finit에게 지시하는 또 다른 예는 다음과 같습니다. Finit은 syslogd 기본적으로 /var/run/syslogd.pid 의 PID 파일을 생성하기를 기다립니다.
service [2345] log <!pid/syslogd> ntpd -n -N -p pool.ntp.org
service [S12345] syslogd -n -- Syslog daemon
log 키워드에 주목하십시오. BusyBox ntpd 전경에서 실행될 때 로깅에 stderr 사용합니다. log Finit Redirects를 사용하여 stdout + stderr 명령 줄 logger(1) 도구를 사용하여 시스템 로그 데몬에 대한 stderr를 리디렉션합니다.
서비스 또는 작업에는 여러 개의 종속성이 나열 될 수 있습니다. 여기서 우리 는 syslogd 와 기본 네트워킹이 시작되기를 기다립니다.
service [2345] log <pid/syslogd,net/route/default> ntpd -n -N -p pool.ntp.org
두 조건 중 하나가 실패하면 네트워킹 손실, ntpd 중지되고 다시 돌아 오자마자 ntpd 자동으로 다시 시작됩니다.
참고 : Daemons가 위의 OpenSSH의 경우와 같이 제어 TTY, 일반적으로 -n 또는 -f 플래그 또는 -D 에서 포크를 분리 하지 않도록 하십시오. 그것이 스스로 분리되면 Finit은 그것을 모니터링 할 수 없으며 대신 그것을 다시 시작하려고 시도합니다.
프로세스 감독
서비스가 실패하면 시작, 모니터링 및 다시 시작합니다.
게티
Finit은 외부 게티를 지원하지만 제한된 내장 게티와 함께 제공되며 실제로 작은 시스템에 유용합니다. Getty는 TTY를 설정하고 /bin/login 넘겨주기 전에 사용자 입력을 기다립니다. 이는 실제 인증을 처리 할 책임이 있습니다.
tty [12345] /dev/tty1 nowait linux
tty [12345] /dev/ttyAMA0 noclear vt100
tty [12345] /sbin/getty -L /dev/ttyAMA0 vt100
임베디드 시스템 사용자는 특수 @console 장치와 함께 자동 직렬 콘솔을 활성화 할 수 있습니다. 이 시스템은 날씨에 관계없이 시스템이 ttyS0 , ttyAMA0 , ttyMXC0 또는 다른 것을 사용합니다. Finit은 sysfs : /sys/class/tty/console/active 쿼리하여 파악합니다.
tty [12345] @console linux noclear
선택적 noclear , nowait 및 nologin 플래그에 주목하십시오. 후자는 로그인 프로세스를 완전히 건너 뛰는 것입니다. 자세한 내용은 doc/config.md를 참조하십시오.
unlevels
SYSV Inity Runlevels에 대한 지원은 Finit의 다른 모든 것과 동일한 최소 스타일로 제공됩니다. [2345] 구문은 서비스, 작업, 실행 및 TTY 스탠자에 적용될 수 있습니다.
예약 된 런 레벨은 SYSV init와 마찬가지로 각각 0과 6, Halt 및 Reboot입니다. Runlevel 1은 자유롭게 구성 할 수 있지만 Finit은 여기서 네트워킹을 시작하지 않기 때문에 시스템 단일 사용자 런 레벨로 유지하는 것이 좋습니다. /etc/finit.conf 의 구성된 runlevel NUM 커널 cmdline에 '단일'(또는 's')이 주어지지 않는 한 Bootstrap 이후에 미세한 변경 사항입니다.이 경우 Runlevel 1이 시작됩니다.
Runlevel s의 모든 서비스)가 먼저 시작된 다음 원하는 런타임 런 레벨이 시작됩니다. Runlevel S의 실행 작업은 run [S] cmd 사용하여 순서대로 시작할 수 있습니다. 런타임에서 런 레벨을 변경하는 것은 다른 Init (예 : init 4 )와 마찬가지로 수행되지만 고급 intictl 도구를 사용합니다.
정황
앞에서 언급했듯이 Finit에는 조건이라는 동기화를 처리하기위한 고급 종속성 시스템이 있습니다. 여러 가지 방법으로 사용할 수 있습니다. 다른 서비스, 네트워크 가용성 등에 따라 다릅니다.
임베디드 시스템에 유용한 정말 멋진 예 중 하나는 보드에 장치 트리에 특정 기능이 인코딩 된 경우 특정 스크립트를 실행하는 것입니다. Bootstrap에서 우리는 다음 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 장치 트리 노드가 존재하고 문자열이면 다른 스크립트를 시작할 때 <hw/model/foo> 조건을 사용할 수 있습니다. 예는 다음과 같습니다.
run [S] /path/to/ident --
task [2] <hw/model/foo> /path/to/foo-init -- Initializing Foo board
Finit Progress 출력에서
ident하도록 호출을 숨기려면 빈 설명이있는 트릭에 주목하십시오.
플러그인
플러그인은 Finit의 기능을 확장 하고 부팅 프로세스 및 런타임의 다양한 단계 로 연결할 수 있습니다. 플러그인은 C로 작성되었으며 부팅시 Finit에서 자동으로로드 된 동적 라이브러리로 컴파일됩니다. 기본 플러그인 세트는 plugins/ 디렉토리에 번들로 제공됩니다.
기능 :
확장 및 기능 AN /sbin/init 시스템을 시작하는 데 필요한 것이 부팅 프로세스에 연결되거나 다양한 I/O에 응답하는 플러그인 세트로 사용할 수있는 것과 순전히 관련이 없습니다.
자세한 내용은 Doc/Plugins.md를 참조하십시오.
자동 재 장전
기본적으로 Finit Monitors /etc/finit.d/ 및 /etc/finit.d/enabled/ .conf 파일에 변경 사항을 등록합니다. 변경 사항을 활성화하려면 사용자는 모든 수정 된 파일을 다시로드하고 제거 된 파일을 중지하고 새 서비스를 시작하며 수정 된 모든 파일을 다시 시작하는 initctl reload 호출해야합니다. 서비스의 명령 줄 인수가 변경되면 프로세스가 종료 된 다음 업데이트 된 인수로 다시 시작됩니다. 인수가 수정되지 않았고 프로세스가 Sighup을 지원하는 경우, 프로세스는 종료되고 시작되지 않고 깎아 지른다.
일부 유스 케이스의 경우 initctl reload 호출하는 추가 단계는 불필요한 오버 헤드를 만듭니다.
configure --enable-auto-reload
cgroups
Finit은 CGROUPS v2를 지원하며 서비스 및 사용자 세션에 다음과 같은 기본 그룹이 제공됩니다.
/sys/fs/cgroup
|-- init/ # cpu.weight:100
|-- system/ # cpu.weight:9800
`-- user/ # cpu.weight:100
Finit 자체와 도우미 스크립트 및 서비스는 최상위 Leaf-Node Group init/ 에 배치되어 있으며 예약되어 있습니다.
모든 실행/작업/서비스/SYSV 프로세스는 system/ 의 자체 하위 그룹에 배치됩니다. 각 하위 그룹의 이름은 /etc/finit.d 의 각 .conf 파일에서 가져옵니다.
모든 getty/ tty 프로세스는 user/ 의 자체 하위 그룹에 배치됩니다. 각 하위 그룹의 이름은 사용자 이름에서 가져옵니다.
네 번째 그룹도 root 그룹이 존재합니다. 또한 예약되어 있으며 주로 RT 작업을위한 것입니다. RT 작업이있는 경우 서비스 스탠자에서 다음과 같이 선언해야합니다.
service [...] <...> cgroup.root /path/to/foo args -- description
또는
cgroup.root
service [...] <...> /path/to/foo args -- description
service [...] <...> /path/to/bar args -- description
자세한 내용은 그룹 별 한도를 구성하는 방법에 대해서는 doc/config.md를 참조하십시오.
initctl 도구에는 CGROUP의 설정 및 모니터링을 디버그하고 최적화하는 데 도움이되는 세 가지 명령이 있습니다. 자세한 내용은 ps , top 및 cgroup 명령을 참조하십시오.
참고 : CGROUPS, 특히 버전 2를 지원하지 않는 시스템은 자동으로 감지됩니다. 이러한 시스템에서 위의 기능은 부팅 초기에 비활성화됩니다.
부팅이 끝나면 모든 부트 S 작업 및 서비스가 시작되었지만 네트워킹이 시작되었을 때 Finit은 구성된 runparts <DIR> 디렉토리에서 내장 실행 파트 (8) 명령을 호출합니다. 이것은 구성된 runlevel (기본값 2)으로 변경하기 직전에 발생합니다. (네트워킹은 단일 사용자 모드에서 변경하기 직전에 활성화됩니다.)
runparts /etc/rc.d/ 모든 서비스가 올바르게 시작되면 런 레벨 변경 직후, /etc/rc.local 이 호출됩니다.
rc.local 에는 /etc/finit.conf 의 구성이 필요하지 않습니다. 그것이 존재하고 실행 파일 쉘 스크립트 인 경우 Finit Finit은 HOOK_SYSTEM_UP 호출하기 전에 부팅 끝에서 호출합니다. Doc/Plugins.md의 후크에 대한 자세한 내용을 참조하십시오.
신호를 통해 Finit을 호출하거나 runparts 또는 /etc/rc.local 스크립트에서 initctl 사용할 수 없습니다. Finit은 단일 스레드이며 Runlevel S의 끝 에서이 스크립트를 차단 방식으로 호출하기 때문에 이벤트 루프가 아직 시작되지 않았습니다.
이벤트 루프는 Runlevel S를 제외하고 Finit이 세워진 모든 것입니다. 이는 많은 설정을 통해 느리게 행렬을 유지하고 외부 스크립트에 대한 콜 아웃 몇 개가 있습니다.
그러나 모든 initctl 명령이 금지되는 것은 아닙니다. 지원되는 명령 :
inictl cond : /run/finit/cond 에서 파일 만 작동합니다initctl enable/disable : 활성화 실행/작업/서비스가 런 레벨 변경에서 S에서 2로 활성화됩니다.initctl touch/show/create/delete/list : create , 비 결과 모드가 사용되면 bootstrap 직후 런 레벨 변경에서 다시 변경 사항이 적용됩니다.initctl -f reboot/poweroff/halt : -f 플래그가 직접 커널 명령을 강제하는 데 사용되는 경우. 예 : /etc/rc.local 에서 usr/ 조건을 설정하고 Runlevel 2의 서비스/작업이 실행되는 데 의존 할 수 있습니다.
Runlevels에 대한 기본 지원은 V1.8에서 Finit에 포함되어 있습니다. 기본적으로 모든 서비스, 작업, 실행 명령 및 런 레벨 세트없이 나열된 TTYS는 기본 세트를 가져옵니다 [234] . 부팅 후 기본 런 레벨은 2입니다.
Finit은 Runlevels 0-9 및 S를 지원하며 0은 Halt 용으로, 6 개 재부팅 및 S는 Bootstrap에서만 실행할 수 있습니다. Runlevel 1은 일반적으로 네트워킹이 활성화되지 않은 단일 사용자 수준입니다. 결제에서 이것은 사용자가 정의해야 할 정책에 더 가깝습니다. 일반적으로 Runlevels 1-6 만 사용되며 더 일반적으로 기본 런 레벨 만 사용됩니다.
service , run 명령, task 또는 tty 에 허용 된 런 레벨 세트를 지정하려면 다음과 같이 /etc/finit.conf 에 [NNN] 추가하십시오.
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
이 예에서 syslogd는 처음으로 병렬로 시작된 다음 ACPID를 기존 SYSV init 스크립트를 사용하여 호출합니다. run 명령으로 호출됩니다. 즉, acpid init 스크립트가 완전히 완료 될 때까지 KBD 스크립트를 시작하려는 다음 작업 명령이 호출되지 않습니다. 그런 다음 키보드 설정 스크립트는 모니터링 서비스로 KLOGD와 병렬로 호출됩니다.
다시 말하지만, 작업과 서비스는 병렬로 시작되며, 실행 명령은 순서로 호출되고 실행 명령이 완료 될 때까지 후속 명령이 시작되지 않습니다. 또한 작업 및 실행 명령은 쉘에서 실행되므로 파이프 및 리디렉션을 사용할 수 있습니다.
다음 예는 이것을 보여줍니다. Bootstrap 작업 및 실행 명령도 완료되면 제거됩니다. initctl show 이를 나열하지 않습니다.
task [S] echo "foo" | cat >/tmp/bar
run [S] echo "$HOME" >/tmp/secret
Eg init 5 , 예를 들어 init 5, initctl runlevel 5 사용하여 init를 호출하거나 런 레벨 5로 전환하면 런 레벨 간 전환을 수행 할 수 있습니다. Finit을 변경할 때 Finit도 자동으로 /etc/finit.d/ directory의 모든 .conf 파일을 자동으로 다시로드합니다. 따라서 새 시스템 구성을 설정하려면 runlevel 1로 전환하고 시스템의 모든 구성 파일을 변경하고 이전 런 레벨 /etc/finit.d 다시 전환하기 전에 모든 .conf 파일을 터치합니다. Finit은 구식 서비스를 중지하고 시스템을 재부팅하지 않고 새로운 제품을 시작할 수 있습니다.
전통적으로 유닉스 시스템을 재부팅하고 중단하는 것은 런 레벨을 변경하여 수행됩니다. Finit에는 자체 툴링이 제공되는 자체 툴링과 함께 shutdown , reboot , poweroff 및 suspend 뿐만 아니라 다음 섹션에 자세히 설명 된 initctl 도구도 제공됩니다.
호환성의 이유로 Finit은 BusyBox Init와 동일한 신호 세트를 듣습니다. 이것은 SYSV init와 100% 호환되는 것이 아니라 분명히 유인을위한 더 일반적인 조합입니다. 자세한 내용은 Doc/Signals.md를 참조하십시오.
Finit은 또한 최신 API를 쿼리 상태로 구현하고 시작/시작/중지 서비스 ( initctl 를 구현합니다. telinit 과 달리 initctl 도구는 주어진 명령이 완전히 완료 될 때까지 반환되지 않습니다.
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
SIGHUP 지원 하지 않는 서비스의 경우 .conf 파일의 <!> 표기법을 사용하여 Finit에게 reload 및 runlevel 변경으로 시작하도록 지시해야합니다. 더 많은 조건을 보유하면 서비스가 유지되는 방식에도 <> 을 미칩니다.
참고 : 현재 런 레벨에 속하지 않는 서비스를 시작할 수는 있지만이 서비스는 종료 (충돌)이라면 결제에 의해 자동으로 부활되지 않습니다. 따라서 런 레벨이 2 인 경우 아래의 드롭 비어 SSH 서비스는 죽거나 종료되면 다시 시작되지 않습니다.
status 명령은 기본값이며 모든 모니터링 실행/작업/서비스에 대한 빠른 개요가 표시됩니다. 여기서는 스크립팅 및 문서화에 적합한 initctl -p 호출합니다.
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
위의 각 서비스에 대한 환경 변수는 Alpine Linux, /etc/conf.d/ 의 경우에서 읽습니다. 다른 분포에는 다른 디렉토리와 /etc/default/ 디렉토리가있을 수 있습니다.
status 명령은 선택적 NAME:ID argument를 취합니다. 여기서 우리는이 시스템에서 하나의 인스턴스 만있는 dropbear 의 상태를 확인합니다.
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은 일반적으로 BusyBox MDEV와 함께 제공되는 UDEV 및 임베디드 시스템을 사용하여 데스크탑/서버 시스템에서 실행할 수 있습니다. 일부 시스템에는 오늘날 런타임시 원래 UDEV 대신 SystemD-UDEV 또는 EUDEV가 있습니다. 런타임시 모두에게 유한 프로브가 있으며 devtmpfs /dev/ 하여 쓰기 가능한 파일 시스템이 될 것으로 기대합니다. 필요한 경우 정적으로 설정된 /dev 에서 실행할 수도 있습니다. 그러나 UDEV와 MDEV를 동시에 설치하는 것은 좋은 생각이 아니므로 예측할 수없는 결과로 이어질 것입니다.
Boot Finit에서는 mdev 또는 udevd 호출하여 포기 /dev 로 전화를 걸고 약간 다르게 수행되며 UDEV가있는 시스템에서는 /etc/finit.conf 의 초기에 다음 원샷 작업을 추가 할 수 있습니다.
run [S] udevadm settle --timeout=120 -- Waiting for udev
Finit에는 TTYS 용 Getty가 내장되어 있지만 /etc/finit.conf 에 tty가 구성되지 않은 경우 작업 /bin/login 또는 /bin/sh 필요합니다.
완전 운영 체제 /var , /run 및 /tmp /etc/fstab 에서 올바르게 설정해야합니다.
이 프로젝트는 Eeepc Fastinit의 Syscalls에서 리버스 엔지니어링 된 Claudio Matsuoka의 원래 결제를 기반으로합니다.
Finit은 Github의 Joachim Wiberg에 의해 개발 및 유지 관리됩니다. 버그 보고서를 제출하거나 복제하거나 버그 수정 및 제안 된 확장에 대한 풀 요청을 보내십시오.