X-Space

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

lundi, février 1 2010

Comment migrer un dépot subversion dans un autre dépot existant ?

Jusqu'à récemment à chaque fois que j'avais besoin de versionner un projet, je créais un nouveau dépôt subversion ce qui revenait à faire :

  • Via SSH : svnadmin create /some/path/
  • Création d'un VirtualHost Apache (avec le htaccess qui va bien)
  • Installation d'un WebSVN

Tout ca pour au final me retrouver avec une dizaine de dépôts (et autant d'URL) ayant chacun moins de 100 commits. J'ai donc décidé de fusionner tous ca sous une URL unique avec certificat TLS par dessus.

Deux hics :

  • Comment importer mes dépôts dans le dépôt existant ?
  • Comment définir une convention de nommage des dépôts ?

Pour la deuxième question ce fut assez simple : je me suis basé sur l'arborescence DNS inversée (ca tombe bien la majorité de mes projets ont une URL) :

Exemple : Si ce blog était versionné il le serait sous la forme net/x-space/www/ avec dans ce dossier les traditionnels trunk, branches et tags.

Pour la première question : et bien les développeurs de subversion ont pensé à tout.

svnadmin dump /path/to/the/old/repository/ > net.x-space.www.dump

Puis

svnadmin load --parent-dir net/x-space/www/ /path/to/the/new/repository/ < net.x-space.www.dump

Pour en savoir plus :

mercredi, septembre 30 2009

The Wire - La meilleure série jamais tournée

Voila ce qu'en pense Ivan Le Fou dans une news sur Canard PC. Je partage cet avis !

The Wire est une série en cinq saisons produite en 2002 et 2008. Le thème global de cette série traite des moyens mis par la police de Baltimore pour lutter contre le trafic de drogues : les écoutes téléphoniques (The Wire en VO).

Voila je viens de vous expliquer le titre de la série mais The Wire n'est une série comme les autres. Ce n'est pas CSI ou chaque épisode n'a pas de rapport avec un autre, ce n'est pas 24 ou la trame tient 3 épisodes et de rebondissements en rebondissements on arrive à un scénario surréaliste (ce qui fait le charme de cette série). Non, The Wire prends son temps, chaque saison raconte une histoire (une enquête), d'ailleurs le format de cette série est assez particulier : 10 à 13 épisodes d'une heure par saison.

L’histoire dure une saison mais nous emmène toujours la ou l'on ne s'y attend pas. Je disais que la série c'est une enquête sur la police et les dealers mais c'est beaucoup plus que ca : cette série nous explique (le mot est à prendre au premier degré) toutes les ramifications de la drogue et de la pauvreté à Baltimore. Dans la saison 2 c'est au travers de dockers, dans la saison 4 c'est le système scolaire qui est sous les projecteurs et tout au long de la série la politique est de mise. Contrairement à une majorité de série, tout n'est pas manichéen, The Wire ne se contente pas de faire un état des lieux de Baltimore mais nous démontre ce qui a conduit à cet état.

Je ne vous parle pas de la réalisation qui est magistrale tant elle est au service du scénario (regardez la séquence de 2-3 minutes à la fin de chaque saison). Bien sur les acteurs sont géniaux et je vous conseille de la regarder en VO, sinon on perd une grande partie des choses.

Un dernier mot, ne la téléchargez pas : L'intégrale coute moins de 100€, il faut montrer que quand on produit de la qualité le public est prêt à payer. Ca vaut le coup.

mardi, septembre 29 2009

Petite statistique intéressante

En exécutant l'outil StatsSVN sur le code de la bibliothèque PHP commune à tous les projets de ma société, j'ai observé la tendance suivante

Sur plus de 300 fichiers et 26500 lignes de code, on voit clairement que la moyenne du nombre de lignes de code (LOC) par fichier se stabilise autour de 85 LOC/File.

Surprenant ?

Oui au premier abord, mais en mettant en parallèle nos méthodes de travail (TDD, POO, Utilisation de design pattern) et cette moyenne cela devient nettement plus logique.

dimanche, juin 7 2009

"C'est la première fois depuis 1979..."

"[...]c'est la première fois depuis 1979 que le parti du président arrive en tête" nous rabâche Xavier BERTRAND et les autres représentants de l'UMP.

Ca ne veut rien dire !

En 1979 le parlement européen c'était quoi ?

Pas grand chose. Ce n'est qu'en 1986 que le parlement a été associé aux lois européennes.

Pour plus de détails : lisez le billet de Jean Quatremer Le Parlement européen, mode d’emploi

samedi, mai 30 2009

Envie de vomir...

Arrêt sur images à la suite d'une chronique de Colombe Schneck dans J'ai mes sources sur France Inter vient de "révéler" (contenu payant) qu'un nombre non négligeable de recherche Google sur le nom d'un journaliste était suivi du mot "juif". Ceci est ressorti grâce à la fonction Google Suggest.

Je viens de faire la même recherche sur quelques hommes politiques Français et devinez quoi...

En voici un florilège :

samedi, mai 23 2009

7 juin, élections européennes : Votez !

Je vous ne l'apprendrais surement pas mais dimanche 7 juin 2009 ce sont les élections européennes et ce simultanément dans 27 pays. Il faut voter !

Pour qui, pourquoi ?

Je ne le sais pas mais voici quelques une de mes pistes de réflexions :

L'importance de l'évènement

L'union européenne c'est 500 millions d'habitants et 375 millions d'électeurs appelés à voter le même jour, L'évènement ne mérite t il pas que l'on fasse un effort ?

Une protection

Aucune restriction ne peut être imposée aux droits et libertés fondamentaux des utilisateurs finaux sans décision préalable des autorités judiciaires - Amendement 138/46 du paquet télécom, adopté à la majorité des députés européens le 6 mai 2009.

Cet amendement met à terre la loi HADOPI et la suspension "automatique" de l'abonnement. Vous étiez contre HADOPI alors soutenez les députés qui ont adoptés cet amendement.

Ne pas attribuer un vote à des partis anti démocratiques

Je ne vais pas non plus vous conseillez de voter pour un parti extrémiste, xénophobe ou nationaliste. Et si les idées du NPA vous semblent intéressantes, je vous renvois vers l'excellent article de Jean QUATERMER qui a lu les principes fondateurs de ce parti : Le « Nouveau parti anticapitaliste » ou le retour vers un passé qui ne passe pas

samedi, janvier 31 2009

Eclipse PDT 2.0

Après plus de 6 mois de retard, Eclipse PDT est sortie dans sa version 2 fin décembre.

Voici quelques paramètres et plugins qui me semblent indispensable pour tout développeur PHP.

Plugin indispensable

Subclipse

Ce plug in permet de se connecter au serveur de gestion de versions : Subversion

Ajoutons lui quelques raccourcis:

Onglet Window : Preferences : Général > Keys.
  • Rechercher "commit", catégorie SVN : Affecter le raccourci <Ctrl>+<Alt>+<C>
  • Rechercher "synchronize", catégorie SVN : <Ctrl>+<Alt>+<S>
  • Rechercher "update", catégorie SVN : <Ctrl>+<Alt>+<U>
  • Rechercher "Copy from Left To Right" : <Ctrl>+<Alt>+<Right>
  • Rechercher "Copy from Right To Left " : <Ctrl>+<Alt>+<Left>

Quelques paramètres

Afin de respecter les conventions de codage PEAR

Général > Workspace :

  • Text file encoding : Other : iso-8859-1 ou UTF-8 (selon les prochaines conventions)
  • New Text file line delimiter : Other : Unix
Voir File formats

PHP > Code Style > Code Template

Si vous voulez éviter d'avoir à retaper la PHPDoc de déclaration de fichier ou de classe, c'est par la que ca se passe. Ceci peut être fait projet par projet aussi.

PHP > Code Style > Formatter :

  • Tab policy : spaces
  • Indentation size : 4
Voir Indenting and Line Length

Effectuer cette modification pour tous les types de fichiers (rechercher "tab" dans le moteur de recherche des préférences)

Afin d'améliorer le confort d'utilisation

PHP > Editor > Code Folding

  • Décocher enable folding
Le code folding consiste à pouvoir afficher / masquer le corps d'une fonction. C'est très gourmand en ressource, fait freeze eclipse souvent et se révèle peu pratique à l'usage. La vue "outline" est plus agréable.

PHP > Editor > Save Actions

  •  Remove trailing whitespace
A chaque "Save", eclipse va supprimer automatiquement les espaces de fin de lignes. Indispensable.

PHP > Editor > Typing

  • Décocher String & Parenthese
Eclipse ne va plus s'amuser à fermer automatiquement les parenthèses ou les strings, ce qui est agaçant.

Voila j'en oublie sans doute alors n'hésitez pas à me faire part des vôtres.

Mises à jour

  • 15 mai 2009 : Encoding, raccourcis Copy..., Tab

SPAM : L'accalmie fut de courte durée


Cf mon billet : Déconnexion d'un spammeur

mssql_connect(): Unable to connect to server

Si jamais vous utilisez une base de données SQL Server avec PHP taite très attention au paramètre mssql.max_procs.

Si l'on regarde la doc, sa valeur par défaut est "-1" donc illimité me disais je. Or ce n'est pas le cas, ce qui est confirmé par la lecture du php.ini

Specify max number of processes. -1 = library default
msdlib defaults to 25
FreeTDS defaults to 4096

Et 25 c'est peu...

Le jour ou Google failli...

Gros dysfonctionnement de Google en ce moment.

Et ce pour n'importe quelle recherche. Quand on clique sur le résultat de la recherche on tombe sur une page indiquant la présence de malware.

Un tel bug pour le géant du web est plutot surprenant et inquiétant.

PS : j'utilise l'addon Google Preview

EDIT : Fixed - Google s'explique et s'en excuse.

samedi, décembre 27 2008

Election européenne : Inscription sur les listes électorales

Si comme moi vous avez déménagez cette année, sachez qu'il ne reste que que 3 jours pour déposer votre inscription sur les listes électorales de votre commune.

Plus d'infos : Le site du ministère de l'intérieur (note : je trouve un poil choquant qu'ils n'aient pas encore actualisé le site pour 2009).

Rappel : les élections européennes auront lieux le dimanche 7 juin 2009.

Note : Si vous n'avez pas le temps de déposer votre dossier avant le 30 décembre, ou si comme moi vous n'êtes pas sur place, alors vous ne pourrez pas voter dans votre nouvelle commune cette année. Toutefois vous pourrez toujours voter dans votre ancienne commune, pensez à la procuration.

vendredi, décembre 12 2008

La fibre c'est bon, mangez-en !





samedi, novembre 22 2008

Monitorer le nombre de courriels traités par Qmail Scanner

Suite à mon billet précédent, j'ai ressenti le besoin de suivre plus régulièrement l'évolution du spam traité par mon serveur. Utilisant déjà le logiciel MRTG pour suivre nombre d'indicateurs tel que le trafic réseau, la RAM consommée, la charge CPU etc.. ne me restait plus qu'a adapter le script log-report.sh.

Le script de mesure

Et voila qscan.sh:

#!/bin/sh

TYPE=$2

if [ "$TYPE" = "spam" ]; then
        grep "here be a virus\|------ \| SA: yup, this smells \| q_s: Policy BLOCK" $1 \
        | grep -v " message for " \
        | sed -e "s/.* hits.* - message \(tagged\|quarantined\|deleted\|rejected\) .*$/Spam \1/" \
        | grep "Spam" \
        | wc -l
fi

if [ "$TYPE" = "policy" ]; then
        grep "here be a virus\|------ \| SA: yup, this smells \| q_s: Policy BLOCK" $1 \
        | grep -v " message for " \
        | sed -e "s/^.* q_s: Policy BLOCK$/Policy blocked/"  \
        | grep "Policy blocked" \
        | wc -l
fi

        grep "here be a virus\|------ \| SA: yup, this smells \| q_s: Policy BLOCK" $1 \
        | grep -v " message for " \
        | sed -e "s/^.* Process .*$/Messages processed/"  \
        | grep "Messages processed" \
        | wc -l
echo $TYPE

Ce script, très inspiré que log-report.sh, s'utilise avec deux paramètres :

  • Le nom du fichier à analyser: /var/spool/qscan/qmail-queue.log
  • Un paramètre : spam ou policy selon que vous souhaitez connaitre le nombre courriels classés comme spam ou d'autres ayant été éliminés selon la configuration du serveur.

Configuration de MRTG

Ne restait plus qu'à enregistrer ce fichier dans /etc/mrtg/qscan.sh et à configurer MRTG :

Target[localhost-spam]: `/etc/mrtg/qscan.sh /var/spool/qscan/qmail-queue.log.1 spam`
Options[localhost-spam]: gauge,noinfo, nopercent, growright, nobanner
Title[localhost-spam]: Message
MaxBytes[localhost-spam]: 1000000
YLegend[localhost-spam]: Messages traités
ShortLegend[localhost-spam]: mails
LegendI[localhost-spam]: Total Messages
LegendO[localhost-spam]: Spam
Legend1[localhost-spam]: Nombre de messages traités
Legend2[localhost-spam]: Nombre de spam
PageTop[localhost-spam]: <h1>Evolution du spam</h1>

A noter que le fichier que le fichier analysé est celui de la veille ce qui donne une statistique quotidienne. L'utilisation du fichier courant donnera une courbe croissante qui sera réinitialisé à chaque rotation des logs. Je n'ai pas réussi à configurer MRTG pour qu'il me calcule la variation entre deux mesures, c'est à dire le nombre de courriels traités toutes les 5 minutes.

Exemple :

MRTG Spam Exemple

samedi, novembre 15 2008

Déconnexion d'un spammeur

Le Washington Post (Via ASI) nous a appris cette semaine que l'un des plus gros spammeurs mondiaux, situé aux États Unis, a été déconnecté du réseau.

L'effet de cette coupure est impressionnant. Je vous laisse juger par vous même sur les statistiques de mon seul serveur :

Note : Ce graphique a été produit grâce aux données fournies par le script log-report.sh de la version patché de Qmail Scanner et mise en forme avec Excel 2007.

lundi, septembre 22 2008

[WinXP]Comment lancer un service au démarrage une seule fois ?

Démarrer > Exécuter > regedit

Chercher HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

Il suffit d'ajouter une valeur de type chaine ensuite et de redémarrer. La commande sera exécutée au prochain démarrage puis supprimée du registre.

A quoi ca sert ?

Et bien par exemple à lancer un défragmenteur de disque avant que les différents services commencent leur écriture.

La commande :

defrag.exe c: -f

Sources :

Comment ca marche

lundi, août 11 2008

Modifier les chmods à la volée.

Quand j'étais jeune ( comprendre il y a deux ans ), j'avais tendance à ne pas me casser les pieds au niveau des chmods et faire

chmod -R 777 mondossier

C'est pas propre, pas logique ( un fichier ne doit pas pouvoir être exécuter, potentiellement dangereux etc... Ayant vieilli, et commençant la migration du serveur actuel vers le nouveau je suis tombé sur un problème de chmod incohérent et j'ai donc du reconstruire le tout. Plutôt que de faire ça à la main ou en mode récursif ( -R ), j'ai développé un petit script pour faire les choses proprement : (télécharger)

Utilisation

./chmodalavolee.sh mondossier

Grossièrement le script fait :

Pour chaque fichier dans mondossier : chmod 644 (lecture pour tous et seulement écriture pour le propriétaire).

Pour chaque dossier : chmod 755 (lecture et exécution - obligatoire pour rentrer dans un dossier - pour tous, écriture en plus pour le propriétaire). Exécuter le script dans ce dossier.

Seul problème ce script ne donne pas les droits d'exécution sur le fichier. Ce qui peut être problématique si on fait un 777 sur un dossier contenant des exécutables.

Un collègue, qui a fait cette erreur malencontreuse, m'a donc posé la question : y a il des fichiers exécutables dans /var ?

Ma réponse est dans le fichier var-executable-files que j'ai généré avec le script search-executable.sh.

mardi, août 5 2008

Comment récupérer un mot de passe root sans être root ?

Récemment j'ai perdu le mot de passe root d'un serveur que j'administre (ok je suis un boulet).

Alors comment restaurer un mot de passe root quand on a perdu ce mot de passe ?

Première solution : linux single

Ce mode permet de démarrer le système en root, ne reste qu'à modifier le mot de passe puis à rebooter et c'est bon.
Sauf que ça implique une intervention manuelle sur le serveur et :

  • le datacenter est à plus de 350 km de chez moi ;
  • je n'avais pas envie de téléphoner aux responsables du DC pour ce genre de bêtises.

Deuxième piste : vmsplice local root exploit

Cette faille permettait à n'importe quel utilisateur d'exécuter des commandes root.
Cette faille a été corrigée dans la version 2.6.24. Manque de bol j'avais déjà mis à jour le serveur lors de la publication de la faille.
L'exploit n'a donc rien donné.

Troisième piste :

Heu la j'ai un peu séché pendant 1 ou 2 heures, en réfléchissant autour de la question : comment exécuter un script root sans être root ?
Impossible théoriquement.

Jusqu'à ce que pense à regarder les crons, un des scripts du site effectue une sauvegarde quotidienne de la base de données.
Ce script s'exécute en cron mais peut aussi être exécuter à la main dans le site via un exec.Apache en est le possesseur. Ne reste plus qu'a le modifier sauf que je ne suis pas Apache et que je n'ai aucun droit sur ce fichier même pas en lecture.
Et si je me faisais passer pour Apache ?
La version beta du site étant accessible pour moi, j'ai créé une page php afin qu'elle modifie le script de backup :

#!/bin/sh
echo root:<motdepasse> | chpasswd

J'exécute le script dans mon navigateur, comme c'est apache qui exécute la page donc j'ai le droit d'édition sur le script de backup. Ne restait plus qu'a attendre que le cron passe. Et hop le tour est joué.

Joli faille de sécurité ?

Plus ou moins:

  • Je possède le seul compte utilisateur accessible via SSH
  • fail2ban fait le ménage sur les attaques des robots.

Mais j'ai un script qui s'exécute en root qui est modifiable par un utilisateur quelconque ce qui relève donc d'une faille possible. J'ai donc retiré tout droit d'écriture sur le fichier.

samedi, juin 28 2008

La fin d'une époque

Titre un peu pompeux pour parler de moi, pour une fois.

Ca y est, les études sont finies, je suis enfin "Ingénieur ESIAL" (diplôme reconnu par la CTI).

A moi le monde merveilleux du travail. Oui je sais j'en fait un peu trop mais ca fait du bien :).

Sinon, je vais essayer de me remettre à blogguer plus souvent, j'ai deux trois sujets sur le bout des doigts, en vrac :

Cela au travers du développement d'un ou plusieurs sites webs.

Sinon je bosse actuellement dans une SSII

samedi, avril 26 2008

Comment se passer de PHPMyAdmin pour gérer un serveur SQL ?

Les trois du fond qui ricanent et qui viennent de répondre en ligne de commande vous sortez.

PHPMyAdmin est un outil écrit en PHP pour administrer un serveur MySQL. C'est assez pratique pour débuter, mais une fois que l'on maitrise bien le SQL et qu'on doit manier des grosses requêtes çà devient vite laborieux: gestion des erreurs foireuses, résultats limités par page, aleas dues à HTTP, risques de sécurité etc... Ma problématique est donc de le remplacer par quelques choses de plus "puissant".

Je ne vais pas faire trainer le suspense : MySQL propose des outils, coté client, plutôt bien fait : les  MySQL GUI Tools (MySQL Migration Toolkit, MySQL Administrator et MySQL Query Browser)

Passons sur le rôle de ses outils, leurs noms sont suffisamment explicites.

Ces outils sont des clients qui ont besoin d'accéder au serveur MySQL, or il est très dangereux de laisser le port de MySQL (3306) ouvert à n'importe qui. Donc ma question est de savoir comment pouvoir se connecter à ce serveur en laissant MySQL n'écouter que localhost, le parefeu verrouillé et en utilisant ces outils "clients", en gros comment sécuriser tout ca.

Et bien en utilisant un tunnel SSH !

En gros, je dis à mon logiciel de se connecter à ma machine sur le port 3307, et moi je route les requêtes vers mon serveur via SSH, donc de façon crypté, sur le port 3306.

Ce qui nous donne la commande suivante à exécuter sur la machine client :

ssh -N -L 3307:127.0.0.1:3306 ED@__IPSERVEURSQL__

Et rien à configurer sur le serveur.

Note : L'option -N "dédie" la connexion SSH au pont, rajouter -f pour passer le processus en tache de fond.

Quelques liens :

Comment constituer des tunnels ssh [...]? (Université de Jussieu)

Créer un tunnel SSH (ENS)

MySQL ssh tunnel Quickstart

samedi, avril 19 2008

Quelques heures dans la peau de TitaX, suite et fin

Avec 6 mois de retard, voici la suite et la fin de mes aventures (partie 1, partie 2).

Lors de mon dernier billet, de nombreuses questions restaient en suspend : problème matériel (mon opinion) ou problème d'OS (Dell).

Comme je le prévoyais le serveur est retombé mi aout. L'OS est donc clairement hors de causes, mais le technicien Dell (toujours le même) ne voulait toujours rien savoir.

J'ai lancé des stress tests (thrash, bonnie++) sur les disques durs sans résultats.

J'ai alors soumis le problème à mes colistiers de SOS-Admin, qui flairaient eux aussi le problème hardware. Du fait de l'absence de syslog, Stephane B. m'a suggéré d'externaliser les logs.

Externaliser les logs, mais qu'est ce donc ?

Et bien c'est tout simple, les logs sous linux sont gérer par un petit démon qui s'appelle syslogd. Ce petit démon possède une fonctionnalité plutôt intéressante : il permet d'envoyer les logs d'une machine sur une autre machine (externaliser !). Plutôt pratique lorsque la machine à des problèmes de disques durs et donc que rien ne s'écrit dans les fichiers logs.

Voyons maintenant comment configurer le bouzin.

Coté émetteur :

C'est assez simple : il suffit de configurer syslogd afin de lui dire quel type de log on veut envoyer sur le serveur distant. Dans mon cas, on log tout.

$ cat /etc/syslog.conf | grep "x-space"
*.*                                                     @x-space.net

Coté destinataire c'est un peu plus compliqué :

Tout d'abord, il faut demander au démon d'écouter sur le réseau (désactivé par défaut):

# tail -n1 /etc/default/syslogd
SYSLOGD="-r"

Puis on ouvre la parefeu en UDP sur le port de syslog (voir /etc/services):

iptables -A INPUT -s IP_EMETTEUR -p udp --dport 514  -j ACCEPT

Ne reste plus qu'a redémarrer les démons de chaque coté.

Et la magie :

Aug 28 19:02:47 ******* kernel: sd 0:2:0:0: SCSI error: return code = 0x00040000
Aug 28 19:02:47 ******* kernel: end_request: I/O error, dev sda, sector 242365
Aug 28 19:02:47 ******* kernel: sd 0:2:0:0: SCSI error: return code = 0x00040000
Aug 28 19:02:47 ******* kernel: end_request: I/O error, dev sda, sector 242381
Aug 28 19:02:47 ******* kernel: lost page write due to I/O error on dm-0
Aug 28 19:03:18 ******* kernel: sd 0:2:0:0: SCSI error: return code = 0x00040000
Aug 28 19:03:18 ******* kernel: end_request: I/O error, dev sda, sector 94319189
Aug 28 19:03:18 ******* kernel: lost page write due to I/O error on dm-0

Epilogue

Le technicien Dell (toujours le même) a alors voulu exclure un dysfonctionnement lié au disque 2 vu que c'est que lui qui remontait des erreurs donc il m'a demandé de faire fonctionner le RAID en mode dégradé (on retire un disque). Ça a marché jusqu'à que le serveur retombe "définitivement" : le raid s'est effondré et n'a pas pu se remonter sur deux disques. J'ai du donc gueuler la sérieusement sur un autre technicien Dell qui a bougé cette fois et a fait changer le contrôleur RAID rapidement (J+1). Depuis le serveur fonctionne très bien.

- page 1 de 7