Criando uma imagem de cartão SD pré-preparada

19

Para um projeto em que estou trabalhando, gostaria de criar uma imagem "estoque" baseada no Raspbian que eu possa instalar em muitos Pis.

Idealmente, eu gostaria de poder (no meu computador) tirar a imagem Raspbian, obter alguns pacotes, editar algumas configurações e criar uma imagem do cartão SD para colocar no meu Pis.

Existe uma maneira simples ou recomendada de fazer isso? Alguma armadilha que eu possa encontrar?

Estou interessado em evitar mexer manualmente com um pi e depois clonar essa imagem. Presumivelmente, o Raspbian é feito de alguma maneira que não é alguém clicando manualmente nos botões de um Pi. Eu gostaria de fazer dessa maneira, se puder.

Idealmente, quero criar algo que possa ser construído automaticamente em um servidor de integração contínua - não quero um processo de criação que envolva "escreva um cartão SD, coloque-o em um Pi" porque quero ser ale para criar imagens sem nenhum acesso físico a um Raspberry Pi.

Andy Smith
fonte
3
Pode ser útil: Como montar uma imagem de distribuição do Raspberry Pi Linux? - observe a linha enfatizada na resposta aceita: "Se você alterar alguma coisa, essas alterações serão incluídas no arquivo .img". Infelizmente, isso não oferece a oportunidade de aplicar apt-get; a maneira mais fácil de fazer isso seria usar uma VM e rsynccom uma imagem montada idêntica à usada para iniciar a VM (já que as próprias imagens da VM não são boas para isso), mas acho que a única opção de VM aqui é QEMU, que AFAICT é uma PITA.
goldilocks
Outra abordagem seria a inicialização via rede.
Lexu
O Win32DiskImager tem uma função de leitura, você já tentou isso?
Kong Chun Ho

Respostas:

6

A fundação Raspberry Pi usa um conjunto de scripts bash que automatizam o QEMU para gerar suas imagens. Você ainda deve analisar a buildroot dos "padrões do setor" e o Yocto também.

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

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

flocos de neve
fonte
Se o OP está buscando criar uma imagem de lançamento padrão do setor ... sim, esse é o caminho a seguir, mas é uma curva de aprendizado massiva e eu não desejo nenhum hobby nesse caminho.
Piotr Kula
1
Parece o que estou procurando! Existem guias sobre como usar isso? O build.sh parece assumir que várias variáveis ​​de ambiente estão definidas.
Andy Smith
Provavelmente coberto pelo nº 4 do TODO ;) Não foi tocado em alguns meses, então as pessoas envolvidas estão ocupadas com outras coisas ou perderam o interesse nela.
goldilocks
@goldilocks, então não é de onde vem a imagem rasbian de base?
Andy Smith
3
Serei honesto e direi que minha impressão é que você está perseguindo o lado Y de um problema XY com muito vigor - está implícito que você acha o método mais simples (basta configurar uma imagem em um pi, o que pode ser feito a partir de um computador via login remoto, e a própria imagem foi ajustada pela montagem, o que pode ser feito em um PC, e tudo isso pode ser automatizado com scripts) é muito trabalhoso e, portanto, você depositou suas esperanças em um método realmente muito mais problemas .
goldilocks
5

Meu projeto O Nard SDK tem muitos dos recursos que você deseja. Não é Raspbian, mas possui emulação binária Raspbian e, portanto, é muito próxima. Com o Nard, você constrói tudo em um PC e o processo é muito rápido e reproduzível. Tudo é programável e pode ser feito, por exemplo, por uma integração contínua noturna.
http://www.arbetsmyra.dyndns.org/nard/

Ronny Nilsson
fonte
0

Na minha opinião , fazê-lo da maneira sugerida (montagem, solução alternativa para atualização e configuração etc.) apresenta mais desafios do que as soluções reais . Claro, pode ser divertido fazer do seu jeito, se você estiver interessado, mas o melhor e mais fácil pode ser o que você está evitando.

Eu recomendo que você adquira um Pi e faça o que tem que fazer nele, depois faça uma imagem do seu cartão SD. Em seguida, use essa imagem em seus outros Pis, pois essa imagem já está configurada.

Nota: Presumo que você usará Raspbian. Também assumirei que você é apenas uma pessoa comum, e não uma pessoa que prepara imagens com frequência (por exemplo, Raspberry Pi Foundation).


Passos se fazer mexer com o Pi:

  1. Baixe e instale uma nova imagem do sistema operacional de sua escolha
  2. Conecte o cabo Ethernet / conecte ao WiFi
    • Possivelmente faça uma varredura da LAN se você não souber os endereços IP do seu Pi
  3. Faça coisas via SSH
    • apt-get update -y && apt-get upgrade atualizar pacotes
    • Suas necessidades de configuração pessoal
  4. Faça uma imagem e use-a para outros Pis.

Etapas se você não mexer no seu Pi (veja a nota acima):

  1. Faça o download da nova imagem do SO
  2. Montar imagem usando as instruções de /raspberrypi//a/13138/24224 (você também deve considerar qual sistema operacional / imagem possui, já que alguns possuem layouts diferentes de FS)
    • Tenha uma calculadora pronta.
  3. Localize o debarquivo para cada pacote que você deseja atualizar, além de suas dependências , além das dependências dessas dependências e das dependências dessas dependências . apt-offlineé um aborrecimento. Consulte este link
    • Em seguida, encontre uma maneira de instalar todos esses pacotes sem usar / mexer com o seu Pi. apt-getnão funcionará offline. deb detalhes do arquivo aqui . Boa sorte.
  4. Atualize os kernels Pi e as coisas de baixo nível usando a ferramenta Hexxeh
  5. Configure com seus requisitos
  6. Escreva uma imagem modificada nos cartões SD do seu Pis.

Não vejo nenhum benefício em não mexer no seu Pi.

Corte um pouco de folga e mexa com o seu Pi. Você só precisa fazer isso uma vez.

PNDA
fonte
É quase impossível obter programas manualmente, obtendo, dependências e dependências, e dependências, etc. Mas se você usa o apt-get e diz que deseja o VLC, faria o apt-get install vlc --yes --print- uris. Isso dará uma lista de links; depois de baixado, coloque-os em / var / cache / apt / archives / parcial e execute o dpkg -i parcial / *. deb para instalar. Melhor ainda, se você obtiver o Synaptics, ele tem uma opção para gerar o script de download do pacote. Execute esse script em um computador Linux e você receberá seus pacotes. Em seguida, você pode instalá-los com synaptics novamente.
NULL
@NULLThen find a way to install all of those packages without using/tinkering with your Pi.
PNDA 19/07/16
@NULL Até onde eu sei, você só pode usar dpkgno sistema, não em uma imagem montada. Além disso, OP é o planejamento sobre o uso de sua / seu PC, então os *.debarquivos que você tem é para uma arquitetura de errado em primeiro lugar (PC é x86 / x64, Pi é ARMv6 / v7)
PNAD
Como eu especifiquei na minha pergunta, não quero fazer 1. Quanto ao 2, isso parece loucura :). O que faz você pensar que a sugestão @flakeshakes é mais difícil de 2?
Andy Smith
@AndySmith vou citar o comentário 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

Eu acho que o que você está procurando é algum tipo de (software) configuration management. Com isso, você poderá inicializar uma imagem raspbian padrão e, em seguida, enviar sua própria configuração (incluindo novos pacotes e similares). Existem muitos sistemas SCM por aí. A desvantagem é que a maioria desses sistemas visa suportar redes de grande escala e, portanto, talvez exagerem um pouco para o seu propósito. Você também precisa de algum tipo de servidor de provisionamento. Os SCM mais populares parecem ser Puppet , Chef , Ansible . Artigos para você começar:

Essa é uma resposta genérica, mas o SCM é um campo amplo. Talvez valha a pena explorar isso, dependendo de quais são seus planos.

Duenni
fonte
O Ansible parece promissor porque é sem agente e você não precisa de um servidor completo para executá-lo.
21716 duenni
1
Na verdade não, eu quero que a imagem já esteja construída, não algo que eu preste atenção nas coisas. Essa sugestão não funcionará se o meu Pi não tiver uma conexão de rede.
Andy Smith