Articles

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...

Traiter des valeurs avec perl dans un log

Il m'arrive régulièrement d'automatiser des tâches avec des scripts en perl ou en bash. Typiquement voici un exemple de petit script qui va effectuer une syncronisation avec rsync et garder une trace dans un log de tout problèmes éventuel. #!/usr/bin/bash RSYNC="/usr/bin/rsync" OPTS="-va --stats --partial --partial-dir=tmp --safe-links --no-implied-dirs --timeout=300 --exclude-from=rsync_excluded.txt" SRC1="rsync://myserver.mydomain.org/mydirectory/" DST1="mylocal_directory/" echo "Started update at" `date` >> $0.log 2>&1 logger -t rsync "re-rsyncing witm my remote rsync directory" ${RSYNC} ${OPTS} ${SRC1} ${DST1} >> $0.log 2>&1 echo "End: "`date` >> $0.log 2>&1 Okay, maintenant après quelque mois d'exploitation vous vous retrouverez avec un fichier contenant beaucoup d'informations. Si vous voulez récupérez une partie, et seulement une partie un petit bout de ...

Obtenir la liste des paquetages "ebuilds" sous Gentoo

Image
Quand on utilise la distribution Gentoo sur plusieurs serveurs comme c'est le cas en ce qui me concerne, il peut être intéressant de retrouver rapidement la liste des paquetages wue l'on emerger par le passé. Bien sur certain dirons qu'il suffit de regarder le contenu du "world" et faire un : less /var/lib/portage/world pour voir la liste des paquetages installé expressement sur cette machine... Sauf que bien souvent on aimerait bien avoir un peu plus d'informations, c'est pour cela que j'utilise les outils du paquetage gentoolkit notamment l'utilitaire qpkg qui permet d'obtenir des informations sur un paquetages précis. Donc vous pouvez installer le paquetage gentoolkit avec un : emerge -v gentoolkit puis ensuite vous puvez voir tout ce qui a été installé en lançant un : equery f gentoolkit ce qui va vous lister les fichiers contenus dans le paquetage en question. Comme le but de toute l'opération était de pouvoir ressortir plus d'on...

Dans la jungle des blogs !

Image
Waouhh, il est très difficile de comprendre la logique de google, j'en étais à ma Xième tentative d'enregistrement de mon blog sur google quand j'ai commencé à sérieusement me demander si le moteur d'indexation de «Gogol» n'était pas un peu inspiré de la logique floue voire du mouvement brownien... En effet il semble parfois impossible de faire fonctionner ce maudit moteur pour qu'il indexe mon blog. Damned ! Je commence sérieusement à douter de l'engin, il faut que je me veille avant de basculer dans le côté obscur de la Force... Du coup j'ai voulu vérifier au niveau des autres blogs comment cela se passe, et dans mes pérégrinations je suis tombé sur blogwise que je trouve assez cool. L'idée d'indexer et de classer des blogs uniquement me semble être une tâche titanesque, il y a quasiment 40'000 blogs sur ce site, mais comment assuré un minimum de pertinence. Et dans le genre débile on a les plus de 6'176'200 blogs annoncés comme in...

Perl : Comment afficher des "gros" chiffres avec un séparateur de milliers ?

Hummm quand il s'agit de lire des très grand chifres à l'écran, il n'est pas très pratique de devoir compter à la main sur l'écran les groupes de milliers... Et donc un séprateur de millier prend tout son sens : 1'456'987 est plus lisible que 1456987 ! c'est ainsi que Perl devient votre petit à petit votre alié quotidien. Car à l'aide des expressions régulières et de l'opérateur de substitution il est très facile d'obtenir l'effet escompté en 3 lignes ! En éxécutant le code ci-dessous on obtient . My personal fortune is 1'234'567 US$ #!/usr/bin/perl -w use strict; my $test = "My personal fortune is 1234567 US\$"; print PrintStringWithThousandSeparator($test); sub PrintStringWithThousandSeparator { my $Newtext = $_[0]; $Newtext =~ s/(? return $Newtext; }

ReverseProxy avec Apache

Quand on veut permettre à un utilisateur lambda d'accèder sur un reseau public d'accèder à des informations sur un site web 192.168.50.120 situé dans un réseau privé, deux possibiliés s'offre à nous: On peut prendre un serveur Linux et avec deux cartes réseau : une côté publique - eth0[10.163.200.9], une côté privé - eth1[192.168.50 77]) l'utiliser comme un Firewall avec les iptables et une règle DNAT pour ouvrir un port sur l'interface publique du firewall qui redirigera les demandes sur le serveur web du réseau privé exemple: echo 1> /proc/sys/net/ipv4/ip_forward iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.163.200.9 --dport 80 -j DNAT --to-destination 192.168.50.120 Ou on peut configurer un reverse proxy avec Apache ou Squid sur le Firewall Dans le deuxieme cas on a plus de souplesse car on peut intervenir sur chaque url par exemple avec mod_rewite mais tout d'abord la config nécess...

Du code portable Win32-Linux

Pour obtenir très rapidement du code utilisant du graphisme et fonctionnant aussi bien sous Linux que sous Microsoft, je dois dire que le couple OpenGL /GLUT reste des valeurs sures à mes yeux. Ainsi le code ci-après fonctionne et se compile pil-poil sous win32 et sous Linux: /* My First GLUT chtit bout de code pour compiler sous linux : gcc -o cgglut01 cgglut01.cpp -lglut -lX11 -lGL -lGLU */ #include void display(void) { glClear (GL_COLOR_BUFFER_BIT); // draw blue rectangle with corners at // (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) glColor3f (0.0, 0.0, 1.0); glBegin(GL_POLYGON); glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0); glEnd(); // start processing buffered OpenGL routines glFlush (); } void init (void) { glClearColor (0.0, 0.0, 0.0, 0.0);// select clearing color background /* initialize viewing values */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrt...

Apache - Action : la magie de l'interception

Image
En utilisant Apache et avec des clients IE on tombe parfois sur des abérations à la MiKro$oft! Par exemple ce fichier pdf qui plantait IE alors qu'il s'ouvre parfaitement bien dans Firefox le même genre de mésaventure pouvant se produire avec des fichiers tiff, et qui n'a pas connu la joie du rennomage d'un fichier CGI sur un serveur web de Programme.pl ou Programme.cgi en Programme.txt afin que IE veuille bien ne pas tenter le download mais se contenter d'afficher le texte retourné.... Bien souvent tout cela est souvent du à la méthode pour le moins peu ortodoxe de Microsoft de traiter les headers Content-type ( voici une excelente page explique la saga IE sur ce point... ) Quand je dit traiter comprenez ignorer , ainsi sur MSDN Microsoft nous explique que : ..If the server-provided MIME type is either known or ambiguous, the buffer is scanned in an attempt to verify or obtain a MIME type from the actual content. If a positive match is found (one of the hard-co...

Gentoo sur un AMD64 Opteron

Image
Au moment de l'installation souvent la détection de matériel n'est pas effectuée aussi est-il nécessaire de faire un petit : modprobe e100 --> pour une carte réseau intel modprobe ide_disk --> pour un disque ide sata_sil et libata pour un disque SATA etc...

Installer Gentoo avec un clavier Suisse romand

Image
Quand on se lance dans une installation d'une Gentoo (en stage1 bien entendu...) il faut utiliser un petit loadkeys fr_CH pour pouvoir utiliser pleinement les claviers de nos contrées

Un reverse proxy pour que ton web soit plus sur !

Avec un reverse proxy ton serveur web peut répondre plus vite en cachant les réponses, en plus il peut rediriger sur un ou plusieurs serveurs différents des requêtes web. Typiquement on peut utiliser Apache avec le mod_proxy Mais il faut aussi des projets tels que pound Ou encore mod_security Il y à même squid qui a été utilisé comme reverse proxy

Apache Virtual host

On désire parfois créer sur le même serveur web plusieurs sites différents. En utilisant dns on modifie notre config comme suit : cat /etc/bind/db.labo.org $TTL 1H @ IN SOA ns1.labo.org. root.labo.org. ( 2004071801 ; Serial 1H ; Refresh 1H ; Retry 1H ; Expire 1D ) ; Negative Cache TTL ; @ IN NS ns1.labo.org. @ IN NS ns2.labo.org. @ IN MX 10 ns1.labo.org. ns1 IN A 10.0.0.4 box3 IN A 10.0.0.3 fw1 IN A 10.0.0.1 ns2 IN A 10.0.0.2 box4 IN A 10.0.0.19 fw2 IN CNAME ns2 red IN CNAME box3 blue IN CNAME box4 ceci va nous permettre d'avoir des alias qui pointent sur notre serveur, maintenant il faut pouvoir les détecter dan...

messagerie traitement avec procmail

Avec procmail on peut faire des traitements automatiques, ainis en ajoutant dans le home directory un fichier .forward qui va juste "pointer" sur procmail cat /home/cgil/.forward "|IFS=' '&&exec /usr/bin/procmail -f-||exit 75 cgil" et en créant ensuite un fichier .procmailrc qui peut lui, comme ici archiver des mail et faire une réponse automatique cat /home/cgil/.procmailrc :0c: $HOME/mail.backup :0 * !^X-Loop: cgil@labo.org | (formail -rk -A "X-Loop: cgil@labo.org" -A "Precedence: auto"; echo "Hello Thank you for your mail"; echo "I will answer as soon as possible"; ) | $SENDMAIL -t -oi

La Messagerie, POP3 sous Linux

Tout comme pour SMTP il y a une quantité impressionante de variantes de serveurs POP3 et IMAP a disposition pour Linux. Il faut prendre garde au fait que POP3 transmet le user et le mot de passe en clair (dsnif et ngrep sont de redoutables ennemis à ce niveau...) Citons les serveurs et outils tel que cyrus, teapot, fetchmail etc.. Le sujet de la messagerie sous Linux est manifestement un vaste sujet.

La messagerie SMTP sous Linux

Il existe plusieurs variantes de programmes de messagerie, du plus ancien et plus compliqué comme sendmail au plus "simple" comme exim en passant par postfix et qmail. Avec mutt on a un cllient en mode console pour les messages. En fait il faut installer et configurer un de ces programmes dans mon cas j'utilise postfix sous debian. Il faut que dns soit configuré et opérationnel ! Il faut typiquement ajouter l'entrée MX : cat /etc/bind/db.labo.org $TTL 1H @ IN SOA ns1.labo.org. root.labo.org. ( 2004071504 ; Serial 1H ; Refresh 1H ; Retry 1H ; Expire 1D ) ; Negative Cache TTL ; @ IN NS ns1.labo.org. @ IN NS ns2.labo.org. @ IN MX 10 ns1.labo.org. ns1 IN A 10.0.0.4 box3 IN A 10.0.0.3 fw...

DHCP une adresse IP automatique

Pour que les machines de notre petit réseau obtiennent une adr ip automatiquement on va utiliser du dhcp donc on installe dhcpd3 serveur et on configure dans le fichier /etc/dhcp3/dhcpd.conf # # Sample configuration file for ISC dhcpd for Debian # # $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $ # # option definitions common to all supported networks... option domain-name "labo.org"; option domain-name-servers ns1.labo.org, ns2.labo.org; default-lease-time 600; max-lease-time 7200; # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. #authoritative; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). log-facility local7; # No service will be given on this subnet, but declaring it helps the # DHCP server to understand the network topology. # This is a very basic subnet declaration. subnet...

DNS - exemples de fichiers de config réseau local

l'idée c'est qu'on veut configurer un chtit caching name server sur un réseau local. Donc on commence par installer bind9,puis en avant la configuration Dans le fichier named.conf include "/etc/bind/named.conf.options"; // prime the server with knowledge of the root servers zone "." { type hint; file "/etc/bind/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "com" { type delegation-only; }; zone "net" { type...

Des animations flash sous Linux

Yeahhh ! Flash 7 est disponible sous Linux Pour l'installer il faut essentiellement copier les 2 fichiers contenus dans l'archive de Macromedia dans le répertoires des plugins de votre navigateur: tar xfvz install_flash_player_7_linux.tar.gz cd install_flash_player_7_linux/ cp flashplayer.xpt /usr/lib/mozilla-firefox/plugins/ cp libflashplayer.so /usr/lib/mozilla-firefox/plugins/ Pour connaitre le répertoire des plugins j'ai fait au préalable : dpkg -L mozilla-firefox |grep plugins Finalement pour tester si tout est okay il faut absolument passer sur le site de yeti pour tester online vos aptitudes au lancement de tux