Hacking SystemD
मी गेल्या १० वर्षांपेक्षा अधिक काळ एम्बेडेड लिनक्स सिस्टीम बनवत आहे. याचा अर्थ मी sysV style init सोबत खूप काम केले आहे. ते मजबूत आणि वेळ-चाचणी केलेले आहे, पण त्याच्या मर्यादा आहेत. आता अनेक प्रकल्प sysinit’s च्या वर्चस्वाला आव्हान देण्यासाठी कार्यरत आहेत, जसे की Upstart आणि systemd.
मी Fedora सोबत खूप काम करतो, डिस्कलेस वर्कस्टेशनसाठी nfsroot फाइलसिस्टीम आणि Fedora रिपॉझिटरीजवर आधारित एम्बेडेड फर्मवेअर दोन्ही तयार करतो. अशा प्रकारच्या कामासाठी Fedora ही एक विचित्र निवड आहे; बहुतेक लोक Debian किंवा Ubuntu निवडतील.
Fedora ने रिलीझ १५ मध्ये systemd वर स्थलांतर केले. systemd नवीन असल्याने, मी माघार घेण्याचा निर्णय घेतला आणि माझ्या सर्व टूलचेन Fedora 15 वर अपग्रेड केल्या नाहीत. आता आम्ही १७ वर आहोत, आणि गोष्टी अगदी स्थिर दिसत आहेत. म्हणून मी Fedora १७ वापरून nfsroot सिस्टीम बनवण्याचा धोका स्वीकारला. अंतिम परिणाम LTSP5/Meukow सारखाच आहे – फरक एवढाच की Fedora अत्याधुनिक असल्याने सर्व पॅकेजेस आश्चर्यकारकपणे नवीन आहेत.
systemd वरील दस्तऐवजीकरण अपुरे आहे, म्हणून systemd कसे ट्रिम करायचे हे शोधण्यात मला काही अडचण आली. sysinit सह गोष्टी सोप्या आहेत. तुम्ही फक्त rc.sysinit मधून आवश्यक ते कापून टाका जोपर्यंत ते छान आणि ट्रिम दिसत नाही. तुम्ही अप्रासंगिक सेवा बंद करण्यासाठी chkconfig वापरता. आणि अर्थातच selinux अक्षम करा. Fedora टीमने systemd ट्वीक करण्यासाठी आणि वापरण्यासाठी काही उपयुक्त दस्तऐवजीकरण ठेवले आहे. त्यांच्याकडे sysVinit ते systemd ची चीटशीट आणि डीबगिंग मार्गदर्शक देखील आहे. या पृष्ठांनी खूप मदत केली.
जेव्हा मी प्रथम माझी nfsroot फाइलसिस्टीम बूट करण्याचा प्रयत्न केला, तेव्हा ती बूट होत नव्हती.
systemd.confirm_spawn=true
कर्नल कमांडलाइनमध्ये जोडून, मी systemd मधील प्रत्येक कमांड नियंत्रित करू शकलो आणि कोणता क्रॅश होत आहे ते शोधू शकलो.
systemd ची एक चांगली क्षमता म्हणजे chroot फाइलसिस्टीमवर chroot न करता chkconfig शैलीतील कमांड चालवणे. हे yum च्या –installroot कार्यक्षमतेसारखे आहे, जे मी सुरुवातीला फाइलसिस्टीम तयार करण्यासाठी वापरले. म्हणून, तुम्ही नवीन सिस्टीमवर cron अक्षम करण्यासाठी,
systemctl --system --root=$TARGET disable crond.service
जिथे $TARGET म्हणजे तुमच्या chroot चा पथ.
systemd अनेक सेवा लाँच करते, ज्या वरील कमांड वापरून अक्षम करता येत नाहीत. या सेवा/कमांडचे हायपरलिंक /etc/systemd मध्ये देखील अस्तित्वात नाहीत. मला फक्त /lib/systemd/system मधून या कमांडच्या सिमलिंक हटवण्याचा मार्ग सापडला. एम्बेडेड/डेस्कटॉप सिस्टीममध्ये निरुपयोगी वाटलेल्या काही कमांड खालील आहेत:
/lib/systemd/system/sysinit.target.wants/*binfmt*
/lib/systemd/system/sysinit.target.wants/cryptsetup.target
/lib/systemd/system/sysinit.target.wants/dev-hugepages.target
/lib/systemd/system/basic.target.wants/fedora-configure.service
/lib/systemd/system/local-fs.target.wants/fedora-import-state.service
/lib/systemd/system/local-fs.target.wants/fedora-readonly.service
/lib/systemd/system/local-fs.target.wants/fedora-storage-init*.service