Hacking SystemD

ನಾನು ಕಳೆದ 10 ವರ್ಷಗಳಿಗೂ ಹೆಚ್ಚು ಕಾಲ ಎಂಬೆಡೆಡ್ ಲಿನಕ್ಸ್ ಸಿಸ್ಟಂಗಳನ್ನು ನಿರ್ಮಿಸುತ್ತಿದ್ದೇನೆ. ಇದರ ಅರ್ಥ ನಾನು sysV style init ನೊಂದಿಗೆ ಸಾಕಷ್ಟು ಕೆಲಸ ಮಾಡಿದ್ದೇನೆ. ಇದು ದೃಢವಾದ ಮತ್ತು ಕಾಲಪರೀಕ್ಷಿತ ವ್ಯವಸ್ಥೆಯಾಗಿದೆ, ಆದರೆ ಅದಕ್ಕೆ ಅದರ ಮಿತಿಗಳಿವೆ. ಈಗ sysinit ನ ಪ್ರಾಬಲ್ಯವನ್ನು ಬದಲಾಯಿಸಲು ಹಲವಾರು ಯೋಜನೆಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿವೆ, ಉದಾಹರಣೆಗೆ Upstart ಮತ್ತು systemd.

ನಾನು Fedora ನೊಂದಿಗೆ ಸಾಕಷ್ಟು ಕೆಲಸ ಮಾಡುತ್ತೇನೆ, ಡಿಸ್ಕ್ಲೆಸ್ ವರ್ಕ್‌ಸ್ಟೇಷನ್‌ಗಳಿಗಾಗಿ nfsroot ಫೈಲ್‌ಸಿಸ್ಟಮ್‌ಗಳನ್ನು ಮತ್ತು ಫೆಡೋರಾ ರೆಪೊಸಿಟರಿಗಳ ಆಧಾರದ ಮೇಲೆ ಎಂಬೆಡೆಡ್ ಫರ್ಮ್‌ವೇರ್ ಅನ್ನು ನಿರ್ಮಿಸುತ್ತೇನೆ. ಈ ರೀತಿಯ ಕೆಲಸಕ್ಕೆ ಫೆಡೋರಾ ಒಂದು ವಿಚಿತ್ರ ಆಯ್ಕೆಯಾಗಿದೆ; ಹೆಚ್ಚಿನ ಜನರು ಡೆಬಿಯನ್ ಅಥವಾ ಉಬುಂಟುಗೆ ಹೋಗುತ್ತಾರೆ.

ಫೆಡೋರಾ systemd ಗೆ ರಿಲೀಸ್ 15 ರಲ್ಲಿಯೇ ವಲಸೆ ಹೋಯಿತು. systemd ಹೊಸದಾಗಿದ್ದರಿಂದ, ನಾನು ಹಿಂದೆ ಸರಿಯಲು ನಿರ್ಧರಿಸಿದೆ ಮತ್ತು ನನ್ನ ಎಲ್ಲಾ ಟೂಲ್‌ಚೈನ್‌ಗಳನ್ನು Fedora 15 ಗೆ ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡಲಿಲ್ಲ. ಈಗ ನಾವು 17 ನಲ್ಲಿದ್ದೇವೆ ಮತ್ತು ವಿಷಯಗಳು ಸಾಕಷ್ಟು ಸ್ಥಿರವಾಗಿ ಕಾಣುತ್ತವೆ. ಹಾಗಾಗಿ ನಾನು ಫೆಡೋರಾ 17 ಅನ್ನು ಬಳಸಿ nfsroot ವ್ಯವಸ್ಥೆಯನ್ನು ಮಾಡಲು ನಿರ್ಧರಿಸಿದೆ. ಅಂತಿಮ ಫಲಿತಾಂಶವು LTSP5/Meukow ಅನ್ನು ಹೋಲುತ್ತದೆ – ಫೆಡೋರಾ ಅತ್ಯಾಧುನಿಕವಾಗಿರುವುದರಿಂದ ಎಲ್ಲಾ ಪ್ಯಾಕೇಜ್‌ಗಳು ಅದ್ಭುತವಾಗಿ ಹೊಸದಾಗಿವೆ.

systemd ಕುರಿತ ದಾಖಲಾತಿಯು ಅಲ್ಪವಾಗಿದೆ, ಹಾಗಾಗಿ systemd ಅನ್ನು ಹೇಗೆ ಟ್ರಿಮ್ ಮಾಡಬೇಕೆಂದು ಲೆಕ್ಕಾಚಾರ ಹಾಕುವಲ್ಲಿ ನನಗೆ ಸ್ವಲ್ಪ ತೊಂದರೆಯಾಯಿತು. sysinit ನೊಂದಿಗೆ ವಿಷಯಗಳು ಸುಲಭವಾಗಿದೆ. ನೀವು ಉತ್ತಮವಾಗಿ ಮತ್ತು ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಕಾಣುವವರೆಗೆ rc.sysinit ಮೂಲಕ ಕತ್ತರಿಸಬಹುದು. ಅಪ್ರಸ್ತುತ ಸೇವೆಗಳನ್ನು ಆಫ್ ಮಾಡಲು ನೀವು chkconfig ಅನ್ನು ಸಹ ಬಳಸುತ್ತೀರಿ. ಮತ್ತು ಸಹಜವಾಗಿ selinux ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ. ಫೆಡೋರಾ ತಂಡವು 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