क्या किसी छवि को चमकाने से पहले सॉफ़्टवेयर को अपडेट, अपग्रेड और इंस्टॉल करना संभव है?


28

छवियों पर अपलोड किए गए सॉफ़्टवेयर को अपग्रेड करने के लिए हमारे सीमित एसडी लेखन चक्र का उपयोग करना मूर्खतापूर्ण लगता है। क्या हम किसी छवि को एसडी कार्ड में चमकाने से पहले सॉफ़्टवेयर को अपग्रेड कर सकते हैं और नया सॉफ़्टवेयर स्थापित कर सकते हैं?

जवाबों:


31

हाँ

जवाब हमेशा हां, ठीक है, बस काम करने में थोड़ा समय लगता है कैसे!

कठिन मार्ग

मैं इसे एक 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आर्क रिपॉजिटरी में स्टेटिक रूप से लिंक नहीं मिला है, इसलिए हमें स्रोत से संकलन करना होगा।

  1. नवीनतम रिलीज को http://git.savannah.gnu.org/cgit/qemu.git से डाउनलोड करें
  2. खोलना और चलाना

    ./configure --disable-kvm --target-list=arm-linux-user --static

  3. का उपयोग कर का निर्माण makeऔर का उपयोग कर स्थापित करें sudo make install

  4. निम्न के रूप में चलाएँ 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

Debian / Ubuntu

$ 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

हमारा हो गया! 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अन्य तरीकों के संबंध में उपयोग करने के लिए पक्षपाती हो सकता हूं ।

संदर्भ

  1. अपने डेस्कटॉप पीसी पर एआरएम लिनक्स चलाना: विदेशी चुरोट तरीका है

  2. चुरोट की कोशिश करते समय 'अवैध निर्देश' प्राप्त करना


तो क्या वास्तव में किसी ने इसका परीक्षण किया है?
फाइनव

@finnw मुझे लगता है कि Jivings ने अब इसका परीक्षण कर लिया है।
एलेक्स चैम्बरलेन

1
आप उपयोग भी कर सकते हैं sudo kpartx -av rpi_pisces_mate_r1.img, जो विभाजन दिखाएगा। सबसे बड़े एक का उपयोग करें और इसे माउंट करें, जैसे sudo mount /dev/mapper/loop0p3 /mnt/tmp
इलीमैखाना

@AlexChamberlain: क्या आपने वास्तव में ब्राइटबॉक्स सर्वर पर यह काम किया है? मैंने अपने होम पीसी पर इसका सफलतापूर्वक परीक्षण किया है, लेकिन जब मैंने इसे ब्राइटबॉक्स पर आज़माया तो मैं चट कर नहीं सका और मैं चाहता था कि अगर ऐसा था तो वर्चुअलाइज़ेशन के शीर्ष पर वर्चुअलाइज़ेशन लाने की कोशिश कर रहा था। बेशक मैंने भी कुछ गलत किया हो, लेकिन मुझे लगा कि पूरी तरह से हार मानने से पहले यह प्रश्न करना लायक है! एक उत्कृष्ट ट्यूटोरियल के लिए धन्यवाद।
DrAl

क्या नोब्स डिस्ट्रो को चेरोट करना शामिल करने के लिए इसे अपडेट करना संभव है? बस इस तरह के डिस्ट्रो में
चुरोट

0

यहाँ एक त्वरित स्क्रिप्ट जो मैंने एक साथ रखी थी क्योंकि मैं इसे रोल कर रहा था एक छवि फ़ाइल के पहले लिनक्स विभाजन का उपयोग करता है अपने जोखिम पर उपयोग करें। इसमें कोई त्रुटि हैंडलिंग / इनपुट सत्यापन नहीं है

#!/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

दुर्भाग्य से, चित्र सभी एआरएम आधारित हैं, आप वास्तव में उन पर कुछ भी निष्पादित नहीं कर सकते हैं। उन्हें अपडेट किया जाना थोड़ा पेचीदा है ... हो सकता है कि आपका होस्ट सिस्टम यद्यपि उपयुक्त हो।
फ्रेड

-2

मैंने अपने मुख्य पीसी के माध्यम से पीआई के लिए सामान बनाने के लिए एक विधि की तलाश करने वाले निर्देशों का पालन किया, यह पता चला कि यह बहुत आसान था, एक बार जब आप को काट दिया जाता है तो आप छवि का इलाज कर सकते हैं जैसे कि यह एक जीवित प्रणाली थी और सभी का उपयोग करें देशी ऐप्स। ते पी पर, तो एक क्रॉस कंपाइलर स्थापित करने की कोई आवश्यकता नहीं है :)

मेरे पास एक सवाल है, हालांकि चेरोट की स्थापना के दौरान, हमें चेरोट के ठीक से काम करने के लिए कुछ विभाजन माउंट करने होंगे:

$ 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

मुझे यकीन नहीं है कि यह वास्तव में सवाल का जवाब देता है। आप यह वर्णन नहीं करते हैं कि आप छवि में कैसे घूम रहे हैं, या आप इसमें सॉफ़्टवेयर कैसे स्थापित कर रहे हैं। साथ ही यह नए सवाल पूछने की जगह नहीं है।
Jivings

मैं उसी विधि का उपयोग कर रहा हूं जो मूल हां के उत्तर के लिए है जो ओपी ने अपने प्रश्न के लिए बनाई थी। जैसा कि मेरे पास एक मुद्दा था, छवि को बेपर्दा करने का, यह वास्तव में उस प्रश्न और मेरे स्वयं के अंतिम उत्तर के लिए सबसे अच्छी जगह है।
Reggie
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.