Archive for the Category » Général «

Tuesday, April 06th, 2010 | Author: Nico

eth0Another cool project I keep an eye on for some weeks is “the marionette collective“, aka mcollective. This project is leaded & develloped by R.I. Pienaar, one of the most active people in the puppet world too.

Mcollective is an framework for distributed sysadmin. It relies on a messaging framework and has many features included : flexibility, speed, easy to understand.

Some time ago, I had wrote a tool called “whosyourdaddy” to help me (and my memory as big as a goldfish one) to find on which Xen dom0 a Xen domU was living. It worked fine, expect the fact that is was not dynamic : if a VM was migrated  from a dom0 to another, I had to update the CMDB. Not really reliable (if an update fails the CMDB is no more accurate) and I didn’t want to have to embed this constraint in the Xen logic. So I decided to try out to write my own mcollective agent and here it is ! It is built on top of a (very) small ruby module for xen and has it own client.

You can find on which dom0 a domU resides :

master1:~# ./mc-xen -a find --domu test
hypervisor2              : Absent
hypervisor1              : Absent
master1:~# ./mc-xen -a find --domu domu2
hypervisor2              : Present
hypervisor1              : Absent

Or list your domUs :

master1:~# ./mc-xen -a list
hypervisor2              
 domu2

hypervisor1              
 no domU running

Download the agent & the client

Wednesday, January 27th, 2010 | Author: Nico

Today I started installing a reverse proxy at $WORK. I choose to follow this way, and all my DNS data is stored in my CMDB. Once again, the solution came from #puppet ! You can embed some “pure” ruby code in ERB templates. And, yes, you can query your database !

<%
dbh = DBI.connect("DBI:Mysql:yourbase:mysql.mycorp.com", "you", "XXXX")
query = dbh.prepare("your fancy query")
query.execute
while row = query.fetch do
todisplay=some_funny_things()
%>
<%= todisplay %>
<% end %>

I use this technique to generate the dnsmasq data file. Just use the subscribe function and all is done !

Wednesday, September 09th, 2009 | Author: Nico

Pour cross-compiler des applis pour son drobo :

  • Décompresser le SDK (arm-2006q1-6-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2), par exemple /home/nico/drobo
  • Ajouter /home/nico/drobo/bin au PATH
  • créer un répertoire de build, par exemple /home/nico/drobo/build
  • créer un répertoire de destination, par exemple /home/nico/drobo/target
  • décompresser les sources à cross-compiler dans le rep de build
  • lancer le configure de l’appli comme suit :
  • ./configure --host=arm-none-linux-gnueabi --prefix=/home/nico/drobo/target
  • puis make & make install classique

hop !

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
Tuesday, December 30th, 2008 | Author: Nico

Si vous avez lu l’article sur puppet dans le GLMF n°112 de janvier 2008, une petite erreur s’est glissée dedans. Je préconise l’utilisation de backports pour puppet en version stable si on désire avoir une version récente. Or, entre l’écriture de l’article (et les tests que j’avais fait) et sa publication, le package puppet a été supprimé des backports… Donc il vous reste soit à upgrader, soit à installer la version venue de testing…

Personellement je roule avec la 0.20 dispo dans etch sur mes serveurs encore en etch.

Monday, November 24th, 2008 | Author: Nico

Je cherchais depuis un petit moment un NAS sympa, qui réponde à mes besoins : silencieux, pas moche, facilement manageable au niveau volumes, opensource friendly et extensible au niveau des fonctionnalités. Mon choix s’est porté sur le Drobo, de chez Data Robotics et son DroboShare. Petit partage de mon expérience.

L’installation : facile. Après avoir déballé les 2 tonnes & demi de cartons il suffit de brancher et ça marche out-of-the-box. Nécessite un windows ou un mac pour la mise à jour des firmwares, c’est assez dommage. Le dashboard est néanmoins assez simple à utiliser, accessibles aux simples mortels.

La technologie : le Drobo dispose de 4 emplacements pour disques durs. Il lui en faut 2 au minimum (logique, la bête fait du RAID) et il est capable d’étendre les volumes de données seul. Comprendre : si vous lui avez donné 3 disques de 250G et 1 disque de 1To vous disposerez d’environ 700G utilisables pour vos données. Remplacez un des disques de 250 par un de 1To et le volume dispo passera à 1,4To. Rien de bien exceptionnel quand on pense à des technologies comme ZFS mais ça fait son petit effet sur quelqu’un de moins aware de la dernière hype du stockage ;)

Les fonctionnalités : de base, le DroboShare ne parle que le protocole SMB et il faut avouer que pour moi qui n’aie que des unix à la maison… ça sent un peu des pieds… Heureusement, le DroboShare est une plateforme “ouverte” avec un SDK et un système d’extensions appelé les “DroboApps” qui permet de faire tourner des programmes sur le DroboShare comme par exemple … unfsd, un daemon NFS userland qui a été porté par FreeBSDgirl. C’est là que le Drobo prend tout son intêret : on y fait tourner ce qu’on veut, comme par exemple Firefly, un serveur DAAP qui streame la musique convivialement. Votre serviteur s’est amusé à porter mpd dessus aussi, c’est relativement simple même pour moi qui n’y connait fichtrement rien en cross-compilation. La machine est un processeur ARM9 avec 128M de RAM ce qui laisse quand même pas mal de latitude pour expérimenter, le tout sur un noyau 2.6.12.

Les performances : sur ce point c’est mi figue mi raisin. Les performances via SMB sont vraiment mauvaises, environ 10Mb/s. Ce chiffre est à prendre avec des gants parce que j’ai utilisé des unix en client et que samba n’est pas nécessairement une bête en ce qui concerne les perfs. A noter qu’en NFS elles sont tout à fait acceptables à 40Mb/s. Ok, avoir mis un port Gigabit est un peu overkill :) cela dit, ce n’est pas dit que le facteur limitant ne soit pas coté client. Personnellement ce débit me convient de toute façon.

Pour résumer :

  • les bons points : un NAS simple à gérer, opensource friendly (SDK & environnements de dev cross-plateforme sous GPL), et extensible.
  • les mauvais points : des perfs pas forcement au rendez vous, le manque de docs facilement acessibles sur la compilation d’applis pour le DroboShare.

Au final une petite boiboite que je recommenderai à ceux qui veulent stocker & partager des Go de données sans avoir à se casser la tête sur la gestion et la protection des données.

Si je trouve le courage dans un prochain billet un petit howto installer un environnement de dev & cross-compiler une appli pour la bête.

Category: Général, Tech  | 4 Comments
Thursday, November 13th, 2008 | Author: Nico

Il y a quelques temps j’ai essayé de monter des disques iSCSI exportés depuis mes filers opensolaris sur des machines linux. Le problème c’est que lors de la connexion à la target, l’initiator se plantait lamentablement dans un kernel panic de derrière les fagots. Maintenant que lenny est presque là, avec des kernels récents (2.6.26) on peut jouer avec tout ça. Petit résumé & regroupement des informations éparpillées à travers le web. La target sera une machine solaris, et l’initiator une debian dotée d’un kernel 2.6.26-1-amd64.

Sur la machine solaris :

# on vérifie que les packages nécessaires sont là
solaris-devx$ pkginfo |grep iscsi
system      SUNWiscsir                       Sun iSCSI Device Driver (root)
system      SUNWiscsitgtr                    Sun iSCSI Target (Root)
system      SUNWiscsitgtu                    Sun iSCSI Target (Usr)
system      SUNWiscsiu                       Sun iSCSI Management Utilities (usr)

# on active le service iscsi target
solaris-devx# svcadm enable iscsitgt

# configuration du discovery iscsi
solaris-devx# iscsiadm modify discovery --sendtargets enable
solaris-devx# iscsiadm add discovery-address <ip_solaris>

# Création de volumes ZFS à exporter
solaris-devx# zfs create tank/xen
solaris-devx# zfs set shareiscsi=on tank/xen
# volume1 héritera des propriétés de tank/xen et sera directement partagé
solaris-devx# zfs create -s -V 10g tank/xen/volume1
# petite vérification
solaris-devx# iscsiadm list target
Target: iqn.1986-03.com.sun:02:6bc5ce3d-eb83-4055-fe67-d1fd9a7eb7b7
        Alias: tank/xen/volume1
        TPGT: 1
        ISID: 4000002a0000
        Connections: 1

Sur la machine debian :

# on installe open-iscsi
debian-test# apt-get install open-iscsi
# on se logge sur la target
debian-test# iscsiadm -m discovery -t st -p <ip_solaris>
<ip_solaris>:3260,1 iqn.1986-03.com.sun:02:6bc5ce3d-eb83-4055-fe67-d1fd9a7eb7b7
debian-test# iscsiadm  -m node -l -T "iqn.1986-03.com.sun:02:6bc5ce3d-eb83-4055-fe67-d1fd9a7eb7b7"
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:6bc5ce3d-eb83-4055-fe67-d1fd9a7eb7b7, portal: <ip_solaris>,3260]
Login to [iface: default, target: iqn.1986-03.com.sun:02:6bc5ce3d-eb83-4055-fe67-d1fd9a7eb7b7, portal: <ip_solaris>,3260]: successful
# vérification
debian-test# dmesg
[snip]
[58182.163989] sd 3:0:0:0: [sdc] 20971520 512-byte hardware sectors (10737 MB)
[58182.167839] sd 3:0:0:0: [sdc] Write Protect is off
[58182.167867] sd 3:0:0:0: [sdc] Mode Sense: 67 00 00 08
[58182.171977] sd 3:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[58182.175981] sd 3:0:0:0: [sdc] 20971520 512-byte hardware sectors (10737 MB)
[58182.175989] sd 3:0:0:0: [sdc] Write Protect is off
[58182.175989] sd 3:0:0:0: [sdc] Mode Sense: 67 00 00 08
[58182.183974] sd 3:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[58182.183989]  sdc: sdc1
[58182.187989] sd 3:0:0:0: [sdc] Attached SCSI disk

Et voila ! un beau disque tout beau tout chaud ! A noter plusieurs choses : la première c’est qu’on a opéré en live, sans authentification ni rien. iSCSI supporte néanmoins ces features. La seconde c’est que les IQN sont pour le moins “cryptiques”. Il est possible de les renommer pour les rendre humainement compréhensibles.

Sources : benr & wiki debian.

Tuesday, September 23rd, 2008 | Author: Nico

En lisant cette page il m’a semblé être encore plus fainéant que l’auteur… L’ami Anhj m’a donc conseillé de rajouter quelques tips de plus…

1 : ZSH et la complétion des hostnames lors d’un ssh/ping/autre. Faire “ssh solar<tab>” et que “ssh solarisfiler” apparaisse, comme ça au début ça semble ‘ouais… le mec il gagne 1 seconde”… maintenant, quand vous passez le plus clair de votre temps à faire des connexions vers d’autres machines ça devient tout simplement indispensable. et ça marche aussi pour le scp, et en plus si vous avez un ssh-agent, la complétion sur le FS distant (genre “scp monfichier monserveur:sc<tab>ripts/“)

extrait de mon .zshrc :

# Completion SSH
[ -f ~/.ssh/config ] && : ${(A)ssh_config_hosts:=${${${${(@M)${(f)"$(<~/.ssh/config)"}:#Host *}#Host }:#*\**}:#*\?*}}
[ -f ~/.ssh/known_hosts ] && : ${(A)ssh_known_hosts:=${${${(f)"$(<$HOME/.ssh/known_hosts)"}%%\ *}%%,*}}
zstyle ':completion:*:*:*' hosts $ssh_config_hosts $ssh_known_hosts

et bien sur dans le .ssh/config

HashKnownHosts no

2. Ca va sembler con mais… un raccourci clavier : F12 chez moi, pour afficher un terminal.

3. Apprendre un langage de script (en plus du shell) du genre ruby, python, perl. Sans ça, point de salut. Au début on y passe un peu de temps, mais quand il faut répéter des opérations complexes et nécessitant par exemple des accès LDAP quelques milliers de fois, on s’y retrouve assez vite.

4. Si tu ne vas pas à la notification, la notification ira à toi ! Ca me saoulait d’avoir à regarder mon client mail régulièrement, j’ai donc commis ça, pour avoir mes notifications de monitoring sur l’IM corpo en attendant d’avoir un LCD accroché au mur :)

More to come ? si j’ai le courage

Category: Général  | Leave a Comment
Tuesday, September 16th, 2008 | Author: Nico

Contexte : je l’ai déjà dit mais je gère quelques asterisk au boulot, j’aime bien utiliser la même technologie (à savoir SNMP) pour monitorer toutes mes machines. Mais on ne peut pas dire qu’asterisk soit un grand communiquant : parler avec le monde extérieur, c’est un peu dur pour lui, il est limite autiste là dessus.

J’ai donc écrit (en python, pas très très propre, doit y avoir moyen de mieux faire mais je suis pas un gourou) un petit pour étendre SNMPd et ainsi avoir des infos sur asterisk via SNMP.

Il permet de récupérer les infos suivantes :

  • Nombre de channels actifs
  • Nombre d’appels en cours
  • Uptime (en jour)
  • Nombre de peers SIP (total / online)
  • Nombre de peers IAX (total / online / offline / unmonitored)

Pour ajouter les “capacités” de ce script à SNMPd c’est simple, il faut insérer à la fin de snmpd.conf les lignes suivantes :

exec 1.3.6.1.4.1.29726.3.1.1. channels /opt/scripts/snmp_asterisk.py 1.1
exec 1.3.6.1.4.1.29726.3.1.2. calls /opt/scripts/snmp_asterisk.py 1.2
exec 1.3.6.1.4.1.29726.3.1.3. uptime /opt/scripts/snmp_asterisk.py 1.3
exec 1.3.6.1.4.1.29726.3.2.1. total_sip /opt/scripts/snmp_asterisk.py 2.1
exec 1.3.6.1.4.1.29726.3.2.2. online_sip /opt/scripts/snmp_asterisk.py 2.2
exec 1.3.6.1.4.1.29726.3.2.3. total_iax /opt/scripts/snmp_asterisk.py 2.3
exec 1.3.6.1.4.1.29726.3.2.4. online_iax /opt/scripts/snmp_asterisk.py 2.4
exec 1.3.6.1.4.1.29726.3.2.5. offline_iax /opt/scripts/snmp_asterisk.py 2.5
exec 1.3.6.1.4.1.29726.3.2.6. unmonitored_iax /opt/scripts/snmp_asterisk.py 2.6

Le fichier est ici.

Have fun !

Sunday, June 15th, 2008 | Author: Nico

You are in a mall when zombies attack. You have:
1. One weapon
2. One song blasting on the speakers
3. One famous person to fight along side you.

1. A good sword, will do easily, no need for ammunition
2. “Green Hornet” from Kill Bill OST
3. Chuck Norris, I will not even have to use my swor

Category: Général  | Leave a Comment