Humus numericus

Aller au contenu | Aller au menu | Aller à la recherche

R, Spip et autres

Mot-clé - linux

Fil des billets

mercredi 15 février 2006

Utiliser le browser SWT sous Eclipse 3.1.1 avec Debian

J'utilise depuis peu une version recompilée pour testing du paquet unstable d'Eclipse 3.1.1. Tout fonctionne bien a priori, mais je viens de rencontrer une difficulté après l'installation des RDT (Ruby Development Tools) pour utiliser la vue ri : j'obtiens un message d'erreur me signalant un crash de SWT.

En fait, cette erreur est due à l'impossibilité pour Eclipse et SWT d'utiliser le widget Browser du fait d'une dépendance non-satisfaite, en l'occurrence il a besoin de la librairie libgtkembedmoz.so qu'il ne retrouve pas. Les instructions pour faire tourner tout ça sont dans la FAQ d'Eclipse, mais en fait sous Debian le problème vient du fait que SWT cherche la librairie manquante sous Firefox alors qu'elle n'est présente que sous Mozilla. Et modifier la variable MOZILLA_FIVE_HOME, comme indiqué dans la faq, ne fontionne pas car celle-ci est initialisée dans le script de démarrage d'Eclipse.

La solution la plus simple est donc de modifier le script de démarrage en question, en l'occurrence le fichier /usr/bin/eclipse en transformant le passage suivant :

# Set path for the Mozilla SWT binding
if [ -d /usr/lib/firefox ]; then
    export MOZILLA_FIVE_HOME=/usr/lib/firefox
elif [ -d /usr/lib/mozilla-firefox ]; then
    export MOZILLA_FIVE_HOME=/usr/lib/mozilla-firefox
elif [ -d /usr/lib/mozilla ]; then
    export MOZILLA_FIVE_HOME=/usr/lib/mozilla
fi

en ceci :

# Set path for the Mozilla SWT binding
#if [ -d /usr/lib/firefox ]; then
#    export MOZILLA_FIVE_HOME=/usr/lib/firefox
#elif [ -d /usr/lib/mozilla-firefox ]; then
#    export MOZILLA_FIVE_HOME=/usr/lib/mozilla-firefox
if [ -d /usr/lib/mozilla ]; then
    export MOZILLA_FIVE_HOME=/usr/lib/mozilla
fi

Note : je viens de mettre à jour en version 3.1.2, et le problème est fixé dans le /usr/bin/eclipse de la distribution.

lundi 6 février 2006

Mettre en place un antivirus pour Linux à la maison

A priori, le fait d'utiliser un système Linux met déjà son utilisateur à l'abri de la plupart des virus circulant sur le réseau et qui ciblent des systèmes plus répandus et moins fiables (suivez mon regard). Mais cela ne dispense pas d'utiliser un antivirus, surtout quand il en existe de très bons libres et gratuits comme ClamAV.

Voici la méthode que j'utilise pour filtrer mes mails à la maison. Elle utilise un ptit script Perl trouvé sur le web, et n'est certainement pas adéquate pour un gros serveur gérant des dizaines de comptes mails. Elle suppose que vous ayiez déjà un MTA (type postfix ou exim) qui tourne sur votre machine.

La première chose à faire est d'installer clamav en tant que démon. Sous Debian, comme toujours, c'est très simple, en une commande on installe tout ça ainsi que le service de mise à jour automatique de la base de virus :

# apt-get install clamav-freshclam clamav-daemon

La seconde chose est de faire passer tous les mails à travers l'antivirus. Ceci se fait à l'aide de la commande clamdscan. La solution la plus simple que j'ai trouvée consiste en un petit script Perl nommé clamfilter.pl. Le seul inconvénient est qu'il n'utilise pas le démon, mais le client clamav qui lui lance un processus à chaque mail scanné et prend beaucoup plus de ressources système. Le script étant du domaine public (vive le libre !), j'ai donc modifié une dizaine de caractères pour lui faire utiliser clamdscan plutôt que clamscan. Le résultat est le suivant :

#!/usr/bin/perl -w
#
# ClamFilter 1.0
# by Matt Hahnfeld (http://www.everysoft.com/)
# Requires perl, clamscan, procmail, and this script.
#
# This script is public domain.
#

use strict;
use File::Temp 'tempfile';

&main();
exit 0;

sub main {
  # Set up a temporary file for the original message
  my ($tmpfh, $tmpfn) = tempfile( UNLINK => 1 );
  -w $tmpfn or die 'Could not open temp file!';

  # Pass 1: Write out the temporary file
  while (<STDIN>) {
    print $tmpfh $_;
  }
  seek($tmpfh, 0, 0);

  # Pass 2: Scan the message
  open CLAMSCAN, "/bin/cat $tmpfn | /usr/bin/clamdscan --stdout - 2>/dev/null |" or die 'Could not open clamscan!';
  my $clamstatus = qq|X-Virus-Found: yes
X-Virus-Status:
 
 Virus Scan Status:
 
|;
  while (<CLAMSCAN>) {
    $clamstatus .= ' ' . $_;
  }
  close CLAMSCAN;
  $clamstatus .= qq| 
 

|;

  # Pass 3: Print out the message
  my $bodyflag = 0;
  while (<$tmpfh>) {
    if (! $bodyflag and $_ eq "
") {
      if ($?) {
	print $clamstatus;
      }
      else {
	print "
";
      }
      $bodyflag = 1;
    }
    else {
      print;
    }
  }
}

L'installation de ce script est très simple : copiez le contenu dans un fichier /usr/local/bin/clamfilter.pl, rendez le exécutable avec un petit chmod +x clamfilter.pl et ajoutez la ligne suivante dans votre fichier .procmailrc :

:0fw
| /usr/local/bin/clamfilter.pl

Et voilà ! Normalement tous vos mails devraient être scannés avant leur distribution. S'ils contiennent un virus détecté, le script rajoute un flag X-virus-found: yes dans les en-têtes (pratique pour créer des filtres automatiques dans votre lecteur de mail préféré) et ajoute quelques lignes d'information au début du message.

Vous pouvez tester le bon fonctionnement de votre installation d'abord en vérifiant qu'un mail normal passe sans problème, et ensuite en testant avec le fichier de test d'antivirus eicar.

mardi 13 décembre 2005

MPD (Music Player Daemon)

Il existe de nombreux logiciels de lecture audio sous Linux, dont certains sont très avancés et zolis comme Amarok, par exemple. Mais il y en a un qui se distingue du lot, il s'agit de MPD, alias Music player daemon.

MPD n'est pas un lecteur audio à proprement parler. Il s'agit d'un démon qui fonctionne en tant que service sur votre machine. Vous lui indiquez le répertoire où vous stockez vos mp3 et autres ogg et il indexe tout ça ainsi que les tags inclus dans les fichiers. Ensuite, vous utilisez un client (il en existe plusieurs) qui va aller se connecter au serveur, récupérer la liste des morceaux disponibles, vous permettre de créer des listes de lecture, puis lancer la lecture des morceaux par MPD.

Ça peut sembler un peu tordu comme fonctionnement, mais en fait c'est particulièrement malin et ça a de nombreux avantages :

  • ça laisse le choix du client : les clients disponibles sont extrêmement variés. Ça va du client en ligne de commande à l'interface Web en passant par le client graphique en GTK. On a donc le choix, et ce qui est bien c'est qu'on peut en utiliser plusieurs différents si on le souhaite : les listes de morceaux et autres sont stockées par le serveur. On peut ainsi lancer la lecture d'un morceau en ligne de commande et l'arrêter avec le client pour KDE. Personnellement, ma préférence va pour ncmpc, un client texte en ncurses simple et pratique.
  • c'est léger : d'une part vous n'êtes pas obligé de lancer un serveur X pour écouter de la musique si vous utilisez un client texte. D'autre part, une fois la liste de lecture choisie et la lecture lancée, vous pouvez très bien fermer votre client, ça n'arrêtera pas la musique.
  • c'est robuste : si votre client plante, ou même si votre serveur X plante, pas de problème, votre démon continue à tourner et à jouer les morceaux indiqués. Un truc marrant, c'est que si vous arrêtez le système avec MPD en train de jouer quelque chose, celui-ci reprend automatiquement et exactement au même endroit lorsque vous rallumez votre machine !
  • ça fonctionne à distance : vous pouvez très bien utiliser un client texte ou graphique pour vous connecter à distance à un MPD tournant sur une autre machine.

Enfin, une bonne nouvelle n'arrivant jamais seule, il existe un client qui marche très bien et qui permet d'interfacer MPD à audioscrobbler (désormais last.fm) et qui envoie donc les informations sur les morceaux joués à leur serveur automatiquement. Ce client s'appelle mpdscribble, et il y a un paquet Debian qui va bien, comme d'hab.

mardi 2 août 2005

Avidemux

Ayé ! J'ai enfin trouvé le logiciel qu'il me fallait pour bidouiller un peu de vidéo sous mon Linux. Je ne parle pas de montage ou d'effets spéciaux de transition en fondu au noir, mais plutôt de compression, conversion, redimensionnement, rotation, etc. etc. Et en plus ce petit bijou fonctionne avec une interface graphique, ce qui est quand même bien pratique quand on n'a pas trop envie d'apprendre par coeur les options des lignes de commande de mplayer et de transcode.

Le logicel en question porte le doux nom d'Avidemux, et il permet l'import depuis de nombreux formats, l'édition de la vidéo avec suppression de passages, puis sa conversion via des tas de codecs dont les plus répandus, DivX4, Xvid, Ogg, Mp3, etc. etc. Et la conversion peut se faire via tout plein de filtres qui permettent le redimensionnement, la rotation (super pratique quand vous avez tourné votre vidéo avec l'appareil numérique à la verticale) et des tas de machins que je sais même pas ce que ça fait. Pour la conversion, vous pouvez le faire en deux passes, indiquer la taille désirée ou le bitrate, etc.

Bref, c'est super complet, pratique et facile d'installation. Pour les heureux debianeux qui ont installé les sources.list de Christian Marillat :

apt-get install avidemux

lundi 6 juin 2005

Sarge est sortie !

Ça y'est ! Après trois ans de travail de la part de centaines de bénévoles, la Debian Sarge est officiellement sortie aujourd'hui. C'est beau, tiens.

http://www.debian.org/News/2005/20050606

vendredi 13 mai 2005

Conversion en lot de fichiers WMA en fichiers OGG

Il m'arrive régulièrement de recevoir une série de fichiers audio au format WMA de Windows Media. Mplayer sait les lire, certes, mais quoi de mieux qu'un format audio libre et ouvert comme Ogg Vorbis pour assurer la pérennité de ses musiques préférées ?

Heureusement, grâce à mplayer toujours et à une astuce vue sur linuxfr, voici un petit script shell qui vous permet de convertir en lot tous les fichiers wma d'un répertoire en ogg. Notez que vous pouvez facilement l'utiliser pour effectuer une conversion en mp3, en utilisant lame plutôt que oggenc (mais le format mp3 n'est pas libre) :

#!/bin/sh

for WMA in `ls *.wma`; do
    OGG=`basename $WMA .wma`.ogg;
    TMP=${TMPDIR:-/tmp}/wma2ogg.$$
    mplayer -ao pcm:file=$TMP $WMA;
    trap "rm $TMP* 2>/dev/null" 0
    nice -n 15 oggenc -m 128 $TMP -o $OGG
done

Seul petit hic, ce script peut ne pas fonctionner si les noms de vos fichiers contiennent des espaces. Vous pouvez donc utiliser la commande suivante pour transformer tous les espaces des noms de fichiers de votre répertoire en underscores :

find . -type f -name "* *" -print0 | \
perl -n0e '$old = $_; s/ /_/g; rename $old, $_'

De même, ce script utilise les options de la dernière version de mplayer. Si vous rencontrez des problèmes, vous pouvez essayer la syntaxe suivante :

mplayer -ao pcm -aofile $TMP $WMA;

Editer ou monter une vidéo déjà existante sous Linux

Je suis très loins d'être un spécialiste, mais il existe plusieurs logiciels sous Linux qui permettent de faire du montage et autres éditions/modifications de vidéos. Les plus connus sont sans doute Kino et Cinelerra. Ces deux logiciels prennent en entrée des vidéos au format DV, ce qui est très bien lorsqu'on a une caméra numérique. Mais quand on n'en a pas et qu'on veut juste retoucher une vidéo déjà existante en MPEG4 ou autre ? Ben il faut convertir le fichier (avi, mpeg, etc.) au format DV. J'avais cherché un moyen pendant un moment sans succès, mais une solution a récemment été donnée suite à un journal de Ploum sur linuxfr.

Cette solution utilise mencoder et tient en une ligne :

 mencoder -vf scale=720:576 -ovc libdv -oac pcm input.avi -o output.avi

jeudi 12 mai 2005

Changer récursivement les permissions de répertoires

Il peut parfois être utile de changer d'un coup les permissions ou les propriétés d'un répertoire et de ses sous-répertoires, mais seulement des répertoires, pas des fichiers normaux.

Deux exemples pratiques :

  1. vous venez de transférer des fichiers depuis une parto windows, et ceux-ci ont tous la permission "éxecutable". Seulement, si vous faites un chmod -R -x *, vos répertoires vont perdre leur attribut exécutable et vous ne pourrez plus rentrer dedans. C'est gênant ;
  2. vous avez un répertoire (par exemple /var/www) que vous voulez partager entre plusieurs personnes d'un même groupe (par exemple le groupe web). L'idéal est de positionner le "sticky bit" de ce répertoire et de ses sous-répertoire pour le groupe, afin que tous les fichiers nouvellement créés appartiennent également à ce groupe. Là aussi, un chmod -R g+s * pose problème.

Voilà donc la solution à ces deux problèmes. Il suffit de se positionner dans le répertoire racine choisi et de faire un :

find . -type d | xargs chmod +x

ou, pour le deuxième problème :

find . -type d | xargs chmod g+s

Et voilou !

lundi 21 février 2005

I'm a debian guru..

Et ouais !

Vous en doutiez ? Ben fallait pas. Attention, accrochez-vous au fauteuil, ça va décoiffer.

Ça faisait un moment que j'avais des problèmes de son bizarre sur ma debian. Par exemple, en regardant un film, j'avais la musique et pas la voix. Bien décidé à ne pas me laisser arrêter par ce genre de bricole, je me suis lancé à fond dans la résolution du problème :

  • test sous Windows pour voir que ma carte fonctionnait bien
  • test sous différents programmes
  • exploration des différents réglages des différents programmes de mixage. Là, je repère les contrôles qui sont en cause. J'arrive à remettre un son correct, mais dès que je mets un nouveau son ça revient au départ.
  • tests multiples avec alsactl, alsamixer, gamix, désinstallation de aumix...
  • désinstallation et réinstallation complète des paquets Alsa
  • recompilation du noyau
  • récupération du dernier noyau avec les derniers patchs
  • nouvelle recompilation
  • nouveaux tests...
  • modification du code source d'un fichier du noyau un peu au pif
  • recompilation
  • toujours rien.

Et là, au bout de peut-être 5 heures cumulées de réflexion, l'illumination, l'éclair de génie qui m'a permis de régler le problème sans l'aide de personne malgré mes recherches nombreuses sur Internet :

J'avais branché mes enceintes sur la mauvaise sortie de ma carte son.

Putain mais quel con.

I'm a debian guru, vous dis-je.

Bon, ben me reste plus qu'à faire refonctionner mon accélération 3d, ma clé usb et mon graveur, et j'aurai un système à nouveau un peu utilisable.

Grrrr...

mardi 25 janvier 2005

Utiliser Jabber avec gaim ou emacs+erc+bitlbee derrière un firewall et/ou un proxy

Je viens d'installer ma machine sur le réseau de mon nouveau lieu de travail, et cela a été l'occasion de me repencher sur le sujet de "comment arriver à utiliser un client IM, en l'occurrence Jabber, à travers un firewall et un proxy http (pour discuter avec des collègues de travail sur des sujets strictement professionnels, cela va de soi).

Lorsqu'il n'y a qu'un firewall, c'est assez simple, car en général celui-ci autorise les connexions au port 80. Il suffit donc de se créer une adresse sur un serveur du type jabber80.com, qui tourne justement sur un port 80, et le tour est joué en utilisant Gaim.

Quand on a en plus un proxy http qui filtre les connexions, c'est un peu plus compliqué car les requêtes Jabber ne sont pas des requêtes http classiques. Le proxy risque donc de les bloquer, ce qui était mon cas. L'astuce réside alors à utiliser non pas le port 80, mais le port 443 (https), car les requêtes destinées à ce port ne sont pas filtrables par le proxy si celui-ci les accepte. Or, de nombreux serveurs Jabber tournent sur le port 443, dont toute la série des amessage (amessage.info...) et bien d'autres (jabberes.org, chrome.pl...). Là encore, avec Gaim, pas de problème, tout se paramètre lors de la création/modification du compte.

Jusque là, rien de très difficile et je ne fais que reprendre des infos présentes ici :

http://web.amessage.info/firewalled/

On va donc compliquer un peu : et si je veux utiliser non plus Gaim, mais un bon vieux emacs avec Erc, le tout sous Bitlbee (en fait, n'importe quel client IRC sous Bitlbee) ? A priori, suffit de faire pareil en commençant par indiquer les paramètres du proxy dans le fichier bitlbee.conf (le plus souvent dans /etc). Sauf qu'il n'est pas possible, en tous cas je n'ai pas trouvé l'option, de modifier le port par défaut pour la connexion aux serveurs Jabber dans les comptes sous Bitlbee. Gloups. Prenant mon courage à deux mains, j'ai donc décidé de tenter un gros hack bien sale et tout con mais qui a le mérite de marcher : modifier le port par défaut de connexion aux serveurs Jabber de 5222 et 5223 à 443 dans les sources de Bitlbee et recompiler la chose. Il va de soi que cette "astuce" au bulldozer ne pourra vous intéresser que si vous êtes sûr de ne vouloir vous connecter qu'à des ports 443 pour les serveurs Jabber de ce Bitlbee-là.

La manip sous Debian est assez simple. En premier lieu, il faut récupérer le paquet source avec un :

# apt-get source bitlbee

Il faut ensuite remplacer 5222 et 5223 par 443 dans les lignes suivantes du fichier protocols/jabber/jabber.c :

#define DEFAULT_PORT 5222
#define DEFAULT_PORT_SSL 5223

C'est fait ! Il n'y a plus qu'à reconstruire le package avec un petit dpkg-buildpackage, puis à l'installer avec un dpkg -i et le tour est joué.

Enfin, dernier intérêt, les connexions entre la machine faisant tourner Bitlbee et le serveur Jabber, si je ne me gourre, devraient être chiffrées. Ce qui n'est pas sans intérêt pour des conversations professionnelles hautement confidentielles...

Post-Scriptum : en fait non, je viens de vérifier pour le chiffrement des communications, et c'est à moitié vrai. Pour que ça marche sous Gaim, il faut cocher "forcer l'ancien SSL" dans la configuration du compte. Pour bitlbee, il faut modifier à nouveau le code source du fichier jabber.c, et plus précisément mettre "ssl=1" dans la portion de code suivante :

(...)
static void gjab_start(gjconn gjc)
{
   struct aim_user *user;
   int port = -1, ssl = 1;
(...)

mardi 9 novembre 2004

Encoder une vidéo en XviD ou DivX sous Linux

Ceux qui possèdent un appareil photo numérique avec fonction vidéo se sont sans doute déjà posé la question de savoir comment compresser les films de leur fille, de leur grand-mère ou de leur hamster pour les mettre sur leur page perso. Ça n'est pas mon cas (j'ai pas d'appareil), mais comme j'ai des copains sympas qui en font pour moi de temps en temps, je me suis posé la question quand même.

Bref, si vous êtes sous debian et que vous souhaitez utilisermencoder (l'encodeur de mplayer), la démarche est la suivante. Il faut déjà rajouter la source de paquets de Christian Marillat dans votre /etc/apt/sources.list à l'aide de la ligne suivante (si vous êtes en testing) :

deb ftp://ftp.nerim.net/debian-marillat/ testing main

Attention, certains paquets de ce dépôt ne sont pas libres, et peuvent donc "contaminer" votre debian. Vous voilà prévenu.

Ensuite, faites un :

# apt-get install mencoder-686 libavcodec2

Vous pouvez changer le 686 en 586 ou k6 et installer d'autres codecs si vous le souhaitez. Ensuite, la marche à suivre pour encoder est très bien expliquée là :

http://www.mplayerhq.hu/DOCS/HTML/fr/mencoder.html

En gros, pour encoder un fichier en MPEG4, ça se passe en deux fois :

$ mencoder fichier_in.avi -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o fichier_out.avi
$ mencoder fichier_in.avi -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o fichier_out.avi

Si vous voulez d'autres formats d'encodage, tout est expliqué là :

http://www.mplayerhq.hu/DOCS/HTML/fr/menc-feat-enc-libavcodec.html

Le nombre d'options pour l'encodage est faramineux. Je vous laisse vous reporter à la page de manuel de mencoder pour plus d'infos (et bon courage !) ...

jeudi 23 septembre 2004

Surveiller l'arrivée d'un mail

Voici une petite astuce vous permettant de jouer un son lors de l'arrivée d'un mail ayant certaines caractéristiques (auteur, mot-clé, etc.). Ceci nécessite cependant d'utiliser procmail pour le filtrage de vos courriers, donc a priori d'être sous Linux ou équivalent.

Voici les lignes à ajouter à votre .procmailrc :

:0 hwic
* ^From:.*kikvouvoulez
| cat > /dev/null; /usr/bin/play /usr/share/sounds/toto.wav

Vous pouvez consulter l'explication de la syntaxe en anglais.

Pour personnaliser, il faut que vous remplaciez la deuxième ligne par l'expression rationnelle que vous voulez surveiller, et modifier la troisième ligne pour indiquer l'utilitaire pour jouer le son et le fichier à jouer.

- page 2 de 3 -