वर्चुअल कंसोल पर गेटी को लॉन्च करने के लिए न्यूनतम सिस्टम बूट के लिए क्या आवश्यक है?


21

SysV के लिए init, मैं की जरूरत है /etc/inittabगेट्टी प्रविष्टियों, respawning /sbin/initखोल के लिए द्विआधारी, बाइनरी और साझा पुस्तकालयों, login, getty, पीएएम / सुरक्षा / छाया सामान, और कुछ उपकरण फ़ाइलें।

क्योंकि upstartमुझे बहुत समान आवश्यकताओं की आवश्यकता है, लेकिन इसके बजाय /etc/inittab, मेरे पास कुछ *.confफाइलें हैं /etc/init: एक * .conf जो start on startupकि रनवे के साथ सेट करता है telinit, और प्रत्येक tty के लिए एक * .conf जो gettyकि उचित tlevels पर उस tty पर शुरू / प्रतिक्रिया करता है। ।

मुझे किस कॉन्फ़िगरेशन और बायनेरिज़ की आवश्यकता है systemd init?

मुझे लगता है कि प्रलेखन सभी को सेवाओं को शुरू करने और रोकने के लिए पहले से स्थापित प्रणाली का उपयोग करने पर ध्यान केंद्रित किया गया है।

चल रहे आर्क या फ़ेडोरा इंस्टॉलेशन से कॉपी (कर्नेल / initrd को छोड़कर) फ़ाइलों की एक न्यूनतम सूची ठीक काम करेगी, लेकिन मुझे इस तरह की जानकारी नहीं मिल सकती है systemd


मैं यह जानना चाहूंगा कि systemdकिस फाइल के लिए क्या आवश्यक है, और उनके पास क्या होना चाहिए, एक initramfs के बाद एक लॉगिन शेल शुरू करने के लिए यह switch_rootकॉल है systemd /sbin/init


उदाहरण के लिए upstart, बायनेरिज़ और दो *.confफाइलें:

फ़ाइल /etc/init/whatever.conf:

स्टार्टअप पर शुरू करें
रनवे का उत्सर्जन करता है
कार्य
लिपि
  टेलिनिट २
अंत स्क्रिप्ट

फ़ाइल /etc/init/tty1.conf:

रनलेवल पर शुरू करें [12345]
respawn
exec / sbin / agetty -8 --noclear 38400 tty1 linux

उदाहरण के लिए sysvinit, बायनेरिज़ और 1 conf फ़ाइल नाम /etc/inittab:

आईडी: 2: initdefault:
c1: 12345: respawn: / sbin / agetty 38400 tty1 linux

अब मैं systemdबराबर के बाद हूं ।

मुझे लगता है कि कम से कम 1 *.serviceफ़ाइल की आवश्यकता कहीं और है , [Service]जिसमें एक प्रविष्टि है ExecStart=-/sbin/agetty --noclear %I linuxऔर Restart=always, लेकिन और क्या चाहिए?


अब हाल ही में RedHat नॉलेज बेस आर्टिकल (754933) इस URL पर सिस्टमड बूट का वर्णन किया गया है: RHEL 7 के लिए
सिस्टमड

यह देखना बहुत निराशाजनक है कि कैसे लोग एक सिंगल कॉन्फ़िगरेशन लाइन को बड़ी गड़बड़ी में उड़ा देते हैं और इसे सुधार कहते हैं।
छत

जवाबों:


17

सबसे पहले, systemdएक पारंपरिक यूनिक्स नहीं है init। सिस्टमड बहुत अधिक है, इसलिए दोनों की तुलना करना थोड़ा अनुचित है।

प्रश्न का उत्तर देने के लिए, जो कुछ आवश्यक प्रतीत होता है वह कुछ बायनेरिज़ और निम्नलिखित कॉन्फ़िगरेशन फ़ाइलें हैं:

/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

systemctl enable console-getty.service getty@tty2.serviceतब जारी करने से ये सिम्बल बनते हैं:

/etc/systemd/system/default.target.wants/getty@tty2.service -> / lib / systemd / system / getty @ सेवा
/etc/systemd/system/getty.target.wants/console-getty.service -> /lib/systemd/system/console-getty.service

नोट : डायनामिक रूप से systemdशुरू करने के लिए विशेष सुविधाओं का उपयोग करने के लिए agetty, ऑन-डिमांड Alt+ को दबाते समय F3, यह प्रतीत होता है कि आपके पास कम से कम ये दो फाइलें भी होनी चाहिए:

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

जहां autovt@.serviceएक सहानुभूति है getty@.service

कॉन्फ़िगरेशन फ़ाइलों की सामग्री:

default.target, getty.target, sysinit.targetफ़ाइलों को छोड़कर यह खाली हो सकता है [Unit]टैग और (शायद) Description=xxx

basic.target निर्भरता की जानकारी भी शामिल है:

[यूनिट]
विवरण = मूल प्रणाली
= Sysinit.target आवश्यक है
चाहता है = सॉकेट्स.टायर टाइमर्स.टार्ग पाथ्स.टार्ग स्लाइस.टार्गेट
के बाद = sysinit.target sockets.target timers.target paths.target sles.target

मुझे यकीन नहीं है कि अगर फ़ाइलों की जरूरत है या नहीं, तो लक्ष्य के संदर्भ मौजूद नहीं हैं। वे systemd.special(7)मैन पेज पर वर्णित हैं ।


console-getty.service: (सांत्वना पर आंदोलन के लिए विशेष मामला)

[यूनिट]
विवरण = कंसोल गेटी
के बाद = systemd-user-session.service plymouth-left-wa.service
= Getty.target से पहले

[सेवा]
ExecStart = - / sbin / agetty --noclear --keep-baud कंसोल 115200,38400,9600 TERM
प्रकार = बेकार
पुनः प्रारंभ हमेशा =
RestartSec = 0
UtmpIdentifier = विपक्ष
TTYPath = / dev / कंसोल
TTYReset = हाँ
TTYVHangup = हाँ
KillMode = प्रक्रिया
IgnoreSIGPIPE = नहीं
SendSIGHUP = हाँ

[इंस्टॉल]
WantedBy = getty.target

getty@.service: (कंसोल को छोड़कर सभी गेटी सेवाओं के लिए सामान्य विन्यास)

[यूनिट]
विवरण =% I पर गेटी
के बाद = systemd-user-session.service plymouth-left-wa.service
= Getty.target से पहले
IgnoreOnIsolate = हाँ
ConditionPathExists = / dev / tty0

[सेवा]
ExecStart = - / sbin / agetty --noclear% I $ TERM
प्रकार = बेकार
पुनः प्रारंभ हमेशा =
RestartSec = 0
UtmpIdentifier =% मैं
TTYPath = / dev /% मैं
TTYReset = हाँ
TTYVHangup = हाँ
TTYVTDisallocate = नहीं
KillMode = प्रक्रिया
IgnoreSIGPIPE = नहीं
SendSIGHUP = हाँ

[इंस्टॉल]
WantedBy = getty.target
DefaultInstance = TTY1

अंत में आपको शायद इन विशेष बायनेरिज़ में से कुछ की ज़रूरत है (मैंने कोशिश नहीं की है कि कौन से महत्वपूर्ण हैं):

/ lib / systemd / systemd (/ sbin / init आमतौर पर इस ओर इशारा करता है)
/ Lib / systemd / systemd-logind
/ Lib / systemd / systemd-cgroups-एजेंट
/ Lib / systemd / systemd-उपयोगकर्ता के सत्र
/ Lib / systemd / systemd-vconsole सेटअप
/ Lib / systemd / systemd-अद्यतन-utmp
/ Lib / systemd / systemd नींद
/ Lib / systemd / systemd-sysctl
/ Lib / systemd / systemd-initctl
/ Lib / systemd / systemd-उत्तर-पासवर्ड
/ Lib / systemd / systemd-एसी बिजली
/ Lib / systemd / systemd-एक्टिवेट
/ Lib / systemd / systemd-बैकलाइट
/ Lib / systemd / systemd-binfmt
/ Lib / systemd / systemd-bootchart
/ Lib / systemd / systemd-बस-proxyd
/ Lib / systemd / systemd-coredump
/ Lib / systemd / systemd-cryptsetup
/ Lib / systemd / systemd-ऍफ़एससीके
/ Lib / systemd / systemd-hostnamed
/ Lib / systemd / systemd-journald
/ Lib / systemd / systemd-पत्रिका-gatewayd
/ Lib / systemd / systemd-पत्रिका-दूरस्थ
/ Lib / systemd / systemd-localed
/ Lib / systemd / systemd-मशीन
/ Lib / systemd / systemd-मॉड्यूल लोड
/ Lib / systemd / systemd-बहु सीट-x
/ Lib / systemd / systemd-networkd
/ Lib / systemd / systemd-networkd-प्रतीक्षा-ऑनलाइन
/ Lib / systemd / systemd-quotacheck
/ Lib / systemd / systemd यादृच्छिक बीज
/ Lib / systemd / systemd-Readahead
/ Lib / systemd / systemd-रिमाउंट-FS
/ Lib / systemd / systemd समाधान किया गया
/ Lib / systemd / systemd-rfkill
/ Lib / systemd / systemd-बंद
/ Lib / systemd / systemd-shutdownd
/ Lib / systemd / systemd-सॉकेट-proxyd
/ Lib / systemd / systemd-timedated
/ Lib / systemd / systemd-timesyncd
/ Lib / systemd / systemd-udevd
/ Lib / systemd / systemd-अद्यतन किया

सिस्टमड स्टार्ट प्रक्रिया को सारांशित करने के लिए, मुझे लगता है कि यह कुछ इस तरह से काम करता है:

  1. systemd locates basic.target(या सभी *.targetफाइलें?)
  2. निर्भरता के आधार पर हल कर रहे हैं WantedBy=, Wants=, Before=, After=... में निर्देशों [Install]की धारा *.serviceऔर *.targetविन्यास फाइल।
  3. *.services जो शुरू होना चाहिए (जो "विशेष" सेवाएं नहीं हैं), [Service]एक ExecStart=निर्देश के साथ एक खंड है , जो शुरू करने के लिए निष्पादन योग्य को इंगित करता है।

1
AFAIK [Install]अनुभाग का उपयोग बूट अनुक्रम द्वारा नहीं किया जाता है, केवल द्वारा systemctl enable। बूट जो दिखता है, वह सिम्लिंक है /etc/systemd/system/basic.target.wants/, जो इसके द्वारा बनाया गया है systemctl enable
स्टीफन माज्यूस्की

6

systemdजब आप टर्मिनलों पर स्विच करते हैं, तो एक निश्चित अधिकतम संख्या तक स्वचालित रूप से एक गेटी बन जाता है। डिफ़ॉल्ट 6 है (इसलिए आपको अपने आप ही alt + f1 से alt + f6 के लिए एक गेट्टी मिल जाती है)। यदि आप इस पैरामीटर को बदलना चाहते हैं, तो आप पैरामीटर को किसी अन्य संख्या में /etc/systemd/logind.confबदलने के लिए संपादित कर सकते हैं NAutoVTs(अधिकतम 12)

आप अंडे के लिए एक गेट्टी चाहते हैं तो आप मैन्युअल रूप से आप के लिए एक सिमलिंक जोड़ सकते हैं स्विच नहीं है, भले ही /usr/lib/systemd/system/getty@.serviceकरने के लिए /etc/systemd/system/getty.target.wants/निर्देशिका:

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

इसके परिणामस्वरूप getty.targetएक और getty@सेवा की आवश्यकता होगी । एक लक्ष्य सेवाओं का एक संग्रह है, जिसे चलाने की आवश्यकता है, रनलेवल्स के प्रतिस्थापन जो निर्भरता का समर्थन करते हैं। डिफ़ॉल्ट लक्ष्य पर निर्भर करता हैgetty.target

ArchWiki में systemd FAQ देखें

संपादित करें: मैंने प्रलेखन में थोड़ा और शोध किया ।

बूट पर systemdडेमॉन सभी प्रणालियों को defaultलक्ष्य और उनकी निर्भरता में लोड करता है। एक लक्ष्य फाइलों द्वारा परिभाषित किया गया है

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

एक लक्ष्य में निर्देशिकाओं में सहानुभूति द्वारा निर्दिष्ट संलग्न सेवाओं की एक सूची है

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

/etcसंस्करण में वितरण चूक ओवरराइड करता है /usr/lib। केवल एक .targetफ़ाइल की आवश्यकता है, जबकि किसी भी निर्देशिका की आवश्यकता नहीं है

gettyअन्य सेवाओं में से केवल एक है जिसे init स्क्रिप्ट द्वारा चलाया जा सकता है। वितरण में मैंने जाँच की (फेडोरा, आर्च) gettyदो अलग-अलग तरीकों से चलाया जाता है:

  1. प्रत्येक टर्मिनल के लिए विशिष्ट स्क्रिप्ट द्वारा शुरू किया गया ( /usr/lib/systemd/system/getty@.serviceफ़ाइल का लिंक जिसमें tty का नाम systemdलिंक फ़ाइल नाम से प्रतिस्थापित किया गया है )
  2. logindजब उपयोगकर्ता किसी वर्चुअल टर्मिनल पर जाता है, तो स्वचालित रूप से आवश्यकतानुसार लाया जाता है (जिस तरह से पुरानी inetdसेवाओं को केवल उसी समय लाया जाता है जब कोई अनुरोध आता है)। logindके साथ वितरित एक अलग डेमॉन है systemd, और /etc/systemd/logind.confफ़ाइल से इसके कॉन्फ़िगरेशन को पढ़ता है ।

आशा है कि यह संतोषजनक है।


मैं जानना चाहता हूं कि किन फाइलों की जरूरत है, और उनमें क्या शामिल होगा। क्या आप अपने जवाब को उन फाइलों की सूची के साथ संक्षेप में प्रस्तुत कर सकते हैं जो आवश्यक हैं और किस कारण से उन्हें किस क्रम में पढ़ा जा सकता है? मुझे उस निर्देशिका के बारे में जानकारी की आवश्यकता नहीं है। मैं अपने प्रश्न को थोड़ा विस्तार देने की कोशिश करूँगा। धन्यवाद!
मैटबियनको

@MattBianco आप की ओर अनावश्यक रूप से शत्रुतापूर्ण हैं systemd। मैं इसके बारे में थोड़ा शोध कर रहा हूँ और यह बहुत सीधा सा लगता है, एक बार जब आप समझ जाते हैं कि सामान कैसे काम करता है
pqnet

1
हां, मैं अन्य ओपन सोर्स प्रोजेक्ट्स के डॉक्यूमेंटेशन से खराब हो गया हूं। मैं शत्रुतापूर्ण लग रहा है के लिए माफी चाहता हूँ। यह केवल निराशा की बात है कि ऐसा प्रतीत होता है कि बूट प्रक्रिया की व्याख्या करने वाला कोई सरल दस्तावेज़ नहीं है। (मुझे अब समझ में आया कि यह इसलिए है क्योंकि सिस्टमड सरल नहीं है।) एक विनोदी तरीके से मैं यह टिप्पणी करना चाहूंगा कि यह शायद systemdशत्रुतापूर्ण है, जैसा कि एक खुले सिस्टम के शुरू होने के तरीके से शत्रुतापूर्ण अधिग्रहण करने में होता है। यह GNU / Linux को यूनिक्स से दूर कर देता है। यह नहीं कहना कि यह एक बुरी बात है, लेकिन यह इस बात से बहुत अलग है कि चीजें पारंपरिक रूप से कैसी रही हैं। और थोड़ा सा घूमना यह दर्शाता है कि मैं अकेला नहीं हूँ।
मैटबिएंको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.