Uma opção muito poderosa e flexível oferecida pelas ferramentas de pré-configuração é a habilidade de correr comandos ou scripts em certos pontos da instalação.
Quando for montado o sistema de ficheiros do sistema alvo, fica disponível em /target
. Se for utilizado um CD de instalação, quando for montado fica disponível em /cdrom
.
# O preseed do d-i é inerentemente não seguro. Nada no instalador verifica # se existem tentativas de buffer overflows ou outros exploits nos valores # de um ficheiro de pré-configuração como este. Utilize apenas ficheiros # de pré-configuração de proveniência de confiança! Para conseguir isso, # e porque normalmente é útil, aqui está uma forma de correr automaticamente # qualquer comando da shell que queira dentro do instalador. # Este primeiro comando é corrido tão cedo quanto possível, logo após o # preseed ter sido lido. #d-i preseed/early_command string anna-install some-udeb # Este comando é corrido imediatamente antes do particionador iniciar. # Poderá ser útil para aplicar preseeding dinâmico de particionamento que # dependa do estado dos discos (que poderá não ser visível quando corre # preseed/early_command). #d-i partman/early_command \ # string debconf-set partman-auto/disk "$(list-devices disk | head -n1)" # Este comando é corrido antes do instalador terminar, mas quando ainda # existe um directório /target utilizável. Pode fazer chroot a /target e # utilizá-lo diretamente, ou utilizar os comandos apt-get install e # in-target para instalar facilmente pacotes e correr comandos no sistema # alvo. #d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh
É possível utilizar o preseeding para alterar a resposta predefinida a uma questão, mas mesmo assim a questão será colocada. Para fazer isto tem de ser feito reset para “false” á flag seen após definir o valor para a questão.
d-i foo/bar string value d-i foo/bar seen false
Pode ser alcançado o mesmo efeito para todas as questões definindo na linha de comandos de arranque o parâmetro preseed/interactive=true
. Isto também pode ser útil para testar ou depurar o seu ficheiro de pré-configuração.
Note que o dono do “d-i” só deverá ser utilizado para variáveis utilizadas no próprio instalador. Para variáveis que pertençam a pacotes instalados no sistema alvo, deve utilizar antes esse nome. Veja a nota de rodapé da Secção B.2.2, “Utilizar parâmetros de arranque para fazer preseed a questões”.
Se está a fazer preseed utilizando parâmetros de arranque, pode fazer o instalador colocar a questão correspondente utilizando o operador “?=”, i.e.
(ou foo
/bar
?=valor
). Claro que isto só terá efeito para parâmetros que correspondam ás questões que são mostradas durante a instalação e não para parâmetros “internos”. dono
:foo/bar
?=valor
Para mais informações de depuração, utilize o parâmetro de arranque DEBCONF_DEBUG=5
. Isto irá fazer com que o debconf
escreva muito mais detalhe acerca das definições atuais de cada variável e acerca do progresso dos scripts de instalação de pacotes.
É possível incluir outros ficheiros de pré-configuração a partir de um ficheiro de pré-configuração. Quaisquer definições nesses ficheiros irão sobrepor-se às definições pré-existentes carregadas anteriormente. Isto torna possível pôr, por exemplo, definições gerais de rede para o seu local num ficheiro e mais definições específicas para certas configurações noutros ficheiros.
# Podem ser listados mais do que um ficheiro, separados por espaços; # todos serão carregados. Os ficheiros incluídos podem ter também eles # próprio diretivas de preseed/include. Note que se os nomes dos # ficheiros forem relativos, serão tirados do mesmo directório do ficheiro # de pré-configuração que os incluí. #d-i preseed/include string x.cfg # O instalador pode opcionalmente verificar os 'checksums' dos ficheiros de # pré-configuração antes de os utilizar. Atualmente apenas são # suportados md5sums, liste os md5sums na mesma ordem que a lista de # ficheiros a incluir. #d-i preseed/include/checksum string 5da499872becccfeda2c4872f9171c3d # De forma mais flexível, isto corre um comando da shell e se mostrar os # nome dos ficheiros de pré-configuração, inclui esses ficheiros. #d-i preseed/include_command \ # string if [ "`hostname`" = bob ]; then echo bob.cfg; fi # Da forma mais flexível, isto faz o download um programa e corre-o. # O programa pode utilizar comandos como o debconf-set para manipular a # base de dados do debconf. # Pode ser listado mais do que um script, separado por espaços. # Note que se os nomes dos ficheiros são relativos, serão retirados do # mesmo directório do ficheiro de pré-configuração que os corre. #d-i preseed/run string foo.sh
Também é possível carregá-los a partir do initrd ou da fase de preseed por ficheiro e para o preseed de rede definindo preseed/url nos ficheiros anteriores. Isto irá fazer com que seja feito preseed por rede quando a rede ficar disponível. Tem de ter cuidado ao fazer isto, já que existem duas execuções distintas de preseed, significa por exemplo que pode ter outra oportunidade de correr o comando preseed/early, a segunda acontece após a rede estar disponível.