Возможно ли обновить, обновить и установить программное обеспечение, прежде чем мигать изображение?

Кажется глупым использовать наши ограниченные циклы записи SD для обновления программного обеспечения, поставляемого на изображениях. Можем ли мы обновить программное обеспечение и установить новое программное обеспечение, прежде чем мигать изображение на SD-карте?

27 голосов | спросил Alex Chamberlain 30 J0000006Europe/Moscow 2012, 14:46:40

3 ответа


31

Да

Ответ всегда да, правильно, просто требуется время, чтобы понять, как это сделать.

Жесткий путь

Я буду запускать это на VPS, предоставленный Brightbox.com . Я использовал Nano Server (2 процессора, 512 МБ оперативной памяти, 20 ГБ дискового пространства) и Ubuntu Precise 12.04 LTS-сервер. Он должен работать на эквивалентах EC2 или Linode и, конечно же, на вашей домашней машине Linux. Я тестировал его на моей (x86) установке Arch, но знаю, что он не работает на 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.

Смонтируйте изображение как устройство замыкания на себя

Затем нам нужно смонтировать образ как файловую систему. Это можно сделать с помощью устройства loopback. Мы используем смещение из предыдущего раздела, чтобы сообщить 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 прочь ...

$ sudo chroot /mnt

Теперь вы находитесь в своем малине Pi, но службы не работают и т. д. Будьте осторожны, вы root!

Обновление /установка программного обеспечения - 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 из /usr/bin или qemu-arm из /usr/local/bin на RPi, тогда изображение будет мигать.

Заключительные слова

Это немного длинный и утомительный, но сделайте это один раз, и вы узнаете, как все это работает!

Примечание о последних изображениях

При попытке запуска сделать это на последних изображениях, вы получите сообщение об ошибке

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. Получение «незаконной инструкции» при попытке chroot

ответил Alex Chamberlain 30 J0000006Europe/Moscow 2012, 14:46:40
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
ответил Art 12 PMpSat, 12 Apr 2014 19:48:37 +040048Saturday 2014, 19:48:37
-2

Я следил за инструкциями, которые ищут способ просто создать материал для PI через мой основной компьютер. Оказывается, это было очень просто, как только вы chrooted, вы можете обрабатывать изображение, как если бы оно было живой системой, и использовать все родные приложения. на 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 (второй раздел, содержащий rootfs в файле изображения, который является /mnt в приведенном выше учебнике). Используя этот метод, вы полностью размонтируете img-файл с устройств loopback и любых других устройств, которые были установлены через chroot.

cat /proc/mounts |awk '{print $2}'|grep $CHROOTMOUNT |sort -r|xargs sudo umount
sudo umount $CHROOTMOUNT
ответил Reggie 26 J000000Thursday12 2012, 18:09:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132