ਸਿਸਟਮਡੀ ਨੂੰ ਹੈਕ ਕਰਨਾ

ਮੈਂ 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