সিস্টেমডি হ্যাকিং

আমি ১০ বছরেরও বেশি সময় ধরে এমবেডেড লিনাক্স সিস্টেম তৈরি করছি, এবং আমি sysV স্টাইল ইনিট নিয়ে extensively কাজ করেছি। এটি মজবুত এবং সময়-পরীক্ষিত, কিন্তু এর সীমাবদ্ধতা রয়েছে। এখন বেশ কিছু প্রকল্প sysvinit প্রতিস্থাপনের লক্ষ্য নিয়ে কাজ করছে, যেমন Upstart এবং systemd।

আমি Fedora নিয়ে extensively কাজ করি, ডিস্কলেস ওয়ার্কস্টেশনের জন্য nfsroot ফাইলসিস্টেম এবং Fedora রিপোজিটরির উপর ভিত্তি করে এমবেডেড ফার্মওয়্যার — উভয়ই তৈরি করি। এই ধরনের কাজের জন্য Fedora একটি অদ্ভুত পছন্দ; বেশিরভাগ মানুষ Debian বা Ubuntu বেছে নিতেন।

Fedora রিলিজ ১৫-তে 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 ফাইলসিস্টেমে 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