Hacking SystemD
আমি ১০ বছরেরও বেশি সময় ধরে এমবেডেড লিনাক্স সিস্টেম তৈরি করছি। তার মানে আমি sysV style init নিয়ে অনেক কাজ করেছি। এটি শক্তিশালী এবং সময়-পরীক্ষিত, কিন্তু এর সীমাবদ্ধতা রয়েছে। বর্তমানে বেশ কিছু প্রকল্প sysinit-এর আধিপত্যকে প্রতিস্থাপন করার জন্য কাজ করছে, যেমন Upstart এবং systemd।
আমি Fedora নিয়ে বেশ অনেক কাজ করি, ডিস্কলেস ওয়ার্কস্টেশনের জন্য nfsroot ফাইলসিস্টেম এবং Fedora রিপোজিটরি ভিত্তিক এমবেডেড ফার্মওয়্যার তৈরি করি। এই ধরনের কাজের জন্য Fedora একটি অদ্ভুত পছন্দ; বেশিরভাগ মানুষ Debain বা 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 চিটশিট এবং একটি ডিবাগিং গাইড-ও আছে। এই পৃষ্ঠাগুলি অনেক সাহায্য করেছে।
প্রথমবার যখন আমি আমার 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