Monday, June 22nd, 2009 | Author: Nico

J’en avais parlé il y a quelques temps avec des lutins donc le voici, mon /etc/puppet. Ne vous attendez pas à quelque chose d’exceptionnel puisque ça ne suis pas les best practices, notamment le découpage en modules. Accessoirement certaines classes ont besoin d’être réécrites (souvent les premières que j’ai conçues).

Sont inclus mon script d’external node et le script ext_lookup de Volcane (de #puppet, crédits à l’intérieur). La partie fichiers est vide car trop relou de chercher les trucs à ne pas divulguer, mais la structure est là.

Have fun.

Archive /etc/puppet

Category: BOFH Life, Puppet, SysAdmin  | Tags: ,  | One Comment
Friday, May 22nd, 2009 | Author: Nico

Petite suite à mon précédent billet sur l’utilisation d’un LB devant puppet. En 0.24.5, il existe un bug gênant si vous utilisez les external nodes : personnellement la conf des nodes est stockées dans une base mysql et c’est un script qui me sort le YAML correspond à la config.

Pour résoudre ce bug qui laisse les connexions en CLOSE_WAIT (cf le netstat) je vous conseille vivement de passer en version 0.24.8. Via du pinning apt cela ne pose aucun soucis.

Category: Puppet, SysAdmin  | Tags: , ,  | Leave a Comment
Wednesday, May 13th, 2009 | Author: Nico

Mon puppetmaster au boulot a toujours été le bon vieux webrick fourni avec puppet. J’ai récemment atteint un nombre de machines qui ne permet plus de l’utiliser, il ne scale pas. Qu’à cela ne tienne, après avoir parcouru le wiki de puppet je me suis lancé : petit résumé et condensé orienté debian.

Tout d’abord les paquets nécessaires :

apt-get install mongrel nginx

Ensuite modifier la conf dans /etc/default/puppetmaster pour démarrer des serveurs de type mongrel en lieu et place de webrick :

SERVERTYPE=mongrel
PUPPETMASTERS=4
PORT=18140

Modifier la section puppetmasterd dans votre puppet.conf en ajoutant la ligne suivante :

ssl_client_header=HTTP_X_SSL_SUBJECT

et enfin le nginx.conf, copie quasi conforme de celui du wiki :

user root;
worker_processes 5;
 
error_log /var/log/nginx/error-puppet.log;
pid /var/run/nginx-puppet.pid;
 
events {
     worker_connections  1024;
}
 
http {
     default_type  application/octet-stream;
     access_log  /var/log/nginx/access.log;
 
     sendfile       on;
     tcp_nopush     on;
 
     keepalive_timeout  65;
     tcp_nodelay        on;
 
     ssl                     on;
 
     ssl_certificate         /var/lib/puppet/ssl/certs/puppet.XXXXX.pem;
     ssl_certificate_key     /var/lib/puppet/ssl/private_keys/puppet.XXXXXt.pem;
     ssl_client_certificate  /var/lib/puppet/ssl/ca/ca_crt.pem;
     ssl_ciphers             SSLv2:-LOW:-EXPORT:RC4+RSA;
     ssl_session_cache       shared:SSL:8m;
     ssl_session_timeout     5m;
 
     upstream puppet-production {
          server 127.0.0.1:18140;
          server 127.0.0.1:18141;
          server 127.0.0.1:18142;
          server 127.0.0.1:18143;
     }
 
     server {
          listen                  8140;
          ssl_verify_client       on;
          root                    /var/empty;
          access_log              /var/log/nginx/access-8140.log;
          rewrite_log             /var/log/nginx/rewrite-8140.log;
 
     location / {
          proxy_pass          http://puppet-production;
          proxy_redirect      off;
          proxy_set_header    Host             $host;
          proxy_set_header    X-Real-IP        $remote_addr;
          proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
          proxy_set_header    X-Client-Verify  SUCCESS;
          proxy_set_header    X-SSL-Subject    $ssl_client_s_dn;
          proxy_set_header    X-SSL-Issuer     $ssl_client_i_dn;
     proxy_read_timeout  65;
     }
   }
 
    server {
        listen                  8141;
        ssl_verify_client       off;
        root                    /var/empty;
        access_log              /var/log/nginx/access-8141.log;
        rewrite_log             /var/log/nginx/rewrite-8141.log;
 
        location / {
            proxy_pass         http://puppet-production;
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header   X-Client-Verify  FAILURE;
            proxy_set_header   X-SSL-Subject    $ssl_client_s_dn;
            proxy_set_header   X-SSL-Issuer     $ssl_client_i_dn;
            proxy_read_timeout  65;
        }
    }
 
}

Et OUI il tourne en root, à cause des certificats, flemme de gruiker sur les permissions.

Category: BOFH Life, Puppet, SysAdmin  | Tags: , ,  | Leave a Comment
Wednesday, April 15th, 2009 | Author: Nico

apple-wireless J’ai adopté il y a quelques temps gedit comme éditeur graphique de tous les jours (et vim en ssh). je l’aime bien parce qu’il est simple, se lance rapidement, n’est pas bloated de fonctionnalités et il est extensible… On a le choix entre les plugins, ou les “commandes externes”. Voici un petit tips pour commiter vos changements dans un dépot subversion depuis gedit par une simple pression sur un raccourci clavier.

#!/bin/sh
#
# Simple script to commit from gedit
# Call it from external tools
# Nicolas Szalay
#
 
comment=$(zenity --entry)
svn commit -m "$comment"

Le prompt zenity vous demandera d’entrer votre message de commit et roulaize !

Category: Code, Tech  | Tags: , , , ,  | 3 Comments
Tuesday, March 31st, 2009 | Author: Nico

Petit tips en provenance du comte twisla. Pour matcher dans Xterm les URLs et surtout les ouvrir convivialement :

dans le .Xdefaults :

Xterm*charClass: 33:48,35:48,37-38:48,43-47:48,58:48,61:48,63-64:48,95:48,126:48

dans le .fvwm/config :

Key F11         A       N       Exec exec firefox -remote "openURL(`xclip -o`)"

Merci twisla <3

Category: Tech  | Tags:  | Leave a Comment
Monday, March 30th, 2009 | Author: Nico

zshell

J’utilise capistrano pour éxécuter des commandes en parallèle sur mes différents serveurs. C’est un usage un peu détourné de sa destination d’origine (le déploiement d’applis) et mon problème c’est que je n’ai pas de mémoire… j’ai donc écrit une petite fonction de complétion de la commande “cap” dans mon zsh, qui parse ~/.caprc pour convivialiser tout ça.

function captasks { reply=(`grep task ~/.caprc | cut -d":" -f2 | sed s/,//g`); }
compctl -K captasks cap

Have fun !

Category: BOFH Life, SysAdmin  | Tags:  | Leave a Comment
Tuesday, March 24th, 2009 | Author: Nico

RubyJe suis un adepte de remember the milk, je m’en sers de todo list pour le boulot. C’est bien pratique, joli et tout. Mais ajouter une tache est un chouia long, surtout quand on veut le faire vite fait lorsque la personne est en face de vous. Je me suis donc fait un petit script ruby qui m’ajoute directement les taches dans ma liste “Travail”.

#!/usr/bin/env ruby
 
require 'rubygems'
require 'pony'
 
rtm_mail = "vous+numero@rmilk.com"
sender = "vous@domaine.com"
rtm_liste = "Travail"
 
subject = ""
 
ARGV.each { |a| subject +=" " + a }
 
Pony.mail(:to => rtm_mail, :from => sender, :subject => subject, :body => 'List: ' + rtm_liste)
Category: Code, SysAdmin  | Tags:  | One Comment
Wednesday, March 04th, 2009 | Author: Nico

eth0Et voila, mon premier plugin pour munin ! C’est un plugin solaris only (utilisation du module Kstat oblige) qui permet de monitorer les I/O sur les pools ZFS. Je n’ai pas trouvé comment faire des stats par pool (comprendre à la “zpool iostat”) et si quelqu’un a une astuce à ce niveau là, je suis preneur. En attendant voici le fichier.

Tuesday, March 03rd, 2009 | Author: Nico

Petit post rapide en forme de pense bête : pour extraire des infos sur les I/O des pools ZFS en perl (sous solaris) :

#!/usr/perl5/bin/perl -w
 
use strict;
use Sun::Solaris::Kstat;
 
my $Kstat = Sun::Solaris::Kstat->new();
 
my $bytes_read = ${Kstat}->{unix}->{0}->{vopstats_zfs}->{read_bytes};
my $bytes_write = ${Kstat}->{unix}->{0}->{vopstats_zfs}->{write_bytes};
 
print $bytes_read." / ".$bytes_write."\n";

A venir : un plugin munin pour grapher les I/O ZFS

Category: Code, OpenSolaris, SysAdmin  | Tags: ,  | Leave a Comment
Thursday, February 26th, 2009 | Author: Nico

eth0Tips rapide : pour accélerer la collecte des données avec munin-update, ajoutez dans /etc/munin/munin.conf du master :

fork yes

Ainsi munin fera un fork par machine à aller interroger, plutôt que bêtement les unes après les autres.

Category: Général  | Tags: ,  | Leave a Comment