Apache di linux-vserver tidak akan mulai, tidak dapat membuat socket

8

Selama penelitian dan pengujian yang luas untuk menulis pertanyaan yang layak layak stackexchange saya menemukan solusi: membangun kembali libapr1paket di dalam tamu.
Saya pikir saya tetap memposting informasi ini karena dapat bermanfaat bagi orang lain.

Masalah

Ketika saya menginstal libapache2-mod-php5di dalam tamu Wheezy dan mencoba untuk memulai, saya mendapatkan yang berikut:

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

Ini adalah instalasi paket murni yang tidak berubah yang secara default tidak dapat memulai.

Pengujian saya

Menurut dokumentasi resmi, Listen 80 sebenarnya baik-baik saja . Mengubahnya menjadi Listen 127.0.0.1:80memberi saya:

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

Jadi mengapa Apache gagal mendapatkan soket? Saya sudah menjalankan deamons lain (mis. Nginx pada instalasi Wheezy lainnya; exim4 mendengarkan pada port 25 pada instalasi yang sama) tanpa masalah.

Lingkungan Hidup

Tuan rumah

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

Tamu

Debian Wheezy, dibuat dengan 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/

Penelitian sejauh ini

Internet memberi saya hal-hal berikut:

Ketakutan terbesar saya, dan ini adalah kesimpulan saya saat ini, adalah bahwa apache di dalam server virtual tergantung pada beberapa fitur kernel yang lebih baru yang tidak disediakan oleh host saya. Bagaimanapun, kernel default Wheezy tentu tidak setua 2.6.26 saya.

Saya ingin menghindari peningkatan kernel host dengan segala cara.

Mengapa?

  • Kurang waktu dan pengetahuan (perangkat keras adalah server HP, tidak tahu apa yang harus diperhatikan)
  • Wheezy tidak mendukung vserver lagi (di luar kotak; untuk instalasi sendiri lihat 1) ...)
  • Sudah menjalankan vservers yang harus tersedia 24/7 (seluruh sistem adalah internal perusahaan dan tidak terpapar ke internet)
  • Tidak ada perangkat keras yang sama kedua untuk melakukan pengujian

Saya bersedia menambal Apache

Jika mungkin untuk mencari tahu apa masalahnya, saya ingin membangun paket deb khusus untuk pencarian Wheezy saya.

menandai
sumber

Jawaban:

16

Larutan

Seperti yang saya katakan di kalimat pertama, saya sudah menemukan solusinya: Saya membangun kembali libapr1paket di dalam tamu .

Saya menemukan solusinya dengan googling untuk "Argumen tidak valid: alokasi_listener: gagal mendapatkan soket untuk (null)" , hit ke-5 adalah omong kosong argumen tidak valid yang menyebutkan upgrade kernel dan merujuk ke blogger lain yang berbicara tentang masalah Fedora 11 httpd :

Masalah ini terkait dengan tiga panggilan kernel yang digunakan pada apr-1.3.8-1: accept4 (), dup3 () dan epoll_create1 (). Tanpa panggilan ini, apache tidak dapat memulai.

Dia menyebutkan tim Fedora diperbaiki sehingga saya memeriksa laporan bug: https://bugzilla.redhat.com/show_bug.cgi?id=516331 , khususnya komentar kedua :

.. jika Anda membangun April Anda sendiri pada contoh Xen itu, itu akan dengan benar mengambil fungsi yang lebih tua dan bekerja ..

Itu membunyikan bel. Yang harus saya lakukan adalah membuat ulang libapr1paket karena skrip konfigurasi akan secara otomatis mengetahui yang accept4tidak tersedia dan akan kembali ke accept. Begitulah cara saya melakukannya:

  • 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
    Ini gagal pada awalnya karena dependensi yang hilang: apt-get install debhelper autoconf autotools-dev uuid-dev doxygen libtool
  • Setelah beberapa waktu, ini menghasilkan paket debian di luar direktori yang saya instal:
    dpkg -i libapr1_1.4.6-3_amd64.deb
  • Lalu saya baru saja memulai apache dan itu berhasil!
    /etc/init.d/apache2 start

Pada sistem disk-kelaparan, Anda mungkin ingin menghapus oksigen setelah kompilasi: pada sistem saya dibutuhkan lebih dari 600MB bersama dengan dependensinya.

menandai
sumber
+1 Terima kasih, sangat membantu dan juga memperbaiki masalah saya di serverfault.com/questions/506238/... Anda harus menandai jawaban Anda sendiri sebagai yang diterima.
aseq
tidak ada paket seperti itu
Flash Thunder