Bir görüntüyü yanıp sönmeden önce yazılımı güncellemek, yükseltmek ve yüklemek mümkün mü?


28

Resimlerdeki yazılımı yükseltmek için sınırlı SD yazma çevrimlerimizi kullanmak aptalca görünüyor. Bir görüntüyü SD karta flaşlamadan önce yazılımı güncelleyebilir ve yeni yazılım yükleyebilir miyiz?

Yanıtlar:


31

Evet

Cevap her zaman evet, doğru, nasıl yapılacağını öğrenmek biraz zaman alır!

Zor yol

Bunu Brightbox.com tarafından sağlanan bir VPS'de çalıştıracağım . Bir Nano Sunucu (2 CPU, 512 MB RAM, 20 GB disk alanı) ve Ubuntu Precise 12.04 LTS sunucu görüntüsü kullandım. EC2 veya Linode'nin eşdeğerleri üzerinde ve tabii ki evinizde Linux makinasında çalışmalıdır. Şimdi (x86) Arch kurulumumda test ettim, ancak Ubuntu 10.04 LTS'de çalışmadığını biliyorum çünkü bazı paketler çok eski.

Sisteminizi hazırlama - Debian / Ubuntu

Kendi sisteminizin güncel olduğundan emin olun.

$ sudo apt-get update
$ sudo apt-get upgrade

Bazı yeni yazılımlar yükleyin

$ sudo apt-get install binfmt-support qemu qemu-user-static unzip

qemuARM emülatör olduğunu ve qemu-user-staticve binfmt-supportARM çekirdeği taklit etmeden ARM yürütülebilir olanağı sunar. (Ne kadar serin!?!)

Sisteminizi hazırlama - Arch

qemuArch depolarında statik olarak bağlanmış bir bağlantı bulamıyorum , bu yüzden kaynaktan derlemek zorunda kalacağız.

  1. Http://git.savannah.gnu.org/cgit/qemu.git adresinden en son sürümü indirin
  2. Sıkıştır ve çalıştır

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

  3. Kullanarak oluştur makeve kullanarak kur sudo make install.

  4. Aşağıdakileri çalıştırın 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

Uyarı Çevrimiçi bulduğunuz rastgele komutları çalıştırmamalısınız root- bunlar qemu-binfmt-conf.shARM cpu türünün altından alınmıştır . Lütfen komutları bu dosyadan çıkartın ve çalıştırın.

Resmi indirin ve açın

Raspberrypi.org adresine gidin ve istediğiniz resmi indirin. Çıkarın ve .imgdosyayı yararlı bir yere kaydedin .

$ 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

Doğru bölümü bulun

.imgÖnyükleme bölümüne dahil 3 bölümleri içerecektir.

$ 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

Linux bölümünün ofsetini bilmemiz gerekir, bu durumda 157696sektörler ve sektörlerdeki boot bölümü 2048. Her sektör 512 bayttır, bu nedenle kök ofseti 157696*512=80740352bayt ve önyükleme ofsetidir 2048*512=1048576.

Görüntüyü geridöngü aygıtı olarak monte edin

Daha sonra, görüntüyü bir dosya sistemi olarak monte etmemiz gerekiyor. Bu bir geridöngü aygıtı kullanılarak yapılabilir. mountHangi bölümlerin monte edileceğini ve nereye bağlandığını söylemek için önceki bölümdeki ofseti kullanıyoruz . Bu komutların sırası önemlidir.

$ 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

Dosya sistemini hazırlama

Neredeyse chrootdosya sistemimize girmeye ve yeni yazılım yüklemeye başlamaya hazırız . İlk olarak, öykünücüyü resmimize yüklemeliyiz, çünkü kullandığımız zaman kullanılamaz chroot.

Debian / Ubuntu

$ sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/

Arch Linux

$ sudo cp /usr/local/bin/qemu-arm /mnt/usr/local/bin/

Tüm ana bilgisayar sistemleri

Ayrıca sistemin diğer bazı kısımlarına erişim sağlamamız gerekiyor.

$ sudo mount --rbind /dev     /mnt/dev
$ sudo mount -t proc none     /mnt/proc
$ sudo mount -o bind /sys     /mnt/sys

chroot

İşimiz bitti! chrootuzakta...

$ sudo chroot /mnt

Artık Raspberry Pi'nizdesiniz, ancak servisler çalışmıyor. Dikkatli olun, köklisiniz!

Yazılım Güncelleme / Yükleme - Debian Image

Yazılımı güncellemek için kullanıyoruz apt-get.

 # apt-get update
 # apt-get upgrade

apt-get installHer zamanki gibi yazılım kullanarak da yükleyebilirsiniz .

Yazılım Güncelleme / Yükleme - Arch Image

Yazılımı güncellemek için kullanıyoruz pacman.

 # pacman -Syu

pacman -SHer zamanki gibi yazılım kullanarak da yükleyebilirsiniz .

NOT Kaçabilirsiniz pacmantalimatları uygulayarak doğal ben benim yerli nasıl çalıştırabilirim pacmanbir görüntü monte karşı? .

çıkma

+ Tuşlarını chrootkullanarak sistemden çıkabilirsiniz ve sistemi çalıştırarak sistemden ayırmayı yapabilirsiniz - her bir montaj noktasını ayrı olarak çıkarmanız gerekir.CtrlDsudo umount /mnt

Sen kaldırmalısınız qemu-user-staticgelen /usr/binveya qemu-armgelen /usr/local/binRPI'nin ardından görüntü parladı hazırdır.

Son sözler

Bu biraz uzun ve sıkıcı, ama bir kez yapın ve tüm bunların nasıl çalıştığı hakkında çok şey öğreneceksiniz!

En son görüntüler hakkında not

Son görüntülerde bunu yapmaya çalışırken, bir hata alırsınız

qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)

Bu hatayı düzeltmek için /etc/ld.so.preloaddosyanın içeriğini yorumlamanız yeterli

Kolay yol - piimg

Sizin için çok şey yapmak için bir yardımcı program üzerinde çalışmaya başladım. Piimg olarak adlandırılır ve github.com/alexchamberlain/piimg adresinde bulunabilir .

Şimdiye kadar, çalıştırarak SD kartı sizin için monte edebilir

piimg mount /images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img /mnt

ve çalıştırarak onları tekrar çıkarın

piimg umount /mnt

Sadece yüklemeniz qemuve chrootuzaklaştırmanız gerekir .

YASAL UYARI I, Alex Chamberlain, baş geliştiricisiyim piimg. Bu nedenle, piimgdiğer yöntemlerle ilişkili olarak kullanımına karşı taraflı olabilirim .

Referanslar

  1. ARM Linux'u masaüstü bilgisayarınızda çalıştırma: Yabancı chroot yolu

  2. Chroot yapmaya çalışırken 'yasadışı talimat' almak


Peki, biri bunu gerçekten sınadı mı?
finnw

@finnw Ben Jivings şimdi bunu test ettiğini düşünüyorum.
Alex Chamberlain

1
Ayrıca sudo kpartx -av rpi_pisces_mate_r1.imgbölümleri gösterecek olan kullanabilirsiniz . En büyüğünü kullanın ve bağlayın, örneğin sudo mount /dev/mapper/loop0p3 /mnt/tmp.
elmicha

@AlexChamberlain: Bunu Brightbox sunucusunda işe aldınız mı? Bunu ev bilgisayarımda başarılı bir şekilde test ettim, ancak Brightbox'ta denediğimde, chroot yapamadım ve bunun sanallaştırmanın üzerine etkili bir şekilde sanallaştırma sağlamaya çalışıyor olmasından kaynaklanmasını istedim. Elbette yanlış bir şey de yapmış olabilirim, ama tamamen pes etmeden önce araştırmaya değer olduğunu düşündüm! Mükemmel bir eğitim için teşekkürler.
DrAl

Bu, Noobs Distro'yu nasıl chrootlaştıracağını da içerecek şekilde güncellemek mümkün mü? Sadece böyle bir dağıtıma nasıl girileceğini öğrenme adına
Suhaib

0

Burada yuvarlarken bir araya getirdiğim hızlı bir komut dosyası, bir görüntü dosyasının ilk Linux bölümünü kullanır. Kendi sorumluluğunuzdadır kullanın. Hata işleme / giriş doğrulaması yok

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

Maalesef, görüntülerin tümü ARM tabanlı olduğu için, üzerlerinde hiçbir şey doğrudan çalıştıramazsınız. Onları güncellemek biraz kandırıcıdır ... Eğer ana bilgisayar sisteminiz uygun olsa bile mümkün olabilir.
Fred

-2

Ana bilgisayarım üzerinden PI için bir şeyler inşa etmek için bir yöntem arayan talimatları izledim, çok kolay oldu, chrooted olduğunuzda görüntüyü canlı bir sistemmiş gibi ele alabilir ve hepsini kullanabilirsiniz. yerel uygulamalar. Bu nedenle, bir çapraz derleyici yüklemenize gerek yok :)

Bununla birlikte, chroot'un kurulumu sırasında chroot'un düzgün çalışması için bazı bölümleri monte etmemiz gerekir:

$ sudo mount --rbind /dev     /mnt/dev
$ sudo mount -t proc none     /mnt/proc
$ sudo mount -o bind /sys     /mnt/sys

Bunları nasıl doğru şekilde çıkarabiliriz? Onları monte ederek bırakarak, .img dosyasını çıkarmanızı önler, buradaki herhangi bir yardım size yardımcı olacaktır. -F seçeneğini denedim, monte edilmiş altta bir şey olup olmadığından emin değilim.

kendi soruma cevap vererek, https://bugzilla.redhat.com/show_bug.cgi?id=194342 Yazının sonundaki 2. yöntem benim için bir sudo değişikliği ile çalıştı.

cat /proc/mounts | awk '{print $2}' | grep "^$MOUNTPOINT" | sort -r | xargs sudo umount

Açıkçası, $ MOUNTPOINT'i, chroot bağlama noktanızın yoluna değiştirin (yukarıdaki dosyada / mnt olan resim dosyasındaki kökleri içeren 2. bölüm). Bu yöntemi kullanarak, img dosyasını geri döngü aygıtlarından ve chroot yoluyla monte edilen diğer aygıtlardan tamamen çıkarırsınız.

cat /proc/mounts |awk '{print $2}'|grep $CHROOTMOUNT |sort -r|xargs sudo umount
sudo umount $CHROOTMOUNT

Bunun soruyu gerçekten cevapladığından emin değilim. Görüntüye nasıl girdiğinizi ya da yazılımı nasıl yüklediğinizi tanımlamıyorsunuz. Ayrıca burası yeni sorular sorma yeri değil.
Jivings,

OP'nin sorusuna verdiği asıl evet cevabıyla aynı yöntemi kullanıyorum. Görüntüyü unmounting bir sorun vardı, bu gerçekten bu soru ve kendi nihai cevabım için en iyi yer.
Reggie,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.