Articles

Backuper toutes les bases de données d'un serveur Postgresql

Il se trouve que je viens de décider d'updater mon Postgresql 8.3 sur mon serveur de développement. Mais avant de basculer de la 8.2 à la 8.3 j'aimerais faire un backup de chacune de mes bases de données. Comme c'est une opération que je fais assez régulièrement je décide d'écrire un petit script que voici: #!/bin/bash ## Script : DBBAckup.sh allows to backup a postgresql database USAGE=" Usage : `basename $0 ` dbnametobackup [postgresql_server(=localhost by default)] " CGDATE=`date -I` if [ $# -lt 2 ] ; then if [ $# -lt 1 ] ; then echo " $USAGE " exit 1 else DBName= $1 DBServer='localhost' fi else DBName=$1 DBServer=$2 fi BackupPath=" DBBackup_${DBName}_${CGDATE}_Compressed.backup " echo " ****Started backup of db $DBName at `date`, log of operation is in $BackupPath.log " if pg_dump --ignore-version --verbose --format=c --oids -h $DBServer...

FireFox 3 ça y est 5'690'000 download à 12h heure de Berck

Image
Vous pouvez suivre le décompte du nombre de download en temps réel chez Mozilla Et chez Framasoft vous pouvez trouver un petit guide des nouveautés de FireFox 3 en Français qui est une traduction de l'article en anglais " A Field Guide to FireFox 3 " de Debra Lyn Richardson

Le plus bô des navigateurs fait peau neuve

Image
Il est beau il est frais il est dans les étalages : le tout nouveau FireFox 3 sera disponible dans les heures qui viennent et c'est la bonne occasion de rappeler à tout un chacun d'aller chercher sa toute nouvelle version. J'ai déjà pas mal utilisé pour ma part les versions 3 beta et candidate release et le premier constat que j'ai pu faire c'est une plus grande RAPIDITE . Oui, Firefox 3 est sacrément plus rapide sur des pages web 2 bien chargées. L'autre point que je trouve fabuleux c'est un support encore accru des normes dont au niveau graphique SVG et CANVAS .D'ailleurs je rpofite de signaler un essai particulièrement intéressant d'intégration avec OpenGL dans le projet CANVAS 3D démarré par Vladimir Vukicevic. Mais il faut aussi et surtout dire que c'est la première version de FireFox qui utilise le moteur de rendu et de layout Gecko 1.9 . Et on pourrait écrire un livre entier sur tout ce que l'on peut faire juste avec Gecko. D'ai...

Detecter des images foireuses

Image
Lorsque l'on doit retrouver dans une arborescence toutes les images jpeg,gif ou png qui n'en sont pas, parce que une "bonne âme" a fait une malencontreuse "erreur" lors d'un transfert de fichiers qui c'est mal passé et que la "bonne âme" en question n'a pas pris la peine de tester son boulot... Enfin bref je veux donc détecter toutes les images qui n'en sont pas. Première étape, détecter tous les fichiers qui finissent par gif,png et jpg : find mydirectory/ -regextype egrep -iregex '.+\.(png|gif|jpg)' Cette commande va me trouver tous les fichiers qui possèdent un nom qui va se terminer par un .png ou un .gi ou encore un .jpg. Ok on a la liste de toutes les images reste à trier le bon grain de l'ivraie pour cela je vais utiliser la commande identify du superbe Imagemagick Cet outil très puissant permet entre autre de traiter des images en ligne de commande et il se trouve qu'avec identify on va laisser imagemagick...

Extraire tous les textes de liens dans un tag

Soit une page html contenant une liste de fichiers du style de ce que l'on trouve dans une page d'index générée par le serveur Apache. Je veux en extraire tous les noms de fichiers. Donc en résumé j'ai quelque chose du style : <img src="compressed.gif" alt="[ ]" height="22" width="20"> <a href="http://mirror.switch.ch/ftp/mirror/gentoo/distfiles/zsh-lovers_0.5.orig.tar.gz">zsh-lovers_0.5.orig.tar.gz</a> 01-Aug-2006 18:05 487K <img src="unknown.gif" alt="[ ]" height="22" width="20"> <a href="http://mirror.switch.ch/ftp/mirror/gentoo/distfiles/zsnes151src.tar.bz2">zsnes151src.tar.bz2</a> 25-Jan-2007 02:22 1.0M <img src="compressed.gif" alt="[ ]" height="22" width="20"> <a href="http://mirror.switch.ch/ftp/mirror/gentoo/distfiles/zssh-1.5a.tgz">zssh-1.5a.tgz</a> 2...

esound emerge failed

J'ai eu une plantée de jade lors de mon emerge -pvuD world sur le ebuild media-sound/esound-0.2.38-r1 en fait c'est pas la première fois que j'ai des ennuis avec jade lors d'un ebuild or ce qui est ennuyant c'est que malgré le fait que j'avais utilisé un USE -doc sur ce ebuild à la compilation il s'obstinait à vouloir lancer openjade et à planter systématiquement. Quelques google-minutes plus tard je trouvais la solution sur le forum gentoo en fait il s'agit d'une corruption possible de /etc/sgml et la solution est de refaire un build de sgml-common avec : emerge -v app-text/sgml-common l'histoire complète se trouve sur cette entrée du bugzilla gentoo

Comment extraire une "zone" de texte

Il arrive qu'on aie besoin de sortir tout ce qu'il y a en tre blabla et blabli et bien en perl on peut utiliser lkes ranges avec l'opérateur '..'. Ainsi avec perl -ne 'print if /<title.*>/../<\/title>;/' index.html On obtient uniquement le titre de la page Bien sur rien n'empêche d'utiliser l'excellent LWP pour récupérer la page perl -MLWP::Simple -e 'getprint q(http://lapt.blogspot.com)'

Exécuter une commande sur plusieurs serveurs

Comme il m'arrive de plus en plus souvent de devoir exécuter une commande sur plusieurs serveurs Linux, je devais trouver une solution efficace et élégante pour éviter de lancer n fois un ssh NomServeuri MAcommande. Bien entendu cette solution existe déjà elle s'appelle DSH pour distributed shell (ou dancer shell ) et un fois installé elle permet de lancer un : dsh -a -M -c -- geos-config --version pour connaitre la version de geos installé sur chaque serveur l'option -a indique que l'on veut lancer la commande sur toutes les machines se trouvant dans /etc/dsh/machines.list l'option -c indique que l'on veut lancer la commande en mode concurrent l'option -M préfixe la sortie des commandes avec le nom du serveur qui a envoyé la réponse le fichier /etc/dsh/dsh.conf permet de configurer les valeurs par défaut de certaines options Cet outil est une source d'efficacité extraordinaire quand on a plusieurs serveurs et bien sur comme toujours pour un outil puis...

Compter le nombre de codes HTTP dans des fichiers logs avec awk

Image
Aujourd'hui je devais sortir rapidement la liste des différents codes HTTP de tous les fichiers logs IIS. Comme expliqué dans mon post précédent j'ai un fichier par jour et environ 16 GB de fichiers logs sur une année... Dans un fichier log pour un serveur web il y a en général un code indiquant le status de l'opération réalisée. Ainsi dans IIS on peut utiliser un format de log W3C qui affichera la colonne sc-status pour le Http status code ainsi que la colonne sc-substatus. Mon but est de parcourir tous les fichiers logs et de calculer le nombre de fois que l'on trouve chacun de ces status code. On pourrait le faire avec du perl, mais je préfère aujourd'hui essayer awk présent sur toutes les bonnes distros Linux en standard. awk ou le plus répandu et moderne gawk est un outil formidable pour traiter très rapidement des gros volumes de données au format texte. Commençons par un exemple simple : je veux trouver toutes les lignes du log ou le code d'état HTTP es...

Analyse de fichiers Log en perl

Quand il faut analyser de grandes quantité de données sous format texte tel que des fichiers logs, Perl est d'une aide inappréciable. Voici un joli "perl oneliner" qui va calculer le nombre de hits par user login dans un log IIS perl -ne 'unless (/^#.*$/) {@e=split(/ /,$_); $Login{uc($e[8])}++;} END{foreach $key (sort keys %Login){printf(qq(%-25s %i\n),$key,$Login{$key}); } }' 2007/ex070106.log 2007/ex070107.log |sort -k 2nr >DistinctsLogins200701.txt Analysons un peu cette ligne de commande: perl -ne : on lance perl avec les option -n qui rajoute une boucle while ( ) {...} implicite et l'option -e qui permet justement d'exécuter une commande cf doc perl en ligne 'unless (/^#.*$/) { : viens maintenant le début du programme perl, en l'occurrence on dit que tant qu'on est pas dans une ligne de commentaire on va faire quelque chose se trouvant après l'accolade ouvrante. En effet dans les fichiers logs une ligne commentaire commence p...

Downloader un fichier sur le net sous Win32

Il est parfois nécessaire de récupérer un ou plusieurs fichiers sur le net en ligne de commande sous Microsoft. Pour cela il suffit d'utiliser l'excellent curl compilé pour cette plateforme. Ensuite de quoi il faut penser à utiliser un utilisateur null avec l'option -u ":" . Ainsi cela force curl à utiliser les credentials du compte courant, c'est à dire le user qui est connecté. Chez moi au final cela donne curl --anyauth -u ":" -x "" --netrc http://www.test.com/logs/ l'option -x "" annule une evt variable d'environnement définissant un proxy, elle est utile par exemple quand vous ne voulez pas utilisez le proxy parceque votre serveur est dans votre réseau local (et pas sur internet) A vous de voir si vous en avez besoin ou pas selon les cas.

Trouver la date de hier en Perl

Pour récupérer la date de hier en Perl, toujours en une ligne: perl -e '($d,$m,$y)= (localtime)[3..5];printf("%04d-%02d-%02d",$y+1900 ,$m+1,$d-1)' retournera : 2007-07-09 S'il s'agit de conserver cette chaine pour par exemple downloader un fichier log il suffit d'utiliser sprintf #!/usr/bin/perl ($d,$m,$y)= (localtime)[3..5]; $yesterday=sprintf("%04d-%02d-%02d",$y+1900 ,$m+1,$d-1); print $yesterday;

Récuperer tous les hyperliens d'une page web

c'est trop beau pour pas le signaler, en une ligne afficher la liste de tous les hyperliens sur une page web curl --anyauth --netrc http://yourweb/yourpage.htm |perl -ne 'while (m/HREF=["]([^"]+)/gi) {print "$1\n";} '

Vista? Voyons un peu plus loin que le bout de notre nez

Aujourd'hui la société Micro$oft lance à grand coup de millions de dollars son "nouvel" OS. Quand un journaliste a demandé s'il était vrai que la société allait investir plus d'un demi-milliard de dollars pour la promotion de son produit Vista le big boss a joué son joker et n'a pas voulu démantir... Posons nous la question si aujourd'hui avec les problèmes et la misère qu'il y a sur la planète s'il est raisonnable qu'une société investisse autant pour la promotion que pour la manufacture d'un produit. Pour la petite histoire il y a quelques anées pour le lancement de Windows NT 4 Micro£oft avaient déjà reconnu à l'époque que le budget promo était identique au coûts de dev. Si un vendeur d'aspirateurs vous annonçait la même chose fièrement en essayant de vous fourguez son tout dernier produit contre la modique somme de 450US$ vous feriez quoi ? Probable que vous éclateriez de rire et que vous iriez achetez un aspirateur à la concur...
Premier test de Google Docs & Spreadsheets ! Bon et bien voilà le premier test d'utilisation d'un service de plus de Google à savoir l'éditeur en ligne de document et de tableaux... Il faut avouer que la perspective de pouvoir utiliser un traitement de texte et un tableur indépendamment de la plate-forme sur laquelle on se trouve est assez sympathique. Et puis le fait de pouvoir rédiger un document dans une interface conviviale et le poster dans un blog c'est bien pratique. On verra à l'usage...

QEMU un PC dans ton PC

Après un essai de vmware sur ma Linux Gentoo Box, et vu que je n'étais pas chaud pour lacher 190$ j'ai décidé de tester QEMU Et ben ça marche super bien, sur gentoo il y a un HOWTO de disponible. En gros après le traditionnel emerge il faut faire un : qemu-img create disk.img 10G qui va créer un fichier disque pour votre bécanne virtuelle, puis après avoir mis dans votre lecteur CD une galette de chez M$ vous pouvez sans autre lancer : qemu -localtime -hda disk.img -cdrom /dev/cdrom -boot d -m 256 -win2k-hack et c'est parti pour l'installation de l'OS du père Bill sur votre bécanne virtuelle Quand c'est terminé (l'installation) vous pouvez éteindre votre bécanne virtuelle. Dorénavant pour lancer votre Bécanne M$ sur Linux il vous suffirea de taper : qemu -localtime -hda disk.img -m 256 Sur ma bécanne gentoo j'ai rajouté les 4 paquetages suivants dans /etc/portage/package.keywords pour avoir les dernières versions app-emulation/qemu-user ~x86 app-emul...

Comment ajouter un séparateur de millier (en 1line)

c'est trop beau, c'est du perl et c'est en une seule ligne : perl -pi.original -e "s/(? ))/'/g unless /2006/" default.html et avec ça tous les chiffres du fichier html passé en paramètre vont recevoir un joli séparateur de milliers. Et ne plus on a une copie de sécurité qui se crée au cas zou... Ainsi j'avais des lignes du style : <FONT SIZE="-1">644303595217</FONT> qui deviennent <FONT SIZE="-1">644'303'595'217</FONT> c'est juste pur , c'est juste du perl !

Modifer une variable dans n fichiers de configs INI

Hier, j'ai finalisé la config d'un serveur de secours Linux Opteron pour notre guichet cartographique. Il s'appuye sur l'excellent produit Mapserver ainsi que sur le non moins excellent framework php Cartoweb de CamptoCamp ! J'utilise rsync pour la synchronisation et j'ai été confronté à un chtit problème, sur mon deuxième serveur au vu des versions de apache et php que j'avais utilisé il me fallait charger la dll php_mapscript.so au niveau du php.ini. Du coup il me fallait modifier tous les sites cartographiques de mon serveur au niveau d'un fichier de config nommé server.ini. Je devais modifier dans tous ces fichiers la valeur d'une variable nommée disablePHPModuleCheck, est la passer de false à true. Donc en résumé j'avais n fichiers server.ini à chercher dans une arborescence complexe démarrant dans "/data/dataweb/web/" puis il me fallait éditer chacun de ces fichiers pour passer la valeur de la variable " disablePHPModuleC...

Trouver des fichiers contenant une regular expression

L'autre jour je devais parcourir toute une arborescence de fichiers pour trouver tous les fichiers de type CSS ayant un style utilisant l'attribut url("cheminrelatif/fichierimage.png") et ou il manquait le premier guillemet. Avec la combinaison des commandes find,egrep et surtout xargs j'ai pu trouver les fichiers en question tout de suite : find . -name '*.css' |xargs egrep -lr 'url\([^"]+"\)'

Les commandes "shell bash" sont trop belles !

Quand on administre des serveurs, ou quand on programme on a souvent des petits problèmes à résoudre en relation avec un certain nombre de fichiers ou une crackée de paramètres. Et franchement la connaissance du shell est un outil qui fait gagner beaucoup de temps. Un des problèmes qui vient souvent c'est un truc du style : pour chacun de ces trucs fait ça avec le truc... Et la boucle for est salvatrice, Ainsi je veux lancer un script ou une commande avec un paramètre différent qui se trouve être dans un fichier ListeParam.txt : for i in `cat ListeParam.txt` ; do (./MonScript.sh $i) ; done Et voilà ! mon script va se lancer autant de fois qu'il y a de lignes dans le fichier ListeParam.txt Simple, efficace, juste BÔ ! J'avais par exemple cette liste de noms de 352 tables SQL ListeTables.txt et un script php qui devait analyser la table sous MSSQL et généer du code pour la créer sous PostgreSql GenPgSqlCreate.php et bien avec un rapide : for i in `cat ListeTables.tx...