Catégories
Gstreamer Image Open-source Systeme

GStreamer et le codec X.264

Souhaitant effectuer un streaming RTP à partir d’une Webcam, voici un billet sur l’optimisation des paramètres du codec libre X.264 (implémentation libre du codec H.264 ou MPEG-4 AVC – WIKI) dont l’équipe de VideoLAN est à l’origine. Pour tester ce codec et ensuite mettre en place le streaming, j’utiliserai le framework GStreamer.

Catégories
Gstreamer Open-source Systeme

Compiler GStreamer depuis les sources sous GNU/Linux

Edit: j’ai ajouté un script SHELL « qui fait tout pour vous » en fin de billet…

Voici une petite procédure pour compiler la dernière version du framework multimédia GStreamer tout en préservant la version installée depuis les dépôts officiels. La procédure a été validé sur une GNU/Linux Ubuntu 9.04 mais doit facilement être adaptable à d’autres distribution (pour une procèdure équivalente sous Mac OS X, vous pouvez lire ce billet).

GStreamer étant un framework, il se base sur de nombreuses librairies externes. Pour nous simplifier la tache, nous allons utiliser les dépôts pour l’installation de ces librairies:

sudo aptitude build-dep gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse bison flex git

Ensuite on récupère les dernières versions disponibles de GStreamer et de ses plugins:

mkdir ~/src
cd ~/src
wget http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.25.tar.gz
wget http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.25.tar.gz
wget http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-0.10.17.tar.gz
wget http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-0.10.17.tar.gz
wget http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.13.tar.gz
wget http://gstreamer.freedesktop.org/src/gst-ffmpeg/gst-ffmpeg-0.10.8.tar.gz

On commence par la compilation de GStreamer (core). L’installation se fera dans le répertoire /opt/gstreamer/gstreamer-0.10.24:

tar zxvf gstreamer-0.10.25.tar.gz
cd gstreamer-0.10.25
./configure –prefix=/opt/gstreamer/gstreamer-0.10.25
make
sudo make install
cd ..

… puis les plugins « base »:

tar zxvf gst-plugins-base-0.10.25.tar.gz
cd gst-plugins-base-0.10.25
PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-0.10.25/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure –prefix=/opt/gstreamer/gstreamer-0.10.25
make
sudo make install
cd ..

… puis les plugins « good »:

tar zxvf gst-plugins-good-0.10.17.tar.gz
cd gst-plugins-good-0.10.17
PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-0.10.25/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure –prefix=/opt/gstreamer/gstreamer-0.10.25
make
sudo make install
cd ..

… puis les plugins « bad »:

tar zxvf gst-plugins-bad-0.10.17.tar.gz
cd gst-plugins-bad-0.10.17
PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-0.10.25/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure –prefix=/opt/gstreamer/gstreamer-0.10.25
make
sudo make install
cd ..

… les plugins « ugly »:

tar zxvf gst-plugins-ugly-0.10.13.tar.gz
cd gst-plugins-ugly-0.10.13
PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-0.10.25/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure –prefix=/opt/gstreamer/gstreamer-0.10.25
make
sudo make install
cd ..

… et enfin les plugins FFMPEG (streaming):

tar zxvf gst-ffmpeg-0.10.8.tar.gz
cd gst-ffmpeg-0.10.8
PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-0.10.25/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure –prefix=/opt/gstreamer/gstreamer-0.10.25
make
sudo make install
cd ..

Puis on créé un lien symbolique entre le répertoire /opt/gstreamer/current et /opt/gstreamer/gstreamer-0.10.25. Ce lien nous permet d’avoir plusieur version de GStreamer sur notre système.

sudo cp /opt/gstreamer/gstreamer-0.10.25/lib/gstreamer-0.10.25/* /opt/gstreamer/gstreamer-0.10.25/lib/

sudo ln -s /opt/gstreamer/gstreamer-0.10.25/lib /opt/gstreamer/current

On teste enfin l’installation:

/opt/gstreamer/gstreamer-0.10.25/bin/gst-inspect –gst-plugin-path=/opt/gstreamer/current

Pour les plus faineant, voici un script sheel automatisant ces quelques taches

[shell]
#!/bin/sh

# A simple script to get/compile/install GStreamer

# Nicolas Hennion – GPL

#

# Remarks: the version will be installed in the /opt/gstreamer folder

# Change this to the latest version

GST_CORE=0.10.25

GST_BASE=0.10.25

GST_GOOD=0.10.17

GST_BAD=0.10.17

GST_UGLY=0.10.13

GST_FFMPEG=0.10.8

# Do not edit under this line

sudo aptitude build-dep gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse

sudo aptitude install bison flex git

if [ ! -e gstreamer-$GST_CORE.tar.gz ]

then

wget http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-$GST_CORE.tar.gz

fi

if [ ! -e gst-plugins-base-$GST_BASE.tar.gz ]

then

wget http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-$GST_BASE.tar.gz

fi

if [ ! -e gst-plugins-good-$GST_GOOD.tar.gz ]

then

wget http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-$GST_GOOD.tar.gz

fi

if [ ! -e gst-plugins-bad-$GST_BAD.tar.gz ]

then

wget http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-$GST_BAD.tar.gz

fi

if [ ! -e gst-plugins-ugly-$GST_UGLY.tar.gz ]

then

wget http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-$GST_UGLY.tar.gz

fi

if [ ! -e gst-ffmpeg-$GST_FFMPEG.tar.gz ]

then

wget http://gstreamer.freedesktop.org/src/gst-ffmpeg/gst-ffmpeg-$GST_FFMPEG.tar.gz

fi

sudo mkdir /opt/gstreamer

if [ ! -e gstreamer-$GST_CORE ]

then

tar zxvf gstreamer-$GST_CORE.tar.gz

cd gstreamer-$GST_CORE

./configure –prefix=/opt/gstreamer/gstreamer-$GST_CORE

make

sudo make install

cd ..

fi

if [ ! -e gst-plugins-base-$GST_BASE ]

then

tar zxvf gst-plugins-base-$GST_BASE.tar.gz

cd gst-plugins-base-$GST_BASE

PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-$GST_CORE/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure –prefix=/opt/gstreamer/gstreamer-$GST_CORE

make

sudo make install

cd ..

fi

if [ ! -e gst-plugins-good-$GST_GOOD ]

then

tar zxvf gst-plugins-good-$GST_GOOD.tar.gz

cd gst-plugins-good-$GST_GOOD

PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-$GST_CORE/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure –prefix=/opt/gstreamer/gstreamer-$GST_CORE

make

sudo make install

cd ..

fi

if [ ! -e gst-plugins-bad-$GST_BAD ]

then

tar zxvf gst-plugins-bad-$GST_BAD.tar.gz

cd gst-plugins-bad-$GST_BAD

PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-$GST_CORE/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure –prefix=/opt/gstreamer/gstreamer-$GST_CORE

make

sudo make install

cd ..

fi

if [ ! -e gst-plugins-ugly-$GST_UGLY ]

then

tar zxvf gst-plugins-ugly-$GST_UGLY.tar.gz

cd gst-plugins-ugly-$GST_UGLY

PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-$GST_CORE/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure –prefix=/opt/gstreamer/gstreamer-$GST_CORE

make

sudo make install

cd ..

fi

if [ ! -e gst-ffmpeg-$GST_FFMPEG ]

then

tar zxvf gst-ffmpeg-$GST_FFMPEG.tar.gz

cd gst-ffmpeg-$GST_FFMPEG

PKG_CONFIG_PATH=/opt/gstreamer/gstreamer-$GST_CORE/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig ./configure –prefix=/opt/gstreamer/gstreamer-$GST_CORE

make

sudo make install

cd ..

fi

sudo cp /opt/gstreamer/gstreamer-$GST_CORE/lib/gstreamer-$GST_CORE/* /opt/gstreamer/gstreamer-$GST_CORE/lib/

sudo ln -s /opt/gstreamer/gstreamer-$GST_CORE/lib /opt/gstreamer/current

/opt/gstreamer/gstreamer-$GST_CORE/bin/gst-inspect –gst-plugin-path=/opt/gstreamer/current

[/shell]

Catégories
Image Open-source

Changer automatiquement de fond d’ecran

Voici une petit logiciel bien pratique pour changer automatiquement de fond d’écran après une période configurable: Desktop Drapes.

On commence par l’installer (par exemple à partir des dépôts sous Ubuntu):

sudo apt-get install drapes

On lance ensuite l’application via le menu Système / Préférences / Desktop Drapes, un nouvel icône va s’afficher dans la barre de menu. Un clic droit dessus pour accéder aux préférences:

Et voilà le travail, un nouveau fond d’écran toutes les 2 heures…

Catégories
Web

Mes « marques ta-pages » de la semaine

Catégories
Gstreamer Open-source

Test du codec Speex dans Gstreamer

Speex (wiki / site officiel) est un codec audio libre (licence dérivée de BSD) dont les perfomances sont très intéressantes, surtout pour transporter un signal comme la voix humaine. Le but de ce billet est de tester ce codec dans le cadre d’une application de streaming audio.

Mise en place du test

Pour tester ce codec, j’utilise le framework GStreamer et deux scripts shell tournant sur deux machines différentes. Le script rtpserver.sh prend comme source le microphone par défaut de votre machine, encode le flux en Speex, puis le diffuse en RTP/UDP vers la seconde machine. Le script rtpclient.sh récupére le flux RTP/UDP venant de la première machine, le décode et le diffuse sur la sortie son par défaut.

Le script rtpserver.sh:

#!/bin/sh

SEND_TO_ADDR=192.168.29.111
SEND_TO_RTP_PORT=5003
SEND_TO_RTCP_PORT=5004
RECV_FROM_RTCP_PORT=5005

ENCODER=speexenc
PAYLOADER=rtpspeexpay

SPEEX_PARAMS= »quality=4 vad=true dtx=true »
SPEEX_CAPS= »audio/x-raw-int,rate=16000″

ENCODER_PARAMS=${SPEEX_PARAMS}
RTP_PARAMS= »latency=200″
AUDIO_CAPS=${SPEEX_CAPS}

gst-launch -v  gstrtpbin name=rtpbin ${RTP_PARAMS} \
alsasrc \
! queue ! audioresample ! ${AUDIO_CAPS} ! ${ENCODER} ${ENCODER_PARAMS} ! ${PAYLOADER} \
! rtpbin.send_rtp_sink_1 \
rtpbin.send_rtp_src_1 ! udpsink port=${SEND_TO_RTP_PORT} host=${SEND_TO_ADDR} \
rtpbin.send_rtcp_src_1 ! udpsink port=${SEND_TO_RTCP_PORT} host=${SEND_TO_ADDR} sync=false async=false \
udpsrc port=${RECV_FROM_RTCP_PORT} ! rtpbin.recv_rtcp_sink_1

Le script rtpclient.sh:

#!/bin/sh

SEND_TO_RTCP_PORT=5005
RECV_FROM_ADDR=192.168.29.146
RECV_FROM_RTP_PORT=5003
RECV_FROM_RTCP_PORT=5004
AUDIORATE=16000

gst-launch-0.10 -v gstrtpbin name=rtpbin latency=200 \
udpsrc caps= »application/x-rtp, media=(string)audio, clock-rate=(int)${AUDIORATE}, encoding-name=(string)SPEEX, encoding-params=(string)1, ssrc=(guint)419764010, payload=(int)110, clock-base=(guint)3478167082, seqnum-base=(guint)57894″ port=${RECV_FROM_RTP_PORT} \
! rtpbin.recv_rtp_sink_1 \
rtpbin. ! rtpspeexdepay ! decodebin ! alsasink \
udpsrc port=${RECV_FROM_RTCP_PORT} ! rtpbin.recv_rtcp_sink_1 \
rtpbin.send_rtcp_src_1 ! udpsink port=${SEND_TO_RTCP_PORT} host=${RECV_FROM_ADDR} sync=false async=false

Attention, il faut lancer le script rtpclient.sh avant le rtpserver.sh . Les variables suivantes sont modifiables dans les scripts:

Script rtpserver.sh:
SEND_TO_ADDR: Adresse IP du client
SEND_TO_RTP_PORT: Numéro de port sur lequel les paquets RTP seront envoyés
SEND_TO_RTCP_PORT: Numéro de port sur lequel les paquets RTCP seront envoyés
RECV_FROM_RTCP_PORT: Numéro de port sur lequel les paquets RTCP seront reçus
SPEEX_PARAMS: Paramètres du plugin d’encodage Speexenc
SPEEX_CAPS: Caps du flux audio (audio rate)

Script rtpclient.sh:
SEND_TO_RTCP_PORT: Numéro de port sur lequel les paquets RTCP seront envoyés
RECV_FROM_ADDR:  Adresse IP du serveur
RECV_FROM_RTP_PORT: Numéro de port sur lequel les paquets RTP seront reçus
RECV_FROM_RTCP_PORT: Numéro de port sur lequel les paquets RTCP seront reçus
AUDIORATE: Audio rate, mettre la même valeur que celle dans le caps du serveur

Résultats des tests

Le premier test a été effectué avec un audio rate de 44000 (bref un taux d’échantillonnage proche de celui d’un CD audio).

Paramètres:
rate=44000 / vad=false / dtx=false
Tests:
En jouant sur l’option quality, on obtient
quality=10 -> bande passante de 80 Kbps
quality=8 -> bande passante de 60 Kbps
quality=6 -> bande passante de 50 Kbps
quality=4 -> bande passante de 40 Kbps
quality=3 -> bande passante de 36 Kbps
quality=2 -> bande passante de 35 Kbps
Conclusion:
On obtient une dégradation de la qualité de réception de la voix en dessous d’une valeur de quality de 4. Il est clairement dit dans la documentation que la qualité > 4 son a réserver pour les sources audio plus complexes que la voix humaine (musique, film…). Par contre la consommation de CPU est plus importante (rapport de 5 contre 1 entre quality=10 et quality=1).
La bande passante est constante (à quelques Kbps) que l’on parle ou que l’on ne parle pas.

Paramètres:
En jouant sur les paramètres vad et dtx, on va essayer d’optimiser la bande passante en gardant la même qualité.
VAD (dixit Wiki): « Quand cette option est activé, le VAD détecte quand l’audio encodé est du dialogue ou du silence/bruit de fond. VAD est toujours implicitement activé en encodage VBR, donc cette option est utile uniquement en mode non VBR. Dans ce cas Speex détecte les périodes sans dialogue et les encode avec le strict minimum de bits pour reproduire le bruit de fond. Cette fonction est appelée Comfort Noise Generation (CNG). »
DTX (dixit Wiki): « la transmission discontinue est une fonctionnalité qui s’ajoute aux
opérations de VAD et de VBR, qui permet de couper la transmission
complètement quand le bruit de fond est stationnaire. Dans un fichier,
5 bits sont utilisés pour chaque frame manquante (correspondant à 250 bits/s) »

Tests:
On ajoute les paramètres vad=true et dtx=true au niveau du serveur (SPEEX_PARAMS)
La bande passante reste la même (40 Kbps) quand on parle, par contre elle passe à 23 Kbps quand on ne parle pas.
Conclusion:
Les algorithmes VAD et DTX fonctionnent très bien. Ils permettent de gagner de la bande passante quand l’activité au niveau sonore est faible (ce qui est le cas dans une conversation ou, normalement, une seule personne parle à un instant t).

En conservant les paramètres du premier test (quality=4, vad=true, dtx=true), on change seulement l’audio rate (au niveau du serveur et du client).

Paramètres:
rate=16000
Tests:
Bande passante de 28 Kbps lorsque l’on parle, 17 Kbps pendant les silences.
Conclusion:
La qualité reste excellente. Sur une conversation (voix humaine), on ne voit pas la différence avec un rate de 44000 (44 KHz).

Paramètres:
rate=8000
Tests:

Bande passante de 23 Kbps lorsque l’on parle, 16 Kbps pendant les silences.

Conclusion:
La qualité est dégradée mais la conversation reste compréhensible. On gagne seulement 5 Kbps par rapport au test précédant.

Pour conclure

D’après les tests effectués, le meilleur compromis bande passante qualité est:

  • audio rate = 16000 (16 Khz)
  • quality = 4
  • vad = true
  • dtx = true

Catégories
Image Musique Open-source

Mon système Home Cinema

Je réfléchi actuellement à la modification de mon installation « Home Cinema » pour préparer l’arrivée de mon prochain joujou: un téléviseur Samsung UE46B6000. Voici donc quelques pistes de réflexion que je souhaite partager avec vous…

Avant de commencer, voilà ce que j’attends de mon système:

  • regarder des DVD et des Blu-ray (en utilisant la PlayStation 3 comme lecteur)
  • regarder des fichiers vidéos stockés sur mon ordinateur GNU/Linux (sous Ubuntu 9.04)
  • regarder des fichiers vidéos stockés sur mon ordinateur portable Mac Book Pro (MBP)
  • regarder la TV (source FreeBox)
  • centraliser le son (PC, MBP, PS3, FreeBox) sur mon système 5.1

et le schéma correspondant:

Afin d’éviter les transferts de fichiers inutiles, j’ai mis en place sur mon PC GNU/Linux un serveur DLNA (Wiki). Ce dernier permet de distribuer sur un réseau des contenus audio et/ou vidéo en les ré-encodant, si nécessaire, dans un format approprié (fonction de transcodage, attention à la CPU !). La lecture et l’affichage se fait par un client DLNA (Playstation 3 ou certaines télévision récentes).

J’ai choisi d’utiliser ma PlayStation 3 comme client DLNA pour les raisons suivantes:

  • facilité d’accès aux vidéos par la manette (par exemple pour les enfants)
  • qualité de décodage de la vidéo et de l’audio (sortie HDMI / optique)
  • « relatif » silence lors de la lecture de fichiers HD

Le serveur DLNA se base sur le logiciel PS3 Media Server (licence libre GPL v2). Je l’ai choisi car il est à la fois disponible sur GNU/Linux et Mac OS X (et également sous Windows, mais bon…). Il tourne en continu sur mon PC GNU/Linux Ubuntu et permet de distribuer des contenus stockés sur mes disques dur internes et externes. Je peux également le lancer à la demande sur mon MBP si j’ai besoin de diffuser une vidéo stockée sur cette machine. Pour les transferts de fichiers (vidéo et audio) entre mon MBP et mon PC GNU/Linux, j’utilise le protocole FTP (serveur FTP installé sur mon PC GNU/Linux).

Le client DLNA de la Playstation 3  détecte automatiquement les serveurs DLNA du réseau (celui de mon PC et celui de mon MBP). J’ai préféré utiliser des liaisons réseaux filaires (Ethernet 100 Mbps) entre mes différents composant pour assurer un débit élevé et constant entre les serveurs et le client DLNA. Ainsi, quand je regarde une vidéo stockée sur mon MBP, je n’utilise pas le Wifi disponible mais je le connecte directement par un cable Ethernet à mon switch réseau.

Les composants sont tous connectés via des liaisons numériques à l’écran LCD:

  • HDMI 1.3 pour la Playstation 3
  • DVI vers HDMI pour le PC GNU/Linux
  • DVI vers HDMI pour le MBP

Seul ma Freebox (ancienne version) est connecté via une liaison analogique S-Video (mais bon comme je ne regarde pas la télévision, ce n’est pas un gros problème). Mon amplificateur audio/vidéo n’étant pas compatible avec les entrés numériques vidéo, je passe directement par le switch interne de la télévision (elle dispose de 4 entrées HDMI, 1 VGA, 1 péritel, 1 YUV et 1 composite).
 
Au niveau du son, j’utilise mon amplificateur audio/vidéo pour centraliser puis diffuser le son sur les enceintes 5.1:

  • optique pour la PS3
  • optique pour le PC GNU/Linux
  • analogique (jack) pour le MBP
  • analogique (RCA) pour la Freebox

Voilà pour cette rapide présentation. Si vous avez des remarques/conseils sur le sujet, je suis preneur.

Catégories
Open-source Systeme

Compilation de VLC 1.0 depuis les sources

La sortie de la version 1.0 de VLC Media Player approche à grands pas. Si vous pouvez pas attendre et que vous souhaitez tester cette nouvelle version (en cours de développement) avant tout le monde, je vous propose une méthode d’installation par compilation à partir des sources. J’ai effectué cette procédure depuis une GNU/Linux Ubuntu 9.04 fraichement installée.

Récupération des dernières sources

Nous allons utiliser l’outil Git pour récupérer les dernières versions des sources en utilisant la commande suivante:

git clone git://git.videolan.org/vlc.git –depth 1

On va se retrouver avec un répertoire vlc.

cd vlc

Installation des pré-requis

VLC se base sur un nombre important de logiciels open-source tiers (liste disponible ici). Il faut donc installer ces dépendances. Il existe heureusement un script permettant d’automatiser cette lourde tache:

cd extras/contrib
./bootstrap
make

Le script va automatiquement: télécharger, compiler et installer les dépendances manquantes. Autant dire que l’exécution de la commande make peut prendre un certain temps selon votre configuration…

Compilation

On lance la commande suivante pour préparer les fichiers Makefile:

./configure –enable-snapshot –enable-debug \
        –enable-dbus-control –enable-musicbrainz \
        –enable-shared-libvlc –enable-mozilla \
        –enable-lirc \
        –enable-shout –enable-taglib \
        –enable-v4l –enable-cddax \
        –enable-dvb –enable-vcdx \
        –enable-realrtsp –enable-xvmc \
        –enable-svg   –enable-dvdread \
        –enable-dc1394 –enable-dv \
        –enable-theora –enable-faad \
        –enable-twolame –enable-real \
        –enable-flac –enable-tremor \
        –with-ffmpeg-mp3lame –with-ffmpeg-faac \
        –enable-quicktime –enable-dirac \
        –enable-skins2 –enable-qt4 \
        –enable-ncurses \
        –enable-aa –enable-caca \
        –enable-esd –enable-portaudio \
        –enable-jack –enable-xosd \
        –enable-galaktos –enable-goom \
        –enable-ggi \
        –disable-cddax –disable-vcdx

Puis la compilation:

make

et enfin l’installation avec un petit coup de ballet:

sudo make install

Catégories
Web

Mes « marques ta-pages » de la semaine

Compiler le noyau Linux sur Debian et l’installer: Bon tuto pour compiler son propre kernel sous Debian
Iconfinder | Icon search made easy: Le site pour la recherche d’icones…
Le lancement de Firefox 3.5 est imminent: Firefox 3.5 arrive prochainement sur vos disques durs
Memo: Renforcer et optimiser FreeBSD, les bonnes pratiques | Anapivirtua’s Blog: Quelques astuces pour sécuriser (encore plus) son système FreeBSD
Panic – Coda – Purchase Coda Instantly: Coda, l’outil de développement Web sous Mac OS X en réduction de 50% ($49.50) pendant 3 mois.
Créer un dépot Ubuntu: Comment créer son propre repos Ubuntu…
Ninja – A Nagios GUI Project: La future interface d’administration de Nagios ?
Microsoft : une campagne contre Google: Après Apple, Microsoft tape sur Google. La violence est l’arme des faibles…
FreeWifi : les Freebox se transforment en hotspot: Free lance FreeWifi, le plus grand hotspot de France !
Document non trouvé – Taltan.blog.bkp: Rolland-Garros 2009 en live avec VLC !
Catégories
Open-source Systeme Web

Firefox 3.5 sous Ubuntu (dépôts)

Je ne sais pas vous mais à force de tester des navigateurs alternatifs (par exemple Chromium), je trouve Firefox 3.0 de plus en plus lourd à supporter. J’ai donc décidé de tester la dernière version disponible, c’est à dire Firefox 3.5 (daily update).

Le but de ce billet est de faire une installation propre de cette version du navigateur de Mozilla en passant par les dépôts Launchpad.

Configuration des dépôts Launchpad

On commence par éditer le fichier /etc/apt/sources.list en y ajoutant les lignes suivantes (exemple pour version Ubuntu 9.04 jaunty):

deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu jaunty main

Ensuite il faut lancer la mise à jour de la liste des dépôts:

sudo apt-get update

Si vous rencontrez l’erreur suivante:

W: GPG error: http://ppa.launchpad.net jaunty Release: Les signatures suivantes n’ont pas pu être vérifiées car la clé publique n’est pas disponible : NO_PUBKEY EF4186FE247510BE
W: Vous pouvez lancer « apt-get update » pour corriger ces problèmes.

il faut alors télécharger les clès puis relancer la mise à jour de la liste des dépôts.

Installation de Firefox 3.5

On peut maintent passer à l’installation de la dernière version disponible (version stable au moment de l’écriture de ce billet):

sudo aptitude install firefox-3.5 firefox-3.5-gnome-support

Si tout se passe comme prévu lors de l’installation, vous devriez avoir cette dernière version disponible dans le menu Applications / Internet.

Catégories
Developpement Open-source Planet-libre

Comment construire un .deb pour Ubuntu

Voici une procédure (assez longue) permettant de générer un .deb (format de package compatible avec l’OS Ubuntu) pouvant être mis sur un depot officiel. Ce billet s’inspire très fortement de ce forum.

Avant de commencer…

Il faut installer les pré-requis suivants:

sudo aptitude install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder

Ensuite on créé l’arborescence suivante dans votre répertoire racine:

cd ~
mkdir packages
cd packages

Création de notre premier package .deb

On doit dans un premier temps récupérer les sources du logiciel à packager (sjitter dans mon exemple):

wget http://fastbull.dl.sourceforge.net/sourceforge/sjitter/sjitter-0.18.1b.tgz
tar zxvf sjitter-0.18.1b.tgz

Le nom du répertoire contenant les sources doit être de la forme nom-version:

mv sjitter sjitter-0.18.1b

On créé un sous répertoire sjitter dans lequel on met l’archive et les sources:

mkdir sjitter
mv sjitter-0.18.1b sjitter-0.18.1b.tgz sjitter

Pour vérifier, le contenu du répertoire de travail doit être le suivant:

# ls -l ~/packages/sjitter
sjitter-0.18.1b
sjitter-0.18.1b.tgz

On va dans le répertoire source:

cd sjitter/sjitter-0.18.1b

Puis on lance la commande:

dh_make -e nicolas@nospam.com -c GPL -f ../sjitter-0.18.1b.tgz
> s
Maintainer name : unknown
Email-Address   : nicolas@nospam.com
Date            : Wed, 27 May 2009 11:52:00 +0000
Package Name    : sjitter
Version         : 0.18.1b
License         : blank
Type of Package : Single
> ENTER

A la première question, il faut répondre:

s = [single binary] – si c’est package normal
l = [library] – si c’est une librairie de dev
m
= [multiple] – si c’est un package comprenant plusieurs binaires
k
= [kernel module] – si c’est module noyau

On va alors dans le sous répertoire debian créé par le programme dh_make:

cd debian

Puis on édite le fichier control:

# vi control
Source: sjitter
Section: net
Priority: extra
Maintainer: Nicolas Hennion <nicolas@nospam.com>
Build-Depends: debhelper (>= 5), autotools-dev
Standards-Version: 3.7.2

Package: sjitter
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Sjitter is a client/server performing tool.
Sjitter is a command line client/server to measure jitter (based on RFC 1889), one way UDP delay and bandwidth. The client and the server’s date should be synchronise to compute the jitter. You can use the NTP protocol to do this.

Avec:
Ligne 1: Nom du projet
Ligne 2: Section à laquelle appartient le projet (voir la des sections disponible ici)
Ligne 3: Laisse la valeur par défaut
Ligne 4: Nom et adresse mail du mainteneur du package
Ligne 5: Il faut y mettre les dépendances finissants par -dev
Ligne 6: Laisse la valeur par défaut
Ligne 7: Vide
Ligne 8: Mettre la même chose qu’en ligne 1
Ligne 9: Architecture cible (any pour toutes)
Ligne 10: Il faut y mettre les dépendances ne finissants pas par -dev
Ligne 11: Description courte du projet (< à 60 caractères)
Ligne 12->n: Description longue (attention à laisser un espace avant votre description)

Puis le fichier changelog:

# vi changelog
sjitter (0.18.1b) maverick; urgency=low

* Version 0.18 (23/03/2009), thanks to Thierry Legras

— Nicolas Hennion <nicolas@nospam.com>  Wed, 27 May 2009 11:52:00 +0000

Avec:
Ligne 1: Nom du package et version d’Ubuntu (maverick dans mon exemple)
Ligne 2: Vide
Ligne 3->n: Liste des changements de cette version
Ligne n+1: Vide
Ligne n+2: Nom, adresse mail et date (attention, il faut mettre votre nom / adresse comme configuré dans Launchpad)

Le fichier copyright:

# vi copyright
This package was debianized by Nicolas Hennion <nicolas@nicolargo.com> on
Wed, 27 May 2009 11:52:00 +0000.

It was downloaded from http://fastbull.dl.sourceforge.net/sourceforge/sjitter/sjitter-0.18.1b.tgz

Upstream Author(s): Nicolas Hennion <nicolas@nicolargo.com>

License: This script is written under the GNU General Public License.

Avec:
Ligne 1: Nom et adresse de l’auteur du package
Ligne 2: Date
Ligne 3: Vide
Ligne 4: A partir de quel source le package a été généré
Ligne 5: Vide
Ligne 6->n: Les auteurs du logiciel (copie du fichier ../AUTHORS)
Ligne n+1: Vide
Ligne n+2->m: Licence sous laquelle le logiciel est distribué (conformément à la volonté de l’auteur)
Ligne m+1: Vide (optionnel)
Ligne m+2: Licence complète (optionnel)


Il y a ensuite certains fichiers optionnels à configurer. Si ils ne sont pas utiles pour votre logiciel, il faut les supprimer.

README.debian: Informations complémentaires sur le logiciel (non présentes dans les autres fichiers)
emacsen-*.ex: Fichier Emacs pouvant être compilé à l’installation
init.d.ex: Si votre logiciel doit se lancer en mode daemon, c’est dans ce fichier qu’il faut écrire le script init.d
manpage.1.ex, manpage.sgml.ex: Fichiers de man (aide)
preinst.ex: Script à lancer avant l’installation
postinst.ex: Script à lancer après l’installation
prerm.ex: Script à lancer avant la désinstallation
postrm.ex: Script à lancer après la désinstallation

On peut ensuite lancer la génération du fichier .deb

cd ..
debuild -S -k_CLES_

Il faut remplacer _CLES_ par votre clés Launchpad (liste des clés: gpg –list-keys).

Si tout se passe sans problème, vous devriez vous retrouver avec les fichiers suivant dans le répertoire ~/packages/sjitter/:

sjitter_0.18.1b-1.diff.gz: Changement entre .deb et les sources originales
sjitter_0.18.1b-1.dsc: Fichier permettant aux mainteneurs des repos de suivre ce package
sjitter_0.18.1b-1_source.changes: Le changelog (liste des changements)
sjitter_0.18.1b-1_source.deb: Le package au format .deb
sjitter_0.18.1b.orig.tar.gz: Les sources originales

Et voilà, vous venez de faire votre premier package Ubuntu, il ne reste plus qu’a le soumettre à la communauté.

Par exemple pour soumettre votre package sur Launchpad:

dput ppa:nicolashennion/ppa sjitter_0.18.1b-1_source.changes

Et hop…