ഹാക്കിംഗ് സിസ്റ്റംഡി

ഞാൻ 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 അപ്രാപ്തമാക്കുക. Fedora ടീം systemd ട്യൂൺ ചെയ്യുന്നതിനും ഉപയോഗിക്കുന്നതിനും ചില ഉപയോഗപ്രദമായ ഡോക്യുമെന്റേഷൻ അപ്‌ലോഡ് ചെയ്തിട്ടുണ്ട്. അവർക്ക് sysVinit to systemd cheatsheet ഉം ഒരു ഡീബഗ്ഗിംഗ് ഗൈഡും ഉണ്ട്. ഈ പേജുകൾ വലിയ സഹായമായിരുന്നു.

ഞാൻ ആദ്യമായി എന്റെ 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