Crear una imagen de tarjeta SD preparada previamente

19

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.

Andy Smith
fuente
3
Puede ser útil: ¿Cómo puedo montar una imagen de distribución de Raspberry Pi Linux? - observe la línea enfatizada en la respuesta aceptada, "Si cambia algo, esos cambios se incluirán en el archivo .img". Desafortunadamente, esto no brinda la oportunidad de postularse apt-get; la forma más fácil de hacerlo sería usar una VM y rsynccon 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.
Ricitos de oro
Otro enfoque sería el arranque neto.
lexu
El Win32DiskImager tiene una función de lectura, ¿lo has intentado?
Kong Chun Ho

Respuestas:

6

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/

batido de escamas
fuente
Si el OP está buscando crear una imagen de lanzamiento estándar de la industria ... sí, ese es el camino a seguir, pero es una curva de aprendizaje masiva y no deseo ningún aficionado por ese camino.
Piotr Kula
1
¡Esto suena como lo que estoy buscando! ¿Hay alguna guía sobre cómo usar esto? build.sh parece asumir que se establecen un montón de variables de entorno.
Andy Smith
Probablemente cubierto por # 4 bajo TODO ;) No ha sido tocado en unos meses, por lo que las personas involucradas están ocupadas con otras cosas o han perdido interés en ellas.
Ricitos de oro
@goldilocks, ¿de aquí no es de donde proviene la imagen rasbian base?
Andy Smith
3
Seré honesto y diré que mi impresión es que está persiguiendo el lado Y de un problema XY con demasiado vigor; está implícito que cree que el método más simple (simplemente configure una imagen en un pi, que se puede hacer desde un computadora a través de inicio de sesión remoto, y la imagen en sí ajustada por montaje, que se puede hacer en una PC, y todo esto se puede automatizar con secuencias de comandos) es demasiado complicado, por lo que ha puesto sus esperanzas en un método que en realidad es mucho Más molestias .
Ricitos de oro
5

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/

Ronny Nilsson
fuente
0

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:

  1. Descargue e instale una nueva imagen del sistema operativo de su elección
  2. Enchufe el cable Ethernet / conéctese a WiFi
    • Posiblemente haga un escaneo LAN si no conoce las direcciones IP de su Pi
  3. Hacer cosas a través de SSH
    • apt-get update -y && apt-get upgrade para actualizar paquetes
    • Su configuración personal necesita
  4. Haz una imagen, luego usa esa imagen para otros Pis.

Pasos si no juega con su Pi (vea la nota anterior):

  1. Descargar nueva imagen del sistema operativo
  2. Monte la imagen usando las instrucciones de /raspberrypi//a/13138/24224 (también debe tener en cuenta qué sistema operativo / imagen tiene, ya que algunos tienen diferentes diseños de FS)
    • Ten una calculadora lista.
  3. Encuentre el debarchivo 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-offlineEs una molestia. Consulte este enlace
    • Luego, encuentre una manera de instalar todos esos paquetes sin usar / retocar con su Pi. apt-getNo funcionará sin conexión. deb Detalles del archivo aquí . Buena suerte.
  4. Actualice los núcleos Pi y las cosas de bajo nivel utilizando la herramienta de Hexxeh
  5. Configure a sus necesidades
  6. Escriba una imagen modificada en sus tarjetas SD de Pis.

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.

PNDA
fuente
Es casi imposible obtener programas manualmente obteniendo, dependencias y sus dependencias, y sus dependencias, etc. Pero si usa apt-get y dice que quiere VLC, lo haría, apt-get install vlc --yes --print- uris Eso le dará una lista de enlaces; una vez descargados, colóquelos en / var / cache / apt / archives / partial y ejecute dpkg -i partial / *. deb para instalar. Aún mejor, si obtienes Synaptics, tiene una opción para generar el script de descarga del paquete. Ejecute ese script en una computadora Linux y obtendrá sus paquetes. Luego puede instalarlos con synaptics nuevamente.
NULL
@NULLThen find a way to install all of those packages without using/tinkering with your Pi.
PNDA
@NULL Hasta donde yo sé, solo se puede usar dpkgen el sistema en sí, no en una imagen montada. Además, OP está planeando usar su PC, por lo que los *.debarchivos que tiene son para una arquitectura incorrecta en primer lugar (PC es x86 / x64, Pi es ARMv6 / v7)
PNDA
Como especifico en mi pregunta, no quiero hacer 1. En cuanto a 2, eso suena loco :). ¿Qué te hace pensar que la sugerencia de @flakeshakes es más difícil de 2?
Andy Smith
@AndySmith Citaré el comentario de goldilock: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.
PNDA
0

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.

duenni
fuente
Ansible parece prometedor porque no tiene agente y no necesita un servidor completo para ejecutarlo.
duenni
1
En realidad no, quiero que la imagen ya esté construida, no es algo en lo que agregue cosas. Esta sugerencia no funciona si mi Pi no tiene una conexión de red.
Andy Smith