Le blog de Jean David TECHER, un Réunionnais à Saint-Priest/Lyon

Aller au contenu | Aller au menu | Aller à la recherche


< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 >

mardi 16 juin 2009

[OpenLDAP] Erreur "DB_ENV->lock_id_free interface requires an environment configured for the locking subsystem" - [SOLVED]

Etat des lieux

Depuis samedi suite à  une tentative de reindexation de la base par slapindex, le service d'OpenLDAP ne voulait plus démarrer...

J'ai donc eu l'erreur suivante dans monfichier de log /var/log/slapd.log

@(#) $OpenLDAP: slapd 2.3.30 (Dec 13 2006 15:54:43) $       buildd@palmer:/build/buildd/openldap2.3-2.3.30/debian/build/servers/slapd
/etc/ldap/slapd.conf: line 113: rootdn is always granted unlimited privileges.
/etc/ldap/slapd.conf: line 130: rootdn is always granted unlimited privileges.
nss_ldap: could not connect to any LDAP server as (null) - Can't contact LDAP server
nss_ldap: failed to bind to LDAP server ldap://127.0.0.1: Can't contact LDAP server
nss_ldap: could not connect to any LDAP server as (null) - Can't contact LDAP server
nss_ldap: failed to bind to LDAP server ldap://127.0.0.1: Can't contact LDAP server
nss_ldap: could not search LDAP server - Server is unavailable
nss_ldap: could not connect to any LDAP server as (null) - Can't contact LDAP server
nss_ldap: failed to bind to LDAP server ldap://127.0.0.1: Can't contact LDAP server
nss_ldap: could not connect to any LDAP server as (null) - Can't contact LDAP server
nss_ldap: failed to bind to LDAP server ldap://127.0.0.1: Can't contact LDAP server
nss_ldap: could not search LDAP server - Server is unavailable
bdb_db_open: Database cannot be opened, err 13. Restore from backup!
bdb(dc=chezdavid,dc=local): DB_ENV->lock_id_free interface requires an environment configured for the locking subsystem
bdb(dc=chezdavid,dc=local): txn_checkpoint interface requires an environment configured for the transaction subsystem
bdb_db_close: txn_checkpoint failed: Invalid argument (22)
backend_startup_one: bi_db_open failed! (13)
bdb_db_close: alock_close failed
slapd stopped.
connections_destroy: nothing to destroy.

La solution

  1. Localiser le répertoire de la base pour le serveur et s'y rendre Pour le localiser, on regarde dans le fichier de configuration de OpenLDAP. Pour moi, il s'agit de /etc/ldap/slapd.conf. On repère la ligne contenant le terme directory
    root@olivia:~# grep directory /etc/ldap/slapd.conf
    # The base of your directory in database #1
    directory       "/var/lib/ldap"
    # The base of your directory for database #2
    donc
    cd /var/lib/ldap
  2. Ensuite on lancer un restore en faisant db4.2_recover
    db4.2_recover
  3. Ensuite on supprime le fichier de lock
    rm -f alock

Et on redémarre tranquillement son serveur

/etc/init.d/slapd start
Cool ça fonctionne à  nouveau!!!

samedi 23 mai 2009

[OpenLDAP/Syslog-ng] Rediriger les logs de LDAP dans un autre fichier que /var/log/syslog

Depuis que j'avais activé les logs de OpenLDAP par défaut celà  me mettait beaucoup de lignes dans /var/log/syslog. L'idée ici est de rediriger les logs d'OpenLDAP vers un autre fichier /var/log/slapd.log de manière à  ne plus les avoir dans /var/log/syslog.

Je me suis basé sur cet article http://blog.suretecsystems.com/archives/148-OpenLDAP-Quick-Tips-Using-syslog-or-syslog-ng-with-slapd-for-OpenLDAP-logging.html

La différence avec ma configuration tient dans les étapes suivantes

  1. dans mon fichier /etc/ldap/slapd.conf, j'ai mis le niveau de log par défaut (256). Même non spécifié celà  reste le liveau de log par défaut de OpenLDAP. Pour les divers niveaux de log possibles de OpenLDAP, il faut se référer à  http://www.zytrax.com/books/ldap/ch6/#loglevel
  2. Dans mon fichier /etc/syslog-ng/syslog-ng.conf, j'ai apporté les modifications suivantes:
    ...
    ...
    # all messages except from the auth and authpriv facilities
    filter f_syslog { not facility(auth, authpriv) and not match(slapd); };
    ...
    ...
    destination slapd { file("/var/log/slapd.log"); };
    filter f_slapd { match("slapd"); };
    log {
            source(s_all);
            filter(f_slapd);
            destination(slapd);
    };
    
    

Il suffit ensuite de redémarrer slapd et syslong-ng et là  ça marche

lundi 27 avril 2009

Script perl pour extraire les liens d'une page Web

Il y a un très bon module perl pour celà 

root@olivia:~# apt-cache search linkextor
libhtml-linkextractor-perl - Perl module used to extract links from HTML documents
On l'installe en faisant
apt-get install libhtml-linkextractor-perl
Ensuite on récupère le script qui lui est associé
wget http://plasmasturm.org/code/linkextor/linkextor -O linkextor
chmod +x linkextor

Pour toutes les possiblités possibles, il faut faire

./linkextor -h

Combiné par exemple à  wget notamment pour que ce dernier recrache en STDIN, on peut par exemple extraire les liens du site www.lemonde.fr dans les ancres a pointant contenant le mot-clé actualité

root@olivia:~# wget -q 'http://www.lemonde.fr' -O - | ./linkextor  -f 'a:href:actualite' -b -
/actualite-medias/article/2009/04/26/macha-beranger-la-voix-des-sans-sommeil-s-est-eteinte_1185641_3236.html
/actualite-en-continu/
/actualite-en-continu/
/actualite-medias/article/2009/04/24/la-publicite-pour-les-sites-de-paris-en-ligne-cree-la-polemique_1184981_3236.html#ens_id=628863
/actualite-medias/article/2009/04/22/hersant-va-ceder-le-journal-de-l-ile-de-la-reunion-a-un-entrepreneur-local_1183918_3236.html#ens_id=1183992
/actualite-medias/article/2009/04/21/le-csa-va-comptabiliser-le-temps-de-parole-du-chef-de-l-etat_1183677_3236.html#ens_id=1176471
/actualite-medias/reactions/2009/04/21/le-csa-va-comptabiliser-le-temps-de-parole-du-chef-de-l-etat_1183677_3236.html
/actualite-medias/article/2009/04/26/macha-beranger-la-voix-des-sans-sommeil-s-est-eteinte_1185641_3236.html
/actualite-medias/reactions/2009/04/26/macha-beranger-la-voix-des-sans-sommeil-s-est-eteinte_1185641_3236.html
/actualite-medias/article/2009/04/26/macha-beranger-la-voix-des-sans-sommeil-s-est-eteinte_1185641_3236.html
http://www.lemonde.fr/qui-sommes-nous/article/2008/01/02/telerama-fr-toute-l-actualite-culturelle-a-porte-de-clic_995453_3386.html

samedi 25 avril 2009

Ajouter Sqlite3 à  Php5

Par défaut la version embarquée de SQLite que j'ai avec php est une 2.X.Y. Il est possible de recourir à  sqlite3. La version 3 de SQLite offre plus de fonctionnalités que la version 2. Pour celà  il faut l'installer comme indiqué dans ce billet

Le site du projet php-sqlite3 est http://php-sqlite3.sourceforge.net/

Installation

On procède donc ainsi

wget http://fastbull.dl.sourceforge.net/sourceforge/php-sqlite3/sqlite3-0.5.tgz -O - | tar xzf -
cd sqlite3-0.5/
phpize
./configure --with-sqlite3
make
make install

Puis dans php.ini, il faut ajouter la ligne

extension=sqlite3.so

On redémarre ensuite apache pour prendre en compte la nouvelle extension

En pointant dans un fichier vers la fonctionnalité phpinfo(), on devrait avoir

SQLITE3

SQLite3 support enabled
sqlite3 library version 3.4.2

Création d'une table

On va crée la base test.sqlite3 contenant la table semaine

root@olivia:/var/www/test# sqlite3 test.sqlite3
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> CREATE TABLE semaine(idjour smallint primary key,jour_ref text);
sqlite> INSERT INTO semaine VALUES (1,'Lundi');
sqlite> INSERT INTO semaine VALUES (2,'mardi');
sqlite> INSERT INTO semaine VALUES (3,'mercredi');
sqlite> INSERT INTO semaine VALUES (4,'jeudi');
sqlite> INSERT INTO semaine VALUES (5,'vendredi');
sqlite> INSERT INTO semaine VALUES (6,'samedi');
sqlite> INSERT INTO semaine VALUES (7,'dimanche');
sqlite> .quit

Maintenant on énumére le contenu de la semaine

root@olivia:/var/www/test# sqlite3 test.sqlite3
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> .tables
semaine
sqlite> SELECT * FROM semaine;
1|Lundi
2|mardi
3|mercredi
4|jeudi
5|vendredi
6|samedi
7|dimanche
sqlite> .exit

Exemple de script

Voici un exemple asez simple d'utilisation

root@olivia:/var/www/test# cat sqlite3-test.php 
<?php
$db = sqlite3_open("test.sqlite3");
if (!$db) die ("Impossible d'acceder a la base");


/*
 * Requete pour la lecture de la table
 */

$query = sqlite3_query($db, "SELECT * FROM semaine ORDER BY 1 ASC");
if (!$query) die (sqlite3_error($db));

/*
 * utilisation de sqlite3_fetch_array() qui renvoit un table
 * associatif
 *
 */

while ( ($row = sqlite3_fetch_array($query)))
{
        printf("%d\t%s\n", $row['idjour'], $row['jour_ref']);
}

/*
 * On ferme tout !
 */
sqlite3_query_close($query);
sqlite3_close ($db);
?>
A l'exécution du script on aura alors
root@olivia:/var/www/test# /usr/lib/cgi-bin/php -q sqlite3-test.php
1       Lundi
2       mardi
3       mercredi
4       jeudi
5       vendredi
6       samedi
7       dimanche