Wydaje się głupie korzystanie z naszych ograniczonych cykli zapisu SD do aktualizacji oprogramowania dostarczonego na obrazach. Czy możemy zaktualizować oprogramowanie i zainstalować nowe oprogramowanie przed flashowaniem obrazu na kartę SD?
Wydaje się głupie korzystanie z naszych ograniczonych cykli zapisu SD do aktualizacji oprogramowania dostarczonego na obrazach. Czy możemy zaktualizować oprogramowanie i zainstalować nowe oprogramowanie przed flashowaniem obrazu na kartę SD?
Odpowiedzi:
Odpowiedź zawsze brzmi „tak”, prawda, tylko trochę czasu, aby dowiedzieć się, jak!
Będę działał na VPS, dostarczonym przez Brightbox.com . Użyłem serwera Nano (2 procesory, 512 MB pamięci RAM, 20 GB miejsca na dysku) i obrazu serwera Ubuntu Precise 12.04 LTS. Powinien działać na ekwiwalentach EC2 lub Linode i oczywiście na domowej maszynie z Linuksem. Przetestowałem to teraz na mojej instalacji (x86) Arch, ale wiem, że nie działa na Ubuntu 10.04 LTS, ponieważ niektóre pakiety są zbyt stare.
Upewnij się, że twój system jest aktualny.
$ sudo apt-get update
$ sudo apt-get upgrade
Zainstaluj trochę nowego oprogramowania
$ sudo apt-get install binfmt-support qemu qemu-user-static unzip
qemujest emulatorem ARM qemu-user-statici binfmt-supportpozwala nam uruchamiać pliki wykonywalne ARM bez emulacji jądra ARM. (Jakie to jest świetne!?!)
Nie mogę znaleźć statycznie powiązanego qemurepozytorium Arch, więc będziemy musieli skompilować ze źródła.
Rozpakuj i uruchom
./configure --disable-kvm --target-list=arm-linux-user --static
Kompilacja za pomocą makei instalacja za pomocą sudo make install.
Uruchom następujące jako 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
Ostrzeżenie Nie należy uruchamiać dowolnych poleceń, które można znaleźć w trybie online, ponieważ
rootzostały one pobrane spodqemu-binfmt-conf.shtypu procesora ARM. Wyodrębnij polecenia z tego pliku i uruchom je.
Wejdź na raspberrypi.org i pobierz żądany obraz. Rozpakuj go i zapisz .imgplik w przydatnym miejscu.
$ 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
.imgBędzie zawierać 3 partycje, w tym partycji rozruchowej.
$ 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
Musimy znać przesunięcie partycji Linux, w tym przypadku są to 157696sektory i partycja rozruchowa, która znajduje się w 2048sektorach. Każdy sektor ma 512 bajtów, więc offset główny to 157696*512=80740352bajty, a offset rozruchowy to 2048*512=1048576.
Następnie musimy zamontować obraz jako system plików. Można to zrobić za pomocą urządzenia loopback. Używamy przesunięcia z poprzedniej sekcji, aby powiedzieć, mountktóre partycje należy zamontować i gdzie. Kolejność tych poleceń jest ważna.
$ 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
Jesteśmy prawie gotowi do chrootwejścia do naszego systemu plików i rozpoczęcia instalacji nowego oprogramowania. Najpierw musimy zainstalować emulator na naszym obrazie, ponieważ nie będzie on dostępny, gdy go użyjemy chroot.
$ sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/
$ sudo cp /usr/local/bin/qemu-arm /mnt/usr/local/bin/
Musimy również zapewnić dostęp do niektórych innych części systemu.
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
Skończyliśmy! chrootz dala...
$ sudo chroot /mnt
Jesteś teraz w swoim Raspberry Pi, ale usługi nie działają itp. Bądź ostrożny, jesteś rootem!
Do aktualizacji oprogramowania używamy apt-get.
# apt-get update
# apt-get upgrade
Możesz także zainstalować oprogramowanie, apt-get installjak zwykle.
Do aktualizacji oprogramowania używamy pacman.
# pacman -Syu
Możesz także zainstalować oprogramowanie, pacman -Sjak zwykle.
UWAGA Możesz uruchomić
pacmannatywnie, postępując zgodnie z instrukcjami w jaki sposób uruchomić mój natywnypacmanna zamontowanym obrazie? .
Możesz wyjść z chrootniego używając Ctrl+ Di odmontować system, uruchamiając sudo umount /mnt- będziesz musiał odmontować każdy punkt montowania osobno.
Powinieneś usunąć qemu-user-staticz /usr/binlub qemu-armz /usr/local/binRPi, wtedy obraz jest gotowy do flashowania.
Jest to trochę długie i żmudne, ale zrób to raz, a dowiesz się, jak to wszystko działa!
Podczas próby uruchomienia wykonaj to na najnowszych obrazach, pojawi się błąd
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)
Aby naprawić ten błąd, po prostu skomentuj zawartość /etc/ld.so.preloadpliku
piimgRozpocząłem pracę nad narzędziem do robienia dużo z tego dla ciebie. Nazywa się piimg i można go znaleźć na stronie github.com/alexchamberlain/piimg .
Do tej pory można zamontować kartę SD, uruchamiając
piimg mount /images/debian-squeeze/debian6-19-04-2012/debian6-19-04-2012.img /mnt
i odmontuj je ponownie, uruchamiając
piimg umount /mnt
Musisz tylko zainstalować qemui chrootodejść.
ZASTRZEŻENIE I, Alex Chamberlain, jestem głównym programistą
piimg. Jako taki, mogę być skłonny do stosowaniapiimgw stosunku do innych metod.
sudo kpartx -av rpi_pisces_mate_r1.img, który pokaże partycje. Użyj największego i zamontuj go, np sudo mount /dev/mapper/loop0p3 /mnt/tmp.
Oto szybki skrypt, który przygotowałem podczas uruchamiania, montuje pierwszą partycję Linux pliku obrazu Użyj na własne ryzyko. Nie ma obsługi błędów / sprawdzania poprawności danych wejściowych
#!/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
Postępowałem zgodnie z instrukcjami, szukając metody, aby po prostu zbudować rzeczy dla PI za pomocą mojego głównego komputera, okazuje się, że było to bardzo łatwe, gdy jesteś chrootowany, możesz potraktować obraz tak, jakby był to system na żywo i użyć wszystkich aplikacje natywne. na pi, więc nie trzeba instalować kompilatora krzyżowego :)
Mam jednak jedno pytanie, podczas konfiguracji chroot musimy zamontować niektóre partycje, aby chroot działał poprawnie:
$ sudo mount --rbind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -o bind /sys /mnt/sys
Jak prawidłowo je odmontować? pozostawiając je zamontowane, co powstrzymuje cię przed odmontowaniem pliku .img, każda pomoc tutaj byłaby mile widziana. Wypróbowałem opcję -f, nie jestem pewien, czy zamontowano coś jeszcze.
odpowiadając na moje pytanie, https://bugzilla.redhat.com/show_bug.cgi?id=194342 druga metoda na końcu postu działała dla mnie z modyfikacją sudo.
cat /proc/mounts | awk '{print $2}' | grep "^$MOUNTPOINT" | sort -r | xargs sudo umount
Oczywiście zmień $ MOUNTPOINT na ścieżkę punktu montowania chroot (druga partycja zawierająca pliki rootfs w pliku obrazu, która jest / mnt w powyższym samouczku). Za pomocą tej metody całkowicie odmontujesz plik img z urządzeń sprzężenia zwrotnego i wszelkich innych urządzeń, które zostały zamontowane za pośrednictwem chroot.
cat /proc/mounts |awk '{print $2}'|grep $CHROOTMOUNT |sort -r|xargs sudo umount
sudo umount $CHROOTMOUNT