Como alguém pode automatizar a instalação raspbian-config raspbian?

17

Eu me encontrei configurando repetidamente todos os meus pi's com raspbian da mesma maneira usando raspi-config.

Existe uma maneira de extrair todas as configurações que eu fiz usando raspi-config em um script executável que eu poderia baixar com o wget para cada novo pi configurado?

Uma solução semelhante com o mesmo efeito também seria apreciada. Acho que poderia tentar uma das implementações do docker rpi, mas não estou tão ansioso para descobrir como essas coisas são complicadas.

8DH
fonte
1
depende de qual configuração você gostaria de fazer? Raspi-config modificar configurações de arquivos que você pode modificar usando uma outra maneira (/boot/config.txt,/etc/module.conf ...)
mpromonet
1
É um script shell bastante simples para 1000 linhas /usr/bin, se isso ajuda. Se você quiser desativá-lo começando com uma nova imagens, apagar /etc/init.d/apply_noobs_os_confige no link /etc/rc2.d.
goldilocks
Assim como o raspi-config concentra todas as tarefas básicas de configuração em um só lugar, sem exigir que eu saiba como executar cada tarefa, gostaria de uma DSL simples que permita especificar todas as configurações em um arquivo. Como uma janela de encaixe.
8DH 22/03
Por que não usar apenas o docker?
Tim Holt
Sim, porque não? Qual é a solução de docker preferida para o rpi?
8DH 22/03

Respostas:

20

Pelo menos hoje em dia, raspi-configparece oferecer suporte ao modo não interativo:

cat /boot/cmdline.txt            # show original cmdline.txt
raspi-config nonint do_serial 1  # disable serial console
cat /boot/cmdline.txt            # confirm changes
raspi-config nonint do_serial 0  # enable serial console
cat /boot/cmdline.txt            # confirm changes

com isso, você pode escrever scripts de instalação que podem fazer qualquer coisa através do comando interativo, e fará exatamente as mesmas coisas. Você precisará encontrar os comandos relevantes e seu uso na fonte do script.

Anormal parvo
fonte
1
Isso é maravilhoso!
8DH 31/05
Portanto, quando eu preparo um cartão SD, posso colocar a imagem lá, adicionar meu script à pasta e executar o script quando o pi for inicializado.
8DH 31/05
Faltam outras melhorias neste procedimento?
8DH 31/05
1
É disso que eu sei - se houver mais, não está muito visivelmente documentado. Eu me deparei com isso enquanto olhava para o script e não procurei mais informações depois de encontrar esse recurso.
Silly Freak
1
@ 8DH Existe algo que você não pode lidar com este método? (se ainda é relevante para você)
Silly Freak
16

Isso ainda não está documentado em nenhum lugar, mas a ferramenta rc_gui (suponho que seria uma interface gráfica do usuário para o raspi-config se eu instalasse a área de trabalho completa) usa opções de linha de comando para o script raspi-config bash. Você pode ver a lista completa de opções no código fonte C . ATUALIZAÇÃO: O repo oficial desapareceu por algum motivo. Este é o garfo mais ativo que pude encontrar.

/* Command strings */
#define GET_CAN_EXPAND  "sudo raspi-config nonint get_can_expand"
#define EXPAND_FS       "sudo raspi-config nonint do_expand_rootfs"
#define GET_HOSTNAME    "sudo raspi-config nonint get_hostname"
#define SET_HOSTNAME    "sudo raspi-config nonint do_hostname %s"
#define GET_BOOT_CLI    "sudo raspi-config nonint get_boot_cli"
#define GET_AUTOLOGIN   "sudo raspi-config nonint get_autologin"
#define SET_BOOT_CLI    "sudo raspi-config nonint do_boot_behaviour B1"
#define SET_BOOT_CLIA   "sudo raspi-config nonint do_boot_behaviour B2"
#define SET_BOOT_GUI    "sudo raspi-config nonint do_boot_behaviour B3"
#define SET_BOOT_GUIA   "sudo raspi-config nonint do_boot_behaviour B4"
#define GET_BOOT_WAIT   "sudo raspi-config nonint get_boot_wait"
#define SET_BOOT_WAIT   "sudo raspi-config nonint do_boot_wait %d"
#define GET_SPLASH      "sudo raspi-config nonint get_boot_splash"
#define SET_SPLASH      "sudo raspi-config nonint do_boot_splash %d"
#define GET_OVERSCAN    "sudo raspi-config nonint get_overscan"
#define SET_OVERSCAN    "sudo raspi-config nonint do_overscan %d"
#define GET_CAMERA      "sudo raspi-config nonint get_camera"
#define SET_CAMERA      "sudo raspi-config nonint do_camera %d"
#define GET_SSH         "sudo raspi-config nonint get_ssh"
#define SET_SSH         "sudo raspi-config nonint do_ssh %d"
#define GET_VNC         "sudo raspi-config nonint get_vnc"
#define SET_VNC         "sudo raspi-config nonint do_vnc %d"
#define GET_SPI         "sudo raspi-config nonint get_spi"
#define SET_SPI         "sudo raspi-config nonint do_spi %d"
#define GET_I2C         "sudo raspi-config nonint get_i2c"
#define SET_I2C         "sudo raspi-config nonint do_i2c %d"
#define GET_SERIAL      "sudo raspi-config nonint get_serial"
#define GET_SERIALHW    "sudo raspi-config nonint get_serial_hw"
#define SET_SERIAL      "sudo raspi-config nonint do_serial %d"
#define GET_1WIRE       "sudo raspi-config nonint get_onewire"
#define SET_1WIRE       "sudo raspi-config nonint do_onewire %d"
#define GET_RGPIO       "sudo raspi-config nonint get_rgpio"
#define SET_RGPIO       "sudo raspi-config nonint do_rgpio %d"
#define GET_PI_TYPE     "sudo raspi-config nonint get_pi_type"
#define GET_OVERCLOCK   "sudo raspi-config nonint get_config_var arm_freq /boot/config.txt"
#define SET_OVERCLOCK   "sudo raspi-config nonint do_overclock %s"
#define GET_GPU_MEM     "sudo raspi-config nonint get_config_var gpu_mem /boot/config.txt"
#define GET_GPU_MEM_256 "sudo raspi-config nonint get_config_var gpu_mem_256 /boot/config.txt"
#define GET_GPU_MEM_512 "sudo raspi-config nonint get_config_var gpu_mem_512 /boot/config.txt"
#define GET_GPU_MEM_1K  "sudo raspi-config nonint get_config_var gpu_mem_1024 /boot/config.txt"
#define SET_GPU_MEM     "sudo raspi-config nonint do_memory_split %d"
#define GET_HDMI_GROUP  "sudo raspi-config nonint get_config_var hdmi_group /boot/config.txt"
#define GET_HDMI_MODE   "sudo raspi-config nonint get_config_var hdmi_mode /boot/config.txt"
#define SET_HDMI_GP_MOD "sudo raspi-config nonint do_resolution %d %d"
#define GET_WIFI_CTRY   "sudo raspi-config nonint get_wifi_country"
#define SET_WIFI_CTRY   "sudo raspi-config nonint do_wifi_country %s"
#define CHANGE_PASSWD   "(echo \"%s\" ; echo \"%s\" ; echo \"%s\") | passwd"

ATUALIZAÇÃO: Percebo que não há nada sobre as configurações de localidade ou teclado. Então, isso me sugere que devemos examinar a fonte de raspi-config. Felizmente, temos muitos exemplos acima para ter uma idéia de como usar esse script de forma nonintereta. Então, o que preciso fazer para resolver esse problema sem cabeça é:

locale=en_US.UTF-8
layout=us
sudo raspi-config nonint do_change_locale $locale
sudo raspi-config nonint do_configure_keyboard $layout

As variáveis ​​são os valores que eu selecionaria na interface do usuário maldições. As opções de localidade são o primeiro campo no arquivo /usr/share/i18n/SUPPORTED. As opções de layout do teclado são os nomes dos diretórios /usr/share/X11/xkb/symbols/. Estando nos EUA, eu uso en_US.UTF-8e us. YMMV

Bruno Bronosky
fonte
2
Se você estiver interessado em automatizar a configuração do Raspberry Pis, consulte o meu projeto pi-init2 no github. Ele fornece o recurso solicitado há muito tempo "executar um script na inicialização (sem cabeça)".
de Bruno Bronosky
Há também sudo raspi-config nonint do_audio %dpara a escolha de saída de áudio (0 = auto, 1 = jack, 2 = HDMI)
Golimar
@golimar de onde você tirou isso? O projeto rc_gui original desapareceu e o melhor fork que encontrei (resposta atualizada) não inclui do_audio. Mas isso é realmente uma função encontrada emcurl -sL https://github.com/RPi-Distro/raspi-config/raw/master/raspi-config | grep -E '(do|get)_[a-zA-Z0-9_ ]+\(' | sort | uniq
de Bruno Bronosky
Aqui: gist.github.com/damoclark/ab3d700aafa140efb97e510650d9b1be , mas o seu comando é grande para encontrar todos eles, graças
Golimar
3

Tudo o que raspi-configfaz é editar alguns arquivos de configuração, que você também pode editar com um script. Verifica ased manual para ver como essas edições podem ser feitas com eficiência.

Se você tiver muitas alterações para aplicar dessa maneira, consideraria configurar uma imagem RPi limpa da maneira que desejar, diffseu sistema de arquivos completo * em uma imagem vanilla e, em seguida, aplique as alterações compatch quando precisar configurar uma nova instalação.

Por fim, dê uma olhada em ferramentas como etckeeper- aquelas projetadas especificamente para manipular alterações de configuração e são capazes de rastrear alterações sutis que um simples differro, como permissões. Observe que, ao contrário do nome, etckeepernão está restrito a /etc, por exemplo, a execução etckeeper -d /boot init; etckeeper -d /boot commitfará um backup dos arquivos em /boot.

(*) Aparentemente, não é óbvio ; portanto, para esclarecer todos os mal-entendidos, quero dizer que você deve executar algo como diff -r /etc /mnt/vanilla_root/etc > etc.diffe diff -r /boot /mnt/vanilla_boot > boot.diffnão diff my.img vanilla.img.

Dmitry Grigoryev
fonte
1

Use dd (ou similar) para copiar a imagem Pi em funcionamento no seu PC.

Use dd (ou similar) para copiar a imagem copiada do seu PC para o seu Pi.

homem dd

joan
fonte
Sim, é claro que existe o caminho da imagem, mas então eu precisaria manter a imagem com atualizações e outras coisas. (a menos que haja uma solução elegante para isso também ...)
8DH
3
@ 8DH, sua sugestão de baixar configurações e enviar também significa que você deve manter uma "imagem" com atualizações também.
Tim Holt
0

Tenho 1 cartão SD 100% configurado para os meus desejos, que mantenho como base para todas as novas instalações.

Ao configurar um novo Pi, clono esse cartão SD em vez de começar do zero.

ON5MF Jurgen
fonte