Product SiteDocumentation Site

12.3. Instalação Automatizada

Os administradores da Falcot Corp, como muitos administradores de grandes serviços de TI, precisam de ferramentas para instalar (ou reinstalar) rapidamente, e automaticamente se possível, suas novas máquinas.
Essas exigências podem ser atendidas por uma ampla gama de soluções. Por um lado, ferramentas genéricas como a SystemImager lidam com isso criando uma imagem baseada em uma máquina modelo, e então, implantam essa imagem nos sistemas alvo; no extremo oposto do espectro, o instalador Debian padrão pode ser pré alimentado com um arquivo de configuração contendo as repostas das questões perguntadas durante o processo de instalação. Como um tipo de meio termo, uma ferramenta híbrida como a FAI (Fully Automatic Installer) instala máquinas usando o sistema de empacotamento, mas ela também usa sua própria infraestrutura para tarefas que são mais específicas para implantações em massa (como iniciação, particionamento, configuração e assim por diante).
Cada uma dessas soluções tem seus prós e contras: o SystemImager trabalha de maneira independente de qualquer sistema de empacotamento em particular, o que permite a ele gerenciar grandes conjuntos de máquinas usando várias distribuições Linux distintas. Ele também inclui um sistema de atualização que não requer uma reinstalação, mas esse sistema de atualização só será confiável se as máquinas não forem modificadas de forma independente; em outras palavras, o usuário não pode atualizar nenhum software por conta própria, ou instalar qualquer outro software. De maneira similar, atualizações de segurança não podem ser automatizadas, porque elas tem que passar pela imagem de referência centralizada mantida pelo SystemImager. Essa solução também requer que as máquinas alvo sejam homogêneas, caso contrário muitas imagens diferentes teriam que ser mantidas e gerenciadas (uma imagem i386 não caberia em uma máquina powerpc, e assim por diante).
Por outro lado, uma instalação automatizada usando o debian-installer pode ser adaptada para as especificações de cada máquina: o instalador irá buscar o núcleo apropriado e pacotes de software nos repositórios relevantes, detectar o hardware disponível, particionar todo o disco rígido para tirar vantagem de todo o espaço disponível, instalar o sistema Debian correspondente, e configurar um gerenciador de inicialização de maneira apropriada. Contudo, o instalador padrão irá apenas instalar as versões padrão do Debian, com o sistema base e um conjunto de "tarefas" pré selecionadas; isso exclui a instalação de um sistema específico com aplicações não empacotáveis. Preencher essa necessidade em particular requer customizar o instalador… Felizmente, o instalador é muito modular, e existem ferramentas para automatizar a maior parte do trabalho necessário para essa customização, a mais importante o simple-CDD (CDD sendo um acrônimo para Custom Debian Derivative). Mas mesmo a solução simple-CDD, entretanto, apenas lida com instalações iniciais; mas isso geralmente não é um problema, já que as ferramentas APT permitem uma implantação eficiente de atualizações posteriormente.
Nós iremos apenas dar uma olhada grosseira no FAI, e pular o SystemImager de uma vez (que não está mais no Debian), a fim de focar mais atentamente no debian-installer e simple-CDD, que são mais interessantes num contexto somente Debian.

12.3.1. Instalador Completamente Automático (FAI)

Instalador Completamente Automático (Fully Automatic Installer) é provavelmente o mais antigo sistema de implantação automatizada para Debian, o que explica seu status como uma referência; mas sua natureza muito flexível apenas compensa a complexidade que ele envolve.
O FAI requer um sistema de serivdor para armazenar informação da implantação e permitir que as máquinas alvo inicializem a partir da rede. Esse servidor requer o pacote fai-server (ou fai-quickstart, que também traz os elementos necessários para uma configuração padrão).
O FAI usa uma abordagem específica para definir os vários perfis instaláveis. Em vez de simplesmente duplicar uma instalação de referência, o FAI é um instalador de pleno direito (full-fledged), totalmente configurável através de um conjunto de arquivos e scripts armazenados no servidor; a localização padrão /srv/fai/config/ não é criado automaticamente, então o administrador precisa criá-lo juntamente com os arquivos relevantes. Na maioria das vezes, esses arquivos serão customizados a partir de arquivos exemplo disponíveis na documentação do pacote fai-doc, mais particularmente no diretório /usr/share/doc/fai-doc/examples/simple/.
Once the profiles are defined, the fai-setup command generates the elements required to start a FAI installation; this mostly means preparing or updating a minimal system (NFS-root) used during installation. An alternative is to generate a dedicated boot CD with fai-cd.
Para criar todos esses arquivos de configuração é necessário algum entendimento da maneira a qual o FAI funciona. Um processo de instalação típico é feito dos passos seguintes:
  • pegar um núcleo da rede, e iniciá-lo;
  • montar um sistema de arquivo raiz de um NFS;
  • executar /usr/sbin/fai, o qual controla o resto do processo (os próximos passos portanto são iniciados por este roteiro);
  • copiar o espaço de configuração do servidor para /fai/;
  • rodando fai-class. Os scripts /fai/class/[0-9][0-9]* são executados em turnos, e retornam nomes de “classes” que se aplicam a máquina que está sendo instalada; essa informação irá servir como base para as etapas seguintes. Isso permite alguma flexibilidade na definição de serviços a serem instalados e configurados.
  • buscando várias variáveis de configuração, dependendo das classes relevantes;
  • particionar os discos e formatar as partições com base nas informações fornecidas em /fai/disk_config/class;
  • montar essas partições;
  • instalar o sistema base;
  • preparar o banco de dados Debconf com fai-debconf;
  • buscar a lista de pacotes disponíveis para o APT;
  • instalar os pacotes listados em /fai/package_config/class;
  • executar os scripts de pós configuração, /fai/scripts/class/[0-9][0-9]*;
  • gravar os registros de instalação, desmontar as partições e reinicializar o computador.

12.3.2. Preseeding Debian-Installer

No final das contas, a melhor ferramenta para instalar sistemas Debian deve ser, logicamente, o instalador Debian oficial. Isso é porque, desde sua concepção, o debian-installer tem sido projetado para o uso automatizado, tirando vantagem da infraestrutura fornecida pelo debconf. Esse último permite, por um lado, reduzir o número de perguntas feitas (perguntas ocultas irão usar as respostas padrão fornecidas), e por outro lado, para fornecer respostas padrão separadamente, para que a instalação possa ser não-interativa. Essa última característica é conhecida como preseeding.

12.3.2.1. Usando um Arquivo Preseed

Existem vários lugares aonde o instalador pode obter um arquivo preseeding:
  • Dentro do initrd ,usado para iniciar a máquina; neste caso, o preseeding acontece bem no início da instalação, e todas as perguntas podem ser evitadas. O arquivo apenas precisa ser chamado preseed.cfg e armazenado dentro da raiz do initrd.
  • na mídia de inicialização (CD ou dispositivo USB); o preseeding então acontece assim que a mídia é montada, o que significa ser logo após as perguntas sobre idioma e layout do teclado. O parâmetro de inicialização preseed/file pode ser usado para indicar a localização do arquivo preseeding (por exemplo, /cdrom/preseed.cfg quando a instalação é feita por um CD-ROM, ou /hd-media/preseed.cfg no caso de um dispositivo USB).
  • a partir da rede; o preseeding então apenas acontece após a rede ser configurada (automaticamente); o parâmetro de inicialização relevante é então preseed/url=http://server/preseed.cfg.
De relance, incluir o arquivo preseeding dentro do initrd parece ser a solução mais interessante; no entanto, ela raramente é usada na prática, porque gerar um initrd instalador é bem complexo. As outras duas soluções são muito mais comuns, especialmente quando os parâmetros de inicialização fornecem outra maneira de fazer "preseed" das respostas para as primeiras perguntas do processo de instalação. A maneira usual de evitar o incômodo de digitar esses parâmetro de inicialização a manualmente a cada instalação é salvá-los na configuração do isolinux (no caso do CD-ROM) ou syslinux (dispositivo USB).

12.3.2.2. Criando um Arquivo Preseed

Um arquivo preseed é um arquivo de texto puro, aonde cada linha contém a resposta para uma pergunta do Debconf. A linha é dividida em quatro campos separados por espaço em branco (espaços ou tabs), com em, por exemplo, d-i mirror/suite string stable:
  • o primeiro campo é o “dono” da pergunta; “d-i” é usado para perguntas relevantes para o instalador, mas ele também pode ser um nome de pacote para perguntas vindas a partir de pacotes Debian;
  • o segundo campo é um identificador para a pergunta;
  • terceiro, o tipo de pergunta;
  • o quarto e último campo contém o valor para a resposta. Note que ele tem que ser separador do terceiro campo com um único espaço; se existir mais de um, os caracteres espaço seguintes serão considerados parte do valor.
A maneira mais simples de escrever um arquivo preseed é instalar o sistema manualmente. Então o debconf-get-selections --installer irá prover as respostas com relação ao instalador. Respostas sobre outros pacotes podem ser obtidas com debconf-get-selections. No entanto, uma solução mais limpa é escrever o arquivo preseed manualmente, iniciando a partir de um exemplo e da documentação de referência: com tal abordagem, apenas perguntas aonde a resposta padrão precisa ser sobrescrita podem se submeter ao preseeded; usando o parâmetro de inicialização priority=critical irá instruir o Debconf a apenas perguntar questões criticas, e usar a resposta padrão para as outras.

12.3.2.3. Criando uma Mídia de Inicialização Customizada

Saber aonde armazenar um arquivo preseed é muito bom, mas a localização não é tudo: é preciso, de uma forma ou de outra, alterar a mídia de inicialização de instalação para mudar os parâmetros de inicialização e adicionar o arquivo preseed.
12.3.2.3.1. Inicializando a Partir da Rede
When a computer is booted from the network, the server sending the initialization elements also defines the boot parameters. Thus, the change needs to be made in the PXE configuration for the boot server; more specifically, in its /tftpboot/pxelinux.cfg/default configuration file. Setting up network boot is a prerequisite; see the Installation Guide for details.
12.3.2.3.2. Preparando um Dispositivo USB Inicializável
Uma vez que um dispositivo inicializável tenha sido preparado (veja Seção 4.1.2, “Iniciando a partir de um pendrive”), algumas operações extras são necessárias. Assumindo que o conteúdo do dispositivo está disponível em /media/usbdisk/:
  • copiar o arquivo preseed para /media/usbdisk/preseed.cfg
  • editar /media/usbdisk/syslinux.cfg e adicionar os parâmetros de inicialização necessários (veja o exemplo abaixo).

Exemplo 12.2. arquivo syslinux.cfg e parâmetros preseeding

default vmlinuz
append preseed/file=/hd-media/preseed.cfg locale=en_US.UTF-8 keymap=us language=us country=US vga=788 initrd=initrd.gz  --
12.3.2.3.3. Criando uma Imagem de CD-ROM
Um dispositivo USB é uma mídia de leitura-escrita, então foi fácil para nós adicionar um arquivo lá e alterar alguns parâmetros. No caso do CD-ROM, a operação é mais complexa, já que nós precisamos refazer uma imagem ISO completa. Essa tarefa é feita pelo debian-cd, mas essa ferramenta é um pouco mais complicada de usar: ela precisa de um espelho local, e requer o entendimento de todas as opções fornecidas pelo /usr/share/debian-cd/CONF.sh; mesmo assim, o make tem que ser invocado várias vezes. /usr/share/debian-cd/README é, portanto, uma leitura muito recomendada.
Dito isso, o debian-cd sempre opera de maneira similar: um diretório “imagem” com o conteúdo exato do CD-ROM é gerado, e então convertido em um arquivo ISO com uma ferramental tal como a genisoimage, mkisofs ou xorriso. O diretório da imagem é finalizado após o passo make image-trees do debian-cd. Nesse ponto, nós inserimos o arquivo preseed dentro do diretório apropriado (usualmente $TDIR/$CODENAME/CD1/, $TDIR e $CODENAME sendo os parâmetros definidos pelo arquivo de configuração CONF.sh). O CD-ROM usa isolinux como seu carregador de inicialização, e seu arquivo de configuração tem que ser adaptado a partir do que o debian-cd gerou, a fim de inserir os parâmetros de inicialização necessários (o arquivo específico é $TDIR/$CODENAME/boot1/isolinux/isolinux.cfg). Então o processo “normal” pode ser retomado e nós podemos continuar a gerar a imagem ISO com make image CD=1 (ou make images se for para gerar vários CD-ROMs).

12.3.3. Simple-CDD: A Solução Tudo-Em-Um

Simplesmente usar um arquivo preseed não é o suficiente para preencher todos os requerimentos que possam aparecer em grandes implantações. Mesmo que seja possível executar alguns scripts no final de processos normais de instalação, a seleção de um conjunto de pacotes a instalar ainda não é muito flexível (basicamente, apenas “tarefas” podem ser selecionadas); mais importante, isso apenas permite a instalação de pacotes Debian oficiais e impede os gerados localmente.
Por outro lado, o debian-cd é capaz de integrar pacotes externos, e o debian-installer pode ser estendido através da inserção de novas etapas no processo de instalação. Pela combinação dessas capacidades, devesse ser possível criar um instalador customizado que preencha nossas necessidades; deve até ser possível configurar alguns serviços após o desempacotamento dos pacotes requeridos. Felizmente, isso não é mera hipótese, já que é exatamente isso que o Simple-CDD (do pacote simple-cdd) faz.
O propósito do Simple-CDD é permitir que qualquer um crie, com facilidade, uma distribuição derivada do Debian, pela seleção de um subconjunto dos pacotes disponíveis, pré configuração deles com o Debconf, adição de software específico, e execução de scripts customizados no final do processo de instalação. Isso confirma a filosofia “sistema operacional universal”, já que qualquer um pode adaptar o Debian à sua própria necessidade.

12.3.3.1. Criando Perfis

O Simple-CDD define “perfis” que coincidem com o conceito “classes” FAI e uma máquina pode ter vários perfis (determinados no momento da instalação). Um perfil é definido por um conjunto de arquivos profiles/profile.*:
  • o arquivo .description contém uma descrição de uma linha para o perfil;
  • o arquivo .packages lista os pacotes que irão ser instalados automaticamente caso o perfil seja selecionado;
  • o arquivo .downloads lista os pacotes que serão armazenados na mídia de instalação, mas não necessariamente instalados;
  • o arquivo .preseed contém as informações preseeding para as perguntas do Debconf (para o instalador e/ou para os pacotes);
  • o arquivo .postinst contém um script que será executado no final do processo de instalação;
  • por fim, o arquivo .conf permite alterar alguns parâmetros do Simple-CDD com base nos perfis a serem incluídos em uma imagem.
O perfil padrão tem uma função em particular, já que ele está sempre selecionado; el contém o mínimo necessário para o Simple-CDD funcionar. A única coisa que geralmente é customizada nesse perfil é o parâmetro preseed simple-cdd/profiles: isso permite evitar a pergunta, introduzida pelo Simple-CDD, sobre quais perfis instalar.
Note também que os comandos precisam ser invocados a partir do diretório pai do diretório profiles.

12.3.3.2. Configurando e Usando o build-simple-cdd

O Simple-CDD requer muitos parâmetros para operar plenamente. Eles irão, na maioria das vezes, estar reunidos em um arquivo de configuração, o qual pode ser informado ao build-simple-cdd com a opção --conf, mas eles também podem ser especificados via parâmetros dedicados dados ao build-simple-cdd. Aqui está uma visão geral de como esse comando se comporta, e como seus parâmetros são usados:
  • o parâmetro profiles lista os perfis que serão incluídos na imagem CD-ROM gerada;
  • com base na lista de pacotes requeridos, o Simple-CDD baixa os arquivos apropriados do servidor mencionado em server, e os reúne em um espelho parcial (que mais tarde será dado ao debian-cd);
  • os pacotes customizados mencionados em local_packages também são integrados neste espelho local;
  • o debian-cd é então executado (dentro de uma local padrão que pode ser configurada com a variável debian_cd_dir), com a lista de pacotes para integrar;
  • uma vez que o debian-cd tenha preparado seu diretório, o Simple-CDD aplica algumas mudanças nesse diretório:
    • arquivos contendo os perfis são adicionados em um subdiretório simple-cdd (que irá terminar no CD-ROM);
    • outros arquivos listados no parâmetro all_extras também são adicionados;
    • os parâmetros de inicialização são ajustados a fim de habilitar o preseeding. Perguntas com relação a idioma e país podem ser evitadas se a informação requerida está armazenada nas variáveis language e country.
  • o debian-cd então gera a imagem ISO final.

12.3.3.3. Gerando uma imagem ISO

Once we have written a configuration file and defined our profiles, the remaining step is to invoke build-simple-cdd --conf simple-cdd.conf. After a few minutes, we get the required image in images/debian-10-amd64-CD-1.iso.