Premiers pas Git : team workflow

November 24, 2009 on 1:39 pm | In Linux | No Comments

GIT est un logiciel de gestion de version, crée par Linus Torvalds, qui permet à plusieurs développeurs de travailler ensemble sur les mêmes projets, et de gérer toute l’évolution du code du projet (le workflow) voir même le déploiement et la maintenance des applications.

L’utilisation de GIT peut être assez déroutante au premier abord, notamment pour les habitués à SVN, mais on devient très vite accro à la gestion des branches de GIT , qui permet d’organiser correctement son propre code, celui d’une équipe et de suivre l’évolution du projet. GIT possède son propre vocabulaire, j’espère vous éclairer un peu avec ces premiers pas. Pour tous les détails, consultez les livres online : Pro Git et GIT community Book.

Quelques avantages de git :

  • Souplesse dans la gestion des branches
  • Décentralisé
  • Pas de serveur, un accès SSH suffit
  • Un seul dossier .git à la racine du projet
  • Le développeur peut créer ses propres branches locales
  • Espace disque et transferts réseau très limités
pro git example

A contrario de SVN, les branches sont stockées dans le même répertoire de travail, et vous switchez de l’une à l’autre grâce la commande ‘git checkout’. cette commande remplace/supprimer et déplace les fichiers à la demande. Pour pouvoir changer de branche, tous les changements doivent être commités.

Dans un cas classique, plusieurs développeurs vont travailler sur le même projet, chacun sur sa branche, et l’un d’eux (le ‘dictator’) sera chargé de réintégrer toutes les modifs dans le ‘master’ (via des ‘merge’). Une fois ces modifs publiées, chaque développeur pourra alors les réintégrer dans son propre code. Ce workflow est un exemple de base, de nombreux cas plus évolués sont possibles.

Si vous avez besoin de centraliser votre repository, vous pouvez utiliser un simple serveur avec accès SSH pour vos users, ou GitHub.com qui offre des repos gratuits pour les projets open source et 12$/mois pour 5 repos privés si besoin. L’avantage de cette dernière solution est sa facilité de mise en oeuvre ainsi que l’accès à l’excellente interface web de GitHub qui permet de consulter le code, les commits, d’avoir des stats, un systeme de wiki, but tracker… De plus, GitHub propose une fonction de Click&Fork qui permet de forker nimporte quel projet en un clic. La mise à jour du code peut ensuite se faire dans les deux sens… ce qui est parfait pour le modèle open source.

Une fois l’installation de git effectuée, récupérez un projet :

pour un projet hébérgé sur un serveur SSH :

# git clone jul@revolunet.com:/var/git/KillerApp.git

pour un projet hébérgé sur GitHub :

# git clone git://github.com/julienb/KillerApp.git

Dans les deux cas,  cela crée un dossier KillerApp.git avec le projet et la branche ‘master’ uniquement.

# git branch
* master

Si vous voulez rappatrier d’autres branches du serveur distant (origin), il faut les ajouter manuellement ;

# git checkout –track -b juju origin/juju
# git checkout –track -b gary origin/gary

Ceci crée les branches locales, qui sont ‘linkées’ à leurs branches remotes respectives

On va passer dans la branche ‘juju’

# git checkout juju
# git branch
gary
* juju
master

l’étoile indique qu’on travaille dans la branche ‘juju’

Pour créer une nouvelle branche locale ‘newfeature’ depuis la branche actuelle et se déplacer dedans :

# git checkout -b newfeature
# Switched to a new branch “newfeature “

Attention, la branche est issue par defaut de la branche en cours, et pas du ‘master’

Pour changer de branche :

# git checkout juju
# git branch
gary
* juju
master
newfeature

Pour repasser dans la branche newfeature :

# git checkout newfeature

Une fois dans votre branche de dev, faites des git commit dès que nécessaire. Les fichiers modifies/ajoutes doivent etre ajoutés a l’index GIT via :

# git add fichier.py fichier2.py

ou, pour ajouter automatiquement tous les fichiers :

# git commit -a 

Il faut savoir que GIT est complètement décentralisé et que les branches locales/remote ne sont pas forcement synchronisées (’trackées’). Dans notre exemple, la branche ‘newfeature’ n’existe qu’en local et ne pourra pas etre ‘pushée’ sur le remote, sauf si on spécifie manuellement un lien vers un repo distant.

Une fois la ‘newfeature’ codée, le développeur doit la réintégrer dans sa branche;  il doit bien sur d’abord commit son code, puis faire un merge :

Il passe d’abord dans sa branche :

# git checkout juju

Puis merge le code de sa ‘newfeature’

# git merge newfeature

Maintenant, la branche juju contient le code de newfeature et il a été commit automatiquement (en local).

Envoi de notre nouveau code sur le repository distant

Envoyer sur la branche ‘juju’

# git checkout juju

Il peut envoyer son code sur le remote (cela pushera la branche juju vers la branche remote ‘juju’) :

# git push

Un responsable se chargera alors de merger la branche juju dans la branche master et de mettre a jour le master sur le repo central.

Envoyer sur la branche ‘master’ directement

Éventuellement, le développeur peut intégrer ses modifs directement dans la branche ‘master’ :

Il passe sur la branch master :

# git checkout master

Il récupère déjà le code du master actuel :

# git pull

Puis merge sa branche dedans :

# git merge juju

Puis envoi sur le remote :

# git push

Récupération de code sur le repository distant

Si le developpeur veut réintégrer dans sa branche les mises à jour de ses collègues :

# git checkout juju

récupérer toutes les branches distantes configurées :

# git fetch

merger le code du master dans la branch actuelle

# git merge origin/master

La branche ‘juju’ est alors mise à jour avec le nouveau code issu de ‘master’ (le trunk)

Quelques commandes utiles :

  • Lister les branches sur le repo distant :
# git branch -r
  • Créer une nouvelle branche ‘daniel’  locale, la créer aussi sur le remote, et la tracker : (double – before ‘track’)
# git push origin origin:refs/heads/daniel
# git fetch origin
# git checkout –track -b daniel origin/daniel

  • Sauvegarder en mémoire les modifs depuis le dernier checkout pour les réappliquer dans une autre branche. Attention, ‘git stash’ reset votre branch au dernier commit (HEAD) :
# git stash # enregistre vos modifs
# git checkout -b newfeature #crée une nouvelle branche
# git stash apply # re-apply les modifs dans la nouvelle branche ‘newfeature’
  • Créer un nouveau repository local vide : (double – before ‘bare’)
# mkdir /pub/my-repo.git
# cd /pub/my-repo.git
# git –bare init
  • Express local commit :
# git commit -a -m “killer feature ready”
  • Afficher un diff des modifications
# git diff –color
  • Afficher un logdes commits
# git log

Tips :

upgrade sécurité dedibox

February 15, 2008 on 7:54 pm | In General, Linux, actu informatique, hack | 4 Comments

Comme beaucoup d’admins qui se pensent contienteux, j’ai du, suite à la publication d’un exploit local assez impressionnant la semaine derniere, mettre à jour mes debian pour éviter toute prise de contrôle. Cette faille afffecte tous les kernels linux 2.6.17 à 2.6.24.1 soit un très très grand nombre de systemes. Il suffit à l’attaquant d’une petite faille PHP pour prendre le controle TOTAL de la machine.

Voici une procédure simplifiée que j’ai suivie sur une debian avec un kernel dedibox r5 :

* apt-get update && apt-get upgrade : mettre a jour les packages pour le nouveau noyau. Attention, cette étape peut vous forcer à passer à MySQL5 et PHP5

* installation du nouveau kernel : apt-get install linux-image-2.6.18-6-686

* reboot puis uname -r pour voir si tout va bien : Linux xx_xx 2.6.18-6-686

Si votre machine ne redemarre pas, essayez un reboot materiel via la console et au pire, bootez sur le system de secours pour modifier /boot/grub/menu.lst et remettre votre ancien noyau (parametre ‘default’).

Ce patch est indispensable sinon tot ou tard votre systeme sera compromis.

Pour ceux qui souhaiterait installer leur propre kernel et le patcher, suivez le tuto de drax sur son (excellent) blog : vmsplice-exploit-fix-and-patching-on-debian et pour les plus curieux, plus de détails techniques sur cette faille : http://www.isec.pl/vulnerabilities/isec-0026-vmsplice_to_kernel.txt

Getting SuExec and TRAC to play nice

February 12, 2008 on 1:31 am | In Linux, admin | 4 Comments
EnvironmentError: The environment options "TRAC_ENV" or "TRAC_ENV_PARENT_DIR"
or the mod_python options "TracEnv" or "TracEnvParentDir" are missing.

Yuck. What’s more, if you’re using SuExec (like I am) then your Apache directives are ignored.

Solution: Edit your trac.fcgi and prepend the following code.

# hack for SuExec
import os;
os.environ['TRAC_ENV_PARENT_DIR'] = '/var/lib/trac'

vmsplice exploit fix and patching on Debian

February 11, 2008 on 7:00 pm | In Linux, admin, exploitation, kernel, security | 8 Comments

Some vulnerabilities in the Linux kernel where publicly disclosed on the 8th of February 2008. These can be exploited by any user to gain elevated privileges. A “local root” exploit was published Sunday which allows an arbitrary user to escalate to root privileges.

Affected versions: >= 2.6.17
Fixed in version: 2.6.24.2
Continue reading vmsplice exploit fix and patching on Debian…

Encrypted filesystem on OS X, Linux and Windows

February 2, 2008 on 7:08 pm | In Linux, admin, osx | 3 Comments

truecrypt_windows.png
truecrypt_osx.png
truecrypt_linux.png
Finally we have a truly portable, open source, encrypted filesystem. I’ve tested a fair share of encrypted filesystem solutions. The most promising probably being encfs since it could be used with Fuse, but that only works on OS X and Linux at best.

TrueCrypt, probably the best solution available, was only working on Linux and Windows… up to now.
Continue reading Encrypted filesystem on OS X, Linux and Windows…

Test de l’eee PC ASUS

January 31, 2008 on 9:38 pm | In Fun, General, Linux, actu informatique, geek style | 6 Comments
ASUS EEE PC  Ca y est j’ai craqué, en faisant mes petites courses rue Montgallet, je suis tombé sur un magnifique eee PC noir mat et je n’ai pu resister a la folle envie de tester ce petit (mais costaud) concentré de technologies.       

Au premier abord l’eee pc est vraiment petit, normal me direz vous avec écran 7 pouces, 4Go de SSD, 900 grammes et 319€TTC. La webcam intégrée (et oui!) est de piètre qualité mais ca suffit pour de la visioconférence et des petites photos.

Au second abord, il est petit aussi, et c’est pour cela qu’on l’achete ;)  La taille de l’écran, la resolution et les performances, ce n’est pas une machine pour coder ni pour travailler mais un petit pc de depannage pour surfer, se connecter à des shells, lire des videos et du son, communiquer… C’est deja pas mal.

 Le clavier, très petit, voir trop petit, demande un temps d’adaptation et le touchpad est très enervant car trop petit aussi. Il va falloir mettre une souris externe… peut etre celle ci !! En tous cas la batterie annonce 2h30 d’autonomie a plein régime ce qui est déjà respectable vu la taille de la batterie. 

La bête demarre en 30 secondes sur une distribution Xandros de ASUS, qui ressemble à première vue l’ordissimo de ma grand-mere; parfait pour les débutants mais si vous êtes geek, vous avez envie de configurer un vrai bureau avec vos petits widgets et tout ce qu’il faut.

J’ai donc d’abord tenté d’installer eeeXubuntu en suivant le tuto sur : http://wiki.eeeuser.com/ubuntu:eeexubuntu:home - malheureusement – il semblerait que la version de mes cartes WiFi et Internet ne soient pas intégrés dans cette version (7.10 r3) donc par manque de temps, de posts sur ce sujet, et de motiver a m’acharner sur ce minuscule clavier dépourvu de réseau, je suis finalement repassé sur Xandros, qui apres un peu de configuration ressemble beaucoup a une Ubuntu d’autant plus que c’est aussi basé sur Debian… Et la bien sur tout fonctionne bien dès le début…

Pour installer des programmes supplémentaire, ajoutez des dépots dans Synaptic depuis cette liste : http://wiki.eeeuser.com/addingxandrosrepos?s=repositories

L’EEE est un super portable d’appoint, sous linux, très accessible aux débutants, et disponible a moins de 300€ . Vu le succès apparemment rencontré par le produit (déjà en rupture de stocks dans plusieurs magasins), cela va permettre en tous cas de démocratiser Linux un peu plus et sensibiliser le public au logiciel libre.

NB : Vous pouvez acheter des cartes mémoires SDHC 4Go a moins de 20€ sur internet pour augmenter votre capacité de stockage.

Hosting multiple SSL vhosts on a single IP/Port/Certificate with Apache2

January 24, 2008 on 2:07 pm | In Linux, admin, osx | 32 Comments

But that’s impossible!!

HTTPS is just HTTP encapsulated inside an SSL tunnel. Apache’s virtual hosts are a clever “hack” whereby the Host header in the HTTP packet is verified. This alllows a single apache instance on a single IP/Port combination to serve a (not so) infinite number of differentes sites (aka vhosts).

Problem: The SSL tunnel is created before the first HTTP packet gets sent. Apache needs an SSL certificate but doesn’t have a Host header to match, hence cannot choose a virtual host.

Solution

This trick essentially does the matching of the Host header after the SSL connection has been established. How? Via some mod_rewrite magic!

Caveats

Although I said so, it’s not really that magical. There are a few things this trick does not solve.

  • The SSL certificate used will be common to all SSL vhosts.
  • Certain Apache directives may be common to all SSL vhosts (example: SuExecUserGroup). Basically anything you can’t override in a .htaccess file will be shared amongst vhosts.

Continue reading Hosting multiple SSL vhosts on a single IP/Port/Certificate with Apache2…

migration mod_python

April 29, 2006 on 3:00 pm | In General, Linux, Python, admin | 8 Comments

mod_python est un module pour le serveur Apache qui permet d’utiliser directement du Python pour créer ses applis web. Cela apporte de nombreux avantages : la code est portable (relativement), le propotypage rapide, et on peut avoir accès à tout bibliothèque Python. Les inconvenients sont la sécurité : il faut veiller à bien encadrer son application.

J’ai décidé de migrer une de mes applis de Python/IIS vers mod_python/Apache2. C’est une appli encore assez simple, toujours en beta mais qui utilise toutes les fonctionnalités d’un serveur web : Environnement, Session, Cookies… De plus, je voulais n’utiliser que la librairie standard de mod_python; pas de modules complémentaires ni de frameworks web. A priori, tout cela est géré par mod_python (à partir de la v.3.1.3) donc : c’est parti !

La doc de mod_python etant assez limitée, je vais faire un petit résumé de ce que j’ai trouvé…

Déjà , il y a plusieurs facons d’utiliser mod_python : le mode standard, le mode Publisher, le mode PSP, ou encore le mode CGI.

ces 4 possibilités ont un impact au niveau des performances : cf comparatif perfs modpython. Et la facon de coder ne sera pas la même.

Le mode PSP permet de faire des pages .psp du style de pages PHP, avec le HTML et le code Python mixés. Pour des raisons de séparation du code et de la présentation, ce n’est pas l’idéal.

Le mode Publisher permet lui de faire quelque chose de plus pythonesque; on part d’un module python ou des fonctions répondront aux appels d’Apache, et on utilisera si besoin un système de templates HTML (classe PSP). Ce mode facilite aussi la vie du programmeur en automatisant certaines tâches (codes de retours Apache…)

J’ai opté pour la solution publisher car c’est la plus “Python Style”, la plus puissante en termes d’évolutivité, et elle est assez performante pour ce dont j’ai besoin.

Déjà , config dans Apache (je ne suis pas encore un pro de Apache) :


ServerName dev.monappli.fr
ServerAdmin contact@revolunet.com
DocumentRoot /var/www/monappli

Options FollowSymLinks
AllowOverride All
Allow from all
AddHandler mod_python .py
PythonHandler mod_python.publisher # J’utilise publisher comme handler
PythonDebug On

Exemple de .htaccess : on peut définir des variables auxquelles mod_python aura accès :

AddDefaultCharset cd1252
DirectoryIndex main.py
ErrorDocument 500 error.py
ErrorDocument 404 error.py
ExpiresDefault A1

# Options Python
PythonAutoReload On
# ici on ajoute un dossier au sys.path pour nos libs persos
PythonPath “['/var/www/monappli/lib/']+sys.path”
PythonOption SMTP smtp.free.fr
PythonOption DB_HOST 127.0.0.1
PythonOption DB_NAME monappli
PythonOption DB_USER monappli
PythonOption DB_PASS monappli
PythonOption ROOT_PATH /var/www/monappli/
PythonOption LANG fr

Exemples de page en Python :
Chaque fonction appellée par un navigateur se voit passer un argument ‘request’ (ici appellé req) qui permet d’accéder aux classes Request, Response, Session, Cookies…

# main.py :

# import d’un module
import time
# import d’un module dans notre lib (définie dans le .htaccess)
import malibrairie

# fonction appellée quand appel direct à  monappli.fr (page par defaut)
def index(req):
req.content_type = “text/html; charset=windows-1252″
return “Bienvenue sur monappli.fr !”

# fonction appellée quand appel à  monappli.fr/page1
def page1(req):
req.content_type = “text/html; charset=windows-1252″
return “Bienvenue sur la page 1 !”

#fonction privée, qu’on ne peut pas appeller depuis apache
def _private(req):
return (2*2)

Je post d’autres exemples très bientôt, stay tuned ;)

A venir : Gestion session, cookie…

Mot de passe root accessible sous Ubuntu

March 13, 2006 on 11:04 am | In General, Linux, actu informatique | No Comments

Il semblerait que les developpeurs d’Ubuntu 5.10 aient commis une (grosse) boulette en ne supprimant pas le log de l’installation. Celui-ci, accessible en lecture par n’importe qui sur la machine, contient en clair le mot de passe root!

Le probleme est apparemment aussi présent sur Kubuntu!

Alors effacer ce fichier de log ou upgradez votre version, car le bug a été corrigé dans les mises à jour.

https://launchpad.net/distros/ubuntu/+source/shadow/+bug/34606

script pour tester la vulérabilité de votre système : http://www.ubuntuforums.org/showpost.php?p=818304&postcount=74

vulnérabilité dévcouverte par un noob ;)

Comprendre le fonctionnement du son sous Debian

January 30, 2006 on 6:18 pm | In General, Linux, admin | No Comments

Voici un petit article, clair et concis, qui résume simplement le fonctionnement du son sous Linux et plus particulièrement sous Ubuntu (Debian).

On y apprend comment installer et configurer le son si l’installation ne l’a pas pris en compte…

Bien utile, surtout pour les configs exotiques.

http://ploum.frimouvy.org/?2005/11/27/81-le-son-sous-ubuntu-breezy

Hacks via SSH

November 18, 2005 on 5:06 pm | In General, Linux, hack | No Comments

On tente de me hacker via SSH en Brute Force…

voici les ips concernées :

  • 82.187.83.114
  • 82.165.40.31
  • 193.131.116.200
  • 69.46.25.34
  • 61.97.32.29

C’est peut etre du virus ou du newbie mais sait-on jamais….

j’ai trouvé ces infos dans mon /var/log/auth.log et c’est seulement sur 4 jours….

Argh !! dommage qu’internet soit pollué par tant de malfaiteurs….

Mémo SCP

November 18, 2005 on 4:45 pm | In General, Linux | No Comments

SCP (Ssh CoPy) permet de transferer des fichiers entre des machines UNIX via le protocole sécurisé SSH. Cela permet de transferer des fichiers et repertoires très rapidement et en toute sécurité

  • Transferer Fichier.txt vers /home/juju/Fichier.txt sur machine.example.org :
    scp Fichier.txt juju@machine.example.org:
  • Récupérer Fichier.txt situé sur /home/juju sur la machine machine.example.org et le mettre dans le repertoire en cours:
    scp juju@machine.example.org:Fichier.txt
  • Récupérer tous les .txt dans le répertoire /usr/local de machine.example.org et les mettre dans /test-scp :
    scp toto@machine.example.org:/usr/local/*.txt /test-scp
  • Transférer tout le repertoire /test-scp (en recursif) vers machine.example.org dans le repertoire /incoming :
    scp -r /test-scp toto@machine.example.org:/incoming

adapté de Olivier Pons

Mémo des commandes UNIX de base

November 18, 2005 on 4:38 pm | In General, Linux | 1 Comment

Voici un mémo des 25 commandes de base les plus utiles sous UNIX

Système, compression, email… succint mais utile…

–> Abrégé Unix

Debian Euro HOWTO

November 17, 2005 on 4:41 pm | In General, Linux | No Comments

Comment bien configurer votre petite Debian pour le Français mais aussi pour le support de l’Euro…

Debian Euro HOWTO

Le System-V et update-rc.d

November 17, 2005 on 4:30 pm | In General, Linux | No Comments

petit memo pour Le System-V et update-rc.d sur debian-fr.org

ou comment automatiser facilement le demarrage des taches sous debian en fonction des runlevels et savoir comment créer un script shell de demarrage de service

-> Le System-V et update-rc.d

reparation disque en ext2 ou ext3

November 16, 2005 on 3:51 pm | In General, Linux | No Comments

un petit memo en cas de disque dur defectueux sous linux

si la partition est en ext2 ou ext3 : http://www.coagul.org/article.php3?id_article=201

c’est bien utile et ca evite de faire de grosses betises

Nouvelle version de GeexBox

November 15, 2005 on 6:32 pm | In General, Linux, geek style | No Comments

Vous connaissez Windows Media Center ? La verison de windows spécialisée dans le multimedia ?

Il existe un logiciel du meme type sous Linux, 100% libre et au format Live-CD.

Téléchargez, Gravez et Démarrez sur le CD pour transformer en 5 minutes votre machine en un jukebox Audio et Video. Redémarrez et vous retrouvez votr PC d’origine… magique ;)

Dans cette nouvelle mouture, moultes améliorations surtout au niveau de la compatilibité avec les cartes Tuner TV et les cartes WiFi.

essayez le : GeeXboX 0.98.7.

Pour les geeks, on peut meme personnaliser l’ISO grace à un soft spécial : L’iso-Generator de GeexBox

mémo : mettre à l’heure son Linux

November 10, 2005 on 3:37 pm | In General, Linux | No Comments

mettre à l’heure son linux vite fait bien fait :

date MMJJHHmm

et, pour être toujours à l’heure, utiliser NTP, qui permet une synchronisation de l’heure avec les serveurs internationaux :
cf http://www.debianaddict.org/article3.html

Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds. Valid XHTML and CSS. ^Top^