SystemD ಹ್ಯಾಕಿಂಗ್

ನಾನು 10 ವರ್ಷಗಳಿಗಿಂತ ಹೆಚ್ಚು ಕಾಲ ಎಂಬೆಡೆಡ್ ಲಿನಕ್ಸ್ ಸಿಸ್ಟಮ್‌ಗಳನ್ನು ನಿರ್ಮಿಸುತ್ತಿದ್ದೇನೆ, ಮತ್ತು sysV ಶೈಲಿಯ init ನೊಂದಿಗೆ ವ್ಯಾಪಕವಾಗಿ ಕೆಲಸ ಮಾಡಿದ್ದೇನೆ. ಇದು ಬಲಿಷ್ಠ ಮತ್ತು ಕಾಲಪರೀಕ್ಷಿತವಾಗಿದೆ, ಆದರೆ ಇದಕ್ಕೆ ತನ್ನ ಮಿತಿಗಳಿವೆ. ಈಗ ಹಲವಾರು ಪ್ರಾಜೆಕ್ಟ್‌ಗಳು sysvinit ಅನ್ನು ಬದಲಿಸುವ ಗುರಿಯನ್ನು ಹೊಂದಿವೆ, ಉದಾಹರಣೆಗೆ Upstart ಮತ್ತು systemd.

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

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

systemd ನಲ್ಲಿ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ವಿರಳವಾಗಿದೆ, ಮತ್ತು systemd ಅನ್ನು ಹೇಗೆ ಕತ್ತರಿಸುವುದು ಎಂದು ಕಂಡುಹಿಡಿಯಲು ನನಗೆ ಸ್ವಲ್ಪ ತೊಂದರೆಯಾಯಿತು. sysvinit ನೊಂದಿಗೆ, ಕತ್ತರಿಸುವುದು ಸುಲಭ: ಅದು ದುರ್ಬಲವಾಗುವವರೆಗೆ rc.sysinit ಅನ್ನು ಸಂಪಾದಿಸಿ, ಅಪ್ರಸ್ತುತ ಸೇವೆಗಳನ್ನು ಆಫ್ ಮಾಡಲು chkconfig ಬಳಸಿ, ಮತ್ತು SELinux ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ. systemd ಅನ್ನು ಟ್ವೀಕ್ ಮಾಡುವ ಮತ್ತು ಬಳಸುವ ಕುರಿತು Fedora ತಂಡವು ಕೆಲವು ಉಪಯುಕ್ತ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಅನ್ನು ಹಾಕಿದೆ. ಅವರ ಬಳಿ 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