Archives de catégorie : Linux

check-mk « check_pid »

This local check for check_mk is useful with services who won’t start if an old or incorrect pid file remains. I needed to write it because this is the very case of the postfix version embedded with zimbra.

The code is self-explanatory :

 

#!/bin/bash
# Cyril Pawelko http://www.pawelko.net/check-mk-check_pid/
# Version 1
# Checks if the PID referenced in a PIDFILE exists
# This is a "local" check_mk check for *NIX:
# - Rename it if you need several checks on the same host
# - Copy to check-mk local checks directory (/usr/lib/check_mk_agent/local on Debian)
# - Customize with the PID file path:
PIDFILE="/opt/zimbra/data/postfix/spool/pid/master.pid"

if [ ! -r $PIDFILE ]
 then echo 3 Pid_$PIDFILE - File $PIDFILE cannot be read
 exit
fi

PID=$(cat $PIDFILE  )
PID=${PID//[^0-9]/}
if ps $PID > /dev/null
 then echo 0 Pid_$PIDFILE - Process $PID referenced in $PIDFILE is running
 else echo 2 Pid_$PIDFILE - Process $PID referenced in $PIDFILE does not exist
fi

Download

Have fun !

Bluetooth mouse with Doudoulinux

I installed Doudoulinux on my MSI Wind U100’s hard drive for my daughter,

First, I followed this excellent tutorial which tells how to install a basic Debian Squeeze on my hard drive, and install doudoulinux on top of it.

To enable the bluetooth mouse, I followed these steps:

  • Enable bluetooth 😉
  • Install blueman
  • Open a desktop session (« Tout Doudoulinux » in french)
  • Go to settings and open Bluetooth Manager
  • Connect your bluetooth mouse

Et voilà, it’s now enabled at boot for all sessions.

Tuning zfs-fuse sur Debian Squeeze

Je souhaite conserver plein de copies de sauvegarde de machines virtuelles tournant sur mon hyperviseur étant un kvm/libvirt/archipel sur une squeeze.
Il y a un candidat idéal pour cela: zfs, qui pour des raisons de licence n’a pas d’implémentation native dans linux.
Pour commencer, j’ai fait quelques tests avec zfs-fuse (0.6.9-1), sans tuning particulier. Ca marche correctement, mais pas très vite (moins de 10 Mo/s).
J’ai ensuite utilisé le zfs natif. Les performances brutes étaient bien meilleures mais ça tirait énormément sur la RAM et tout finissait par devenir très lent, et la sauvegarde d’une des VM ne se terminait jamais. En essayant de tuner la taille du ARC cache, je n’ai réussi qu’à obtenir un plantage complet du noyau (le dmesg parlait de lui même).

Je suis donc retourné à zfs-fuse en attendant de trouver mieux.
Maintenant que j’ai une rotation des VM sur une semaine, je peux avoir une idée précise des ressources requises par la déduplication:

#  zpool status -D zpool
 pool: zpool
state: ONLINE
scrub: none requested
config:

       NAME                               STATE     READ WRITE CKSUM
       zpool                              ONLINE       0     0     0
         disk/by-id/dm-name-archipel-zfs  ONLINE       0     0     0

errors: No known data errors

DDT entries 282985, size 354 on disk, 222 in core

bucket              allocated                       referenced
      __
refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
------   ------   -----   -----   -----   ------   -----   -----   -----
    1    49,6K   6,20G   2,25G   2,25G    49,6K   6,20G   2,25G   2,25G
    2    11,1K   1,39G    583M    583M    27,6K   3,45G   1,42G   1,42G
    4     171K   21,4G   12,6G   12,6G    1,13M    145G   85,5G   85,5G
    8    43,7K   5,46G   3,11G   3,11G     358K   44,7G   25,4G   25,4G
   16      741   92,6M   59,3M   59,3M    13,5K   1,69G   1,04G   1,04G
   32      129   16,1M   8,19M   8,19M    4,67K    598M    298M    298M
   64        3    384K   67,5K   67,5K      330   41,2M   7,78M   7,78M
  128        1    128K   4,50K   4,50K      133   16,6M    598K    598K
   1K        1    128K   4,50K   4,50K    1,27K    162M   5,71M   5,71M
   2K        1    128K      7K      7K    3,98K    509M   27,8M   27,8M
  16K        1    128K   7,50K   7,50K    23,7K   2,96G    178M    178M
Total     276K   34,5G   18,6G   18,6G    1,60M    205G    116G    116G

Je vois ici que j’ai 282985 entrées pour la déduplication, chaque entrée occupant 222 octets en RAM.
J’en déduis donc que mon cache pour la dédup est d’environ 60 Mo (ce qui est peu !).
Par défaut ZFS alloue un quart de la taille du cache ARC pour le cache des metadata, donc fait partie la table DDT.
Le cache ARC doit donc être au moins de 240 Mo.
Par défaut, la valeur sur ma Debian était de 100 Mo.
Cela apparait au démarrage de fuse:

# grep -i zfs /var/log/syslog
Nov 28 21:12:39 archipel zfs-fuse: ARC caching: maximum ARC size: 100 MiB
Nov 28 21:12:39 archipel zfs-fuse: ARC setup: min ARC size set to 16777216 bytes
Nov 28 21:12:39 archipel zfs-fuse: ARC setup: max ARC size set to 104857600 bytes

J’ai donc modifié la ligne « max-arc-size = 240 » dans le fichier /etc/zfs/zfsrc et relancé zfs-fuse

#invoke-rc.d zfs-fuse restart

A titre d’exemple, le temps de sauvegarde de ma VM zimbra est passé de 16 minutes à 6 minutes !
En réglant le cache à 500 Mo, je descends à 3 minutes pour la même sauvegarde. Ce qui correspond à peu près aux temps que j’obtenais avec les modules zfs natifs, mais qui eux provoquaient de nombreux plantages, alors qu’avec zfs-fuse j’ai une solution parfaitement stable. Un réglage du cache à 1 Go n’a pas donné de meilleurs résultats.

Conclusion : Voici la formule appliquée dans mon cas avec zfs-fuse : max-arc-size = Taille du cache DDT * 8

Compiling rpcapd for linux

Several years ago, I compiled rpcapd for linux. To achieve it, I had to comment the win32 specific code, so it compiled on linux.

I recently tried to compile the latest version, and it doesn’t need modifications anymore to successfully compile.

Here is a quick howto, based on debian 5:

Install the required tools

 apt-get install bison flex

Download and unzip winpcap

 wget http://www.winpcap.org/install/bin/WpcapSrc_4_1_2.zip
 unzip WpcapSrc_4_1_2.zip
 cd winpcap/wpcap/libpcap
 chmod +x configure runlex.sh

Configure libpcap to compile statically…

 CFLAGS=-static ./configure

…and compile

 make
 cd rpcapd/

edit the Makefile and add -static to CFLAGS, and finally

 make

Downloads:

amd64: rpcapd-4.1.2-amd64.gz
i386: rpcapd-4.1.2-i386.gz

Astuces Debian

Définir le hostname du client DHCP :

Contrairement à Windows ou à une Fedora Core, un client DHCP Debian n’indique pas son nom d’hôte au serveur DHCP, qui ne peut donc pas créer l’enregistrement DNS correspondant.
Pour y remédier, ajouter la ligne suivante dans le fichier /etc/dhclient.conf ou /etc/dhcp3/dhclient.conf pour une ubuntu
send host-name "monpc";

Relancer le réseau pour prendre en compte les changements:
/etc/init.d/networking restart

Adresses IP multiples:

Pour affecter plusieurs adresses IP à une même interface, il suffit de déclarer les adresses supplémentaires dans /etc/network/interfaces, en utilisant le nom de l’interface, suivi de « :0 » (ou « :1 », « :2 », etc…)
Exemple:

auto eth0
iface eth0 inet static
address 192.168.3.90
netmask 255.255.255.0
gateway 192.168.3.1

auto eth0:0
iface eth0:0 inet static
address 192.168.3.91
netmask 255.255.255.0
gateway 192.168.3.1

Redémarrer ensuite le réseau avec la commande /etc/init.d/networking restart
Source

Compiler un paquet à partir du fichier .dsc

Télécharger le fichier .dsc
dget http://mentors.debian.net/debian/pool/main/s/spice-protocol/spice-protocol_0.6.3-1.dsc
Extraire le fichier téléchargé
dpkg-source -x celt051_0.5.1.3-1.dsc
cd celt051-0.5.1.3/
Vérifier les dépendances
dpkg-checkbuilddeps
Compiler si toutes les dépendances sont résolues
dpkg-buildpackage
Compiler en ignorant les dépendances non résolues
dpkg-buildpackage -d
Installer les packages compilés
cd..
dpkg -i libcelt051-0_0.5.1.3-1_amd64.deb libcelt051-dev_0.5.1.3-1_amd64.deb

Vmware Server, NAT et PPTP

L’objectif

Un ami m’a soumis la problématique suivante: Il souhaite louer un serveur hébergé chez OVH (donc avec une seule interface réseau) avec vmware server pour héberger plusieurs machines virtuelles, dont une devant faire office de serveur pptp. Il comptait s’appuyer sur le « NAT Networking » de vmware server pour gérer la translation d’adresses, ce qui ne pose pas de problèmes pour le port TCP/1723 (PPTP) mais ne fonctionne pas avec le protocole 47 (GRE).
La solution est simple: Linux sachant parfaitement remplir ce rôle, il suffit de lui confier et de reléguer le « vm network » sur une interface virtuelle.

Voici donc un guide pas à pas concernant vmware server 2.0 sur une Debian 5.0.2.
Les paramètres sont les suivants:

  • IP « publique » de l’hôte: 192.168.3.1 (oui je sais, c’est une maquette)
  • Réseau privé: 172.16.0.0/24
  • IP privée de l’hôte: 172.16.0.1
  • IP serveur virtuel PPTP: 172.16.0.2

Ajout de l’interface virtuelle tap1

Installer le paquet contenant le binaire tunctl

apt-get install uml-utilities

Ajouter dans /etc/network/interfaces:

auto tap1
iface tap1 inet static
       pre-up tunctl -u root -t tap1
       pre-up ifconfig tap1 up
       post-down tunctl -d tap1
       address 172.16.0.1
       netmask 255.255.255.0

puis activer tap1

ifup tap1

vérifier le tout

#ifconfig tap1
tap1      Link encap:Ethernet  HWaddr 00:ff:c0:7f:c8:83
          inet adr:172.16.0.1  Bcast:172.16.0.255  Masque:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:3805 overruns:0 carrier:0
          collisions:0 lg file transmission:500
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Configuration vmware

Nous avons donc une nouvelle interface réseau, nous allons maintenant dire à vmware server de se « bridger » sur cette interface, et non pas une autre.
Pour cela, lancer la commande

vmware-config.pl

et modifier la partie concernant les bridges, soit en ajoutant un nouveau brigde, soit en modifiant le bridge actuel pour qu’il utilise tap1. Dans notre cas, la deuxième solution semble la plus appropriée, les vm n’ayant plus à être connectées directements via l’interface « publique ».
Les machines virtuelles peut maintenant être connectées à ce bridge, et se voir affecter une adresse IP en 172.16.0.x avec comme passerelle 172.16.0.1

Configuration iptables

Désormais, il n’y a plus qu’à paramétrer netfilter afin qu’il route correctement les paquets pptp.
Tout d’abord on active le routage:

echo 1 > /proc/sys/net/ipv4/ip_forward

Puis on natte le réseau privé:

iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j  MASQUERADE

En renvoyant le port pptp et le protocole GRE vers notre VM:

iptables -t nat -A PREROUTING -d 192.168.3.9 -p 47 -j DNAT --to-destination 172.16.0.2
iptables -t nat -A PREROUTING -d 192.168.3.9 -p tcp --dport 1723 -j DNAT --to-destination 172.16.0.2

Si ça ne fonctionne pas, penser à charger le module « Netfilter NAT helper module for PPTP »:

modprobe nf_nat_pptp

Conclusion

Cette astuce peut-être appliquée dans d’autres cas, par exemple pour simplement profiter de réseaux virtuels supplémentaires avec vmware server (ou encore kvm), ces réseaux contenant l’hôte et les invités.

Rpcapd for Linux : Remote sniffing with ethereal/wireshark

rpcapd is a deamon that captures traffic on a host, and is able to send it to a remote network sniffer, as ethereal.

It’s included with recent winpcap releases, so running it on windows is very easy : it’s located in C:\program files\winpcap

It’s more tricky for linux : rpcapd should compile and work under linux, but I had to remove parts of windows-related code that prevented correct compilation.

Remote linux sniffer :

  • Download rpcapd.gz for linux, statically compiled for linux/i386 (this version will crash with recent Wireshark releases 1.12+)
  • Download from here
  • Gunzip and run as root : ./rpcapd -n

Local Windows ethereal :

  • Install winpcap 4.0
  • Install Wireshark 0.99
  • Go to « Capture Options » and specify remote host : rpcap://remotehost/remoteif
  • Start sniffing

It’s a always good idea to use a capture filter to exclude traffic between local and remote host.

Example with windows 192.168.50.25 remotely sniffing from linux 192.168.50.38:

rpcap

Or, with a recent Wireshark, click « Manage interfaces », add your host and select the desired interfaces.

 

Update: Do the same without rpcapd
Update 2 : Compile your own version, download for other archs here

Souris bluetooth et Debian

Voici comment faire en sorte qu’une souris bluetooth (en l’occurence une Logitech Laser Travel Mouse) soit reconnectée automatiquement au démarrage par ma Debian 5.

Ceci n’est qu’une adaptation des informations trouvées sur cette page

  • Ouvrir un terminal en tant que root
  • Installer le package bluez-utils
#apt-get install bluez-utils
  • Allumer la souris
  • Appuyer quelques secondes sur le bouton « Connect » de la souris, jusqu’à ce que le voyant clignote
  • Lancer la recherche de souris:
#hidd --search
Searching ...
  	Connecting to device 00:07:61:EA:91:63
  • La souris doit maintenant fonctionner
  • Editer le fichier /etc/default/bluetooth afin qu’il contienne les lignes suivantes (remplacer évidemment l’adresse mac par celle obtenue lors de la recherche) :
############ HIDD
#
# HID daemon
HIDD_ENABLED=1
HIDD_OPTIONS="--connect 00:07:61:EA:91:63 --master --server"
  • La souris doit maintenant être connectée dès qu’elle est allumée

Grub error 15 when adding new hard disk

I have a Asus M2N-MX motherboard, with an single SATA disk, and grub correctly configured:

/boot/grub/device.map
(hd0) /dev/sda

When I tried adding an IDE disk, grub refused to boot with « error 15 », which means « file not found ».

Obviously, grub was detecting disks in a wrong order, and was trying to load stage 1.5 from the IDE disk. To be clear, since the boot disk defined in the BIOS was the SATA, it had to be presented to grub as the first disk. So it’s a buggy BIOS.

This seems to be a common behavior when mixing IDE and SATA disks.
I googled about this error, but founded nothing really helpful. Changing boot order or activating onboard RAID didn’t solve this error.

Then I upgraded from bios 0701 to 0903, and the problem was gone.

TIP: To upgrade Asus motherboard bios on a linux-only computer, you don’t need to create a DOS bootable floppy. Recent Asus motherboard include a feature called « EZ-Flash », which is an BIOS upgrade utility included … in the BIOS.

  • Download BIOS update from Asus Website
  • Unzip it and extract the .ROM file (for me M2NX0907.ROM)
  • Rename this file with the motherboard model name (for me M2N-MX.ROM)
  • Install mtools on your distro
  • Insert a blank floppy
  • Format the floppy mformat a:
  • Copy the rom on the floppy mcopy M2N-MX.ROM a:
  • Reboot
  • During POST, press Alt-F2 to launch EZ-Update
  • The BIOS upgrade procedure will start