You are here

Apache 2.2.2, MySQL 5.0.21, PHP 5.1.4 und Subversion 1.3.1

Error message

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls in menu_set_active_trail() (line 2405 of /is/htdocs/wp1022769_0UTS5D8WKG/www/siarp.de/includes/menu.inc).

Anmerkung: Dieses Protokoll ist mit besserer Formatierung unter http://www.siarp.de/installation-log.html abgelegt.

- Ziel: Apache, MySQL, PHP und Subversion auf den Hosteurope vServer unter SuSE 9.1 separat installieren -

siarp Neuinstallation (Kofler/Subversion-Mischung plus ein paar Extras)

MySQL, Apache, PHP 5

  • Nach Empfehlung von http://www.kofler.cc/forum/forumthread.php?rootID=3538 deinstalliere ich Apache, PHP und MySQL über yast.
    Dabei ignoriere ich sämtliche Abhängigkeiten mit irgendwelchen installierten 'frontpage extensions', 'mambo' und vor allem dem Paket 'psa' → Plesk wird kastriert.
    $ rcapache2 stop
    $ yast
    → nach 'mysql', 'php' und 'apache' suchen, alles raushauen und neu starten
  • Ich lege im Home-Verzeichnis von root ein Verzeichnis siarp an, in dem ich herunterladen und entpacken kann. Dahin lade ich die Apache-Quellen, MySQL, PHP und Subversion.
    $ cd ~

    $ md siarp
    $ cd siarp
    $ wget http://ftp.wayne.edu/apache/httpd/httpd-2.2.2.tar.gz
    $ wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-server-5.0.21-0.glibc23.i386.rpm/from/ftp://ftp.fu-berlin.de/unix/databases/mysql/
    $ wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-client-5.0.21-0.glibc23.i386.rpm/from/ftp://ftp.fu-berlin.de/unix/databases/mysql/
    $ wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-devel-5.0.21-0.glibc23.i386.rpm/from/ftp://ftp.fu-berlin.de/unix/databases/mysql/
    $ wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-shared-5.0.21-0.glibc23.i386.rpm/from/ftp://ftp.fu-berlin.de/unix/databases/mysql/
    $ wget http://de2.php.net/get/php-5.1.4.tar.gz/from/de3.php.net/mirror
  • Dann noch entpacken:
    $ gunzip httpd-2.2.2.tar.gz
    $ gunzip php-5.1.4.tar.gz
    $ tar -xvf httpd-2.2.2.tar
    $ tar -xvf php-5.1.4.tar
  • MySQL installieren
    $ cd ~/siarp
    $ rpm -i MySQL*.rpm
  • Weiter nach der Kofler-Anleitung:
    $ wget http://kent.dl.sourceforge.net/sourceforge/libpng/zlib-1.2.3.tar.gz
    $ wget ftp://xmlsoft.org/libxml2/libxml2-2.6.24.tar.gz
    $ gunzip zlib-1.2.3.tar.gz
    $ gunzip libxml2-2.6.24.tar.gz
    $ tar -xvf zlib-1.2.3.tar
    $ tar -xvf libxml2-2.6.24.tar
  • Installation der Libraries
    $ cd zlib-1.2.3/
    $ ./configure
    $ make
    $ make install
    $ cd ..
    $ cd libxml2-2.6.24/
    $ ./configure
    $ make
    $ make install
    $ cd ..
  • Apache2 in /usr/local/apache2 installieren. Ich habe hier noch ein paar zusätzliche Module aktiviert, WebDAV wird von Subversion benötigt.
    $ cd httpd-2.2.2/
    $ ./configure --prefix=/usr/local/apache2 --enable-so --enable-dav --enable-ssl --enable-alias --enable-dir --enable-deflate
    $ make
    $ make install
    $ cd ..
  • PHP installieren
    $ cd php-5.1.4/
    $ ./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-libxml-dir=/usr/local/lib --with-zlib --with-zlib-dir=/usr/local/lib --with-mysql=/usr --with-mysqli=/usr/bin/mysql_config --with-gd --enable-soap --enable-sockets
    $ make
    $ make install
  • In die /usr/local/apache2/conf/httpd.conf füge ich in Zeile 55 ein:
    #siarp (manuell eingefuegt nach php-Installation)
    AddType application/x-httpd-php .php
  • Testlauf
    $ /usr/local/apache2/bin/apachectl start
    $ touch /usr/local/apache2/htdocs/phptest.php

    Dann in die Datei phptest.php die Zeile <?php phpinfo(); ?> einfügen und speichern. Und siehe: Die PHP-Konfiguration ist einsehbar.

  • Aber: Schon verhält er sich komisch! HTML-Seiten, in denen auf ein Bild verwiesen wird, werden nicht ausgeliefert. (Wieder das Dateigrößen-Problem?)
    Nach etwas Suchen dann die Lösung: In der httpd.conf muss die Zeile "EnableSendfile off" aktiviert werden (Z. 360). → Die Sendfile-Unterstützung wurde beim Kompilieren wohl nicht richtig erkannt; ein Klassiker.
    Frage: Sollte auch MMAP (Zeile darüber) deaktiviert werden? (Das war der Standard-Trick beim XAMPP.) Da MMAP und Sendfile aber wohl für Performanceverbesserungen stehen (größerer Adressraum, glaube ich), lasse ich zumindest MMAP bis auf Weiteres drin.
  • Weil's bis hierher so schön lief, logge ich mich in Virtuzzo ein, und erstelle vor der Subversion-Installation noch ein Backup.:
    "May 27, 2006 01:48:45 PM, 580.83 Mb" (SuSE-Apache, -PHP und -MySQL deinstalliert und separat installiert)

Subversion: Installation

  • Erst mal zurück nach Hause und Subversion herunterladen und entpacken
    $ cd ~/siarp
    $ wget http://subversion.tigris.org/downloads/subversion-1.3.1.tar.gz
    $ gunzip subversion-1.3.1.tar.gz
    $ tar -xvf subversion-1.3.1.tar
  • Jetzt mit den magischen Parametern installieren. (Im Wesentlichen nach http://svn.collab.net/repos/svn/trunk/INSTALL mit Hilfe von http://iedb.org/blog/howtos/svn_install_de/.)
    $ cd subversion-1.3.1/
    $ ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-ssl --with-zlib

    Am Schluss heult configure noch rum, dass keine BerkeleyDB installiert ist. Wunderbar, FSFS ist sowieso moderner. (→ http://svnbook.red-bean.com/en/1.1/ch05.html#svn-ch-5-sect-1.3.2 und Vergleich unter http://svnbook.red-bean.com/en/1.2/svn.reposadmin.html#svn.reposadmin.basics.backends)
    Und weiter:

    $ make
    $ make install
  • Leider will Apache jetzt nicht mehr starten und meldet

    httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_dav_svn.so into server: libsvn_repos-1.so.0: cannot open shared object file: No such file or directory

    Aber das kenne ich schon vom XAMPP - Google hilft. Unter http://svn.haxx.se/users/archive-2004-11/0390.shtml wird mir empfohlen, in der Datei /etc/ld.so.conf die Zeile /usr/local/lib einzufügen. Da die bereits vorhanden ist und ich ja auf die Libraries vom separat installierten Apache verweisen möchte, versuche ich es mit /usr/local/apache2/lib (weil make install am Schluss ausgiebt, dass die Libraries dorthin installiert wurden). Danach muss die Konfiguration erneuert werden:
    $ /sbin/ldconfig

    Und schon will er wieder.

Subversion: Konfiguration

  • Erste Frage: Wohin mit dem Repository? (Ich habe diese UNIX-Verzeichnisstruktur nie so wirklich verinnerlicht.) Nach einem Blick in http://de.wikibooks.org/wiki/Linux-Kompendium:_Verzeichnisse_unter_Linux bin ich nur unwesentlich schlauer und entscheide ich mich für /home/svn-repos.
    $ cd /home
    $ md svn-repos
  • Die zweite Frage ist, wofür und wieviele Repositories angelegt werden sollten. Ich beginne mal mit siarp. Subversion arbeitet dabei als Benutzer svn.
    $ cd /home/svn-repos
    $ md siarp
    $ svnadmin create /home/svn-repos/siarp
    $ chown -R svn.svn /home/svn-repos/siarp
    $ chmod -R ug+w /home/svn-repos/siarp
    $ chmod ug+s /home/svn-repos/siarp /home/svn-repos/siarp/*
  • Damit die Repositories etwas schöner gelistet werden, bringt Subversion noch ein Stylesheet für Apache mit, das in die htdocs muss.
    $ cd ~/siarp/subversion-1.3.1/tools/xslt/
    $ md /usr/local/apache2/htdocs/subversion-xslt
    $ cp * /usr/local/apache2/htdocs/subversion-xslt
    $ chmod 644 /usr/local/apache2/htdocs/subversion-xslt/*
  • Apache muss auf die Repositories zugreifen können. In der Subversion-Installationsanleitung heißt es dazu lapidar:
    NOTE: Make sure that the user 'nobody' (or whatever UID the httpd process runs as) has permission to read and write the Berkeley DB files! This is a very common problem.

    Davon weiß ich allerdings nicht, wie man das am sinnvollsten regelt. Auch im Subversion Handbuch steht nur was von "There is no single correct way to set up your permissions".
    Die Repositories einfach allgemein freigben? In der schönen (und häufig zitierten) Deadbeef-Anleitung für Apache+Subversion wird einfach der gesamte Apache mit dem svn-User gestartet. Allerdings geht das nur, wenn man den Server nicht auf den Standard-Ports betreibt. Meine Lösung wird im Subversion Handbuch zwar nur angedeutet, sollte aber korrekt sein: Dem Apache über die httpd.conf mitteilen, dass er als Nutzer svn agieren soll. Also die Zeilen 70 und 71 ändern auf. (Davor lief Apache als daemon.)

    User svn
    Group svn
  • Jetzt muss noch Apache das neue Repository in der https.conf bekannt gegeben werden:
    # siarp Subversion-Anhang
    <Location /svn/siarp>
      DAV svn
      SVNPath /home/svn-repos/siarp
       SVNIndexXSLT "/subversion-xslt/svnindex.xsl"
      AuthType Basic
      AuthName "siarp.de repository"
      AuthUserFile /home/svn-repos/svn-auth-file
      Require user martin tilman
    </Location>
  • Für die Nutzerverwaltung braucht Subversion ein Userfile, das ich unter /home/svn-repos/svn-auth-file anlegen will. Dafür muss ich das htpasswd-Tool vom Apache benutzen:
    $ /usr/local/apache2/bin/htpasswd -cm /home/svn-repos/svn-auth-file tilman

    New password:
    Re-type new password:
    Adding password for user tilman

    Neue Benutzer fügt man mit dem Befehl /usr/local/apache2/bin/htpasswd -m /home/svn-repos/svn-auth-file benutzername hinzu.

  • Das war's. Subversion ist unter http://www.siarp.de/svn/siarp/ erreichbar, sobald Apache gestartet ist.
    $ /usr/local/apache2/bin/apachectl start
  • Als krönenden Abschluss kopiere ich mein Protokoll in htdocs, so dass es unter http://www.siarp.de/installation-log.html erreichbar ist und mache mit Virtuzzo ein Backup ("May 27, 2006 05:41:32 PM, 707.27 Mb").

Zusammenfassung, To-Do und Fragen

So weit, so gut. Wir haben jetzt Apache mit MySQL und PHP und außerdem ein funktionierendes Subversion. Was muss jetzt noch kommen?

  • Subversion mit SSL nutzen. Dafür habe ich Apache mit --enable-ssl kompiliert, aber noch nix probiert.
  • MySQL testen. Noch nicht gemacht.
  • Eventuell noch etwas Sicherheits-Tuning. MySQL ist noch unkonfiguriert (Passwort) und der Subversion-User ist auch noch ohne Passwort.
  • Noch mal eine schöne "Wie legt man ein Repository an"-Anleitung, die man dann nur noch abarbeiten muss
  • Automatisiertes Backup für Repositories und htdocs. Was noch?
  • Vielleicht sollte Apache nach einem Reboot automatisch starten. Wie das geht steht in der Kofler-Anleitung.
  • Noch mal die Frage: Brauchen wir System-Nutzer-Accounts? Oder müssen wir sowieso als root arbeiten, bei dem, was wir tun?

Allgemeine Bemerkungen zur Konfiguration

  • Apache wird gestartet mit /usr/local/apache2/bin/apachectl start
  • Die Webseite liegt unter /usr/local/apache2/htdocs/, die Repositories unter /home/svn-repos/
  • Wir sollten wohl doch für jedes Projekt ein extra Repository anlegen, da sonst das System der Gesamt-Versionsnummer von Subversion keinen Sinn macht

Further reading: Backup und Vorsorge

  • Noch ein paar Überlegungen zum Thema Backup: Virtuzzo geht relativ fix (ca. 20 Min), allerdings sind nur zwei Backups möglich. Also am besten später mal durch ein Backup des komplett eingerichteten Systems ersetzen. Dann hat man immer noch ein Backup für akutes übrig.
  • Im Hosteurope-Hilfesystem wird außerdem ReoBack empfohlen. Vielleicht bei Gelegenheit mal anschauen.
  • Noch was anderes: Anscheinend kann man (im Gegensatz zu den WebPacks) den Traffic nicht hart limitieren. Bis jetzt hatten wir beim Rumbasteln immer unter 400MB im Monat. Freivolumen ist laut KIS 250GB (die neuen Pakete haben 500GB bei gleichem Preis, das hätten sie ruhig mal rückwirkend upgraden können), das macht also ca. 8GB am Tag. Ich habe jedenfalls erst mal eine Warnbenachrichtigung bei mehr als 2GB am Tag eingerichtet.
  • Hab mich bei der Suche nach einer harten Traffic-Begrenzung nochmal in Plesk eingeloggt. Das ist jetzt wohl wirklich blind und taub, man bekommt keine Server-Optionen mehr angezeigt.

Dank an (Linksammlung)

Comments

Wie gesagt, es muss noch ein Repositories-erstellen-HowTo folgen. Um es zu dokumentieren schon mal die Bemerkung:

Man muss nicht unbedingt jedes Repository einzeln in die httpd.conf eintragen, sondern kann dort auch einen SVNParentPath angeben. Alle Repositories, die in diesem Verzeichnis liegen, werden dann automatisch gelistet. Nachteil: Keine getrennte Benutzerverwaltung für die verschiedenen Repositories (soweit mir bekannt --> nochmal prüfen)

Sammlung: Module, die vielleicht auch noch schön für'n Apache wären. (Lassen sich durch --enable-so ja nachträglich einbinden.)

- mod_deflate
Dazu Zitat aus der Subversion-Installationsanleitung:
If you have configured mod_deflate to be in the server, you can enable compression support for your repository by adding the following line to your Location block: SetOutputFilter DEFLATE

- mod_mime
MIME-Zuordnung nach Dateinamenerweiterung

- mod_dav_fs
Dieses Modul bietet Zugriff auf das _lokale_ Dateisystem, falls gebraucht. So oder so ist WebDAV an sich noch mal einen Blick wert.

- mod_vhost_alias
Wird's gebraucht? Ich hab noch nicht so die Ahnung von vHost-Konzept.

- mod_dir
Das habe ich vergessen. Directory-Listings sind mitunter schon ganz praktisch.

To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h lvps80-237-161-173.dedicated.hosteurope.de password 'new-password'
See the manual for more instructions.