Wordpress 2.8 et plug-ins

30 June 2009

Petit retour d’expérience suite au passage en Wordpress 2.8 - en fait il s’agissait d’installations directe en 2.8 par rapport à une en 2.7, mais ça revient au même.

Sur certains sites que j’ai créés sous Wordpress, j’utilise certains plugins assez géniaux, comme NextGen-Gallery pour des galeries de photos faciles et jolies et aussi wp-table (et maintenant wp-table-reloaded) pour gérer des tableaux facilement et sans pondre un code bancal (sans compter les fonctions d’import depuis fichiers CSV, tri par colonne etc)

Sur un de mes sites, j’ai hésité à passer en 2.8 suite à une remarque lue par rapport à NextGen-Gallery indiquant qu’on risquait de péter une limite mémoire. Je n’ai donc pas encore testé (manque de temps histoire d’éviter le gros downtime sur le site…)
C’est sur wp-table que j’ai eu un problème, je vous en fais part car la solution est triviale, alors que le problème est de taille.

Lorsqu’on cherche un plug-in pour gérer les tables facilement, sous wordpress, on tombe en premier lieu sur un plug-in nommé wp-table. Si on ne fait pas gaffe, on ne voit pas qu’il est validé pour Wordpress 2.3 max… Bon, à part ça, jusqu’à wordpress 2.7 (et même 2.8 bleeding edge), ça tourne bien.
Mais en 2.8 officielle, ça tourne de manière bancale : les tables sont bien intégrées (bonnes balises dans le code) lorsqu’on les voit dans un article. Mais si on les voit en naviguant dans les “catégories” ou “tags” d’article, les balises HTML/CSS ne sont pas positionnées. Résultat, un tableau dégueulasse, du ligne à ligne sans aucune mise en page.

Grosso-modo : le code appelant les vues par catégories et par tags a dû fortement changer et le plug-in n’est pas inséré où il faut en 2.8…

Panique : il faut vite trouver un plug-in correct et exporter/réimporter tout. L’horreur en perspective.
En recherchant cette fois un plug-in potable en 2.8 p our les tables, on tombe sur “wp-table Reloaded” valide en 2.8. Tiens tiens…
C’est carrément extra : après l’installation (wget+unzip+activate, comme d’hab), le menu d’import trouve tout seul les tables crées par le vieux wp-table dont il semble être issu. Vu le nom, remarquez, ça semble presque logique.
Résultat, à part une réindexation des numéros de tables (on recommence à 1) et la balise “table” entre crochets qui change un peu (donc tous les “posts” et “pages” à modifier un peu), le boulot est vite torché.
Reste que le CSS par défaut des tables me semble un peu light.
Le tri par colonne existe toujours, mais il nécessite un plugin JQuery. Je ne l’ai pas encore mis en place, mais ça ne semble pas compliqué.

Si vous connaissez mieux comme plug-ins de galerie photos et de gestion de tables, n’hésitez pas à en faire part. Les notations sur la page de plug-ins de Wordpress sont assez légères (en général plusieurs dizaines de votes pour des dizaines de milliers de download), il est donc difficile parfois de voir si un plug-in tient la route ou pas…

Bloggez bien.

Tags:,,, Posted in Bugs, Debian, Ubuntu, planet-libre.org1 Comment

Windows et les alias (CNAME)

On continue dans la série des articles Windows sur mon blog où autrefois, je parlais de Linux :)
Bon, trève de plaisanterie, j’ai voulu installer des imprimantes sur un alias de serveur, genre \\mon_serveur_d_impression, quelle que soit la machine utilisée réellement, disons \\vraisrv1.
L’objectif est de rendre transparente la conf sur les postes, si on décide de bouger les imprimantes ; et éviter de se payer une grosse reconfig de tous les PC…

Je vous décris la manip en tenant compte du bug Microsoft qui va avec (ou de la feature de sécurité, appelez ça comme vous voulez).
Le bug est le suivant : impossible d’accéder à un partage (fichier ou imprimante) en utilisant un alias (CNAME) d’une machine sur Windows serveur (au moins 2000 et 2003).

Voici comment faire.

Sur votre DNS, créez le CNAME qui pointe de mon_serveur_d_impression et rechargez-le.
Testez, ça ne marche pas : net view vraisrv1 affiche les partages et net view mon_serveur_d_impression n’affiche rien et crie au scandale avec un message complètement inapproprié :

C:\>net view mon_serveur_d_impression
L’erreur système 52 s’est produite.

Vous n’étiez pas connecté car il y avait un nom en double sur le réseau. Allez dans Système dans le Panneau de configuration et modifiez le nom de l’ordinateur et essayez à nouveau.

Appliquez donc la correction décrite ici : http://support.microsoft.com/?kbid=281308, à savoir, ajoutez une clef “DisableStrictNameChecking” à valeur 1 dans la base de registre, à l’emplacement “HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters”. A faire sur le serveur “vraisrv1″, celui pour lequel on veut créer un alias.
Redémarrez le service “Serveur” (correspondant à LanmanServer) - ça, c’est pas dit dans la doc Microsoft - ou, plus simplement redémarrez le serveur. Car le service “Serveur” est central et il y a pas mal de dépendances.

Ensuite, le net view mon_serveur_d_impression fonctionnera, ou, plus simplement, le “Démarrer -> Exécuter -> \\mon_serveur_d_impression”

Avec un nom comme “DisableStrictNameChecking”, on pourrait presque croire que c’est un paramètre de sécurité…. ils sont forts au marketting Windows. Je vois d’ici le transparent Powerpoint lors d’une grand-messe : “nous avons permis un paramètre laxiste pour permettre de ne plus contrôler le nom réel du serveur”. Traduction : “on a corrigé un bug bien moisi qu’on trouvé des admins sachant gérer un DNS et ayant compris à quoi ça sert”.

Tags:,,,,, Posted in Bugs, WindowsLeave a Comment

IE “runonce3.aspx” qui déconne

28 May 2009

J’ai eu un PC dont le IE7 déconnait au lancement, il partait sur l’URL bien connue de “runonce.msn.com/blabla/runonce3.aspx” qui doit activer ou remonter je ne sais quelle info vers Microsoft.
Problème, la page “plantait”. Voici comment le résoudre en base de registre. continue reading…

Tags:,,, Posted in Bugs, Windows1 Comment

Windows [Server] 64 bits + ODBC Oracle + Office 32 bits = bug pourri

25 May 2009

Description d’un bug qui m’a valu quelques heures de recherche galère sur Google.

Contexte

  • Sur un Windows Server 2003 64 bits - ça doit être pareil sur un XP 64
  • ODBC Oracle (version je sais pas quoi ; il semblerait que des versions plus récentes corrigent le bug ; pas sûr et pas facile dans mon cas de faire l’upgrade du client Oracle)
  • Office 2007 pour faire du “reporting façon tableau croisé dynamique depuis Excel en tapant directement dans la base”. Oui c’est une méthode assez discutable, mais pratique pour l’utilisateur lambda, habitué d’Excel,

Le bug qui tue

Si Office (ou n’importe quelle application) est installée dans C:\Program Files (x86) qui est le répertoire par défaut pour les applications 32 bits sur un OS Windows 64 bits, l’appel du client Oracle via ODBC échoue à cause du fait que : le-programme-appelant-est-installé-dans-un-répertoire-contenant-une-parenthèse ™. C’est pas beau ça ?

Le symptome est que toute la connectivité fonctionne (NET assistant, SQLPlus), mais qu’Office (Excel) ou une autre application installée dans c:\blabla(x86) génère une erreur ORA-06413
Ne pas confondre avec l’erreur ORA-12154 qui elle indique plutôt que votre tnsnames.ora est foireux.

C’est vaguement expliqué dans un forum Oracle parlant de TOAD.
A noter que dans le sqlnet.log, vous verrez vaguement un message indiquant que C:\Program Files (x86)\bla\excel.exe a généré une erreur ORA-06413, mais c’est tout.

Contournement

Version facile pour tester

Lancez excel depuis une fenêtre DOS (ou modifiez son chemin de lancement), depuis le répertoire C:\PROGRA~2\Office\Office12\EXCEL.EXE
Le fait d’utiliser le “nom court” PROGRA~2 (PROGRA~1 est le c:\Program Files “normal”, pas le x86) suffit à faire fonctionner la chose. C’est pas énorme ça ????

Version moyenne

Installer Office dans C:\bugdemerde\Office

Version durable

Upgradez le client Oracle.
Je n’ai aucune idée de la version éradiquant le bug, si tant est qu’elle existe. Je suis preneur d’infos

A+

Tags:,,, Posted in Bugs, Windows4 Comments

SquidGuard : filtre d’URL et listes à jour (le plus dur)

20 May 2009

Pour faire suite à l’article sur la mise en place de Privoxy pour faire sauter les pubs dans toute votre société (ou chez vous sur votre petit réseau local), voici un complément : le filtre d’URL par catégorie.

J’ai eu l’occasion de jouer avec SquidGuard à travers un serveur IPCOP mis en place par mes soins dans l’école primaire de mon village, avec la bénédiction du Ministère de l’Education. Ca marche pas mal, il faut avouer. N’ayant pas de moyen, une école optera certainement pour des listes de filtrages gratuites. Si une seule était à retenir, ce serait celle de l’Université de Toulouse.

Deux objectifs possibles :

Mise en place sur Debian

Installation et docs de base

Contrairement à pas mal d’outils sous Debian, l’installation ne fait rien en soit, elle amène simplement de l’outillage et la plus grosse part est après.
Commencez par installer le logiciel, via un classique aptitude install squidguard.
Evidemment, votre squid est déjà en place et fonctionnel.

Pensez à lire le fichier /usr/share/doc/squidguard/README.Debian ; c’est d’ailleurs une règle générale après une installation de paquet Debian, mais surtout pour SquidGuard qui, après l’installation, ne fait rien tout seul.

Principes de fonctionnement

Je décris le principe avant de foncer la tête dans le guidon.

SquidGuard est simplement une sorte d’extension à base de scripts et d’ACL Squid pour filtrer des URL en se basant sur des domaines et des expressions régulières d’URL
Lui même n’apporte aucun niveau de filtrage et il faudra aller chercher une liste à jour de sites. C’est là toute la difficulté.
J’arrête tout de suite ceux qui pensent bloquer facebook.com en écrivant une ACL bidon genre deny blabla facebook.com dans Squid. Entre les sites genre how-to-un-unblock-facebook.com et les “redirectors” genre proxies anonymes, ce sera impossible. D’où l’aide de listes, payantes ou non, robotisées ou non, mises à jour régulièrement ou non.
Soit vous payez une liste type urlblacklist.com, soit vous optez pour une gratuite, mais néanmoins efficace, comme celle de l’Université de Toulouse, cf. plus haut. Sinon, allez voir là - je n’ai pas testé les 2 premiers liens.

La README évoqué ci-dessus parle d’un paquet “chastity-list”, apt-cache search chastity n’ayant rien donné, je n’ai pas cherché plus loin.

Une fois la liste choisie, vous obtiendrez généralement des fichiers textes, classés par catégories. Il faut les transformer en base de données type Berkeley-machin (fichiers .db) pour qu’ils soient efficaces en mémoire.
Ce sera évidemment à scripter automatiquement toutes les nuits (nouvelles listes => nouveaux .db => rechargement de Squid).
A noter que les fichiers .db seront générés par SquidGuard uniquement lorsqu’il verra que vous utilisez telle ou telle catégorie dans /etc/squid/squidGuard.conf. SquidGuard n’ira pas compiler les bases inutilisées (ce qui prend du temps sur des grosses listes, genre “adult” (=porno))

Enfin, vous ajouterez les catégories qui vous intéressent en ayant pris soin de créer une belle page qui indique à l’utilisateur pourquoi tel site est bloqué (je suis sympa, je vous fournis un tel script minimaliste ; en gros une correction de celui fourni dans le package SquidGuard qui est passablement foireux)

Je ne parle pas des aspects communication en entreprise : filtrer les sites aura sûrement un impact important sur le moral des troupes, fonction du gain de bande passante, fonction de la productivité :)

Mise en place pratique

J’illustre la suite par le blocage de la catégorie “hacking”, où l’on pourra tester par exemple www.warez.com, à partir des listes de l’Université de Toulouse

Récupération de la liste de l’Université de Toulouse

La base : récupérez soit une catégorie, soit la totalité (je pars sur cette option). Voyez l’explication de chaque catégorie ici.

mkdir /root/squidguard
cd /root/squidguard
wget ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz
tar xzvf blacklists.tar.gz
mv blacklists/* /var/lib/squidguard/db/
chown -R proxy:proxy /var/lib/squidguard/db/

Choix d’une catégorie

Dans /etc/squid/squidGuard.conf, on va toucher le minimum. Ajoutez n’importe où :

dest hacking {
domainlist hacking/domains
urllist hacking/
log guard_hacking.log
}

Pour savoir si une catégorie contient des “domaines”, des “URL” ou des “expressions”, allez voir dans /var/lib/squidguard/db/la_categorie/. En effet, seules quelques catégories ont des “expressions”, il s’agit avant tout des catégories de pubs. Je considère que privoxy est là pour ça. Donc je n’ajoute pas expression hacking/expressions (même pas sûr de la syntaxe). Pour m’assurer que les “expressions” sont utilisées uniquement pour la pub, j’ai fait ça et vu des fichiers de taille 0 ou non-existant pour la plupart des catégories :

srv:/var/lib/squidguard/db# ls -l */expres*
-rwxr-xr-x 1 proxy proxy 57 2006-05-10 07:47 ads/expressions
-rw-r–r– 1 proxy proxy 0 2005-10-18 16:51 adult/expressions
-rw-r—– 1 proxy proxy 0 2002-11-06 14:08 aggressive/expressions
-rw-r—– 1 proxy proxy 0 2002-11-06 14:08 agressif/expressions
-rw-r–r– 1 proxy proxy 0 1999-03-04 08:07 forums/expressions
-rw-r–r– 1 proxy proxy 0 1999-03-04 08:07 mail/expressions
-rw-r–r– 1 proxy proxy 42 2009-03-19 10:42 malware/expression
-rw-r–r– 1 proxy proxy 47 2009-03-20 13:30 malware/expressions
-rw-r–r– 1 proxy proxy 0 2005-10-18 16:51 porn/expressions
-rw-r–r– 1 proxy proxy 0 1999-10-06 17:37 proxy/expressions
-rwxr-xr-x 1 proxy proxy 57 2006-05-10 07:47 publicite/expressions
-rw-r–r– 1 proxy proxy 0 1999-10-06 17:37 redirector/expressions
-rw-r–r– 1 proxy proxy 123 2005-06-14 21:33 strict_redirector/expressions
-rw-r–r– 1 proxy proxy 505 2006-05-23 22:05 strong_redirector/expressions
-rw-r—– 1 proxy proxy 0 2002-11-06 14:08 violence/expressions
-rw-r–r– 1 proxy proxy 0 1999-04-19 14:04 warez/expressions

Ensuite, on indique à SquidGuard (donc à Squid) comment réagir pour cette catégorie. Modifier la section acl {} du fichier /etc/squid/squidGuard.conf pour qu’il y ait ça (gardez ou non la palanquée de lignes de commentaires) :

acl {
default {
pass !hacking all
redirect http://srv/cgi-bin/squidGuard-simple.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
}
}

Si vous voulez bloquer plusieurs catégories, ce sera à base de pass !hacking !adult !blabla all.
Notez dans la section acl {} l’adresse de redirection utilisée : une page spéciale hébergée sur le serveur, nommée squidGuard-simple.cgi. Il faut maintenant la mettre en place.
A noter aussi, il me semble que de base, la ligne “redirect” contient des “+” à la place des “&” pour passer les arguments. J’ai pas bien pigé, j’ai toujours vu des “&” et avec les “+”, ça ne marchait pas.

Redirection vers une page spéciale

  • Attention, j’ai ouï dire que si le script n’était pas là, ça passait silencieusement et la requête aboutissait malgré la demande de blocage. Je n’ai pas testé, j’ai surtout testé une URL de chaque catégorie que je suis censé bloqué.
  • Je considère que votre site web est configuré pour que /cgi-bin/ soit en un “Alias” de “/usr/lib/cgi-bin/”, c’est en général défini dans la configuration par défaut d’Apache2 et vous pouvez vous en assurer rapidement avec cette commande grep cgi-bin /etc/apache2/sites-enabled/* pour voir si ça répond - en gros.
  • La liste des variables que l’on peut passer au script de redirection est donnée dans la doc HTML, /usr/share/doc/squidguard/CONFIGURATION.html

Deux scripts sont fournis par le mainteneur du paquet Debian pour nous donner une trame pour l’écriture du script de redirection - le script qui dira “accès bloqué blabla, si vous pensez que c’est une erreur, contactez l’administrateur blabla”. Ils sont là :

srv:/var/lib/squidguard/db# dpkg -S squidGuard*.cgi
squidguard: /usr/share/doc/squidguard/examples/squidGuard.cgi.gz
squidguard: /usr/share/doc/squidguard/examples/squidGuard-simple.cgi.gz

Le premier est apparement plus complet, prévu pour du multi-langues etc, mais récupère comme un pied les variables qu’on lui passe. J’ai opté pour l’autre car rapidement, j’ai pu mettre en place une page qui indiquait clairement et simplement le site bloqué, la catégorie, l’IP du demandeur et donnait le mail de contact de l’administrateur.
Donc soit vous optez pour ces scripts, soit pour le mien fourni ici, basé sur le 2è script, traduit en français et épuré de certains trucs inutiles. Voyez :

squidguard

On est fin prêt pour un test grandeur nature.

Relance de Squid via la compilation des listes de blocage

Lancez la commande /usr/sbin/update-squidguard pour contrôler les droits sur les fichiers de /var/lib/squidguard/db/ et générer les .db.
Attention, sur la liste “adult” (environ 1 million de domaines), ça peut prendre quelques minutes.
Ce script recharge Squid.
Testez un site de la catégorie “hacking”, exemple www.warez.com

Script de mise à jour automatiques des listes

Voici un script que j’ai mis en crontab pour automatiser la récupération de la liste de l’Université de Toulouse (si mise à jour), la mise à jour qui va bien, création de .db et relance de Squid.

srv:~# cat /root/squidguard/update_toulouse.sh
#!/bin/sh
cd /root/squidguard
wget -N ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz
rm -rf blacklists
rm -rf /var/lib/squidguard/db/*
tar -xzvf blacklists.tar.gz
# proprio et perm fixées de toute manière par update-squidguard
chown -R proxy:proxy blacklists
mv blacklists/* /var/lib/squidguard/db/
/usr/sbin/update-squidguard
# A priori, si le site est down ou connx internet HS, on reutilisera le .tar.gz actuel
# donc pas de risque de se retrouver avec une base vide

Mettez les droits d’exécution via chmod u+x /root/squidguard/update_toulouse.sh et collez ça dans la crontab :

0 3 * * 1-5 root /root/squidguard/update_toulouse.sh

Ca devrait rouler !

Divers

Log des accès interdits

J’ai passé sous silence la ligne “log guard_hacking.log”. Elle est optionnelle et permet de garder ou non une trace des accès interdit, par catégorie. A voir, vie privée des gens, tout ça. J’ai choisi de la nommer quelque_chose.log car ce fichier ira directement dans /var/log/squid/ et sera donc “logrotaté” naturellement comme tous les logs Squid, via ce qu’on trouve en standard dans le logrotate de Squid, /etc/logrotate.d/squid, à savoir : /var/log/squid/*.log
Vu ?

Plages horaires

Vous noterez que la conf simpliste ici peut être étoffée, dans le fichier /etc/squid
/squidGuard.conf
, vous avez tous les commentaires nécessaires, notamment pour faire du [dé]blocage par plages horaires.

D’autres compléments pour Squid ?

Après Privoxy, il faudrait un 3è article maintenant sur HAVP. Je vais y penser éventuellement.

Générer la conf pour toutes les catégories

Ne réutilisez pas le résultat brutalement, vous bloqueriez même Google, car il est listé dans ce qui ressemble plus à une whiteliste propre à l’Université de Toulouse, la catégorie “liste_bu”.
Afin d’obtenir la liste complète des déclarations de catégories pour squidGuard.conf, vous pouvez utiliser celà :

srv:/var/lib/squidguard/db# for i in `find . -maxdepth 1 -type d|awk -F’/’ ‘{print $2}’ | sort`
do
echo -e dest $i {
echo -e \\t”domainlist $i/domains”
echo -e \\t”urllist $i/urls”
echo -e \\t”log guard_$i.log”
echo }
done

Tags:,,, Posted in Debian, planet-libre.org6 Comments

Privoxy sur Squid : virer les pubs pour tout le monde

19 May 2009

Sur mon firefox, j’utilise “AdBlock Plus” pour filtrer les pubs. Mais dans une société où IE est le maître (pour cause d’intranets pas compatibles, de pas de droit d’admins et d’utilisateurs contents avec IE (!)), amuse toi pour faire sauter les pubs pour tout le monde.
J’ai entendu parler de IE7pro, une extension pour IE (je ne savais même pas que ça existait). Je l’ai donc installé et désinstallé dans la foulée. C’est naze.
D’où l’idée de déterrer ce bon vieux privoxy que j’utilisais localement sur mon PC avant que “Adblock Plus” n’existe. Il peut se chaîner avec un autre proxy, notamment Squid, afin de filtrer toutes les pubs. (toutes = le mieux possible)

Allez zou, mise en place de la chose sur un serveur avec Squid, pour en faire profiter tout le monde.

Quelques remarques par rapport à Debian

Je ne connais pas trop le rythme d’update des règles de privoxy. Ce que j’en ai compris, c’est qu’elles sont intégrées au package privoxy. A mon sens, ça devrait être dissocié, par exemple dans le dépôt “volatile”.
Ca ne l’est pas. Et comme les pubs évoluent, j’ai un peu hésité.
Finalement, j’ai opté pour la version packagée Debian sur le site de privoxy plutôt que la version officielle dans la “stable”. Moins pratique pour mettre à jour, mais je n’aimerais pas qu’un nouveau genre de pubs ne soit pas filtré ou à l’inverse, trop de coups de haches sur certains sites.
En “stable”, on est en 3.0.9 si je ne dis pas de bêtise, contre 3.0.12 en .deb sur le site.

J’ai aussi essayé de trouver une méthode facile pour convertir les expressions régulières d’Adblock Plus pour privoxy. J’ai lâché l’affaire. Si quelqu’un sait faire, ça peut être intéressant.

Quelques chiffres après 2 semaines d’utilisation

Histoire de mettre l’eau à la bouche. 100 personnes surfant raisonnablement ont vus (façon de parler) 10% de leurs requêtes bloquées par privoxy. C’est toujours ça d’économisé, mais c’est surtout le gain sur la pollution visuelle qui vaut le coup.
Je n’ai pas vu de différences sur quelques sites où j’avais l’habitude d’aller via “Firefox+AdBlockPlus” par rapport à “n’importe quel navigateur+privoxy sans adblock plus évidemment”.

Mise en place sur Debian

Installation

Installez donc le package Debian , précédemment téléchargé, avec la commande suivante :

dpkg -i privoxy_3.0.12-1_i386.deb

Paramétrage et tests de base

Tout se passe dans /etc/privoxy/config. Vous n’avez qu’une chose à modifier pour tester votre privoxy en direct :

listen-address localhost:8118

Si le service est sur un serveur (et pas votre PC), changez “localhost” en “*” ou l’IP de la machine sur le LAN et relancez via /etc/init.d/privoxy restart
Bien sûr, il faut indiquer à votre navigateur d’utiliser le proxy sur cette machine, port 8118.
A la fin : faites bien attention à la valeur choisie (ou à vos règles de firewall si elles filtrent l’accès au serveur squid/privoxy), il ne faudrait pas qu’un utilisateur puisse adresser en direct privoxy en court-circuitant squid…

Interco avec Squid

La doc officielle de privoxy dit de chaîner dans l’ordre : PC -> squid -> privoxy
Il doit y avoir une raison, peut-être pour ne pas court-circuiter les éventuelles ACL de Squid, qui permettraient par exemple un certain traitement suivant l’IP source de la requête.
Bon bref, c’est donc au niveau de Squid qu’il faut paramétrer. Cherchez le mot “squid” dans la doc http://www.privoxy.org/user-manual/config.html. En résumé, ajoutez où il faut dans /etc/squid/squid.conf :

cache_peer 127.0.0.1 parent 8118 7 no-query
acl ftp proto FTP
always_direct allow ftp
never_direct allow all

Dans l’exemple, 127.0.0.1 indique que privoxy est sur la même machine que squid, sinon mettez l’IP de privoxy, et son port, par défaut 8118.
A noter que squid fait proxy FTP dans mon exemple, sinon adaptez.
Relancez squid, un /etc/init.d/squid reload doit suffire.

Pour voir les stats vite fait

http://p.p/
Ca peut servir pour configurer l’outil aussi, si vous avez activé ce qu’il faut
Evidemment, vous serez gentils de whitelister michauko.org. Je me suis pas tapé la mise en place de Google AdSense pour rien :) ouais bon, ça va… c’est pour financer un jour quelques mois de mon serveur…

A suivre

L’article SquidGuard, l’ami de Squid quand l’accès Internet est un peu trop surchargé par 99% d’inutile.

Tags:,,,, Posted in Debian, planet-libre.org8 Comments

Joujou avec les encodages 8859-1, UTF-8 etc

12 May 2009

A l’occasion de l’écriture d’un script Python pour convertir un CSV-dégueu en XML-UTF8, le tout en environnement windows+linux et partant d’un CSV issu d’un Excel issu de copier-coller dégueulasses, j’ai eu à jouer avec des conversions de charset, de formats UNIX/Windows etc etc
Ca m’a permis de découvrir 2/3 outils, objet de cet article ; je passe sur la multitude d’autres problèmes de nettoyage du contenu issu du copier-coller : guillemets relookés par je ne sais qui (Word ?), tirets relookés aussi etc…

Les basiques :

  • file : permet d’identifier un type de fichier, notamment, pour du texte brut, s’il est encodé en ISO-machin ou en UTF-8. A noter, si le texte en question est à l’intérieur d’un script, enfin bref, de quelque chose enrobant ce texte, “file” se limitera à détecter le type de script, par exemple. Dans ce cas, extraire le texte en question dans un fichier à part (via des “grep”) afin d’analyser l’encodage de ce texte. J’ai pas trouvé plus simple
  • dos2unix : conversion des fins de lignes DOS (2 octets \010\013 (ou l’inverse) en un seul (\010 ou l’autre, je ne sais jamais :). Si vous êtes passés par un transfert FTP type ASCII, c’est fait totomatiquement. Mais en SFTP ou autre chose, niet.
  • unix2dos : devinez

Ensuite :

  • tcs : permet de convertir un fichier encodé avec un charset vers un autre, exemple : tcs -f 8859-1 -t utf source > dest. Faites des “file” ensuite pour voir.
  • rxp : valide la syntaxe XML (et l’encodage utilisé) d’un fichier XML
  • od : affiche en hexa, ascii, octal (etc) un fichier. On peut cumuler et mettre en parallèle l’ascii avec l’hexa, par exemple

Voilà, c’est tout.

Tags:,,,, Posted in Coup de coeur, Debian, Ubuntu, planet-libre.org2 Comments

Installer le client Oracle sur Debian/Lenny, interco avec PHP

7 May 2009

Dans la série j’installe des trucs pas vraiment packagés pour Debian, voici le client Oracle ; toujours dans l’optique de faire gagner du temps à ceux qui auraient à le faire.
Je n’ai pas trouvé de méthode bien propre sur Google. En mixant plusieurs docs qui sont des comptes-rendus d’install de cas particuliers, je pense avoir trouvé une méthode un peu générale, vu que je suis parti d’une machine vide. Quant au moteur de recherche d’infos sur oracle.com, j’ai vite renoncé.

Contexte

Un serveur Oracle sous Windows, quelque part. Une machine Linux sur laquelle je veux pouvoir faire tourner des scripts PHP (en ligne de commande et via apache) attaquant cette base, et faire du sqlplus “nativement” depuis cette machine.

Repos Debian VS .zip VS .rpm

Oracle propose un repo à l’adresse suivante : deb http://oss.oracle.com/debian unstable main non-free. Je n’ai pas ressenti le besoin de l’utiliser. Il m’a l’air d’être là pour l’installation d’Oracle XE, la version serveur gratuite, l’équivalent d’un MSQL Server Express chez Microsoft.
Ensuite, entre le ZIP et le RPM, j’ai opté pour les RPM. J’explique ci-dessous.

Au passage, si vous voulez voir le repository, ajoutez la signature suivante :

cd /tmp
wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle
apt-key add RPM-GPG-KEY-oracle

Installation des paquets

Dans mon cas, j’ai été cherché les paquets suivants - tous disponibles ici :

  • oracle-instantclient11.1-basic : la lib de connexion Oracle
  • oracle-instantclient11.1-devel : Le SDK, pour la suite, notamment construire le module php oci8
  • oracle-instantclient11.1-sqlplus : l’outil sqlplus

J’ai opté pour les versions RPM que j’ai converti via alien en .deb
Le seul intérêt est d’éviter de se demander où on doit mettre les fichiers qui sont livrés (en version ZIP) tous dans le même répertoire, (les lib, exe, etc). Pour autant, ça ne génère pas de script de pre/post-configuration qui auraient permis de positionner les variables habituelles Oracle (TNS_ADMIN par exemple), ce genre de manips.
Donc, après avoir installé les 3 .deb, il faut faire :

echo /usr/lib/oracle/11.1/client/lib >> /etc/ld.so.conf.d/oracle.conf
ldconfig -v # indique ces lib au linker ld.so
echo TNS_ADMIN=/etc/oracle >> /etc/environment
mkdir /etc/oracle # vous y stockerez le tnsnames.ora
aptitude install libaio1 # necessaire pour la comm. Oracle

Si vous n’installez pas “libaio1″, vous planterez car sqlplus en a besoin, voyez :

serveur:/# ldd `which sqlplus`
linux-gate.so.1 => (0xb7fa3000)
libsqlplus.so => /usr/lib/oracle/11.1/client/lib/libsqlplus.so (0xb7ef6000)
libclntsh.so.11.1 => /usr/lib/oracle/11.1/client/lib/libclntsh.so.11.1 (0xb63aa000)
libnnz11.so => /usr/lib/oracle/11.1/client/lib/libnnz11.so (0xb61fd000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb61f9000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb61d3000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb61ba000)
libnsl.so.1 => /lib/i686/cmov/libnsl.so.1 (0xb61a1000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb6046000)
libaio.so.1 => /lib/libaio.so.1 (0xb6043000)
/lib/ld-linux.so.2 (0xb7fa4000)

Enfin, il faut renseigner votre fichier tnsnames.ora de description de vos bases, exemple :

serveur:/# cat /etc/oracle/tnsnames.ora
# Generated by ma main
MaBase =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.x.y)(PORT = 1522))
)
(CONNECT_DATA =
(SID = MON_SID)
)
)

A ce niveau là, sqlplus devrait fonctionner, testez via :

sqlplus login/pass@MaBase

Bien sûr, vous vous êtes reloggué pour bénéfichier de la variable d’environnement TNS_ADMIN ;)

Partie PHP pure

Il faut installer 2/3 compléments à PHP si ce n’est déjà fait, à savoir les paquets php5-dev, php-pear et enfin ajouter “l’extension oci8″ pour prendre en charge les connexions Oracle.
Faites-vous un script appelant phpinfo() pour voir qu’il manque l’extension “oci8″.
Pour l’installer, on utilise “pecl” (cet outil permet d’aller chercher des extensions PHP que votre distribution n’aurait pas pré-packagé, un peu comme les modules PERL qu’on trouve chez cpan.org et qu’on installe en ligne de commande via “cpan” (si je me souviens bien ;)) et les compile sur votre système, automagiquement.
On tape donc :

pecl install oci8

Ca mouline, et si ça n’insulte pas, alors on est bon :

serveur:~/pecl# pecl install oci8
downloading oci8-1.3.5.tgz …
Starting to download oci8-1.3.5.tgz (137,987 bytes)
……………………done: 137,987 bytes
10 source files, building
running: phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
1. Please provide the path to the ORACLE_HOME directory. Use ‘instantclient,/path/to/instant/client/lib’ if you’re compiling with Oracle Instant Client : autodetect

1-1, ‘all’, ‘abort’, or Enter to continue:
building in /var/tmp/pear-build-root/oci8-1.3.5
running: /tmp/pear/temp/oci8/configure –with-oci8
checking for grep that handles long lines and -e… /bin/grep
[...]
configure: WARNING: You will need re2c 0.12.0 or later if you want to regenerate PHP parsers.
[...]
configure: WARNING: OCI8 extension: ORACLE_HOME is not set, looking for default Oracle Instant Client instead
[...]
checking whether to build static libraries… no
configure: creating libtool
appending configuration tag “CXX” to libtool
appending configuration tag “F77″ to libtool
configure: creating ./config.status
config.status: creating config.h
running: make
/bin/sh /var/tmp/pear-build-root/oci8-1.3.5/libtool –mode=compile gcc -I. -I/tmp/pear/temp/oci8 -DPHP_ATOM_INC -I/var/tmp/pear-build-root/oci8-1.3.5/include -I/var/tmp/pear-build-root/oci8-1.3.5/main -I/tmp/pear/temp/oci8 -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/oracle/11.1/client -DHAVE_CONFIG_H -g -O2 -c /tmp/pear/temp/oci8/oci8.c -o oci8.lo
mkdir .libs
gcc -I. -I/tmp/pear/temp/oci8 -DPHP_ATOM_INC [...]
[...]
gcc -shared .libs/oci8.o .libs/oci8_lob.o .libs/oci8_statement.o .libs/oci8_collection.o .libs/oci8_interface.o -L/usr/lib/oracle/11.1/client/lib -lclntsh -Wl,-rpath -Wl,/usr/lib/oracle/11.1/client/lib -Wl,-soname -Wl,oci8.so -o .libs/oci8.so
creating oci8.la
(cd .libs && rm -f oci8.la && ln -s ../oci8.la oci8.la)
/bin/sh /var/tmp/pear-build-root/oci8-1.3.5/libtool –mode=install cp ./oci8.la /var/tmp/pear-build-root/oci8-1.3.5/modules
cp ./.libs/oci8.so /var/tmp/pear-build-root/oci8-1.3.5/modules/oci8.so
cp ./.libs/oci8.lai /var/tmp/pear-build-root/oci8-1.3.5/modules/oci8.la
PATH=”$PATH:/sbin” ldconfig -n /var/tmp/pear-build-root/oci8-1.3.5/modules
———————————————————————-
Libraries have been installed in:
/var/tmp/pear-build-root/oci8-1.3.5/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR’
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH’ environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH’ environment variable
during linking
- use the `-Wl,–rpath -Wl,LIBDIR’ linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf’

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
———————————————————————-

Build complete.
Don’t forget to run ‘make test’.

running: make INSTALL_ROOT=”/var/tmp/pear-build-root/install-oci8-1.3.5″ install
Installing shared extensions: /var/tmp/pear-build-root/install-oci8-1.3.5/usr/lib/php5/20060613+lfs/
running: find “/var/tmp/pear-build-root/install-oci8-1.3.5″ -ls
65412 4 drwxr-xr-x 3 root root 4096 May 7 10:08 /var/tmp/pear-build-root/install-oci8-1.3.5
65441 4 drwxr-xr-x 3 root root 4096 May 7 10:08 /var/tmp/pear-build-root/install-oci8-1.3.5/usr
65442 4 drwxr-xr-x 3 root root 4096 May 7 10:08 /var/tmp/pear-build-root/install-oci8-1.3.5/usr/lib
65443 4 drwxr-xr-x 3 root root 4096 May 7 10:08 /var/tmp/pear-build-root/install-oci8-1.3.5/usr/lib/php5
65444 4 drwxr-xr-x 2 root root 4096 May 7 10:08 /var/tmp/pear-build-root/install-oci8-1.3.5/usr/lib/php5/20060613+lfs
65440 408 -rwxr-xr-x 1 root root 411611 May 7 10:08 /var/tmp/pear-build-root/install-oci8-1.3.5/usr/lib/php5/20060613+lfs/oci8.so

Build process completed successfully
Installing ‘/usr/lib/php5/20060613+lfs/oci8.so’
install ok: channel://pecl.php.net/oci8-1.3.5
configuration option “php_ini” is not set to php.ini location
You should add “extension=oci8.so” to php.ini

On peut donc ajouter l’extension oci8 à PHP, via un fichier habituellement placé ici :

serveur:/# cat /etc/php5/conf.d/oracle.ini
extension=oci8.so

Normalement, votre script phpinfo() devrait vous indiquer votre extension oci8. Cool.

Partie PHP depuis apache

J’ai un peu tourné en rond pour cette partie. La difficulté est de faire bouffer le fichier tnsnames.ora à Apache pour les scripts PHP. Car tout le boulot a été fait aux étapes d’avant.
J’ai testé des SetEnv TNS_ADMIN dans /etc/apache2/httpd.conf, mais rien, il s’en fout.
Apparement, il faut que l’environnement où s’exécute Apache (en tant que www-data) contiennent TNS_ADMIN. Donc, il a fallu l’ajouter dans /etc/apache2/envvars, après la partie standard qu’il contenait :

serveur:/# cat /etc/apache2/envvars
# envvars - default environment variables for apache2ctl

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2.pid

export TNS_ADMIN=/etc/oracle

Un restart (reload ?) d’Apache et hop, un script PHP qui passait en ligne de commande, mais pas depuis Apache (erreur ORA-12154), fonctionne maintenant

Ca roule.
Vu que j’ai beaucoup tourné en rond, j’espère avoir bien enlevé les manips inutiles et pas oublié de manip indispensable

Tags:,,,,, Posted in Debian, planet-libre.org2 Comments

Envie de visiter les calanques marseillaises ?

Salut,
Copinage pour mon frère.
Si vous voulez vous organiser quelque chose dans les calanques marseillaises, allez voir ici : http://www.calanques.eu/

Seul ou en groupe (groupes d’enfants possibles), de l’escalade, des grandes voies, du rappel, des tyroliennes et j’en passe.

Le tout encadré par un moniteur qualifié.

Amusez-vous bien

Tags:,,,, Posted in Coup de coeurLeave a Comment

Retour de galère d’installation de Mantis (Bug Tracking) sur Debian/Lenny

6 May 2009

Mantis est un BTS (Bug Tracking System) comme Bugzilla, gForge, Trac etc…
Je ne parlerai pas des intérêts de celui-là plutôt qu’un autre, simplement des spécificités liées au packaging Debian et d’une fonction essentielle manquante : import d’un existant de bugs depuis un tableau type CSV.
J’aborde vite fait la partie LDAP pour recommander de l’oublier - OpenLDAP et Active Directory aussi

Contenu du coffret

La release actuelle de Mantis est 1.1.7, une 1.2 est en préparation et Debian propose la 1.1.6 de stable à “SID”. Les langues sont packagées de base avec Debian.
Quelques spécificités viennent du fait que, comme d’hab, des liens symboliques de certains fichiers de conf (des include PHP) sont en alias vers /etc/mantis/ depuis l’arborescence du logiciel (/usr/share/mantis/www/).
A noter que pour une fois, on n’a pas un fichier de conf standard dans /etc qu’on adapte, mais un fichier de conf standard dans /usr/share/mantis/www/ qui inclut un fichier “local” en alias vers /etc/mantis/. Il s’agit donc d’écraser des valeurs. Bon, admettons. Le but est de ne pas toucher les fichiers de l’arborescence du produit, pour prévoir l’upgrade plus facilement :

#ls -l /usr/share/mantis/www/conf*
lrwx[...] /usr/share/mantis/www/config_db.php -> /etc/mantis/config_db.php
-rw-[...] /usr/share/mantis/www/config_defaults_inc.php
lrwx[...] /usr/share/mantis/www/config_inc.php -> /etc/mantis/config_inc.php
lrwx[...] /usr/share/mantis/www/config_local.php -> /etc/mantis/config_local.php

Ca veut surtout dire de lire d’un côté l’intégralité du fichier /usr/share/mantis/www/config_defaults_inc.php et de reprendre les paramètres qu’on veut écraser dans /etc/mantis/config_local.php. Exemple après conf minimaliste :

$g_signup_use_captcha = OFF;
$g_administrator_email = ‘admin@blabla.fr’;
$g_webmaster_email = $g_administrator_email;
# a voir avec les utilisateurs : $g_email_receive_own = ON ?
$g_limit_email_domain = ‘blabla.fr’;
$g_smtp_host = ‘mon.smtp.blabla.net’;
# pas compris, a voir : $g_email_set_category
$g_default_language = ‘french’;
$g_show_footer_menu = ON;
# LDAP : completement moisi sur mantis, surtout pour un AD

En gros, je n’y règle que la partie essentielle permettant d’envoyer des mails dans le workflow de vie du bug et je supprime les “CAPTCHA” car usage interne uniquement.

Le LDAP

Il y a quelques paramètres à positionner pour passer en authentification par le LDAP. Génial. Seul hic, de taille, les utilisateurs ne remontent pas - de ce que j’en ai lu - dans l’outil, ça implique une synchro à la main (login/mail/nom/prénom). Pourquoi ? pour pouvoir affecter les rôles (access levels) aux utilisateurs : rapporteurs, développeurs etc.
Enfin, côté Active Directory, la page du manuel ne dit qu’un mot : “TODO” et le fichier de conf indique juste de mettre “samAccountName” au lieu de “uid”.
Je me demande pourquoi j’ai pas eu confiance dans la qualité de l’intégration du LDAP…

Import/export de bug - tableau CSV (XML en fait)

Fonction essentielle si vous ne démarrez pas de rien. Dans mon cas, un fabullissimeux tableau excel de suivi de bug…
De base il n’y a rien pour importer.
Avec google, vous tomberez sur plusieurs trucs plus ou moins foireux.
Je vous la fais courte, le résultat qui marche est le suivant :

Installez le “plug-in manager”

Disponible ici : en version 0.4.0 compatible Mantis 1.1.6
Je résume la doc d’installation et explique 2/3 spécificités liées au packaging Debian - faites un backup complet d’abord (base, fichiers de conf) :

chown www-data /usr/share/mantis/www/
cp -a core.php core.php.orig
chown www-data /usr/share/mantis/www/core.php # il y aura 5/6 lignes de code en plus à la fin
chown www-data /etc/mantis/custom_strings*
ln -sf /usr/share/mantis/www/plugins/ /etc/mantis/plugins # meme s’il n’existe pas pour l’instant

Si l’installation du plugin_manager se passe mal, DROPpez les 3 tables mantis_plugins_* afin que l’installation de l’outil ne détecte plus qu’il est déjà [mal] installé.
Le checkup d’installation de l’outil peut raconter n’importe quoi, exemple si vous oubliez le droit www-data sur /etc/mantis/custom_string.php, l’installation se déroule “bien”, vous n’avez juste aucun libellé dans les menus…
Après l’installation, il manquait encore un dernier chown -R www-data /usr/share/mantis/www/plugins/
Vous devriez avoir un nouveau menu disponible, nommé “plugin_manager”

Installez le plug-in “import/export”

Celui-ci disponible sur le même site n’est pas compatible (!) avec Mantis 1.1.6, allez chercher celui-là (2ème message), en version 0.1.0a9, compatible. L’installation cette fois se passe toute seule par le “plugin manager”.
Ensuite, pour balancer la purée, point de fichier CSV, mais du XML ; c’est pas plus mal. Un exemple de syntaxe de ce fichier XML est donné là.

D’autres BTS ?

Si quelqu’un a un retour d’expérience sur Bugzilla, gForge etc, n’hésitez pas.
Mantis sait apparement être relié (dans quelle mesure ?) à un CVS. Pas de mention à SVN.

Tags:,,,, Posted in Debian, planet-libre.org1 Comment