marderh.blog

27/12/2007

Debian Etch & Apache2 MySQL Authentication

Filed under: — stefan @ 13:25

debian bottle

*AARRGGHHHH*

Jo eh, ich ja ned der erste der draufkommt, dass libapache-mod-auth-mysql/libapache2-mod-auth-mysql unter Debian Etch fehlt (siehe hier an der Quelle). Einfach futsch. Ein grosses Nix zwischen den Einträgen für Sarge und Lenny. Schaut so aus, wie wenn der Maintainer die Schmerzen nicht mehr ertragen konnte:


I don’t run any Apache servers any more, and I’m sick of the whole Apache module mess. Note to any potential adopters: you’re upstream as well, you’ve got a mess of a codebase, and the Apache2 module is supposedly being replaced with something native to Apache 2.2.

(zitiert aus dem Bugreport)

Versteh ich, aber trotzdem unschön für mich.

Also was tun?

Nach ein bisschen Recherche finden sich 3 Möglichkeiten:

    mod_auth_pam verwenden und über libpam-mysql authentifizieren (Debian preferred way).
    Scheidet für mich aus, weil mich persönlich Herumgetue mit PAM meistens schmerzt, auch wenns dann manchmal überraschend fein tut. Zusätzlich halt ichs für unschön www-data zur Gruppe shadow hinzuzufügen. Genaueres gibts hier.
    mod_dbd & mod_authn_dbd (Apache preferred way)
    Ist aber eher pfui, weils da Lizenzprobleme gibt und der MySql-Treiber nicht inkludiert ist und mensch dann ja sowieso das alte Modul (mod_auth_mysql) neu übersetzen kann (s.u.). Ein HowTo für diese Variante (incl.MySql-Treiber) findet sich hier.
    mod_auth_mysql selber kompilieren
    Hat erstmal fein funktioniert. Allerdings authentifiziert da nix (im besten Fall) oder es verabschiedet sich der Apache (im Schlechteren). Wieder herumgesucht und über diesen Ubuntu-Bugreport gestolpert. Speziell die letzten beiden Einträge sind hilfreich. Vor allem jener von Mrts (Vielen Dank dafür!!!):

    $ wget mod_auth_mysql-3.0.0.tar.gz
    $ wget mod_auth_mysql-3.0.0-apache-2.2.3.patch
    $ tar zxf mod_auth_mysql-3.0.0.tar.gz
    $ apt-get install apache2-prefork-dev libmysqlclient15-dev
    $ cd mod_auth_mysql-3.0.0
    $ patch < ../mod_auth_mysql-3.0.0-apache-2.2.3.patch
    $ sed -i 's|#include <mysql.h>|#include <mysql/mysql.h>|' mod_auth_mysql.c
    $ apxs2 -c -lmysqlclient -lm -lz mod_auth_mysql.c
    $ apxs2 -i mod_auth_mysql.la
    $ echo 'LoadModule mysql_auth_module /usr/lib/apache2/modules/mod_auth_mysql.so' >/etc/apache2/mods-available/auth_mysql.load
    $ a2enmod auth_mysql

:) *Jumps around && is happy*

21/6/2007

MySQL – Doppelte Einträge finden und entfernen

Filed under: — stefan @ 13:33

Weils einfach immer wieder nötig ist sich mit den leidigen Daten auseinanderzusetzen…
Zum finden von Dupletten:

SELECT Table.key FROM Table
INNER JOIN Table AS Table2 ON
(Table2.Value1 = Table.Value1
AND Table2.Value2 = Table.Value2
AND ...)
WHERE Table2.key > Table.key

Vorausgesetzt wird in dem Fall natürlich ein numerischer Schlüssel (key), der raufzählt. Löschen geht dann folgendermassen:


DELETE Table.* FROM Table
INNER JOIN Table AS Table2 ON
(Table2.Value1 = Table.Value1
AND Table2.Value2 = Table.Value2
AND ...)
WHERE Table2.key > Table.key

Eine andere Variante, die gleichzeitig die zukünftige Eingabe von Dupletten verhindert funktioniert mit einem UNIQUE Index:

ALTER IGNORE TABLE Table ADD UNIQUE INDEX(Value1,Value2,...);

Ohne der Verwendung von IGNORE lässt sich der Index nicht erstellen, sofern doppelte Einträge vorhanden sind. Aus der MySQL – Doku geht auch nicht ganz eindeutig hervor welche der Dupletten dabei gelöscht werden, sprich in welcher Reihenfolge. Alles in allem aber immer wieder nützlich.

Powered by WordPress