Para un proyecto en el que estoy trabajando, me gustaría crear una imagen de "stock" basada en Raspbian que pueda instalar en muchos Pis.
Idealmente, me gustaría poder (en mi computadora) tomar la imagen de Raspbian, obtener algunos paquetes, editar alguna configuración y luego crear una imagen de tarjeta SD para ponerla en mi Pis.
¿Hay una manera simple o recomendada de hacer esto? ¿Alguna dificultad que pueda encontrar?
Estoy interesado en evitar jugar manualmente con un pi y luego clonar esa imagen. Presumiblemente, Raspbian está hecho de alguna manera que no es alguien haciendo clic manualmente en los botones de un Pi. Me gustaría hacerlo de esa manera, si puedo.
Idealmente, quiero crear algo que pueda construirse automáticamente en un servidor de integración continua; no quiero un proceso de compilación que implique "escribir una tarjeta SD, ponerla en un Pi" porque quiero estar listo para crear imágenes sin ninguna acceso físico a una Raspberry Pi.
apt-get
; la forma más fácil de hacerlo sería usar una VM yrsync
con una imagen montada idéntica a la utilizada para iniciar la VM (ya que las imágenes de VM en sí mismas no son buenas para esto), pero creo que la única opción de VM aquí es QEMU, que AFAICT es una PITA.Respuestas:
La fundación Raspberry Pi utiliza un conjunto de scripts de bash que automatizan QEMU para generar sus imágenes. Aún así, debe analizar la raíz de construcción de "estándares de la industria" y Yocto también.
https://github.com/RPi-Distro/pi-gen
http://cellux.github.io/articles/diy-linux-with-buildroot-part-1/
fuente
Mi proyecto Nard SDK tiene muchas de las características que desea. No es Raspbian, pero tiene una emulación binaria Raspbian y, por lo tanto, está muy cerca. Con Nard construyes todo en una PC y el proceso es muy rápido y reproducible. Todo es programable y se puede hacer, por ejemplo, mediante una integración continua nocturna.
http://www.arbetsmyra.dyndns.org/nard/
fuente
En mi opinión , hacerlo de la manera que sugirió (montar, hacer soluciones para actualizar y configurar, etc.) presenta más desafíos que las soluciones reales . Claro, puede ser divertido hacerlo a su manera si está interesado, pero la mejor y más fácil puede ser la que está evitando.
Le recomiendo que obtenga un Pi y haga lo que tiene que hacer en él, luego haga una imagen de su tarjeta SD. Luego, use esa imagen en su otro Pis ya que esa imagen ya está configurada.
Nota: Asumiré que usarás Raspbian. También supondré que eres solo una persona promedio y no una persona que prepara imágenes con frecuencia (por ejemplo, la Fundación Raspberry Pi).
Pasos si haces jugar con su pi:
apt-get update -y && apt-get upgrade
para actualizar paquetesPasos si no juega con su Pi (vea la nota anterior):
deb
archivo para cada paquete que desea actualizar, más sus dependencias , más las dependencias de esas dependencias , más las dependencias de esas dependencias .apt-offline
Es una molestia. Consulte este enlaceapt-get
No funcionará sin conexión.deb
Detalles del archivo aquí . Buena suerte.No veo ningún beneficio en no jugar con su Pi.
Corta un poco de holgura y juega con tu Pi. Solo tienes que hacerlo una vez.
fuente
Then find a way to install all of those packages without using/tinkering with your Pi.
dpkg
en el sistema en sí, no en una imagen montada. Además, OP está planeando usar su PC, por lo que los*.deb
archivos que tiene son para una arquitectura incorrecta en primer lugar (PC es x86 / x64, Pi es ARMv6 / v7)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.
Creo que lo que estás buscando es algún tipo de
(software) configuration management
. Con esto, podrá iniciar una imagen raspbian de archivo y luego pasar sobre su propia configuración (incluidos nuevos paquetes y similares). Hay muchos sistemas SCM por ahí. La desventaja es que la mayoría de estos sistemas están destinados a admitir redes a gran escala y, por lo tanto, son un poco excesivos para su propósito. También necesita algún tipo de servidor de aprovisionamiento. Los SCM más populares parecen ser Puppet , Chef , Ansible . Artículos para comenzar:Esta es una especie de respuesta genérica, pero SCM es un campo amplio. Quizás valga la pena investigar esto dependiendo de cuáles sean sus planes.
fuente