जो लोग केवल स्क्रिप्ट से जुड़े समाधान को पसंद करते हैं, उनके लिए FAT32 बूट पार्टीशन में छोड़ दिया गया है , यहाँ बताया गया है कि यह कैसे करना है। [ संपादित करें: फाइलें अब प्रोजेक्ट पी-बूट-स्क्रिप्ट में उपलब्ध हैं ।]
जैसा कि अन्य उत्तरों में उल्लेख किया गया है, इसमें कमांड-लाइन तर्क शामिल हैं जिसके साथ लिनक्स कर्नेल शुरू किया गया है। वे तर्क /boot/cmdline.txt में हैं ।
मैंने रास्पियन बस्टर (v10.1) 2019-09-26 पर इसका परीक्षण किया है। यह एक नए फ्लैश किए गए एसडी कार्ड पर या डाउनलोड की गई .img डिस्क छवि पर काम करता है , जिसे आप किसी भी एसडी कार्ड में फ्लैश कर सकते हैं।
1. कर्नेल तर्कों को संपादित करें
पाठ फ़ाइल खोलें /boot/cmdline.txt , इसमें से किसी भी init=
भाग को हटा दें , और इसे पंक्ति के अंत में जोड़ें:
init=/bin/bash -c "mount -t proc proc /proc; mount -t sysfs sys /sys; mount /boot; source /boot/unattended"
इस लाइन पर अंतिम शब्द कर्नेल द्वारा पहली प्रक्रिया (PID = 1) के बजाय / sbin / init के रूप में चलाने के लिए एक स्क्रिप्ट का नाम है । कर्नेल-तर्क मदद पृष्ठ केवल तर्क के बिना कहते हैं .
init एक्ज़िक्यूटेबल में पास हो, तो आप स्क्रिप्ट कॉल नहीं कर सकते unattended.sh या ऐसा बातें।
2. स्क्रिप्ट को बूट पार्टीशन पर रखें
बूट पार्टीशन को निम्नलिखित के रूप में सहेजें / अनअटेंडेड (कमांड लाइन में आपके द्वारा डाला गया नाम):
# 1. MAKING THE SYSTEM WORK. DO NOT REMOVE
mount -t tmpfs tmp /run
mkdir -p /run/systemd
mount / -o remount,rw
sed -i 's| init=.*||' /boot/cmdline.txt
# 2. THE USEFUL PART OF THE SCRIPT
# Example:
[[ -d /boot/payload/home/pi ]] && sudo -u pi cp --preserve=timestamps -r\
/boot/payload/home/pi /home/ && rm -rf /boot/payload/home/pi # A
[[ -d /boot/payload ]] && cp --preserve=timestamps -r /boot/payload/* /\
&& rm -rf /boot/payload # B
ln -s /lib/systemd/system/one-time-script.service\
/etc/systemd/system/multi-user.target.wants/ # C
# 3. CLEANING UP AND REBOOTING
sync
umount /boot
mount / -o remount,ro
sync
echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger
sleep 5
यह स्क्रिप्ट कुछ आवश्यक तैयारी (अध्याय 1) करता है, फिर कुछ भी आप करना चाहते हैं (2) और फिर सफाई और फिर से बूटिंग (3)। आप जो आदेश चलाना चाहते हैं, उसके तहत सामान को 2 से बदलें।
कुछ कॉन्फ़िगरेशन कार्यों के लिए आपको संभवतः नेटवर्किंग और अन्य सेवाओं को लाने के लिए एक सामान्य बूट की आवश्यकता होती है, इसलिए इस संस्करण में उदाहरण (नीचे समझाया गया है) केवल Pi स्क्रिप्ट को चलाने के लिए एक उचित स्क्रिप्ट के लिए तैयार करता है।
3. बूट विभाजन पर आपकी स्क्रिप्ट की ज़रूरतों के लिए कोई अन्य फ़ाइल रखें
...जाहिर है।
उदाहरण
अपनी स्क्रिप्ट के साथ, मैंने एक बूट पेलोड / बूट विभाजन पर रखा, जो उन फ़ाइलों को रखता है जिन्हें मैं लिनक्स विभाजन में स्थानांतरित करना चाहता हूं। स्क्रिप्ट में पहुंच से बाहर से ऊपर,
- लाइन A फाइल को pi-user की डायरेक्टरी में ले जाती है। उदाहरण के लिए पेलोड / होम / पीआई / .bashrc को रूट फाइल सिस्टम में /home/pi/.bashrc पर ले जाया जाता है ;
- लाइन बी चाल सहित लिनक्स विभाजन, में जड़ के स्वामित्व वाली फ़ाइलों पेलोड / usr / स्थानीय / bin / one-time-script.sh जो हो जाता है /usr/local/bin/one-time-script.sh , और के लिए इसी तरह के पेलोड / lib / systemd / system / one-time-script.service ;
- लाइन C तब उस अंतिम फ़ाइल के लिए एक सिम्लिंक बनाता है, इसलिए मेरी कॉन्फ़िगरेशन स्क्रिप्ट one-time-script.sh अगले बूट पर चलाई जाती है।
वह स्क्रिप्ट मुझे पसंद है विभिन्न अनुकूलन करता है: यह एक और FAT32 विभाजन बनाता है और प्रारूपित करता है और इसे / etc / fstab में जोड़ता है ताकि pi उपयोगकर्ता इसे (एप्लिकेशन लॉग आदि के लिए) लिख सके; शेष 4 विभाजन और फाइल सिस्टम को एसडी कार्ड के शेष भाग में बदल देता है; स्थान, समयक्षेत्र, होस्टनाम (सीपीयू सीरियल नंबर के आधार पर), वाईफाई देश; वाईफाई नेटवर्क और पासफ़्रेज़ सेट करता है; SSH को चालू करता है; SSH सत्रों के लिए भाषा-सेटिंग समस्या को हल करता है; ऑटो-लॉगिन के बिना कंसोल में बूटिंग को कॉन्फ़िगर करता है; बूट विभाजन पर एक फाइल के लिए सिस्टम के बारे में कुछ डेटा लिखते हैं; और निश्चित रूप से यह उस सिम्कलिन को हटा देता है ताकि वह बूट पर फिर से न चले।
अधिकांश उपयोगकर्ता इसे अनावश्यक पाएंगे और PiBakery , pi-init2 , या एक कस्टम ext4 छवि का उपयोग करना पसंद करेंगे , जो महान समाधान है। मैं इसे पसंद करता हूं क्योंकि मैं इसे पूरी तरह से समझ सकता हूं और मुझे अन्य सॉफ्टवेयर चलाने की जरूरत नहीं है। और यह भी काम करता है: .img फ़ाइल के साथ मैंने अपनी स्क्रिप्ट्स को अंदर डाला है, सभी एक एसडी कार्ड को चमकाने + इसे एक पाई + में डालने से इसे कॉन्फ़िगर करने के लिए 6 मिनट लगते हैं।
स्रोत मुझे एक स्क्रिप्ट का विचार init=
कर्नेल तर्क के रूप में मिला , और mount
यह काम करने के लिए आवश्यक कमांड्स, init_resize.sh स्क्रिप्ट जो डिफ़ॉल्ट रूप से लिनक्स विभाजन का आकार बदलने के लिए चलती है।