lighttpd_openssl_von_hand_kompilieren_und_als_deb-paket_verpacken

lighttpd+openSSL von Hand kompilieren und als DEB-Paket verpacken

Ziel dieser Aktion ist es, nicht den Standard-Ubuntu-Lighttpd zu ersätzen, sondern einen Alternativ-Lighttpd daneben zu betreiben, damit die Ubuntu-abhängigkeiten nicht beeinflusst werden.
Es kann durch die unten beschriebene kleine Änderung in der Datei /etc/init.d/lighttpd entschieden werden, welche Lighttpd-Version starten soll.
Beide Lighttpd's verwenden die selben Konfigurationsdateien, damit wird der selbst gebaute Lighttpd auch nicht mehr funktionieren, wenn man den Lighttpd von Ubuntu komplett entfernt!

Ubuntu 10.04 LTS

für Ubuntu 10.04 LTS gibt es nur openSSL Version 0.9.8k, die leider nicht LTS 1.2 unterstützt;
dmit wir das trotzdem einsetzen können, muss openSSL+Lighttpd aus den Quellen selbst gebaut werden

Als erstes muß eine "Wegschmeiß-System" erstellt werden (z.B. eine VM; Updates nicht vergessen!) und auf ihr ein Lighttpd-Web-Auftritt konfiguriert werden; dann erst weitermachen.

Vorbereitungen: benötigte Pakte installieren

die deb-src-Repositories müssen erreichbar sein:

> vi /etc/apt/sources.list
...
deb-src http://de.archive.ubuntu.com/ubuntu/ lucid main restricted
...

Pakete zum kompilieren installieren:

> aptitude update
> aptitude build-dep lighttpd

Dann derden diese Pakete installiert: autoconf automake autotools-dev binutils build-essential comerr-dev cvs debhelper diffstat dpkg-dev g++ g++-4.4 gcc gcc-4.4 gettext html2text intltool-debian krb5-multidev libattr1-dev libbz2-dev libc-dev-bin libc6-dev libcroco3 libfcgi-dev libfcgi0ldbl libfile-copy-recursive-perl libgamin-dev libgdbm-dev libgssrpc4 libkadm5clnt-mit7 libkadm5srv-mit7 libkdb5-4 libkrb5-dev libldap2-dev libltdl-dev liblua5.1-0 liblua5.1-0-dev liblzma1 libmail-sendmail-perl libmemcache-dev libmemcache0 libmysqlclient-dev libncurses5-dev libpcre3-dev libpcrecpp0 libreadline-dev libreadline6-dev libsqlite3-dev libssl-dev libstdc++6-4.4-dev libsys-hostname-long-perl libtool libxml2-dev linux-libc-dev m4 manpages-dev patch pkg-config po-debconf quilt update-inetd uuid-dev xz-utils zlib1g-dev

Programme bauen

> wget -c http://www.openssl.org/source/openssl-1.0.1e.tar.gz
> tar xzf openssl-1.0.1e.tar.gz
> cd openssl-1.0.1e
> ./config --prefix=/usr/local --openssldir=/usr/local/openssl shared
> make
> make install
> cd ..
> wget -c http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.33.tar.gz
> tar xzf lighttpd-1.4.33.tar.gz
> cd lighttpd-1.4.33
> make clean
> ./autogen.sh
> ./configure --sysconfdir=/etc/lighttpd/ --prefix=/usr/local --with-openssl-includes=/usr/local/include/ --with-openssl-libs=/usr/local/lib/ --with-openssl=/usr/local/openssl/ --enable-static=no --enable-shared=yes --enable-lfs --with-mysql --with-attr --with-pcre --with-zlib --with-bzip2 --with-fam --with-gdbm --with-memcache --with-lua
> make
> make install
> cd ..

neue Programme ins System integrieren und starten

> /etc/init.d/lighttpd stop
> ldconfig -n /usr/local/lib
> cp /etc/init.d/lighttpd /etc/init.d/lighttpd_alt
> cp /etc/init.d/lighttpd /etc/init.d/lighttpd_neu
> vi /etc/init.d/lighttpd_neu
...
LD_LIBRARY_PATH="/usr/local/lib:/lib64:/lib:/usr/lib"
export LD_LIBRARY_PATH
PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/lighttpd
...
> touch /etc/profile.d/openssl.sh
> chmod 0755 /etc/profile.d/openssl.sh
> vi /etc/profile.d/openssl.sh
#!/bin/sh
if [ -z "${LD_LIBRARY_PATH}" ] ; then
        LD_LIBRARY_PATH="/usr/local/lib:/lib64:/lib:/usr/lib"
        export LD_LIBRARY_PATH
else
        LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH}"
        export LD_LIBRARY_PATH
fi
> cat /etc/init.d/lighttpd_neu > /etc/init.d/lighttpd
> /etc/init.d/lighttpd start

Debian-Paket bauen

Wenn alles zu unserer Zufriedenstellung läuft, dann können wir ein Binärpaket bauen.

als erstes von allen installierten Dateien ein TAR-Archiv erstellen:

> tar czf lighttpd-1.4.33+openssl-1.0.1e_ubuntu-10.04_amd64.tgz /etc/profile.d/openssl.sh /etc/init.d/lighttpd_neu /usr/local/bin /usr/local/include /usr/local/lib /usr/local/openssl /usr/local/sbin /usr/local/share

mit Hilfe des TAR-Archives ein dediziertes Binärverzeichnis erstellen:

> mkdir -p lighttpd+openssl
> tar xzf lighttpd-1.4.33+openssl-1.0.1e_ubuntu-10.04_amd64.tgz -C lighttpd+openssl
> du -sk lighttpd+openssl
17648   lighttpd+openssl

die DEBIAN-Dateien erstellen

DEBIAN-Verzeichnis erstellen:

> mkdir lighttpd+openssl/DEBIAN

Es sollte darauf geachtet werden, dass diese Skripte mehrfach hintereinander gestartet werden dürfen ohne irgendwelchen Quatsch zu machen!

META-Daten des Paketes

Dieser Inhalt kann größtenteils aus aptitude show lighttpd übernommen werden:

> vi lighttpd+openssl/DEBIAN/control
Package: lighttpd+openssl
Version: 1.4.33+1.0.1e-01
Section: misc
Priority: optional
Architecture: amd64
Depends: libattr1 (>= 2.4.41-1), libbz2-1.0, libc6 (>= 2.4), libgamin0 | libfam0, libldap-2.4-2 (>= 2.4.7), libpcre3 (>= 7.7), zlib1g (>= 1:1.1.4), lsb-base (>= 3.2-14), mime-support, libterm-readline-perl-perl
Installed-Size: 17648
Maintainer: Fritz <meine@email-adresse.de>
Homepage: http://www.lighttpd.net
Conflicts: cherokee (<= 0.6.1-1), lighttpd+openssl
Provides: httpd, httpd-cgi
Description: schneller Webserver mit geringem Speicherverbrauch
 Dieses Paket enthält die neuesten Versionen von
 lighttpd und openssl direkt von den Seiten der Autoren.
 Sie wurden auf einem Ubuntu 10.04.4 LTS kompiliert
 und in das Verzeichnis /usr/local installiert.
 Es wird die Konfigurationsdatei vom lighttpd unter
 /etc/lighttpd/lighttpd.conf erwartet.
Konfigurationsdateien

hier werden die Konfigurationsdateien aufgelistet (due werden nur mit PURGE entfernt):

> touch lighttpd+openssl/DEBIAN/conffiles

In unserem Fall bleibt diese Datei leer (oder sie kann auch ganz weg gelassen werden), weil wir die Konfigurationsdateien aus dem originalen Ubuntu-Paket "lighttpd" verwenden.

vor der Installation

Dieses Skript wird ausgeführt, bevor das Paket aus der Debian-Archivdatei (*.deb) entpackt wird. Hier wird der lighttpd-Dienst angehalten:

> touch lighttpd+openssl/DEBIAN/preinst
> chmod 0755 lighttpd+openssl/DEBIAN/preinst
> vi lighttpd+openssl/DEBIAN/preinst
#!/bin/sh
service lighttpd stop
nach der Installation

Diese Skript stellt normalerweise die benötigte Konfiguration des Paketes fertig, nachdem es aus seiner Debian-Archivdatei (».deb«-Datei) entpackt worden ist. Oft fragen »postinst«-Skripte den Benutzer nach Eingaben und/oder warnen ihn, dass, wenn er die Standardwerte akzeptiert, er daran denken muss, das Paket neu zu konfigurieren, wenn es die Situation erfordert. Viele »postinst«-Skripte führen nach dem Installieren/Updaten, die für das Starten bzw. Neustarten der Dienste benötigten Kommandos aus.

> touch lighttpd+openssl/DEBIAN/postinst
> chmod 0755 lighttpd+openssl/DEBIAN/postinst
> vi lighttpd+openssl/DEBIAN/postinst
#!/bin/sh

if [ ! -r /etc/init.d/lighttpd_alt ] ; then
        cat /etc/init.d/lighttpd > /etc/init.d/lighttpd_alt
fi

if [ -r /etc/init.d/lighttpd_neu ] ; then
        cat /etc/init.d/lighttpd_neu > /etc/init.d/lighttpd
fi

if [ -n "$(egrep 'ssl[.]honor-cipher-order.*[=].*"[Dd][Ii][Ss][Aa][Bb][Ll][Ee]"' /etc/lighttpd/conf-enabled/10-ssl.conf)" ] ; then
        sed -i 's/ssl[.]honor-cipher-order.*[=].*"[Dd][Ii][Ss][Aa][Bb][Ll][Ee]"/ssl.honor-cipher-order              = "enable"/' /etc/lighttpd/conf-enabled/10-ssl.conf
fi

. /etc/profile.d/openssl.sh
service lighttpd restart
vorher löschen

Dieses Skript stoppt üblicherweise alle Dienste die mit dem Paket verknüpft sind. Es wird ausgeführt bevor alle Dateien des Paketes gelöscht werden.

> touch lighttpd+openssl/DEBIAN/prerm
> chmod 0755 lighttpd+openssl/DEBIAN/prerm
> vi lighttpd+openssl/DEBIAN/prerm
#!/bin/sh
service lighttpd stop
nachher löschen

Dieses Skript ändert Links die mit dem Paket zu tun haben und/oder löscht Dateien die vom Paket angelegt worden sind.

> touch lighttpd+openssl/DEBIAN/postrm
> chmod 0755 lighttpd+openssl/DEBIAN/postrm
> vi lighttpd+openssl/DEBIAN/postrm
#!/bin/sh

if [ -r /etc/init.d/lighttpd_alt ] ; then
        cat /etc/init.d/lighttpd_alt > /etc/init.d/lighttpd
fi

if [ -n "$(egrep 'ssl[.]honor-cipher-order.*[=].*"[Ee][Nn][Aa][Bb][Ll][Ee]"' /etc/lighttpd/conf-enabled/10-ssl.conf)" ] ; then
        sed -i 's/ssl[.]honor-cipher-order.*[=].*"[Ee][Nn][Aa][Bb][Ll][Ee]"/ssl.honor-cipher-order              = "disable"/' /etc/lighttpd/conf-enabled/10-ssl.conf
fi

rm -f /etc/init.d/lighttpd_alt
service lighttpd start

DEB-Paket erstellen

deb-Paket bauen:

> dpkg -b lighttpd+openssl lighttpd-1.4.33+openssl-1.0.1e_ubuntu-10.04_amd64.deb
dpkg-deb: Baue Paket »lighttpd+openssl« in »lighttpd-1.4.33+openssl-1.0.1e_ubuntu-10.04_amd64.deb«.

unser Paket einspielen

> dpkg -i lighttpd-1.4.33+openssl-1.0.1e_ubuntu-10.04_amd64.deb
Wähle vormals abgewähltes Paket lighttpd+openssl.
(Lese Datenbank ... 74826 Dateien und Verzeichnisse sind derzeit installiert.)
Entpacke lighttpd+openssl (aus lighttpd-1.4.33+openssl-1.0.1e_ubuntu-10.04_amd64.deb) ...
 * Stopping web server lighttpd                                         [ OK ]
Richte lighttpd+openssl ein (1.4.33+1.0.1e) ...
Syntax OK
 * Stopping web server lighttpd                                         [ OK ]
Syntax OK
2013-11-26 13:15:18: (log.c.166) server started
                                                                        [ OK ]
Verarbeite Trigger für ureadahead ...
Verarbeite Trigger für man-db ...

unser Paket entfernen

> dpkg -r lighttpd+openssl
(Lese Datenbank ... 76260 Dateien und Verzeichnisse sind derzeit installiert.)
Entferne lighttpd+openssl ...
 * Stopping web server lighttpd                                         [ OK ]
Verarbeite Trigger für ureadahead ...
Verarbeite Trigger für man-db ...

HTTPS-Verbindung prüfen

> openssl s_client -connect mein.webserver.de:https
/home/http/wiki/data/pages/lighttpd_openssl_von_hand_kompilieren_und_als_deb-paket_verpacken.txt · Zuletzt geändert: von manfred