Como realizar instalações Debian autônomas com pré-configuração
Preseed é equivalente ao Kickstart para a família de distribuições RedHat e “autoinstall” para Ubuntu. Ao preparar um arquivo “preseed” e preenchê-lo com respostas às perguntas feitas pelo instalador Debian, podemos realizar instalações Debian autônomas e replicáveis. Neste tutorial, aprendemos como criar um arquivo de pré-configuração ou gerá-lo a partir de uma instalação existente e como passá-lo para o instalador Debian.
Neste tutorial você aprenderá:
- Como criar um arquivo preseed ou gerá-lo a partir de uma instalação Debian existente
- Como passar um arquivo preseed para o instalador Debian
Obtendo um arquivo preseed de uma instalação Debian existente
Vamos começar com a maneira mais fácil de obter um arquivo de pré-configuração válido. Supondo que já realizamos uma instalação Debian, para obter o arquivo pré-configurado contendo as respostas que fornecemos ao instalador, podemos simplesmente usar o utilitário debconf-get-selections
, que faz parte do debconf -utils pacote. Para garantir que o último esteja instalado, podemos executar:
$ sudo apt-get update && sudo apt-get install debconf-utils
Depois de instalado o utilitário, para obter o arquivo preseed, executamos o seguinte comando:
$ sudo debconf-get-selections --installer > preseed.cfg
No exemplo acima, redirecionamos a saída do comando para um arquivo chamado preseed.cfg; isso pode ser usado para replicar a instalação e repetirá as escolhas que fizemos manualmente no instalador Debian. É certo que, embora eficiente, o arquivo pode ser bastante detalhado. Vamos ver como criar um com o mínimo de conteúdo.
Criando um arquivo de pré-configuração do zero
Vamos ver como criar um arquivo de pré-configuração do zero. Como abordagem, percorreremos as principais etapas do instalador Debian, e tentaremos responder às perguntas através de instruções, no arquivo de configuração preseed.
Quando instalamos o Debian selecionando a opção “Instalação Gráfica”, a primeira pergunta que o instalador nos faz é qual idioma deve ser usado para o sistema (o inglês é a escolha padrão), nossalocalização, e o layout de teclado desejado. Dentro do nosso arquivo preseed, podemos fornecer respostas a essas perguntas com as seguintes instruções:
d-i debian-installer/language string en
d-i debian-installer/country string US
d-i keyboard-configuration/xkb-keymap select us
A sintaxe que devemos usar ao fornecer as respostas do instalador é a usada pelo utilitário debconf-set-selections
:
<owner> <question-name> <question-type> <value>
No primeiro campo, informamos o “dono” da pergunta, aquele que cuidará da resposta. Na grande maioria dos casos, no arquivo de pré-configuração, será “d-i”, que significa Debian-Installer. O segundo campo contém o nome da pergunta e o terceiro o tipo da pergunta. Por fim, o quarto campo contém o valor, a resposta à própria pergunta.
Configurando a rede
Vamos prosseguir. O próximo passo, em uma instalação padrão do Debian, é a configuração da rede. O instalador nos pede para fornecer um nome de host e um domínio opcional para o nosso sistema e, pelo menos no modo de instalação “não avançado”, configura automaticamente a rede usando um servidor DHCP, se houver algum disponível na LAN. Aqui, apenas como exemplo, usaremos “linuxconfig” como nome de host e deixaremos o campo de domínio em branco. Em nosso arquivo preseed, traduzimos essas escolhas adicionando as seguintes instruções:
d-i netcfg/get_hostname string linuxconfig
d-i netcfg/get_domain string
Em certas situações, podemos querer configurar a rede estaticamente, sem depender de um servidor DHCP. As instruções no exemplo abaixo, quando adicionadas a um arquivo de pré-configuração, desativam a configuração automática da rede, selecionam explicitamente uma interface de rede (“eth0” neste caso) e atribuem um endereço IP a ela. O valor da máscara de rede, juntamente com os endereços do gateway e dos servidores de nomes, também são atribuídos estaticamente. A última instrução é necessária para confirmar essas escolhas sem ser solicitado:
d-i netcfg/disable_autoconfig boolean true
d-i netcfg/choose_interface select eth0
d-i netcfg/get_ipaddress string 192.168.122.150
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.122.1
d-i netcfg/get_nameservers string 192.168.122.1
d-i netcfg/confirm_static boolean true
É importante observar que as instruções de rede relatadas no arquivo de pré-configuração serão efetivas somente se o próprio arquivo de pré-configuração não for recuperado da rede (de um servidor web, por exemplo). Este é um típico problema do ovo e da galinha: para buscar o arquivo preseed contendo as instruções para configurar a rede, a própria rede já deve estar configurada. Podemos contornar esse problema usando um servidor DHCP ou, como veremos, fornecendo instruções de configuração de rede comoargumentos de inicialização.
Configurando usuários do sistema
O próximo passo, na instalação do sistema operacional, consiste na configuração de usuários e senhas. Normalmente queremos deixar a senha do root em branco e fornecer informações padrão do usuário: seu “nome completo” (o nome “real”), seu nome de usuário e sua senha. Isso bloqueará a conta root e nos permitirá realizar tarefas administrativas usando sudo. No arquivo preseed, traduzimos escrevendo:
d-i passwd/root-login boolean false
d-i passwd/user-fullname string egidio
d-i passwd/username string egidio
d-i passwd/user-password-crypted password $6$GjYHPm0qkEd/Ijea$msrqFWfBzuVsVtlTbD.8mbRTq3I5lBegbv1ZtNMse5YyTohQIrMoz.m37lMzVwEm75Klp9bCVU12ySg.7twFj0
Observe que enquanto no instalador fornecemos a senha em formato claro, no arquivo de pré-configuração, precisamos fornecê-la em formato hash usando o algoritmo sha512. Um dos métodos mais rápidos de obter um hash + salt de uma senha é usar o utilitário mkpasswd
:
$ mkpasswd -m sha512crypt
Assim que iniciarmos o comando acima, o utilitário solicitará nossa senha e exibirá a versão com hash e salgada. Também poderíamos fornecer a senha diretamente como argumento, mas isso pode torná-la visível nas listas de processos e também pode ser salva em nosso histórico de shell. Se omitirmos o fornecimento da senha no arquivo de pré-configuração, o instalador irá solicitá-la de forma interativa, assim como qualquer outra informação faltante.
Especificando um fuso horário
Na próxima etapa, o instalador solicita que escolhamos o fuso horário do sistema. Para selecionar o fuso horário “Leste” dos EUA, por exemplo, escreveríamos:
d-i time/zone string US/Eastern
Particionando o disco
Particionar o disco é provavelmente a parte mais importante do processo de instalação e também pode ser uma das mais complexas de relatar no arquivo de pré-configuração. O instalador Debian, por padrão, nos permite escolher entre três “métodos” de particionamento guiado:
- Guiado – use o disco inteiro
- Guiado – use o disco inteiro e configure o LVM
- Guiado – use o disco inteiro e configure o LVM criptografado
O instalador possui uma quarta opção, “Manual”, que nos permite criar um esquema de particionamento mais personalizado. Neste ponto do tutorial veremos como traduzir a receita pré-configurada “LVM”. Mais adiante veremos também como usar uma receita personalizada. Aqui assumirei que estamos executando um firmware UEFI moderno e que o disco que queremos usar para a instalação do Debian é /dev/vda
.
Primeiramente, informamos explicitamente ao instalador que queremos usar uma tabela de partição GPT e que queremos usar o disco vda para a instalação:
d-i partman-partitioning/choose_label string gpt
d-i partman-auto/disk string /dev/vda
Se no disco houver partições lvm ou raid pré-existentes, o instalador emitirá um aviso. Para evitar isso, podemos incluir as seguintes instruções no arquivo de pré-configuração:
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
A seguir, selecionamos o método de instalação do LVM e especificamos que queremos usar todo o espaço disponível para o grupo de volumes LVM:
d-i partman-auto/method string lvm
d-i partman-auto-lvm/guided_size string max
Neste ponto podemos escolher entre os três esquemas de particionamento disponíveis: o primeiro instala todo o sistema em uma partição (escolha “atômica”), o segundo cria uma partição separada para /home (“home” escolha), e o terceiro cria partições separadas (volumes lógicos, para ser mais preciso) para /home, /var e /tmp (“multi " escolha). Aqui escolhemos a segunda opção:
d-i partman-auto/choose_recipe select home
Finalmente, informamos ao instalador que terminamos de configurar as partições, confirmamos nossas seleções e as gravamos no disco:
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
Configurando o gerenciador de pacotes
O instalador nos permite escolher se queremos usar um espelho de repositório para o apt, especificar qual usar e se queremos/precisamos usar um proxy HTTP. Neste exemplo, dizemos explicitamente ao instalador que queremos usar um espelho nos EUA (deb.debian.org) e deixamos o campo proxy em branco:
d-i apt-setup/use_mirror boolean true
d-i mirror/country string US
d-i mirror/http/mirror select deb.debian.org
d-i mirror/http/proxy string
Para pular o prompt perguntando se queremos verificar a mídia de instalação extra, usamos as seguintes instruções:
d-i apt-setup/cdrom/set-first boolean false
Se instalarmos o sistema a partir de uma imagem não-netinstall, por padrão, a entrada “cdrom” é salva como uma fonte de software no arquivo /etc/apt/source.list
. Para evitar isso, adicionamos a seguinte linha ao nosso arquivo preseed:
d-i apt-setup/disable-cdrom-entries boolean true
Também podemos escolher se queremos participar da pesquisa de uso do pacote. Aqui dizemos “não” (que é o padrão, de qualquer maneira):
popularity-contest popularity-contest/participate boolean false
Escolhendo quais pacotes instalar
O instalador Debian usa o taskel para nos permitir escolher quais pacotes devem ser instalados no sistema. As opções disponíveis (pelo menos no Debian Bookworm) são:
- Ambiente de trabalho Debian
- …GNOMO
- … Xfce
- …Flashback do GNOME
- … Plasma KDE
- …Canela
- …AMIGO
- …LXDE
- …LXQt
- servidor web
- Servidor SSH
- Utilitários de sistema padrão
- computador portátil
Aqui escolhemos instalar o ambiente de desktop GNOME, os utilitários de sistema padrão e os meta-pacotes do servidor ssh:
tasksel tasksel/first multiselect gnome-desktop,standard,ssh
Para instalar pacotes únicos, em vez disso, podemos usar a opção pkgsel/include e provar uma lista de nomes de pacotes separados por espaços. Apenas como exemplo, para instalar o vim e o git, escreveríamos:
d-i pkgsel/include string vim git
Concluindo a instalação e reiniciando
Para finalizar a instalação e reinicialização adicionamos as seguintes linhas ao arquivo:
d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean false
Usamos a primeira instrução para ignorar o prompt que nos pergunta se queremos reinicializar o sistema assim que a instalação for concluída; usamos o último, em vez disso, para evitar o aviso sobre a ejeção do cdrom antes de reiniciar.
Passando o arquivo preseed para o instalador Debian
Para passar o arquivo preseed para o instalador Debian, temos basicamente duas opções. A primeira consiste em selecionar a entrada “Opções avançadas” no menu de inicialização do instalador e, em seguida, escolher “Instalação gráfica automatizada” ou “Instalação automatizada”. Quando fizermos isso, o instalador carregará os módulos necessários, tentará configurar a rede e solicitará o URL do arquivo pré-preenchido:
A outra opção consiste em modificar uma entrada de menu existente. Aqui está um exemplo: suponha que nosso arquivo preseed esteja disponível em http://192.168.0.35/preseed.cfg; poderíamos modificar a primeira entrada, “Instalação gráfica”, anexando a seguinte string à linha “linux”, para que ela se torne:
linux /install.amd/vmlinuz vga=788 --- quiet auto=true url=http://192.168.0.35/preseed.cfg
A opção auto
(definida como true, apenas “auto” não funciona na minha experiência) é necessária para iniciar a instalação no modo automatizado, onde a rede é configurada automaticamente via DHCP antes do arquivo pré-configurado é buscado e perguntas sobre localidade e mapa de teclado são adiadas para que sejam configuradas por meio do arquivo de pré-configuração.
A instalação não será totalmente automatizada, pois o instalador ainda solicitará um nome de host e um domínio opcional. Somente depois de fornecermos essas informações, o arquivo de pré-configuração será recuperado e usado para responder às outras perguntas do instalador. Para uma instalação totalmente automatizada, ao buscar o arquivo de pré-configuração da rede, podemos fornecer o nome do host e o nome do domínio antecipadamente, como argumentos de inicialização. Por exemplo:
linux /install.amd/vmlinuz vga=788 --- quiet auto=true url=http://192.168.0.35/preseed.cfg netcfg/get_hostname=linuxconfig netcfg/get_domain=""
Se quisermos, podemos usar este método para configurar estaticamente a rede, de forma que não seja necessário um servidor DHCP:
linux /install.amd/vmlinuz vga=788 --- quiet \
auto=true \
url=http://192.168.0.35/preseed.cfg \
netcfg/get_hostname=linuxconfig \
netcfg/get_domain="" \
netcfg/disable_autoconfig=true \
netcfg/choose_interface=eth0 \
netcfg/get_ipaddress=192.168.122.150 \
netcfg/get_netmask=255.255.255.0 \
netcfg/get_gateway=192.168.122.1 \
netcfg/get_nameservers=192.168.122.1 \
netcfg/confirm_static=true
Como alternativa, os arquivos preseed podem ser incluídos no sistema de arquivos ISO do Debian ou no initramfs. Essas opções têm a vantagem de não exigir uma configuração de rede funcional para recuperar o arquivo, mas são menos convenientes, pois a imagem de distribuição deve ser reconstruída cada vez que modificarmos o arquivo.
Pensamentos finais
Neste tutorial, aprendemos como realizar instalações Debian autônomas (ou semi-autônomas) e replicáveis usando um arquivo de pré-configuração. Os arquivos pré-configurados contêm respostas às perguntas feitas pelo instalador Debian, de forma semelhante às configurações Kickstart para distribuições que usam o instalador Anaconda, e “autoinstall” em versões recentes do Ubuntu. Vimos como obter um arquivo preseed de um sistema Debian já instalado e como criar uma configuração do zero. Finalmente, vimos como passar o arquivo preseed para o instalador Debian.