Catégories
Developpement Open-source

Une petite introduction à GIT

Sous l’impulsion de la multiplication des projets open-source, la gestion en configuration de vos sources est devenue une brique essentielle dans le développement de logiciels informatiques. Nous allons dans ce billet parler de GIT (développé par Mr Linus Torvalds en personne) qui contrairement à CVS ou SVN se base sur une architecture décentralisée.

Architecture de notre tutoriel

Pour illustrer ce tutoriel, nous allons utiliser l’architecture suivante:

A: Dépôt GIT
B: Dépôt GIT (copie de A)
C: Dépôt SVN

Installation

On installe GIT:

# sudo aptitude install git-core git-svn

puis on le configure:

# git config –global user.name « Nicolas Hennion »
# git config –global user.email « contact_at_nicolargo_._com »

Création du dépot sur la machine A

Projet dont les sources sont stockées dans le répertoire ~/workspace/projet.

# cd  ~/workspace/projet
# ls -alF
total 92
-rw-r—– 1 nicolargo nicolargo  158 Jan 28 15:45 001-display-ogg-theora-file.sh
-rw-r—– 1 nicolargo nicolargo   89 Jan 28 15:49 002-display-webcam.sh
-rw-r—– 1 nicolargo nicolargo  242 Feb  2 17:02 003-display-webcam-320×200.sh
-rw-r—– 1 nicolargo nicolargo  153 Jan 28 16:55 004-display-effect-webcam.sh
-rw-r—– 1 nicolargo nicolargo  157 Jan 28 17:16 005-display-textoverlay-webcam.sh
-rw-r—– 1 nicolargo nicolargo   89 Feb  2 15:49 006-streaming-udp-client-theora.sh
-rw-r—– 1 nicolargo nicolargo  579 Feb  2 15:50 006-streaming-udp-server-theora.sh
-rw-r—– 1 nicolargo nicolargo  224 Jan 30 14:46 007-streaming-to-icecast.sh
-rw-r—– 1 nicolargo nicolargo  116 Feb  2 15:40 008-streaming-tcp-client-theora.sh
-rw-r—– 1 nicolargo nicolargo  266 Feb  2 15:45 008-streaming-tcp-server-theora.sh
-rw-r—– 1 nicolargo nicolargo 4192 Feb  3 11:56 009-streaming-rtp-client-theora.sh
-rw-r—– 1 nicolargo nicolargo  622 Feb  3 11:52 009-streaming-rtp-server-theora.sh
-rw-r—– 1 nicolargo nicolargo  194 Feb  3 12:26 010-VLC.sdp
-rw-r—– 1 nicolargo nicolargo  534 Feb  3 12:15 010-streaming-rtp-client-x264.sh
-rw-r—– 1 nicolargo nicolargo  706 Feb  3 12:35 010-streaming-rtp-server-x264.sh
-rw-r—– 1 nicolargo nicolargo 1072 Feb  3 15:16 011-streaming-rtp-client-x264-speex.sh
-rw-r—– 1 nicolargo nicolargo  883 Feb  3 14:57 011-streaming-rtp-server-x264-speex.sh
-rw-r—– 1 nicolargo nicolargo 1041 Feb  3 15:13 012-streaming-rtp-client-x264-pcma.sh
-rw-r—– 1 nicolargo nicolargo  880 Feb  3 15:11 012-streaming-rtp-server-x264-pcma.sh
-rw-r—– 1 nicolargo nicolargo 1720 Feb  2 16:21 GStreamer – RTP client-server.txt
-rw-r—– 1 nicolargo nicolargo 1020 Feb  3 15:31 client.sh
-rw-r—– 1 nicolargo nicolargo  883 Feb  3 15:28 server.sh

On initialise le dépôt GIT:

# git init
Initialized empty Git repository in .git/

Puis on ajoute l’ensemble des fichiers sources à ce dépôt GIT:

# git add *

On vérifie que la commande précédente à bien été prise en compte

# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use « git rm –cached <file>… » to unstage)
#
#    new file: 001-display-ogg-theora-file.sh
#    new file: 002-display-webcam.sh
#    new file: 003-display-webcam-320×200.sh
#    new file: 004-display-effect-webcam.sh
#    new file: 005-display-textoverlay-webcam.sh
#    new file: 006-streaming-udp-client-theora.sh
#    new file: 006-streaming-udp-server-theora.sh
#    new file: 007-streaming-to-icecast.sh
#    new file: 008-streaming-tcp-client-theora.sh
#    new file: 008-streaming-tcp-server-theora.sh
#    new file: 009-streaming-rtp-client-theora.sh
#    new file: 009-streaming-rtp-server-theora.sh
#    new file: 010-VLC.sdp
#    new file: 010-streaming-rtp-client-x264.sh
#    new file: 010-streaming-rtp-server-x264.sh
#    new file: 011-streaming-rtp-client-x264-speex.sh
#    new file: 011-streaming-rtp-server-x264-speex.sh
#    new file: 012-streaming-rtp-client-x264-pcma.sh
#    new file: 012-streaming-rtp-server-x264-pcma.sh
#    new file: GStreamer – RTP client-server.txt
#    new file: client.sh
#    new file: server.sh
#

Enfin on valide (commit) le dépôt:

# git commit -m « Premier commit »
Created initial commit 6a4ff29: Premier commit
 22 files changed, 183 insertions(+), 0 deletions(-)
 create mode 100644 001-display-ogg-theora-file.sh
 create mode 100644 002-display-webcam.sh
 create mode 100644 003-display-webcam-320×200.sh
 create mode 100644 004-display-effect-webcam.sh
 create mode 100644 005-display-textoverlay-webcam.sh
 create mode 100644 006-streaming-udp-client-theora.sh
 create mode 100644 006-streaming-udp-server-theora.sh
 create mode 100644 007-streaming-to-icecast.sh
 create mode 100644 008-streaming-tcp-client-theora.sh
 create mode 100644 008-streaming-tcp-server-theora.sh
 create mode 100644 009-streaming-rtp-client-theora.sh
 create mode 100644 009-streaming-rtp-server-theora.sh
 create mode 100644 010-VLC.sdp
 create mode 100644 010-streaming-rtp-client-x264.sh
 create mode 100644 010-streaming-rtp-server-x264.sh
 create mode 100644 011-streaming-rtp-client-x264-speex.sh
 create mode 100644 011-streaming-rtp-server-x264-speex.sh
 create mode 100644 012-streaming-rtp-client-x264-pcma.sh
 create mode 100644 012-streaming-rtp-server-x264-pcma.sh
 create mode 100644 GStreamer – RTP client-server.txt
 create mode 100644 client.sh
 create mode 100644 server.sh

Import du dépôt sur la machine B

Nous allons utiliser la commande GIT « clone » permettant de faire une copie locale (dépôt local de la machine B) de son dépôt distant (machine A). C’est sur cette copie que nous allons ensuite travailler. On peut noter que j’utilise le protocole SSH pour récupérer les sources de la machine A, mais il est également possible d’utiliser le protocole « git » ou « http ».

# git clone ssh://nicolargo@B/~/workspace/gstpipelinearea

Création d’une branche locale

Nous allons maintenant créer sur notre machine B une nouvelle version de nos sources (une branche). Pour voir la liste des branches on utilise la commande suivante:

# git branch
* master

Comme on peut le voir il existe une seule branche (master) dans notre dépôt. Nous allons en créer une nouvelle avec la commande suivante:

# git branch version-2.0 master

On vient de créer une nouvelle version de notre projet nommé version-2.0 à partir de la branche principale (master). Il est ainsi possible de travailler sur cette version-2.0 sans impacter la version principale.

# git branch
* master
  version-2.0

L’* à coté de master précise que pour l’instant toutes les actions GIT seront faites sur la branche master. Pour travailler sur la branche version-2.0, il faut sasir la commande:

# git checkout version-2.0
Switched to branch « version-2.0 »

On vérifie:

# git branch
  master
* version-2.0

Consolidation des branches

Si vous voulez fusionner (merge) la
version-2.0 à la branche principale (c’est à dire appliquer les
modifications faites dans la version-2.0 dans vos sources initiales),
il faut:

# git checkout master
# git merge version-2.0

Quelques manipulations de base de notre dépôt local

Nous allons voir quelques exemples de manipulations de nos sources, je vous conseille fortement la lecture de la documentation (RFM…)

Ajout d’un fichier source

Pour ajouter un nouveau fichier à notre dépôt local, on commence par créer le fichier en question:

# echo « Quelques exemples de pipelines GStreamer » >> README

Puis on l’ajoute et on met à jour notre dépôt local:

# git add README
# git commit -a -m « Ajout du fichier README »
Created commit 1072258: Ajout du fichier README
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 README

Modification d’un fichier source

On modifie le fichier source en question:

# echo « Merci d’ajouter une ligne de description par pipeline » >> README

On peut voir les différences entre notre dépôt actuel et le dépôt local en tapant la commande:

# git diff
diff –git a/README b/README
index 3040f44..a58b06d 100644
— a/README
+++ b/README
@@ -1 +1,2 @@
 Quelques exemples de pipelines GStreamer
+Merci d’ajouter une ligne de description par pipeline

Puis on valide nos modifications dans le dépôt local:

# git commit -a -m « Modification fichier README »
Created commit f3c0c49: Modification fichier README
 1 files changed, 1 insertions(+), 0 deletions(-)

En cas d’erreur il est possible de revenir facilement à une dernière version:

# git log
commit f3c0c49bfc181d9353d8536c49af55eb24a9318c
Author: Nicolas Hennion <contact@nicolargo.com>
Date:   Wed Jul 8 17:11:03 2009 +0200

    Modification fichier README

commit 1072258108f25865e1965deeff7e651e29fb8f75
Author: Labo <labo@linux-demo-laptop.(none)>
Date:   Wed Jul 8 16:56:56 2009 +0200

    Ajout du fichier README

commit 6a4ff298714032e8263f9425b50a86dcf8aa5888
Author: Nicolas Hennion <contact@nicolargo.com>
Date:   Wed Jul 8 16:43:30 2009 +0200

    Premier commit

Par exemple pour revenir à notre première version du fichier README:

# git revert 1072258108f25865e1965deeff7e651e29fb8f75

Suppression d’un fichier source

On supprime le/les fichiers sources en question:

# git rm client.sh
# git rm server.sh

Puis on valide:

# git commit -a -m « Supression des fichers de test »
Created commit dc78e6c: Supression des fichers de test
 2 files changed, 0 insertions(+), 32 deletions(-)
 delete mode 100644 client.sh
 delete mode 100644 server.sh

Mise à jour du dépôt distant (A)

Nous avons fait quelques manipulation sur notre dépôt local (machine B). Maintenant nous souhaitons proposer ces modifications au dépôt distant (machine A). Pour cela, nous allons dans un premier temps pousser les modifications de B vers A:

# git push
Counting objects: 9, done.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (8/8), 861 bytes, done.
Total 8 (delta 3), reused 0 (delta 0)
To ssh://nicolargo@B/~/workspace/gstpipelinearea
   6a4ff29..dc78e6c  master -> master

Par défaut, le push se fait sur la brance principale (master), pour spécifier le push d’une autre version, il faut la spécifier dans la ligne de commande (« git push version-2.0 » par exemple).

Si on fait a ce moment là un ls dans le répertoire du dépôt de la machine A, les modifications n’apparaissent pas (le fichier README est inexistant et les fichier client.sh et server.sh sont présents).

# ls -alF
-rw-r—– 1 nicolargo nicolargo  158 Jan 28 15:45 001-display-ogg-theora-file.sh
-rw-r—– 1 nicolargo nicolargo   89 Jan 28 15:49 002-display-webcam.sh
-rw-r—– 1 nicolargo nicolargo  242 Feb  2 17:02 003-display-webcam-320×200.sh
-rw-r—– 1 nicolargo nicolargo  153 Jan 28 16:55 004-display-effect-webcam.sh
-rw-r—– 1 nicolargo nicolargo  157 Jan 28 17:16 005-display-textoverlay-webcam.sh
-rw-r—– 1 nicolargo nicolargo   89 Feb  2 15:49 006-streaming-udp-client-theora.sh
-rw-r—– 1 nicolargo nicolargo  579 Feb  2 15:50 006-streaming-udp-server-theora.sh
-rw-r—– 1 nicolargo nicolargo  224 Jan 30 14:46 007-streaming-to-icecast.sh
-rw-r—– 1 nicolargo nicolargo  116 Feb  2 15:40 008-streaming-tcp-client-theora.sh
-rw-r—– 1 nicolargo nicolargo  266 Feb  2 15:45 008-streaming-tcp-server-theora.sh
-rw-r—– 1 nicolargo nicolargo 4192 Feb  3 11:56 009-streaming-rtp-client-theora.sh
-rw-r—– 1 nicolargo nicolargo  622 Feb  3 11:52 009-streaming-rtp-server-theora.sh
-rw-r—– 1 nicolargo nicolargo  194 Feb  3 12:26 010-VLC.sdp
-rw-r—– 1 nicolargo nicolargo  534 Feb  3 12:15 010-streaming-rtp-client-x264.sh
-rw-r—– 1 nicolargo nicolargo  706 Feb  3 12:35 010-streaming-rtp-server-x264.sh
-rw-r—– 1 nicolargo nicolargo 1072 Feb  3 15:16 011-streaming-rtp-client-x264-speex.sh
-rw-r—– 1 nicolargo nicolargo  883 Feb  3 14:57 011-streaming-rtp-server-x264-speex.sh
-rw-r—– 1 nicolargo nicolargo 1041 Feb  3 15:13 012-streaming-rtp-client-x264-pcma.sh
-rw-r—– 1 nicolargo nicolargo  880 Feb  3 15:11 012-streaming-rtp-server-x264-pcma.sh
-rw-r—– 1 nicolargo nicolargo 1720 Feb  2 16:21 GStreamer – RTP client-server.txt
-rw-r—– 1 nicolargo nicolargo 1020 Feb  3 15:31 client.sh
-rw-r—– 1 nicolargo nicolargo  883 Feb  3 15:28 server.sh

Pour consolider les sources sur la machine A, il faut utiliser la commande suivante:

# git reset –hard
HEAD is now at dc78e6c… Suppression des fichers de test

Et si mes sources viennent d’un serveur SVN ?

Pas de problème, GIT dispose d’un bundle permettant de récupérer et de committer vers un serveur SVN.

Pour récupérer les sources d’un serveur SVN C:

# git svn clone svn://nicolargo@C/svn/gstpipelinearea

On utilise les commandes classique pour gérer son dépôt GIT (voir les chapitres précédant).

Pour commiter les modifications sur le serveur SVN C:

# git svn rebase
# git svn dcommit

Pour les utilisateurs d’Eclipse

Vous pouvez suivre ce tuto pour configurer votre Eclipse pour utiliser un dépôts GIT.

Catégories
Developpement Open-source

Installation pas à pas d’Eclipse sous GNU/Linux

Je ne sais pas vous mais l’installation et la configuration d’Eclipse (l’environnement de développement libre par référence) en utilisant les « repos apt » d’Ubuntu est toujours un grand moment de solitude. Il n’y a qu’a voir le peu de clarté de la page de documentation sur Ubuntu-fr pour s’en rendre compte.

Nous allons donc essayé de détailler l’installation d’une version récente d’Eclipse (3.4.1 au moment de l’écriture de ce billet) sur une distibution Ubuntu 8.10.

Avant de commencer…

Eclipse est devenu avec le temps et le succès une boîte à outil comportant de nombreux modules permettant de le customiser en fonctions de vos besoins. Par exemple, un développeur Java n’aura pas forcement besoin des mêmes outils qu’un développeur C…

Eclipse propose donc des installateurs pre-packagés. Pour choisir celui qui vous convient le mieux, ce tableau pourra vous aider.

Il faut ensuite se rendre sur cette page et sélectionner le package/operating system adapté à vos besoins.

Dans la suite de ce billet, je prendrai comme package de référence: « Eclipse IDE for C/C++ Developers » (et oui je suis de la vieille école ;)) pour Linux/32 bits.

Installation d’Eclipse

On commence par télécharger le package dans le répertoire /usr/src (l’archive au format tar.gz fait environ 68 Mo pour cette version).

cd /opt

sudo tar zxvf /usr/src/eclipse-cpp-ganymede-SR1-linux-gtk.tar.gz

cd /opt/eclipse

sudo wget http://www.bearfruit.org/files/eclipse-icon-clean.svg

Il faut ensuite créer un nouveau lanceur dans le menu Applications de Gnome:

  • bouton droit sur le « menu Applications »
  • « Editer les menus »
  • menu « Programmation »
  • Click sur « + Nouvel élément »

Il ne reste plus qu’a lancer l’application via le menu « Applications/Programmation/Eclipse ».

Ajout de nouveaux plugins

Plugin SVN (Subeclipse)

Pour le versionning SVN est le remplacant de CVS. Il faut installer un plugin complémentaire pour qu’Elipse puisse aller chercher des sources sur un serveur SVN.

Pour installer le plugin SVN Subeclipse, j’ai suivi ce tutoriel.

Liste des plugins à installer sur ce screenshot:
Subeclipse

Plugin PHP (PDT)

J’ai parfois la faiblesse de coder en Perl/PHP, là aussi ces languages nécessitent l’installation de plugins (PDT pour PHP et EPIC pour Perl).

J’ai suivi ce tutoriel pour l’installation de PDT 2.0 et celui-ci pour EPIC.

Catégories
Developpement

Tutoriel CVS

CVS est un logiciel d’aide au développement de logiciel. Il permet le suivi en configuration et le travail en équipe sur un code source (quel que soit le langage utilisé). Nous allons dans ce post voir les différentes commandes de base pour utiliser cet outil.

On part sur l’hypothése ou l’on dispose d’un serveur CVS installé sur la machine cvs.nicolargo.com.

Les commandes qui suivent sont valables dans un environnement Unix (Linux, BSD, Mac) mais également à partir d’un logiciel comme Eclipse (qui permet la gestion de source via CVS).

Connection au serveur CVS

Il faut disposer d’un compte, nicolargo dans notre exemple (ou d’un accès anonymous sur le serveur):

# export CVSROOT= »:pserver:nicolargo@cvs.nicolargo.com:2401/var/cvs-root »
# cvs login
<saisir votre password ici>

Import d’un projet dans le serveur CVS

Une fois connecté au serveur, nous allons y importer un nouveau projet:

# cd <REPERTOIREDUPROJET>
# cvs import -m « Importation initial » <NOMDUPROJET> nicolargo start
# cd ..
# mv <REPERTOIREDUPROJET><REPERTOIREDUPROJET>.old

Export du projet vers un répertoire

C’est ici que vous aller exporter un projet de votre serveur CVS vers votre disque dûr:

# cvs checkout <NOMDUPROJET>
# cd <NOMDUPROJET>

PS: Vous pouvez également effectuer cette action sous Eclipse (File / Import / CVS / Project from CVS / Use existing repository location: :pserver:nicolargo@cvs.nicolargo.com:2401/var/cvs-root / Use an existing module / <NOMDUPROJET>).

Comme vous pouvez le voir en faisant un ls dans votre répertoire, un nouveau sous répertoire a été créé (CVS/). Ce dernier contient toutes les informations nécessaire pour la synchronisation entre votre machine et le serveur.

Mise à jour du projet

La commande suivante permet de mettre vérifier les fichiers locaux par rapport à ceux du serveur:

# cvs update

Appliquer les mises à jour sur votre serveur

Une fois les modifications effectués sur votre code, vous devez les valider et les intégrer à votre serveur grâce à la commande suivante:

# cvs commit -m « Commentaire de mise à jour »

Tagger vos source lors d’une évolution de version

Quand vos modifications sont effectués et « commiter », vous pouvez avoir besoin de signaler au serveur CVS que la version actuelle des fichiers forme la version X.Y de votre projet. On appelle cette opération le taggage:

# cvs tag R1_0

Attention: Le numero de version ne doit pas commencer par un chiffre et ne doit pas comporter de ‘.’.

Extraction des sources

Enfin, si vous souhaitez diffuser vos sources, il faut d’abord les extraires du serveur CVS:

# cvs export -r « TAG » <NOMDUPROJET>

Ou TAG est le numéro de version que vous souhaitez extraire. Cette commande extrait seulement les fichiers utiles (par exemple pas le repertoire CVS).

Et voili, vous pouvez consultez ce post dans le même sujet:
Création de package GNU

Catégories
Uncategorized

Eclipse avec PHP,Perl et C

Eclipse est devenu l’environnement de développement de référence pour les achitectures Java. Initialement créé par IBM, il a été offert à la communauté du libre (open source) qui l’a fait évolué vers un IDE multi language grâce à de nombreux plugins.
Dans ce post nous allons voir comment installer Eclipse (sous MacOS X, mais la procédure est la même sous Linux) avec les plugins suivant: C/C++, PHP et Perl.

La première chose à faire dest d’installer la derniere version d’Eclypse en se rendant sur le site Web à l’URL suivante: http://www.eclipse.org/downloads/
L’installation ne devrait pas poser de problème.
Ensuite, il faut lancer l’application, puis cliquer ensuite sur le menu Help / Software updates / Find and install.

Cliquer ensuite sur le bouton « New remote site » et saisir les informations suivantes:

Recommancer l’operation avec:

Selectionner ensuite les sites suivant, puis cliquer sur Finish:

Il faut alors selectionner les plugins C/C++, PHPEclipse et EPIC (Perl Eclipse) et finaliser l’installation.

Il ne reste plus qu’a importer vos projets existant ou bien de créer un nouveau projet pour profiter des nouvelles fonctions.

Bon codage !