<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Kaneda's Blog]]></title>
  <link href="http://kanedafromparis.github.io/atom.xml" rel="self"/>
  <link href="http://kanedafromparis.github.io/"/>
  <updated>2015-10-21T12:11:25+02:00</updated>
  <id>http://kanedafromparis.github.io/</id>
  <author>
    <name><![CDATA[kanedafromparis]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[NetBeans Days]]></title>
    <link href="http://kanedafromparis.github.io/blog/2015/10/16/Netbeans_Days_Paris/"/>
    <updated>2015-10-16T23:53:12+02:00</updated>
    <id>http://kanedafromparis.github.io/blog/2015/10/16/Netbeans_Days_Paris</id>
    <content type="html"><![CDATA[<h2><img class="left half" src="images/blog_java.svg" width="150" height="120" title="Main theme is Dev" alt="dev"></h2>

<h1>Netbeans Days</h1>

<p>Vendredi dernier avait lieu la première rencontre autour de NetBeans à Paris.
Netbeans est un IDE OpenSource écrit en Java/swing qui existe quasiment depuis aussi longtemps que JAVA.</p>

<p>Il est construit à partir d'un framework swing NetBeans Framwork qui permet des développements rapides d'application riche.</p>

<p>Je me suis occupé des vidéos en voici un résumé des interventions</p>

<h2><a href="https://www.youtube.com/watch?v=w_dVecNv6HE">Fonctionnalités et nouveautés incontournables de NetBeans IDE(VO)</a></h2>

<p>Geertjan Wielenga de oracle nous présente netbeans, ces origines est sa philosophie. Il présente les fonctionnalités de l'IDE.
 - Utilisation des structures standard des projets sans modification (Maven, ant, Node, cordova&hellip;)
 - L'outil de complétion, de création de codes et de manipulation de code
 - De nombreux widget pour refacturer le code dont le &ldquo;Turn to lamba expression&rdquo; qui permet de convertir des syntaxes de boucle 1.7 en syntaxe 1.8, plus compatible Lambda et certains diront plus lisible.
 - L'intégration au navigateur web
 &hellip;.
 C'est une bonne entrée en matière pour la prise en main de cet IDE, qui à de très nombreux atout à vous donner</p>

<h2><a href="https://www.youtube.com/watch?v=ZylVL--uhw0">La communauté NetCat</a></h2>

<p>Éric Barboni de l'Université de Toulouse nous présente la communauté NetCat, en charge de la validation de l'outil. Il s'agit de l'ensemble des travaux réalisé par la communauté pour vérifier la Qualité de l'IDE, la non-régression.
Il y a des dizaines de bénévoles qui consacrent un parti de leurs temps personnel à la vérification de l'outil.
Le cycle est de l'ordre de 3 mois, avec un mois de préparation, un mois de test et un mois de consolidation.</p>

<h2><a href="https://www.youtube.com/watch?v=ZylVL--uhw0">La communauté NetCat</a></h2>

<p>Éric Barboni de l'Université de Toulouse nous présente la communauté NetCat, en charge de la validation de l'outil. Il s'agit de l'ensemble des travaux réalisé par la communauté pour vérifier la Qualité de l'IDE, la non-régression.
Il y a une dizaine de bénévoles qui consacrent une partie de leurs temps personnel à la vérification de l'outil.
Le cycle est de l'ordre de 3 mois, avec un mois de préparation, un mois de test et un mois de consolidation.</p>

<h2><a href="https://www.youtube.com/watch?v=kh7QJq1-XqA">La communauté (suite)</a></h2>

<p>Geertjan Wielenga présente différents types de soutien de NetBeans à ces utilisateurs et présente certains cas d'usage de communication.</p>

<h2><a href="https://www.youtube.com/watch?v=b9YlEWTXxY4">De JavaEE à AngularJS</a></h2>

<p>Nebrass Lamouchi de la société de conseil Davidson SI, nous présent un cas d'usage de développement, d'un service métier exposé en REST et consommé à partir d'angular JS.</p>

<p>La présentation présente de nombreux atouts de NetBeans, comme la complétion des annotations, l'intégration de différents types de code (Java/JavaBeans/JavaScript, etc&hellip;)</p>

<p>C'est sans doute une présentation à creuser un peu pour un développement classique de JEE via Netbeans.</p>

<h2><a href="https://www.youtube.com/watch?v=KUw_ZWHuKdI">Faites nager des robots avec NetBeans Plateform</a></h2>

<p>Guillaume Genty présent RobotSwim. Il présent plus particulièrement l'interface développée en NetBeans Plateforme et comment l'IDE facilite le développement JNI (Java Native Interface). Un joli projet IOT (internet of things) avec un cas d'usage de l'apport de java pour l'intégration de composants dans des environnements complexes.</p>

<h2><a href="https://www.youtube.com/watch?v=ZylVL--uhw0">Développement rapide JavaEE avec WildFly</a></h2>

<p>Emmanuel Hugonnet de Red Hat nous présente ces travaux d'intégration de WildFly au sein de l'IDE NetBeans. Intégration qui apport une utilisation seamless du serveur d'application au sein des projets ainsi qu'un grand nombre d'aides comme l'affichage des Ressources JAX-RS. Un très beau travail qui va faciliter nos travaux de développeur.</p>

<h2><a href="https://www.youtube.com/watch?v=SsBsWLGIBHg">Plateforme NetBeans : UNESCO J-ISIS</a></h2>

<p>Jean-Claude Dauphin présente un outil de consultation des bases de données documentaire utilisée par l'UNESCO developper à l'aide de NetBeans Framework.</p>

<h2><a href="https://www.youtube.com/watch?v=B8sChXDxObM">Plateforme NetBeans : EasyTopo</a></h2>

<p>Fabrice Irie nous présente EasyTopo, un outil de consultation d'information géographique SIG (information géographique).</p>

<h2><a href="https://www.youtube.com/watch?v=4WwOQkpruj8">Plateforme NetBeans : Audiveris</a></h2>

<p>Herve Bitteur nous présent son projet Audiveris:  outils de ORM reconnaissance de partition de musique, pour pouvoir numérisé des partitions de musique pour les transformée dans un format utilisable par les programmes informatiques.</p>

<h2><a href="https://www.youtube.com/watch?v=e7KbsWSIwaY">Développement modulaire avec la plateforme NetBeans</a></h2>

<p>Présentation par Geertjan Wielenga de NetBeans Framework pour le développement rapide et modulaire d'application riche swing.
Un vrai raccourcit pour développer des applications client lourdes.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Permiers Pas Avec Ansible, Impression Perso]]></title>
    <link href="http://kanedafromparis.github.io/blog/2015/10/15/Ansible/"/>
    <updated>2015-10-15T12:53:12+02:00</updated>
    <id>http://kanedafromparis.github.io/blog/2015/10/15/Ansible</id>
    <content type="html"><![CDATA[<h2><img class="left half" src="images/blog_run.svg" width="150" height="120" title="Main theme is run" alt="Run"></h2>

<h1>Introduction</h1>

<p><a href="http://www.ansible.com">Ansible</a> est un outil python scripting de déploiement. L'idée est de définir un script d'installation. Le script est un fichier en <a href="http://yaml.org/">YAML</a>. Il me semble que sa spécificité principale est de ne pas nécessiter d'agent et d'être exécuter principalement via SSH, d'avoir un faible impact mémoire.</p>

<p>Il y a (IMHO) 3 concepts majeurs à prendre en compte :
 - Le playbook
 - Les modules
 - Les rôles</p>

<h3>le playbook</h3>

<p>C'est le script d'installation à proprement parler. Il contient une suite de propriétés qui seront utilisées pour exécuter l'installation de la machine distante.</p>

<h3>les modules</h3>

<p>Les modules sont les &ldquo;commandes&rdquo; qu'il est possible d'exécuter directement par ansible. Elles sont développées en python et encapsulent des actions de plus bas niveau (yum install, mkdir, service start etc&hellip;)</p>

<h3>Les rôles</h3>

<p>Les rôles sont des playbooks qui définissent un ensemble ou sous ensemble d'opérations d'installation. Au sein de votre SI (système d'information) vous avez des serveurs de base de données, des serveurs d'application, des reverse-proxy, etc&hellip;, ces rôles sont donc des templates (modèle) d'installation.</p>

<p>NB : _L'internet, Git, c'est le partage, la capitalisation, le croudsourcing c'est pour cela qu'il existe <a href="https://galaxy.ansible.com/">Galaxy Ansible</a> qui permets d'avoir une vaste bibliothèque de rôles développer par des tiers.</p>

<h2>En pratique</h2>

<h3>Un playbook</h3>

<p>Un  playbook ressemble à cela :</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
</pre></td><td class='code'><pre><code class='yaml'><span class='line'><span class="l-Scalar-Plain">‘‘‘</span>
</span><span class='line'><span class="l-Scalar-Plain">- hosts</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">webservers</span>
</span><span class='line'>  <span class="l-Scalar-Plain">vars</span><span class="p-Indicator">:</span>
</span><span class='line'>    <span class="l-Scalar-Plain">http_port</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">80</span>
</span><span class='line'>    <span class="l-Scalar-Plain">max_clients</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">200</span>
</span><span class='line'><span class="-Error">  </span><span class="l-Scalar-Plain">remote_user</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">root</span>
</span><span class='line'>  <span class="l-Scalar-Plain">tasks</span><span class="p-Indicator">:</span>
</span><span class='line'>  <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">ensure apache is at the latest version</span>
</span><span class='line'>    <span class="l-Scalar-Plain">yum</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">pkg=httpd state=latest</span>
</span><span class='line'>  <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">write the apache config file</span>
</span><span class='line'>    <span class="l-Scalar-Plain">template</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">src=/srv/httpd.j2 dest=/etc/httpd.conf</span>
</span><span class='line'>    <span class="l-Scalar-Plain">notify</span><span class="p-Indicator">:</span>
</span><span class='line'>    <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">restart apache</span>
</span><span class='line'>  <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">ensure apache is running (and enable it at boot)</span>
</span><span class='line'>    <span class="l-Scalar-Plain">service</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">name=httpd state=started enabled=yes</span>
</span><span class='line'>  <span class="l-Scalar-Plain">handlers</span><span class="p-Indicator">:</span>
</span><span class='line'>    <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">restart apache</span>
</span><span class='line'>      <span class="l-Scalar-Plain">service</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">name=httpd state=restarted</span>
</span><span class='line'><span class="l-Scalar-Plain">‘‘‘</span>
</span></code></pre></td></tr></table></div></figure>


<p>ou bien</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='yaml'><span class='line'><span class="l-Scalar-Plain">‘‘‘</span>
</span><span class='line'><span class="l-Scalar-Plain">- hosts</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">webservers</span>
</span><span class='line'>  <span class="l-Scalar-Plain">vars</span><span class="p-Indicator">:</span>
</span><span class='line'>    <span class="l-Scalar-Plain">http_port</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">80</span>
</span><span class='line'>    <span class="l-Scalar-Plain">max_clients</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">200</span>
</span><span class='line'><span class="-Error"> </span><span class="l-Scalar-Plain">rôles</span><span class="p-Indicator">:</span>
</span><span class='line'>   <span class="p-Indicator">-</span> <span class="p-Indicator">{</span><span class="nv">role</span><span class="p-Indicator">:</span> <span class="nv">webservers-template</span><span class="p-Indicator">}</span>
</span><span class='line'><span class="l-Scalar-Plain">‘‘‘</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Un role</h3>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class='yaml'><span class='line'><span class="l-Scalar-Plain">‘‘‘</span>
</span><span class='line'><span class="l-Scalar-Plain">ls -l ansible-xwiki-ctrl/</span>
</span><span class='line'>
</span><span class='line'><span class="l-Scalar-Plain">defaults/main.yml</span>
</span><span class='line'><span class="l-Scalar-Plain">files/main.yml</span>
</span><span class='line'><span class="l-Scalar-Plain">handlers/main.yml</span>
</span><span class='line'><span class="l-Scalar-Plain">meta/main.yml</span>
</span><span class='line'><span class="l-Scalar-Plain">tasks/main.yml</span>
</span><span class='line'><span class="l-Scalar-Plain">templates/</span>
</span><span class='line'><span class="l-Scalar-Plain">vars/main.yml</span>
</span><span class='line'><span class="l-Scalar-Plain">README.md</span>
</span><span class='line'>
</span><span class='line'><span class="l-Scalar-Plain">‘‘‘</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Installation/configuration</h2>

<p>Je passe ce point, il y a plein d'information pour cela, je n’ai pas eu de soucis avec pep (je dois commencer à m'y faire) ;-)</p>

<h2>En pratique</h2>

<p>Sur cette base, j'ai essayé de créer des rôles pour <a href="http://www.xwiki.org">XWiki</a> à titre d'exercices. J'ai donc divisé ma stack (pile applicative) suivant ces différents rôles :
 - <a href="https://github.com/kanedafromparis/ansible-xwiki-jdk">jdk</a>
 - <a href="https://github.com/kanedafromparis/ansible-xwiki-mysql">mysql</a>
 - <a href="https://github.com/kanedafromparis/ansible-xwiki-tomcat">tomcat</a>
 - <a href="https://github.com/kanedafromparis/ansible-xwiki-war">war</a>
 - <a href="https://github.com/kanedafromparis/ansible-xwiki-ctrl">ctrl</a></p>

<p>Vous trouverez les rôles sur git-hub et les exercices de variabilisation <a href="https://github.com/kanedafromparis/ansible-xwiki-example">ici</a></p>

<p>En pratique, je peux donc installer sur un serveur &ldquo;debian&rdquo; le jdk 7 ou 8 (openjdk ou oracle), mysql que je veux (debian ou mysql.org), la version d'Xwiki que je souhaite. En modifiant les vars de mon script ou la target de mon playbook.</p>

<h1>Conclusion</h1>

<h2>Complexité et modularité</h2>

<p>Mon constat est que comme souvent le niveau de variablilisation, de ce qu'il faut rendre paramétrable, est toujours un curseur à revoir en fonction du contexte et de ce que l'on souhaite mettre en oeuvre.</p>

<h2>Strategie d'upload</h2>

<p>Ayant travaillé depuis ma machine locale, j'ai downloadé plusieurs fois au cours de l'exercice les paquets de plusieurs Mo. Il y a des stratégies, pour les copier depuis sa machine et/ou répliquer en parallèle. C'est un point qu'il est nécessaire de creuser en fonction de son environnement.</p>

<h2>Immuabilité et test</h2>

<p>Personnellement, j'ai utilisé Virtualbox pour faire des snapshot et valider mes playbook, j'ai regardé pour le fun docker+jenkins, un retour dessus peut être plus tard.</p>

<h2>Strategie de template de VM</h2>

<p>Avec ansible, je produis un script d'installation qui me permet notamment d'avoir un seul script, quels que soient mes environnements (en ayant variabilisé les OS), mais cela peu prendre un certain temps, il peut y avoir des gains à partir d'image de VM provisionner.
J'ai entendu parler d'utiliser ansible sur docker pour les environnements de dev et d'appliquer ces derniers sur des VM pour la prod.
À creuser&hellip;</p>

<h1>Les deux trois trucs pour débugger</h1>

<h4>Pour connaître les facts</h4>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ansible -m setup nodexwiki <span class="p">|</span> less
</span></code></pre></td></tr></table></div></figure>


<h4>Pour valider la bonne interprétation du playbooks</h4>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ansible-playbook ansible-xwiki-example/example.yml --check
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Les Bases De SSH]]></title>
    <link href="http://kanedafromparis.github.io/blog/2015/10/12/SSH-basics/"/>
    <updated>2015-10-12T21:53:12+02:00</updated>
    <id>http://kanedafromparis.github.io/blog/2015/10/12/SSH-basics</id>
    <content type="html"><![CDATA[<h2><img class="left half" src="images/blog_run.svg" width="150" height="120" title="Main theme is run" alt="Run"></h2>

<h1>L'accès à distance</h1>

<p>Dans mon blog précédent, on s'est rappelé combien la ligne de commande était un outil pratique et que cela permettait d'automatiser des opérations. L'informatique c'est l'automatisation par nature.
La ligne de commande permet donc d'enchaîner mes taches. C'est une abstraction en cela que votre ligne de commande peut être exécutée à distance.
Historiquement via telnet, mais le flux réseau en telnet n'est pas chiffrer, on préfère donc utiliser SSH (Secure Shell).</p>

<h1>SSH</h1>

<h2>Clés publiques</h2>

<p>Pour que l'échange soit privé, il y a un mécanisme de chiffrement asymétrique, avec un CLe priver et une clé publique. Lorsque vous vous connectez à un serveur ayant un service SSH, vous faites un échange de clés. La clé du serveur sera associée à son IP dans ~/.ssh/known_hosts.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='Bash'><span class='line'><span class="c"># ssh jvaljeanuser@example.com</span>
</span><span class='line'>Host key not found from the list of known hosts.
</span><span class='line'>Are you sure you want to <span class="k">continue</span> connecting <span class="o">(</span>yes/no<span class="o">)</span>? yes
</span><span class='line'>Host <span class="s1">&#39;example.com&#39;</span> added to the list of known hosts.
</span><span class='line'>user@example.com<span class="err">&#39;</span>s password: *******
</span></code></pre></td></tr></table></div></figure>


<p>Par défaut, un serveur ssh autorise l'authentification par mot de passe. C'est pratique, mais finalement pas tellement sécurisé.
<em>Pizza73</em> et <em>01022008</em> sont des mots de passe faciles à bruteforcer. Il est donc préférable de préférer une authentification par clés.</p>

<h2>configuration OpenSSH</h2>

<p>Pour mieux sécuriser son serveur, on va :</p>

<ul>
<li>interdire l'utilisateur root</li>
<li>interdire l'authentification par mots de passe</li>
<li>définir l'emplacement des clés autorisé</li>
<li>ajoute la clés de l'utilisateur jvaljean (on verra comment la créer plus loin)</li>
</ul>


<p>NB : Cette commande est proposée en root, mais elle passe avec sudo.</p>

<p><strong> ATTENTION </strong> après cela on ne peut plus ce connecter avec l'utilisateur root</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">TIMESLOT</span><span class="o">=</span><span class="sb">`</span>date +%Y-%m-%d-%H-%M-%S<span class="sb">`</span> <span class="o">&amp;&amp;</span> cp /etc/ssh/sshd_config /etc/ssh/sshd_config.<span class="nv">$TIMESLOT</span> <span class="o">&amp;&amp;</span> <span class="se">\</span>
</span><span class='line'>sed -i -e <span class="s2">&quot;s/PermitRootLogin yes/PermitRootLogin no/g&quot;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> <span class="se">\</span>
</span><span class='line'>sed -i -e <span class="s2">&quot;s/#PasswordAuthentication yes/PasswordAuthentication no/g&quot;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> <span class="se">\ </span>
</span><span class='line'>/etc/init.d/sshd restart <span class="o">&amp;&amp;</span> <span class="se">\</span>
</span><span class='line'>mkdir /home/jvaljean/.ssh/ <span class="o">&amp;&amp;</span>
</span><span class='line'><span class="nb">echo</span> <span class="s2">&quot;ssh-rsa X2xEB3NzaC1yc2EX2xEDAQABAAACAQCb3AG5VnbDxV3iEdLd+gqVQsOWlx7rg9K4O7i8S8SK5j1/tMq8LWTpzQToEUvOU1Psgmk/rMG2y1qvk1J3xN5s+YIeisXznMgdAF7qotGFbZy1Z6qd/hDqnmu0WbxBBvQOwe4CeyQ75heGx5HXiD2Sshv5sLemNcST4UwNx/TWBpcH0y5oGH1j+3opexQM4enOkJCFAvkBiwJ/oS4v55Qdd59dXHFr9h9TP5MYSa6H/x4BJjumAr9Epd1zTaiuR475cIjmSfB5cHDTqFv82FKCLl2IBnNc2rw5ISXASqcOblbRayEq73kEvd8zuyeA9cAT3Eq9Y3j15mAsjjwQEHx31lt6iLFIZaaCmTYtN3g7F6hv2VnVAJGmwc6cD7Ow9HGo4pLSjxqUwYdVLKSz/5ftT/bltK0S6DicNrGhCRBFUIL7EKO5pqrUa5bKQfHyiKCv8WvjK97KUpqKlCDE+Q7mpJZ3VnFz2WYVczS0sP39g9L976QJ80EfjllwD3cvfduhNhCFoVd3cLVWyxIUW7b/gpfulLgKhT4LabQdWx5445LHMiUSnGql3gH/P/bn5d/5YWvDZTo3YICE0fSEq--4qhQbXRdIPZQxf+yTbIB91ZuXtJrPRLYUWdfXCYsl4ktrqAlfycopOD5vjeNtvWyUhHg3zFVIb+Hzb7e3ZIzYtQ== jvaljean@example.com&quot;</span> &gt;&gt; /home/jvaljean/.ssh/authorized_keys <span class="o">&amp;&amp;</span>
</span><span class='line'>chown -Rv jvaljean:jvaljean /home/jvaljean/.ssh/ <span class="o">&amp;&amp;</span> <span class="se">\</span>
</span><span class='line'>chmod u+rw,og-rwx /home/jvaljean/.ssh/authorized_keys
</span></code></pre></td></tr></table></div></figure>


<p>Maintenant, l'utilisateur root ne peux plus ce connecter, l'utilisateur jvaljean peut se connecter uniquement avec sa clé publique &ldquo;ssh-rsa X2x&hellip;&rdquo;</p>

<h2>création de la clé</h2>

<p>Pour créer sa cles il faut choisir :</p>

<ul>
<li>sa taille : <em>4 096</em> (d'après l'ANSII donne une durée de vie acceptable ici : <a href="http://www.ssi.gouv.fr/uploads/2015/01/RGS_v-2-0_B1.pdf">http://www.ssi.gouv.fr/uploads/2015/01/RGS_v-2-0_B1.pdf</a>)</li>
<li>l'algorithme : RSA (par défaut)</li>
<li>l'emplacement de la clé (Et oui, on peut et devrais avoir plusieurs clés, on y reviendra plus loin, sinon c'est id_rsa)</li>
<li>un mot de passe pour utiliser la clé (évitons pizza82)</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ssh-keygen -t rsa -b <span class="m">4096</span> -C <span class="s2">&quot;jvaljean@example.com&quot;</span>
</span></code></pre></td></tr></table></div></figure>


<p>ou</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ssh-keygen -t rsa -b <span class="m">4096</span> -C <span class="s2">&quot;jvaljean@example.com&quot;</span> -f ~/.ssh/id_mongroupedeserver_algo
</span></code></pre></td></tr></table></div></figure>


<p>Après on peut se connecter au serveur ayant notre clé avec la commande ssh
Rappel :</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ssh example.com
</span></code></pre></td></tr></table></div></figure>


<p>ou</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ssh -p <span class="m">22</span> -i ~/.ssh/id_mongroupedeserver_algo jvaljean@example.com
</span></code></pre></td></tr></table></div></figure>


<p></p>

<h2>le port-mapping</h2>

<p>Une fonction très pratique de SSH est le port mapping il est possible de mapper un port de votre client local à celui du serveur distant. Cela permet de vous connecter à distance sur vos serveurs comme si vous étiez dans votre réseau. on
peut par exemple mapper le port 8080 d'un Tomcat sur son 8888 local comme ceci</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>ssh -p <span class="m">22</span> -i ~/.ssh/id_mongroupedeserver_algo jvaljean@example.com -L 127.0.0.1:8888:example.com:8080
</span></code></pre></td></tr></table></div></figure>


<p></p>

<p>on pourra par la suite accéder depuis son client web local sur <a href="http://127.0.0.1:8888">http://127.0.0.1:8888</a> comme si nous étions sur le réseau local de la machine</p>

<h2>~/.ssh/config</h2>

<p>Nous l'avons vu précédemment, la clé d'authenfication est précieuse, mais il est parfois nécessaire de la copier sur d'autre machine, elle peut être corrompu ou obsolète. Enfin, certains groupes de serveur peuvent nécessiter des sécurités différentes.
Pour cela, il est conseillé d'avoir plusieurs cles. Pour éviter de taper des commandes trop longues, il est possible de définir les commandes &ldquo;par défaut, par host dans &rdquo;~/.ssh/config" sous la forme :</p>

<ul>
<li>Host : les serveurs utilisant cette configuration (liste séparée d'un espace)</li>
<li><pre><code>Hostname : le nom du serveur qui appelle celui annoncé par le client
User : le nom de l'utilisateur à utiliser
  IdentityFile ~/.ssh/id_github_mb35_rsa
</code></pre></li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Host example.com
</span><span class='line'>        Hostname jvaljean@example.com
</span><span class='line'>        User jvaljean@example.com
</span><span class='line'>        LocalForward <span class="m">8888</span> 127.0.0.1:8080
</span><span class='line'>        IdentityFile ~/.ssh/id_mongroupedeserver_algo 
</span></code></pre></td></tr></table></div></figure>


<p></p>

<h2>Conclusion</h2>

<p>SSH est l'outil de base du sysadmin et du très tendance DevOps.
IMHO (à mon humble avis) &ldquo;~/.ssh/config&rdquo; n'est pas suffissement connu.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Les Bases De La Ligne De Commandes]]></title>
    <link href="http://kanedafromparis.github.io/blog/2015/10/03/bash-basics/"/>
    <updated>2015-10-03T21:53:12+02:00</updated>
    <id>http://kanedafromparis.github.io/blog/2015/10/03/bash-basics</id>
    <content type="html"><![CDATA[<h2><img class="left half" src="images/blog_run.svg" width="150" height="120" title="Main theme is run" alt="Run"></h2>

<h2>Les terminaux</h2>

<p>Un terminal est un accès à un ordinateur central. Sous Linux, on parle de terminal pour l'invite de commande. L'avantage de l'invite de commande à mon avis est que c'est :</p>

<ul>
<li>simple</li>
<li>relativement standard (malgré des querelles d'interpréteur que je ne développerais pas maintenant)</li>
<li>faible coût et faible coût réseau</li>
<li>facilement automatisable</li>
</ul>


<p>C'est pourquoi c'est sans doute l'outil de base qu'il faut apprendre à maîtriser en priorité. IMHO (à mon humble avis), c'est l'essence de l'informatique, le reste devrait découler naturellement dans l'optique basic de ce simplifier la vie.</p>

<h3>l'enchaînement des commandes</h3>

<p>Mes commandes de prédilections sont :</p>

<ul>
<li><em>cat</em> et <em>zcat</em> pour afficher les contenus d'un fichier</li>
<li><em>less</em> et <em>zless</em> pour afficher les contenus d'un fichier de façon interactive</li>
<li><em>grep</em> pour trouver un morceau de texte dans un long fichier</li>
<li><em>tail</em> pour afficher la fin d'un fichier texte</li>
<li><em>tail -f</em> pour afficher la fin d'un fichier texte et</li>
<li><em>mnon</em> qui affiche l'activité de mon serveur</li>
<li><em>sed</em> pour remplacer un morceau de TEXT par un autre</li>
<li><em>sudo</em> pour passer des commandes avec des droits particuliers (souvent, root)</li>
</ul>


<p>Je pense qu'il faut comprendre l'idée des &ldquo;pipe&rdquo; (tuyaux) en priorité. L'idée est que votre travail est un flux, comme un cours d'eau ou un courant électrique et que vous avez la possibilité de brancher les entrées et les sorties de vos commandes les unes aux autres.</p>

<p>Les branchements sont :</p>

<ul>
<li>&ldquo;;&rdquo; juste pour enchaîner les commandes</li>
<li>&ldquo;&amp;&amp;&rdquo; pour enchaîner les commandes uniquement tant que les commandes s'exécutent sans problème</li>
<li>&ldquo;|&rdquo; prendre en entrée la sortie d'une autre commande</li>
<li>&ldquo;&lt;&rdquo; donne en entrée la sortie d'une autre commande</li>
<li>&ldquo;>&rdquo; écrire et remplacer le contenu de la commande dans un fichier</li>
<li>&ldquo;>>&rdquo; écrire ajouter le contenu de la commande dans un fichier</li>
</ul>


<p>En pratique, pour mettre à jour un fichier de configuration par exemple après avoir créé commander un nouveau serveur, vous voulez :</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>- créer l'utilisateur jvaljean 
</span><span class='line'> - créer un groupe admin
</span><span class='line'> - mettre jvaljean dans ce groupe
</span><span class='line'> - donner les droits de sudo aux membres de ce groupe 
</span><span class='line'> - interdire l'accès à votre machine à l'utilisateur root depuis SSH</span></code></pre></td></tr></table></div></figure>


<p>Vous pouvez taper les commandes suivantes :</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>adduser jvaljean
</span><span class='line'>groupadd admin
</span><span class='line'>adduser jvaljean admin
</span><span class='line'>nano /etc/sudoers <span class="o">(</span>et ajouter <span class="s2">&quot;%admin    ALL=(ALL) ALL&quot;</span> à la fin du fichier<span class="o">)</span>
</span><span class='line'>nano /etc/ssh/sshd_config <span class="o">(</span>et remplacer <span class="s2">&quot;PermitRootLogin yes&quot;</span> par <span class="s2">&quot;PermitRootLogin no&quot;</span><span class="o">)</span>
</span><span class='line'>relancer le service /etc/init.d/ssh restart
</span></code></pre></td></tr></table></div></figure>


<p>ou bien faire :</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>adduser jvaljean <span class="o">&amp;&amp;</span> groupadd admin <span class="o">&amp;&amp;</span> adduser jvaljean admin <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&quot;%admin    ALL=(ALL) ALL&quot;</span> &gt;&gt; /etc/sudoers <span class="o">&amp;&amp;</span> sudo sed -i -e <span class="s1">&#39;s/PermitRootLogin yes/PermitRootLogin no/g&#39;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sleep <span class="m">2</span> <span class="o">&amp;&amp;</span> sudo /etc/init.d/ssh restart
</span></code></pre></td></tr></table></div></figure>


<p>Pour connaître les IP qui se sont connectés à votre serveur le &ldquo;30 août entre 6 et 7 vous pouvez :</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>récupère votre fichier de log (scp ou ftp)
</span><span class='line'>l'importer sur Excel
</span><span class='line'>utiliser les filtres pour obtenir l'information</span></code></pre></td></tr></table></div></figure>


<p>ou faire :</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>zcat /var/log/apache2/xwiki-access.log <span class="p">|</span> grep <span class="s2">&quot;30/Aug/2015:06&quot;</span> <span class="p">|</span> <span class="se">\</span>
</span><span class='line'>awk <span class="s1">&#39;{split($0,a,&quot; &quot;); print a[1]}&#39;</span> <span class="p">|</span> sort -nu
</span></code></pre></td></tr></table></div></figure>


<p>ou pour connaître la navigation de 192.168.1.10 le 30 Août 2015</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>zcat /var/log/apache2/xwiki-access.log.6.gz <span class="p">|</span> grep <span class="s2">&quot;30/Aug/2015&quot;</span> <span class="p">|</span> <span class="se">\</span>
</span><span class='line'>grep <span class="s2">&quot;192.168.1.10&quot;</span> <span class="p">|</span> awk <span class="s1">&#39;{split($0,a,&quot; &quot;); print a[4] a[6] a[7]}&#39;</span>
</span></code></pre></td></tr></table></div></figure>


<p>Et puis pour s'envoyer par mail le nombre d'IP connecter en une journée en une commande</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">TIMESLOT</span><span class="o">=</span><span class="sb">`</span>date +%d/%b/%Y<span class="sb">`</span> <span class="o">&amp;&amp;</span> <span class="se">\</span>
</span><span class='line'><span class="nv">NIP</span><span class="o">=</span><span class="k">$(</span>cat /var/log/apache2/xwiki-access.log <span class="p">|</span> grep <span class="s2">&quot;$TIMESLOT&quot;</span> <span class="p">|</span> <span class="se">\</span>
</span><span class='line'>awk <span class="s1">&#39;{split($0,a,&quot; &quot;); print a[1]}&#39;</span> <span class="p">|</span> sort -nu <span class="p">|</span> wc -l<span class="k">)</span> <span class="se">\</span>
</span><span class='line'><span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&quot;$NIP on $TIMESLOT&quot;</span> <span class="p">|</span> mail -s <span class="s2">&quot;$NIP on $TIMESLOT&quot;</span> jvaljean@gmail.org
</span></code></pre></td></tr></table></div></figure>


<h2>Conclusion</h2>

<p>Probablement rien de nouveau sous le soleil je pense, mais je me suis dit qu'il était préférable d'avoir parlé de ces bases, avant de passer à la suite.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Bonjour Le Monde]]></title>
    <link href="http://kanedafromparis.github.io/blog/2014/07/29/bonjour-le-monde/"/>
    <updated>2014-07-29T19:53:12+02:00</updated>
    <id>http://kanedafromparis.github.io/blog/2014/07/29/bonjour-le-monde</id>
    <content type="html"><![CDATA[<p>Voici mon premier blog sur ce Git-hub, Je suppose qu'il faut se présenter. Je suis donc développeur/architecte technique indépendant.
Je fais des développeurs Java/Linux depuis plus de quinze ans.
Assez sensible à la problématique de la sécurité, j'ai pas mal attendu avant de m'exprimer sur internet. Mais avec mes différentes activités, cela devient quaisement incontournable.
Le but de ce blog est de capitaliser, pour moi, et ceux que cela aide, des trucs et astuces de dev ainsi que quelques réflexions sur le métier d'architecte SI.</p>
]]></content>
  </entry>
  
</feed>
