PEBDEV - v3Développeur sur plates-formes mobiles 2012-09-30T15:52:00+01:00urn:md5:7f8bca04434a6b9a463dc602d3949cd9PluXml 5.0.25.0.25.0.2[ANDROID] Installer ICS CUSTOM sur votre tablette A500/A501urn:md5:ebf2d2a28db4c1ea2da7334d0a7085952012-09-30T15:52:00+01:00PEBDéveloppements ANDROID<p>
Objectif : installer facilement et rapidement la dernière version ICS d'android sur votre tablette A500/A501 déjà rootée. Nous utiliserons la ROM Tegraowners ICS ROM v170.
</p><p>
<br>
<center>
<img src="http://pebdev.eu/data/images/android-ics.jpg" alt="" />
</center>
<br><br>
<table bgcolor=black style="color:red">
<tr><td>
Votre tablette doit être rootée! Regardez les précédents posts pour savoir comment faire si ce n'est pas le cas.
</td></tr>
</table>
<br>
<table bgcolor=black style="color:red">
<tr><td>
Vos données seront effacée. Faites une backup!!
</td></tr>
</table>
<br><br><br>
<h2>1- Préparation de la SD</h1>
Téléchargez ces fichiers et mettez les à la racine de votre SD :<br>
- <a href="http://pebdev.eu/data/telechargements/android/update-recovery-thor2002ro-rev1.7.3.zip" target="androidics1">update-recovery-thor2002ro-rev1.7.3.zip</a><br>
- <a href="http://adf.ly/9hPIP" target="androidics2">Tegraowners ICS ROM v170 </a>
<br><br><br><br>
<h2>2- Mise à jour du recovery</h2>
- Téléchargez <b>Acer Recovery Installer</b> depuis le google play.<br>
- Cochez ensuite <b>CWM rev1.7 by Thor2002ro</b> et lancez <b>Install Recovery Image</b>.<br>
- Ensuite cliquez sur <b>Reboot into recovery</b><br>
- Dans le recovery : <b>Install from zip file > Choose zip file > update-recovery-thor2002ro-rev1.7.3.zip > yes</b><br>
- Redemarrez et accédez au recovery (au boot, <b>POWER+VOL UP</b>)
<br><br>
<table bgcolor=black style="color:green">
<tr><td>
Si vous avez des soucis avec l'acer Recovery Installer du google play, utilisez la version 1.5 (<a href="http://pebdev.eu/data/telechargements/android/com.interphaze.AcerRecoveryInstaller-1.apk">Acer Recovery Installer 1.5</a>)
</td></tr>
</table>
<br><br>
<h2>3- Installation de ICS</h2>
- Pour que le Wifi puisse fonctionner, vous devez mettre votre tablette en paramètres sortie d'usine (effacement de vos données!!) : Dans le recovery : <b>Wipe Menu > Wipe Data</b><br>
- Dans le recovery <b>Install from zip file > Choose zip file > Tegraowners_ICS_ROM_v170.zip > yes</b><br>
- Faites, Next jusqu'a avoir un choix à faire :<br>
> Si vous avez une tablette A500, passez (pas de 3G)<br>
> Si vous avez une tablette A501 choisissez <b>A501 internal 3G/GPS support (Acer prebuild driver)</b><br>
- Continuez, n'installez pas les autres modules (Wifi et Acer Print), chez moi la tablette redémarrait sans arrêt (toute les 30sec) avec ces modules.
<br><br><br><br>
<h2>4- Installation du Google Play</h2>
Vous l'aurez remarqué, vous n'avez pas de google Play d'installé sur votre tablette.<br>
- Téléchargez la dernière version de <b>gapps-ics-xxxxxxxx-signed.zip</b> depuis ce site : <a href="http://goo.im/gapps/" target="androidics2">http://goo.im/gapps/</a> (pour moi c'est gapps-ics-20120429-signed.zip). téléchargez le depuis votre tablette ou alors mettez le sur la SD.<br>
- Redemarrez en recovery mode, <b>Install from zip file > Choose zip file > gapps-ics-xxxxxxxx-signed.zip > yes</b>
<br><br><br>
Voila, une fois terminé, vous disposez d'ICS sur votre tablette acer!<br>
En cas de problème n'hésitez pas à le poster dans les commentaires ;)
</p>[MAC OSX] Installation d'une chaine de compilation ARMurn:md5:654607e6cc88bf4ed73743f4448e5bc52012-04-30T22:45:00+01:00PEBDéveloppements ARM<p>
Dans la continuité d'une initiation au développement sur MAC OSX, nous allons installer une chaine de cross-compilation ARM EABI sur OSX Lion.
</p><p>
<br>
<center>
<img src="http://pebdev.eu/data/images/arm-chip.gif" alt="" />
</center>
<br><br>
<table bgcolor=black style="color:red">
<tr><td>
Soyons claire dès le début, l'installation peut être capricieuse. Alors comment arriver au bout sans soucis? En suivant à la lettre ce tuto, en ne sautant aucune ligne, pas même un simple redémarrage. :)
</td></tr>
</table>
<br><br><br>
<h2>1- Installation de XCode</h2>
<b style="color:green">1-</b> Installez la dernière version de Xcode 4.3 (sur l'AppStore)<br>
<b style="color:green">2-</b> REDEMARREZ<br>
<b style="color:green">3-</b> Lancez Xcode, <b>Préférence > Download > Installez Command Line Tools</b><br>
<b style="color:green">4-</b> Mettez à jour le chemin de XCode (changement apparu dans la version 4.3). Lancez Terminal et entrez :<br>
<table bgcolor=black style="color:green">
<tr><td>
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
</td></tr>
</table>
<br><br><br>
<h2>2- Installation d'Homebrew</h2>
Homebrew est un logiciel permettant de récupérer/installer simplement des packages Unix sur OSX.
Lancez Terminal puis tapez les commandes suivantes :
<table bgcolor=black style="color:green">
<tr><td>
cd /opt/<br>
git clone https://github.com/mxcl/homebrew.git<br>
cd homebrew<br>
sudo cp -R * /usr/local<br>
sudo chown -R <b style="color:red">votre_UserName</b> /usr/local/<br>
brew doctor
</td></tr>
</table>
Ces commandes ont installé brew dans <b>/usr/local</b> et configuré ce chemin en lecture/écriture pour votre UserName.
La commande brew doctor quand à elle permet de vérifier que l'installation c'est bien déroulée. Si vous avez des erreurs essayez de les corriger ou demandez de l'aide via les commentaires ci-dessous.
<br><br><br><br>
<h2>3- Compilation/Installation de CodeSourcery</h2>
Installons les outils nécessaires à la compilation :
<table bgcolor=black style="color:green">
<tr><td>
brew install mpfr<br>
brew install gmp<br>
brew install libmpc<br>
brew install texinfo<br>
brew install libelf
</td></tr>
</table>
<b style="color:red">Remarque : </b> Si vous rencontrez une erreur lors de l'installation d'un des packages, ressayez plusieurs fois, cela peut finir par passer :)<br><br>
<table bgcolor=black style="color:green">
<tr><td>
cd /opt/<br>
https://github.com/jsnyder/arm-eabi-toolchain.git<br>
cd arm-eabi-toolchain <br>
PREFIX=/opt/arm-eabi-toolchain/arm-cs-tools make install-cross
</td></tr>
</table><br>
Et voila, dans le dossier <b>/opt/arm-eabi-toolchain/arm-cs-tools</b> vous trouverez votre bonheur :)<br>
Pour utiliser le compilateur <b>arm-none-gnueabi</b> que nous venons de compiler, ajoutez simplement le path à la variable PATH :
<table bgcolor=black style="color:green">
<tr><td>
export PATH=/opt/arm-eabi-toolchain/arm-cs-tools/bin:$PATH
</td></tr>
</table><br>
Vous pouvez enfin vérifier que la compilation a réussi :
<table bgcolor=black style="color:green">
<tr><td>
arm-none-eabi-gcc -v
</td></tr>
</table><br>
Si vous rencontrez des soucis n'hésitez pas à poser vos questions dans les commentaires.
</p>[ANDROID] Installation d'une ROM sur une tablette Acer A501/A500urn:md5:f6574d1d6ffb16b728a4d3eed0607ae32012-01-10T01:59:00+01:00PEBDéveloppements ANDROID<p>Maintenant que vous avez une tablette A501 ou A500 rootée en 3.0.1 (cf post précédent), vous pouvez revenir sur une version récente d'Android.<br>
Je vous explique tout ça dans ce post.
</p><p>
<br>
<center><img src="http://pebdev.eu/data/images/android-rom.png" alt="" /></center>
<br><br><br>
<h2>Pré-requis</h2>
Vous devez avoir une tablette A501 ou A500 rootée et une SDcard. Si ce n'est pas le cas ou si vous ne voyez pas de quoi je parle, allez faire un tour sur mon précédent post : <a href="http://pebdev.eu/index.php?article29/android-rootage-d-une-tablette-acer-a501" target="android11"> ICI</a>.<br><br><br>
<center>
<table bgcolor=black>
<tr><td>
<b style="color:red"><u>Important :</u> Branchez votre tablette sur le secteur durant cette manipulation.</b>
</td></tr>
</table>
</center>
<br><br><br>
<h2>Le Taboonay c'est trop bon!</h2>
Pour flasher une nouvelle version d'Android rootée sur votre tablette vous devez utiliser une ROM. En gros c'est une image qui contient les fichiers qui seront flashés sur votre tablette. Le choix de cette ROM doit se faire sur ces principaux critères :<br>
- compatibilité avec le matériel<br>
- fonctionnalités<br>
- bugs connus (s'il y en a c'est bien d'identifier leurs impacts)<br><br>
A ce jour, je vous conseil les ROM <b>Taboonay</b>. Compatible A500/A501, elles sont relativement stables. Vous pouvez très bien en choisir une autre, la méthode qui suit ne change pas ;)<br><br><br>
<b style="color:green">1-</b> Sur l'Android Market cherchez et installez l'application <b>Acer Recovery Installer</b>.<br><br>
<b style="color:green">2-</b> Lancez l'application et cochez <b>ClockworkMod Recovery rev1.3.4 by thor2002ro</b><br><br>
<b style="color:green">3-</b> Appuyez ensuite sur <b>Install Recovery Image</b> <br><br>
<b style="color:green">4-</b> Téléchargez votre ROM. Pour Taboonay c'est par <a href="http://vache-android.com/v1/index.php?site=files&cat=24" target="taboonay1">ICI</a> et mettez le fichier zip sur la sdcard (sans le décompresser).<br><br>
<b style="color:green">5-</b> Après avoir inséré la SD dans votre tablette, démarrez la en <b>Recovery Mode</b> (<b>Install Recovery Image > Reboot into Recovery</b>)<br><br>
<b style="color:green">6-</b> Pour naviguer utilisez <b>Volume-+</b> et pour valider le bouton <b>Power</b>.
Suivez ces étapes :<br>
- Wipe data/factory reset<br>
- Wipe cache partition<br>
- Advanced > Wipe Dalvik Cache<br>
- Advanced > Wipe Battery Stats<br>
- Install zip from sdcard > choose zip from sdcard >{votreZIP} > YES<br>
- Go Back<br>
- Reboot system now<br><br><br>
Et voila votre ROM est flashée! Le 1er boot peut être long, c'est normal, pas de panique ;)<br>
Si vous avez installé la ROM Taboonay 2.1 (la dernière à ce jour), vous disposez d'Android 3.2. Par ailleurs Taboonay reconnait bien votre A501 comme une A501 et non une A500.
</p>[ANDROID] Rootage d'une tablette Acer A501/A500urn:md5:98ec13e73d26a949f6f6c84d616121b82012-01-09T22:11:00+01:00PEBDéveloppements ANDROID<p>Fraichement possesseur d'une tablette Acer A501 sous Android 3.2, j'ai évidement souhaité la bidouiller dès le premier jour :). Seul problème, Android ne permet pas par défaut d'avoir un accès au système... ([TROLL ON] : et après des utilisateurs Android ont osé me dire qu'Android est plus ouvert que iOS... ignorant que j'étai j'y avais cru! [TROLL OFF]).<br>
Dans ce post vous trouverez des infos et la méthode que j'ai suivi pour rooter ma tablette.
</p><p>
<br>
<center><img src="http://pebdev.eu/data/images/android-root.jpg" alt="" /></center>
<br><br><br>
Avant d'attaquer, voici quelques questions /réponses :<br><br>
<h2>Que signifie 'rooter' sa tablette?</h2>
Rooter veut dire qu'on rend le compte super-utilisateur (admin) actif sur le système.<br><br><br>
<h2>Pourquoi 'rooter' sa tablette?</h2>
Si vous souhaitez avoir un accès complet au système pour développer des softs utilisant votre tablette par exemple (périphériques usb), pour pouvoir sauvegarder TOUTES vos données (je me retiens pour pas ouvrir un second troll...mais je n'en pense pas moins^^), pour lancer une distribution Linux sur votre tablette, .... Bref, pour une utilisation plus poussée que de la navigation ou du multimédia.<br><br><br>
<h2>Est-ce compliqué?</h2>
Non, je vous explique tout et le logiciel que nous allons utiliser vous détail bien les actions à faire.<br><br><br>
<h2>Est-ce risqué?</h2>
Oui si vous ne suivez pas les instructions, vous pouvez 'briquer' votre tablette (la rendre inutilisable). Cependant le plus souvent c'est récupérable. Mais bon si vous ne faites pas de hors piste vous ne risquez rien.<br><br><br>
<h2>Mes données dans tout ça?</h2>
Toutes les données présentes sur la tablette seront effacées, faites des sauvegardes de ce que vous pouvez avant de continuer!<br><br><br>
<h2>Ma config à moi :</h2>
Une tablette Acer A501 (marche aussi pour une A500) avec un PC sous Seven dans mon cas.<br><br><br>
<center>
<table bgcolor=black>
<tr><td>
<b style="color:red"><u>Important :</u> Ne branchez / débranchez votre tablette au PC que lorsque je vous le dis. Quand vous démarrez ce tuto, allez jusqu'au bout, ne vous arrêtez pas en chemin! Dernière chose, branchez votre tablette sur le secteur durant cette manipulation.</b>
</td></tr>
</table>
</center>
<br><br><br>
<h1>Préparation</h1>
<b style="color:green">1-</b> Avant de brancher votre tablette, téléchargez les drivers sur le site d'ace (acer > support > pilotes) et installez les.<br><br>
<b style="color:green">2-</b> Téléchargez ensuite cette archive : <a href="http://pebdev.eu/data/telechargements/android/EUUs_SBK_Acer_A501_0.017.01_PA_ATT.zip" target="android2">EUUs_SBK_Acer_A501_0.017.01_PA_ATT.zip</a>.
<br><br><br><br>
<h1>Downgrade de votre tablette</h1>
A ce jour, il n'est pas possible de rooter directement votre tablette A500/A501 en 3.2, Il faut la repasser dans un firmware antérieur, c'est ce qu'on appel un downgrade.<br><br>
<b style="color:green">0-</b> Branchez votre tablette au PC et au secteur.<br><br>
<b style="color:green">1-</b> Sur votre tablette : <b>Paramètres > Applications > Développement > cochez Débogage USB</b>.<br><br>
<b style="color:green">2-</b> Sur votre PC : <b>Gestionnaire de périphériques > ADB interface > Propriétés > Détails > Parent</b><br>
Notez alors la valeur (quelque chose comme USB\\USB\VID_0502&PID_3344\380603404850).<br>
Ce qui nous intéresse ici est le numéro qui dans mon exemple est <b>380603404850</b>.<br><br>
<b style="color:green">3-</b> Débranchez la tablette du PC.<br><br>
<b style="color:green">4-</b> Extraire l'archive zip puis lancez <b>EUUs_SBK_Acer_A501_0.017.01_PA_ATT.exe</b>.
Un message vous rappel de ne pas brancher la tablette tout de suite.<br>
Le logiciel installe ensuite les drivers (oui on les déjà installés pour connaitre l'UID, mais on ne le contrarie pas^^)<br><br>
<b style="color:green">5-</b> A la fenêtre de connexion de la tablette, ouvrez une fenêtre explorer, allez dans :<br><b>c:/Utilisateurs/{VotreNomDeSession}/AppData/Local/Temp</b>.<br>
Cherchez un dossier du genre <b>7zS236B.tmp</b> (il n'aura pas le même nom chez vous, utilisez la date pour le localiser si vous avez du mal à le trouver).<br>
Editez le fichier <b>CPUID.txt</b> et remplacez la valeur par votre UID en ajoutant <b>(zéro)x(zéro)</b>(UID) devant, comme ceci dans mon exemple : <b>0x0380603404850</b>. Fermez le fichier.<br>
Vérifiez le fichier <b>Version.cfg</b> : si vous avez une A501, vous devriez trouver une ligne <b>1= A501</b>, si vous avez une A500, changez le A501 par A500. Fermez le fichier.<br><br>
<b style="color:green">6-</b> Revenez sur l'application de mise à jour et faites <b>suivant</b> jusqu'à ce qu'une fenêtre vous demande <b>le numéro ID du processeur</b>. Entrez alors votre UID <b>avec un zéro devant</b>. Dans mon cas : <b>0380603404850</b>.<br><br>
<b style="color:green">7-</b> Faites suivant et c'est partie! Ne touchez à rien, ça peut être long...<br><br>
<b style="color:green">8-</b> Quand vous avez le message <b>Votre tablette a été mise à jour avec le logiciel le plus récent</b> (humm), c'est que c'est bon, votre A500 ou A501 est en 3.0.1.<br><br>
<br><br><br><br>
<h1>En route vers le rootage</h1>
<b style="color:green">9-</b> Configurez rapidement votre tablette (wifi et compte google).<br><br>
<b style="color:green">10-</b> Puis <b>Paramètres > Applications > cochez Sources inconnues</b>.<br>
Dans <b>Paramètres > Applications > Développement > cochez Débogage USB</b>.<br><br>
<b style="color:green">11-</b> Dernière étape, positionnez votre tablette en portrait et verrouillez la rotation (bouton en dessous des boutons de volume).<br>
Téléchargez l'application suivante depuis le navigateur de votre tablette : <a href="http://pebdev.eu/data/telechargements/android/iconiaroot-1.3.apk">iconiaroot-1.3.apk</a><br>
Installez la (appuyez sur l'icône en forme de flèche à coté de l'heure)<br>
Lancez la (l'icône IconiaRoot dans la liste de vos applications).<br><br>
Et voila! Votre tablette est rootée!<br><br><br><br>
Un prochain tuto arrivera assez vite pour expliquer comment installer une ROM afin de revenir sur une version récente d'Android.<br><br><br>
Pour toutes questions / remarques / questions n'hésitez pas à utiliser les commentaires ;)
</p>[GIT / INDEFERO / OVH] Un repo GIT privé et publique avec OVHurn:md5:b631e4920887b5223d2aeedace813a302011-09-11T11:31:00+01:00PEBSite<p>
ça n'a pas été facile, mais sayé! J'ai trouvé une solution pour avoir un repo GIT privé ET publique sur un serveur OVH mutualisé, le tout avec une petite interface web pour faire jolie! J'ai mis un bon WE, mais grâce à ce tuto vous ne devrez pas mettre plus d'une heure, c'est cadeau ;)
</p><p>
<br>
<center><img src="http://pebdev.eu/data/images/indefero_logo.png" alt="" width="60%" height="40%" /></center>
<br><br>
<h2>Sommaire</h2>
<ol>
<li>Présentation</li>
<li>GIT sur le serveur</li>
<li>Installation d'Indefero sur notre serveur</li>
<li>Configuration d'Indefero</li>
<li>Utilisation d'Indefero par les membres (et vous, admin)</li>
<li>Création et utilisation d'un projet git</li>
</ol>
<br><br><br><br>
<h2>Présentation</h2>
L'objectif est donc de pouvoir disposer d'un GIT privé mais aussi publique sur un serveur mutualisé OVH.<br>
Il est facile de pouvoir disposer d'un git privé étant donné que git est disponible (enfin, une version dinosaure) sur les hébergements mutualisés OVH. Le seul problème est que pour y accéder (git clone, git push, git pull, ...) vous devez utiliser votre 'identifiant' ssh principal, que vous ne pouvez pas partager à d'autres membres du projet, pour des raisons de sécurité bien évidement. Vous me direz, il suffit d'ajouter les clés RSA des autres membres sur le serveur...mouiii, le seul hic c'est qu'il n'y a pas de restriction, ainsi vous donnerez un accès complet à votre serveur... :D<br><br>
La solution choisie va ainsi :<br>
<ul>
<li> permettre d'avoir une notion d'utilisateur.</li>
<li> proposer une interface web pour lister vos projets, leurs informations, ...</li>
<li> vous permettre de gérer des projets publiques et privés.</li>
</ul><br>
Voici à quoi ressemble Indefero : <a href="http://www.indefero.net/tour/" target="tour">Indefero</a>.<br><br>
Ce tuto peut sembler long, ça été le cas pour l'écrire :D, mais sa mise en pratique l'est beaucoup moins, ne vous arrêtez pas à ça ;)<br><br>
Dans ce tuto je pars du principe que vous sachez vous connecter en <b>ssh</b> et <b>ftp</b> à votre serveur.<br>
Vous devez connaitre le <b>chemin absolu</b> de votre compte, pour cela tapez la commande <b>pwd</b> lors d'une session ssh avec votre serveur :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ pwd<br>
/homez.xxx/yyy/
</td></tr>
</table><br>
Par la suite, lorsque je donnerais une commande ssh, je mentionnerais le chemin de cette manière :<br>
<table bgcolor=black style="color:green">
<tr><td>
ssh:/git/$ pwd<br>
/homez.xxx/yyy/git
</td></tr>
</table><br>
Ainsi, si je tape :<br>
<table bgcolor=black style="color:green">
<tr><td>
ssh:/$
</td></tr>
</table><br>
Cela signifie que vous devez êtres à la racine de votre compte.<br><br>
Dernière chose, si vous lisez <b>yyy.eu</b> cela correspond à votre nom de domaine.<br><br>
Bon allez, on a du boulot, on ne traine pas!<br>
<br><br><br><br>
<h2>GIT sur le serveur</h2>
La version de GIT présente sur OVH étant ultra vieille, il faut installer une version plus récente sur votre serveur mutualisé. Ceci est important pour la suite, ne sautez pas cette étape ;)<br><br>
<ul>
<li>Téléchargez les sources de la dernière version : <a href="http://kernel.org/pub/software/scm/git/git-1.7.6.1.tar.bz2" target="git">git-1.7.6.1.tar.bz2</a>.</li>
<li> Décompressez l'archive sur votre PC</li>
<li> Ouvrez une session ssh avec votre serveur.</li>
<li> Créez les dossiers suivant :<br>
<table bgcolor=black style="color:green">
<tr><td>
ssh:/$ mkdir -p opt/src/git<br>
ssh:/$ mkdir opt/git
</td></tr>
</table><br></li>
<li> Ouvrez une connexion ftp, et transférez le contenu de l'archive git que vous avez téléchargée précédemment dans le dossier <b>opt/src/git/</b>.</li>
<li>A l'aide de votre session SSH appliquez les droits suivants au dossier <b>git</b> :<br>
<table bgcolor=black style="color:green">
<tr><td>
ssh:/opt/src/$ chmod -R 755 git/
</td></tr>
</table><br></li>
<li> Et on y va :<br>
<table bgcolor=black style="color:green">
<tr><td>
ssh:/opt/src/$ cd git<br>
ssh:/opt/src/git/$ make clean<br>
ssh:/opt/src/git/$ make configure<br>
ssh:/opt/src/git/$ ./configure --prefix=$HOME/opt/git --without-tcltk<br>
ssh:/opt/src/git/$ make<br>
ssh:/opt/src/git/$ make install
</td></tr>
</table><br>
<b style="color:red">REMARQUE 1 :</b>Si durant la compilation vous avez des problèmes de permission, appliquez un <b>chmod +x</b> sur le fichier en question. Petit exemple :<br>
<table bgcolor=black style="color:green">
<tr><td>
ssh:/opt/src/git/$ chmod +x generate-cmdlist.sh
</td></tr>
</table><br>
<b style="color:red">REMARQUE 2 :</b> Si la compilation échoue avec un message d'erreur <b>'/bin/sh: msgfmt: command not found'</b> utiliser la commande suivante pour compiler :
<table bgcolor=black style="color:green">
<tr><td>
ssh:/opt/src/git/$ make -i<br>
</td></tr>
</table><br>
<b>SOYEZ BIEN ATTENTIF AU RESULTAT DE LA COMPILATION</b>, histoire de ne pas louper une erreur de compilation causée par un problème de permission!</li>
<li> Ensuite éditez le fichier <b>.bash_profile</b> pour faire connaitre notre installation de git au serveur :
<table bgcolor=black style="color:green">
<tr><td>
ssh:/$ nano .bash_profile
</td></tr>
</table><br>
Ajoutez la ligne en rouge :<br>
<table bgcolor=black style="color:green">
<tr><td>
PATH=$PATH:$HOME/bin<br>
<b style="color:red">PATH=$HOME/opt/git/bin:$PATH</b>
</td></tr>
</table><br>
Fermez nano avec un CTRL+X, O puis ENTER.<li>
</ul><br>
Et voila, nous avons une version récente de git sur notre serveur. Etape suivante !<br>
<br><br><br><br>
<h2>Installation d'Indefero sur notre serveur</h2>
Indefero va nous permettre de manager nos projets à l'aide d'une interface web mais aussi de mettre en place les accès git pour vos logiciels favoris (ou ligne de commandes pour les vraies dures^^).<br><br>
Pour bien vous organiser, vous devez considérer Indefero comme un site indépendant que vous mettriez sur votre serveur. En toute logique, il est bien d'organiser l'arborescence de votre serveur de cette manière :<br>
<b>/www/monsite1/</b><br>
<b>/www/monsite2/</b><br>
<b>/www/Indefero/</b><br><br>
Pour ma part je vais considérer qu'Indefero sera installé comme présenté ci-dessus. Si vous ne suivez pas cette arborscence soyez bien attentif à la suite de ce tuto!<br><br>
A titre indicatif, nos projets git seront organisés ainsi :<br>
<b>/git/projet1.git</b><br>
<b>/git/projet2.git</b><br><br>
Allez, go go go!<br><br>
<ul>
<li>Téléchargez la dernière version d'Indefero : <a href="http://projects.ceondo.com/p/indefero/downloads/" target="indefero"> Indefero downloads</a>.<li>
<li> Décompressez et uploadez les fichiers de l'archive dans le dossier <b>/www/Indefero</b><br>
<b style="color:red">REMARQUE :</b> n'uploadez pas les fichiers <b>.git*</b><li>
<li> Téléchargez <b>Pluf</b> : <a href="http://projects.ceondo.com/p/pluf/source/download/master/" target="pluf">Pluf</a>.<li>
<li> Décompressez, renommez le dossier <b>pluf-master</b> en <b>pluf</b> et uploadez le dans <b>/www/Indefero/src/</b>.<li>
</ul>
Maintenant vous devez créer un fichier <b>.htaccess</b> dans le dossier <b>www/</b> d'Indefero. Ce dernier va nous permettre d'activer le rewrite_mode afin d'avoir des adresses comestibles lors de l'utilisation d'Indefero ;).<br>
<table bgcolor=black style="color:green">
<tr><td>
ssh:/www/Indefero/www/$ nano .htaccess<br><br>
Contenu :<br><br>
Options +FollowSymLinks<br>
RewriteEngine On<br>
RewriteCond %{REQUEST_FILENAME} !-f<br>
RewriteCond %{REQUEST_FILENAME} !-d<br>
RewriteRule ^(.*) /index.php/$1<br>
SetEnv PHP_VER 5<br>
SetEnv REGISTER_GLOBALS 0<br>
Options -Indexes
</td></tr>
</table>
<br>
Dernière étape de cette installation!<br>
<ul>
<li> Ouvrez le fichier <b>/www/Indefero/scripts/gitserve.py</b>.</li>
<li> Supprimez tout son contenu et mettez ceci à la place :<br>
<table bgcolor=black style="color:green">
<tr><td>
#!/usr/bin/env python
# -*- coding: utf-8 -*-<br>
# <br>
# Merci à ekozan : http://forum.ovh.com/showthread.php?t=71543<br>
#<br>
# ***** BEGIN LICENSE BLOCK *****<br>
# This file is part of InDefero, an open source project management application.<br>
# Copyright (C) 2008 Céondo Ltd and contributors.<br>
#<br>
# InDefero is free software; you can redistribute it and/or modify<br>
# it under the terms of the GNU General Public License as published by<br>
# the Free Software Foundation; either version 2 of the License, or<br>
# (at your option) any later version.<br>
#<br>
# InDefero is distributed in the hope that it will be useful,<br>
# but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>
# GNU General Public License for more details.<br>
#<br>
# You should have received a copy of the GNU General Public License<br>
# along with this program; if not, write to the Free Software<br>
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA<br>
#<br>
# ***** END LICENSE BLOCK ***** */<br>
import os<br>
import sys<br>
import commands<br>
import traceback<br><br>
n = len("/gitserve.py")<br>
GITSERVEPHP = '%s/gitserve.php' % traceback.extract_stack(limit=1)[0][0][0:-n]<br>
status, output = commands.getstatusoutput('php.BETA -q %s %s' % (GITSERVEPHP, sys.argv[1]))<br>
if status == 0:<br>
os.execvp('git', ['git', 'shell', '-c', output.strip()])<br>
else:<br>
sys.stderr.write("%s\n" % output)<br>
sys.exit(1)<br>
</td></tr>
</table>
<br>
L'installation est terminée, nous devons maintenant configurer Indefero.<br>
<br><br><br><br>
<h2>Configuration d'Indefero</h2>
<li> Première chose, Indefero a besoin d'une base de donnée (de type MySQL), créez en une depuis le <b>ManagerOVH</b>. Pour la suite je prendrai l'exemple d'une base se nommant <b>yyyIndef</b>.</li>
<li> Ensuite, sur votre PC allez dans le dossier <b>Indefero/src/IDF/conf/</b>.</li>
<li> Dupliquez les fichiers <b>idf.php-dist</b> et <b>path.php-dist</b> en supprimant le <b>-dist</b> sur chacun d'entre eux.</li>
<li> Maintenant regardons le fichier <b>idf.php</b> ensemble (c'est le gros du boulot). J'ai commenté les modifications et mis en rouge les lignes que vous devez modifier :<br>
<table bgcolor=black style="color:green">
<tr><td>
// Ajoutez ces lignes<br>
<b style="color:red">define('PLUF_PATH', dirname(__FILE__).'/../../pluf/src');<br>
define('IDF_PATH', dirname(__FILE__).'/../..');<br><br>
set_include_path(get_include_path()<br>
.PATH_SEPARATOR.PLUF_PATH<br>
.PATH_SEPARATOR.IDF_PATH<br>
);</b><br><br>
$cfg = array();<br><br>
// On désactive le debug<br>
<b style="color:red">$cfg['debug'] = false;</b><br>
$cfg['debug_scm'] = false;<br><br>
// Chemin absolu de notre dossier git<br>
<b style="color:red">$cfg['git_repositories'] = '/homez.xxx/yyy/git/%s.git';</b><br><br>
// Chemin d'accès aux repo git.<br>
<b style="color:red">$cfg['git_remote_url'] = 'git://yyy.eu/%s.git';</b></b><br><br>
// Chemin d'accès indiqué aux utilisateurs (remplacez userssh par le vôtre)<br>
<b style="color:red">$cfg['git_write_remote_url'] = 'ssh://usersssh@yyy.eu/%s.git';</b><br><br><br>
// Chemin vers le fichier mettant à jour le fichier de clés<br>
<b style="color:red">$cfg['idf_plugin_syncgit_path_gitserve'] = '/homez.xxx/yyy/www/indefero/scripts/gitserve.py';</b><br><br>
// Fichier des clés à mettre à jour (pas d'importance pour nous OVHien^^)<br>
<b style="color:red">$cfg['idf_plugin_syncgit_path_authorized_keys'] = '/homez.xxx/yyy/git/.ssh/authorized_keys';</b><br><br>
// Propose de supprimer un dépôt automatiquement lors de la suppression d'un projet<br>
<b style="color:red">$cfg['idf_plugin_syncgit_remove_orphans'] = false;</b><br><br>
// Répertoire home de l'utilisateur git<br>
<b style="color:red">$cfg['idf_plugin_syncgit_git_home_dir'] = '/homez.xxx/yyy/git';</b><br><br>
// Chemin absolu du fichier de synchronisation<br>
<b style="color:red">$cfg['idf_plugin_syncgit_sync_file'] = $cfg['idf_plugin_syncgit_git_home_dir'].'/sync/SYNC-GIT';</b><br><br>
// Chemin des dépôts<br>
<b style="color:red">$cfg['idf_plugin_syncgit_base_repositories'] = '/homez.xxx/yyy/git';</b><br><br><br>
// On ne veut pas utiliser svn, on commente<br>
<b style="color:red">#$cfg['svn_repositories'] = 'file:///home/svn/repositories/%s';<br>
#$cfg['svn_remote_url'] = 'http://localhost/svn/%s';</b><br><br>
// De même, on ne veut pas de monotone, on commente<br>
<b style="color:red">#$cfg['mtn_path'] = 'mtn';<br>
#$cfg['mtn_opts'] = array('--no-workspace', '--no-standard-rcfiles');<br>
#$cfg['mtn_repositories'] = '/home/mtn/repositories/%s.mtn';<br>
#$cfg['mtn_remote_url'] = 'mtn://my-host.biz/%s';<br>
#$cfg['mtn_db_access'] = 'local';<br>
#$cfg['mtn_confdir'] = '/path/to/dir/tree/';<br>
#$cfg['mtn_confdir_extra'] = array('hooks.d/something.lua')<br>
#$cfg['mtn_usher_conf'] = '/path/to/usher.conf';</b><br><br>
// Pas de Mercurial, on commente<br>
<b style="color:red">#$cfg['mercurial_repositories'] = '/home/mercurial/repositories/%s';<br>
#$cfg['mercurial_remote_url'] = 'http://projects.ceondo.com/hg/%s';</b><br><br>
// Alors maintenant il faut configurer la partie mail. Cela permet d'envoyer un mail aux <br>
// nouveaux inscrit pour qu'ils puissent valider l'inscription. Pour cela je vous conseil de<br>
// créer une boite gmail et de configurer les champs ci-dessous.<br>
// Je ne commente pas chaque ligne pour la partie mail, c'est assez explicite^^<br>
<b style="color:red">$cfg['admins'] = array(<br>
array('Admin', 'mrplop@gmail.com'),<br>
);</b><br><br>
<b style="color:red">$cfg['send_emails'] = true;<br>
$cfg['mail_auth'] = true;//PENSEZ A AJOUTER CETTE LIGNE<br>
$cfg['mail_backend'] = 'smtp';<br>
$cfg['mail_host'] = 'ssl://smtp.gmail.com';<br>
$cfg['mail_port'] = 465;<br>
$cfg['mail_username'] = 'mrplop@gmail.com';<br>
$cfg['mail_password'] = 'SuperMotDePasseIntrouvable';</b><br><br>
// Ce que je vous conseil, c'est de créer un (sous-)domaine pour accéder directement <br>
// à votre Indefero. Je prendrais l'exemple d'un sous-domaine indefero.yyy.eu qui pointe <br>
// vers www/indefero/www/<br>
<b style="color:red">$cfg['idf_base'] = '';<br>
$cfg['url_base'] = 'http://indefero.yyy.eu';</b><br><br>
// Le dossier media est dans www/indefero/www/, on met donc notre sous-domaine<br>
// pour faire jolie :)<br>
<b style="color:red">$cfg['url_media'] = 'http://indefero.yyy.eu/media';<br>
$cfg['url_upload'] = 'http://indefero.yyy.eu/media/upload';</b><br><br>
// On indique le chemin absolu du dossier upload<br>
<b style="color:red">$cfg['upload_path'] = '/homez.xxx/yyy/www/indefero/www/media/upload';</b><br><br>
// On renseigne à nouveau le chemin absolu sur un autre dossier<br>
<b style="color:red">$cfg['upload_issue_path'] = '/homez.xxx/yyy/www/indefero/attachments';</b><br><br>
// Indiquez ici une clé secrète uniquement utile à Indefero :<br>
// au minimum 40 caractères, alors défoulez-vous sur votre clavier, c'est le bon moment ;)<br>
<b style="color:red">$cfg['secret_key'] = 'LaTechnologieThunderboltPermetDeTransfererDesDonneesALaVitesseDeLEclair';</b><br><br>
// L'identité du spameur <br>
<b style="color:red">$cfg['from_email'] = 'mrplop@gmail.com';</b><br>
<b style="color:red">$cfg['bounce_email'] = 'mrplop@gmail.com';</b><br><br>
$cfg['tmp_folder'] = '/tmp';<br><br>
// On renseigne les champs de notre base de donnée<br>
// Pour le champ 'db_server' vous aurez l'information depuis le ManagerOVH, le serveur<br>
// est de la forme <b>mysqlxx-yy.zzz</b><br>
<b style="color:red">$cfg['db_login'] = 'yyyIndef';<br>
$cfg['db_password'] = 'SuperMotDePasseIntrouvable';<br>
$cfg['db_server'] = 'mysqlxx-yy.zzz';</b><br>
$cfg['db_version'] = '5.1'; # Only needed for MySQL<br>
$cfg['db_table_prefix'] = 'indefero_';<br><br>
// On utilise une base de donnée MySQL<br>
<b style="color:red">$cfg['db_engine'] = 'MySQL';<br>
$cfg['db_database'] = 'yyyIndef';</b><br><br>
# $cfg['idf_extra_upload_ext'] = 'ext1 ext2';<br><br>
// On défini la 'time_zone'<br>
<b style="color:red">$cfg['time_zone'] = 'Europe/Paris';</b><br><br>
$cfg['pear_path'] = '/usr/share/php';<br><br>
$cfg['login_success_url'] = $cfg['url_base'].$cfg['idf_base'];<br>
$cfg['after_logout_page'] = $cfg['url_base'].$cfg['idf_base'];<br><br>
$cfg['cache_engine'] = 'Pluf_Cache_File';<br>
$cfg['cache_timeout'] = 300;<br>
$cfg['cache_file_folder'] = $cfg['tmp_folder'].'/cache';<br><br>
$cfg['template_folders'] = array(<br>
dirname(__FILE__).'/../templates',<br>
);<br><br>
$cfg['installed_apps'] = array('Pluf', 'IDF');<br>
$cfg['pluf_use_rowpermission'] = true;<br>
$cfg['middleware_classes'] = array(<br>
'Pluf_Middleware_Csrf',<br>
'Pluf_Middleware_Session',<br>
'IDF_Middleware',<br>
'Pluf_Middleware_Translation',<br>
);<br><br>
$cfg['template_context_processors'] = array('IDF_Middleware_ContextPreProcessor');<br>
$cfg['idf_views'] = dirname(__FILE__).'/urls.php';<br><br>
$cfg['languages'] = array('en', 'fr', 'de', 'es_ES');<br><br>
$cfg['allowed_scm'] = array('git' => 'IDF_Scm_Git',<br>
'svn' => 'IDF_Scm_Svn',<br>
'mercurial' => 'IDF_Scm_Mercurial',<br>
'mtn' => 'IDF_Scm_Monotone',<br>
);<br><br>
// Enfin on renseigne le chemin de git que nous avons précédement installé<br>
<b style="color:red">$cfg['git_path'] = '/homez.xxx/yyy/opt/git/bin/git';</b><br><br>
return $cfg;<br>
</td></tr>
</table><br>
Fiou, le plus gros est fait! Je vous rassure, j'ai fini de vous éclater les yeux avec tout ce rouge :p<br><br>
<li> Maintenant on modifie le fichier <b>path.php</b>. J'ai mis en rouge la ligne que vous devez modifier :<br>
<table bgcolor=black style="color:green">
<tr><td>
<b style="color:red">define('PLUF_PATH', dirname(__FILE__).'/../../pluf/src');</b><br><br>
define('IDF_PATH', dirname(__FILE__).'/../..');<br><br>
set_include_path(get_include_path()<br>
.PATH_SEPARATOR.PLUF_PATH<br>
.PATH_SEPARATOR.IDF_PATH<br>
);<br>
</td></tr>
</table><br>
<i>(Diantre! je suis à une ligne rouge de saigner des yeux!)</i><br><br>
A présent nous sommes à 2,3 commandes de la fin de la configuration d'Indefero. Vérifiez bien vos informations et ensuite tapez cette commande par ssh :<br>
<table bgcolor=black style="color:green">
<tr><td>
ssh:/www/indefero/www/$ php.BETA /homez.xxx/yyy/www/indefero/src/pluf/src/migrate.php --conf=/homez.xxx/yyy/www/indefero/src/IDF/conf/idf.php -a -i -d -u
</td></tr>
</table>
Vous devriez obtenir ces deux lignes :<br>
<table bgcolor=black style="color:green">
<tr><td>
Pluf_Migrations_Install_setup<br>
IDF_Migrations_Install_setup
</td></tr>
</table><br>
<b style="color:red">REMA</b><b style="color:blue">RQUE :</b> (mouai, je ne sais si le bleu est vraiement mieux^^) Ne continuez pas si vous obtenez des erreurs. Les erreurs sont en générales en lien avec votre base de données, vérifiez qu'elle est disponible (cela prend quelques minutes pour la créer du coté d'OVH) et que les informations que vous avez renseignées sont correctes.<br><br>
Si tout est bon, tapez la même commande mais sans le <b>-u</b> :
<table bgcolor=black style="color:green">
<tr><td>
ssh:/www/indefero/www/$ php.BETA /homez.xxx/yyy/www/indefero/src/pluf/src/migrate.php --conf=/homez.xxx/yyy/www/indefero/src/IDF/conf/idf.php -a -i -d
</td></tr>
</table><br>
Maintenant passons à la création de l'admin! Créez un fichier <b>boot.php</b> dans <b>www/</b>.<br>
Insérez le code suivant dedans et remplacez les données par les vôtres :<br>
<table bgcolor=black style="color:green">
<tr><td>
//Sans espace entre le < et ?
< ?php<br>
<br>
require '/homez.xxx/yyy/www/indefero/src/IDF/conf/path.php';<br>
require 'Pluf.php';<br>
Pluf::start('/homez.xxx/yyy/www/indefero/src/IDF/conf/idf.php');<br>
Pluf_Dispatcher::loadControllers(Pluf::f('idf_views'));<br><br>
$user = new Pluf_User();<br>
$user->first_name = 'PLOP';<br>
$user->last_name = 'Mr'; // Required!<br>
$user->login = 'plop'; // must be lowercase!<br>
$user->email = 'mrplop@gmail.com';<br>
$user->password = 'SuperMotDePasseIntrouvable';<br>
$user->administrator = true;<br>
$user->active = true;<br>
$user->create();<br>
print "Utilisateur créé\n";<br><br>
?>
</td></tr>
</table><br>
<b style="color:red">REMARQUE :</b> Ne faites pas comme moi, renseignez des informations correctes afin de ne pas avoir un suivi bordélique du projet. Si les membres renseignent n'importe quoi, le projet deviendra vite du grand n'importe quoi...<br><br>
Exécutez le fichier de cette manière :<br>
<table bgcolor=black style="color:green">
<tr><td>
ssh:/www/$ php.ORIG.5.3.5 boot.php
</td></tr>
</table><br>
Vous venez d'enregistrer l'admin Indefero.<br><br>
Pensez ensuite à supprimer le fichier <b>boot.php</b> :
<table bgcolor=black style="color:green">
<tr><td>
ssh:/www/$ rm boot.php
</td></tr>
</table><br>
Et voila, votre environnement Indefero est en place, accessible via <b>http://yyy.eu/indefero/</b> ou depuis le (sous-)domaine que vous avez pu renseigner dans la config plus haut.<br>
Il ne reste plus qu'une chose, créer votre premier projet! ;)<br>
<br><br><br><br>
<h2>Utilisation d'Indefero par les membres (et vous, admin)</h2>
A ce stade vous disposez d'un environnement pour la gestion de vos projets <b>publique</b> et <b>privé</b>. Ce choix se fait lors de la création d'un projet avec Indefero par une petite case à cocher si vous souhaitez rendre ce dernier privé. A noter que seul les admins peuvent créer des projets.<br><br>
La première étape : la gestion des membres (pas vous pour le moment)! Le processus d'enregistrement de leur clé ne pouvant être automatique sur nos serveurs mutualisé, la marche à suivre est la suivante :<br><br>
<ul>
<li> Le nouveau membre (peb pour l'exemple) doit tout d'abord s'enregistrer sur Indefero.</li>
<li> Il doit ensuite générer une paire de clé RSA.<br>
> Pour Windows : je vous laisse chercher (regardez de ce coté <a href="http://www.aidoweb.com/tutoriaux/securiser-acces-ssh-paire-cles-rsa-generation-cles-application-serveur-646" target="clewindows">ICI</a>).<br>
> Pour OSX/Linux : Ouvrez un terminal et tapez la commande suivante :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ ssh-keygen -t rsa
</td></tr>
</table>
Tapez sur <b>entrer</b> à chaque question.<br>
<b style="color:red">REMARQUE :</b> Par la suite vous DEVREZ METTRE UNE PASSPHRASE pour des raisons de sécurité. Disons que pour la mise en place vous n'en mettrez pas, mais ça ne doit être que temporaire!</li>
<li> Il doit ensuite vous envoyer le fichier <b>id_rsa.pub</b> qui correspond à sa clé plubique qui va permettre de l'identifier auprès du serveur.</li>
<li> VOUS, créez un fichier <b>authorized_keys2</b> dans le dossier <b>/.ssh</b> de votre serveur et enregistrez sa clé de cette manière :<br>
<table bgcolor=black style="color:green">
<tr><td>
command="python /homez.xxx/yyy/www/indefero/scripts/gitserve.py <b style="color:red">peb</b>",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1[...]NbKf mac@peb
</td></tr>
</table>
<b style="color:red">REMARQUE :</b> ces lignes vont entre autre permettre la redirection automatique de l'adresse d'accès vers le repo git mais aussi de limiter les accès de cet utilisateur sur votre serveur. Tout ceci doit être sur une ligne (pas de saut de ligne pour un même utilisateur). Notez bien le nom de l'utilisateur Indefero présent dans ce fichier.<br><br>
Voila, en gros de votre coté (admin), vous devez simplement ajouter la clé publique des utilisateurs au fichier authorized_keys2.<br>
A présent ils peuvent jouer avec les repo git présent sur votre serveur UNIQUEMENT s'ils font partie du projet (vous pouvez le définir dans les paramètres du projet sous Indefero). Nous avons bien une notion de projet privé avec Indefero.<br><br>
Alors pour vous, admin de votre serveur, un petit problème se pose... Vous devez disposer de votre connexion ssh pour gérer votre serveur (vous en aurez besoins pour la création de projet git, on verra cela plus bas). Or la commande utilisée pour les membres empêche la connexion ssh pour des opérations autres qu'avec git... Mais elle permet aussi de faire automatiquement les redirections des adresse des repo git... Bref, vous devrez vous coltiner les adresses de repo super pas pratique^^.<br>
Ainsi ne mettez pas votre clé dans le fichier authorized_keys2 et sachez que pour vos opérations git vous devrez faire différement (nous allons voire cela ci-dessous).<br>
<br><br><br><br>
<h2>Création et utilisation d'un projet git</h2>
fiouuuu, enfin! nous y sommes arrivés :p<br><br>
<b style="color:red">REMARQUE :</b> ici je ne détaillerais pas les commandes git, ceci fera l'objet d'un futur tuto ;)<br><br>
Pour créer un projet git vous devez :<br>
<ul>
<li> Connectez vous en ssh à votre serveur et initialisez votre repo git:<br>
<table bgcolor=black style="color:green">
<tr><td>
ssh:/$ cd git<br>
ssh:/git$ mkdir plop.git<br>
ssh:/git$ cd plop.git<br>
ssh:/git/plop.git$ git init --bare
</td></tr>
</table>
<b style="color:red">REMARQUE :</b> En créant le repo de cette manière vous ne verrez pas les fichiers par la suite dans le dossier <b>plop.git</b>, ceci est tout à fait normal et correcte.<br><br></li>
<li> Créez ensuite le projet sous Indefero (avec le même nom bien évidement, ici <b>plop</b>, sans le .git)</li>
</ul>
<br>
C'est tout, votre repo est prêt!<br><br>
Maintenant <b>VOUS</b>, clonez le repo sur votre PC/MAC ainsi :
<table bgcolor=black style="color:green">
<tr><td>
$ git clone ssh://userssh@yyy.eu/homez.xxx/yyyy/git/plop.git<br>
</td></tr>
</table>
Créez vos fichiers, puis faites un push :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ git add .<br>
$ git commit -m "First commit"<br>
$ git push origin master<br>
</td></tr>
</table>
Et voila, vous verrez vos fichiers sous Indefero :)<br><br>
Dernière des dernières étapes, <b>un membre du projet</b> veut cloner le repo :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ git clone ssh://<b style="color:red">peb</b>@pebdev.eu/plop.git
</td></tr>
</table>
<b style="color:red">REMARQUE :</b> peb correspond au nom de l'utilisateur sous Indefero. Par ailleurs vous voyez ici l'intérêt de la redirection dont vous ne bénéficiez pas. L'accès est clairement mémorisable dans ce cas, beaucoup moins pour vous admin.<br>
<br>
Victoire! Indefero est à présent totalement fonctionnel sur votre hébergement mutualisé OVH, avec des notions d'utilisateurs, de projets privés et publiques, le tout avec une interface web bien partique!<br><br>
Dernière chose très importante, <b style="color:red">pensez bien à protéger l'ensemble d'Indefero par un htaccess</b>, c'est important pour éviter quelques petits soucis.<br><br>
Comme d'habitude, si vous avez des questions n'hésitez pas à les poser dans les commentaires! Pour ma part je vais aller reposer mes yeux fortement irrités par l'écriture de ce tuto^^<br>
<br><br><br>
Liens m'ayant fortement aidés :<br>
<ul>
<li><a href="http://www.siteduzero.com/tutoriel-3-318320-indefero-un-bug-tracker-tres-complet.html" target="sdz">Indefero, un bug tracker très complet</a></li>
<li><a href="http://forum.ovh.com/showthread.php?t=71543" target="ovh">Installion Indefero sur un plan PRO ou superieur</a></li>
</ul>
</p>[MAC OSX] Installation de votre câble USB<>Série sur MAC OSXurn:md5:14566cd68cd89cce17f4bc24918115f82011-05-08T17:17:00+01:00PEBDéveloppements ANDROID<p>
Il y avait un petit moment que je n'avais rien posté, alors on y retourne, mais tout doux hein :)<br>
Alors quoi de neuf? et bien un MAC BOOK :p<br><br>
En règle générale il n'y a pas de problème au niveau de l'installation des périphériques sous MAC OSX et je dois dire que j'ai étais agréablement surpris en temps que nouveau MAC user. Cependant il fallait une exception (:p), je parle de mes câbles USB<>Série. Je vous rassure, en 2min le problème va être réglé.<br><br>
Suivez le guide!
</p><p>
<br>
<center>
<img src="http://pebdev.eu/data/images/trendnet_tus9.jpg" alt="" width="50%" heigh="50%"/>
</center>
<br><br>
Pour commencer voici les deux câbles USB<>Série dont je dispose :
<ul>
<li>TREDNET TU-S9</li>
<li>BELKIN F5U103</li>
</ul>
<br><br><br>
<h2>Etape 1 : Installation des drivers</h2>
- Ne branchez pas votre câble. Si c'est déjà fait, débranchez le^^.<br>
- Téléchargez le driver suivant : <a href="http://pebdev.eu/data/telechargements/mac/PL2303_1.4.0.dmg">pl2303 1.4</a>.<br>
- Suivez les étapes pour l'installation, <u>mais arrêtez vous lorsque la fenêtre d'installation vous demande de redémarrer votre MAC.</u><br>
- Branchez alors votre câble USB<>Série.<br>
<br><br><br>
<h2>Etape 2 : Configuration de nos câbles</h2>
- Cliquez sur la <b>Pomme</b> de la barre du haut, puis sur <b>A propos de ce MAC</b> et <b>Plus d'infos</b>.<br>
- Allez dans la catégorie <b>USB</b>, puis cliquez sur un titre qui vous fait penser à votre câble (pour moi c'est <b>USB-Serial Controller D</b>).<br>
- Notez l'Identifiant du produit (PRODUCT ID) et l'Identifiant du fournisseur (VENDOR ID). Très important, si la valeur vous est indiqué en hexa (un affichage du genre 0x2303), pensez à la convertir en base décimale pour les deux valeurs.<br><br>
- Ouvrez un terminal et placez-vous dans le dossier suivant :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ cd /System/Library/Extensions/ProlificUsbSerial.kext/Contents/
</td></tr>
</table>
<br>
- Editez le fichier suivant :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ nano Info.plist
</td></tr>
</table>
<br>
- Cherchez les lignes suivantes et modifiez les valeurs en rouge par les vôtres :
<table bgcolor=black style="color:green">
<tr><td>
< key > 067B_2303 < /key ><br>
< dict ><br>
< key > CFBundleIdentifier < /key ><br>
< string > com.prolific.driver.PL2303 < /string ><br>
< key > IOClass < /key ><br>
< string > com_prolific_driver_PL2303 < /string ><br>
< key > IOProviderClass < /key ><br>
< string > IOUSBInterface < /string ><br>
< key > bConfigurationValue < /key ><br>
< integer > 1 < /integer ><br>
< key > bInterfaceNumber < /key ><br>
< integer > 0 < /integer ><br>
< key > idProduct < /key ><br>
< integer > <b style="color:red">8963</b> < /integer ><br>
< key > idVendor < /key ><br>
< integer > <b style="color:red">1659</b> < /integer ><br>
</dict><br>
</td></tr>
</table>
<br>
- Quittez (CTRL+X et y) puis fermez le terminal. Vous pouvez maintenant <b>Redémarrer</b>.
<br><br><br><br>
<h2>Etape 3 : Validation de l'installation</h2>
- Ouvrez votre terminal série favoris. Si vous n'en avez pas, je vous conseil <b>CoolTerm ou ZTerm</b> qui sont assez simpa (sur google vous trouverez les dernière version très facilement).<br>
- Dans le cas de <b>CoolTerm</b>, allez dans <b>Options</b> pour configurer votre communication uart.
- Branchez un bidule sur votre cable USB<>Série afin de le tester et normalement vous devriez avoir des chocapic :
<br><br>
<center>
<img src="http://pebdev.eu/data/images/coolterm0.png" alt="" width="90%" heigh="90%"/>
</center>
<br><br><br>
Si vous avez des soucis, n'hésitez pas à le signaler via les commentaires ;)
</p>[PS3] Mise en place d'un environnement de développement PS3/Linuxurn:md5:6e05fd1075e4838b7ea1195381a2159f2011-01-09T12:22:00+01:00PEBDéveloppements PS3<p>
En attendant qu'une <del>longue</del> très longue compilation se termine pour l'IGEP (un nouveau tuto en préparation^^), nous allons faire une petite pause avec la PS3... en compilant nos outils pour développer dessus :p
</p><p>
<br>
<center>
<img src="http://pebdev.eu/data/images/dev_ps3.jpg" alt="" />
</center>
<br><br>
Depuis que Geohot nous a sortie son CustomFirmware (CF) 3.55, nous pouvons désormais exécuter du code facilement sur la PS3.<br><br>
Afin que vous compreniez bien comment cela fonctionne, voici un petit rappel :
Geohot a ajouté SES clés de signature au XMB avec son Jailebreak. Ainsi, lorsque l'on compile un programme et que nous exécutons ses outils de signature, le programme va être signé avec SES clés. Lorsque l'on voudra installer les pkg et lancer les elf, la PS3 reconnaîtra alors la signature et ne considérera pas le programme comme étant "hostile". C'est pour cette raison, que tous les programmes compilés pour le CF de Geohot ne fonctionneront que sur son CF...<br><br>
Cependant, cela nous permet enfin d’exécuter notre code sur la PS3, ça reste donc la meilleur solution! :)<br><br>
Vous pourrez retrouver mon tuto sur l'installation de la chaine de compilation pour PS3 sur Xtreamlua :
<a href="http://www.xtreamlua.com/forums/viewtopic.php?f=150&t=5993" target="xtreamlua">TUTO</a>
<br><br>
Si vous avez des questions, n'hésitez pas ;)
<br>
</p>[IGEP v2][Angstrom] Construction d'Angstrom avec OpenEmbedded et Bitbakeurn:md5:5b6ad6be603efe6cc2f189431adbc6942010-12-04T07:55:00+01:00PEBDéveloppements ARM<p>
Après Android, nous allons tester une autre distribution orientée pour le monde de l'embarqué, Angstrom!<br>
L'utilisation d'OpenEmbedded et de BitBake n'aura plus de secrets pour vous ;)
</p><p>
<br>
<center>
<img src="http://pebdev.eu/data/images/angstrom.png" alt="" />
</center>
<br><br>
Angstrom est une distribution intéressante. Elle est légère, peut gourmande en ram et relativement simple à mettre en place. Si nous devions lui trouver un défaut, je ne pourrais en citer qu'un : le temps de construction de l'image rootfs extrêmement longue... Mais bon, après c'est le PC qui travaille, ce n'est donc pas vraiment un défaut^^.<br><br>
Au niveau des informations sur cette distribution, il n'y en a pas beaucoup...
Depuis peu, Archos s’intéresse à cette distribution pour ses tablettes, il est donc possible que les informations fleurissent petit à petit.<br>
C'est un projet issu du regroupement de plusieurs autres projets : OpenZaurus, OpenEmbedded et OpenSimpad. <br><br>
Voila pour les présentations. Je vous laisse le lien du site officiel : <a href="http://www.angstrom-distribution.org/" target="angs1">http://www.angstrom-distribution.org/</a>.<br><br>
<table bgcolor="black" style="color:red">
<tr><td>
Cet article fait appel à des notions vues dans les articles précédents. J'ai essayé de détailler au maximum, cependant certaines informations peuvent ne pas être ré-expliquées. Dans ce cas je vous conseil d’aller faire un petit tour dans la rubrique ARM ;)
</td></tr>
</table>
<br><br><br><br><br><br>
<h2><u>Informations sur la construction d'Angstrom</u></h2>
<br>
La construction de cette distribution se fait à l'aide de deux outils :<br>
<ul>
<li><b>OpenEmbedded :</b> c'est un regroupement de composants libre pouvant être utilisés pour un système embarqué. Une sorte de grosse bibliothèque de l'embarquée :)</li>
<li><b>BitBake :</b> c'est un exécuteur de tâches et un gestionnaire de metadata. Il permet de construire des packages en gérant les dépendances, la cross-compilation,... En gros, c'est le <b>make</b> pour OpenEmbedded (vulgarisation pour simplifier les choses).</li>
</ul>
Nous allons uniquement interagir avec ces deux outils, ce qui rend la construction simple.
<br><br><br><br><br><br>
<h2><u>Préparation de notre environnement de travail</u></h2>
<br>
Avant de commencer, nous devons installer quelques packages :<br>
<table bgcolor="black" style="color:green">
<tr><td>
$ apt-get install diffstat texi2html git cvs subversion gawk chrpath gcc g++ python-psyco
</td></tr>
</table>
<br>
Ensuite on se place dans notre dossier de travail habituel :<br>
<table bgcolor="black" style="color:green">
<tr><td>
$ cd /srv/nfs/angstrom/image-base/igep020/
</td></tr>
</table>
<br>
<br><br><br><br>
<h2><u>Installation des outils</u></h2>
<ul>
<li><h3>Installation de <b>BitBake</b></h3>
- Téléchargement de <b>BitBake</b> : <a href="http://pebdev.eu/data/telechargements/igep/bitbake-1.10.1.tar.gz" target="bitbake1">bitbake-1.10.1.tar.gz</a> (<a href="http://developer.berlios.de/projects/bitbake" target="bitbake">lien serveur</a>).<br>
- On créer nos dossiers de travail :<br>
<table bgcolor="black" style="color:green">
<tr><td>
// Création de dossiers<br>
$ mkdir -p build/conf<br>
$ mkdir -p bibake
</td></tr>
</table>
- On décompresse BitBake dans <b>bitbake/</b><br>
<table bgcolor="black" style="color:green">
<tr><td>
$ tar xfvz bitbake-1.10.1.tar.gz -C bitbake/
</td></tr>
</table>
<br>
</li>
<li><h3>Installation d'<b>OpenEmbedded</b></h3>
- On télécharge <b>OpenEmbedded</b> :<br>
<table bgcolor="black" style="color:green">
<tr><td>
$ git clone git://git.openembedded.org/openembedded
</td></tr>
</table>
Voila, c'est tout^^<br><br>
</li>
<li><h3>Configuration pour la construction d'images/packages</h3>
- On doit créer un fichier de configuration pour spécifier à <b>Bitbake</b> notre cible.<br>
Pour cela, suivez les étapes suivantes :<br>
<table bgcolor="black" style="color:green">
<tr><td>
// Copie du fichier de configuration de base :<br>
$ cp openembedded/conf/local.conf.sample build/conf/local.conf<br><br>
// Edition du fichier de configuration<br>
$ nano build/conf/local.conf<br><br>
//Modifiez les lignes suivantes<br>
- DL_DIR = "/srv/nfs/angstrom/image-base/igep020/sources"<br>
- BBFILES = "/srv/nfs/angstrom/image-base/igep020/openembedded/recipes/*/*.bb"<br>
- MACHINE = "igep0020"<br>
- DISTRO = "angstrom-2008.1"<br>
- Commentez la dernière ligne
</td></tr>
</table>
<br>
Quelques petites explications sur ces modifications.<br>
<ul>
<li>Pour connaitre les distributions possibles, vous pouvez faire un tour dans le dossier <b>openembedded/conf/distro/</b>. Les fichiers <b>.conf</b> représentent les différents distributions.</li>
<li>Pour connaitre les machines disponibles, suivez ce lien : <a href="http://gitorious.org/angstrom/openembedded/trees/org.openembedded.dev/conf/machine" target="lien1">http://gitorious.org/angstrom/openembedded/trees/org.openembedded.dev/conf/machine</a>.</li>
</ul>
<br>
Dernière chose, on configure les variables d'environnements :<br>
<table bgcolor="black" style="color:green">
<tr><td>
// Nos variables habituelles pour la cross-compilation<br>
$ export ARCH=arm<br>
$ export CROSS_COMPILE=/opt/codesourcery/bin/arm-none-linux-gnueabi-<br>
$ export PATH=/opt/codesourcery/bin/:$PATH<br><br>
// Variables pour BitBake<br>
$ export BBPATH=$/nfs/angstrom/image-base/igep020/stuff/angstrom-setup-scripts/build:/nfs/angstrom/image-base/igep020/stuff/angstrom-setup-scripts/sources/openembedded<br>
$ export PATH=/nfs/angstrom/image-base/igep020/stuff/angstrom-setup-scripts/sources/bitbake/bin:$PATH
</td></tr>
</table>
<table bgcolor="black" style="color:red">
<tr><td>
Pensez bien à les configurer à chaque nouvelle session.
</td></tr>
</table>
<br>
Comme nos variables commencent à devenir longue à taper, je vous conseil de créer un fichier qui permettra de les charger rapidement. Pour cela créer un fichier <b>.vars_bashrc</b> où vous souhaitez (le nom n'a pas d'importance), mettez toutes les variables d'environnement que vous souhaitez dedans.<br>
Pour le charger (pour la session), tapez la commande suivante :<br>
<table bgcolor="black" style="color:green">
<tr><td>
$ source .vars_bashrc
</td></tr>
</table>
</li>
</ul>
Voila, nous avons tous nos outils d'installés et configurés pour notre igep!<br>
Pensez bien à mettre à jour <b>BitBake</b> et <b>OpenEmbedded</b> de temps en temps (je vous rappel qu'avec git, pour mettre à jour, vous devez faire un <b>git pull</b>).<br>
<br><br><br><br>
<h2><u>Construction d'images/packages</u></h2><br>
Pour avoir la fameuse <b>rootfs d'Angstrom</b>, nous allons construire l'image à l'aide des outils précédements installés. Vous allez voir, c'est un jeu d'enfant :)<br><br>
Nous allons commencer par construire une image de base d'Angstrom (très légère, mais "console" uniquement). Pour cela, tapez la commande suivante dans votre terminal :<br>
<table bgcolor="black" style="color:green">
<tr><td>
$ MACHINE=igep0020 bitbake base-image
</td></tr>
</table>
<br>
<table bgcolor="black" style="color:red">
<tr><td>
ATTENTION : La construction m'a pris environ <b>24h</b>! Durant tout ce temps, le PC doit resté connecté à internet! Sachez le, le moindre package peut prendre plusieurs heures de construction! (exemple : nano = 9h).
</td></tr>
</table>
<br>
Si vous souhaitez construire une image avec une interface, tapez ceci :<br>
<table bgcolor="black" style="color:green">
<tr><td>
$ MACHINE=igep0020 bitbake x11-image
</td></tr>
</table>
<br>
En gros vous devez saisir <b>< nom_image_souhaitee >-image</b> ou alors uniquement <b>< package ></b>.<br>
Voila, il n'y a rien de plus à savoir pour la construction :)<br>
<br><br><br><br><br>
<h2><u>Test de la rootfs Angstrom</u></h2><br>
La première chose à faire et à ne surtout pas oublier, c'est la <b>configuration réseau du PC</b>, du <b>montage nfs</b>, du <b>serveur tftp</b> et d'<b>u-boot</b>.<br><br>
Pour ce qui est du PC : (en root)<br>
<table bgcolor="black" style="color:green">
<tr><td>
$ ifconfig eth0 192.168.254.10 netmask 255.255.255.0
</td></tr>
</table>
<br>
Pour le <b>NFS</b> ajoutez simplement les lignes suivantes au fichier <b>/etc/exports</b> :<br>
<table bgcolor="black" style="color:green">
<tr><td>
# Angstrom image-base<br>
/srv/nfs/angstrom/image-base/igep020/rootfs/ 192.168.254.254(rw,no_root_squash,no_subtree_check,sync)
</td></tr>
</table>
Il n'est pas utile de supprimer les autres lignes ;).<br><br>
On pense à relancer le serveur :<br>
<table bgcolor="black" style="color:green">
<tr><td>
$ /etc/init.d/nfs-kernel-server restart
</td></tr>
</table>
<br>
Pour le <b>tftp</b>, rien à faire. Pensez juste à mettre votre <b>uImage</b> (celle que vous avez utilisé pour BusyBox par exemple) dans le dossier :<br>
<b>/srv/tftp/angstrom/base-image/igep020/kernel/</b>.<br><br>
Pour uboot, lancez <b>putty</b>, allumez la carte et entrez dans le menu de <b>config u-boot</b>. Vérifiez ensuite les variables suivantes :<br>
<table bgcolor="black" style="color:green">
<tr><td>
nfs-boot=if ping ${serverip}; then run nfs-bootargs; tftp 0x80000000 ${distro}/${project}/${machine}/kernel/uImage; bootm; fi;<br><br>
nfs-bootargs=setenv bootargs ${bootargs-base} init=/init root=/dev/nfs nfsroot=${serverip}:/srv/nfs/${distro}/${project}/${machine}/rootfs ; run addip
</td></tr>
</table>
<br>
Si vous n'avez pas ces valeurs, je vous rappel la commande pour les modifier :<br>
<table bgcolor="black" style="color:green">
<tr><td>
$ setenv nfs-boot 'if ping ${serverip}; then run nfs-bootargs; tftp 0x80000000 ${distro}/${project}/${machine}/kernel/uImage; bootm; fi;'<br><br>
$ setenv nfs-bootargs 'setenv bootargs ${bootargs-base} init=/init root=/dev/nfs nfsroot=${serverip}:/srv/nfs/${distro}/${project}/${machine}/rootfs ; run addip'
</td></tr>
</table>
<br>
Voila! Tout est ok! Maintenant vous relancez la carte (par l'alimentation ou par un petit <b>run bootcmd</b> dans <b>u-boot</b>).<br><br>
Si vous avez compilé une <b>image de base</b>, vous obtenez ceci :<br>
<center>
<img src="http://pebdev.eu/data/images/anstrom_base.jpg" alt="" width="80%" heigth="80%"/>
</center>
<br>
<i>(Comment ça mon image est floue? et pas centrée? et bien...oui^^)</i>
<br><br>
Si vous avez compilé une <b>image x11</b>, vous obtenez ceci :<br>
<center>
<img src="http://pebdev.eu/data/images/angstrom_x11.png" alt="" width="80%" heigth="80%"/>
</center>
<br><br><br>
Nous avons terminé! Au cours de cet article, vous avez pu remarquer l'avantage majeur de cette distribution : sur quelques Mo vous avez une rootfs avec une interface graphique ultra légère! C'est une très bonne base de travail ;)<br>
Pour la rootfs "console" par contre le gain est beaucoup moins important. En effet, environ 24h de construction est peut être beaucoup pour un simple rootfs... Après c'est intéressant de savoir que cela existe.<br><br>
Si vous avez des questions, remarques ou autres, les com' ci-dessous sont là pour ça.
</p>[IGEP v2][BusyBox] Créez votre distributionurn:md5:e7b71f4a2f5d15a227a508776c0643d82010-11-22T14:21:00+01:00PEBDéveloppements ARM<p>
Allez, c'est parti! Aujourd'hui, nous allons créer notre distribution embarquée pour l'IGEP. L'avantage sera majeur : nous intégrerons uniquement ce que nous voulons.<br><br>
</p><p>
<br>
<center><img src="http://pebdev.eu/data/images/box-icone.png" alt="" /></center>
<br><br>
Dans cet article nous utiliserons un <b>montage NFS</b> et un <b>serveur tftp</b> pour faire nos tests. Je vous conseil donc très fortement de lire le post à ce sujet avant d'attaquer ce morceau (<a href="http://pebdev.eu/index.php?article19/igepv2-kernel-et-rootfs-via-tftp-et-nfs" target="peb24">[IGEPv2] Kernel et Rootfs via tftp et nfs</a>).<br><br>
Nous utiliserons aussi <b>Git</b>, un gestionnaire de version. Si vous ne l'avez pas, installez le :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ apt-get install git
</td></tr>
</table>
<br>
Nous aurons aussi besoin de la librairie <b>ncurses</b> pour disposer d'une interface plus conviviale lors des <b>menuconfig</b> :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ apt-get install libncurses5-dev
</td></tr>
</table>
<br><br><br><br>
<h2><u>Préparation de notre environnement de travail</u></h2>
<br>
On va commencer par le plus simple, créer nos dossiers. Comme dans l'article précédent, nous allons suivre cette hiérarchie de dossier :<br>
<b>/srv/tftp/pebdev-dist/image-base/igep020/kernel/<br>
/srv/nfs/pebdev-dist/image-base/igep020/rootfs/</b><br><br>
Nous devrons utiliser le Bourne Shell, si vous êtes sur Debian :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ dpkg-reconfigure dash
</td></tr>
</table>
Répondre <b>NON</b>.
<br><br><br><br><br><br>
<h2><u>Chaîne de compilation croisée</u></h2>
<br>
Nous allons compiler sur notre PC des fichiers qui devront être exécutés sur une plate-forme ARM. Nous ne pouvons donc pas utiliser le compilateur gcc classique. Si nous le faisons, les fichiers pourront être exécutés uniquement sur une plate-forme i386 (un PC). En effet, le compilateur va transformer un code source en une suite d'instructions compréhensible par la plate-forme cible. Voila pourquoi nous devons utiliser un compilateur croisé, et dans notre cas, pour une cible ARM.<br><br>
Notre choix se portera sur <b>CodeSourcery G++ Lite</b>. Ne vous posez pas de question sur le G++, c'est bien un compilateur C/C++ :)<br><br>
Lien du projet G++ : <a href="http://www.codesourcery.com/sgpp" target="peb25">CodeSourcery G++</a><br><br>
Commencez par le télécharger :
<ol>
<li> Allez sur la <a href="http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite" target="peb26">page de téléchargement</a>.</li>
<li> Sélectionnez <b>GNU/Linux</b>.</li>
<li> Téléchargez la dernière version.</li>
</ol>
Ensuite nous l'installons :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ chmod +x arm-2010q1-202-arm-none-linux-gnueabi.bin<br>
$ mkdir /opt/codesourcery<br>
$ chown peb /opt/codesourcery<br>
$ ./arm-2010q1-202-arm-none-linux-gnueabi.bin
</td></tr>
</table>
Rien de compliqué lors de l'installation. Notez juste que vous devez choisir une installation <b>Custom</b> pour définir le chemin d'installation <b>/opt/codesourcery/</b>.<br><br>
Maintenant nous allons tester l'installation :<br>
<table bgcolor=black style="color:green">
<tr><td>
//On met à jour <b><u>temporairement</u></b> la variable PATH<br>
$ export PATH=/opt/codesourcery/bin:$PATH<br><br>
//Si vous souhaitez visualiser le résultat<br>
$ echo PATH<br><br>
//On regarde la version du compilateur<br>
$ arm-none-linux-gnueabi-gcc -v
</td></tr>
</table>
Normalement vous devriez avoir un pavé de texte qui s'affiche, si ce n'est pas le cas, c'est qu'il y a un problème avec l'installation ou que votre variable PATH n'a pas été mise à jour correctement...<br><br>
<table bgcolor=black style="color:red">
<tr><td>
Si vous fermez le terminal, les modifications faites sur la variable PATH seront perdues, pensez à la remettre à jour.<br>
Sinon il existe une autre méthode plus rapide qui consiste à se loguer ainsi : <br>
<b>$ su - peb</b><br>
Dans ce dernier cas, la variable sera ajoutée toute seule :)
</td></tr>
</table>
<br><br>
<br><br><br>
<h2><u>Compilation d'un noyau de base</u></h2>
<br>
Attention aux âmes sensibles... On est entre nous, donc pour la préparation du noyau pour l'IGEP, on va bourrinner et en faire le strict minimum :p<br>
Par là, comprenez que nous allons récupérer les sources d'un noyau linux omap, mais qu'on va le compiler en utilisant une configuration déjà préparée. Nous toucherons éventuellement 2,3 paramètres, mais attention, pas plus! ;)<br><br>
Allez, on télécharge ce noyau omap qu'ISEE nous propose pour l'IGEP (<a href="http://git.igep.es/" target="peb31">http://git.igep.es/</a>). Pour cela on va cloner le repo avec git (attention ça prend du temps : ~20min pour moi.<b style="color:red">NE PAS ETRE EN ROOT</b>) :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ cd /srv/tftp/pebdev-dist/image-base/igep020/kernel/<br>
$ git clone git://git.igep.es/pub/scm/linux-omap-2.6.git
</td></tr>
</table>
<br>
La première étape après le téléchargement, c'est de bien choisir le noyau que l'on souhaite :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ cd linux-omap-2.6<br><br>
//On regarde les différentes versions<br>
$ git tag<br><br>
//On choisi la dernière version<br>
$ git checkout -b v2.6.35.9-0 v2.6.35.9-0<br>
</td></tr>
</table>
<br>
Juste avant, pour la compilation croisée, on doit configurer 2 variables :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ export ARCH=arm<br>
$ export CROSS_COMPILE=/opt/codesourcery/bin/arm-none-linux-gnueabi-
</td></tr>
</table>
Cela permet de renseigner notre cible et le compilateur à utiliser.<br><br>
Ensuite on charge la configuration pour notre carte. Pour cela on va chercher une configuration qui comporterait le mot <b>igep</b> :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ cd linux-omap-2.6<br>
$ make help | grep igep
</td></tr>
</table>
<br>
Et là on cherche dans le résultat un fichier de configuration qui pourrait aller pour notre carte igep... et ça tombe bien! il y a un fichier qui se nomme <b>igep0020_defconfig</b>! On va donc utiliser cette configuration :) <br><br>
Maintenant on charge le fichier de configuration :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ make PREFIX=/opt/codesourcery/bin/arm-none-linux-gnueabi- igep0020_defconfig
</td></tr>
</table>
On lance ensuite le menu de configuration :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ make PREFIX=/opt/codesourcery/bin/arm-none-linux-gnueabi- menuconfig
</td></tr>
</table>
A titre indicatif, ici on peut modifier la configuration du noyau. Bien sur nous, nous allons prendre soin de ne rien toucher, le fichier de configuration c'est chargé de tout ça^^<br><br>
Donc c'est parti, on peut compiler (~45min) :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ make PREFIX=/opt/codesourcery/bin/arm-none-linux-gnueabi- uImage modules
</td></tr>
</table>
<b>Note :</b> si à la fin de la compilation un message vous indique que l'<b>uImage</b> n'a pas pu être générée parce qu'il manque le package qui va bien (et dont je ne me souviens pas du nom^^⁾, installez le et retapez la commande précédente.<br><br>
Voila, nous avons notre noyau. Il se nomme <b>uImage</b> et se trouve dans :<br>
<b>/srv/tftp/pebdev-dist/image-base/igep020/kernel/linux-omap-2.6/arch/arm/boot/</b>.<br><br>
A noter aussi, le mot <b>modules</b> va nous permettre de générer les drivers que l'on pourra ajouter à la rootfs par la suite.<br><br>
<br><br><br><br><br>
<h2><u>Rootfs de base avec BusyBox</u></h2>
<br>
Nous avons un noyau, nous pouvons donc nous attaquer à la rootfs. Dans un premier temps, nous allons mettre le strict minimum de sorte à avoir un shell.<br>
Pour cela il existe un petit outils assez pratique : <b>BusyBox</b>.<br><br>
On le télécharge avec Git (<b style="color:red">NE PAS ETRE EN ROOT</b>), faites bien attention au chemin cible : <br>
<table bgcolor=black style="color:green">
<tr><td>
$ cd /srv/nfs/pebdev-dist/image-base/igep020/<br>
$ git clone git://git.busybox.net/busybox
</td></tr>
</table>
Si vous avez fermé votre terminal après la compilation du noyau, pensez bien à vous loguer correctement et à configurer les 2 variables pour la compilation :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ export ARCH=arm<br>
$ export CROSS_COMPILE=/opt/codesourcery/bin/arm-none-linux-gnueabi-
</td></tr>
</table>
On lance ensuite le menu de configuration :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ cd busybox/<br>
$ make PREFIX=/opt/codesourcery/bin/arm-none-linux-gnueabi- menuconfig
</td></tr>
</table>
Ensuite dans le menu <b>BusyBox Settings > Build Options</b>.<br>
Cochez la case (touche espace) : <b>[*] Build BusyBox as a static bianry</b><br>
Complétez aussi la ligne pour la cross-compilation : <b>(/opt/codesourcery/bin/arm-none-linux-gnueabi-) Cross Compiler prefix</b><br><br>
Nous allons aussi changer le chemin d'installation, pour cela revenez au menu principal, est allez dans <b>BusyBox Settings > Installation Options</b>.<br>
Pour l'option <b>BusyBox installation prefix</b> configurez le chemin suivant <b>../rootfs/</b>
<br><br>
Nous n'avons que cela à configurer. Faites donc <b>Exit</b> le nombre de fois qu'il faut pour quitter le menu. Lorsqu'on vous le demande, enregistrez la nouvelle configuration.<br><br>
Tout est prêt, nous pouvons compiler!
<table bgcolor=black style="color:green">
<tr><td>
$ make PREFIX=/opt/codesourcery/bin/arm-none-linux-gnueabi- install
</td></tr>
</table>
Nous avons notre <b>rootfs</b> dans <b>/srv/nfs/pebdev-dist/image-base/igep020/rootfs/</b>.<br><br>
Nous ajoutons les modules du noyau :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ cd /srv/tftp/pebdev-dist/image-base/igep020/kernel/linux-omap-2.6<br>
$ make PREFIX=/opt/codesourcery/bin/arm-none-linux-gnueabi- modules_install INSTALL_MOD_PATH=/srv/nfs/pebdev-dist/image-base/igep020/rootfs/
</td></tr>
</table>
<br>
Et enfin, pour terminer, nous ajoutons les noeuds de périphériques statiques. Pour cela nous utiliserons un petit programme que nous allons commencer par télécharger : <br>
<table bgcolor=black style="color:green">
<tr><td>
$ apt-get install makedev
</td></tr>
</table>
Maintenant on l'utilise :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ cd /srv/nfs/pebdev-dist/image-base/igep020/rootfs/<br>
$ mkdir dev<br>
$ cd dev/<br>
$ su root<br>
$ /sbin/MAKEDEV console<br>
$ /sbin/MAKEDEV fb0<br>
$ /sbin/MAKEDEV null<br>
$ /sbin/MAKEDEV std<br>
$ /sbin/MAKEDEV tty<br>
$ /sbin/MAKEDEV ttyS<br>
$ /sbin/MAKEDEV hd<br>
</td></tr>
</table>
<br>
Voila, notre rootfs est prête!
<br><br><br><br><br><br>
<h2><u>Test de la distribution par tftp et NFS</u></h2>
<br>
Si vous vous souvenez bien (cf. article précédent), la première chose à faire est de configurer le tftp et le nfs. Pour le tftp, nous n'avons rien à modifier sur le PC, par contre pour le nfs nous devons mettre à jour le chemin d'accès.<br><br>
Pour cela on édite le fichier <b>/etc/exports</b>, on commente le chemin qui pointe vers la rootfs d'Android et on ajoute la ligne suivante :<br>
<table bgcolor=black style="color:green">
<tr><td>
# pebdev-dist image-base<br>
/srv/nfs/pebdev-dist/image-base/igep020/rootfs/ 192.168.254.254(rw,no_root_squash,no_subtree_check,sync)
</td></tr>
</table>
On redémarre le serveur nfs pour terminer :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ /etc/init.d/nfs-kernel-server restart
</td></tr>
</table>
<br>
On pense aussi à configurer l'adresse IP du PC :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ ifconfig eth0 192.168.254.10
</td></tr>
</table>
<br>
Maintenant on doit reconfigurer <b>uboot</b>. On branche la carte, on interrompt la séquence d'autoboot grâce à la liaison série (si cela ne vous parle pas, allez faire un tour sur l'article précédent), et on change les variables d'environnement qu'il faut :<br>
<table bgcolor=black style="color:green">
<tr><td>
//On change le nom de la distribution<br>
$ setenv distro 'pebdev-dist'<br><br>
//On change l'accès au noyau<br>
$ setenv nfs-boot 'if ping ${serverip}; then run nfs-bootargs; tftp 0x80000000 ${distro}/${project}/${machine}/kernel/linux-omap-2.6/arch/arm/boot/uImage; bootm; fi;'<br><br>
//On sauvegarde les variables<br>
$ saveenv
</td></tr>
</table>
<br>
Voila! Tout est prêt! On lance la commande <b>run bootcmd</b> à uboot pour voir le résultat...<br><br>
<center>
<img src="http://pebdev.eu/data/images/busybox_rootfs.jpg" alt="" width="90%" height="90%"/>
</center>
<br>
Si vous branchez un clavier et que vous appuyez sur une touche vous aurez accès au shell.<br><br>
Nous verrons dans un prochain article comment rendre notre roofs plus conviviale.<br><br>
Si vous avez des questions, comme d'habitude, n'hésitez pas à utiliser les com ci-dessous ;)<br><br>
</p>[IGEP v2] Kernel et Rootfs via tftp et nfsurn:md5:14e1000b8f86fc3964edd10accc731ca2010-11-21T13:42:00+01:00PEBDéveloppements ARM<p>
Après avoir réussi à démarrer Android sur l'IGEP à partir de la microSD, nous allons mettre en place un environnement de développement pour éviter d'avoir à manipuler sans cesse la microSD. Pour cela nous allons utiliser un serveur tftp pour que la carte récupère le noyau à partir du PC, et un montage nfs pour que la carte charge la rootfs directement à partir de notre dossier de travail.<br>
</p><p>
<br><br>
<center><img src="http://pebdev.eu/data/images/nfs_mount.png" alt="" /></center>
<br><br>
Remarque : Il est fortement conseillé de lire l'article précédent : <a href="http://pebdev.eu/index.php?article18/igepv2-kernel-et-rootfs-sur-minisd" targe="peb23">LIEN</a>.<br><br>
Commençons par installer les packages :
<table bgcolor=black style="color:green">
<tr><td>
$ apt-get install tftpd nfs-kernel-server
</td></tr>
</table>
<br>
On a va ensuite définir notre environnement de travail (hiérarchie de nos dossiers) ainsi :<br>
<b>
/ srv / tftp /android / image-base / igep020 / kernel /<br>
/ srv / nfs /android / image-base / igep020 / rootfs /
</b><br><br>
Pourquoi de cette manière? Afin de suivre la structure suivante :<br>
<b>[distribution] / [Projet] / [plate-forme] /</b><br><br>
Respectez cette structure, c'est important pour la suite ;)<br><br>
<b style="color:red"><u>Important :</u> pour éviter les Access violation dans le futur, et après avoir créé ces dossiers, revenez dans <i>/srv</i> et changez les accès :</b><br>
<table bgcolor=black style="color:red">
<tr><td>
$ chmod -R 777 tftp<br>
$ chmod -R 777 nfs
</td></tr>
</table>
<br><br><br><br><br>
<h2><u>Mise en place du serveur tftp</u></h2>
<br>
Rien de particulier à faire pour configurer le serveur tftp, sachez juste que le fichier de configuration est le suivant : <b>/etc/inetd.conf</b>. Si vous souhaitez le modifier n'oubliez pas de taper la commande <b>killall -HUP inetd</b> après.<br><br>
Vous pouvez copier le noyau Android fourni par ISEE dans le dossier <b>tftp/android/...</b> (<a href="http://pebdev.eu/data/telechargements/igep/uImage-2.6.29-igep0020-20100407145010.bin">uImage-2.6.29-igep0020-20100407145010.bin</a>).<br><br>
<table bgcolor=black style="color:red">
<tr><td>
Note : pensez bien à renommer le noyau uImage-2.6.29-igep0020-20100407145010.bin en uImage (pensez bien à enlever le .bin), sans quoi uboot ne trouvera pas l'image.
</td></tr>
</table>
<br>
Pour le fichier <b>boot.ini</b> ne le copiez pas comme dans l'article précédent, je vous expliquerai plus bas le pourquoi ;)<br><br>
Voila, pour le serveur tftp c'est bon!
<br><br><br><br><br><br>
<h2><u>Mise en place du montage NFS</u></h2>
<br>
Nous allons éditer le fichier de configuration NFS.<br>
Éditez le fichier<b>/etc/exports</b> et ajoutez la ligne suivante :<br>
<table bgcolor=black style="color:green">
<tr><td>
# Android image-base<br>
/srv/nfs/android/image-base/igep020/rootfs 192.168.254.254(rw,no_root_squash,no_subtree_check,sync)
</td></tr>
</table>
<br>
Remarque : l'adresse IP 192.168.254.254 correspond à l'IP par défaut de l'IGEP.<br><br>
On redémarre le serveur nfs pour terminer :<br>
<table bgcolor=black style="color:green">
<tr><td>
/etc/init.d/nfs-kernel-server restart
</td></tr>
</table>
Vous pouvez extraire (en root) la <b>rootfs</b> dans le dossier <b>nfs/android/...</b> (<a href="http://pebdev.eu/data/telechargements/igep/android-image-eclair-2.1-update1-20100407145010.tar.bz2" target="peb22">android-image-eclair-2.1-update1-20100407145010.tar.bz2</a>) :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ tar xvfj android-image-eclair-2.1-update1-20100407145010.tar.bz2 -C /srv/nfs/android/image-base/igep020/rootfs/
</td></tr>
</table>
Le NFS est prêt.
<br><br><br><br><br><br>
<h2><u>Configuration d'u-boot</u></h2>
<br>
U-boot permet à la carte de démarrer le système. Ainsi il est intéressant de connaître 2,3 commandes importantes pour interagir avec lui.<br><br>
Vous vous souvenez du fichier <b>boot.ini</b> que nous avons créé dans l'article précédent? Vous deviez vous demander à quoi servait ce fichier? Et bien il permet de paramétrer uboot de façon "temporaire", afin de modifier certains paramètres. Si nous ne souhaitons pas utiliser ce fichier (notre cas ici), nous devons alors paramétrer directement uboot.<br><br>
Lorsque vous branchez la carte, vous pouvez voir via la liaison série un message vous invitant à appuyer sur une touche pour stopper le processus de boot. Faites le, vous accéderez ainsi aux entrailles de uboot ;)<br><br>
<i>Juste à titre indicatif, je suis passé de minicom à putty pour l'interface série. La raison de ce changement est l'impossibilité d'envoyer des commandes avec minicom. En gros, si vous appuyez sur une touche et que le compteur continu son avancé folle, c'est que vous rencontrez le même problème que moi. Deux solutions s'offrent à vous, soit vous trouvez une solution avec minicom, soit vous utilisez putty :p</i><br><br>
Si vous souhaitez passer aussi sur putty, pensez à aller dans <b>Terminal</b>, de cocher <b>implicit CR in every LF</b>, puis <b>Force On</b> pour les options <b>Line discipline</b>.<br>
Minute astuce : pour copier dans putty faites un clic droit, pour coller faites un clic gauche-droit.<br><br>
Revenons en à U-boot. Voici les principales commandes :<br>
<ul>
<li><b>printenv</b> : permet d'afficher les variables 'environnement.</li>
<li><b>setenv</b> : permet de changer la valeur d'une variable. </li>
<li><b>run</b> : lance ce que vous indiquez après cette commande.</li>
<li><b>saveenv</b> : sauvegarde les changements.</li>
<li><b>help</b> : aide d'u-boot</li>
</ul>
Maintenant intéressons nous aux variables plus en détail.<br>
<ul>
<li>La variable <b>bootcmd</b>, permet de définir la séquence de boot. Si vous faites un <b>printenv bootcmd</b> vous obtiendrez l'ordre de boot suivant :<br>
<table bgcolor=black style="color:green">
<tr><td>
bootcmd=run mmc-boot; run nfs-boot; run onenand-boot
</td></tr>
</table>
<br>
Si vous souhaitez intervertir la microSD et le NFS par exemple, vous pouvez utiliser la commande <b>setenv</b> :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ setenv bootcmd 'run nfs-boot; run mmc-boot; run onenand-boot'
</td></tr>
</table>
</li>
<li>La variable <b>serverip</b> définit l'adresse IP du serveur (sérieux? :p), nous retiendrons donc que l'adresse ip du pc devra être <b>192.168.254.10</b>.<br><br>
</li>
<li>Les variables <b>distro</b>, <b>project</b> et <b>machine</b> doivent vous rappeler quelque chose... En effet, je vous en ai parlé au tout début de cet article! Elles vont définir le chemin d'accès pour le montage nfs et pour accéder au serveur tftp.<br><br>
Nous allons donc les modifier pour que cela puisse coller avec ce qu'on a défini plus haut :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ setenv distro 'android'<br>
$ setenv project 'image-base'<br>
$ setenv machine 'igep020'<br>
</td></tr>
</table>
<br>
</li>
<li>Les variables <b>nfs-bootargs</b> et <b>nfs-boot</b> contiennent le chemin d'accès nfs et tftp. Il faut donc les adapter à notre environnement. La variable <b>bootargs-base</b> paramètre divers périphériques, nous la reprendrons aussi pour adapter l'affichage : <br><br>
Initialement nous avons :<br>
<table bgcolor=black style="color:green">
<tr><td>
bootargs-base=mem=512M console=ttyS2,115200n8 console=tty0 omapfb.mode=dvi:1024x768MR-16@60<br><br>
nfs-bootargs=setenv bootargs ${bootargs-base} root=/dev/nfs nfsroot=${serverip}:/srv/nfs/${distro}/${project}/${machine} ; run addip<br><br>
nfs-boot=if ping ${serverip}; then run nfs-bootargs; tftp 0x80000000 ${distro}/${project}/${machine}/uImage; bootm; fi;<br>
</td></tr>
</table>
<br>
Nous les remplaçons par :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ setenv bootargs-base 'mem=512M console=ttyS2,115200n8 console=tty0 omapfb.mode=dvi:1024x768MR-16@60 omap-dss.def_disp=dvi'<br><br>
$ setenv nfs-bootargs 'setenv bootargs ${bootargs-base} init=/init root=/dev/nfs nfsroot=${serverip}:/srv/nfs/${distro}/${project}/${machine}/rootfs ; run addip'<br><br>
$ setenv nfs-boot 'if ping ${serverip}; then run nfs-bootargs; tftp 0x80000000 ${distro}/${project}/${machine}/kernel/uImage; bootm; fi;'<br>
</td></tr>
</table>
<b><u>Remarque :</u></b> dans <b>nfs-bootargs</b> nous devons aussi ajouter l'accès init (init=/init). Lorsque nous travaillons avec la microSD, ce paramètre était dans le fichier <b>boot.ini</b>.<br><br>
Voila, on a tout bien configuré, on peut sauvegarder :<br>
<table bgcolor=black style="color:green">
<tr><td>
$ saveenv
</td></tr>
</table>
</li>
</ul>
Voila! Maintenant vous êtes capable de, soit d'utiliser un fichier <b>boot.ini</b>, soit de paramétrer directement <b>uboot</b> :)
<br><br><br><br><br><br>
<h2><u>Lancement d'android</u></h2>
<br>
On configure la carte Ethernet du PC :
<table bgcolor=black style="color:green">
<tr><td>
$ ifconfig eth0 192.168.254.10
</td></tr>
</table>
<br>
<table bgcolor=black style="color:red">
<tr><td>
Cet adressage est valable pour la session actuelle, si vous redémarrez votre PC n'oubliez pas de reconfigurer l'adresse IP d'eth0! Si vous souhaitez fixer définitivement l'adresse IP, modifiez le fichier <i>/etc/network/interfaces</i>.
</td></tr>
</table>
Ensuite on pense à bien retirer la microSD (dans le cas où vous n'avez pas touché la variable bootcmd d'uboot) et on y va, on envoi un petit <b>run bootcmd</b> à uboot (via putty ou minicom) pour démarrer le système ou alors si vous aviez éteint votre IGEP, et bien vous la rebranchez^^<br><br>
On observe ce qui se passe. Première étape, la récupération du noyau par tftp par la carte :
<table bgcolor=black style="color:green">
<tr><td>
Using smc911x-0 device<br>
TFTP from server 192.168.254.10; our IP address is 192.168.254.254<br>
Filename 'android/image-base/igep020/kernel/uImage'.<br>
Load address: 0x80000000<br>
Loading: #################################################################<br>
#################################################################<br>
#################################################################<br>
#################################################################<br>
#################################################################<br>
#################################################################<br>
##########################<br>
done<br>
</td></tr>
</table>
Ici la récupération c'est bien déroulée. Si jamais cela ne fonctionne pas :<br>
<ul>
<li><b>Erreur (1) [Fichier non trouvé] :</b> la configuration du chemin d'accès est mauvaise, soit dans uboot, soit dans le fichier de config de tftp. Comme vous n'avez théoriquement pas modifié la config de tftp, le problème vient de uboot ;).</li>
<li><b>Erreur (2) [Access Violation] :</b> Faites un petit <b>chmod -R 777 /srv</b>.</li>
</ul>
Ensuite au tour du montage NFS. Les lignes importantes sont les suivantes :<br>
<table bgcolor=black style="color:green">
<tr><td>
IP-Config: Complete:<br>
device=eth0, addr=192.168.254.254, mask=255.255.255.0, gw=192.168.254.10,<br>
host=192.168.254.254, domain=, nis-domain=(none),<br>
bootserver=192.168.254.10, rootserver=192.168.254.10, rootpath=<br>
Looking up port of RPC 100003/2 on 192.168.254.10<br>
Looking up port of RPC 100005/1 on 192.168.254.10<br>
VFS: Mounted root (nfs filesystem) on device 0:13.<br>
</td></tr>
</table>
La dernière ligne nous informe que le montage NFS a été correctement fait.<br>
Si ce n'est pas le cas, le problème vient soit du fichier de config du nfs, soit de uboot.<br><br>
Dernière étape, le chargement du <b>rootfs</b>. Là, pas de secret. Si vous avez un <b>kernel panic</b> c'est que vous avez fait une bourde soit dans la configuration d'<b>uboot</b>, soit dans la mise en place des fichiers...<br><br><br>
Si tout se passe bien vous devriez obtenir ça sur la sortie HDMI :<br><br>
<center><img src="http://pebdev.eu/data/images/chargement_android.jpg" alt="" /></center>
<br><br>
Si vous avez un soucis, une remarque ou autres, les commentaires ci-dessous sont là pour ça ;)
<br><br>
</p>