Como forneço parâmetros de configuração do dpkg ao aptitude ou apt-get?

8

Ao instalar o gitolite, acho que:

# aptitude install gitolite
The following NEW packages will be installed:
  gitolite 
0 packages upgraded, 1 newly installed, 0 to remove and 29 not upgraded.
Need to get 114 kB of archives. After unpacking 348 kB will be used.
Get:1 http://security.debian.org/ squeeze/updates/main gitolite all 1.5.4-2+squeeze1 [114 kB]
Fetched 114 kB in 0s (202 kB/s)
Preconfiguring packages ...
Selecting previously deselected package gitolite.
(Reading database ... 30593 files and directories currently installed.)
Unpacking gitolite (from .../gitolite_1.5.4-2+squeeze1_all.deb) ...
Setting up gitolite (1.5.4-2+squeeze1) ...
No adminkey given - not initializing gitolite in /var/lib/gitolite.

A última linha é do meu interesse. Se eu executar dpkg-reconfigure -plow gitolite, sou apresentado a uma caixa de diálogo e posso modificar:

  • o nome de usuário do sistema para gitolite,
  • a localização dos repositórios gitolite e
  • forneça o admin pubkey.

Prefiro usar o gitusuário do sistema e fornecer o admin pubkey na instalação, digamos algo do tipo:

# aptitude install gitolite --user git --admin-pubkey 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDAc7kCAi2WkvqpAL1fK1sIw6xjpatJ+Ms2nrwLJPhdovEY3MPZF7mtH+rv1CHFDn66fLGiWevOFp...'

Isso, é claro, não funciona. Algo semelhante pode ser feito? Como determino os parâmetros de configuração antecipadamente? Isso seria extremamente útil, por exemplo, ao instalar o gitolite automaticamente, via fantoche ou chef.

troutwine
fonte

Respostas:

14

Não testei isso, mas acredito que depois de executar o seu dpkg-reconfigureem uma máquina de exemplo, você pode executar debconf-get-selections | egrep "^gitolite\s"para obter o que foi definido. (está no debconf-utilspacote, se você não o tiver).

Em seguida, na CLI, debconf-set-selections $FILENAMEantes de executar o apt.

Então, com fantoches, seria algo como:

file {
  "/var/cache/debconf/gitolite.preseed":
     source => '...'; # someplace with that output
}
package {
  "gitolite":
    require      => File["/var/cache/debconf/gitolite.preseed"],
    responsefile => "/var/cache/debconf/gitolite.preseed";
}

Mais informações no site de marionetes:

Eu suspeito que o Chef tenha um mecanismo semelhante para especificar um arquivo de resposta ou preseed ou algo parecido, mas não sou um usuário do Chef.

freiheit
fonte
5

Você precisa fornecer um preseed para contornar isso. Veja como é feito para Java neste módulo . Acho que a maneira mais fácil de obter um arquivo preseed é primeiro fazer uma instalação e configuração manual e depois obter a semente a partir disso. Este blog tem um bom exemplo disso.

Daniel C. Sobral
fonte