linux-vserver의 Apache가 시작되지 않고 소켓을 만들 수 없습니다 결과가 나타납니다. root@test01:~# /usr/sbin/apache2ctl start [crit] (22)Invalid

stackexchange에 적합한 적절한 질문을 작성하기 위해 광범위한 연구 및 테스트를 수행하는 동안 libapr1게스트 내부에서 패키지를 다시 작성하는 해결책을 찾았습니다 .
그럼에도 불구하고이 정보는 다른 사람들에게 유용 할 수 있으므로 게시 할 것이라고 생각했습니다.

문제

libapache2-mod-php5Wheezy 게스트 내부에 설치 하고 시작하려고하면 다음과 같은 결과가 나타납니다.

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

이것은 기본적으로 시작되지 않는 변경되지 않은 깨끗한 패키지 설치입니다.

내 테스트

공식 문서에 따르면 Listen 80은 실제로 괜찮습니다 . 그것을 돌리면 Listen 127.0.0.1:80나에게 준다 :

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

그렇다면 왜 Apache가 소켓을 얻지 못할까요? 다른 문제가 발생했습니다 (예 : 다른 Wheezy 설치의 nginx; 동일한 설치의 포트 25에서 수신하는 exim4).

환경

주최자

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.

손님

데비안 위지 (Debian Wheezy) 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/

지금까지의 연구

인터넷은 지금까지 다음과 같은 것들을 제공했습니다.

저의 가장 큰 두려움은 이것이 현재 결론입니다. 가상 서버 내부의 아파치는 호스트가 제공하지 않는 새로운 커널 기능에 달려 있다는 것입니다. 결국, Wheezy 기본 커널은 확실히 2.6.26보다 오래되지 않았습니다.

모든 비용으로 호스트 커널 업그레이드를 피하고 싶습니다.

왜?

  • 시간과 지식 부족 (하드웨어는 HP 서버이므로주의해야 할 사항 없음)
  • Wheezy는 더 이상 가상 서버를 지원하지 않습니다 (기본 제공, 자체 설치의 경우 1 참조) …)
  • 연중 무휴 24 시간 사용 가능해야하는 이미 실행중인 가상 서버 (전체 시스템은 회사 내부이며 인터넷에 노출되지 않음)
  • 테스트를 수행 할 동일한 하드웨어가 없습니다.

나는 아파치 패치를 기꺼이한다

문제가 무엇인지 알아낼 수 있다면 Wheezy 퀘스트에 대한 사용자 정의 deb 패키지를 작성하려고합니다.



답변

해결책

첫 번째 문장에서 말했듯이 이미 해결책을 찾았습니다 . 손님 내부에서 패키지를 다시 작성 libapr1했습니다 .

“잘못된 인수 : alloc_listener : (null)에 대한 소켓을 얻지 못했습니다”에 대한 인터넷 검색을 통해 해결책을 찾았습니다 .5 번째 히트는 커널 업그레이드를 언급하고 Fedora 11 httpd 문제에 대해 이야기 하는 다른 블로거 를 나타내는 잘못된 인수 쓰레기 였습니다 .

이 문제는 apr-1.3.8-1에서 사용되는 3 개의 커널 호출 accept4 (), dup3 () 및 epoll_create1 ()과 관련이 있습니다. 이러한 호출이 없으면 아파치를 시작할 수 없습니다.

그는 Fedora 팀이 수정되었음을 언급하여 버그 보고서를 확인했습니다 : https://bugzilla.redhat.com/show_bug.cgi?id=516331 , 특히 두 번째 의견 :

.. 해당 Xen 인스턴스에서 자체 APR을 구축하면 이전 기능이 올바르게 선택되어 작동합니다.

종을 울렸다. libapr1configure 스크립트가 자동으로 accept4사용할 수 없다는 것을 알아 내고로 되돌릴 것이므로 패키지 를 다시 빌드 하기 만하면됩니다 accept. 그것이 내가 한 방법입니다.

  • 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
    종속성이 없기 때문에 처음에는 실패했습니다. apt-get install debhelper autoconf autotools-dev uuid-dev doxygen libtool
  • 얼마 후 이것은 내가 설치 한 디렉토리 밖에서 데비안 패키지를 만들었습니다.
    dpkg -i libapr1_1.4.6-3_amd64.deb
  • 그런 다음 방금 아파치를 시작했고 효과가있었습니다!
    /etc/init.d/apache2 start

디스크가 부족한 시스템에서는 컴파일 후 독소를 제거 할 수 있습니다. 내 시스템에서는 종속성과 함께 600MB 이상이 필요했습니다.


답변