Hacking SystemD

நான் 10 ஆண்டுகளுக்கும் மேலாக எம்பெட்டட் லினக்ஸ் அமைப்புகளை உருவாக்கி வருகிறேன். இதன் அர்த்தம் நான் sysV style init உடன் நிறைய வேலை செய்துள்ளேன். இது வலுவானது மற்றும் காலத்தால் சோதிக்கப்பட்டது, ஆனால் இதற்கு அதன் வரம்புகள் உள்ளன. தற்போது sysinit இன் ஆதிக்கத்தை மாற்றியமைக்க பல திட்டங்கள் செயல்பட்டு வருகின்றன, அவற்றில் Upstart மற்றும் systemd ஆகியவை அடங்கும்.

நான் Fedora உடன் நிறைய வேலை செய்கிறேன், டிஸ்க்லெஸ் ஒர்க்ஸ்டேஷன்களுக்கான nfsroot கோப்பு முறைமைகள் மற்றும் Fedora ரெப்பசிட்டரிகளை அடிப்படையாகக் கொண்ட எம்பெட்டட் ஃபேர்ம்வேர் ஆகிய இரண்டையும் உருவாக்குகிறேன். இந்த வகை வேலைக்கு Fedora ஒரு வித்தியாசமான தேர்வாகும்; பெரும்பாலான மக்கள் Debian அல்லது Ubuntu ஐ பயன்படுத்துவார்கள்.

Fedora அதன் 15வது வெளியீட்டில் systemd க்கு மாறியது. systemd புதியதாக இருந்ததால், நான் தாமதிக்க முடிவு செய்து என்னுடைய அனைத்து டூல்செயின் உபகரணங்களையும் Fedora 15 க்கு மேம்படுத்தவில்லை. இப்போது நாங்கள் 17 இல் இருக்கிறோம், மற்றும் எல்லாம் நிலையாகத் தெரிகிறது. எனவே நான் Fedora 17 ஐப் பயன்படுத்தி nfsroot அமைப்பை உருவாக்க முனைந்தேன். இறுதி முடிவு LTSP5/Meukow ஐ ஒத்திருக்கிறது – Fedora முன்னணி தொழில்நுட்பத்தில் இருப்பதால் அனைத்து பேக்கேஜ்களும் புதியதாக உள்ளன.

systemd பற்றிய ஆவணங்கள் மிகக் குறைவு, எனவே systemd ஐ எப்படி சுருக்கமாக்குவது என்பதை கண்டுபிடிக்க சில சிரமங்களை எதிர்கொண்டேன். Sysinit உடன் விஷயங்கள் எளிதானவை. rc.sysinit ஐ நல்ல நிலைக்கு வரும் வரை வெட்டுவீர்கள். மேலும் பொருத்தமற்ற சேவைகளை முடக்க chkconfig ஐ பயன்படுத்துவீர்கள். மற்றும் நிச்சயம் selinux ஐ முடுக்கு வேண்டும். டிஜிட்டல் மேம்படுத்தல் மற்றும் systemd ஐ பயன்படுத்துவது குறித்து Fedora குழு சில பயனுள்ள ஆவணங்களை வெளியிட்டுள்ளது. அவர்களிடம் sysVinit to systemd cheatsheet மற்றும் a debugging guide ஆகியவையும் உள்ளன. இந்தப் பக்கங்கள் மிகுந்த உதவியாக இருந்தன.

நான் முதலில் எனது nfsroot கோப்பு முறைமையை துவக்க முயன்றபோது, அது துவங்கவில்லை. சேர்ப்பதன் மூலம்

systemd.confirm_spawn=true

கெர்னல் கமான்ட்லைனில், systemd இல் ஒவ்வொரு கட்டளையையும் கட்டுப்படுத்த முடிந்தது, மற்றும் எது கிராஷ் ஆகிறது என்பதைக் கண்டுபிடிக்க முடிந்தது.

systemd இன் சிறப்பான திறனானது chkconfig பாணி கட்டளைகளை chroot ஐ உள்ளிடாமலேயே chroot கோப்பு முறைமையில் இயக்கும் திறன் ஆகும். இது 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