B.2. Utilizar o preseed

Primeiro tem de criar um ficheiro de pré-configuração e colocá-lo no local a partir de onde o pretende utilizar. A criação do ficheiro de pré-configuração é descrita mais á frente neste apêndice. Colocá-lo no local correto é razoavelmente simples para o preseed por rede ou se desejar, ler o ficheiro a partir de uma pen usb. Se desejar incluir o ficheiro numa imagem ISO de instalação, terá de reconstruir a imagem. Como ter o ficheiro de pré-configuração incluído no initrd está fora do âmbito deste documento; por favor consulte a documentação dos developers para o debian-installer.

Um exemplo de ficheiro de pré-configuração que pode utilizar como base para o seu próprio ficheiro de pré-configuração está disponível a partir de ../example-preseed.txt. Este ficheiro é baseado nos fragmentos de configuração incluídos neste apêndice.

B.2.1. Carregar o ficheiro de pré-configuração

Se estiver a utilizar o preseed por initrd tem apenas de certificar-se que um ficheiro chamado preseed.cfg foi incluído no diretório raiz do initrd. O instalador irá automaticamente verificar se este ficheiro está presente e carregá-lo.

Para os outros métodos de preseed tem de indicar ao instalador qual o ficheiro a utilizar quando arranca. Isto é normalmente feito ao passar um argumento de arranque ao kernel, ou manualmente no arranque do sistema ou ao editar o ficheiro de configuração do gestor de arranque (p.e. syslinux.cfg) e adicionar o parâmetro ao final da(s) linha(s) de "append" para o kernel.

Se especificar um ficheiro de pré-configuração na configuração do gestor de arranque, você pode alterar a configuração de modo a não precisar de carregar em enter para arrancar o instalador. Para o syslinux isto significa indicar o 'timeout' para 1 em syslinux.cfg.

Para ter a certeza que o instalador obtém o ficheiro de pré-configuração correto, opcionalmente pode especificar um checksum para esse ficheiro. Atualmente este tem de ser um 'md5sum', e se for especificado deve coincidir com o ficheiro de pré-configuração ou o instalador irá recusar-se a utilizá-lo.

Parâmetros de arranque a especificar:
- se estiver a arrancar pela rede:
  preseed/url=http://host/caminho/para/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d
- ou 
  preseed/url=tftp://host/caminho/para/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d

- se estiver a arrancar uma imagem de instalação reconstruída:
  preseed/file=/cdrom/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

- se estiver a instalar por um meio USB (coloque o
  ficheiro de pré-configuração no diretório raiz da pen USB):
  preseed/file=/hd-media/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

Note que quando são passados como parâmetros de arranque preseed/url pode ser abreviado para apenas url, preseed/file para file preseed/file/checksum para preseed-md5.

B.2.2. Utilizar parâmetros de arranque para fazer preseed a questões

Se um ficheiro de pré-configuração não puder ser utilizado para fazer preseed a algumas etapas, a instalação pode mesmo assim ser totalmente automatizada, pois pode passar valores de preseed na linha de comandos quando arrancar o instalador.

Os parâmetros de arranque também podem ser utilizados se não quiser mesmo utilizar o preseed, mas apenas quiser fornecer uma resposta a uma questão específica. Alguns exemplos onde isto pode ser útil estão documentados noutro local deste manual.

Para definir um valor para ser utilizado dentro do debian-installer, passe apenas caminho/para/variável=valor para quaisquer das variáveis de preseed listadas nos exemplos neste apêndice. Se um valor é para ser utilizado para configurar pacotes para o sistema alvo, terá de acrescentar antes o dono[19] da variável como em dono:caminho/para/variável=valor. Se não especificar o dono, o valor da variável não será copiado para a base de dados debconf no sistema alvo e assim ficará por utilizar durante a configuração do pacote relevante.

Normalmente, fazer preseed, desta forma, a uma questão significa que a questão não será colocada. Para definir um valor por omissão específico para uma questão, mas mesmo assim a questão ser colocada, utilize ?= como operados em vez de =. Veja também a Secção B.5.2, “Utilizar o preseed para alterar valores predefinidos”.

Note que algumas variáveis que são frequentemente definidas na linha de comandos de arranque têm uma abreviatura. Se estiver disponível uma abreviatura, será utilizada nos exemplos deste apêndice em vez da variável completa. Por exemplo, a variável preseed/url tem a abreviatura url. Outro exemplo é a abreviatura tasks, que se traduz como tasksel:tasksel/first.

Um --- nas opções de arranque tem um significado especial. Os parâmetros do kernel que aparecem depois do último --- podem ser copiados para a configuração do gestor de arranque no sistema instalado (se for suportado pelo instalador para o gestor de arranque). O instalador irá filtrar automaticamente quaisquer opções (tais como opções de pré-configuração) que reconheça.

[Nota] Nota

Os kernel atuais (2.6.9 e posteriores) aceitam um máximo de 32 argumentos pela linha de comandos e 32 variáveis de ambiente, incluindo quaisquer opções acrescentadas por predefinição ao instalador. Se estes números forem excedidos, o kernel irá fazer "panic" (estourar). (Para kernels anteriores, estes números eram mais baixos.)

Para a maioria das instalações algumas das escolhas por omissão no ficheiro de configuração do bootlader, como por exemplo vga=normal, podem ser removidas de forma segura e irá permitir adicionar mais opções para o preseeding.

[Nota] Nota

Pode não ser sempre possível especificar valores com espaços para os parâmetros de arranque, mesmo que os delimite com aspas.

B.2.3. Modo Auto

Existem várias funcionalidades do Instalador de Debian que se combinam para permitirem linhas de comandos simples na linha de comandos de arranque para resultarem em complexas instalações personalizadas automáticas.

Isto é ativado ao escolher no arranque a opção Automated install, também chamada de auto em algumas arquiteturas ou métodos de arranque. Nesta seção, auto não é um parâmetro, significa escolher essa opção de arranque, e acrescentar os seguintes parâmetros de arranque na linha de comandos de arranque. Veja a Secção 5.1.5, “Um Ecrã de Arranque” para informações acerca de como acrescentar um parâmetro de arranque.

Para ilustrar isto, aqui estão alguns exemplos que podem ser utilizados na linha de comandos de arranque:

auto url=autoserver

Isto baseia-se na existência de um servidor de DHCP que levará a máquina ao ponto em que o autoserver possa ser resolvido pelo DNS, talvez após acrescentar o domínio local se isso foi disponibilizado pelo DHCP. Se isto foi feito num sitio onde o domínio é example.com, e isto resultar numa configuração de DHCP razoavelmente sã, isto iria resultar no ficheiro de preseed ser obtido em http://autoserver.example.com/d-i/trixie/./preseed.cfg.

A última parte desse url (d-i/trixie/./preseed.cfg) é retirada de auto-install/defaultroot. Por predefinição inclui o diretório trixie para permitir que futuras versões especifiquem o seu próprio nome de código para deixar as pessoas migrar para o seguinte de uma forma controlada. A parte do /./ é utilizada para indicar uma raiz relativa à qual possam ser ancorados caminhos subsequentes (para utilizar em preseed/include e preseed/run). Isto permite que os ficheiros sejam especificados quer como URLs completos, caminhos que começam por / que estão assim ancorados, ou mesmo como caminhos relativos à localização onde foi encontrado o último ficheiro preseed. Isto pode ser utilizado para construir scripts mais portáveis onde uma hierarquia completa de scripts pode ser movida sem estragar nada, por exemplo copiar os ficheiros para uma pen USB quando estes começaram num servidor web. Neste exemplo, se o ficheiro de preseed define preseed/run para /scripts/late_command.sh então o ficheiro será obtido a partir de http://autoserver.example.com/d-i/trixie/./scripts/late_command.sh.

Se não existir uma infra-estrutura local de DHCP ou de DNS, ou se não desejar utilizar o caminho por omissão para o preseed.cfg, ainda assim pode utilizar um url explícito, e se não utilizar o elemento /./ será ancorado ao inicio do caminho (i.e. o terceiro / no URL). Está aqui um exemplo que necessita de suporte mínimo da estrutura de rede local:

auto url=http://192.168.1.2/path/to/mypreseed.file

A forma como funciona isto é:

  • se faltar o protocolo ao URL, é assumido http,

  • se a seção do hostname não tiver pontos finais, é acrescentado o domínio derivado de DHCP, e

  • se não existir nenhum / depois do hostname, então é acrescentado o caminho predefinido.

Além de especificar o url, também pode especificar configurações que não afetam diretamente o comportamento do próprio debian-installer, mas podem ser passadas através de scripts especificados utilizando preseed/run no ficheiro preseed carregado. Atualmente, o único exemplo disto é auto-install/classes, que tem uma abreviatura classes. Isto pode ser utilizado da seguinte forma:

auto url=example.com classes=class_A;class_B

As classes podem por exemplo denotar o tipo de sistema a ser instalado, ou a localização a ser utilizada.

Claro que é possível estender este conceito, e se o fizer, é razoável utilizar o namespace auto-install para isto. Por isso poderá ter algo do tipo auto-install/style que é então utilizado nos seus scripts. Se achar que necessita de fazer isto, por favor mencione-o na mailing list para que nós possamos evitar conflitos de namespace, e talvez acrescentar um alias ao parâmetro para si.

A escolha de arranque auto ainda não está definida em todas as arquiteturas. O mesmo efeito pode ser alcançado ao simplesmente acrescentar os dois parâmetros auto=true priority=critical à linha de comandos do kernel. O parâmetro do kernel auto é uma abreviatura para auto-install/enable e defini-lo como true atrasa as questões do locale e do teclado até que exista a possibilidade de fazer preseed a estas, enquanto que priority é uma abreviatura para debconf/priority e defini-la como critical previne que sejam colocadas quaisquer questões com prioridade inferior.

Opções adicionais que podem ter interesse enquanto tenta automatizar uma instalação enquanto utilizar DHCP são: interface=auto netcfg/dhcp_timeout=60 que faz com que a máquina escolha a primeira placa de rede viável e seja mais paciente com a espera da resposta ao seu pedido DHCP.

[Dica] Dica

Em exemplo extensivo acerca de como utilizar esta plataforma de trabalho, incluindo scripts e classes de exemplo, pode ser encontrado no website do developer. Os exemplos disponíveis também mostram muitos outros efeitos agradáveis que podem ser alcançados através do uso criativo da pré-configuração.

B.2.4. Abreviaturas úteis com o preseed

Os seguintes aliases podem ser úteis ao utilizar (modo auto) preseeding. Note que estes são apenas abreviaturas para os nomes das questões, e você tem também de especificar sempre um valor: por exemplo, auto=true ou interface=eth0.

priority debconf/priority
fb debian-installer/framebuffer
auto auto-install/enable
classes auto-install/classes
ficheiro preseed/file
url preseed/url
theme debian-installer/theme
language debian-installer/language
country debian-installer/country
locale debian-installer/locale
keymap keyboard-configuration/xkb-keymap
modules anna/choose_modules
firmware hw-detect/firmware-lookup
interface netcfg/choose_interface
domain netcfg/get_domain
hostname    netcfg/get_hostname
protocol mirror/protocol
suite mirror/suite
recommends base-installer/install-recommends
tasks tasksel:tasksel/first
desktop tasksel:tasksel/desktop
preseed-md5 preseed/file/checksum

B.2.5. Exemplos de preseeding pela linha de comandos de arranque

Aqui estão alguns exemplos de como parecer a linha de comandos (terá de adaptar isto à sua necessidade; veja também a Secção 5.1.5, “Um Ecrã de Arranque”).

Para definir Português como linguagem e Portugal como país:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz language=pt country=PT --- quiet
# Para definir Inglês como linguagem e Português como país e utilizar uma disposição de teclado de Português:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz language=en country=PT locale=en_US.UTF-8 keymap=pt --- quiet
# Para instalar o ambiente de trabalho MATE:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz desktop=mate-desktop --- quiet
# Para instalar a tarefa web-server:
/install.amd/vmlinuz initrd=/install.amd/initrd.gz tasksel:tasksel/first=web-server ---

B.2.6. Utilizar um servidor de DHCP para especificar ficheiros de pré-configuração

Também é possível utilizar DHCP para especificar um ficheiro de pré-configuração a fazer download a partir da rede. DHCP permite especificar um nome de ficheiro. Normalmente este é um ficheiro para fazer netboot, mas se for um URL então o meio de instalação que suporte preseed através da rede irá fazer o download do ficheiro a partir do URL e utilizá-lo como ficheiro de pré-configuração. Aqui está um exemplo de como configurar o dhcpd.conf para a versão 3 do servidor ISC DHCP (o pacote Debian isc-dhcp-server).

if substring (option vendor-class-identifier, 0, 3) = "d-i" {
    filename "http://host/preseed.cfg";
}

Note que o exemplo acima limita este ficheiro a clientes DHCP que se identifiquem a eles próprios como d-i, por isso não irá afetar clientes DHCP normais, mas apenas o instalador. Pode também colocar o texto num bloco para apenas um host, para evitar que seja feito preseed a todas as instalações na sua rede.

Uma boa forma de utilizar o preseed de DHCP é fazer o preseed apenas de valores específicos para a sua rede, tais como o mirror Debian a utilizar. Desta forma as instalações na sua rede irão sempre obter uma boa escolha de mirror, mas o resto da instalação pode ser feita interativamente. Utilizar o preseed de DHCP para automatizar totalmente as instalações de Debian deve ser feito com cuidado.



[19] O dono da variável debconf (ou template) é normalmente o nome do pacote que contém o correspondente template debconf. Para variáveis utilizadas no próprio instalador o dono é d-i. Os templates e variáveis podem ter mais de um dono que ajuda a determinar se podem ser removidos da base de dados debconf se o pacote tiver sido purgado.