SystemD-ஐ ஹேக் செய்தல்
நான் 10 ஆண்டுகளுக்கும் மேலாக embedded Linux அமைப்புகளை உருவாக்கி வருகிறேன், மேலும் sysV பாணி init உடன் விரிவாக பணியாற்றியுள்ளேன். இது வலுவானது மற்றும் காலத்தால் சோதிக்கப்பட்டது, ஆனால் அதற்கு அதன் வரம்புகள் உள்ளன. sysvinit-ஐ மாற்றுவதை நோக்கமாகக் கொண்ட பல திட்டங்கள் இப்போது உள்ளன, அவற்றில் Upstart மற்றும் systemd ஆகியவை அடங்கும்.
நான் Fedora உடன் விரிவாக பணியாற்றுகிறேன், diskless workstations-க்கான nfsroot கோப்பு அமைப்புகள் மற்றும் Fedora repositories-ஐ அடிப்படையாகக் கொண்ட embedded firmware ஆகிய இரண்டையும் உருவாக்குகிறேன். இந்த வகையான வேலைக்கு Fedora ஒரு விநோதமான தேர்வு; பெரும்பாலானோர் Debian அல்லது Ubuntu-ஐ தேர்ந்தெடுப்பார்கள்.
Fedora, வெளியீடு 15-இல் systemd-க்கு இடம்பெயர்ந்தது. systemd புதியதாக இருந்ததால், எனது toolchains-ஐ Fedora 15-க்கு மேம்படுத்த வேண்டாம் என்று முடிவு செய்தேன். இப்போது நாம் 17-இல் இருக்கிறோம், systemd நிலையானதாகத் தெரிகிறது. எனவே நான் Fedora 17-ஐப் பயன்படுத்தி ஒரு nfsroot அமைப்பை உருவாக்கினேன். இதன் விளைவு LTSP5/Meukow-ஐப் போன்றதே, ஆனால் Fedora சமீபத்திய வெளியீடுகளை வழங்குவதால் அனைத்து packages-ம் மிகவும் புதியவை என்ற வித்தியாசத்தில்.
systemd பற்றிய ஆவணங்கள் அரிதானவை, மேலும் systemd-ஐ எவ்வாறு குறைப்பது என்பதைக் கண்டறிவதில் எனக்கு சில சிரமங்கள் இருந்தன. sysvinit-இல், குறைப்பது எளிது: rc.sysinit-ஐ ஒல்லியாக இருக்கும் வரை திருத்துங்கள், பொருத்தமற்ற services-ஐ அணைக்க chkconfig-ஐப் பயன்படுத்துங்கள், SELinux-ஐ முடக்குங்கள். Fedora குழு systemd-ஐ மாற்றியமைத்து பயன்படுத்துவது குறித்த சில பயனுள்ள ஆவணங்களை வெளியிட்டுள்ளது. அவர்களிடம் ஒரு sysVinit முதல் systemd வரை cheatsheet, மற்றும் ஒரு பிழைத்திருத்த வழிகாட்டி ஆகியவையும் உள்ளன. இந்தப் பக்கங்கள் எனக்கு மிகவும் உதவியாக இருந்தன.
எனது nfsroot கோப்பு அமைப்பு முதல் முயற்சியில் boot ஆகத் தவறிவிட்டது. kernel command line-இல்
systemd.confirm_spawn=true
சேர்ப்பதன் மூலம், systemd இயக்கிய ஒவ்வொரு command-ஐயும் உறுதிப்படுத்த முடிந்தது, மேலும் எது crash ஆகிறது என்பதைக் கண்டறிய முடிந்தது.
systemd-இன் ஒரு பயனுள்ள அம்சம் என்னவென்றால், அது chroot கோப்பு அமைப்பில் chroot செய்யாமல் chkconfig-பாணி commands-ஐ இயக்க முடியும். இது yum-இன் --installroot விருப்பத்தைப் போன்றது, இதைத்தான் நான் முதலில் கோப்பு அமைப்பை உருவாக்கப் பயன்படுத்தினேன். எடுத்துக்காட்டாக, நீங்கள் இப்போது உருவாக்கிய அமைப்பில் cron-ஐ முடக்க, இதை இயக்கவும்
systemctl --system --root=$TARGET disable crond.service
இங்கு $TARGET என்பது உங்கள் chroot-க்கான path.
Systemd மேலே உள்ள command-ஆல் முடக்க முடியாத பல services-ஐ தொடங்குகிறது. இந்த services/commands-க்கான symlinks /etc/systemd-இலும் இல்லை. நான் கண்டறிந்த ஒரே முறை /lib/systemd/system-இலிருந்து இந்த commands-க்கான symlinks-ஐ நீக்குவதுதான். embedded/desktop அமைப்பில் தேவையற்றதாக நான் கண்டறிந்த சில commands:
/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