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