Convertir un disque KVM/RAW vers le format VDI de Virtualbox

Parfois vous préparez des vm Windows sous KVM sans penser à ceux qui sont obligés d’utiliser VirtualBox car ils ne disposent pas des instructions de virtualisation matérielles sur leur machine. J’ai eu le cas récemment pour une VM sous Windows XP, que j’ai donc recréé sans disque dur afin de réutiliser le disque créé au format créé via virt-manager vu que l’OS et les softs étaient déjà présent.
En fait comme d’habitude sous Linux, c’est simple :

# qemu-img convert /var/lib/libvirt/images/VM-XP-01.img VM-XP-01.bin
# VBoxManage convertfromraw VM-XP-01.bin VM-XP-01.vdi --format VDI

Le fichier /var/lib/libvirt/images/VM-XP-01.img étant le disque d’origine et le fichier .vdi celui à destination de VirtualBox.
Attention sur un point quand vous recréez la VM sous VirtualBox, il faut qu’elle soit compatible au niveau chipset et contrôleur SATA sinon vous aurez droit à un joli écran bleu INACCESSIBLE_BOOT_DEVICE avec comme code d’erreur 0x0000007B, message des plus clair indiquant que l’OS n’a pas le driver du contrôleur de disque.

Bi-écran avec le driver nouveau et des résolutions d’écran différentes

Avec le blob et nvidia-xconfig il faut reconnaître que ça fonctionne « hors de la boite » mais ça manque de liberté et un joli boot sexy. Après avoir quitté archlinux après 5 ans de bons et loyaux services, je suis repassé sous Debian Sid et j’ai retenté l’aventure nouveau qui n’avait pas été glorieuse. Réponse courte : ça marche! Par contre, visiblement le fichier .xprofile est has been et aucun Display Manager ne semble en vouloir, je le lance donc via autostart.

#!/bin/bash
# On positionne les écrans selon leur sortie vidéo sur la carte :
xrandr --output VGA-1 --right-of DVI-I-1
# Résolution du premier écran connecté en DVI :
xrandr --output DVI-I-1 --mode 1920x1080
# Résolution du second écran sur le port VGA :
xrandr --output VGA-1 --mode 1280x1024
# Il ne reste plus qu'à dire que l'affichage de l'écran VGA démarre au coin supérieur droit du premier écran :
xrandr --output VGA-1 --pos 1920x0

Pour connaître le nom des sorties, un petit xrandr lancé sans paramètre suffit. Le problème de cette configuration reste le fait que les écrans switch plusieurs fois au lancement de ma session XFCE.

Dspam, Debian Squeeze, l’univers et le reste

Backport du paquet Sid :

Activer les dépôts SID :

deb-src http://ftp.fr.debian.org/debian/ sid main contrib non-free

Créer le paquet et l’installer :

mkdir /tmp/dspam && cd /tmp/dspam
apt-get source dspam
cd dspam-3.6.8 && dpkg-buildpackage && cd ..
dpkg -i dspam_3.6.8-9.3_amd64.deb dspam-webfrontend_3.6.8-9.3_all.deb libdspam7_3.6.8-9.3_amd64.deb libdspam7-drv-sqlite3_3.6.8-9.3_amd64.deb
ln -s /usr/lib/dspam/libsqlite3_drv.so /usr/lib/dspam/libsqlite_drv.so

Configuration :

Fichier /etc/dspam/dspam.conf :

# J'utilise dovecot comme MDA :
TrustedDeliveryAgent "/usr/lib/dovecot/deliver"
# Postfix soumet les mails en lmtp (ServerMode) à dspam :
ServerPort              10124
ServerQueueSize 32
ServerPID              /var/run/dspam/dspam.pid
ServerMode standard
# On définit comment dspam re-soumettra les mails à postfix
DeliveryHost        127.0.0.1
DeliveryPort        10124
DeliveryIdent       localhost
DeliveryProto       SMTP
# On réinjecte les mails légitimes ET les spams
ServerParameters        "--deliver=innocent,spam -d %u"
ServerIdent             "localhost.localdomain"
# Mode d'apprentissage
TrainingMode teft
# Algorithme d'apprentissage des tokets :
Algorithm graham burton
# Faut-il excpliquer ce que cela permet?
Feature whitelist
# Paramétrages de la base de tokens par utilisateur
# A ajuster en fonction de l'espace disque
# 100 000 enregistrements nécessitent 1.6 Mo de place
# La taille de la base est fonctions de paliers pré-définis
# La valeur ci-dessous représente une base par utilisateur d'environ 200 Mo
HashRecMax              12582917
# La base peut croitre jusqu'à 2 000 000 d'enregistrements par parliers de 49 157
HashAutoExtend          on
HashMaxExtents          20000000
HashExtentSize          49157
# Activation de l'apprentissage automatique lorsqu'un mail est forwardé à
# notspam-utilisateur@domaine.tld ou spam-utilisateur@domaine.tld
# Bien entendu, les alias doivent être présents dans la configuration de Postfix
ParseToHeaders on
ChangeModeOnParse on
ChangeUserOnParse full

Preference "spamAction=tag"
Preference "signatureLocation=message"  # 'message' or 'headers'
Preference "showFactors=on"
Preference "spamSubject=[SPAM] "

Postfix :

Fichier master.cf :

smtp      inet  n       -       -       -       -       smtpd
  -o content_filter=lmtp:127.0.0.1:10124

127.0.0.1:10125 inet    n       -       n       -       -       smtpd
  -o mynetworks=127.0.0.1/8
  -o smtpd_authorized_xforward_hosts=127.0.0.1/8
  -o content_filter=

Morot.fr in the kiosques!

Couverture GLMF 135

Vous trouverez un article de ma part sur le paramétrage de DRBD et GFS2 sous Debian GNU/Linux Squeeze afin de mettre en place un cluster haute dispo avec équilibrage de charge.

Bonne lecture.

Localebuntu!

Chez Ubuntu GNU/Linux, on aime faire les choses différemment et je viens de passer 5 minutes à bêtement ajouter le support de la locale ISO-8859-15 car visiblement ils ne souhaitent pas reprendre les bonnes idées de Debian comme le menu de dpkg-reconfigure locales. Donc voici la manip’ :

# grep fr_FR /usr/share/i18n/SUPPORTED |grep -i fr_FR |grep -iv utf-8  >>/var/lib/locales/supported.d/fr
# locale-gen

Des retours à la ligne propres dans ton émulateur de terminal?

Ben protèges bien ton PS1!

export PS1='[\t] \u@\[\e[1;31m\]\h\[\e[0m\]:\w $ '

À la tienne Etienne!

Un plugin Collectd/Exec pour la 8!

Pour la postérité de mes graphs collectd, je souhaitais avoir un graph CPU de mon serveur. Collectd prend en charge la liblmsensors2 correctement, mais très mal la version 3 packagée dans Debian. Par conséquent je me suis mis en tête de faire un petit script via le plugin Exec qui parsera la sortie de la commande sensors (le tout paramétré comme il faut avant).

En avant pour le script :

#!/bin/bash
INTERVAL=60
HOST="galadriel.morot.fr"
while true
do
        TEMP=`sensors |grep -i temp1 | awk ' { print $2; } ' | cut -c 2,3`
        echo "PUTVAL $HOST/exec-temperature/gauge-temperature interval=$INTERVAL N:$TEMP"
        sleep $INTERVAL
done

Le plus important dans tout ça, c’est le PUTVAL mais heureusement, la doc est notre amie. Donc en gros voila le format :

PUTVAL <nom du serveur>/<instance>/<type de données attendu> avec interval, le délai entre deux mises à jour.

Et donc il suffit de rajouter temperature value:GAUGE:-273.15:U au fichier /usr/lib/collectd/types.db

Y’a plus qu’à indiquer tout ça au fichier collectd.conf :

LoadPlugin exec
<Plugin exec>
        Exec "bin:bin" "/etc/collectd/cpu.sh"
</Plugin>

Si t’es un as du M-w / C-y ça donne ça :

Et voilà le travail! Vous pouvez maintenant retrouver la douce chaleur de la télévision.

On regarde quoi à la télé ce soir?

Depuis que la freeboite supporte l’UPNP j’utilisais un logiciel de media center sympa, le problème c’est que pour XBMC il faut X. Et c’est la que des petits gars biens ont sorti un logiciel nommé uShare qui permet d’exporter en upnp mes films depuis un partage NFS. Le mieux dans tout ça? C’est simple à utiliser et des paquets existent pour openwrt et dans les bonnes distributions.

À utiliser c’est simple comme un petit :

ushare -c /media/data/divx/ -i wlan0 -n zaphod

Script du jour, télécharger les pièces jointes d’une boite mail

Voila un petit script que j’ai codé pour dépanner quelqu’un qui s’est dit après deux ans que finalement il aurait dû enregistrer ses photos reçues par mail. Comme je le trouve assez intéressant pour le publier, le voici :

#!/usr/bin/env perl

use strict;

use Net::IMAP::Simple;
use MIME::Parser;

my $server = "serveur";
my $user = "user";
my $pass = "pass";

my $imap = new Net::IMAP::Simple( $server );
$imap->login($user, $pass);

my $nbmsg = $imap->select( 'INBOX' );

foreach my $msg ( 1..$nbmsg ) {
    my $lines = $imap->get( $msg );
    my $fh = $imap->getfh( $msg );
    my $parser = new MIME::Parser;
    $parser->output_under("/tmp");
    my $entity = $parser->parse($fh);
    close $fh;
}
$imap->quit();

Il reste plus qu’un petit find /tmp -name *.jpg -exec mv {} \; bien placé pour récupérer les fichier JPEG par exemple.

My laptop is rich !

Noël étant l’occasion de se faire plaisir je me suis acheté un nouvel ordinateur portable. Je cherchais un portable 13″, avec un lecteur optique, dont le processeur gérait la virtualisation et le tout pour moins de 650 €. Au final, le seul qui remplissait ces conditions était un HP 4310s avec le CPU T6670 chez avenueducommerce. Mais bon, il est bô! La première étape a été de supprimer le système d’exploitation nouvelle version 7 livré avec pour y coller une Debian. Pour résumer, à part le lecteur d’empreintes (dont j’attends toujours une réponse par mail du fabricant pour qu’il se bouge à libérer les spécs) tout marche !!!

Petit lspci d’abord :

00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)
00:1c.2 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 3 (rev 03)
00:1c.4 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 5 (rev 03)
00:1c.5 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 6 (rev 03)
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)
00:1f.0 ISA bridge: Intel Corporation ICH9M LPC Interface Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)
02:00.0 Network controller: Intel Corporation WiFi Link 1000 Series
85:00.0 Ethernet controller: Marvell Technology Group Ltd. Device 436c (rev 10)

Récapitulatif

Bluetooth

Composant Fonctionnement
CPU VT OK avec le module kvm-intel
Ethernet OK
Audio OK mais penser à ajouter au fichier /etc/modprobe.d/alsa-base.conf : options snd-hda-intel model=laptop
Vidéo OK : GLX et Kernel Mode Settings
Wifi OK avec un kernel > 2.6.30
Modem non testé
Lecteur de cartes SD OK
Lecteurs d’empreintes Non
OK
Webcam OK
Suspend to ram OK
Suspend to disk OK