Automatizando a instalação usando pré-configuração
Este apêndice explica os meandros da pré-configuração de respostas para questões
do &d-i; para automatizar sua instalação.
Os fragmentos de configuração usados neste apêndice estão também disponíveis
como arquivos-exemplo de pré-configuração em &urlset-example-preseed;.
Introdução
A pré-configuração provê um meio para definir respostas para perguntas sem ter
que entrar respostas durante a instalação. Isto faz possível automatizar
totalmente muitos tipos de instalações e também oferece alguns recursos não
disponíveis durante a instalação normal.
Usando pré-configurações é possível preencher respostas para perguntas feitas
tanto no primeiro estágio da instalação (antes de reiniciar no novo sistema)
como no segundo estágio.
Métodos de pré-configuração
Existem três métodos que podem ser usados para pré-configuração:
initrd, file e
network. Pré-configuração initrd funciona com qualquer
método de instalação e suporta pré-configuração de mais coisas, mas isto requer
maior preparação. Pré-configuração file e network podem ser utilizados com
diferentes métodos de instalação. Com pré-configuração file e network as
primeiras questões não podem ser pré-configuradas porque a pré-configuração
file somente é carregada após a questão ser exibida.
A tabela a seguir mostra os métodos de pré-configuração que podem ser utilizados
com cada método de instalação.
Método de Instalaçãoinitrd
filenetwork
CD/DVD
sim
sim
não
netboot
sim
não
sim
hd-media (incluindo usb-stick)
sim
sim
não
floppy based (cd-drivers)
sim
sim
não
floppy based (net-drivers)
sim
não
sim
generic/tape
sim
não
sim
Uma importante diferença entre os métodos de pré-configuração é o ponto onde
o arquivo de pré-configuração é carregado e processado. Para a pré-configuração
initrd é logo no início da instalação, antes da primeira questão ser mostrada.
Para pré-configuração file é após o CD ou a imagem de CD ser carredada. Para
pré-configuração network é somente depois da rede ser configurada.
Em termos práticos isto quer dizer que para pré-configuração file e network as
questões sobre idioma, país e teclado já foram perguntadas. Para
pré-configuração network adicione à isto qualquer questão relacionada com as
configurações de rede. Algumas outras questões que são exibidas apenas em
prioridade média ou baixa (como a primeira execução da detecção de hardware)
também já terão sido executadas.
Obviamente, qualquer questão que venha a ser processada antes que o arquivo de
pré-configuração seja carregado, não poderá ser pré-configurada.
oferece uma forma de evitar que estas
questões sejam exibidas.
Limitações
Enquanto a maioria das questões usadas pelo &d-i; podem ser pré-configuradas
usando este método, aqui há algumas exceções dignas de nota. Você deve
re(particionar) o disco inteiro ou utilizar algum espaço livre disponível no
disco; não é possível usar partições existentes. Atualmente você não pode usar
pré-configuração para configurar RAID e LVM.
Executando comandos personalizados durante a instalação
Uma poderosa e flexível opção oferecida pelas ferramentas de pré-configuração é
a habilidade de executar comandos ou scripts em certos pontos na instalação.
Veja para detalhes.
preseed/early_command: é executado assim que o arquivo
de pré-configuração é carregado
preseed/late_command: é executado antes de reiniciar
ao final do primeiro estágio da instalação, mas antes do sistema de arquivos
/target ser desmontado
base-config/early_command: é executado no início do
segundo estágio da instalação quando base-config é iniciado
base-config/late_command: é executado ao final do
base-config, logo antes do prompt de login
Usando pré-configuração para mudar valores padrão
É possível usar pré-configuração para mudar a resposta padrão para uma pergunta,
mas mantendo a exibição da pergunta. Para isso o marcador
seen deve ser redefinido para false
após
definir o valor para o modelo.
d-i foo/bar string value
d-i foo/bar seen false
Usando pré-configuração
É claro que primeiro você precisa criar um arquivo de pré-configuração e colocar
em um local onde você possa usar. A criação do arquivo de pré-configuração é
coberto mais tarde neste apêndice. Colocar no local correto é essencial para
pré-configuração por rede ou se você quiser ler o arquivo de um disquete ou de
um usb-stick
. Se você quiser incluir o arquivo em um CD ou DVD,
você deve recriar a imagem ISO. Como ter o arquivo de pré-configuração incluído
no initrd está fora do escopo deste documento; por favor consulte a documentação
para desenvolvedores do &d-i;.
Um exemplo de arquivo de pré-configuração que você pode usar como base para o
seu arquivo de pré-configuração está disponível em &urlset-example-preseed;.
Este arquivo é baseado nos fragmentos de configuração incluídos neste apêndice.
Lendo o arquivo de pré-configuração
Se estiver usando pré-configuração initrd, você deve se assegurar que o arquivo
com nome preseed.cfg está incluído no diretório raiz do
initrd. O instalador irá automaticamente checar se o arquivo está presente e o
carrega.
Para outros métodos de pré-configuração você tem que dizer ao instalador qual
arquivo usar quando você o iniciar. Isto é feito passando para o kernel um
parâmetro de inicialização, tanto manualmente no momento da inicialização como
editando o arquivo de configuração do bootloader, (ex.: syslinux.cfg
) e adicionando o parâmetro no final da(s) linha(s) append do kernel.
Se você especificar o arquivo de pré-configuração na configuração do bootloader,
você pode mudar a configuração para não precisar apertar enter para carregar o
instalador. Para o syslinux isso significa marcar o timeout para 1 no
syslinux.cfg.
Para ter certeza que o instalador pegou o arquivo de pré-configuração certo,
você pode opcionalmente especificar um checksum para o arquivo. Atualmente isto
precisa ser um md5sum, e se especificado deve coincidir com o arquivo de
pré-configuração ou o instalador se recusará a usá-lo.
Parâmetros de inicialização à especificar:
- se estiver iniciando pela rede:
preseed/url=http://host/path/to/preseed.cfg
preseed/url/checksum=5da499872becccfeda2c4872f9171c3d
- se estiver iniciando por um CD recriado:
preseed/file=/cdrom/preseed.cfg
preseed/file/checksum=5da499872becccfeda2c4872f9171c3d
- se estiver instalando por uma mídia USB (coloque o arquivo de pré-configuração
no diretório de primeiro nível do USB stick
):
preseed/file=/hd-media/preseed.cfg
preseed/file/checksum=5da499872becccfeda2c4872f9171c3d
Nesse momento, você pode querer adicionar um parâmtero de inicialização
debconf/priority=critical. Isto evita a maioria das
perguntas mesmo que a pré-configuração acima perca alguma.
Usando parâmetros de inicialização para complementar a pré-configuração
Algumas partes do processo de instalação não podem ser automatizadas usando
algumas formas de pré-configuração porque as perguntas são feitas antes do
arquivo de pré-configuração ser carregado. Por exemplo, se o arquivo de
pré-configuração for baixado pela rede, a configuração da rede deve ser feita
primeiro. Uma razão para usar pré-configuração initrd é que ele permite a
pré-configuração destes primeiros passos do processo de instalação.
Se um arquivo de pré-configuração não puder ser usado para pré-configurar alguns
passos, a instalação ainda pode ser totalmente automatizada, desde que você
passe os parâmetros de pré-configuração para o kernel na linha de comando.
Apenas passe path/to/var=value para qualquer uma das
variáveis de pré-configuração listada nos exemplos.
O kernel 2.4 aceita no máximo 8 opções de linha de comando e 8 opções de
ambiente (incluindo qualquer opção adicionada por padrão para o instalador).
Se esses números forem excedidos, os kernels 2.4 irão descartar quaisquer opções
excedentes e os kernels 2.6 vão sofrer kernel panic
. Para o
kernel 2.6.9 e posteriores, você pode usar 32 opções de linha de comando e 32
opções de ambiente.
Para a maioria das instalações algumas das opções padrão no seu arquivo de
configuração do bootloader, como 'vga=normal', pode ser removida com segurança
permitindo que você adicione mais opções na pré-configuração.
Não é possivel especificar valores com espaços para os parâmetros de
inicialização, mesmo que você os delimite com aspas.
Criando um arquivo de pré-configuração
O arquivo de pré-configuração tem o formato usado pelo comando
debconf-set-selections.
Formato de arquivo
Somente um único espaço é permitido entre o tipo de modelo e o valor
Relação entre /var/lib/(c)debconf/templates
Tipos de modelos e como prover valores para ele
A maioria dos valores necessitam estar em Inglês ou códigos
Usando uma instalação manual como base
Encontrando outros valores possíveis
Para verificar se o formato do seu arquivo de pré-configuração é válido antes de
fazer uma instalação, você pode usar o comando
debconf-set-selections -c preseed.cfg
.
Pré-configurando o primeiro estágio da instalação
Os fragmentos de configuração usados neste apêndice estão também disponíveis
como exemplo de arquivo de pré-configuração em &urlset-example-preseed;.
Note que este exemplo é baseado em uma instalação para arquitetura Intel x86,
alguns exemplos (como seleção de teclado e instalação de bootloader) talvez não
sejam relevantes e deverão ser trocados pelas opções do debconf apropriadas para
a sua arquitetura.
Localização
Valores de opções de localização somente funcionarão se usar pré-configuração
initrd. Com todos os outros métodos o arquivo de pré-configuração somente pode
ser carregado após essas perguntas serem apresentadas.
O locale
pode ser usado para especificar tanto o idioma quanto o
país. Para especificar o locale
como parâmetro de inicialização,
use debian-installer/locale=pt_BR
.
# Locale sets language and country.
d-i debian-installer/locale string pt_BR
A configuração de teclado consiste na seleção da arquitetura do teclado e do
mapa de teclas. Na maioria dos casos a arquitetura de teclado correta é
selecionada por padrão, então normalmente não é necessário pré-configurar. O
mapa de teclas deve ser válido para a arquitetura de teclado selecionada.
# Keyboard selection.
#d-i console-tools/archs select at
d-i console-keymaps-at/keymap select us
# Example for a different keyboard architecture
#d-i console-keymaps-usb/keymap select mac-usb-us
Para pular a pré-configuração de teclado
console-tools/archs com
skip-config.
Isto resultará em manter ativo o mapa de teclas do kernel
As mudanças na camada de entrada para os kernels 2.6 tornaram a arquitetura
de teclado virtualmente obsoleta. Para os kernels 2.6 normalmente o mapa de
teclas PC
(at) pode ser selecionado.
Configuração de rede
É claro, pré-configurar a rede não funciona se seu arquivo de pré-configuração
for carregado pela rede. Mas é bom quando você inicializa através de CD ou USB
stick. Se você estiver carregando os arquivos de pré-configuração pela rede,
você pode passar os parâmetros da configuração de rede usando os parâmetros de
inicialização do kernel.
# netcfg will choose an interface that has link if possible. This makes it
# skip displaying a list if there is more than one interface.
d-i netcfg/choose_interface select auto
# If you have a slow dhcp server and the installer times out waiting for
# it, this might be useful.
#d-i netcfg/dhcp_timeout string 60
# If you prefer to configure the network manually, here's how:
#d-i netcfg/disable_dhcp boolean true
#d-i netcfg/get_nameservers string 192.168.1.1
#d-i netcfg/get_ipaddress string 192.168.1.42
#d-i netcfg/get_netmask string 255.255.255.0
#d-i netcfg/get_gateway string 192.168.1.1
#d-i netcfg/confirm_static boolean true
# Any hostname and domain names assigned from dhcp take precedence over
# values set here. However, setting the values still prevents the questions
# from being shown, even if values come from dhcp.
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
# Disable that annoying WEP key dialog.
d-i netcfg/wireless_wep string
# The wacky dhcp hostname that some ISPs use as a password of sorts.
#d-i netcfg/dhcp_hostname string radish
Definição do mirror
Dependendo do método de instalação que você usar, um espelho pode ser usado
para baixar componentes adicionais para o instalador, sistema base e para
configurar o /etc/apt/sources.list para o sistema
instalado.
O parâmetro mirror/suite determina o conjunto para
o sistema instalado.
O parâmetro mirror/udeb/suite determina o conjunto para
componentes adicionais do instalador. Isto só é útil configurar se os
componentes são baixados pela rede e equivalem ao conjunto que é usado para
construir o initrd para o método de instalação usado para a instalação.
Por padrão o valor para mirror/udeb/suite é o mesmo que
mirror/suite.
d-i mirror/country string enter information manually
d-i mirror/http/hostname string http.us.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
# Suite to install.
#d-i mirror/suite string testing
# Suite to use for loading installer components (optional).
#d-i mirror/udeb/suite string testing
Particionando
Usar pré-configuração para particionar o disco rígido é muito limitado pelo que
é suportado pelopartman-auto. Você pode escolher tanto
particionar um espaço existente no disco ou o disco inteiro. O layout do disco
pode ser determinado por uma receita pré-definida, uma receita modificada de um
arquivo de receita ou uma receita incluída no arquivo de pré-configuração.
Atualmente não é possível particionar múltiplos discos usando pré-configuração
nem configurar RAID ou LVM.
A identificação dos discos é dependente da ordem em que os drivers são
carregados. Se houverem múltiplos discos no sistema, tenha certeza de que
o correto será selecionado antes de usar a pré-configuração.
# If the system has free space you can choose to only partition that space.
#d-i partman-auto/init_automatically_partition \
# select Use the largest continuous free space
# Alternatively, you can specify a disk to partition. The device name can
# be given in either devfs or traditional non-devfs format.
# For example, to use the first disk devfs knows of:
d-i partman-auto/disk string /dev/discs/disc0/disc
# You can choose from any of the predefined partitioning recipes:
d-i partman-auto/choose_recipe \
select All files in one partition (recommended for new users)
#d-i partman-auto/choose_recipe \
# select Separate /home partition
#d-i partman-auto/choose_recipe \
# select Separate /home, /usr, /var, and /tmp partitions
# Or provide a recipe of your own...
# The recipe format is documented in the file devel/partman-auto-recipe.txt.
# If you have a way to get a recipe file into the d-i environment, you can
# just point at it.
#d-i partman-auto/expert_recipe_file string /hd-media/recipe
# If not, you can put an entire recipe the preseed file in one (logical)
# line. This example creates a small /boot partition, suitable swap, and
# uses the rest of the space for the root partition:
#d-i partman-auto/expert_recipe string \
# boot-root :: \
# 40 50 100 ext3 \
# $primary{ } $bootable{ } \
# method{ format } format{ } \
# use_filesystem{ } filesystem{ ext3 } \
# mountpoint{ /boot } \
# . \
# 500 10000 1000000000 ext3 \
# method{ format } format{ } \
# use_filesystem{ } filesystem{ ext3 } \
# mountpoint{ / } \
# . \
# 64 512 300% linux-swap \
# method{ swap } format{ } \
# .
# This makes partman automatically partition without confirmation.
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition \
select Finish partitioning and write changes to disk
d-i partman/confirm boolean true
Configurar relógio e fuso horário
# Controls whether or not the hardware clock is set to UTC.
d-i clock-setup/utc boolean true
# You may set this to any valid setting for $TZ; see the contents of
# /usr/share/zoneinfo/ for valid values.
d-i time/zone string US/Eastern
Configurar o apt
Configurar o /etc/apt/sources.list e as opções básicas de
configuração é totalmente automatizada baseado no seu método de instalação e
nas respostas das últimas questões. Somente duas variáveis abaixo são relevantes
para pré-configuração.
# You can choose to install non-free and contrib software.
#d-i apt-setup/non-free boolean true
#d-i apt-setup/contrib boolean true
Configurar contas
A senha para a conta root e o nome e senha para a primeira conta de usuário
regular podem ser pré-configuradas. Para senhas você pode usar tanto texto
plano quanto hashes MD5.
Fique avisado que pré-configurar senhas não é completamente seguro já que
qualquer um com acesso ao arquivo de pré-configuração terá conhecimento destas
senhas. Usar hashes MD5 é considerado um pouco melhor em termos de segurança,
mas isso pode dar uma falsa sensação de segurança já que o acesso ao hash MD5
permite ataques de força bruta.
# Root password, either in clear text
#passwd passwd/root-password password r00tme
#passwd passwd/root-password-again password r00tme
# or encrypted using an MD5 hash.
#passwd passwd/root-password-crypted password [MD5 hash]
# Skip creation of a normal user account.
#passwd passwd/make-user boolean false
# Alternatively, create a normal user account.
#passwd passwd/user-fullname string Debian User
#passwd passwd/username string debian
# Normal user's password, either in clear text
#passwd passwd/user-password password insecure
#passwd passwd/user-password-again password insecure
# or encrypted using an MD5 hash.
#passwd passwd/user-password-crypted password [MD5 hash]
As variáves passwd/root-password-crypted e
passwd/user-password-crypted também podem ser usadas com
!
como valor. Neste caso, a conta correspondente é desabilitada.
Isto é conveniente para a conta root, prevendo é claro um método alternativo
para permitir atividades administrativas ou login do root (por enquanto usando
chave SSH ou sudo).
Um hash MD5 para senha pode ser gerado com o seguinte comando.
$ echo "r00tme" | mkpasswd -s -H MD5
Instalação do carregador de inicialização
# Grub is the default boot loader (for x86). If you want lilo installed
# instead, uncomment this:
#d-i grub-installer/skip boolean true
# This is fairly safe to set, it makes grub install automatically to the MBR
# if no other operating system is detected on the machine.
d-i grub-installer/only_debian boolean true
# This one makes grub-installer install to the MBR if if finds some other OS
# too, which is less safe as it might not be able to boot that other OS.
d-i grub-installer/with_other_os boolean true
# Alternatively, if you want to install to a location other than the mbr,
# uncomment and edit these lines:
#d-i grub-installer/bootdev string (hd0,0)
#d-i grub-installer/only_debian boolean false
#d-i grub-installer/with_other_os boolean false
Terminando o primeiro estágio da instalação
# Avoid that last message about the install being complete.
d-i prebaseconfig/reboot_in_progress note
# This will prevent the installer from ejecting the CD during the reboot,
# which is useful in some situations.
#d-i cdrom-detect/eject boolean false
Pré-configurando o segundo estágio da instalação
Configuração base
# Avoid the introductory message.
base-config base-config/intro note
# Avoid the final message.
base-config base-config/login note
# If you installed a display manager, but don't want to start it immediately
# after base-config finishes.
#base-config base-config/start-display-manager boolean false
# Some versions of the installer can report back on what you've installed.
# The default is not to report back, but sending reports helps the project
# determine what software is most popular and include it on CDs.
#popularity-contest popularity-contest/participate boolean false
Seleção de pacotes
Você pode escolher qualquer combinação de tarefas disponíveis.
Tarefas disponíveis enqüanto isto é escrito incluem:
Standard system
Desktop environment
Web server
Print server
DNS server
File server
Mail server
SQL database
Laptop
manual package selection
O último deles executa o aptitude. Você pode também escolher não instalar
nenhuma tarefa, e forçar a instalação de um conjunto de pacotes de algum outro
modo. Nós recomendamos sempre incluir a tarefa
Standard system.
tasksel tasksel/first multiselect Standard system, Desktop environment
#tasksel tasksel/first multiselect Standard system, Web server
Configuração de correio eletrônico
Durante uma instalação normal, o exim faz algumas perguntas. Aqui está como
evitá-las. Pré-configurações mais complicadas são possíveis.
exim4-config exim4/dc_eximconfig_configtype \
select no configuration at this time
exim4-config exim4/no_config boolean true
exim4-config exim4/no_config boolean true
exim4-config exim4/dc_postmaster string
Configuração do X
Pré-configurar o X do Debian é possível, mas você provavelmente precisa saber
alguns detalhes sobre o hardware de vídeo da máquina, já que o configurador X
do debian não faz configuração automática completa de tudo.
# X can detect the right driver for some cards, but if you're preseeding,
# you override whatever it chooses. Still, vesa will work most places.
#xserver-xfree86 xserver-xfree86/config/device/driver select vesa
# A caveat with mouse autodetection is that if it fails, X will retry it
# over and over. So if it's preseeded to be done, there is a possibility of
# an infinite loop if the mouse is not autodetected.
#xserver-xfree86 xserver-xfree86/autodetect_mouse boolean true
# Monitor autodetection is recommended.
xserver-xfree86 xserver-xfree86/autodetect_monitor boolean true
# Uncomment if you have an LCD display.
#xserver-xfree86 xserver-xfree86/config/monitor/lcd boolean true
# X has three configuration paths for the monitor. Here's how to preseed
# the "medium" path, which is always available. The "simple" path may not
# be available, and the "advanced" path asks too many questions.
xserver-xfree86 xserver-xfree86/config/monitor/selection-method \
select medium
xserver-xfree86 xserver-xfree86/config/monitor/mode-list \
select 1024x768 @ 60 Hz
Pré-configurando outros pacotes
# Depending on what software you choose to install, or if things go wrong
# during the installation process, it's possible that other questions may
# be asked. You can preseed those too, of course. To get a list of every
# possible question that could be asked during an install, do an
# installation, and then run these commands:
# debconf-get-selections --installer > file
# debconf-get-selections >> file
Opções avançadas
Comandos shell
# d-i preseeding is inherently not secure. Nothing in the installer checks
# for attempts at buffer overflows or other exploits of the values of a
# preseed file like this one. Only use preseed files from trusted
# locations! To drive that home, and because it's generally useful, here's
# a way to run any shell command you'd like inside the installer,
# automatically.
# This first command is run as early as possible, just after
# preseeding is read.
#d-i preseed/early_command string anna-install some-udeb
# This command is run just before the install finishes, but when there is
# still a usable /target directory.
#d-i preseed/late_command string echo foo > /target/etc/bar
# This command is run just as base-config is starting up.
#base-config base-config/early_command string echo hi mom
# This command is run after base-config is done, just before the login:
# prompt. This is a good way to install a set of packages you want, or to
# tweak the configuration of the system.
#base-config base-config/late_command \
# string apt-get install zsh; chsh -s /bin/zsh
Carregamento em corrente de arquivos de pré-configuração
É possível incluir outros arquivos de pré-configuração de um arquivo de
pré-configuração. Quaisquer configurações nesses arquivos irão sobrescrever
configurações pré-existentes nos arquivos lidos anteriormente. Isto faz possível
colocar, por exemplo, configurações gerais de rede para o seu local em um
arquivo e configurações mais específicas em outro arquivo.
# More that one file can be listed, separated by spaces; all will be
# loaded. The included files can have preseed/include directives of their
# own as well. Note that if the filenames are relative, they are taken from
# the same directory as the preseed file that includes them.
#d-i preseed/include string x.cfg
# The installer can optionally verify checksums of preseed files before
# using them. Currently only md5sums are supported, list the md5sums
# in the same order as the list of files to include.
#d-i preseed/include/checksum string 5da499872becccfeda2c4872f9171c3d
# More flexibly, this runs a shell command and if it outputs the names of
# preseed files, includes those files.
#d-i preseed/include_command \
# string echo if [ "`hostname`" = bob ]; then echo bob.cfg; fi