É possível parar os serviços de reinicialização do dpkg-reconfigure?

1

Estou construindo uma chave de instalação para um sistema baseado em Debian. A chave de instalação basicamente copia uma imagem de disco no sistema e, em seguida, em um chroot instala vários pacotes que são copiados para a chave de instalação durante o processo de compilação.

Uma das coisas que a chave de instalação faz é limpar as chaves ssh existentes (assim, não criamos um monte de servidores ssh "idênticos"). Para tentar seguir o modo debian de fazer as coisas, eu executo o dpkg-reconfigure openssh-server para regenerar as chaves, mas no final da reconfiguração, ele tenta reiniciar o servidor, o que obviamente não está sendo executado na chave de instalação chroot. / p>

É possível dizer ao debconf para reconfigurar mas não reiniciar serviços?

    
por stsquad 16.10.2009 / 13:49

4 respostas

0

O que você está perguntando não é uma função do debconf ou dpkg-reconfigure, diretamente. Se você baixar o .deb para o openssh-server e extrair os arquivos do control.tar.gz, verá que o script 'postinst' executa invoke-rc.d ou /etc/init.d/ssh:

Linha 418:

setup_init() {
  if [ -x /etc/init.d/ssh ]; then
    update-rc.d ssh start 16 2 3 4 5 . stop 84 1 . >/dev/null
    if [ -x /usr/sbin/invoke-rc.d ]; then
      invoke-rc.d ssh restart
    else
      /etc/init.d/ssh restart
    fi
  fi
}
    
por 16.10.2009 / 16:11
4

De que este documento diz, você deve criar um /usr/sbin/policy-rc.d script no chroot que faz exit 101 .

    
por 28.10.2009 / 13:08
1

Digno de nota: um serviço não será iniciado por invoke-rc.d se você não estiver em um runlevel que não deveria ter esse serviço em execução. Então, uma ideia pode ser convencer o chroot de que está no modo de usuário único.

    
por 16.10.2009 / 15:10
0

Estou usando o script a seguir que coloquei em /usr/sbin/policy-rc.d

#!/bin/sh

SERVICE_NAME="$(ps -o command= --ppid $PPID | cut -d ' ' -f 3 )"
for service in service1 service2 service3
do
  if [ $SERVICE_NAME = $service ]
  then
    exit 101 # Prevent service from running
  fi
done
exit 0 # allow service
  • ps -o command= --ppid $PPID deve retornar o comando completo de chamada, algo como /bin/sh /usr/sbin/invoke-rc.d service1 start
  • cut -d ' ' -f 3 cut vai dividir e selecionar o terceiro item, então aqui "service1".

O script evitará a exibição de invoke-rc.d para service1 , service2 e service3 , mas deixará a opção para outras pessoas.

    
por 06.12.2017 / 11:11