Arquivo init.d / apache2 ausente

5

Depois de tentar excluir o apache e o tomcat e, agora, tentando reinstalar o apache 2, estou perdendo o arquivo init.d/apache2 para iniciar / parar meu servidor.

Não sei ao certo se a nova instalação funcionou, e meu apt-get purge apache2 não removeu tudo em primeiro lugar!

Como posso obter o arquivo init.d/apache2 para testar se o servidor é iniciado / instalado corretamente (eu removi arquivos e diretórios manualmente)?

    
por Alexander Grosse 04.05.2011 / 13:54

3 respostas

9

Tente usar apt-get install --reinstall apache2 para forçar o sistema apt-get a ser instalado novamente, mesmo que o pacote exista e sobrescreva os arquivos atuais - mesmo aqueles que ele acha que já estão lá.

Ao excluir manualmente as coisas do sistema, você sem dúvida tem o gerenciador de pacotes confuso sobre o que precisa ser feito. Normalmente, você quer usar as ferramentas fornecidas, a menos que entenda o que está afetando manualmente.

Como nota extra, você não precisa mexer com os arquivos em /etc/init.d. Existe uma ferramenta que cuida da execução desses scripts para você. Por exemplo, para reiniciar o apache, você pode executar service apache2 restart .

Editado com base nas informações encontradas nos comentários

O script de inicialização faz parte de um sub-pacote. Instalar um pacote pela primeira vez instalará suas dependências, mas desinstalá-lo apenas desinstalará o pacote, não suas dependências. O script de inicialização que você removeu manualmente pertence ao pacote apache2.2-common com uma dependência do nome do pacote apache2 principal. Remover o apache2 mesmo com --purge não teria efeito no script de inicialização porque é parte de um pacote diferente. Para recuperá-lo, execute apt-get install --reinstall apache2.2-common .

Edit2

Aparentemente, o Debian é maluco. Eu repliquei o problema em um sistema de teste e não consegui recuperar o script de inicialização com o gerenciador de pacotes. Eu encontrei várias outras pessoas com o mesmo problema na web, e parece que a solução é baixar manualmente o pacote, extraí-lo e extrair o arquivo assim:

cd /tmp
aptitude download apache2.2-common
dpkg --extract apache2.2-common_*.deb apache2.2-common
sudo cp apache2.2-common/etc/init.d/apache2 /etc/init.d

Editar3

Graças à investigação feita por Faheem Mitha e à discussão dos comentários abaixo, uma resposta completa a essa pergunta deu certo. Leia a resposta de Faheem para maiores detalhes . Para o valor do humor, aqui estão as notas do penhasco:

A versão curta é que os scripts init são considerados arquivos conf, e o apt-get é muito educado para tocar nos arquivos conf que foram modificados pelo usuário de qualquer forma, mesmo para restaurar excluídos após a desinstalação. Antes de dizer "duh claro", confira a ginástica que você precisa fazer. Cito:

After asking the dpkg list (and being told off for it) + further fiddling, the following works. Be careful with this. It will replace all your modified config files with the version from the package. apt-get -o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-confask" install --reinstall apache2.2-common. I don't know why you needed me to tell you this. It's the first thing you should have thought of. :-) – Faheem Mitha

    
por 04.05.2011 / 14:11
11

(Estou acompanhando a resposta do Caleb , embora a maioria das informações relevantes já esteja nos comentários. Acho que um resumo pode ser mais conveniente do que ter que examinar os comentários.

Então, o problema, como descrito no post de Caleb, foi que Alexander deletou (ou possivelmente modificou) /etc/init.d/apache2 e queria recuperá-lo. Este arquivo está em apache-2.2-common . O óbvio apt-get install --reinstall apache2.2-common não restaura o arquivo, no entanto. A razão para isso, de acordo com a política do Debian, é que os arquivos de configuração não são tocados pelo sistema uma vez que tenham sido alterados, a menos que explicitamente solicitado pelo usuário. Consulte a Política Debian no tratamento de arquivos de configuração: Seção 10.7.3 . Citação:

Configuration file handling must conform to the following behavior:

  1. local changes must be preserved during a package upgrade, and

  2. configuration files must be preserved when the package is removed, and only deleted when the package is purged.

As adições e remoções de pacotes são tratadas pelo dpkg . O dpkg distingue dois casos aqui, quando o arquivo é modificado e quando foi completamente removido. Veja a seção na seção de opções começando com --force-things na página de manual do dpkg . (Linkando para a página do dpkg 1.16 do Ubuntu, porque eu não encontrei as páginas de manual do squeeze Debian online. Se você tem um ponteiro, por favor, comente.)

Então, para as duas situações

  1. Se você quiser arquivos conf que tenham foi removido para ser substituído por reinstalação, você precisa passar o --force-confmiss option para dpkg.

  2. Se você quiser arquivos conf que tenham alterado, mas não removido, para ser substituídos por sua versão padrão em instalação, você precisa passar ambos o --force-confnew e --force-confask opções para dpkg. Como a página man explica, --force-confnew por si só irá substituir apenas o modificado arquivo conf com o padrão nos casos em que o padrão é mais recente que o original padrão instalado, ou seja, em uma atualização.

Se estamos invocando o dpkg via apt, precisamos passar essas opções para o apt. Isso é feito da seguinte maneira para os dois casos acima:

apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall apache2.2-common

apt-get -o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-confask" install --reinstall apache2.2-common

Não consegui encontrar nenhuma documentação para Dpkg::Options . Eu encontrei pesquisando. Se você souber de algum, por favor comente.

Comentários:

  1. Eu acho que se você se depara com um situação em que você estragou um arquivo de configuração e quer voltar, é mais seguro para renomeá-lo e, em seguida, use --force-confmiss em vez de pedindo para todos os seus locais modificações a serem substituídas pelo padrão por --force-confnew , que em geral não é o que você quer.

  2. Se estiver trabalhando com arquivos de configuração, sempre mantenha-os sob controle de versão. Isso tornaria os problemas de confuso up arquivos de configuração moot. Eu uso e recomendar mercurial . Neste caso (e provavelmente em qualquer caso :-)), você está melhor neste contexto usando a versão distribuída controle do que uma versão centralizada sistema de controle como subversão . Um bom programa para fazer isso é etckeeper .

  3. Também vale a pena mencionar, e pode ter contribuído para o confusão aqui, que com apt in squeeze, apache2.2-common faz não desinstalar corretamente, por causa de apt bug 621720 , que coincidentemente cobre o caso de remoção de apache2.2-common . De acordo com o relatório do bug, você precisará usar

    apt-get remove apache2.2-common -o pkgProblemResolver::FixByInstall=0'
    

    (verificado por mim).

  4. Veja Tudo o que você precisa saber sobre arquivos de configuração: arquivos de configuração gerenciado por dpkg para uma discussão sobre a configuração do dpkg tratamento de arquivos por Raphaël Hertzog , um dos desenvolvedores do dpkg. Ele menciona que --force-confask é novo no Squeeze. Ele também menciona que

    dpkg --status apache2.2-common
    

    fornece a lista de arquivos de configuração, juntamente com outras informações. ou apenas

    dpkg-query --showformat='${Conffiles}\n' --show apache2.2-common
    

    se você quiser apenas essa informação.

Obrigado a David Kalnischkies e Raphaël Hertzog por responder minhas perguntas sobre isso (e dizer que eu estava postando na lista de discussão errada). Eu acho que a documentação Debian neste contexto poderia ser melhorada, e especificamente, a man page do dpkg poderia fazer com exemplos adicionais de uso. Eu encorajo as pessoas aqui (que obviamente estão dispostas a ajudar) a também levar tempo para contribuir com patches de documentação para projetos de software livre como o Debian. É um trabalho valioso e não há pessoas suficientes fazendo isso.

    
por 06.05.2011 / 17:07
2

Eu tive exatamente este mesmo problema em um sistema Debian. Isso afetou o apache e o nginx.

Todas as soluções aqui não funcionaram para mim; purgar, reinstalar, baixar e instalar manualmente e Dpkg :: Options não funcionou.

Acontece que uma das dependências cria os arquivos de configuração necessários para iniciar e parar os serviços. Você simplesmente remove todas as dependências e faz uma nova reinstalação.

Encontrei a solução aqui: link

APACHE_PKGS='sudo dpkg --get-selections | grep apache | cut -f 1'
# Make sure things are sane:
echo $APACHE_PKGS
# Example output: apache2 apache2-mpm-prefork apache2-utils apache2.2-common \
# libapache2-mod-php5 libapache2-mod-python libapache2-svn
# Likely if you have a Python application:
# libapache2-mod-python libapache2-mod-python-doc libapache2-mod-wsgi
# Or if you roll with the PHP: 
# libapache2-mod-php5
sudo apt-get remove --purge $APACHE_PKGS
    
por 20.08.2011 / 12:27