Создание заранее подготовленного образа SD-карты

19

Для проекта, над которым я работаю, я хотел бы создать «стандартный» образ на основе Raspbian, который я могу установить на многих Pis.

В идеале я хотел бы иметь возможность (на моем компьютере) взять образ Raspbian, apt-get некоторые пакеты, отредактировать некоторую конфигурацию, а затем создать и образ SD-карты из этого, чтобы поместить его в мой Pis.

Есть простой или рекомендуемый способ сделать это? С какими подводными камнями я могу столкнуться?

Я стараюсь избегать ручного управления пи и последующего клонирования этого изображения. Предположительно, Raspbian сделан каким-то образом, а не кто-то, кто нажимает кнопки на Pi вручную. Я бы хотел сделать это так, если смогу.

В идеале я хочу создать что-то, что может быть автоматически построено на сервере непрерывной интеграции - я не хочу, чтобы процесс сборки включал «запись SD-карты, поместите ее в Pi», потому что я хочу быть элем, чтобы создавать изображения без каких-либо физический доступ к Raspberry Pi.

Энди Смит
источник
3
Может пригодиться: как мне смонтировать образ дистрибутива Raspberry Pi Linux? - обратите внимание на выделенную строку в принятом ответе: «Если вы что-то измените, эти изменения будут включены в файл .img». К сожалению, это не дает возможности подать заявку apt-get; самый простой способ сделать это - использовать виртуальную машину rsyncс подключенным образом, идентичным тому, который использовался для запуска виртуальной машины (поскольку сами образы виртуальной машины не годятся для этого), но я думаю, что единственный вариант виртуальной машины здесь - это QEMU, который AFAICT - это ПИТА.
Златовласка
Другим подходом будет сетевая загрузка.
lexu
Win32DiskImager имеет функцию чтения, вы пробовали это?
Конг Чон Хо

Ответы:

6

Фонд Raspberry Pi использует набор bash-скриптов, автоматизирующих QEMU для генерации их изображений. Вы все равно должны взглянуть на buildroot "отраслевые стандарты" и Yocto.

https://github.com/RPi-Distro/pi-gen

http://cellux.github.io/articles/diy-linux-with-buildroot-part-1/

flakeshake
источник
Если ОП хочет создать образ выпуска отраслевого стандарта ... да, это путь, но это огромная кривая обучения, и я не желаю, чтобы увлекался этим путем.
Петр Кула
1
Это звучит как то, что я ищу! Есть ли какие-либо руководства по использованию этого? build.sh, похоже, предполагает набор переменных окружения.
Энди Смит
Скорее всего, под номером 4 в TODO ;) Не тронули несколько месяцев, поэтому либо вовлеченные люди заняты другими делами, либо потеряли к ним интерес.
Златовласка
@goldilocks, так это не то, откуда взялась базовая расбианская картинка?
Энди Смит
3
Я буду честен и скажу, что у меня сложилось впечатление, что вы преследуете сторону Y проблемы XY со слишком большой энергией - это подразумевает, что вы думаете о более простом методе (просто установите изображение на пи, что можно сделать из компьютер через удаленный вход в систему, а само изображение настраивается путем монтирования, что может быть выполнено на ПК, и все это может быть автоматизировано с помощью сценариев) - это слишком много хлопот, и поэтому вы возлагаете большие надежды на метод, который на самом деле очень больше хлопот .
Златовласка
5

Мой проект Nard SDK обладает многими функциями, которые вы хотите. Это не Raspbian, но он имеет бинарную эмуляцию Raspbian и поэтому очень близок. С Nard вы создаете все на ПК, и процесс очень быстрый и воспроизводимый. Все написано в сценариях и может быть сделано, например, с помощью ночной непрерывной интеграции.
http://www.arbetsmyra.dyndns.org/nard/

Ронни Нильссон
источник
0

На мой взгляд , выполнение предложенного вами способа (монтаж, обходные пути для обновления и настройки и т. Д.) Сопряжено с большими трудностями, чем с реальными решениями . Конечно, может быть интересно сделать это по-своему, если вам интересно, но самый лучший и простой способ - это тот, который вы избегаете.

Я рекомендую вам взять Pi и сделать то, что вы должны сделать на нем, а затем сделать изображение его SD-карты. Затем используйте это изображение на вашем другом Pis, так как это изображение уже настроено.

Примечание: я предполагаю, что вы будете использовать Raspbian. Я также предполагаю, что вы обычный человек, а не человек, который часто готовит изображения (например, Raspberry Pi Foundation).


Шаги, если вы действительно возитесь с Пи:

  1. Скачайте и установите свежий образ ОС на ваш выбор
  2. Подключите кабель Ethernet / подключитесь к WiFi
    • Возможно, сделайте сканирование локальной сети, если вы не знаете IP-адреса вашего Pi
  3. Делать вещи через SSH
    • apt-get update -y && apt-get upgrade обновить пакеты
    • Ваши личные настройки
  4. Сделайте изображение, затем используйте это изображение для других пис.

Шаги, если вы не возитесь с Пи (см. Примечание выше):

  1. Скачать свежий образ ОС
  2. Смонтируйте образ, используя инструкции из /raspberrypi//a/13138/24224 (вы также должны учитывать, какая у вас ОС / образ, так как некоторые имеют разные макеты FS)
    • Подготовьте калькулятор.
  3. Найдите debфайл для каждого пакета, который вы хотите обновить, плюс их зависимости , а также зависимости этих зависимостей , а также зависимости этих зависимостей . apt-offlineэто хлопот. Ссылка на эту ссылку
    • Затем найдите способ установить все эти пакеты, не используя / перерабатывая свой Pi. apt-getне будет работать в автономном режиме. deb подробности файла здесь . Удачи.
  4. Обновите ядра Pi и вещи низкого уровня, используя инструмент Hexxeh.
  5. Настройте в соответствии с вашими требованиями
  6. Запишите измененное изображение на SD-карты вашего Pis.

Я не вижу никакой выгоды в том, чтобы не возиться с твоим Пи.

Порезаться и поработать с Пи. Вы должны сделать это только один раз.

PNDA
источник
Практически невозможно получить программы вручную, получая, зависимости, и там зависимости, и там зависимости, и т. Д. Но если вы используете apt-get и говорите, что хотите VLC, вы бы это сделали, apt-get install vlc --yes --print- URIs. Это даст список ссылок; после загрузки поместите их в / var / cache / apt / archives / part и запустите для установки dpkg -ipartal / *. deb. Еще лучше, если вы получаете Synaptics, у него есть возможность генерировать скрипт загрузки пакета. Запустите этот скрипт на компьютере с Linux, и вы получите свои пакеты. Затем вы можете установить их снова с помощью synaptics.
NULL
@ НУЛЬThen find a way to install all of those packages without using/tinkering with your Pi.
PNDA
@ Насколько я знаю, вы можете использовать только dpkgна самой системе, а не на смонтированном образе. Кроме того, OP планирует использовать его / ее ПК, поэтому *.debфайлы, которые у вас есть, предназначены в первую очередь для неправильной архитектуры (ПК - x86 / x64, Pi - ARMv6 / v7)
PNDA
Как я укажу в своем вопросе, я не хочу делать 1. Что касается 2, это звучит глупо :). Что заставляет вас думать, что предложение @flakeshakes сложнее из 2?
Энди Смит
@AndySmith Я процитирую комментарий I'll be honest and say that my impression is you are pursuing the Y side of an XY problem with too much vigour -- it's implied you think the simpler method (just set up an image on a pi, which can be done from a computer via remote login, and the image itself tweaked by mounting, which can be done on a PC, and all of this can be automated with scripting) is too much hassle, and so you have put your hopes in a method that is actually much more hassle.
Златовласки
0

Я думаю, что вы ищете какой-то (software) configuration management. Благодаря этому вы сможете загрузить стандартный raspbian образ, а затем перенести свою собственную конфигурацию (включая новые пакеты и т. П.). Существует множество систем SCM. Недостатком является то, что большинство этих систем нацелены на поддержку крупномасштабных сетей и поэтому могут быть немного излишними для вашей цели. Вам также нужен какой-то сервер инициализации. Самые популярные SCM - это Puppet , Chef , Ansible . Статьи для начала:

Это своего рода общий ответ, но SCM - широкое поле. Может быть, это стоит изучить в зависимости от ваших планов.

duenni
источник
Ansible выглядит многообещающе, потому что он без агента, и вам не нужен полноценный сервер для его запуска.
Дуэнни
1
Не совсем, я хочу, чтобы изображение уже было построено, а не то, к чему я прибегаю. Это предложение не работает, если у моего Pi нет сетевого подключения.
Энди Смит