
Init cepat untuk sistem Linux. Reverse yang direkayasa dari EEEPC Fastinit oleh Claudio Matsuoka - "Kesenjangan diisi dengan DNA katak ..."

Gambar 1: Tangkapan layar linux alpine booting finit (howto).
Fitur meliputi:
/etc/rc.local Dukungan/etc/network/interfacesinitctl topsulogin yang dibundel untuk cangkang pemeliharaan yang dilindungisyslogd telah dimulai, lihat proyek Sysklogd yang disarankan untuk integrasi logging lengkap dan cara masuk ke buffer cincin kernel dari skrip menggunakan loggerFokus adalah pada sistem kecil dan tertanam, meskipun FINIT sepenuhnya dapat digunakan pada sistem server dan desktop juga. Untuk contoh yang berfungsi, lihat Kontrib/ Bagian dengan tutorial untuk distribusi Linux berikut:
Catatan: Dukungan untuk berbagai distribusi Linux tidak berarti pemasangan FINIT dengan mudah pada semua arsitektur. Script instalasi yang dibundel adalah contoh untuk instalasi standar, diuji pada sistem AMD64 (x86_64). Pengaturan khusus, misalnya, untuk sistem tertanam, dapat ditemukan dalam salah satu contoh berbasis buildroot berikut: Mylinux, Infix, atau polos BR2-Finit-Demo.
Contoh /etc/finit.conf ini juga dapat dibagi dalam beberapa file .conf di /etc/finit.d . Layanan yang tersedia, tetapi belum diaktifkan, dapat ditempatkan di /etc/finit.d/available dan diaktifkan oleh operator menggunakan alat initctl. Lihat distribusi Linux yang disebutkan di atas, atau MyLinux.
CATATAN: Pada Finit v4.4, .Conf lines dapat dipecah menggunakan karakter Continuation Unix Standard (
), juga komentar trailing sekarang didukung. Yang terakhir berarti Anda perlu melarikan diri dari hash apa pun yang digunakan dalam arahan dan deskripsi (#). Untuk lebih lanjut tentang ini dan contoh, lihat finit.conf (5) manual atau 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 STANZA service , serta task , run dan lainnya dijelaskan secara penuh di Doc/Config.md. Berikut adalah gambaran cepat dari beberapa komponen paling umum yang diperlukan untuk memulai daemon 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
Beberapa komponen opsional: runlevel (s), kondisi dan deskripsi, membuatnya mudah untuk membuat skrip start sederhana dan masih mungkin untuk penggunaan yang lebih maju juga:
service /usr/sbin/sshd -D
Ketergantungan ditangani menggunakan kondisi. Salah satu kondisi yang paling umum adalah menunggu jaringan dasar tersedia:
service <net/route/default> nginx -- High performance HTTP server
Berikut adalah contoh lain di mana kami menginstruksikan FINIT untuk tidak memulai BusyBox ntpd sampai syslogd telah dimulai dengan benar. Finit menunggu syslogd untuk membuat file PID -nya, dengan default /var/run/syslogd.pid .
service [2345] log <!pid/syslogd> ntpd -n -N -p pool.ntp.org
service [S12345] syslogd -n -- Syslog daemon
Perhatikan kata kunci log , BusyBox ntpd menggunakan stderr untuk logging saat dijalankan di latar depan. Dengan log Finit mengarahkan stdout + stderr ke Daemon Log Sistem Menggunakan Alat Command Line logger(1) .
Layanan, atau tugas, dapat memiliki beberapa dependensi yang terdaftar. Di sini kami menunggu Syslogd telah memulai syslogd jaringan dasar untuk naik:
service [2345] log <pid/syslogd,net/route/default> ntpd -n -N -p pool.ntp.org
Jika salah satu kondisi gagal, misalnya hilangnya jaringan, ntpd dihentikan dan segera setelah kembali lagi ntpd dimulai kembali secara otomatis.
CATATAN: Pastikan daemon tidak membayar dan melepaskan diri dari bendera TTY, biasanya -n atau -f , atau -D seperti dalam kasus OpenSsh di atas. Jika melepaskan diri, FOTS tidak dapat memantau dan malah akan mencoba untuk memulai kembali.
Pengawasan proses
Mulailah, Pantau dan restart layanan jika mereka gagal.
Getty
FINIT mendukung Getty eksternal tetapi juga dilengkapi dengan getty bawaan terbatas, berguna untuk sistem yang sangat kecil. Getty mengatur TTY dan menunggu input pengguna sebelum menyerahkan ke /bin/login , yang bertanggung jawab untuk menangani otentikasi yang sebenarnya.
tty [12345] /dev/tty1 nowait linux
tty [12345] /dev/ttyAMA0 noclear vt100
tty [12345] /sbin/getty -L /dev/ttyAMA0 vt100
Pengguna sistem tertanam mungkin ingin mengaktifkan konsol serial otomatis dengan perangkat @console khusus. Ini berfungsi terlepas dari cuaca sistem ini menggunakan ttyS0 , ttyAMA0 , ttyMXC0 , atau apa pun. Finit memperkirakannya dengan menanyakan sysfs: /sys/class/tty/console/active .
tty [12345] @console linux noclear
Perhatikan bendera noclear , nowait , dan nologin opsional. Yang terakhir adalah untuk melewatkan proses login sepenuhnya. Untuk informasi lebih lanjut, lihat Doc/Config.md.
Runlevels
Dukungan untuk runlevel-style sysv init tersedia, dengan gaya minimal yang sama dengan segala sesuatu yang lain dalam finit. Sintaks [2345] dapat diterapkan pada layanan, tugas, lari, dan bait Tty.
Runlevel yang dipesan adalah 0 dan 6, berhenti dan reboot, masing -masing seperti SYSV Init. Runlevel 1 dapat dikonfigurasi secara bebas, tetapi disarankan untuk disimpan sebagai sistem Runlevel Pengguna Single karena FINIT tidak akan mulai jaringan di sini. runlevel NUM yang dikonfigurasi dari /etc/finit.conf adalah apa yang diubah oleh FINIT menjadi setelah bootstrap, kecuali 'tunggal' (atau 'S') diberikan pada garis kernel CMD, dalam hal ini Runlevel 1 dimulai.
Semua layanan di RunLevel S) dimulai lebih dulu, diikuti oleh run-time runlevel yang diinginkan. Jalankan tugas di RunLevel S dapat dimulai secara berurutan dengan menggunakan run [S] cmd . Mengubah Runlevels at Runtime dilakukan seperti init lainnya, misalnya init 4 , tetapi juga menggunakan alat intictl yang lebih canggih.
Kondisi
Seperti disebutkan sebelumnya, FINIT memiliki sistem ketergantungan canggih untuk menangani sinkronisasi, yang disebut kondisi. Ini dapat digunakan dalam banyak hal; Bergantung pada layanan lain, ketersediaan jaringan, dll.
Salah satu contoh yang sangat keren yang berguna untuk sistem tertanam adalah menjalankan skrip tertentu jika papan memiliki fitur tertentu yang dikodekan dalam pohon perangkatnya. Di Bootstrap kami menjalankan skrip ident berikut:
#! /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 Asalkan node pohon perangkat ada, dan merupakan string, kita kemudian dapat menggunakan kondisi <hw/model/foo> saat memulai skrip lain. Inilah contohnya:
run [S] /path/to/ident --
task [2] <hw/model/foo> /path/to/foo-init -- Initializing Foo board
Perhatikan trik dengan deskripsi kosong untuk menyembunyikan panggilan untuk
identoutput kemajuan FINIT.
Plugin
Plugin dapat memperluas fungsionalitas FINIT dan mengaitkan ke berbagai tahap proses boot dan saat runtime. Plugin ditulis dalam C dan dikompilasi ke dalam pustaka dinamis yang dimuat secara otomatis oleh FINIT saat boot. Satu set dasar plugin dibundel di plugins/ direktori.
Kemampuan:
Ekstensi dan fungsionalitas yang tidak murni terkait dengan apa yang dibutuhkan AN /sbin/init untuk memulai sistem yang tersedia sebagai satu set plugin yang menghubungkan ke dalam proses boot atau menanggapi berbagai I/O.
Untuk informasi lebih lanjut, lihat Doc/Plugins.md.
Muat ulang otomatis
Secara default, FINIT Monitors /etc/finit.d/ dan /etc/finit.d/enabled/ mendaftarkan perubahan apa pun pada file .conf . Untuk mengaktifkan Ubah Pengguna yang Harus Memanggil initctl reload , yang memuat ulang semua file yang dimodifikasi, menghentikan layanan yang dihapus, memulai yang baru, dan memulai kembali yang dimodifikasi. Jika argumen baris perintah dari suatu layanan telah berubah, prosesnya akan diakhiri dan kemudian dimulai lagi dengan argumen yang diperbarui. Jika argumen belum dimodifikasi dan prosesnya mendukung Sighup, prosesnya akan menerima desah daripada diakhiri dan dimulai.
Untuk beberapa kasus penggunaan langkah ekstra dari panggilan initctl reload menciptakan overhead yang tidak perlu, yang dapat dihapus pada saat build-time menggunakan:
configure --enable-auto-reload
Cgroup
FINIT mendukung cgroups v2 dan dilengkapi dengan grup default berikut di mana layanan dan sesi pengguna ditempatkan di:
/sys/fs/cgroup
|-- init/ # cpu.weight:100
|-- system/ # cpu.weight:9800
`-- user/ # cpu.weight:100
FINIT sendiri dan skrip dan layanan penolongnya ditempatkan di init/ , yang juga dicadangkan .
Semua proses Run/Task/Service/SYSV ditempatkan di sub-kelompok mereka sendiri di system/ . Nama masing-masing sub-kelompok diambil dari file .conf masing-masing dari /etc/finit.d .
Semua proses Getty/ Tty ditempatkan di sub-kelompok mereka sendiri di user/ . Nama setiap sub-kelompok diambil dari nama pengguna.
Kelompok keempat juga ada, kelompok root . Ini juga dicadangkan dan terutama dimaksudkan untuk tugas RT. Jika Anda memiliki tugas RT, mereka perlu dinyatakan seperti itu dalam layanan mereka seperti ini:
service [...] <...> cgroup.root /path/to/foo args -- description
atau
cgroup.root
service [...] <...> /path/to/foo args -- description
service [...] <...> /path/to/bar args -- description
Lihat DOC/CONFIG.MD Untuk informasi lebih lanjut, misalnya, cara mengkonfigurasi batas per kelompok.
Alat initctl memiliki tiga perintah untuk membantu men -debug dan mengoptimalkan pengaturan dan pemantauan cgroup. Lihat perintah ps , top , dan cgroup untuk detailnya.
Catatan: Sistem yang tidak mendukung cgroup, khususnya versi 2, terdeteksi secara otomatis. Pada sistem tersebut, fungsionalitas di atas dinonaktifkan lebih awal saat boot.
Di akhir boot, ketika semua tugas dan layanan bootstrap dan S telah dimulai, tetapi tidak jaringan, Finit memanggil perintah run-in-in-nya (8) pada direktori runparts <DIR> yang dikonfigurasi. Ini terjadi tepat sebelum berubah ke RunLevel yang dikonfigurasi (Default 2). (Jaringan diaktifkan sesaat sebelum berubah dari mode pengguna tunggal.)
runparts /etc/rc.d/ Tepat setelah perubahan Runlevel ketika semua layanan telah dimulai dengan benar, /etc/rc.local dipanggil.
Tidak ada konfigurasi bait di /etc/finit.conf diperlukan untuk rc.local . Jika ada dan merupakan skrip shell yang dapat dieksekusi, Finit memanggilnya di akhir boot, sebelum memanggil HOOK_SYSTEM_UP . Lihat lebih lanjut tentang kait di doc/plugins.md.
Tidak mungkin untuk memanggil FINIT melalui sinyal atau menggunakan initctl di runparts atau /etc/rc.local Script mana pun. Ini karena Finit berulir tunggal dan menyebut skrip -skrip ini dengan cara yang memblokir di akhir Runlevel S, di mana titik loop acara belum dimulai.
Lingkaran acara adalah semua hal yang dibangun oleh FINIT, kecuali untuk Runlevel S, yang tetap merupakan prosesi lambat melalui banyak pengaturan, dengan beberapa kait dan memblokir panggilan ke skrip eksternal.
Namun, tidak semua perintah initctl dilarang. Perintah yang Didukung:
inictl cond : Hanya mengoperasikan file di /run/finit/condinitctl enable/disable : Diaktifkan Run/Tugas/Layanan diaktifkan pada perubahan Runlevel dari S ke 2initctl touch/show/create/delete/list : create , asalkan mode non-interaktif digunakan, sekali lagi perubahan berlaku di runlevel perubahan langsung setelah bootstrapinitctl -f reboot/poweroff/halt : asalkan bendera -f digunakan untuk memaksa perintah kernel langsung Contoh: Anda dapat mengatur usr/ kondisi di /etc/rc.local dan memiliki layanan/tugas di RunLevel 2 bergantung padanya untuk dieksekusi.
Dukungan dasar untuk runlevels termasuk dalam Finit dari v1.8. Secara default semua layanan, tugas, jalankan perintah dan ttys yang terdaftar tanpa satu set runlevels mendapatkan set default [234] yang ditetapkan. Runlevel default setelah boot adalah 2.
Finit mendukung Runlevels 0-9, dan S, dengan 0 dicadangkan untuk berhenti, 6 reboot dan S untuk layanan hanya berjalan di bootstrap. RunLevel 1 adalah tingkat pengguna tunggal, di mana biasanya tidak ada jaringan yang diaktifkan. Dalam finit ini lebih merupakan kebijakan untuk didefinisikan oleh pengguna. Biasanya hanya runlevel 1-6 yang digunakan, dan bahkan lebih umum, hanya runlevel default yang digunakan.
Untuk menentukan set RunLevels yang diizinkan untuk service , run perintah, task , atau tty , tambahkan [NNN] ke /etc/finit.conf Anda, seperti ini:
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
Dalam contoh ini Syslogd pertama kali dimulai, secara paralel, dan kemudian ACPID disebut menggunakan skrip SYSV Init konvensional. Ini dipanggil dengan perintah run, artinya perintah tugas berikut untuk memulai skrip KBD tidak dipanggil sampai skrip ACPID init telah sepenuhnya selesai. Kemudian skrip pengaturan keyboard disebut paralel dengan Klogd sebagai layanan yang dipantau.
Sekali lagi, tugas dan layanan dimulai secara paralel, sementara perintah run dipanggil dalam urutan yang terdaftar dan perintah selanjutnya tidak dimulai sampai perintah run telah selesai. Juga, perintah tugas dan jalankan dijalankan dalam shell, sehingga pipa dan pengalihan dapat digunakan.
Contoh -contoh berikut menggambarkan hal ini. Perintah Tugas Bootstrap dan Jalankan juga dihapus ketika selesai, initctl show tidak akan mencantumkannya.
task [S] echo "foo" | cat >/tmp/bar
run [S] echo "$HOME" >/tmp/secret
Beralih di antara runlevel dapat dilakukan dengan menelepon init dengan argumen tunggal, misalnya init 5 , atau menggunakan initctl runlevel 5 , keduanya beralih ke runlevel 5. Saat mengubah runlevels finit juga secara otomatis memuat ulang semua file .conf di direktori /etc/finit.d/ . Jadi, jika Anda ingin mengatur konfigurasi sistem baru, beralih ke RunLevel 1, ubah semua file konfigurasi dalam sistem, dan sentuh semua file .conf di /etc/finit.d sebelum beralih kembali ke runlevel sebelumnya - dengan cara itu Finit dapat menghentikan layanan lama dan memulai yang baru untuk Anda, tanpa me -reboot sistem.
Secara tradisional, me -reboot dan menghentikan sistem UNIX dilakukan dengan mengubah runlevel -nya. FINIT dilengkapi dengan alat sendiri yang menyediakan: shutdown , reboot , poweroff , dan suspend , tetapi juga alat initctl , dirinci di bagian selanjutnya.
Untuk alasan kompatibilitas FINIT mendengarkan set sinyal yang sama dengan BusyBox Init. Ini tidak 100% kompatibel dengan sysv init, tetapi jelas kombinasi yang lebih umum untuk FOT. Untuk detail lebih lanjut, lihat Doc/Signals.md.
FINIT juga mengimplementasikan status API modern untuk meminta status, dan memulai/menghentikan layanan, yang disebut initctl . Tidak seperti telinit alat initctl tidak kembali sampai perintah yang diberikan telah sepenuhnya selesai.
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
Untuk layanan reload tidak runlevel SIGHUP <!> Jika <> memiliki lebih banyak kondisi, ini juga akan memengaruhi bagaimana layanan dipertahankan.
Catatan: Meskipun dimungkinkan untuk memulai layanan yang tidak termasuk dalam level runel saat ini, layanan ini tidak akan dihidupkan secara otomatis oleh FINIT jika mereka keluar (crash). Oleh karena itu, jika runlevel adalah 2, layanan Dropbear SSH di bawah ini tidak akan dimulai kembali jika dibunuh atau keluar.
Perintah status adalah default, menampilkan gambaran cepat dari semua run/tugas/layanan yang dipantau. Di sini kami memanggil initctl -p , cocok untuk skrip dan dokumentasi:
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
Variabel lingkungan untuk masing -masing layanan di atas dibaca dari, dalam kasus Alpine Linux, /etc/conf.d/ . Distribusi lain mungkin memiliki direktori lain, misalnya, penggunaan Debian /etc/default/ .
Perintah status mengambil NAME:ID . Di sini kami memeriksa status dropbear , yang hanya memiliki satu contoh dalam sistem ini:
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 mampu berjalan di kedua sistem desktop/server dengan udev dan sistem tertanam yang biasanya datang dengan BusyBox MDEV. Beberapa sistem memiliki Systemd-Udev atau Eudev hari ini alih-alih UDEV asli, probe FINIT untuk semuanya saat runtime dan mengharapkan /dev/ menjadi sistem file yang dapat ditulisi menggunakan devtmpfs . Dimungkinkan juga untuk dijalankan secara statis pengaturan /dev jika diperlukan. Namun bukan ide yang baik untuk menginstal Udev dan MDEV pada saat yang sama, ini akan menghasilkan hasil yang tidak terduga.
Pada panggilan boot finit baik mdev atau udevd untuk mengisi /dev , ini dilakukan sedikit berbeda dan pada sistem dengan udev Anda mungkin ingin menambahkan tugas satu-shot berikut di awal /etc/finit.conf :
run [S] udevadm settle --timeout=120 -- Waiting for udev
FINIT memiliki getty built-in untuk TTYS, tetapi membutuhkan kerja /bin/login atau /bin/sh , jika tidak ada TTY yang dikonfigurasi di /etc/finit.conf .
Untuk sistem /var operasional penuh, /run dan /tmp harus diatur dengan benar di /etc/fstab - yang diulangi saat boot.
Proyek ini didasarkan pada FINIT asli oleh Claudio Matsuoka yang direkayasa terbalik dari Syscalls dari EEEPC Fastinit - "Kesenjangan diisi dengan DNA katak ..."
FINIT dikembangkan dan dikelola oleh Joachim Wiberg di GitHub. Silakan mengajukan laporan bug, mengkloningnya, atau mengirim permintaan tarik untuk perbaikan bug dan ekstensi yang diusulkan.