मैं बूट पर स्क्रिप्ट कैसे चला सकता हूं?


51

मैं लिनक्स में बूट पर स्क्रिप्ट चलाने का आदी हूं, लेकिन मुझे यकीन नहीं है कि एंड्रॉइड में यह कैसे करना है। मैं अपना SSH डेमॉन शुरू करना चाहता हूं, इसलिए मैं हमेशा कनेक्ट कर पाऊंगा। मैं एंड्रॉइड बूट पर एक मनमाना स्क्रिप्ट कैसे चला सकता हूं? Dalvik के बाहर ऐसा करना बेहतर होगा।

जवाबों:


42

अपने एंड्रॉइड फाइल सिस्टम के आसपास देखने के दौरान, मैंने पाया कि यह किया था, वास्तव में एक /etc/init.d/निर्देशिका है। वहाँ चारों ओर झाँकने के बाद, मैंने /etc/init.d/20userinitनिम्नलिखित पंक्तियों के साथ पाया :

if [ -e /data/local/userinit.sh ];
then 
    log -p -i -t userinit "Executing /data/local/userinit.sh";
    busybux chmod +x /data/local/userinit.sh;
    logwrapper /system/bin/sh /data/local/userinit.sh;
    setprop cm.userinit.active 1;
fi;

यह निश्चित रूप से, वास्तव में मुझे क्या चाहिए, मैंने अपने कंप्यूटर पर निम्न स्क्रिप्ट लिखी, फिर इसे अपने डिवाइस पर धकेल दिया:

#!/system/bin/sh 

dropbear -s -g 

( scp userinit.sh phone:/data/local/userinit.shआप के माध्यम से डिवाइस के लिए धक्का दिया , आप मन:])

डिवाइस को रिबूट किया, फिर भाग गया ps | grep "[d]ropbear", और निश्चित रूप से पर्याप्त है, यह चल रहा है। ठंडक!


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
Firelord

9

/data/init.shबूट पर चलता है, यदि आपके पास रूट है तो आप इसे अपनी इच्छानुसार संपादित कर सकते हैं। सावधान रहे ;)

संपादित करें: जाहिरा तौर पर आपको संपादित स्क्रिप्ट को बूट छवि में बदलने की आवश्यकता हो सकती है। यहाँ कैसे करें के बारे में जानकारी: http://forum.xda-developers.com/showthread.php?t=3653


1
हाँ, मैं इस फाइल को अपने Nexus One पर CM7-RC1 चला नहीं पा रहा हूँ। मैं देखता हूँ कि क्या find / -name "init.sh"कुछ भी बदल जाता है। क्या कोई अन्य स्क्रिप्ट है जो बूट पर चलती है?
नातुल्ली काई

1
आपके पास एक /etc/init.rcशेल होना चाहिए । यह init.sh को कॉल करना चाहिए, लेकिन अगर ऐसा नहीं है तो आप इसे केवल अपनी स्क्रिप्ट कह सकते हैं।
पढ़ें

दुर्भाग्य से, मेरे पास वह स्क्रिप्ट नहीं है, लेकिन मुझे इसका हल नहीं मिला।
Naftuli Kay

3
Android का कौन सा संस्करण है? 4.3 है, /dataलेकिन नहीं /data/init/.shया नहीं /etc/init.rc। Grep initमें /etc(यहां तक ​​कि पुनरावर्ती) स्ट्रिंग का कोई दिलचस्प उदाहरण नहीं मिलता है ।
स्टीफन गौरिचोन

क्या आपके पास कोई विचार है कि AOSP का निर्माण करते समय स्टार्टअप स्क्रिप्ट को कैसे जोड़ा जाए?
सालेह

4

/etc/निर्देशिका को देखो । आमतौर पर इसे /system/विभाजन में रखा जाता है जिसे आप आरडब्ल्यू के रूप में माउंट कर सकते हैं:

$ ls -l /etc
lrwxrwxrwx 1 root root 11 Jan 1  2009 /etc -> /system/etc
$ su
$ mount -o remount,rw /system
$ chmod o+w /system/etc  # for "adb push"

ऊपर दिए गए कुछ चरणों के साथ प्रतिस्थापित किया जा सकता है:

$ adb root
$ adb remount

और बाद में RO

$ chmod o-w /system/etc
$ mount -o remount,ro /system

अब आपका कार्य निष्पादन योग्य या *rcफ़ाइल खोजने का है जिसे आप अपने लक्ष्य को प्राप्त करने के लिए संशोधित करते हैं:

$ find /etc -type f -perm +110
$ find /etc -name "*rc"
$ find /etc -name "init*"
$ grep -R /data /etc
$ grep -R /system /etc

प्रत्येक उम्मीदवार के बारे में Google यह जानने के लिए कि इस फ़ाइल का उपयोग कैसे किया गया था।

कस्टम स्क्रिप्ट को शामिल करने के लिए अच्छे उम्मीदवार निम्नलिखित हैं:

$ grep service /init*.rc

प्रत्येक डिवाइस अद्वितीय के रूप में आपको खोज मापदंड के बारे में खुद अनुमान लगाने की आवश्यकता हो सकती है ...

उदाहरण के लिए मैंने पाया /etc/mkshrcजो कोर्न शेल द्वारा उपयोग किया गया था। मैं PATHenv var को बढ़ाने के लिए इस फाइल को अपडेट करता हूं और अब हर बार जब मैं करता adb shellहूं तो मेरे PATH में बिजीबॉक्स सिमिलिंक होते हैं!

कठिन तरीका भी देखें (यदि आपके पास जादू फ़ाइल खोजने का कोई भाग्य नहीं है ): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc


लेकिन क्या यह हर बूट पर हावी नहीं हो रहा है? मुझे लगता है कि / etc फ़ोल्डर cpio का हिस्सा है जो ramdisk है।
रैनश

1
@ransh इस मामले में कम से कम नहीं है: 8.1.0_r60 कहाँ /systemहै system.img, और /etcएक सिमलिंक है /system
सिरो सेंटिल्ली 新疆 改造 iro 六四

1

मैंने इन सभी तरीकों की कोशिश की और उनमें से किसी ने भी मेरे लिए काम नहीं किया। हालांकि जो काम किया गया था, वह भगवान-राल्फ-एडोल्फ के जवाब पर आधारित था । CM12.1 में बूट पर स्क्रिप्ट कैसे चलाई जाए?

मूल रूप से, फ़ाइल ढूंढें /system/etc/install-recovery.shऔर शुरुआत में निम्नलिखित पंक्ति जोड़ें /data/init.sh &

फिर

touch /data/init.sh
chmod 755 /data/init.sh

किया हुआ! अब आप जो चाहें उसमें डाल सकते हैं /data/init.shऔर यह स्टार्टअप पर चलेगा। यदि फ़ाइल /system/etc/install-recovery.shआपके सिस्टम में नहीं है, तो यह उत्तर आपके लिए काम नहीं करेगा। इसे बनाने की जहमत न करें।


1
वास्तव में, मेरे पास एक ऐसी प्रणाली है जहां /system/etc/install-recovery.shमौजूद नहीं था, लेकिन यह अभी भी बूट पर निष्पादित किया जाता है यदि मौजूद है, तो यह जांच के लायक है।
jcaron

1

एंड्रॉइड 5 से पहले चीजें सरल थीं जब SELinux नहीं था enforcing। आप अपना कोड किसी भी स्क्रिप्ट में रख सकते हैं या बाइनरी को स्क्रिप्ट के साथ बदल सकते हैं जिसे बूट पर रूट विशेषाधिकारों के साथ निष्पादित किया गया था। एक अन्य विधि initविशेष रूप से कुछ निर्देशिका से स्क्रिप्ट निष्पादित करने के लिए एक कस्टम सेवा को परिभाषित करना था ।

इन तरीकों के आधार पर कस्टम रॉम डेवलपर्स अलग पेश किया छद्मinit.d की तरह घटना /etc/init.d/, /etc/install-recovery.sh, /etc/init.qcom.post_boot.sh, /system/bin/debuggerd, /data/init.sh, /data/local/userinit.sh, /data/local/init.d/आदि

हालांकि UID के साथ चलने वाली एक प्रक्रिया 0लेकिन एक प्रतिबंधित SELinux संदर्भ में यह बहुत असहाय है। संदर्भ के init.rcसाथ फ़ाइल में शुरू की गई सेवा शेल स्क्रिप्ट से भी निष्पादित नहीं हो सकती है , इसलिए SELinux नीति को एक अप्रतिबंधित संदर्भ जैसे Magisk को परिभाषित करने के लिए पैच करना होगा । इसके बाद एक स्क्रिप्ट को सीधे सेवा या उसी तरह की निर्देशिका से चलाना संभव है ।u:r:init:s0/system/bin/ u:r:magisk:s0initinit.d

विवरण के लिए देखें कि बूट पर एक निष्पादन योग्य कैसे चलाएं और इसे चालू रखें?


0

सरल तरीका (काम करना):

  1. स्क्रिप्ट में अपनी पोस्ट बूट कमांड तैयार करें, कहें / सिस्टम / xbin / पोस्ट-बूट (सेट निष्पादन की अनुमति)

  2. /System/etc/init.qcom.post_boot.sh के अंत में उपरोक्त कस्टम स्क्रिप्ट पथ जोड़ें

उदाहरण के लिए:

इको / सिस्टम / xbin / पोस्ट-बूट >> / system /etc/init.qcom.post_boot.sh

किया हुआ!

(यदि आपको qcom post_boot (Qualcomm devices) नहीं मिली है, तो किसी भी post_boot स्क्रिप्ट की तलाश करें)


0

यदि आपके पास मैगिस स्थापित है तो आप .sh को यहां रख सकते हैं:

/sbin/.magisk/img/.core/service.d/

या इसमें

/sbin/.magisk/img/.core/post-fs-data.d/

इसे निष्पादन योग्य बनाना न भूलें chmod +x your-script.sh:।

अधिक जानकारी: https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.