Чи можливо оновити, оновити та встановити програмне забезпечення перед спалахом зображення?


28

Дуже глупо використовувати наші обмежені цикли запису на SD для оновлення програмного забезпечення, що постачається на зображеннях. Чи можемо ми оновити програмне забезпечення та встановити нове програмне забезпечення перед тим, як мигнути зображення на SD-карту?

Відповіді:


31

Так

Відповідь завжди так, правда, просто потрібно трохи часу, щоб розробити як!

Важкий шлях

Я запускаю це на VPS, наданому Brightbox.com . Я використовував сервер Nano (2 процесора, 512 Мб оперативної пам’яті, 20 ГБ місця на диску) та зображення сервера Ubuntu Precision 12,04 LTS. Він повинен працювати на еквівалентах EC2 або Linode і, звичайно, на вашому домашньому апараті Linux. Зараз я протестував це на моїй (x86) арковій установці, але знайте, що вона не працює на Ubuntu 10.04 LTS, оскільки деякі пакети занадто давні.

Підготовка вашої системи - Debian / Ubuntu

Переконайтесь, що ваша власна система оновлена.

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

Встановіть нове програмне забезпечення

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

qemuє емулятором ARM qemu-user-staticі binfmt-supportдозволяє нам запускати виконувані файли ARM без емуляції ядра ARM. (Як це круто!?!)

Підготовка вашої системи - Arch

Я не можу знайти статично пов'язані qemuв сховищах Arch, тому нам доведеться компілювати з джерела.

  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під типом процесора ARM. Витягніть команди з цього файлу та запустіть їх.

Завантажте та розпакуйте зображення

Перейдіть на 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

Нам потрібно знати зміщення розділу Linux, в даному випадку це 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/

Arch Linux

$ 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

Ви зараз у своєму Raspberry Pi, але послуги не працюють тощо. Будьте обережні, ви корінь!

Оновлення / встановлення програмного забезпечення - Debian Image

Для оновлення програмного забезпечення ми використовуємо apt-get.

 # apt-get update
 # apt-get upgrade

Ви також можете встановити програмне забезпечення, apt-get installяк зазвичай.

Оновлення / встановлення програмного забезпечення - Arch Image

Для оновлення програмного забезпечення ми використовуємо pacman.

 # pacman -Syu

Ви також можете встановити програмне забезпечення, pacman -Sяк зазвичай.

ПРИМІТКА Ви можете запускати pacmanнативні пристрої, дотримуючись вказівок у розділі Як запустити рідне pacmanзображення на змонтованому зображенні? .

Вихід

Ви можете вийти з програми chrootза допомогою Ctrl+ Dта відключити систему, запустивши sudo umount /mnt- вам доведеться демонтувати кожну точку монтажу окремо.

Ви повинні видалити qemu-user-staticз RPi /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

Я почав працювати над утилітою, щоб зробити багато цього для вас. Він називається piimg і його можна знайти на сайті github.com/alexchamberlain/piimg .

Поки він може змонтувати SD-карту для вас, запустивши

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

і знову від'єднати їх, запустивши

piimg umount /mnt

Вам просто потрібно встановити qemuі chrootвідібрати.

ВІДХОДЖЕННЯ Я, Алекс Чемберлен, провідний розробник компанії piimg. Як такий, я можу бути упередженим щодо використання piimgщодо інших методів.

Список літератури

  1. Запуск ARM Linux на настільному ПК: іноземний спосіб chroot

  2. Отримання «незаконної інструкції» при спробі хронізувати


Так хтось насправді це перевіряв?
finnw

@finnw Я думаю, що Jivings зараз це перевірив.
Алекс Чемберлен

1
Ви також можете використовувати sudo kpartx -av rpi_pisces_mate_r1.img, що покаже розділи. Використовуйте найбільшу і монтуйте її, наприклад sudo mount /dev/mapper/loop0p3 /mnt/tmp.
elmicha

@AlexChamberlain: чи справді ви працювали на сервері Brightbox? Я успішно протестував це на своєму домашньому ПК, але коли я спробував це на Brightbox, я не міг хротуватися, і мені хотілося, що це через намагання ефективно отримати віртуалізацію поверх віртуалізації. Звичайно, я міг би зробити щось не так, але я подумав, що варто запитати, перш ніж повністю відмовитись! Дякую за відмінний підручник.
DrAl

Чи можна оновити це, щоб включити, як хронувати Noobs Distro? Тільки заради того, щоб
навчитися крокувати

0

Ось такий швидкий сценарій, який я склав під час прокатки, монтує перший розділ Linux у файлі зображень. Використовуйте на свій страх і ризик. У ньому немає помилок при обробці / підтвердженні вводу

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

На жаль, оскільки всі зображення базуються на ARM, ви нічого не можете виконати безпосередньо на них. Оновлення їх трохи хитріше ... Можливо, якщо ваша хост-система влучна.
Фред

-2

Я дотримувався вказівок, шукаючи метод просто побудувати речі для ІП через свій основний ПК, виявляється, це було дуже просто, як тільки ви потрапили на хронологію, ви можете ставитися до зображення, як якщо б це була жива система, і використовувати все рідні програми. на цих pi, тому не потрібно встановлювати крос-компілятор :)

У мене є одне питання, хоча під час налаштування chroot ми повинні змонтувати деякі розділи, щоб chroot працював належним чином:

$ 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 другий метод в кінці публікації працював для мене з модифікацією sudo.

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

Очевидно, змініть $ MOUNTPOINT на шлях точки монтажу chroot (2-й розділ, що містить корені в файлі зображення, який є / mnt у вищевказаному підручнику). За допомогою цього методу ви повністю відключите файл img з пристроїв петлі та будь-яких інших пристроїв, встановлених через chroot.

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

Я не впевнений, що це дійсно відповідає на питання. Ви не описуєте, як ви хронізуєте зображення чи як встановлюєте в нього програмне забезпечення. Крім того, це не місце, щоб задавати нові запитання.
Відхилення

Я використовую той самий метод, що і оригінальний відповідь "так", що ОП зробив на його запитання. Оскільки у мене виникла проблема з демонтажем зображення, це справді найкраще місце для цього питання та моєї власної можливої ​​відповіді.
Реджі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.