<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le Blog du grand loup Zeur</title>
	<atom:link href="http://blog.gaetan-grigis.eu/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gaetan-grigis.eu</link>
	<description>Le blog qui vous fait connaitre ce que vous savez déjà</description>
	<lastBuildDate>Fri, 05 Mar 2010 20:51:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Compiler android sur ubuntu 9.10</title>
		<link>http://blog.gaetan-grigis.eu/android/compiler-android-sur-ubuntu-9-10/</link>
		<comments>http://blog.gaetan-grigis.eu/android/compiler-android-sur-ubuntu-9-10/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 20:51:54 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[eclair]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=711</guid>
		<description><![CDATA[Bijour à tous &#8230;
Après quelques semaines sans article, il me fallait du lourd pour affirmer ma virilité mon côté geek &#8230; j&#8217;ai donc décidé d&#8217;écrire un petit truc sur android parce que j&#8217;ai rien d&#8217;autre à foutre et que je voulais voir tourner mes proc à plein régime &#8230;


Pour ce faire il vous faudra :

de [...]]]></description>
			<content:encoded><![CDATA[<p>Bijour à tous &#8230;<br />
Après quelques semaines sans article, il me fallait du lourd pour affirmer <del datetime="2010-03-04T20:53:16+00:00">ma virilité</del> mon côté geek &#8230; j&#8217;ai donc décidé d&#8217;écrire un petit truc sur android<del datetime="2010-03-04T20:53:16+00:00"> parce que j&#8217;ai rien d&#8217;autre à foutre</del> et que je voulais voir tourner mes proc à plein régime &#8230;<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/compilation-android.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/compilation-android.png" alt="" title="compilation-android" width="104" height="218" class="aligncenter size-full wp-image-729" /></a><br />
<span id="more-711"></span><br />
Pour ce faire il vous faudra :</p>
<ol>
<li>de la patience</li>
<li>de la patience</li>
<li>de la patience</li>
<li>de la patience</li>
<li>un ordi (facultatif si vous pouvez compiler de tête &#8230; pour ma part j&#8217;y arrive pas encore :s)</li>
<li>4Go de ram + un bon CPU</li>
<li>linux</li>
</ol>
<p>Il vous faudra aussi installer une machine java très ancienne (1.5) à <a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-1.5.0_21-oth-JPR@CDS-CDS_Developer">télécharger ici</a>. Installez-là en mode utilisateur simple dans un dossier dédié à la compilation d&#8217;android, chez moi : ~/Android/.</p>
<p>Ensuite, le super script, les quelques variables au début du fichier sont à modifier, le reste est automatisé.<br />
Ce que fait le script :</p>
<ol>
<ul>Téléchargement du fichier repo</ul>
<ul>Récupération/Mise à jour du dépot d&#8217;android (très lourd, il faut 1 heures pour dl 2Giga de données)</ul>
<ul>Compilation des sources d&#8217;android (tout les binaires, &#8230; c&#8217;est très long)</ul>
<ul>et c&#8217;est tout!!</ul>
</ol>
<p>Faudra quand même attendre 3 ou 4 heures lors de la première compilation/récupération des fichiers&#8230; </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">JDK15=</span><span class="sy0">/</span>home<span class="sy0">/</span><span class="re1">$USER</span><span class="sy0">/</span>Documents<span class="sy0">/</span>Android<span class="sy0">/</span>jdk1<span class="nu0">.5</span>.0_21<span class="sy0">/</span>bin</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">BINDIR=</span><span class="sy0">/</span>home<span class="sy0">/</span><span class="re1">$USER</span><span class="sy0">/</span>Documents<span class="sy0">/</span>Android</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">MYDROID=</span><span class="sy0">/</span>home<span class="sy0">/</span><span class="re1">$USER</span><span class="sy0">/</span>Documents<span class="sy0">/</span>Android<span class="sy0">/</span>mydroid</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">TYPE_MACHINE=</span>`<span class="kw2">uname</span> -m`</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">PATH=</span><span class="re1">$JDK15</span>:<span class="re1">$PATH</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#Need 1.5 https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-1.5.0_21-oth-JPR@CDS-CDS_Developer</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">##############DON&#39;T TOUCH BELOW&#8230; OR SUFFER HUNDREDS PAINS &#8230; MUUAAHAHAHAHAHAHAHAHAAHAHHAAAA</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Lancement de SIACAKDLM&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Système d&#39;install automatisé de compilation d&#39;android pour kikoolol dépressif en 1337n355 mode&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Temps requis pour arriver à la fin de ce script après execution : 2h00&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Installation des fichiers requis &#8230;&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> apt-get -yqq <span class="kw2">install</span> git-core gnupg sun-java6-jdk <span class="kw2">flex</span> <span class="kw2">bison</span> gperf libsdl-dev ncurses-dev libesd0-dev libwxgtk2<span class="nu0">.6</span>-dev build-essential <span class="kw2">zip</span> curl libncurses5-dev zlib1g-dev valgrind</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re1">$TYPE_MACHINE</span> == <span class="st0">&quot;x86_64&quot;</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Zetes en 64bits &#8230; on en rajoute une couche <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> &quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> apt-get -yqq <span class="kw2">install</span> ia32-libs lib32z1-dev lib32ncurses5-dev gcc-multilib g++-multilib lib32readline5-dev</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -f <span class="re1">$BINDIR</span><span class="sy0">/</span>repo <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Récupération du fichier repo&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">wget</span> -qO <span class="re1">$BINDIR</span><span class="sy0">/</span>repo http:<span class="sy0">//</span>android.git.kernel.org<span class="sy0">/</span>repo <span class="sy0">&amp;&amp;</span> <span class="kw2">chmod</span> +x <span class="re1">$BINDIR</span><span class="sy0">/</span>repo</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -d <span class="re1">$MYDROID</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Création du dossier $MYDROID&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">mkdir</span> <span class="re1">$MYDROID</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> <span class="re1">$MYDROID</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -d <span class="re1">$MYDROID</span><span class="sy0">/</span>prebuilt<span class="sy0">/</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$BINDIR</span><span class="sy0">/</span>repo init -u git:<span class="sy0">//</span>android.git.kernel.org<span class="sy0">/</span>platform<span class="sy0">/</span>manifest.git</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Mise à jour du dépôt &#8230; ça prend du temps &#8230; beaucoup de temps :s&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$BINDIR</span><span class="sy0">/</span>repo <span class="kw2">sync</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">export</span> <span class="re2">CCOMPILER=</span><span class="re1">$MYDROID</span><span class="sy0">/</span>prebuilt<span class="sy0">/</span>linux-x86<span class="sy0">/</span>toolchain<span class="sy0">/</span>arm-eabi<span class="nu0">-4.4</span><span class="nu0">.0</span><span class="sy0">/</span>bin<span class="sy0">/</span>arm-eabi-</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> <span class="re1">$MYDROID</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">source</span> build<span class="sy0">/</span>envsetup.<span class="kw2">sh</span> <span class="sy0">&amp;&amp;</span> <span class="kw2">sed</span> -n -e <span class="st0">&quot;s/^add_lunch_combo//gp&quot;</span> vendor<span class="sy0">/*/</span>vendorsetup.<span class="kw2">sh</span> <span class="sy0">&amp;&amp;</span> lunch generic-eng <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> -j4</div>
</li>
</ol>
</div>
<p>Les fichiers de sorties de trouvent dans : $MYDROID/out/target/product/generic (les .img contiennent l&#8217;os , les logiciels et tout le bazard qu&#8217;embarque android).<br />
Voilà, laisser mouliner, puis tester-le en machine virtuelle avant l&#8217;install sur votre phone (en n&#8217;oubliant pas bien sûr de faire une sauvegarde <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p>Pour tester votre système android fraichement compilé, il vous suffit d&#8217;utiliser AVD (fournit avec le SDK de dev de google), d&#8217;aller dans le dossier .android/avd/le nom d&#8217;une machine générée/, et d&#8217;y mettre votre image système (et vos autres img si ça vous chante).</p>
<p>Ce qui m&#8217;a donné la version éclair pour mon émulateur :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/Capture.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/Capture.png" alt="" title="Capture" width="331" height="493" class="aligncenter size-full wp-image-728" /></a></p>
<p>Quelques liens sympa (<del datetime="2010-03-04T21:22:03+00:00">dont je me suis grandement inspirés</del>, que j&#8217;ai plagiés) :</p>
<ol>
<li>[EN]Explicatif sur le <a href="http://benno.id.au/blog/2007/11/13/android-under-the-hood">fonctionnement d&#8217;android</a></li>
<li>Article plus poussé en français <a href="http://www.unixgarden.com/index.php/embarque/les-dessous-dandroid">d&#8217;unixgarden</a></li>
<li><a href="http://www.android-inside.com/2009/12/comment-acceder-a-android-market-sur-emulateur/">L&#8217;astuce pour tester</a> son system.img</li>
<li>le <a href="http://wiki.cyanogenmod.com/index.php/How_to_build_a_kernel_port">tuto de compilation</a> de cyanogen + packaging pour aller plus <del datetime="2010-03-05T20:44:41+00:00">haut</del> loin</li>
</ol>
<p>La compilation et l&#8217;installation d&#8217;un cyanogenmod sera pour plus tard <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/" rel="bookmark" title="Permanent Link: Mon Application Android pour les horaires de la CTS">Mon Application Android pour les horaires de la CTS</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/installer-un-donuts-sur-son-g1-cyanogenmod/" rel="bookmark" title="Permanent Link: Installer un donuts sur son G1 (CyanogenMod)">Installer un donuts sur son G1 (CyanogenMod)</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/creer-un-paquet-pour-les-ppa/" rel="bookmark" title="Permanent Link: Créer un paquet pour les ppa">Créer un paquet pour les ppa</a></li><li><a href="http://blog.gaetan-grigis.eu/ubuntu/les-source-de-google-chrome/" rel="bookmark" title="Permanent Link: Les sources de Google Chrome">Les sources de Google Chrome</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/cpp/mon-repository-edyuk-vidalia-w_scan/" rel="bookmark" title="Permanent Link: Mon repository &#8230; Edyuk, vidalia, w_scan, &#8230;">Mon repository &#8230; Edyuk, vidalia, w_scan, &#8230;</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/android/compiler-android-sur-ubuntu-9-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modifier les headers de firefox (user-agent, &#8230;)</title>
		<link>http://blog.gaetan-grigis.eu/systeme/modifier-les-headers-de-firefox-user-agent/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/modifier-les-headers-de-firefox-user-agent/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 20:27:39 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[fake]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[header]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=718</guid>
		<description><![CDATA[Plop à vous cher visiteurs &#8230;
Un truc tout naze aujourd&#8217;hui pour faire revivre un peu mon blog &#8230;, modifier les headers de son navigateur web, pour cacher des infos du genre :

User-Agent (mettre n&#8217;importe quoi)
Via
Forwarded-For (le fbi ou un truc pour fausser les stats du site ^^)
Cookie (mettre en truc bidon &#8230; peut être sympa [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à vous cher visiteurs &#8230;</p>
<p>Un truc tout naze aujourd&#8217;hui pour faire revivre un peu mon blog &#8230;, modifier les headers de son navigateur web, pour cacher des infos du genre :</p>
<ol>
<ul>User-Agent (mettre n&#8217;importe quoi)</ul>
<ul>Via</ul>
<ul>Forwarded-For (le fbi ou un truc pour fausser les stats du site ^^)</ul>
<ul>Cookie (mettre en truc bidon &#8230; peut être sympa pour des sql injection/xss ça marche parfois)</ul>
<ul>Referer (genre mettre l&#8217;url de son site pour faire de la pub^^).</ul>
</ol>
<p><span id="more-718"></span><br />
Pour ce faire, il suffit d&#8217;installer cette <a href="https://addons.mozilla.org/en-US/firefox/addon/967">add-on</a>, ce qui donne accès à cette interface (après ajout de certaines informations) :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/header.png"><img class="aligncenter size-full wp-image-722" title="header" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/header.png" alt="" width="584" height="161" /></a></p>
<p>Si vous êtes en manque d&#8217;inspiration niveau headers, y&#8217;a une bonne liste <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">ici</a>.</p>
<p>Pour vérification sur certain site ça donne ce genre de truc :</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/server-info.png"><img class="aligncenter size-full wp-image-723" title="server-info" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/server-info.png" alt="" width="770" height="651" /></a><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/cacher-ip.png"></a></p>
<p>Certain sites croient même que les Forwarded-For donne la véritable adresse ip &#8230; ce qui dans mon cas &#8230; est loin d&#8217;être le cas <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (et certain forum les prennent comme ip à bannir ^^).</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/cacher-ip.png"><img class="aligncenter size-full wp-image-719" title="cacher-ip" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/cacher-ip.png" alt="" width="402" height="215" /></a>Donc voilà &#8230; pour pourrir les stats d&#8217;un site, faire planter des appli web mal programmées (quoique pour ça on peut trouver de meilleurs add-ons), &#8230; cette add-ons peut être assez sympa <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Sinon, en tapant about:config dans firefox, on peut déjà modifier les user-agents et d&#8217;autres trucs &#8230;</p>
<hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/tor-proxy-et-randomiser-le-choix-des-serveurs-de-sortie/" rel="bookmark" title="Permanent Link: Tor Proxy et randomiser le choix des serveurs de sorties">Tor Proxy et randomiser le choix des serveurs de sorties</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/la-rc-de-firefox-bientot-dans-les-depot-dhardy/" rel="bookmark" title="Permanent Link: La RC de Firefox bientot dans les depots d&#8217;hardy">La RC de Firefox bientot dans les depots d&#8217;hardy</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/mon-apprentissage-de-python-avec-ogame/" rel="bookmark" title="Permanent Link: Mon apprentissage de python avec Ogame ^^">Mon apprentissage de python avec Ogame ^^</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/automatiser-la-recuperation-et-la-compilation-du-kernel-et-de-son-patch-grsec/" rel="bookmark" title="Permanent Link: Automatiser la récupération et la compilation du kernel et de son patch GrSec">Automatiser la récupération et la compilation du kernel et de son patch GrSec</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/installer-la-derniere-version-de-firefox-et-firebug/" rel="bookmark" title="Permanent Link: Installer la dernière version de firefox et firebug">Installer la dernière version de firefox et firebug</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/modifier-les-headers-de-firefox-user-agent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mise en place d&#8217;un portknocking pour limiter les ports accessibles sur le net</title>
		<link>http://blog.gaetan-grigis.eu/systeme/mise-en-place-dun-portknocking-pour-limiter-les-ports-accessibles-sur-le-net/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/mise-en-place-dun-portknocking-pour-limiter-les-ports-accessibles-sur-le-net/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 20:14:20 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[netfilter]]></category>
		<category><![CDATA[portknocking]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=701</guid>
		<description><![CDATA[Hello &#8230; 
Protéger des services non-public (type ssh) d&#8217;être accédés par n&#8217;importe qui ça peut être assez utile (pour éviter les connexions intempestives pour la prise d&#8217;information, tentative de login/bruteforce &#8230;), le tout sans avoir à déclarer d&#8217;ip, &#8230;
On peut utiliser pour cela du portknocking, le but étant de mettre en place une séquence de [...]]]></description>
			<content:encoded><![CDATA[<p>Hello &#8230; </p>
<p>Protéger des services non-public (type ssh) d&#8217;être accédés par n&#8217;importe qui ça peut être assez utile (pour éviter les connexions intempestives pour la prise d&#8217;information, tentative de login/bruteforce &#8230;), le tout sans avoir à déclarer d&#8217;ip, &#8230;</p>
<p>On peut utiliser pour cela du <a href="http://www.portknocking.org/">portknocking</a>, le but étant de mettre en place une séquence de &laquo;&nbsp;toc toc qui est là&nbsp;&raquo; qui permettra ensuite d&#8217;ouvrir la porte, et si la séquence n&#8217;est pas bonne &#8230; ^^).<br />
<span id="more-701"></span><br />
Pour debian/ubuntu on peut utiliser le soft <a href="http://www.zeroflux.org/projects/knock">knockd</a>, qui est assez simple à mettre en place.</p>
<p>Pour l&#8217;installer :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">apt-get <span class="kw2">install</span> knockd</div>
</li>
</ol>
</div>
<p>Pour le configurer, il faut modifier le fichier /etc/knockd.conf :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>options<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; logfile = <span class="sy0">/</span>var<span class="sy0">/</span>log<span class="sy0">/</span>knockd.log</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>openSSH<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; sequence &nbsp; &nbsp;= <span class="nu0">7000</span>,<span class="nu0">8000</span>,<span class="nu0">9000</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; seq_timeout = <span class="nu0">10</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; tcpflags &nbsp; &nbsp;= syn</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">command</span> &nbsp; &nbsp; = <span class="sy0">/</span>usr<span class="sy0">/</span>sbin<span class="sy0">/</span>iptables -A INPUT -s <span class="sy0">%</span>IP<span class="sy0">%</span> -j ACCEPT</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>closeSSH<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; sequence &nbsp; &nbsp;= <span class="nu0">9000</span>,<span class="nu0">8000</span>,<span class="nu0">7000</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; seq_timeout = <span class="nu0">10</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; tcpflags &nbsp; &nbsp;= syn</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">command</span> &nbsp; &nbsp; = <span class="sy0">/</span>usr<span class="sy0">/</span>sbin<span class="sy0">/</span>iptables -D INPUT -s <span class="sy0">%</span>IP<span class="sy0">%</span> -j ACCEPT</div>
</li>
</ol>
</div>
<p>Et autoriser le lancement du &laquo;&nbsp;daemon&nbsp;&raquo; dans /etc/default/knockd, puis (re)démarrer le service :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">/</span>etc<span class="sy0">/</span>init.d<span class="sy0">/</span>knockd restart</div>
</li>
</ol>
</div>
<p>Dans ce cas (c&#8217;est la config par défaut), il faudra lancer 3 paquets TCP dans l&#8217;ordre, d&#8217;abord sur le port 7000, puis 8000 et enfin 9000 pour ouvrir le port 22, et pour le fermer, on fait la sequence inverse &#8230;</p>
<p>Les &laquo;&nbsp;fonctions&nbsp;&raquo; bash que l&#8217;on peut utiliser pour ouvrir les ports (que l&#8217;on peut mettre dans le .bashrc) : </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">function</span> opssh <span class="br0">&#123;</span> telnet ipserver <span class="nu0">7000</span><span class="sy0">&amp;</span>sleep <span class="nu0">1</span> <span class="sy0">&amp;&amp;</span>telnet ipserver <span class="nu0">8000</span><span class="sy0">&amp;</span>sleep <span class="nu0">2</span> <span class="sy0">&amp;&amp;</span>telnet ipserver <span class="nu0">9000</span><span class="sy0">&amp;</span> <span class="kw2">sleep</span> <span class="nu0">4</span> <span class="sy0">&amp;&amp;</span> <span class="kw2">killall</span> telnet <span class="sy0">&amp;&amp;</span> <span class="kw3">return</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">function</span> clssh <span class="br0">&#123;</span> telnet ipserver <span class="nu0">9000</span><span class="sy0">&amp;</span>sleep <span class="nu0">1</span> <span class="sy0">&amp;&amp;</span>telnet ipserver <span class="nu0">8000</span><span class="sy0">&amp;</span>sleep <span class="nu0">2</span> <span class="sy0">&amp;&amp;</span>telnet ipserver <span class="nu0">7000</span><span class="sy0">&amp;</span> <span class="kw2">sleep</span> <span class="nu0">4</span> <span class="sy0">&amp;&amp;</span> <span class="kw2">killall</span> telnet <span class="sy0">&amp;&amp;</span> <span class="kw3">return</span>; <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Il suffira de lancer opssh pour ouvrir le port pour notre ip, et clssh pour fermer la connexion.<br />
A noter que l&#8217;on peut changer la commande iptables (pour utiliser des redirections sur différent ports/ips selon les séquences, super utile si l&#8217;on a plusieurs serveurs en local derrière une NAT, &#8230;).</p>
<p>Pour des idées de redirections (à mettre dans les commandes) : </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">/</span>sbin<span class="sy0">/</span>iptables -t nat -A PREROUTING -p tcp &#8211;dport <span class="nu0">22</span> -s <span class="sy0">%</span>IP<span class="sy0">%</span> -j DNAT &#8211;to-destination <span class="nu0">1.3</span><span class="nu0">.3</span><span class="nu0">.7</span> <span class="co0">#redirige le traffic en direction du port 22 sur l&#39;ip 1.3.3.7</span></div>
</li>
</ol>
</div>
<p>Deux Notes :<br />
1- Pour que cela ai un intêret, il faut mettre la &laquo;&nbsp;policy&nbsp;&raquo; du firewall en DENY</p>
<p>2- <strong>Une idée d&#8217;utilisation :</strong></p>
<p>Pour protéger votre serveur SSH (par exemple) sans avoir à utiliser de séquences particulière (utilisant du telnet/ou un client de portknock), vous pouvez mettre la séquence sur le port 22 (genre 3 ou 4 syn tcp avant d&#8217;ouvrir la connexion) comme ça lors d&#8217;un syn scan il faudra le lancer plusieurs fois dans un cours intervalle pour ouvrir le port (c&#8217;est donc peu probable que la personne fassent la séquence et ouvre le port). Et lors des autres type de scan &#8230; comme c&#8217;est pas du syn, ça ne s&#8217;ouvre pas ^^.<br />
Et pour fermer l&#8217;accès, il suffira d&#8217;une seule séquence avec le flag FIN sur le port 22. (Une fois une connexion SSH lancé il n&#8217;y a plus de syn de lancé, tous ce fait en stream et se termine par un FIN).</p>
<p>Ce qui donne la conf suivante : </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>openSSH<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sequence &nbsp; &nbsp;= <span class="nu0">22</span>,<span class="nu0">22</span>,<span class="nu0">22</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; seq_timeout = <span class="nu0">15</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">command</span> &nbsp; &nbsp; = <span class="sy0">/</span>sbin<span class="sy0">/</span>iptables -A INPUT -s <span class="sy0">%</span>IP<span class="sy0">%</span> -p tcp &#8211;dport <span class="nu0">22</span> -j ACCEPT</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; tcpflags &nbsp; &nbsp;= syn</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>closeSSH<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sequence &nbsp; &nbsp;= <span class="nu0">22</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; seq_timeout = <span class="nu0">15</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">command</span> &nbsp; &nbsp; = <span class="sy0">/</span>sbin<span class="sy0">/</span>iptables -D INPUT -s <span class="sy0">%</span>IP<span class="sy0">%</span> -p tcp &#8211;dport <span class="nu0">22</span> -j ACCEPT</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; tcpflags &nbsp; &nbsp;= fin</div>
</li>
</ol>
</div>
<p>Voilà ^^.</p>
<hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/mettre-en-place-un-serveur-tor-quest-ce-que-ca-bouffe/" rel="bookmark" title="Permanent Link: Mettre en place un serveur TOR &#8230; qu&#8217;est-ce que ça bouffe ??">Mettre en place un serveur TOR &#8230; qu&#8217;est-ce que ça bouffe ??</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/acl-avec-grsecurity2/" rel="bookmark" title="Permanent Link: ACL avec GRSecurity2">ACL avec GRSecurity2</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/acces-restreint-sur-certain-ports-dans-le-temps/" rel="bookmark" title="Permanent Link: Accès restreint sur certain ports dans le temps">Accès restreint sur certain ports dans le temps</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/dedie-premiere-choses-a-faire-apres-linstall/" rel="bookmark" title="Permanent Link: Dédié &#8230; premiere choses à faire après l&#8217;install">Dédié &#8230; premiere choses à faire après l&#8217;install</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/iptables-quelques-trucs-sympa/" rel="bookmark" title="Permanent Link: Iptables : quelques trucs sympa">Iptables : quelques trucs sympa</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/mise-en-place-dun-portknocking-pour-limiter-les-ports-accessibles-sur-le-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Limiter les droits d&#8217;un utilisateur sur Debian/Ubuntu (lshell)</title>
		<link>http://blog.gaetan-grigis.eu/systeme/limiter-les-droits-dun-utilisateur-sur-debianubuntu-lshell/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/limiter-les-droits-dun-utilisateur-sur-debianubuntu-lshell/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 20:21:49 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[droits]]></category>
		<category><![CDATA[limitation]]></category>
		<category><![CDATA[lshell]]></category>
		<category><![CDATA[restriction]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[utilisateurs]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=697</guid>
		<description><![CDATA[Plop à tous &#8230;.
Lorsque l&#8217;on doit partager/administrer une machine, on a souvent peur que les individus fassent de belles boulettes sur la machine en question (surtout si l&#8217;accès est partagé entre plusieurs utilisateurs).
Une technique consisterait à faire un chroot via SSH (si ça vous tente ^^ mais c&#8217;est super long).
Ou passer par un truc du [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230;.</p>
<p>Lorsque l&#8217;on doit partager/administrer une machine, on a souvent peur que les individus fassent de belles boulettes sur la machine en question (surtout si l&#8217;accès est partagé entre plusieurs utilisateurs).</p>
<p>Une technique consisterait à faire un chroot via <a href="http://www.debian.org/doc/manuals/securing-debian-howto/ap-chroot-ssh-env.fr.html">SSH</a> (si ça vous tente ^^ mais c&#8217;est super long).</p>
<p>Ou passer par un truc du genre dans /etc/ssh/sshd_config :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">Subsystem sftp internal-sftp</div>
</li>
<li class="li1">
<div class="de1">Match user nomUser</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ChrootDirectory <span class="sy0">/</span>home<span class="sy0">/</span>nomUser</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;X11Forwarding no</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AllowTcpForwarding no</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ForceCommand internal-sftp</div>
</li>
</ol>
</div>
<p>Qui bloque la plupart des commandes et n&#8217;autorise que le sftp &#8230;</p>
<p>Pour les admins flemmards, il existe une solution : <a href="http://lshell.ghantoos.org/">lshell</a>, on peut choper un .deb sur le site et une fois installé, il n&#8217;y a pas grand chose à faire :</p>
<p>Modifier le fichier /etc/lshell.conf (assez facile à comprendre), avec des paramètres du genre :<br />
Pour les commandes autorisées :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">allowed &nbsp; &nbsp; &nbsp; &nbsp; : <span class="br0">&#91;</span><span class="st0">&#39;ls&#39;</span>,<span class="st0">&#39;echo&#39;</span>,<span class="st0">&#39;cd&#39;</span>,<span class="st0">&#39;ll&#39;</span>,<span class="st0">&#39;svn&#39;</span>,<span class="st0">&#39;vi&#39;</span>,<span class="st0">&#39;rm&#39;</span><span class="br0">&#93;</span></div>
</li>
</ol>
</div>
<p>Pour kiker l&#8217;utilisateur après un certain nombre d&#8217;erreurs :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">warning_counter : <span class="nu0">2</span></div>
</li>
</ol>
</div>
<p>dans ce cas, après 2 erreurs, la connection SSH est coupée.</p>
<p>On peut chrooter un utilisateur :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">path &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: <span class="br0">&#91;</span><span class="st0">&#39;/var/www/&#39;</span><span class="br0">&#93;</span></div>
</li>
</ol>
</div>
<p>Pour obliger un utilisateur à utiliser ce shell, il y a 2 cas :<br />
On modifie un utilisateur :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">usermod &#8211;shell <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>lshell nomUser</div>
</li>
</ol>
</div>
<p>On créer un utilisateur</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">adduser nomUser &#8211;shell <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>lshell nomUser</div>
</li>
</ol>
</div>
<p>Et voilà &#8230; connectez vous avec un utilisateur &laquo;&nbsp;lshellé&nbsp;&raquo; (pour ma part chrooté et limité aux commandes &laquo;&nbsp;allowed&nbsp;&raquo; plus haut) :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">You are <span class="kw1">in</span> a limited shell.</div>
</li>
<li class="li1">
<div class="de1">Type <span class="st0">&#39;?&#39;</span> or <span class="st0">&#39;help&#39;</span> to get the list of allowed commands</div>
</li>
<li class="li1">
<div class="de1">kikoo:~$ </div>
</li>
<li class="li1">
<div class="de1">kikoo:~$ <span class="kw2">ls</span></div>
</li>
<li class="li1">
<div class="de1">index.php &nbsp;license.txt &nbsp;robots.txt &nbsp;svnup.php &nbsp;system</div>
</li>
<li class="li1">
<div class="de1">kikoo:~$ <span class="kw2">cat</span> <span class="sy0">/</span>etc<span class="sy0">/</span><span class="kw2">ssh</span><span class="sy0">/</span>sshd_config</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">***</span> forbidden path -<span class="sy0">&gt;</span> <span class="st0">&quot;/etc/ssh/sshd_config&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">***</span> You have <span class="nu0">0</span> joker<span class="br0">&#40;</span>s<span class="br0">&#41;</span> left, before getting kicked out.</div>
</li>
<li class="li1">
<div class="de1">This incident has been reported.</div>
</li>
<li class="li1">
<div class="de1">kikoo:~$ svn up</div>
</li>
<li class="li1">
<div class="de1">À la révision <span class="nu0">12</span>.</div>
</li>
<li class="li1">
<div class="de1">kikoo:~$ <span class="kw3">echo</span> <span class="st0">&quot;LOL&quot;</span></div>
</li>
<li class="li1">
<div class="de1">LOL</div>
</li>
<li class="li1">
<div class="de1">kikoo:~$ <span class="kw3">echo</span> <span class="st0">&quot;LOL&quot;</span> <span class="sy0">&gt;</span> <span class="sy0">/</span>etc<span class="sy0">/</span><span class="kw2">ssh</span><span class="sy0">/</span>sshd_config</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">***</span> forbidden synthax -<span class="sy0">&gt;</span> <span class="st0">&quot;echo &quot;</span>LOL<span class="st0">&quot; &gt; /etc/ssh/sshd_config&quot;</span></div>
</li>
<li class="li1">
<div class="de1">- Kicked out -</div>
</li>
<li class="li1">
<div class="de1">Connection to <span class="nu0">1.3</span><span class="nu0">.3</span><span class="nu0">.7</span> closed.</div>
</li>
</ol>
</div>
<p>Voilà &#8230; bonne administration <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/non-classe/hadopi-pas-quen-france/" rel="bookmark" title="Permanent Link: HADOPI pas qu&#8217;en France ??">HADOPI pas qu&#8217;en France ??</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/primary-domain-controller-sous-linux/" rel="bookmark" title="Permanent Link: Primary Domain Controller sous Linux &#8230;">Primary Domain Controller sous Linux &#8230;</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/configurer-un-serveur-smtp-et-cacher-sa-banniere-exim4/" rel="bookmark" title="Permanent Link: Configurer un serveur SMTP et cacher sa bannière (Exim4)">Configurer un serveur SMTP et cacher sa bannière (Exim4)</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/vivre-dangeureusement-sur-ubuntu-ou-pas-visudo/" rel="bookmark" title="Permanent Link: Vivre dangeureusement sur ubuntu ou pas (visudo)">Vivre dangeureusement sur ubuntu ou pas (visudo)</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/tentative-de-hack-quand-les-kikoolols-attaquent/" rel="bookmark" title="Permanent Link: Tentative de Hack &#8230; quand les kikoolols attaquent!!!">Tentative de Hack &#8230; quand les kikoolols attaquent!!!</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/limiter-les-droits-dun-utilisateur-sur-debianubuntu-lshell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mise en place d&#8217;iSCSI pour le partage de données</title>
		<link>http://blog.gaetan-grigis.eu/systeme/administration/mise-en-place-discsi-pour-le-partage-de-donnees/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/administration/mise-en-place-discsi-pour-le-partage-de-donnees/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 21:37:23 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[iscsi]]></category>
		<category><![CDATA[nfs]]></category>
		<category><![CDATA[partage]]></category>
		<category><![CDATA[réseau]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=686</guid>
		<description><![CDATA[plopinou &#8230;
Petit tuto rapide sur la mise en place d&#8217;un serveur et d&#8217;un client iSCSI sur linux &#8230; Alors c&#8217;est quoi l&#8217;iSCSI ?? c&#8217;est un peu comme un partage de disque en réseau du style SMB ou NFS &#8230; sauf que c&#8217;est plus rapide (c&#8217;était téléphoné  ). C&#8217;est du SCSI encapsulé sur IP pas [...]]]></description>
			<content:encoded><![CDATA[<p>plopinou &#8230;</p>
<p>Petit tuto rapide sur la mise en place d&#8217;un serveur et d&#8217;un client iSCSI sur linux &#8230; Alors c&#8217;est quoi l&#8217;iSCSI ?? c&#8217;est un peu comme un partage de disque en réseau du style SMB ou NFS &#8230; sauf que c&#8217;est plus rapide (c&#8217;était téléphoné <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ). C&#8217;est du SCSI encapsulé sur IP pas de surcouche RPC (comme pour NFS).<br />
<span id="more-686"></span><br />
Niveau performance vis-à-vis du NFS ça donne ça (tiré de cet <a href="http://technomagesinc.com/papers/ip_paper.html" target="_blank">article</a>) :</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/ip_paper_08.gif"><img class="aligncenter size-full wp-image-687" title="ip_paper_08" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/ip_paper_08.gif" alt="" width="473" height="118" /></a>En français (pour ceux qui n&#8217;aime pas l&#8217;anglais et qui ne veulent pas tout lire), les performances en écriture sont supérieurs à 20% et en lecture à 400%.</p>
<p>Un petit point négatif par rapport à du NFS ou du SMB, on ne peut pas partager de dossiers en particulier, c&#8217;est soit un disque ou un fake disque  (via dd &#8230; où qu&#8217;il est déééédéééé ??).</p>
<p>Côté serveur la manip (très simple) :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> apt-get <span class="kw2">install</span> iscsitarget</div>
</li>
</ol>
</div>
<p>Si l&#8217;on ne veut pas partager un disque, on peut se créer un disque de 10Go :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">dd</span> <span class="re2">if=</span><span class="sy0">/</span>dev<span class="sy0">/</span>zero <span class="re2">of=</span>fs.iscsi.disk <span class="re2">bs=</span>1M <span class="re2">count=</span><span class="nu0">10000</span></div>
</li>
</ol>
</div>
<p>Ensuite on ouvre le fichier /etc/ietd.conf et on y met les lignes suivantes pour un &laquo;&nbsp;fake&nbsp;&raquo; dd :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">Target iqn<span class="nu0">.2010</span><span class="nu0">-01</span>:fs.iscsi.disk</div>
</li>
<li class="li1">
<div class="de1">&nbsp;Lun <span class="nu0">0</span> <span class="re2">Path=</span><span class="sy0">/</span>path<span class="sy0">/</span>to<span class="sy0">/</span>disk<span class="sy0">/</span>fs.iscsi.disk,<span class="re2">Type=</span>fileio</div>
</li>
</ol>
</div>
<p>Pour un le partage d&#8217;un disque dur complet :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">Target iqn<span class="nu0">.2010</span><span class="nu0">-01</span>:sdb2</div>
</li>
<li class="li1">
<div class="de1">&nbsp;Lun <span class="nu0">0</span> <span class="re2">Path=</span><span class="sy0">/</span>dev<span class="sy0">/</span>sdb2,<span class="re2">Type=</span>fileio</div>
</li>
</ol>
</div>
<p>Le iqn.2010-02:&#8230; est arbitraire, on peut mettre ce que l&#8217;on veut, il faut juste que ça ait une logique si l&#8217;on en a plusieurs pour les retrouver après &#8230; (pour ma part : iqn.année-mois, certain rajoute le ndd)</p>
<p>Une fois terminé, pour vérifier que tout est bon (on redémarre le serveur iSCSI) :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> <span class="sy0">/</span>etc<span class="sy0">/</span>init.d<span class="sy0">/</span>iscsitarget restart</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">cat</span> <span class="sy0">/</span>proc<span class="sy0">/</span>net<span class="sy0">/</span>iet<span class="sy0">/</span>volume</div>
</li>
</ol>
</div>
<p>Le cat vous renverra quelque chose qui ressemble à :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">tid:<span class="nu0">1</span> name:iqn<span class="nu0">.2010</span><span class="nu0">-01</span>:sdb2</div>
</li>
<li class="li1">
<div class="de1">&nbsp;lun:<span class="nu0">0</span> state:<span class="nu0">0</span> iotype:fileio iomode:wt path:<span class="sy0">/</span>media<span class="sy0">/</span>disque<span class="sy0">/</span>fs.iscsi.disk</div>
</li>
</ol>
</div>
<p>Coté client maintenant :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> apt-get <span class="kw2">install</span> open-iscsi</div>
</li>
</ol>
</div>
<p>Pour découvrir les services disponible sur le serveur :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> iscsiadm &#8211; -mode discovery &#8211; -<span class="kw3">type</span> sendtargets &#8211; -portal ip-serveur</div>
</li>
</ol>
</div>
<p>Qui peut retourner un truc du genre :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">ip-serveur:<span class="nu0">3260</span>,<span class="nu0">1</span> iqn<span class="nu0">.2010</span><span class="nu0">-01</span>:sdb2</div>
</li>
</ol>
</div>
<p>Enfin, pour se connecter, on réutilise le iqn récupéré :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> iscsiadm &#8211; -mode node &#8211; -targetname iqn<span class="nu0">.2010</span><span class="nu0">-01</span>:sdb2 &#8211; -portal ip-serveur &#8211; -<span class="kw2">login</span></div>
</li>
</ol>
</div>
<p>Qui va renvoyer :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">Logging <span class="kw1">in</span> to <span class="br0">&#91;</span>iface: default, target: iqn<span class="nu0">.2010</span><span class="nu0">-01</span>:sdb2, portal: ip-serveur,<span class="nu0">3260</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">Login to <span class="br0">&#91;</span>iface: default, target: iqn<span class="nu0">.2010</span><span class="nu0">-01</span>:sdb2, portal: ip-serveur,<span class="nu0">3260</span><span class="br0">&#93;</span>: successful</div>
</li>
</ol>
</div>
<p>Attention, le disque monté n&#8217;est peut être pas formaté (dans le cas de l&#8217;utilisation de dédé), sinon on peut vérifier que le disque est bien monté via un fdisk -l (et le formater si besoin est)</p>
<p>Pour ce déconnecter :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> iscsiadm &#8211; -mode node &#8211; -targetname iqn<span class="nu0">.2010</span><span class="nu0">-01</span>:sdb2 &#8211; -portal ip-serveur &#8211; -<span class="kw3">logout</span></div>
</li>
</ol>
</div>
<p>et voilà, avec ça vous pourrez déjà utiliser votre disque partagé, cela dit, il est possible de restreindre les accès par login/mdp, ip, &#8230;</p>
<p>Plus d&#8217;info (liens) :</p>
<ul>
<li>Le tuto plus complet <a href="http://www.unixgarden.com/index.php/administration-systeme/ubuntuserveur-iscsi" target="_blank">d&#8217;unix garden</a></li>
<li>Un client iSCSI pour <a href="http://www.microsoft.com/downloads/details.aspx?familyid=12cb3c1a-15d6-4585-b385-befd1319f825&amp;displaylang=en" target="_blank">windows</a></li>
<li>Plus d&#8217;info sur le fonctionnement <a href="http://fr.wikipedia.org/wiki/ISCSI" target="_blank">d&#8217;iSCSI</a></li>
</ul>
<hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/mettre-en-place-un-serveur-tor-quest-ce-que-ca-bouffe/" rel="bookmark" title="Permanent Link: Mettre en place un serveur TOR &#8230; qu&#8217;est-ce que ça bouffe ??">Mettre en place un serveur TOR &#8230; qu&#8217;est-ce que ça bouffe ??</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/acl-avec-grsecurity2/" rel="bookmark" title="Permanent Link: ACL avec GRSecurity2">ACL avec GRSecurity2</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/des-nouvelles-de-2gwvs/" rel="bookmark" title="Permanent Link: Des nouvelles de 2gwvs ^^">Des nouvelles de 2gwvs ^^</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/partage-de-fichiers-en-ecriture-sur-protocole-http/" rel="bookmark" title="Permanent Link: Partage et ecriture de fichiers sur protocole HTTP">Partage et ecriture de fichiers sur protocole HTTP</a></li><li><a href="http://blog.gaetan-grigis.eu/ubuntu/cle-tnt-cinergy-xs-em2882-et-ibex/" rel="bookmark" title="Permanent Link: Clé TNT Cinergy XS (em2882) et Ibex">Clé TNT Cinergy XS (em2882) et Ibex</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/administration/mise-en-place-discsi-pour-le-partage-de-donnees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De l&#8217;USB en grillade ?? Destruction de périphériques USB à la volées</title>
		<link>http://blog.gaetan-grigis.eu/securite/de-lusb-en-grillade-destruction-de-peripherique-usb-a-la-volee/</link>
		<comments>http://blog.gaetan-grigis.eu/securite/de-lusb-en-grillade-destruction-de-peripherique-usb-a-la-volee/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 22:26:08 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[destruction]]></category>
		<category><![CDATA[griller]]></category>
		<category><![CDATA[usb]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=676</guid>
		<description><![CDATA[Plopinou &#8230;
ATTENTION : Cette méthode détruit purement et simplement tout périphériques USB branchés sur le port USB qui a été inversé. Vous devez savoir ce que vous faites, tout en sachant que vous êtes seul responsable de vos actes  .
Parfois on a besoin d&#8217;empêcher l&#8217;utilisation de périphériques USB sur son ordinateur, dans le cas [...]]]></description>
			<content:encoded><![CDATA[<p>Plopinou &#8230;</p>
<p><span style="color: #ff0000;">ATTENTION : Cette méthode détruit purement et simplement tout périphériques USB branchés sur le port USB qui a été inversé. Vous devez savoir ce que vous faites, tout en sachant que vous êtes seul responsable de vos actes <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</span></p>
<p>Parfois on a besoin d&#8217;empêcher l&#8217;utilisation de périphériques USB sur son ordinateur, dans le cas des PC en entreprises, certain SI n&#8217;hésite pas à boucher les ports USB avec de la pâte à modeler/colle, &#8230;</p>
<p><span id="more-676"></span></p>
<p>Une autre solution consiste à inverser les switchs connectés à la carte mère pour les périphériques USB en façade provoquant un court-circuit sur le périphérique USB (On pourrait bien sûr ne pas connecter le switch aux connecteurs, empêchant tout simplement la connexion du périphérique, mais là n&#8217;est pas la question). Cette technique est très dissuasive (car la personne ne connectera son périphérique USB qu&#8217;une seul fois &#8230; ça peut être marrant comme blague pour un collègue &#8230; à part si il branche son IPhone dessus xD).</p>
<p>Mais ça peut aussi permettre de détruire très rapidement des données stockés sur tout support USB (détruisant le support USB avec &#8230; pratique pour Hadopi et compagnie).</p>
<p>La manip :</p>
<p>Suivant les cartes mères l&#8217;endroit peut changer, mais les connecteurs ne changent pas trop de forme.<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/usb-motherboard.gif"></a><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/fusb.jpg"><img class="aligncenter size-full wp-image-680" title="fusb" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/fusb.jpg" alt="" width="750" height="563" /></a></p>
<p>En inversant le switch sur le connecteur, vous inverserez le voltage et le sens des données partagées, la plupart des périphériques USB étant mal conçu, aucune sécurité n&#8217;a été mise en place pour éviter la surchauffe en cas d&#8217;inversion des connexions, grillant le périphérique de façon quasi-instantanée (si le périphérique est solide, vous ne vous rendrez compte de rien, à part que le périphérique ne fonctionne plus, dans le cas contraire, le périphérique fondra (son connecteur plutôt) et vous sentirez la douce odeur d&#8217;une grillade USB ^^).</p>
<p>Un exemple de switch USB qui se plug sur le connecteur de la carte mère en photo (ci-dessus).</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/switch.jpg"><img class="aligncenter size-full wp-image-681" title="switch" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/switch.jpg" alt="" width="130" height="109" /></a></p>
<p>Pour comprendre la chose de façon plus technique :</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/usb-motherboard.gif"><img title="usb-motherboard" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/usb-motherboard.gif" alt="" width="296" height="270" /></a></p>
<div>L&#8217;inversion du switch doit ce faire dans le sens vertical (en suivant le schéma) :</div>
<div>
<ul>
<li>le 1 se trouvera en 7, le 3 en 5, le 5 en 3 et le 7 en1 (le 9 n&#8217;étant pas connecté).</li>
<li>le 2 se trouvera en 8, le 4 en 6, le 6 en 4 et le 8 en 2.</li>
<li>le 10 n&#8217;est pas à déplacer (généralement il est indépendant du switch).</li>
</ul>
</div>
<div>Et hop voilà &#8230; ça peut toujours servir d&#8217;avoir un destructeur de périphérique USB sur son ordi <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , par contre il ne faudra pas l&#8217;oublier lorsque vous voudrez récupérer les données d&#8217;une clé USB.</div>
<div><strong>Note 1</strong> : Il peut être dangeureux de brancher un périphérique USB détruit par cette méthode sur un ordinateur, dans certain cas (si le connecteur a fondu par exemple), la carte mère peut faire un reboot (pas trop grave), mais elle peut aussi griller (ça peut être super sympa dans le cadre de l&#8217;ACTA quand les douanes auront le droit de lire le contenu de périphériques USB ^^ mieux qu&#8217;un virus informatique &#8230;).</div>
<div><strong>Note 2</strong> : Vous pouvez aussi vous faire un destructeur usb à pile, avec un vieux connecteur USB et une pile de 9volts, en se basant sur le schéma suivant, vous comprendrez de suite ou brancher le + et le &#8211; de la pile pour griller le périphérique.</div>
<div><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/cpx101_2p2.gif"><img class="aligncenter size-full wp-image-682" title="cpx101_2p2" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/cpx101_2p2.gif" alt="" width="379" height="123" /></a></div>
<div>Voilà &#8230; c&#8217;était la bonne parole de cette soirée &#8230; bonne nuit <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
<hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/reduire-la-consommation-de-bande-passante-apache-mod_deflate/" rel="bookmark" title="Permanent Link: Réduire la consommation de bande passante (Apache mod_deflate)">Réduire la consommation de bande passante (Apache mod_deflate)</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/bt3-dans-les-bacs-les-hackeurs-vont-se-regaler/" rel="bookmark" title="Permanent Link: BT3 dans les bacs &#8230; les hackeurs vont se régaler">BT3 dans les bacs &#8230; les hackeurs vont se régaler</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/creer-un-cd-pour-booter-sur-une-cle-usb/" rel="bookmark" title="Permanent Link: Créer un CD pour booter sur une clé usb">Créer un CD pour booter sur une clé usb</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/paranoia-sur-le-net/" rel="bookmark" title="Permanent Link: Paranoïa sur le net &#8230;^^">Paranoïa sur le net &#8230;^^</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/securite/de-lusb-en-grillade-destruction-de-peripherique-usb-a-la-volee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un peu d&#8217;avancement dans l&#8217;application Android de la CTS &#8230;</title>
		<link>http://blog.gaetan-grigis.eu/non-classe/un-peu-davancement-dans-lapplication-android-de-la-cts/</link>
		<comments>http://blog.gaetan-grigis.eu/non-classe/un-peu-davancement-dans-lapplication-android-de-la-cts/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 20:07:24 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apk]]></category>
		<category><![CDATA[cts]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=668</guid>
		<description><![CDATA[Bijour &#8230;
Voilà &#8230; j&#8217;ai un tout petit peu avancé dans mon application android (toujours aussi moche ^^) mais beaucoup plus fonctionnelle.
L&#8217;affichage par défaut :

Si l&#8217;on recherche directement une station (qui retourne un seul code), on affiche directement les horaires :

Si l&#8217;on recherche une station approximativement (qui retourne plusieurs codes), on affiche les différents codes :

Une [...]]]></description>
			<content:encoded><![CDATA[<p>Bijour &#8230;</p>
<p>Voilà &#8230; j&#8217;ai un tout petit peu avancé dans mon application android (toujours aussi moche ^^) mais beaucoup plus fonctionnelle.</p>
<p>L&#8217;affichage par défaut :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/defaut.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/defaut.png" alt="" title="defaut" width="319" height="263" class="aligncenter size-full wp-image-669" /></a></p>
<p>Si l&#8217;on recherche directement une station (qui retourne un seul code), on affiche directement les horaires :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recup-code-1.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recup-code-1.png" alt="" title="recup-code-1" width="320" height="475" class="aligncenter size-full wp-image-670" /></a></p>
<p>Si l&#8217;on recherche une station approximativement (qui retourne plusieurs codes), on affiche les différents codes :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recuperation-code.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recuperation-code.png" alt="" title="recuperation-code" width="320" height="450" class="aligncenter size-full wp-image-671" /></a></p>
<p>Une fois le code récupéré, on le saisie dans le champ &laquo;&nbsp;code station&nbsp;&raquo; et on &laquo;&nbsp;Check&nbsp;&raquo; pour récupérer les horaires :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recup-par-code.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recup-par-code.png" alt="" title="recup-par-code" width="319" height="341" class="aligncenter size-full wp-image-672" /></a></p>
<p>Et voilà &#8230; c&#8217;est moche mais fonctionnel &#8230; le <a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/CTS.apk">APK à télécharger</a> pour profiter de l&#8217;application.</p>
<hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/" rel="bookmark" title="Permanent Link: Mon Application Android pour les horaires de la CTS">Mon Application Android pour les horaires de la CTS</a></li><li><a href="http://blog.gaetan-grigis.eu/android/compiler-android-sur-ubuntu-9-10/" rel="bookmark" title="Permanent Link: Compiler android sur ubuntu 9.10">Compiler android sur ubuntu 9.10</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/installer-un-donuts-sur-son-g1-cyanogenmod/" rel="bookmark" title="Permanent Link: Installer un donuts sur son G1 (CyanogenMod)">Installer un donuts sur son G1 (CyanogenMod)</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/non-classe/un-peu-davancement-dans-lapplication-android-de-la-cts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Une Wii HD pour moins de 100€ avec Dolphin sur Ubuntu</title>
		<link>http://blog.gaetan-grigis.eu/ubuntu/une-wii-hd-pour-moins-de-100e-avec-dolphin-sur-ubuntu/</link>
		<comments>http://blog.gaetan-grigis.eu/ubuntu/une-wii-hd-pour-moins-de-100e-avec-dolphin-sur-ubuntu/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 13:51:05 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[emulateur]]></category>
		<category><![CDATA[gamecube]]></category>
		<category><![CDATA[ubunt]]></category>
		<category><![CDATA[wii]]></category>
		<category><![CDATA[wiimote]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=654</guid>
		<description><![CDATA[Plop à tous &#8230; aujourd&#8217;hui un article useless (comme tout mes articles &#8230;), mais c&#8217;est juste pour raviver la flamme de mon blog &#8230; aucun article depuis décembre :s.
Le tuto du jour est très simple, jouer à la Wii sur ubuntu avec la wiimote/nunchuck et tout le bataclan, le matos nécessaire : 

Un PC assez [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230; aujourd&#8217;hui un article useless (comme tout mes articles &#8230;), mais c&#8217;est juste pour raviver la flamme de mon blog &#8230; aucun article depuis décembre :s.</p>
<p>Le tuto du jour est très simple, jouer à la Wii sur ubuntu avec la wiimote/nunchuck et tout le bataclan, le matos nécessaire : </p>
<ul>
<li>Un PC assez puissant, avec une carte graphique puissante (de préférence Nvidia, ATI est mal supportée) sinon ce sera une simple Wii</li>
<li>Un adaptateur <a href="http://www.surcouf.com/reseaux-connectique/produit/belkin/9656639/adaptateur-usb-bluetooth-10-metres.html">USB-Bluetooth</a> à ~10€</li>
<li>Une <a href="http://www.surcouf.com/consoles-jeux/produit/awg/9652672/sensor-bar-sans-fil-wii.html">sensor bar à infrarouge</a> à ~11€</li>
<li>Une <a href="http://www.surcouf.com/consoles-jeux/produit/nintendo/9626813/wiimote-wii.html">wiimote</a> à ~40€</li>
<li>Un <a href="http://www.surcouf.com/consoles-jeux/produit/nintendo/9626815/nunchuk-wii.html">nunchuk</a> (facultatif selon les jeux) à ~20€</li>
</ul>
<p><em>Bien sûr, si vous avez déjà la wiimote et ses accessoires, l&#8217;addition est encore moins salée <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </em><br />
<span id="more-654"></span><br />
Ensuite, dans un terminal :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> apt-get <span class="kw2">install</span> subversion scons <span class="kw2">g++</span> wx2<span class="nu0">.8</span>-headers libwxbase2<span class="nu0">.8</span><span class="nu0">-0</span> libwxbase2<span class="nu0">.8</span>-dbg libwxbase2<span class="nu0">.8</span>-dev libwxgtk2<span class="nu0">.8</span><span class="nu0">-0</span> libwxgtk2<span class="nu0">.8</span>-dbg libwxgtk2<span class="nu0">.8</span>-dev libsdl1<span class="nu0">.2</span>-dev nvidia-cg-toolkit libxxf86vm1-dbg libxxf86vm-dev libxext6-dbg libxext-dev libglew1<span class="nu0">.5</span>-dev libcairo2-dbg libcairo2-dev libao2 libao-dev libbluetooth-dev libreadline5-dev <span class="sy0">&amp;&amp;</span> svn checkout http:<span class="sy0">//</span>dolphin-emu.googlecode.com<span class="sy0">/</span>svn<span class="sy0">/</span>trunk<span class="sy0">/</span> dolphin-emu-read-only <span class="sy0">&amp;&amp;</span> <span class="kw3">cd</span> dolphin-emu-read-only <span class="sy0">&amp;&amp;</span> scons <span class="re2">flavor=</span>release</div>
</li>
</ol>
</div>
<p>Si ça dure 1/4 d&#8217;heure c&#8217;est normal &#8230; faut laisser le temps de compiler la bête. (En cas de probleme se réferer <a href="http://code.google.com/p/dolphin-emu/wiki/Linux_dependencies">ici</a>)<br />
Une fois terminer, vous pouvez lancer l&#8217;emulateur :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> Binary<span class="sy0">/</span>Linux-x86_64 <span class="sy0">&amp;&amp;</span> .<span class="sy0">/</span>Doplhin</div>
</li>
</ol>
</div>
<p>(le nom du dossier peut changer suivant votre architecture &#8230;).</p>
<p>Une fois lancé, on a accès à cette interface :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/01/dolphin-start.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/01/dolphin-start.png" alt="" title="dolphin-start" width="600" height="192" class="aligncenter size-full wp-image-655" /></a><br />
Vous pouvez changer la configuration de graphique/son en accord avec les performances de votre fidèle compagnon.</p>
<p>Pour pairer la wiimote avec Dolphin, c&#8217;est très simple :<br />
Avec la clé USB bluetooth de branchée, la sensor bar d&#8217;allumée (posée en dessous/au dessus) de votre écran :</p>
<ul>
<li>Allumer la Wiimote et ouvrir le compartiment à pile pour cliquer sur le bouton rouge.</li>
<li>Cliquer sur l&#8217;onglet Wiimote</li>
<li>Votre wiimote devrait vibrer et les lumières ne devrait plus clignoter &#8230; </li>
<li>voilà, fermer la fenêtre.</li>
</ul>
<p>C&#8217;est bon, vous pouvez jouer à la Wii sur votre PC avec la Wiimote, comme l&#8217;émulateur Dolphin utilise un rendu OpenGl, vous pourrez pleinement profiter des performances de votre carte graphique.</p>
<p>Petit Rappel : L&#8217;utilisation d&#8217;un émulateur, n&#8217;est pas illégale en soi, c&#8217;est le fait d&#8217;utiliser des roms sans en avoir les originaux qui est illégale &#8230;</p>
<p>Bon jeu <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/ubuntu/mettre-a-lheure-ubuntu/" rel="bookmark" title="Permanent Link: Mettre à l&#8217;heure Ubuntu">Mettre à l&#8217;heure Ubuntu</a></li><li><a href="http://blog.gaetan-grigis.eu/ubuntu/gnash-lalternative-a-flash/" rel="bookmark" title="Permanent Link: Gnash l&#8217;alternative à Flash ?">Gnash l&#8217;alternative à Flash ?</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/backtrack-4-passe-en-pre-final/" rel="bookmark" title="Permanent Link: BackTrack 4 passe en pre-final &#8230;">BackTrack 4 passe en pre-final &#8230;</a></li><li><a href="http://blog.gaetan-grigis.eu/ubuntu/ubuntu-mise-a-jour-du-paquet-edyuk/" rel="bookmark" title="Permanent Link: [UBUNTU] Mise à jour du paquet Edyuk">[UBUNTU] Mise à jour du paquet Edyuk</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/backtrack4-beta/" rel="bookmark" title="Permanent Link: Backtrack4 beta &#8230;">Backtrack4 beta &#8230;</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/ubuntu/une-wii-hd-pour-moins-de-100e-avec-dolphin-sur-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monter un cluster avec kerrighed sur son réseau</title>
		<link>http://blog.gaetan-grigis.eu/systeme/monter-un-cluster-avec-kerrighed-sur-son-reseau/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/monter-un-cluster-avec-kerrighed-sur-son-reseau/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 18:50:54 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[booter en réseau]]></category>
		<category><![CDATA[calcul parallel]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[grappe]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[kerrighed]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[tftpboot]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=637</guid>
		<description><![CDATA[Plopinou &#8230; encore un article de type &#171;&#160;retour d&#8217;expérience geek&#160;&#187;
Temps : 2h (en compilant le tout avec un AMD 3000+)
Niveau : Noob (faut quand même savoir jouer à WoW le temps de la compil&#8217; qui peut prendre 1 heures)
Le but de cette technique était de recycler quelques PC sur mon réseau et gagner en puissance de calcul [...]]]></description>
			<content:encoded><![CDATA[<p>Plopinou &#8230; encore un article de type &laquo;&nbsp;retour d&#8217;expérience geek&nbsp;&raquo;<br />
Temps : 2h (en compilant le tout avec un AMD 3000+)<br />
Niveau : Noob (faut quand même savoir jouer à WoW le temps de la compil&#8217; qui peut prendre 1 heures)</p>
<p>Le but de cette technique était de recycler quelques PC sur mon réseau et gagner en puissance de calcul avec de vieux AMD 3000+ avec 1Go de ram.<br />
<span id="more-637"></span><br />
<a href="http://fr.wikipedia.org/wiki/Kerrighed" target="_blank">Kerrighed</a> est un cluster de type &laquo;&nbsp;<a href="http://fr.wikipedia.org/wiki/Grappe_de_serveurs" target="_blank">Grappe de serveur</a>&nbsp;&raquo; qui permet un truc assez sympa, il suffit que l&#8217;ensemble des machines du réseau utilisent le kernel modifié (un 2.6.20 obligatoire &#8230;) pour que l&#8217;ensemble de ces machines puissent être emulées comme une seul machine <a href="http://fr.wikipedia.org/wiki/Symmetric_multiprocessing" target="_blank">SMP</a> partageant donc le CPU et la RAM des machines, assez sympa pour des logiciels qui bouffent de la ram et du cpu (genre firefox ?? xD).</p>
<p>Le gros intéret de ce type de réseaux face à des solutions comme les systèmes <a href="http://fr.wikipedia.org/wiki/Message_Passing_Interface" target="_blank">MPI</a> est qu&#8217;il n&#8217;y a pas besoin d&#8217;avoir des logiciels spécifique qui utilisent l&#8217;interface en question, ici la plupart des softs qui peuvent tourner sur du kernel SMP (qui devient assez commun sur les dernières machine multi-core pour partager les calculs entre les cores d&#8217;une même machine) peuvent être susceptible d&#8217;utiliser le CPU/RAM des autres ordi.</p>
<p>Alors bon &#8230; d&#8217;un côté ça parait super intéressant de pouvoir ajouter la puissance de nos anciens PC, d&#8217;un autre ont se dit &#8230; c&#8217;est naze, faut installer le kernel à la main sur chacune de ces machines, de quoi repousser n&#8217;importe qu&#8217;elle geek en puissance devant le travail à fournir &#8230;</p>
<p>C&#8217;est là qu&#8217;intervient un truc super sympa que l&#8217;iut de stras utilisait pour faire booter les terminaux X (et que d&#8217;autre utilisent surement). Utiliser une machine comme serveur dhcp,nfs,tftpd-hpa pour faire booter d&#8217;autres machines sur un réseau (en clair, on installe le système sur une machine, et toute les autres boot dessus, permettant même de d&#8217;utiliser des machines sans disque dur, comme ça on peut ce faire une machine qui prend tt les dd et les partager sur le réseau et pouvoir rajouter une nouvelle machine en la connectant simplement au réseau et en la bootant dessus).</p>
<p>Pour ça, j&#8217;ai suivi un superbe <a href="http://www.debianadmin.com/how-to-set-up-a-high-performance-cluster-hpc-using-debian-lenny-and-kerrighed.html" target="_blank">tuto</a> (en anglais, et pas trop vieux en plus) que je vais traduire et commenter avec mes superbes retour d&#8217;expériences ^^.</p>
<p><strong>L&#8217;architecture : </strong></p>
<p>J&#8217;ai ma machine HOST (serveur nfs,dhcp,tftpd, &#8230;) sur laquelle je fait toute mes manipulations, avec deux interfaces, la première connectée au net (histoire de pouvoir mettre à jour la machine), et la seconde connectée à mon réseau de cluster, qui a besoin d&#8217;un réseau à part, puisque j&#8217;utilise un serveur DHCP dédié à l&#8217;adressage de ces machines.</p>
<p>Donc voilà, pour les IPs : 192.168.0.1 est mon serveur principal, 192.168.0.10 et 192.168.0.11 sont mes deux nodes qui vont booter sur le réseaux.</p>
<p>L&#8217;ensemble des manipulations à suivre ce faisant depuis 192.168.0.1 (nommé HOST).</p>
<p>La première commande :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">apt-get <span class="kw2">install</span> dhcp3-server tftpd-hpa portmap syslinux nfs-kernel-server nfs-common debootstrap</div>
</li>
</ol>
</div>
<p>qui permettra d&#8217;installer l&#8217;ensemble des softs nécessaire à notre cluster.</p>
<p>Puis on modifie le fichier <strong>/etc/default/dhcp3-server</strong> et on spécifie l&#8217;interface sur laquelle est connecté notre cluster (eth0 étant ma connexion au net) :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="re2">INTERFACES=</span><span class="st0">&quot;eth1&quot;</span></div>
</li>
</ol>
</div>
<p>Puis le fichier /etc/dhcp3/dhcpd.conf</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0"># General options</span></div>
</li>
<li class="li1">
<div class="de1">option dhcp-max-message-<span class="kw2">size</span> <span class="nu0">2048</span>;</div>
</li>
<li class="li1">
<div class="de1">use-host-decl-names on;</div>
</li>
<li class="li1">
<div class="de1">deny unknown-clients;</div>
</li>
<li class="li1">
<div class="de1">deny bootp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">option domain-name <span class="st0">&quot;cluster.lan&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">option domain-name-servers <span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">subnet <span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.0</span> netmask <span class="nu0">255.255</span><span class="nu0">.255</span><span class="nu0">.0</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">option routers <span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.1</span>;</div>
</li>
<li class="li1">
<div class="de1">option broadcast-address <span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.255</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">group <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">filename <span class="st0">&quot;pxelinux.0&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">option root-path <span class="st0">&quot;192.168.0.11:/nfsroot/kerrighed&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">host node1 <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">fixed-address <span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.10</span>;</div>
</li>
<li class="li1">
<div class="de1">hardware ethernet <span class="nu0">11</span>:<span class="nu0">33</span>:<span class="nu0">22</span>:<span class="nu0">55</span>:<span class="nu0">44</span>:<span class="nu0">66</span>;<span class="co0">#à remplacer par l&#39;adresse mac de votre machine 1</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">host node2 <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">fixed-address <span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.11</span>;</div>
</li>
<li class="li1">
<div class="de1">hardware ethernet <span class="nu0">11</span>:<span class="nu0">22</span>:<span class="nu0">33</span>:<span class="nu0">44</span>:<span class="nu0">55</span>:<span class="nu0">66</span>;<span class="co0">#à remplacer par l&#39;adresse mac de votre machine 2</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">server-name <span class="st0">&quot;host&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">next-server <span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.1</span>; <span class="co0"># Server IP</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>On permet le lancement en daemon de tftp au démarrage de la machine en modifiant /etc/default/tftp-hpa</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="re2">RUN_DAEMON=</span><span class="st0">&quot;yes&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">OPTIONS=</span><span class="st0">&quot;-l -s /var/lib/tftpboot&quot;</span></div>
</li>
</ol>
</div>
<p>On copie notre loader pxe</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">cp</span> <span class="sy0">/</span>usr<span class="sy0">/</span>lib<span class="sy0">/</span>syslinux<span class="sy0">/</span>pxelinux<span class="nu0">.0</span> <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tftpboot</div>
</li>
</ol>
</div>
<p>On créer notre dossier de conf :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">mkdir</span> -p <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tftpboot<span class="sy0">/</span>pxelinux.cfg</div>
</li>
</ol>
</div>
<p>Et on edit notre fichier de boot réseau dans /var/lib/tftpboot/pxelinux.cfg/default : </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">LABEL linux</div>
</li>
<li class="li1">
<div class="de1">KERNEL vmlinuz<span class="nu0">-2.6</span><span class="nu0">.20</span>-krg</div>
</li>
<li class="li1">
<div class="de1">APPEND <span class="re2">console=</span>tty1 <span class="re2">root=</span><span class="sy0">/</span>dev<span class="sy0">/</span>nfs <span class="re2">nfsroot=</span><span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.1</span>:<span class="sy0">/</span>nfsroot<span class="sy0">/</span>kerrighed <span class="re2">ip=</span>dhcp rw <span class="re2">session_id=</span><span class="nu0">1</span></div>
</li>
</ol>
</div>
<p>Maintenant que notre boot est prêt, il faut créer le système sur lequel les autres machines vont booter :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">mkdir</span> -p <span class="sy0">/</span>nfsroot<span class="sy0">/</span>kerrighed</div>
</li>
</ol>
</div>
<p>On prépare l&#8217;import en éditant le fichier /etc/exports :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">/</span>nfsroot<span class="sy0">/</span>kerrighed <span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.1</span><span class="sy0">/</span><span class="nu0">255.255</span><span class="nu0">.255</span><span class="nu0">.0</span><span class="br0">&#40;</span>rw,no_subtree_check,async,no_root_squash<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Puis un coup de </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">exportfs -avr <span class="sy0">&amp;&amp;</span> debootstrap &#8211; -<span class="kw2">arch</span> i386 lenny <span class="sy0">/</span>nfsroot<span class="sy0">/</span>kerrighed http:<span class="sy0">//</span><span class="kw2">ftp</span>.fr.debian.org<span class="sy0">/</span>debian</div>
</li>
</ol>
</div>
<p>Qui peut prendre un bon bout de temps (z&#8217;avez le temps de faire un warsong voir même une instance de 30 minutes sur WoW ^^) &#8230; puis on fait un coup de </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">chroot</span> <span class="sy0">/</span>nfsroot<span class="sy0">/</span>kerrighed</div>
</li>
</ol>
</div>
<p>Pour changer les fichiers de config de notre &laquo;&nbsp;nouvelle machine&nbsp;&raquo; :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">mount</span> -t proc none <span class="sy0">/</span>proc <span class="sy0">&amp;&amp;</span> <span class="kw2">mkdir</span> <span class="sy0">/</span>config <span class="sy0">&amp;&amp;</span> <span class="kw2">mount</span> -t configfs none <span class="sy0">/</span>config <span class="sy0">&amp;&amp;</span> apt-get update <span class="sy0">&amp;&amp;</span> <span class="kw3">export</span> <span class="re2">LC_ALL=</span>C <span class="sy0">&amp;&amp;</span> apt-get <span class="kw2">install</span> dhcp3-common nfs-common nfsbooted openssh-server <span class="sy0">&amp;&amp;</span> <span class="kw2">ln</span> -sf <span class="sy0">/</span>etc<span class="sy0">/</span>network<span class="sy0">/</span>if-up.d<span class="sy0">/</span>mountnfs <span class="sy0">/</span>etc<span class="sy0">/</span>rcS.d<span class="sy0">/</span>S34mountnfs <span class="sy0">&amp;&amp;</span> &nbsp;apt-get <span class="kw2">install</span> <span class="kw2">automake</span> <span class="kw2">autoconf</span> libtool pkg-config <span class="kw2">gawk</span> rsync <span class="kw2">bzip2</span> libncurses5 libncurses5-dev <span class="kw2">wget</span> lsb-release xmlto patchutils xutils-dev build-essential subversion <span class="sy0">&amp;&amp;</span> svn checkout svn:<span class="sy0">//</span>scm.gforge.inria.fr<span class="sy0">/</span>svn<span class="sy0">/</span>kerrighed<span class="sy0">/</span>trunk <span class="sy0">/</span>usr<span class="sy0">/</span>src<span class="sy0">/</span>kerrighed -r <span class="nu0">5426</span></div>
</li>
</ol>
</div>
<p>Puis modification du /etc/fstab</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">proc <span class="sy0">/</span>proc proc defaults <span class="nu0">0</span> <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">/</span>dev<span class="sy0">/</span>nfs <span class="sy0">/</span> nfs defaults <span class="nu0">0</span> <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">configfs <span class="sy0">/</span>config configfs defaults <span class="nu0">0</span> <span class="nu0">0</span></div>
</li>
</ol>
</div>
<p>On passe par /etc/network/interfaces pour configurer notre réseau &#8230; pour moi :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">auto lo</div>
</li>
<li class="li1">
<div class="de1">iface lo inet loopback</div>
</li>
<li class="li1">
<div class="de1">iface eth0 inet dhcp</div>
</li>
</ol>
</div>
<p>Une fois que la plupart des configs sont faites, on peut passer par la compilation du kernel kerrighed.</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">wget</span> -O <span class="sy0">/</span>usr<span class="sy0">/</span>src<span class="sy0">/</span>linux<span class="nu0">-2.6</span><span class="nu0">.20</span>.<span class="kw2">tar</span>.bz2 http:<span class="sy0">//</span>www.kernel.org<span class="sy0">/</span>pub<span class="sy0">/</span>linux<span class="sy0">/</span>kernel<span class="sy0">/</span>v2<span class="nu0">.6</span><span class="sy0">/</span>linux<span class="nu0">-2.6</span><span class="nu0">.20</span>.<span class="kw2">tar</span>.bz2 <span class="sy0">&amp;&amp;</span> <span class="kw3">cd</span> <span class="sy0">/</span>usr<span class="sy0">/</span>src<span class="sy0">/</span>kerrighed <span class="sy0">&amp;&amp;</span> .<span class="sy0">/</span>autogen.<span class="kw2">sh</span> <span class="sy0">&amp;&amp;</span> .<span class="sy0">/</span>configure <span class="sy0">&amp;&amp;</span> <span class="kw3">cd</span> kernel <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> defconfig <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> menuconfig</div>
</li>
</ol>
</div>
<p>Dans le menu &#8217;super ecran bleu&#8217; :<br />
Allez dans &laquo;&nbsp;Device Drivers&nbsp;&raquo; puis &laquo;&nbsp;Network device support&nbsp;&raquo; et choisir sa carte réseau (sinon vous n&#8217;arriverez pas à monter le root une fois le kernel booté).<br />
Revenir au premier menu et choisir &laquo;&nbsp;File systems&nbsp;&raquo; puis &laquo;&nbsp;Network File Systems&nbsp;&raquo; et permettre le nfsV3.<br />
On quitte et on sauvegarde la configuration (en cliquant sur &laquo;&nbsp;exit&nbsp;&raquo;).</p>
<p>On reprend nos commandes (on peut faire un match sur HoN là, y&#8217;en a pour une heure) : </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> .. <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> kernel <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> kernel-<span class="kw2">install</span> <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> <span class="kw2">install</span> <span class="sy0">&amp;&amp;</span> ldconfig</div>
</li>
</ol>
</div>
<p>On continue la configuration de notre systèmes en modifiant le fichier /etc/kerrighed_nodes</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="re2">session=</span><span class="nu0">1</span> <span class="co0">#entre 1 et 254</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">nbmin=</span><span class="nu0">1</span> <span class="co0">#nombre de node minimal pour kerrighed.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.10</span>;<span class="nu0">1</span>:eth0</div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">192.168</span><span class="nu0">.0</span><span class="nu0">.11</span>:<span class="nu0">2</span>:eth0</div>
</li>
</ol>
</div>
<p>et on termine ici en modifiant /etc/default/kerrighed</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="re2">ENABLE=</span>true</div>
</li>
</ol>
</div>
<p>on quitte notre chroot par un superbe :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">exit</span></div>
</li>
</ol>
</div>
<p>On copie notre &laquo;&nbsp;booter&nbsp;&raquo; dans le boot et on redémarre tout nos soft :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">cp</span> <span class="sy0">/</span>nfsroot<span class="sy0">/</span>kerrighed<span class="sy0">/</span>boot<span class="sy0">/</span>vmlinuz<span class="nu0">-2.6</span><span class="nu0">.20</span>-krg <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>tftpboot<span class="sy0">/</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">/</span>etc<span class="sy0">/</span>init.d<span class="sy0">/</span>tftpd-hpa start <span class="sy0">&amp;&amp;</span> <span class="sy0">/</span>etc<span class="sy0">/</span>init.d<span class="sy0">/</span>dhcp3-server start <span class="sy0">&amp;&amp;</span> <span class="sy0">/</span>etc<span class="sy0">/</span>init.d<span class="sy0">/</span>portmap start <span class="sy0">&amp;&amp;</span> <span class="sy0">/</span>etc<span class="sy0">/</span>init.d<span class="sy0">/</span>nfs-kernel-server restart</div>
</li>
</ol>
</div>
<p>A partir de maintenant, toute machine bootant en réseau sera capable d&#8217;utiliser le kernel compilé. (assez sympa en cyber café, ou &#8230; <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p>Par contre une fois lancer, il ne faut pas oublier d&#8217;autoriser la migration des processus en se connectant sur l&#8217;une des nodes : </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">krgadm nodes <span class="sy0">&amp;&amp;</span> krgadm cluster start <span class="sy0">&amp;&amp;</span> <span class="sy0">/</span>usr<span class="sy0">/</span><span class="kw3">local</span><span class="sy0">/</span>bin<span class="sy0">/</span>krg_legacy_scheduler <span class="sy0">&amp;&amp;</span> krgcapset -d +CAN_MIGRATE <span class="sy0">&amp;&amp;</span> krgcapset -k <span class="re4">$$</span> -d +CAN_MIGRATE <span class="sy0">&amp;&amp;</span> krgcapset -d +USE_REMOTE_MEMORY <span class="sy0">&amp;&amp;</span> krgcapset -k <span class="re4">$$</span> –inheritable-effective +CAN_MIGRATE</div>
</li>
</ol>
</div>
<p>Et voilà &#8230; les geeks en puissance vont pouvoir faire revivre leurs premières machines ^^ (et les terminer dignement xD)</p>
<hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/systeme/annuaire-ldap-et-authentification-unixlinux/" rel="bookmark" title="Permanent Link: Annuaire LDAP et authentification UNiX/Linux">Annuaire LDAP et authentification UNiX/Linux</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/primary-domain-controller-sous-linux/" rel="bookmark" title="Permanent Link: Primary Domain Controller sous Linux &#8230;">Primary Domain Controller sous Linux &#8230;</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/bloquer-les-visiteurs-de-votre-site-web-utilisant-tor/" rel="bookmark" title="Permanent Link: Bloquer les visiteurs de votre site web utilisant tor">Bloquer les visiteurs de votre site web utilisant tor</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/open-source-reseau-dentreprise-securise-ou-pas/" rel="bookmark" title="Permanent Link: Open-Source : Réseau d&#8217;entreprise sécurisé &#8230; ou pas">Open-Source : Réseau d&#8217;entreprise sécurisé &#8230; ou pas</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/virtualisation-et-tunnel-rajouter-des-pcs-sur-son-reseau/" rel="bookmark" title="Permanent Link: Virtualisation et tunnel : rajouter des PCs sur son réseau">Virtualisation et tunnel : rajouter des PCs sur son réseau</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/monter-un-cluster-avec-kerrighed-sur-son-reseau/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mon Application Android pour les horaires de la CTS</title>
		<link>http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 19:13:42 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[cts]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=632</guid>
		<description><![CDATA[Amis Strasbourgeois bonsoir &#8230;
Après un WE chargé sur Strasbourg, j&#8217;ai remarqué que la Compagnie des Transports de Strasbourg (CTS) avais mis en place un site web intéressant en temps réel (semble-t-il) pour calculer les horaires des BUS/Trams du réseau urbain.
L&#8217;autre partie du service &#171;&#160;Temps Réel&#160;&#187; se fait par SMS par envoi du code de la [...]]]></description>
			<content:encoded><![CDATA[<p>Amis Strasbourgeois bonsoir &#8230;<br />
Après un WE chargé sur Strasbourg, j&#8217;ai remarqué que la Compagnie des Transports de Strasbourg (<a href="http://www.cts-strasbourg.fr/">CTS</a>) avais mis en place <a href="http://tr.cts-strasbourg.fr/">un site web</a> intéressant en temps réel (semble-t-il) pour calculer les horaires des BUS/Trams du réseau urbain.</p>
<p>L&#8217;autre partie du service &laquo;&nbsp;Temps Réel&nbsp;&raquo; se fait par SMS par envoi du code de la station à un numéro surtaxé &#8230; :s. Ayant un forfait 3G, je vais pas claquer un SMS surtaxé si je peux accéder au web gratuitement (quel radin <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ), mais le site est assez bof depuis mon navigateur, et c&#8217;est assez lent &#8230;</p>
<p>Ayant acheté un G1 dans le but de dev des applis, j&#8217;en ai profité pour faire ce que je sais (apparemment) faire de mieux &#8230; parser des sites web pour en extraire des informations, dans ce cas précis, les horaires des transports en commun.</p>
<p>L&#8217;application ressemble à ceci : (super moche je sais, mais elle fait sont boulot &#8230; c&#8217;est l&#8217;essentiel).</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2009/12/android-CTS.png"><img class="aligncenter size-full wp-image-633" title="android-CTS" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2009/12/android-CTS.png" alt="android-CTS" width="322" height="294" /></a>Pour le code source, j&#8217;ai tenté de faire au plus simple (traduction : le code est aussi beau que le screenshot fournit plus haut ^^, <em>pour ma décharge, je dirais que j&#8217;ai tout mis dans un fichier histoire de ne pas à avoir trop de fichier à fournir ici</em>).</p>
<p>Si vous avez des idées pour améliorer l&#8217;appli je suis open <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (à part si c&#8217;est pour me recycler et changer de métier :s). Je pense changer l&#8217;appli en widget (si j&#8217;ai le temps &#8230;).<br />
<span id="more-632"></span><br />
Pour les fichiers, tout d&#8217;abord le main.java</p>
<div class="geshi no java">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">package</span> eu.<span class="me1">gaetangrigis</span>.<span class="me1">cts</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.BufferedReader;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.IOException;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.InputStreamReader;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.Calendar;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.regex.Matcher;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.regex.Pattern;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.app.Activity;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.app.Dialog;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.app.TimePickerDialog;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.app.TimePickerDialog.OnTimeSetListener;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.os.Bundle;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.view.View;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.view.View.OnClickListener;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.view.View.OnFocusChangeListener;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.view.ViewGroup.LayoutParams;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.Button;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.EditText;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.TableLayout;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.TableRow;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.TextView;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.TimePicker;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.apache.http.HttpResponse;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.apache.http.client.methods.HttpGet;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.apache.http.client.ClientProtocolException;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.apache.http.client.HttpClient;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.apache.http.impl.client.DefaultHttpClient;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> Main <span class="kw2">extends</span> Activity <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/** Called when the activity is first created. */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw3">Button</span> check<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw3">Button</span> clear<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> TextView t<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> EditText station<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> EditText heure<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> EditText minute<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> TableLayout table<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw4">int</span> mHeure<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw4">int</span> mMinute<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> TimePickerDialog.<span class="me1">OnTimeSetListener</span> mTimeSetListener<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">final</span> <span class="kw3">Calendar</span> c = <span class="kw3">Calendar</span>.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> onCreate<span class="br0">&#40;</span>Bundle savedInstanceState<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span>.<span class="me1">onCreate</span><span class="br0">&#40;</span>savedInstanceState<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; setContentView<span class="br0">&#40;</span>R.<span class="me1">layout</span>.<span class="me1">main</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Recuperation des champs</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; table = <span class="br0">&#40;</span>TableLayout<span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">maTable</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; station = <span class="br0">&#40;</span>EditText<span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">idStation</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; heure = <span class="br0">&#40;</span>EditText<span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">heure</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; minute = <span class="br0">&#40;</span>EditText<span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">minute</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;check=<span class="br0">&#40;</span><span class="kw3">Button</span><span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">check</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;clear=<span class="br0">&#40;</span><span class="kw3">Button</span><span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">clear</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; t =<span class="br0">&#40;</span>TextView<span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">information</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Texte par défaut</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; mHeure = c.<span class="me1">get</span><span class="br0">&#40;</span><span class="kw3">Calendar</span>.<span class="me1">HOUR_OF_DAY</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; mMinute = c.<span class="me1">get</span><span class="br0">&#40;</span><span class="kw3">Calendar</span>.<span class="me1">MINUTE</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; t.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;Entrez les informations demandées&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; station.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;75&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; mTimeSetListener = <span class="kw2">new</span> TimePickerDialog.<span class="me1">OnTimeSetListener</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">public</span> <span class="kw4">void</span> onTimeSet<span class="br0">&#40;</span>TimePicker view, <span class="kw4">int</span> hourOfDay, <span class="kw4">int</span> minute<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mHeure = hourOfDay<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mMinute = minute<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;updateTime<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; updateTime<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; check.<span class="me1">setOnClickListener</span><span class="br0">&#40;</span><span class="kw2">new</span> OnClickListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw2">public</span> <span class="kw4">void</span> onClick<span class="br0">&#40;</span><span class="kw3">View</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span>startResearch<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; clear.<span class="me1">setOnClickListener</span><span class="br0">&#40;</span><span class="kw2">new</span> OnClickListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw2">public</span> <span class="kw4">void</span> onClick<span class="br0">&#40;</span><span class="kw3">View</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span>clearResearch<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; heure.<span class="me1">setOnFocusChangeListener</span><span class="br0">&#40;</span><span class="kw2">new</span> OnFocusChangeListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw2">public</span> <span class="kw4">void</span> onFocusChange<span class="br0">&#40;</span><span class="kw3">View</span> v, <span class="kw4">boolean</span> hasFocus<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw1">if</span><span class="br0">&#40;</span>hasFocus<span class="br0">&#41;</span>showDialog<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; minute.<span class="me1">setOnFocusChangeListener</span><span class="br0">&#40;</span><span class="kw2">new</span> OnFocusChangeListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw2">public</span> <span class="kw4">void</span> onFocusChange<span class="br0">&#40;</span><span class="kw3">View</span> v, <span class="kw4">boolean</span> hasFocus<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw1">if</span><span class="br0">&#40;</span>hasFocus<span class="br0">&#41;</span>showDialog<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> clearResearch<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;table.<span class="me1">removeAllViews</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> startResearch<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;t.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;Recherche en cours&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; HttpGet site &nbsp; = <span class="kw2">new</span> HttpGet<span class="br0">&#40;</span><span class="st0">&quot;http://tr.cts-strasbourg.fr/HorTRweb/ResultatsHoraires.aspx?arret=&quot;</span>+station.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span>+<span class="st0">&quot;&amp;type=TOUS&amp;heure=&quot;</span>+heure.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span>+<span class="st0">&quot;&amp;min=&quot;</span>+minute.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; HttpClient cli = <span class="kw2">new</span> DefaultHttpClient<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; HttpResponse resp<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> res<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> content=<span class="kw2">new</span> <span class="kw3">String</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> ret = <span class="kw2">new</span> <span class="kw3">String</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">boolean</span> dTab=<span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;resp = cli.<span class="me1">execute</span><span class="br0">&#40;</span>site<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">BufferedReader</span> read = <span class="kw2">new</span> <span class="kw3">BufferedReader</span><span class="br0">&#40;</span><span class="kw2">new</span> <span class="kw3">InputStreamReader</span><span class="br0">&#40;</span>resp.<span class="me1">getEntity</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getContent</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">while</span><span class="br0">&#40;</span><span class="br0">&#40;</span>res=read.<span class="me1">readLine</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">!</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>res.<span class="me1">matches</span><span class="br0">&#40;</span><span class="st0">&quot;.*&lt;table class=.depart.*&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>dTab=<span class="kw2">true</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>dTab==true<span class="sy0">&amp;&amp;</span>res.<span class="me1">matches</span><span class="br0">&#40;</span><span class="st0">&quot;.*&lt;/table&gt;.*&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>dTab=<span class="kw2">false</span><span class="sy0">;</span>break<span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>dTab==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span>content+=res<span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Pattern p = Pattern.<span class="me1">compile</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;td[^&gt;]*&gt;([^&lt;]*)&lt;/td&gt;&lt;td[^&gt;]*&gt;([^&lt;]*)&lt;/td&gt;&lt;td[^&gt;]*&gt;([^&lt;]*)&lt;/td&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Matcher m = p.<span class="me1">matcher</span><span class="br0">&#40;</span>content<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">while</span><span class="br0">&#40;</span>m.<span class="me1">find</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i=<span class="nu0">1</span><span class="sy0">;</span>i<span class="sy0">&lt;</span>=m.<span class="me1">groupCount</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>i++<span class="br0">&#41;</span><span class="br0">&#123;</span>ret+=m.<span class="me1">group</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>+<span class="st0">&quot; &quot;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table.<span class="me1">addView</span><span class="br0">&#40;</span>addTextRow<span class="br0">&#40;</span>ret<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret=<span class="st0">&quot;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span>ClientProtocolException e<span class="br0">&#41;</span> <span class="br0">&#123;</span>t.<span class="me1">setText</span><span class="br0">&#40;</span>e.<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span><span class="kw3">IOException</span> e<span class="br0">&#41;</span> <span class="br0">&#123;</span>t.<span class="me1">setText</span><span class="br0">&#40;</span>e.<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">finally</span><span class="br0">&#123;</span>t.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;Recherche terminé&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> TableRow addTextRow<span class="br0">&#40;</span><span class="kw3">String</span> text<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;TableRow tr = <span class="kw2">new</span> TableRow<span class="br0">&#40;</span><span class="kw2">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; TextView tt = <span class="kw2">new</span> TextView<span class="br0">&#40;</span><span class="kw2">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; tt.<span class="me1">setText</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; tr.<span class="me1">addView</span><span class="br0">&#40;</span>tt<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">return</span> tr<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw3">Dialog</span> onCreateDialog<span class="br0">&#40;</span><span class="kw4">int</span> id<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span>id<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">0</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">return</span> <span class="kw2">new</span> TimePickerDialog<span class="br0">&#40;</span><span class="kw2">this</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mTimeSetListener, mHeure, mMinute, <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">null</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> updateTime<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw3">String</span> add=<span class="st0">&quot;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; heure.<span class="me1">setText</span><span class="br0">&#40;</span>mHeure+<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>mMinute<span class="sy0">&lt;</span><span class="nu0">10</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;add=<span class="st0">&quot;0&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; minute.<span class="me1">setText</span><span class="br0">&#40;</span>add+mMinute<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Puis le main.xml (qui définit l&#8217;interface graphique)</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:orientation</span>=<span class="st0">&quot;vertical&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;fill_parent&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;TextView</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/information&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:text</span>=<span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:orientation</span>=<span class="st0">&quot;horizontal&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;TextView</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:text</span>=<span class="st0">&quot;Code de la station : &quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;EditText</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/idStation&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:text</span>=<span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:orientation</span>=<span class="st0">&quot;horizontal&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;TextView</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:text</span>=<span class="st0">&quot;Heure voulue : &quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;EditText</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/heure&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;TextView</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:text</span>=<span class="st0">&quot;h&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;EditText</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/minute&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:orientation</span>=<span class="st0">&quot;horizontal&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;Button</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:text</span>=<span class="st0">&quot;Check&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/check&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;Button</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:text</span>=<span class="st0">&quot;Clear&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/clear&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;TableLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/maTable&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/TableLayout<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>et enfin le Manifest.xml (pour ne pas oublier les permissions d&#8217;accès au net)</p>
<div class="geshi no java">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;?</span>xml version=<span class="st0">&quot;1.0&quot;</span> encoding=<span class="st0">&quot;utf-8&quot;</span><span class="sy0">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>manifest xmlns:android=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw2">package</span>=<span class="st0">&quot;eu.gaetangrigis.cts&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; android:versionCode=<span class="st0">&quot;1&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; android:versionName=<span class="st0">&quot;1.0&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sy0">&lt;</span>application android:icon=<span class="st0">&quot;@drawable/icon&quot;</span> android:label=<span class="st0">&quot;@string/app_name&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>activity android:name=<span class="st0">&quot;.Main&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:label=<span class="st0">&quot;@string/app_name&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>intent-filter<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>action android:name=<span class="st0">&quot;android.intent.action.MAIN&quot;</span> /<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>category android:name=<span class="st0">&quot;android.intent.category.LAUNCHER&quot;</span> /<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>/intent-filter<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>/activity<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sy0">&lt;</span>/application<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sy0">&lt;</span>uses-sdk android:minSdkVersion=<span class="st0">&quot;4&quot;</span> /<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>uses-permission android:name=<span class="st0">&quot;android.permission.INTERNET&quot;</span> /<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>/manifest<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/non-classe/un-peu-davancement-dans-lapplication-android-de-la-cts/" rel="bookmark" title="Permanent Link: Un peu d&#8217;avancement dans l&#8217;application Android de la CTS &#8230;">Un peu d&#8217;avancement dans l&#8217;application Android de la CTS &#8230;</a></li><li><a href="http://blog.gaetan-grigis.eu/android/compiler-android-sur-ubuntu-9-10/" rel="bookmark" title="Permanent Link: Compiler android sur ubuntu 9.10">Compiler android sur ubuntu 9.10</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/installer-un-donuts-sur-son-g1-cyanogenmod/" rel="bookmark" title="Permanent Link: Installer un donuts sur son G1 (CyanogenMod)">Installer un donuts sur son G1 (CyanogenMod)</a></li><li><a href="http://blog.gaetan-grigis.eu/ubuntu/ubuntu-et-tnt-avec-me-tv/" rel="bookmark" title="Permanent Link: Ubuntu et TNT avec me-tv">Ubuntu et TNT avec me-tv</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/detecter-des-failles-dans-vos-sites-web-tres-facilement-avec-ratproxy/" rel="bookmark" title="Permanent Link: Détecter des failles dans vos sites web très facilement avec ratproxy">Détecter des failles dans vos sites web très facilement avec ratproxy</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
