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 ਨੂੰ ਅਸਮਰੱਥ ਕਰਦੇ ਹੋ। Fedora ਟੀਮ ਨੇ systemd ਨੂੰ ਟਵੀਕ ਕਰਨ ਅਤੇ ਵਰਤਣ ਬਾਰੇ ਕੁਝ ਉਪਯੋਗੀ ਦਸਤਾਵੇਜ਼ ਪਾਏ ਹਨ। ਉਨ੍ਹਾਂ ਕੋਲ ਇੱਕ sysVinit ਤੋਂ systemd ਚੀਟਸ਼ੀਟ, ਅਤੇ ਇੱਕ ਡੀਬੱਗਿੰਗ ਗਾਈਡ ਵੀ ਹੈ। ਇਨ੍ਹਾਂ ਪੰਨਿਆਂ ਨੇ ਮੇਰੀ ਬਹੁਤ ਮਦਦ ਕੀਤੀ।

ਮੇਰਾ nfsroot ਫਾਈਲਸਿਸਟਮ ਪਹਿਲੀ ਕੋਸ਼ਿਸ਼ 'ਤੇ ਬੂਟ ਹੋਣ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ। ਕਰਨਲ ਕਮਾਂਡ ਲਾਈਨ ਵਿੱਚ

systemd.confirm_spawn=true

ਸ਼ਾਮਲ ਕਰਕੇ, ਮੈਂ systemd ਵੱਲੋਂ ਚਲਾਈ ਗਈ ਹਰ ਕਮਾਂਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਵਿੱਚ ਸਮਰੱਥ ਸੀ, ਅਤੇ ਪਤਾ ਲਗਾ ਸਕਿਆ ਕਿ ਕਿਹੜੀ ਕਰੈਸ਼ ਹੋ ਰਹੀ ਸੀ।

systemd ਦੀ ਇੱਕ ਉਪਯੋਗੀ ਵਿਸ਼ੇਸ਼ਤਾ ਇਹ ਹੈ ਕਿ ਇਹ chroot ਫਾਈਲਸਿਸਟਮ 'ਤੇ chkconfig-ਸਟਾਈਲ ਕਮਾਂਡਾਂ ਚਲਾ ਸਕਦਾ ਹੈ ਬਿਨਾਂ ਇਸ ਵਿੱਚ chroot ਕੀਤੇ। ਇਹ 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