Hacking SystemD

నేను 10 సంవత్సరాలకు పైగా ఎంబెడెడ్ లినక్స్ సిస్టమ్లను నిర్మిస్తున్నాను. దీనర్థం నేను sysV style init తో చాలా పనిచేశాను. ఇది బలమైనది మరియు కాలపరీక్షకు నిలిచింది, కానీ దీనికి దాని పరిమితులు ఉన్నాయి. ఇప్పుడు సిస్ఇనిట్ యొక్క ఆధిపత్యాన్ని అధిగమించడానికి బహుళ ప్రాజెక్ట్లు పనిచేస్తున్నాయి, ఉదాహరణకు 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 ను శుభ్రంగా మరియు ట్రిమ్ గా కనిపించే వరకు కత్తిరించవచ్చు. అలాగే అసంబంధిత సేవలను ఆఫ్ చేయడానికి చ్క్కాన్ఫిగ్ ఉపయోగించవచ్చు. మరియు వాస్తవానికి selinux ని డిసేబుల్ చేయండి. Fedora బృందం సిస్టమ్డ్ను ట్వీక్ చేయడానికి మరియు ఉపయోగించడానికి కొన్ని ఉపయోగకరమైన డాక్యుమెంటేషన్ ను అందించింది. వారికి సిస్Vinit నుండి సిస్టమ్డ్ చీట్షీట్ మరియు డీబగ్గింగ్ గైడ్ కూడా ఉన్నాయి. ఈ పేజీలు చాలా ఉపయోగకరంగా ఉన్నాయి.

నేను మొదటిసారిగా నా nfsroot ఫైల్సిస్టమ్ను బూట్ చేయడానికి ప్రయత్నించినప్పుడు, అది బూట్ అవ్వలేదు. కింది దాన్ని

systemd.confirm_spawn=true

కెర్నల్ కమాండ్లైన్కు జోడించడం ద్వారా, నేను సిస్టమ్డ్లోని ప్రతి కమాండ్ను నియంత్రించగలిగాను మరియు ఏది క్రాష్ అవుతుందో గుర్తించగలిగాను.

సిస్టమ్డ్ యొక్క మంచి సామర్థ్యం ఏమిటంటే, చ్క్కాన్ఫిగ్ స్టైల్ కమాండ్లను క్రూట్ లోకి ప్రవేశించకుండా క్రూట్ ఫైల్సిస్టమ్పై అమలు చేయడం. ఇది యమ్ యొక్క –installroot ఫంక్షనాలిటీని పోలి ఉంటుంది, దీన్ని నేను మొదట ఫైల్సిస్టమ్ను నిర్మించడానికి ఉపయోగించాను. కాబట్టి, కొత్త సిస్టమ్లో క్రాన్ ను డిసేబుల్ చేయడానికి, మీరు నిర్మించేటప్పుడు, మీరు ఈ కింది వాటిని ఇవ్వాలి

systemctl --system --root=$TARGET disable crond.service

ఇక్కడ $TARGET అనేది మీ క్రూట్ మార్గం.

సిస్టమ్డ్ లాంచ్ చేసే అనేక సేవలు ఉన్నాయి, వీటిని పై కమాండ్ ఉపయోగించి డిసేబుల్ చేయలేము. /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