O Apache no linux-vserver não inicia, não é possível criar o soquete

8
Durante uma extensa pesquisa e testes para escrever uma pergunta adequada digna de stackexchange eu encontrei uma solução: reconstruir o pacote libapr1 dentro do convidado.
Eu pensei que, no entanto, postaria esta informação como poderia ser útil para os outros.

Problema

Quando eu instalo libapache2-mod-php5 dentro do convidado Wheezy e ele tenta inicializar, recebo o seguinte:

root@test01:~# /usr/sbin/apache2ctl start
[crit] (22)Invalid argument: alloc_listener: failed to get a socket for (null)
Syntax error on line 9 of /etc/apache2/ports.conf:
Listen setup failed
Action 'start' failed.
The Apache error log may have more information.
root@test01:~# tail /var/log/apache2/error.log
root@test01:~#
root@test01:~# head -n 9 /etc/apache2/ports.conf|tail -n 1
Listen 80

Esta é a instalação inalterada do pacote pristine que, por padrão, não consegue inicializar.

Meus testes

De acordo com a documentação oficial, Ouça 80 está realmente bem . Transformar em Listen 127.0.0.1:80 me dá:

[crit] (22)Invalid argument: alloc_listener: failed to get a socket for 127.0.0.1
Syntax error on line 9 of /etc/apache2/ports.conf:
Listen setup failed
Action 'start' failed.

Então, por que o Apache falha em obter um soquete? Eu tenho outros deamons em execução (ou seja, nginx em outra instalação Wheezy; exim4 ouvindo na porta 25 na mesma instalação) sem problemas.

Ambiente

Anfitrião

Debian Lenny em 2.6.26-2-vserver-amd64

# vserver-info
Versions:
                   Kernel: 2.6.26-2-vserver-amd64
                   VS-API: 0x00020303
             util-vserver: 0.30.216-pre2772; Dec 13 2008, 04:56:19

Features:
                       CC: gcc, gcc (Debian 4.3.2-1) 4.3.2
                      CXX: g++, g++ (Debian 4.3.2-1) 4.3.2
                 CPPFLAGS: ''
                   CFLAGS: '-Wall -g  -O2 -std=c99 -Wall -pedantic -W -funit-at-a-time'
                 CXXFLAGS: '-g -O2 -ansi -Wall -pedantic -W -fmessage-length=0 -funit-at-a-time'
               build/host: x86_64-pc-linux-gnu/x86_64-pc-linux-gnu
             Use dietlibc: yes
       Build C++ programs: yes
       Build C99 programs: yes
           Available APIs: v13,net,v21,v22,v23,netv2
            ext2fs Source: e2fsprogs
    syscall(2) invocation: alternative
      vserver(2) syscall#: 236/glibc
               crypto api: beecrypt
   use library versioning: yes

Paths:
                   prefix: /usr
        sysconf-Directory: /etc
            cfg-Directory: /etc/vservers
         initrd-Directory: $(sysconfdir)/init.d
       pkgstate-Directory: /var/run/vservers
          vserver-Rootdir: /var/lib/vservers


Assumed 'SYSINFO' as no other option given; try '--help' for more information.

Convidado

Debian Wheezy, construído com vserver $VSERVER build -m debootstrap --hostname $VSERVER --netdev eth0 --context $CONTEXT --interface v$CONTEXT=x.y.z.$CONTEXT/zz -- -d wheezy -m http://apt-proxy:9999/debian/

Pesquisa até agora

Os internets me ofereceram as seguintes coisas até agora:

Meu maior medo, e esta é a minha conclusão atual, é que o apache dentro do servidor virtual depende de algum recurso de kernel mais novo que meu host não fornece. Afinal, o kernel padrão do Wheezy certamente não é tão antigo quanto o meu 2.6.26.

Eu quero evitar a atualização do kernel do host a todo custo.

Por quê?

  • Falta de tempo e conhecimento (o hardware é um servidor da HP, não faz ideia do que observar)
  • O Wheezy não suporta mais o vserver (fora da caixa; para auto-instalação, consulte 1) ...)
  • Já está executando vservers que precisam estar disponíveis 24 horas por dia, 7 dias por semana (todo o sistema é interno da empresa e não está exposto à Internet)
  • Não há o mesmo hardware para realizar testes

Estou disposto a corrigir o Apache

Se for possível descobrir qual é o problema, estou disposto a criar um pacote deb customizado para minhas missões Wheezy.

    
por mark 07.04.2013 / 13:16

1 resposta

16

Solução

Como eu disse na primeira frase, eu já encontrei a solução: Eu reconstruí o pacote libapr1 dentro do guest .

Eu encontrei a solução por googling for" Argumento inválido: alloc_listener: falha ao obter um soquete para (nulo) ", o quinto hit foi Porcaria de argumento inválida que menciona a atualização do kernel e refere-se a outra blogueiro falando sobre os problemas do Fedora 11 httpd :

The issue is related to three kernel calls that are used in apr-1.3.8-1: accept4(), dup3() and epoll_create1(). Without these calls, apache is unable to start.

Ele menciona a equipe do Fedora corrigida, então eu verifiquei o relatório do bug: link , especificamente o segundo comentário :

.. if you build your own APR on that Xen instance, it will correctly pick up the older functions and work ..

Isso tocou um sino. Tudo o que precisei fazer foi reconstruir o pacote libapr1 porque o script de configuração descobrirá automaticamente que accept4 não está disponível e será revertido para accept . Foi assim que eu fiz:

  • apt-get source libapr1
  • tar -xf apr_1.4.6.orig.tar.gz
  • cd apr-1.4.6
  • tar -xf ../apr_1.4.6-3.debian.tar.gz
  • dpkg-buildpackage
    Esta falha no início devido a falta de dependências: apt-get install debhelper autoconf autotools-dev uuid-dev doxygen libtool
  • Depois de algum tempo, isso produziu um pacote debian fora do diretório que eu instalei:
    dpkg -i libapr1_1.4.6-3_amd64.deb
  • Então eu comecei o apache e deu certo!
    /etc/init.d/apache2 start

Em sistemas com falta de disco, você pode querer remover o doxygen após a compilação: no meu sistema precisou de mais de 600MB junto com suas dependências.

    
por 07.04.2013 / 13:16