छवियों पर अपलोड किए गए सॉफ़्टवेयर को अपग्रेड करने के लिए हमारे सीमित एसडी लेखन चक्र का उपयोग करना मूर्खतापूर्ण लगता है। क्या हम किसी छवि को एसडी कार्ड में चमकाने से पहले सॉफ़्टवेयर को अपग्रेड कर सकते हैं और नया सॉफ़्टवेयर स्थापित कर सकते हैं?
छवियों पर अपलोड किए गए सॉफ़्टवेयर को अपग्रेड करने के लिए हमारे सीमित एसडी लेखन चक्र का उपयोग करना मूर्खतापूर्ण लगता है। क्या हम किसी छवि को एसडी कार्ड में चमकाने से पहले सॉफ़्टवेयर को अपग्रेड कर सकते हैं और नया सॉफ़्टवेयर स्थापित कर सकते हैं?
जवाबों:
जवाब हमेशा हां, ठीक है, बस काम करने में थोड़ा समय लगता है कैसे!
मैं इसे एक VPS पर चला रहा हूं, जो Brightbox.com द्वारा प्रदान किया गया है । मैंने एक नैनो सर्वर (2 सीपीयू, 512 एमबी रैम, 20 जीबी डिस्क स्पेस) और एक उबंटू सटीक 12.04 एलटीएस सर्वर छवि का उपयोग किया। यह EC2 या लिनोइड के समतुल्य और निश्चित रूप से आपके घर लिनक्स मशीन पर काम करना चाहिए। मैंने अब इसे अपने (x86) आर्क इंस्टॉलेशन पर टेस्ट कर लिया है, लेकिन यह जान लीजिए कि यह Ubuntu 10.04 LTS पर काम नहीं करता है क्योंकि कुछ पैकेज बहुत पुराने हैं।
सुनिश्चित करें कि आपका स्वयं का सिस्टम अद्यतित है।
$ sudo apt-get update
$ sudo apt-get upgrade
कुछ नए सॉफ़्टवेयर स्थापित करें
$ sudo apt-get install binfmt-support qemu qemu-user-static unzip
qemu
एक हाथ एमुलेटर है, और qemu-user-static
और binfmt-support
एआरएम गिरी नकल के बिना एआरएम निष्पादनयोग्य चलाने के लिए अनुमति देता है। (कितना मजेदार था वो!?!)
मुझे qemu
आर्क रिपॉजिटरी में स्टेटिक रूप से लिंक नहीं मिला है, इसलिए हमें स्रोत से संकलन करना होगा।
खोलना और चलाना
./configure --disable-kvm --target-list=arm-linux-user --static
का उपयोग कर का निर्माण make
और का उपयोग कर स्थापित करें sudo make install
।
निम्न के रूप में चलाएँ root
echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-arm:' > /proc/sys/fs/binfmt_misc/register
echo ':armeb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/local/bin/qemu-armeb:' > /proc/sys/fs/binfmt_misc/register
चेतावनी आपको मनमाने आदेश नहीं चलाने चाहिए जो आपको ऑनलाइन मिलते हैं
root
- इन्हेंqemu-binfmt-conf.sh
एआरएम सीपीयू प्रकार के तहत लिया गया था । कृपया इस फ़ाइल से कमांड निकालें और उन को चलाएँ।
Raspberrypi.org पर जाएं और अपनी इच्छित छवि डाउनलोड करें। इसे अनज़िप करें और .img
फ़ाइल को कहीं उपयोगी सहेजें ।
$ sudo mkdir -p /images/debian-squeeze
$ sudo wget "http://files.velocix.com/c1410/images/debian/6/debian6-19-04-2012/debian6-19-04-2012.zip" -O "/images/debian-squeeze.zip"
$ sudo unzip "/images/debian-squeeze.zip" -d /images/debian-squeeze
$ sudo rm /images/debian-squeeze.zip
.img
बूट विभाजन सहित 3 विभाजन, शामिल होंगे।
$ cd /images/debian-squeeze/debian6-19-04-2012/
$ fdisk -lu debian6-19-04-2012.img
Disk debian6-19-04-2012.img: 1949 MB, 1949999616 bytes
4 heads, 32 sectors/track, 29754 cylinders, total 3808593 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ee283
Device Boot Start End Blocks Id System
debian6-19-04-2012.img1 2048 155647 76800 c W95 FAT32 (LBA)
debian6-19-04-2012.img2 157696 3414015 1628160 83 Linux
debian6-19-04-2012.img3 3416064 3807231 195584 82 Linux swap / Solaris
हमें लिनक्स विभाजन के ऑफसेट को जानने की जरूरत है, इस मामले में यह 157696
सेक्टर है, और बूट विभाजन, जो कि 2048
सेक्टरों में है। प्रत्येक सेक्टर 512 बाइट्स है, इसलिए रूट ऑफ़सेट 157696*512=80740352
बाइट्स है और बूट ऑफ़सेट है 2048*512=1048576
।
अगला, हमें फ़ाइल सिस्टम के रूप में छवि को माउंट करने की आवश्यकता है। यह एक लूपबैक डिवाइस का उपयोग करके किया जा सकता है। हम पिछले भाग से ऑफसेट का उपयोग यह बताने के लिए करते हैं कि mount
कौन से विभाजन को माउंट करना है और कहां। इन आदेशों का क्रम महत्वपूर्ण है।
$ sudo mount -o loop,offset=80740352 "/images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img" /mnt
$ sudo mount -o loop,offset=1048576 "/images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img" /mnt/boot
हम chroot
अपनी फ़ाइल प्रणाली में लगभग तैयार हैं और नए सॉफ़्टवेयर स्थापित करना शुरू कर रहे हैं । सबसे पहले, हमें एमुलेटर को अपनी छवि में स्थापित करना चाहिए, क्योंकि यह एक बार उपयोग करने के बाद उपलब्ध नहीं होगा chroot
।
$ sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/
$ sudo cp /usr/local/bin/qemu-arm /mnt/usr/local/bin/
हमें सिस्टम के कुछ अन्य हिस्सों तक पहुंच प्रदान करने की भी आवश्यकता है।
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
हमारा हो गया! chroot
दूर ...
$ sudo chroot /mnt
अब आप अपने रास्पबेरी पाई में हैं, लेकिन सेवाएं नहीं चल रही हैं आदि सावधान रहें, आप जड़ हैं!
सॉफ़्टवेयर को अपडेट करने के लिए, हम उपयोग करते हैं apt-get
।
# apt-get update
# apt-get upgrade
आप apt-get install
हमेशा की तरह सॉफ्टवेयर का उपयोग करके भी इंस्टॉल कर सकते हैं ।
सॉफ़्टवेयर को अपडेट करने के लिए, हम उपयोग करते हैं pacman
।
# pacman -Syu
आप pacman -S
हमेशा की तरह सॉफ्टवेयर का उपयोग करके भी इंस्टॉल कर सकते हैं ।
नोट आप चला सकते हैं
pacman
पर निर्देशों का पालन करके देशी रूप मैं अपने देशी चला सकता हूँpacman
के खिलाफ एक छवि घुड़सवार? ।
आप + chroot
का उपयोग करके बाहर निकल सकते हैं और दौड़कर सिस्टम को अनमाउंट कर सकते हैं - आपको प्रत्येक माउंट पॉइंट को अलग से अनमाउंट करना होगा ..CtrlDsudo umount /mnt
आप निकाल देना चाहिए qemu-user-static
से /usr/bin
या qemu-arm
से /usr/local/bin
आरपीआई पर है, तो छवि फ्लैश होने के लिए तैयार है।
यह थोड़ा लंबा और थकाऊ है, लेकिन इसे एक बार करें और आप यह सीखेंगे कि यह सब कैसे काम करता है!
नवीनतम चित्रों पर ऐसा करने का प्रयास करते समय, आपको एक त्रुटि मिलेगी
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)
इस त्रुटि को ठीक करने के लिए, बस /etc/ld.so.preload
फ़ाइल की सामग्री पर टिप्पणी करें
piimg
मैंने आपके लिए बहुत कुछ करने के लिए एक उपयोगिता पर काम शुरू किया है। इसे पिमग कहा जाता है और इसे github.com/alexchamberlain/piimg पर पाया जा सकता है ।
अब तक, यह आपके द्वारा चलाए जा रहे एसडी कार्ड को माउंट कर सकता है
piimg mount /images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img /mnt
और उन्हें फिर से चलाकर अनमाउंट करें
piimg umount /mnt
आपको बस स्थापित करने qemu
और chroot
दूर करने की आवश्यकता है।
DISCLAIMER I, एलेक्स चेम्बरलेन, के प्रमुख डेवलपर हैं
piimg
। जैसे, मैंpiimg
अन्य तरीकों के संबंध में उपयोग करने के लिए पक्षपाती हो सकता हूं ।
sudo kpartx -av rpi_pisces_mate_r1.img
, जो विभाजन दिखाएगा। सबसे बड़े एक का उपयोग करें और इसे माउंट करें, जैसे sudo mount /dev/mapper/loop0p3 /mnt/tmp
।
यहाँ एक त्वरित स्क्रिप्ट जो मैंने एक साथ रखी थी क्योंकि मैं इसे रोल कर रहा था एक छवि फ़ाइल के पहले लिनक्स विभाजन का उपयोग करता है अपने जोखिम पर उपयोग करें। इसमें कोई त्रुटि हैंडलिंग / इनपुट सत्यापन नहीं है
#!/bin/bash
# This script is designed to mount
# the first Linux filesystem
# in the partition table of the
# image handed to it
USAGE="$0 <image name> <mount point>"
IMAGE=$1
MOUNTPT=$2
OFFSET=`fdisk -lu $IMAGE | grep -m 1 Linux$ | awk '{ print $2 *512 }'`
echo "Executing as $USER: mount -o loop,offset=$OFFSET $IMAGE $MOUNTPT"
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPT
मैंने अपने मुख्य पीसी के माध्यम से पीआई के लिए सामान बनाने के लिए एक विधि की तलाश करने वाले निर्देशों का पालन किया, यह पता चला कि यह बहुत आसान था, एक बार जब आप को काट दिया जाता है तो आप छवि का इलाज कर सकते हैं जैसे कि यह एक जीवित प्रणाली थी और सभी का उपयोग करें देशी ऐप्स। ते पी पर, तो एक क्रॉस कंपाइलर स्थापित करने की कोई आवश्यकता नहीं है :)
मेरे पास एक सवाल है, हालांकि चेरोट की स्थापना के दौरान, हमें चेरोट के ठीक से काम करने के लिए कुछ विभाजन माउंट करने होंगे:
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
हम इनको कैसे ठीक से इस्तेमाल करते हैं? उन्हें घुड़सवार छोड़ दिया, जो आपको .img फ़ाइल को अनमाउंट करने से रोकता है, यहाँ किसी भी मदद की सराहना की जाएगी। मैंने -f विकल्प की कोशिश की, निश्चित नहीं है कि अंतर्निहित कुछ और है जो घुड़सवार है।
मेरे अपने प्रश्न का उत्तर देते हुए, https://bugzilla.redhat.com/show_bug.cgi?id=194342 पोस्ट के अंत में दूसरी विधि ने मेरे लिए एक सुडौल संशोधन के साथ काम किया।
cat /proc/mounts | awk '{print $2}' | grep "^$MOUNTPOINT" | sort -r | xargs sudo umount
स्पष्ट रूप से $ $ MOUNTPOINT को अपने चिरोट माउंट बिंदु के पथ में बदलें (छवि विभाजन पर रूटफ़्स युक्त 2 विभाजन, जो उपरोक्त ट्यूटोरियल में / mnt है)। इस पद्धति का उपयोग करके आप पूरी तरह से लूपबैक उपकरणों और किसी भी अन्य उपकरणों से आईएमजी फ़ाइल को अनमाउंट कर सकते हैं जो चेरोट के माध्यम से माउंट किए गए थे।
cat /proc/mounts |awk '{print $2}'|grep $CHROOTMOUNT |sort -r|xargs sudo umount
sudo umount $CHROOTMOUNT