Minimal bir systemd önyüklemesinin sanal bir konsolda getty'yi başlatması için ne gerekir?


21

SysV için init, ben gerek /etc/inittabgetty girdileri, respawning /sbin/initkabuk için ikili, ikili ve paylaşılan kütüphaneleri, login, getty, PAM / güvenlik / gölge şeyler, ve birkaç cihaz dosyaları.

Çünkü upstarthemen hemen aynı gereksinimleri gerekir, ama bunun yerine, altında /etc/inittabbir kaç *.confdosya var /etc/init: start on startupbir çalışma düzeyi ayarlar bir telinit* .conf gettyve uygun çalışma düzeylerinde o tty üzerinde başlayan / yeniden doğdu her tty için bir * .conf .

Hangi yapılandırma ve ikili dosyalara ihtiyacım var systemd init?

Tüm bulduğum belgeler, hizmetleri başlatmak ve durdurmak için önceden kurulmuş bir sistemin nasıl kullanılacağına odaklanmış gibi görünüyor.

Çalışan bir Arch veya fedora kurulumundan kopyalanacak (çekirdek / initrd hariç) dosyaların asgari bir listesi iyi olurdu, ancak bu tür bilgileri bulamıyorum systemd.


Benim bilmek istiyorum için olduğu systemddosyaların gerektiğini, ne ve onlar bir Initramfs yapar 's sonra bir giriş kabuğu başlatmak için ne içermelidir switch_rootçağrısı systemd /sbin/init.


upstartİkili *.confdosyalar ve iki dosya için örnek :

Dosya /etc/init/whatever.conf:

başlangıçta başla
çalışma seviyesi yayar
görev
senaryo
  telinit 2
komut dosyasını bitir

Dosya /etc/init/tty1.conf:

çalışma seviyesinde başla [12345]
yeniden doğma
exec / sbin / agetty -8 --noklear 38400 tty1 linux

Örnek olarak sysvinit, ikili dosyalar ve 1 conf dosyası /etc/inittab:

id: 2: initdefault:
c1: 12345: yeniden doğma: / sbin / agetty 38400 tty1 linux

Şimdi systemdeşdeğerden sonrayım.

Bir *.serviceyerde bir [Service]girdi ile en az 1 dosya gerektiğini ExecStart=-/sbin/agetty --noclear %I linuxve Restart=alwaysancak başka ne gerekli olduğunu varsayıyorum.


Şimdi bu URL'de sistemd önyüklemesini açıklayan yeni bir RedHat bilgi tabanı makalesi (754933) var: RHEL 7 için
sistemd'e

İnsanların tek bir yapılandırma hattını nasıl büyük bir karmaşaya soktuğunu ve iyileştirme olarak adlandırdığını görmek çok iç karartıcı.
ceving

Yanıtlar:


17

Her şeyden önce, systemdgeleneksel bir unix değildir init. Systemd çok daha fazla, bu yüzden ikisini karşılaştırmak biraz haksızlık.

Soruyu cevaplamak için gerekli görünen bazı ikili dosyalar ve aşağıdaki yapılandırma dosyalarıdır:

/usr/lib/systemd/system/default.target
/usr/lib/systemd/system/basic.target
/usr/lib/systemd/system/sysinit.target
/usr/lib/systemd/system/getty.target
/usr/lib/systemd/system/getty@.service
/usr/lib/systemd/system/console-getty.service

veren systemctl enable console-getty.service getty@tty2.servicedaha sonra bu sembolik oluşturur:

/etc/systemd/system/default.target.wants/getty@tty2.service -> / lib / systemd / system / getty @ hizmeti
/etc/systemd/system/getty.target.wants/console-getty.service -> /lib/systemd/system/console-getty.service

NOT : Dinamik olarak systemdbaşlatmak için özel özelliklerini kullanmak için agetty, Alt+ tuşuna basarken isteğe bağlı F3vb. En azından şu iki dosyaya sahip olmanız gerekir:

/etc/systemd/logind.conf
/lib/systemd/system/autovt@.service

autovt@.serviceiçin bir sembolik bağlantı nerede getty@.service.

Yapılandırma dosyalarının içeriği:

default.target, getty.target, sysinit.targetDosyalar haricinde boş olabilir [Unit]etiketi ve (muhtemelen) Description=xxx.

basic.target ayrıca bağımlılık bilgileri içerir:

[Birim]
Açıklama = Temel Sistem
= Sysinit.target gerektirir
İstiyor = sockets.target timers.target paths.target dilimleri.target
Sonra = sysinit.target sockets.target timers.target paths.target dilimleri.target

Dosya olarak var olmayan hedeflere yapılan referansların gerekli olup olmadığından emin değilim. Bunlar systemd.special(7)kılavuz sayfasında açıklanmıştır .


console-getty.service: (Konsolda agetty için özel durum)

[Birim]
Açıklama = Konsol Getty
Sonra = systemd-user-sessions.service plymouth-quit-wait.service
= Getty.target önce

[Hizmet]
ExecStart = - / sbin / agetty --noclear --keep-baud konsolu 115200,38400,9600 $ TERM
Tür = boşta
Yeniden her zaman =
RestartSec = 0
UtmpIdentifier = aleyhte
TTYPath = / dev / konsol
TTYReset = yes
TTYVHangup = yes
KillMode = İşlem
IgnoreSIGPIPE = no
SendSIGHUP = yes

[Yüklemek]
WantedBy = getty.target

getty@.service: (konsol hariç tüm getty hizmetleri için genel yapılandırma)

[Birim]
Açıklama = Getty% I
Sonra = systemd-user-sessions.service plymouth-quit-wait.service
= Getty.target önce
IgnoreOnIsolate = yes
ConditionPathExists = / dev / tty0

[Hizmet]
ExecStart = - / sbin / agetty --noclear% I $ TERM
Tür = boşta
Yeniden her zaman =
RestartSec = 0
UtmpIdentifier =% I
TTYPath = / dev /% I
TTYReset = yes
TTYVHangup = yes
TTYVTDisallocate = hayır
KillMode = İşlem
IgnoreSIGPIPE = no
SendSIGHUP = yes

[Yüklemek]
WantedBy = getty.target
DefaultInstance = tty1

Sonunda muhtemelen bu özel ikili dosyalardan birkaçına ihtiyacınız var (hangilerinin çok önemli olduğunu denemedim):

/ lib / systemd / systemd (/ sbin / init genellikle bunu gösterir)
/ Lib / systemd / systemd-logind
/ Lib / systemd / systemd-cgroups aracısı
/ Lib / systemd / systemd-kullanıcı oturumları
/ Lib / systemd / systemd-vconsole-kurulum
/ Lib / systemd / systemd-update-utmp
/ Lib / systemd / systemd-uyku
/ Lib / systemd / systemd-sysctl
/ Lib / systemd / systemd-initctl
/ Lib / systemd / systemd-cevap-şifre
/ Lib / systemd / systemd-AC gücü
/ Lib / systemd / systemd-aktive
/ Lib / systemd / systemd-arka
/ Lib / systemd / systemd-binfmt
/ Lib / systemd / systemd-bootchart
/ Lib / systemd / systemd-otobüs-proxyd
/ Lib / systemd / systemd-coredump
/ Lib / systemd / systemd-cryptsetup
/ Lib / systemd / systemd-fsck
/ Lib / systemd / systemd-hostnamed
/ Lib / systemd / systemd-journald
/ Lib / systemd / systemd-dergi-gatewayd
/ Lib / systemd / systemd-dergi-uzak
/ Lib / systemd / systemd-localed
/ Lib / systemd / systemd-işlenmiş
/ Lib / systemd / systemd-modülleri yük
/ Lib / systemd / systemd-çoklu sistem-X
/ Lib / systemd / systemd-networkd
/ Lib / systemd / systemd-networkd-bekle-çevrimiçi
/ Lib / systemd / systemd-quotacheck
/ Lib / systemd / systemd rasgele tohum
/ Lib / systemd / systemd-önceden okuma
/ Lib / systemd / systemd-yeniden bağlama-fs
/ Lib / systemd / systemd-çözüldü
/ Lib / systemd / systemd-rfkill
/ Lib / systemd / systemd kapanma
/ Lib / systemd / systemd-shutdownd
/ Lib / systemd / systemd-soket proxyd
/ Lib / systemd / systemd-timedated
/ Lib / systemd / systemd-timesyncd
/ Lib / systemd / systemd-udevd
/ Lib / systemd / systemd güncelleme pişmiş

Systemd başlatma sürecini özetlemek için, bunun böyle bir şey olduğunu düşünüyorum:

  1. systemd bulur basic.target(veya tüm *.targetdosyalar?)
  2. bağımlılıkları dayalı çözülmedi edilir WantedBy=, Wants=, Before=, After=... yönergelerin [Install]bölümünde *.serviceve *.targetyapılandırma dosyaları.
  3. *.servicebaşlaması gereken ("özel" hizmetler olmayan) [Service]bir ExecStart=yönergeye sahip olan ve çalıştırılacak yürütülebilir dosyayı gösteren bir bölümü vardır .

1
AFAIK [Install]bölümü önyükleme sırası tarafından değil, sadece tarafından kullanılır systemctl enable. Önyüklemenin baktığı şey, /etc/systemd/system/basic.target.wants/tarafından oluşturulan sembolik bağlantılardır systemctl enable.
Stefan Majewsky

6

systemdterminallere geçtiğinizde, belirli bir maksimum sayıya kadar otomatik olarak getty oluşturur. Varsayılan değer 6'dır (böylece alt + f1 ila alt + f6 için otomatik olarak getty alırsınız). Bu parametreyi değiştirmek isterseniz, parametreyi başka bir sayıya /etc/systemd/logind.confdeğiştirmek için düzenleyebilirsiniz NAutoVTs(maks. 12)

Eğer spawn bir getty isterseniz manuel bir sembolik ekleyebilirsiniz geçiş olmasa bile /usr/lib/systemd/system/getty@.servicehiç /etc/systemd/system/getty.target.wants/dizinde:

ln -sf /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty9.service

bu, getty.targetbir daha getty@servis gerektirecektir . Hedef, ortaya çıkması gereken hizmetlerin toplanması, bağımlılıkları destekleyen çalışma seviyelerinin değiştirilmesi. Varsayılan hedef şunlara bağlıdırgetty.target

ArchWiki'deki systemd SSS bölümüne bakın

edit: Belgelerinde biraz daha araştırdım .

Önyükleme sırasında systemdarka plan programı tüm defaulthedefleri ve bağımlılıklarını yükler . Bir hedef dosyalar tarafından tanımlanır

/etc/systemd/system/default.target
/usr/lib/systemd/system/default.target

Bir hedef, dizinlerdeki sembolik bağlantılar tarafından belirtilen ekli hizmetlerin bir listesine sahiptir

/etc/systemd/system/default.target.wants
/usr/lib/systemd/system/default.target.wants

/etcVersiyon dağıtım varsayılan geçersiz kılar /usr/lib. .targetDizin hiçbirine gerek yokken , dosyalardan yalnızca biri gereklidir

gettyinit komut dosyaları tarafından çalıştırılabilen hizmetlerden sadece bir tanesidir. Kontrol ettiğim dağıtımda (fedora, kemer) gettyiki farklı şekilde çalıştırılıyor:

  1. Her terminal için belirli komut dosyaları tarafından başlatılır ( tty adının bağlantı dosya adıyla değiştirildiği/usr/lib/systemd/system/getty@.service dosyaya bağlantılar )systemd
  2. logindKullanıcının sanal bir terminale geçmesi gerektiğinde otomatik olarak getirilir ( inetdyalnızca bir istek geldiğinde eski getirilen hizmetlere benzer ). logindfarklı bir arka plan programıdır systemdve yapılandırmasını /etc/systemd/logind.confdosyadan okur .

Umarım bu tatmin edicidir.


Hangi dosyaların gerekli olduğunu ve ne içereceğini bilmek istiyorum. Cevabınızı gerekli olan dosyaların bir listesiyle özetleyebilir misiniz ve bunların hangi sırayla okunmasına neden olur? Bu dizinde bulunması gerekenler hakkında bilgi eksik. Sorumu biraz ayrıntılandırmaya çalışacağım. Teşekkürler!
MattBianco

@MattBianco gereksiz yere düşmanca davranıyorsun systemd. Biraz araştırıyorum ve işlerin nasıl çalıştığını anladıktan sonra oldukça basit görünüyor
pqnet

1
Evet, diğer açık kaynaklı projelerin belgeleriyle şımarık oldum. Düşmanca davrandığım için üzgünüm. Önyükleme işlemini açıklayan basit bir belge olmadığı için sinir bozucu. (Şimdi anlıyorum çünkü systemd basit değil.) Mizahi systemdbir şekilde, açık bir sistemin başlamasının düşmanca ele geçirilmesinde olduğu gibi belki de düşmanca olduğunu söylemek istiyorum . GNU / Linux'u Unix'ten uzaklaştırır. Bunun kötü bir şey olduğunu söylememek, ama işlerin geleneksel olarak nasıl olduğundan çok farklı. Ve biraz dolaşmak yalnız olmadığımı gösterir.
MattBianco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.