Apache en linux-vserver no se inicia, no puede crear socket

8

Durante una extensa investigación y pruebas para escribir una pregunta adecuada digna de stackexchange, encontré una solución: reconstruir el libapr1paquete dentro del invitado.
Sin embargo, pensé que publicaría esta información, ya que podría ser útil para otros.

Problema

Cuando instalo libapache2-mod-php5dentro del invitado Wheezy e intenta iniciarse, obtengo lo siguiente:

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 es la instalación del paquete sin cambios que, de forma predeterminada, no logra iniciarse.

Mi prueba

Según la documentación oficial, Listen 80 está realmente bien . Convertirlo en Listen 127.0.0.1:80me da:

[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.

Entonces, ¿por qué Apache no podría obtener un zócalo? Tengo otros demonios ejecutándose (es decir, nginx en otra instalación de Wheezy; exim4 escuchando en el puerto 25 en la misma instalación) sin problemas.

Medio ambiente

Anfitrión

Debian Lenny en 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.

Invitado

Debian Wheezy, construido con 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/

Investiga hasta ahora

Los internets me proporcionaron lo siguiente hasta ahora:

Mi mayor temor, y esta es mi conclusión actual, es que apache dentro del servidor virtual depende de alguna característica más nueva del núcleo que mi host no proporciona. Después de todo, el kernel predeterminado de Wheezy ciertamente no es tan antiguo como mi 2.6.26.

Quiero evitar actualizar el núcleo del host a toda costa.

¿Por qué?

  • Falta de tiempo y conocimiento (el hardware es un servidor HP, no tengo idea de qué tener en cuenta)
  • Wheezy ya no es compatible con vserver (listo para usar; para la autoinstalación, consulte 1) ...)
  • Ya está ejecutando vservers que deben estar disponibles 24/7 (todo el sistema es interno de la compañía y no está expuesto a Internet)
  • No hay segundo hardware para realizar pruebas

Estoy dispuesto a parchear Apache

Si es posible averiguar cuál es el problema, estoy dispuesto a construir un paquete de deb personalizado para mis misiones de Wheezy.

marca
fuente

Respuestas:

16

Solución

Como dije en la primera oración, ya encontré la solución: reconstruí el libapr1paquete dentro del huésped .

Encontré la solución buscando "Argumento no válido: alloc_listener: no se pudo obtener un socket para (nulo)" , el quinto golpe fue una basura de argumento no válida que menciona la actualización del kernel y se refiere a otro blogger que habla sobre los problemas de Fedora 11 httpd :

El problema está relacionado con tres llamadas al núcleo que se utilizan en apr-1.3.8-1: accept4 (), dup3 () y epoll_create1 (). Sin estas llamadas, apache no puede comenzar.

Menciona el equipo de Fedora arreglado, así que revisé el informe de error: https://bugzilla.redhat.com/show_bug.cgi?id=516331 , específicamente el segundo comentario :

... si crea su propio APR en esa instancia de Xen, recogerá correctamente las funciones y el trabajo más antiguos ...

Eso sonó una campana. Todo lo que tenía que hacer era reconstruir el libapr1paquete porque el script de configuración descubrirá automáticamente que accept4no está disponible y volverá a accept. Así lo hice:

  • 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
    Esto falló al principio debido a la falta de dependencias: apt-get install debhelper autoconf autotools-dev uuid-dev doxygen libtool
  • Después de algún tiempo, esto produjo un paquete debian fuera del directorio que instalé:
    dpkg -i libapr1_1.4.6-3_amd64.deb
  • Luego empecé a apache y funcionó!
    /etc/init.d/apache2 start

En un sistema con falta de disco, es posible que desee eliminar doxygen después de la compilación: en mi sistema necesitaba más de 600 MB junto con sus dependencias.

marca
fuente
+1 Gracias, muy útil y también solucionó mi problema en serverfault.com/questions/506238 /... Debería marcar su propia respuesta como la aceptada.
aseq
no existe tal paquete
Flash Thunder