<?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>Ingnu &raquo; Ingnu</title>
	<atom:link href="http://ingnu.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://ingnu.fr</link>
	<description>Liberté !</description>
	<lastBuildDate>Wed, 22 Feb 2012 13:57:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>C&#8217;est pas Libre, mais c&#8217;est ce qu&#8217;il y a de mieux</title>
		<link>http://ingnu.fr/2012/02/22/cest-pas-libre-mais-cest-ce-quil-y-a-de-mieux/</link>
		<comments>http://ingnu.fr/2012/02/22/cest-pas-libre-mais-cest-ce-quil-y-a-de-mieux/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 13:57:12 +0000</pubDate>
		<dc:creator>Jimmy Rudolf</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[hdi]]></category>
		<category><![CDATA[minecraft]]></category>
		<category><![CDATA[opera]]></category>

		<guid isPermaLink="false">http://ingnu.fr/?p=632</guid>
		<description><![CDATA[J&#8217;avais un peu de mal à choisir un titre pour cet article : je le voulais pas trop long et explicite. Je ne veux pas qu&#8217;on pense que je fais l&#8217;apologie du privateur au détriment des solutions Libres existantes, loin de moi l&#8217;idée. Mon idée est plus : &#171;&#160;Putain, ça pootrerait si c&#8217;était Libre&#171;&#160;. Les &#8230; </p><p><a class="more-link block-button" href="http://ingnu.fr/2012/02/22/cest-pas-libre-mais-cest-ce-quil-y-a-de-mieux/">Lire la Suite &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ingnu.fr/2012/02/22/cest-pas-libre-mais-cest-ce-quil-y-a-de-mieux/attachment/4/" rel="attachment wp-att-633"><img class="alignleft size-medium wp-image-633" title="4" src="http://ingnu.fr/wp-content/uploads/2012/02/4-300x225.jpg" alt="" width="300" height="225" /></a>J&#8217;avais un peu de mal à choisir un titre pour cet article : je le voulais pas trop long et explicite. Je ne veux pas qu&#8217;on pense que je fais l&#8217;apologie du privateur au détriment des solutions Libres existantes, loin de moi l&#8217;idée. Mon idée est plus : &laquo;&nbsp;<em>Putain, ça pootrerait si c&#8217;était Libre</em>&laquo;&nbsp;.</p>
<p>Les occasions sont rares où les Logiciels Libres sont absents d&#8217;un secteurs, ou ne font pas le poids face à un logiciel privateur. Desktop, serveur, embarqué, GNU domine sur le plan technique, grâce aux développeurs de talent disséminés à travers le monde mais unis sous la bannière du Logiciel Libre.</p>
<p>Malheureusement, il y a encore quelques domaines ou le Libre est relativement absent, ou inférieur techniquement, ou embarqué dans du matériel difficile ou impossible à se procurer chez nous. Il se peut même que le Logiciel Libre en question <a title="Pourquoi ne pas utiliser certains logiciels « Libres »" href="http://ingnu.fr/2012/01/10/pourquoi-ne-pas-utiliser-certains-logiciels-libres/">n&#8217;est pas si Libre que ça</a>&#8230; Bref, il y a des situations où on doit ou préfère encore utiliser des logiciels privateurs. Même Richard Stallman doit parfois faire des concessions dans le domaine du Libre (il conduit une voiture qui est emblématique de l&#8217;ultra-capitalisme, mais ce n&#8217;est pas le sujet).</p>
<p>Premier cas : les plateformes multimédias en réseau. Je ne cause pas des NAS Libres avec serveur UPnP, je parle des platines de salon. J&#8217;en ai testé quelques unes, pour finalement opter pour une <a href="http://dune-hd.com/hd_players/current/135-dune-hd-max.html">HDI Dune HD Max</a>. Le firmware n&#8217;est pas libre, mais cette platine lit tout, et accède aux fichiers situés sur pratiquement n&#8217;importe quel type de partage : UPnP bien sûr, mais aussi cifs, nfs, ftp, la totale. Elle pêche un peu sur la lecture de certains Blu-ray qui ont tendance à la bloquer, et c&#8217;est là qu&#8217;on se dit : &laquo;&nbsp;<em>Si le firmware de cette platine était Libre, ce serait la platine ultime</em>&laquo;&nbsp;.</p>
<p>Deuxième cas : les jeux. Il y a de bons projets, de très bons même, mais étrangement, le commun des mortels n&#8217;en entend jamais parler. Demandez autour de vous, qui connaît 0AD à part les geeks ? Ou Flightgear ? Ou même OpenArena ? Voire Battle for Wesnoth ?</p>
<p>Ce qui m&#8217;amène à aborder un peu plus en profondeur le cas Minecraft.</p>
<p>Le modèle économique de ce jeu est un véritable scandale : il est vendu 20€, sans boîte, et l&#8217;essentiel du manuel est écrit par la communauté des utilisateurs. En plus, sa sortie de bêta est relativement récente, alors payer pour un jeu pas fini, non merci. Et pourtant&#8230;</p>
<p>Pourtant, le site officiel parle de 5 millions d&#8217;acheteurs. Et le jeu est diablement addictif. Quand on installe le jeu la première fois (ou qu&#8217;on y rejoue après une longue pause), sans mods sans rien, on s&#8217;émerveille devant tout un tas de petites choses, comme la gestion des intempéries, le cycle jour-nuit, les différents environnements, les cavernes, la peur de se faire débusquer par un zombie, etc. Puis après quelques jours, on se lasse un peu, alors on installe des mods, peu ou pas supportés par Mojang. Et là, c&#8217;est le pied : de nombreux mods intéressants sont Libres.</p>
<p>Et c&#8217;est là qu&#8217;on se dit : &laquo;&nbsp;<em>Si Minecraft était Libre, ce serait le meilleur jeu du moment</em>&laquo;&nbsp;.</p>
<p>Troisième cas : les navigateurs. Ne venez pas vous la raconter avec Chrome (développé par Google, ça se passe de commentaires), Firefox (développé par Mozilla qui pactise avec l&#8217;ennemi), ou les dérivés. Tout ça, c&#8217;est bien gentil, mais faut lire entre les lignes, et ça, c&#8217;est pas normal. Un logiciel Libre, c&#8217;est UNE licence compatible GPL et c&#8217;est marre. Si on intègre des bouts de code non Libre, on n&#8217;a qu&#8217;à le réécrire, c&#8217;est aussi simple que ça. Et là je parle que des licences, je ne parle même pas des fonctionnalités. Tout simplement inexistantes pour le premier. Bref.</p>
<p>Il en résulte que parmi les 2.5% d&#8217;utilisateurs d&#8217;Opera, il y a moi. Et un nombre incalculable de GROS geeks.</p>
<p>Et là on se dit : &laquo;&nbsp;<em>Si Opera était Libre, ce serait le navigateur ultime</em>&laquo;&nbsp;.</p>
<p>Alors je lance une idée comme ça : que pensez-vous que nous montions tous ensemble une pétition pour la libération du code source de certains produits ou logiciels privateurs que nous, geeks, utilisons ? Si l&#8217;idée vous tente et que vous connaissez un site ou une application pour ça, faites-m&#8217;en part. Une fois qu&#8217;on aura tous signé, j&#8217;enverrai le tout aux principaux intéressés.</p>
]]></content:encoded>
			<wfw:commentRss>http://ingnu.fr/2012/02/22/cest-pas-libre-mais-cest-ce-quil-y-a-de-mieux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vue d&#8217;ensemble et conclusion</title>
		<link>http://ingnu.fr/2012/02/19/vue-densemble-et-conclusion/</link>
		<comments>http://ingnu.fr/2012/02/19/vue-densemble-et-conclusion/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 23:33:41 +0000</pubDate>
		<dc:creator>Jimmy Rudolf</dc:creator>
				<category><![CDATA[Créer son propre cloud]]></category>

		<guid isPermaLink="false">http://ingnu.fr/?p=419</guid>
		<description><![CDATA[Voilà, notre série d&#8217;articles consacrée à la mise en place d&#8217;un cloud personnel nous permettant de nous affranchir des solutions propriétaires en ayant recours uniquement à des Logiciels Libres touche à sa fin. Vous disposez désormais d&#8217;un ensemble d&#8217;outils performants, sécurisés, fiables et faciles à entretenir. Vous avez votre cloud ! Pour y voir un &#8230; </p><p><a class="more-link block-button" href="http://ingnu.fr/2012/02/19/vue-densemble-et-conclusion/">Lire la Suite &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ingnu.fr/2012/01/19/il-faut-arreter-avec-le-cloud/cumulus_cloud/" rel="attachment wp-att-182"><img class="alignleft size-medium wp-image-182" title="Cumulus_cloud" src="http://ingnu.fr/wp-content/uploads/2012/01/Cumulus_cloud-300x200.jpg" alt="" width="300" height="200" /></a>Voilà, <a href="http://ingnu.fr/category/creer-son-propre-cloud/">notre série d&#8217;articles consacrée à la mise en place d&#8217;un cloud personnel</a> nous permettant de nous affranchir des solutions propriétaires en ayant recours uniquement à des Logiciels Libres touche à sa fin. Vous disposez désormais d&#8217;un ensemble d&#8217;outils performants, sécurisés, fiables et faciles à entretenir. Vous avez votre cloud !</p>
<p>Pour y voir un peu plus clair, je vous propose, à travers ce dernier article, de faire le point sur ce que nous avons fait, sur ce qui est en place, et sur ce qui peut encore être optimisé dans le futur.</p>
<h2>Articles publiés, sommaire</h2>
<ul>
<li><a title="Créer son propre Cloud : Introduction" href="http://ingnu.fr/2012/02/05/creer-son-propre-cloud-introduction/">Créer son propre Cloud : Introduction</a></li>
<li><a title="Installer et configurer un serveur DNS" href="http://ingnu.fr/2012/02/05/installer-et-configurer-un-serveur-dns/">Installer et configurer un serveur DNS</a></li>
<li><a title="Création de sa propre autorité de certification" href="http://ingnu.fr/2012/02/06/creation-de-sa-propre-autorite-de-certification/">Création de sa propre autorité de certification</a></li>
<li><a title="Installation de son propre serveur mail" href="http://ingnu.fr/2012/02/06/installation-de-son-propre-serveur-mail/">Installation de son propre serveur mail</a></li>
<li><a title="Installation d’un serveur HTTP/HTTPS" href="http://ingnu.fr/2012/02/07/installation-dun-serveur-http-https/">Installation d’un serveur HTTP/HTTPS</a></li>
<li><a title="Kronolith : une alternative à Google Calendar" href="http://ingnu.fr/2012/02/07/kronolith-une-alternative-a-google-calendar/">Kronolith : une alternative à Google Calendar</a></li>
<li><a title="Communiquer via XMPP" href="http://ingnu.fr/2012/02/08/communiquer-via-xmpp/">Communiquer via XMPP</a></li>
<li><a title="Son propre réseau social avec status.net" href="http://ingnu.fr/2012/02/08/son-propre-reseau-social-avec-status-net/">Son propre réseau social avec status.net</a></li>
<li><a title="Partager ses fichiers sur les réseaux sociaux avec SMP" href="http://ingnu.fr/2012/02/09/partager-ses-fichiers-sur-les-reseaux-sociaux-avec-smp/">Partager ses fichiers sur les réseaux sociaux avec SMP</a></li>
<li><a title="Une alternative à Dropbox" href="http://ingnu.fr/2012/02/12/une-alternative-a-dropbox/">Une alternative à Dropbox</a></li>
<li><a title="Gérer ses photos avec PhotoShow" href="http://ingnu.fr/2012/02/13/gerer-ses-photos-avec-photoshow/">Gérer ses photos avec PhotoShow</a></li>
<li><a title="Renforcer la sécurité de son serveur" href="http://ingnu.fr/2012/02/13/renforcer-la-securite-de-son-serveur/">Renforcer la sécurité de son serveur</a></li>
<li><a title="Trucs et astuces pour son serveur privé" href="http://ingnu.fr/2012/02/13/trucs-et-astuces-pour-son-serveur-prive/">Trucs et astuces pour son serveur privé</a></li>
<li><a title="Sauvegarder et restaurer son serveur" href="http://ingnu.fr/2012/02/19/sauvegarder-et-restaurer-son-serveur/">Sauvegarder et restaurer son serveur</a></li>
</ul>
<h2>Ports réseaux</h2>
<p>En toute logique, depuis l&#8217;extérieur, tous les ports de votre serveur sont fermés, à l&#8217;exception des ports suivants :</p>
<table>
<thead>
<tr>
<th>Port</th>
<th>Utilisation</th>
</tr>
</thead>
<tbody>
<tr>
<td>22</td>
<td>Accès au serveur via SSH</td>
</tr>
<tr>
<td>25</td>
<td>Accès au serveur SMTP (connexion non sécurisée)</td>
</tr>
<tr>
<td>53</td>
<td>Accès au serveur DNS</td>
</tr>
<tr>
<td>80</td>
<td>Accès au serveur HTTP (connexion non sécurisée)</td>
</tr>
<tr>
<td>443</td>
<td>Accès au serveur HTTPS (connexion sécurisée)</td>
</tr>
<tr>
<td>465</td>
<td>Accès au serveur SMTPS (connexion sécurisée)</td>
</tr>
<tr>
<td>993</td>
<td>Accès au serveur IMAPS (connexion sécurisée)</td>
</tr>
<tr>
<td>5222</td>
<td>Accès au serveur XMPP</td>
</tr>
<tr>
<td>5269</td>
<td>Accès au serveur XMPP</td>
</tr>
</tbody>
</table>
<h2>Applications installées</h2>
<ul>
<li><a href="http://www.apache.org/">Apache</a> (serveur HTTP et HTTPS + Webdav)</li>
<li><a href="http://www.isc.org/software/bind">Bind</a> (serveur DNS)</li>
<li><a href="http://www.mysql.com/">MySQL</a> (base de données)</li>
<li><a href="http://www.postfix.org/">Postfix</a> (serveur SMTP et SMTPS)</li>
<li><a href="http://dovecot.org/">Dovecot</a> (serveur IMAP et IMAPS, gestion des filtres sieve)</li>
<li><a href="http://prosody.im/">Prosody</a> (serveur XMPP et BOSH)</li>
<li><a href="http://www.cis.upenn.edu/~bcpierce/unison/">Unison</a> (synchronisation)</li>
<li><a href="http://www.fail2ban.org">fail2ban</a> (sécurisation)</li>
<li><a href="http://rsync.samba.org/">rsync</a> (sauvegarde)</li>
</ul>
<h2>Applications web installées</h2>
<ul>
<li><a href="http://www.phpmyadmin.net/">phpMyAdmin</a> (gestion de la base de données)</li>
<li><a href="http://roundcube.net/">RoundCube</a> (client mail)</li>
<li><a href="http://www.horde.org/">Horde</a> + <a href="http://www.horde.org/apps#kronolith-">Kronolith</a> (agenda partagé)</li>
<li><a href="https://project.jappix.com/">Jappix</a> (client XMPP)</li>
<li><a href="http://status.net/">Status.net</a> (réseau social)</li>
<li><a href="http://sharemypics.net">SMP</a> (partage de fichiers sur les réseaux sociaux)</li>
<li>Horde + <a href="http://www.horde.org/apps#gollem-">Gollem</a> (accès aux fichiers)</li>
<li><a href="http://www.photoshow-gallery.com/">PhotoShow</a> (galerie de photos)</li>
<li><a href="http://phpsysinfo.sourceforge.net/">phpSysInfo</a> (monitoring)</li>
</ul>
<h2>Améliorations, ajouts</h2>
<p>En l&#8217;état, vous disposez d&#8217;une base, bien fournie mais une base tout de même à laquelle on peut ajouter beaucoup d&#8217;autres choses :</p>
<ul>
<li>un serveur de streaming audio/vidéo</li>
<li>des serveurs de jeux comme Minecraft ou Half Life qui offrent un serveur natif GNU/Linux</li>
<li>des scripts plus personnalisés</li>
<li>d&#8217;autres applications web (blog, agrégateur de contenu, syndication, utilitaires de la vie courante)</li>
<li>la gestion d&#8217;un onduleur</li>
<li>j&#8217;aurai aimé compléter l&#8217;article sur <a title="Communiquer via XMPP" href="http://ingnu.fr/2012/02/08/communiquer-via-xmpp/">XMPP</a> en rajoutant des astuces pour l&#8217;intégration avec postfix/dovecot pour la notification de nouveaux messages ou pour un monitoring interactif du serveur, mais je n&#8217;ai pas eu le temps de tester moi-même</li>
<li>et probablement d&#8217;autres choses qui ne me viennent pas immédiatement à l&#8217;esprit</li>
</ul>
<h2>Remerciements</h2>
<p>Je remercie :</p>
<ul>
<li>tous mes lecteurs qui ont contribué de près ou de loin à la rédaction de ces articles</li>
<li>les bloggeurs qui m&#8217;ont linké</li>
<li>mes followers, qu&#8217;ils soient sur twitter, facebook ou <a href="https://social.ingnu.fr/ingnu">status.net</a></li>
<li>Coca Cola et Red Bull (qui auraient pu me fournir quelques canettes gracieusement, franchement&#8230;)</li>
<li>ma femme qui m&#8217;a supporté</li>
<li>mes chats qui ne sont pas montés sur le bureau trop souvent pendant que j&#8217;écrivais</li>
<li>mes PC qui ne m&#8217;ont pas lâché pendant que je les torturais</li>
<li>l&#8217;Allemagne qui ne signe pas ACTA</li>
<li>mes parents sans qui je ne serai pas là aujourd&#8217;hui</li>
<li>ceux qui riront en lisant mes remerciements, particulièrement celle concernant mes parents</li>
</ul>
<p>Continuez de m&#8217;écrire, me linker et m&#8217;aider. Vous me donnez un but en le faisant : contribuer aux communautés du Libre !</p>
]]></content:encoded>
			<wfw:commentRss>http://ingnu.fr/2012/02/19/vue-densemble-et-conclusion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sauvegarder et restaurer son serveur</title>
		<link>http://ingnu.fr/2012/02/19/sauvegarder-et-restaurer-son-serveur/</link>
		<comments>http://ingnu.fr/2012/02/19/sauvegarder-et-restaurer-son-serveur/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 23:14:49 +0000</pubDate>
		<dc:creator>Jimmy Rudolf</dc:creator>
				<category><![CDATA[Créer son propre cloud]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[sauvegarde]]></category>

		<guid isPermaLink="false">http://ingnu.fr/?p=417</guid>
		<description><![CDATA[Maintenant que nous disposons d&#8217;un serveur pratiquement complet pour avoir son propre cloud, que nous avons renforcé sa sécurité et que nous avons vu comment opérer un monitoring basique, nous allons voir comment sauvegarder et restaurer son serveur. Nous allons faire appel au fameux rsync, pour ne pas encombrer notre serveur de solutions aussi lourdes &#8230; </p><p><a class="more-link block-button" href="http://ingnu.fr/2012/02/19/sauvegarder-et-restaurer-son-serveur/">Lire la Suite &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ingnu.fr/2012/02/19/sauvegarder-et-restaurer-son-serveur/1329605920_backup/" rel="attachment wp-att-618"><img class="alignleft size-medium wp-image-618" title="1329605920_backup" src="http://ingnu.fr/wp-content/uploads/2012/02/1329605920_backup-300x300.png" alt="" width="300" height="300" /></a>Maintenant que nous disposons d&#8217;un serveur pratiquement complet pour <a href="http://ingnu.fr/category/creer-son-propre-cloud/">avoir son propre cloud</a>, que nous avons <a title="Renforcer la sécurité de son serveur" href="http://ingnu.fr/2012/02/13/renforcer-la-securite-de-son-serveur/">renforcé sa sécurité</a> et que nous avons vu comment <a title="Trucs et astuces pour son serveur privé" href="http://ingnu.fr/2012/02/13/trucs-et-astuces-pour-son-serveur-prive/">opérer un monitoring basique</a>, nous allons voir comment sauvegarder et restaurer son serveur.</p>
<p>Nous allons faire appel au fameux <a href="http://rsync.samba.org/">rsync</a>, pour ne pas encombrer notre serveur de solutions aussi lourdes à installer qu&#8217;à configurer, d&#8217;autant que je vous propose un script qui va simplifier tout ça, et même plus encore&#8230;</p>
<p>Vous pouvez placer ce script n&#8217;importe où : sur le serveur qui héberge vos services, sur votre propre machine, sur un serveur séparé, un NAS qui supporte rsync et l&#8217;authentification par clé, etc. Il suffit de configurer un peu le script pour que la sauvegarde se fasse presque toute seule. Elle est pas belle la vie Libre ?</p>
<h2>Choisir son dispositif de stockage</h2>
<p>Communément, on sauvegarde sur une partition séparée, de préférence sur un disque séparé, peut être dans une machine séparée, ultimement dans un local séparé. Il n&#8217;y a véritablement que deux prérogatives à l&#8217;utilisation du script que je vous propose : la machine doit pouvoir utiliser rsync, et l&#8217;authentification par clé. Toute distribution GNU/Linux en est capable, vous ne devriez donc pas avoir trop de mal à disposer d&#8217;une plateforme adéquate.</p>
<p>Évidemment, une autre prérogative s&#8217;impose d&#8217;elle-même : l&#8217;espace disque disponible.</p>
<p>À titre d&#8217;exemple, sachez que j&#8217;utilise ce script pour sauvegarder deux serveurs et les documents d&#8217;une dizaine de personnes. Le premier, celui qui héberge ingnu.fr, héberge aussi tout un tas d&#8217;autres sites, un serveur mail d&#8217;une dizaine d&#8217;utilisateurs, les bases de données, etc. Au total, un snapshot des deux machines occupe à l&#8217;heure actuelle 7.6Go.</p>
<p>Mon script vous permet de disposer de deux types de sauvegardes : un instantané (appelé <em>snapshot</em>) et un instantané de chaque heure de chaque jour. Le premier instantané est en réalité vieux au maximum d&#8217;une minute, tandis que les autres instantanés vous permettent de remonter dans le temps par tranche d&#8217;une heure, sur un nombre de jours que vous pouvez déterminer.</p>
<p>Au final, sur cinq jours (qui est le réglage par défaut), l&#8217;espace disque total occupé par les sauvegardes n&#8217;est que doublé : il est actuellement de 13Go. Seuls les fichiers modifiés occupent la différence entre l&#8217;espace total et l&#8217;espace initial.</p>
<p>Vous n&#8217;avez donc pas besoin d&#8217;un disque de plusieurs téraoctets, à moins que vous ne vouliez sauvegarder aussi des fichiers comme des vidéos ou des distributions GNU/Linux en quantité industrielle&#8230;</p>
<h2>Créer la clé d&#8217;authentification</h2>
<p>La communication entre le serveur et la machine qui exécute la sauvegarde (qui peut aussi être la même machine donc) se fait via rsync, donc ssh. La connexion est par conséquent chiffrée, et les transferts sont intelligents : la bande passante est minimisée.</p>
<p>Pour pouvoir tout sauvegarder d&#8217;un coup, on va donc sauvegarder en tant que root. Si vous sauvegardez depuis une machine distante, créez une clé avec la commande suivante :</p>
<pre class="brush: bash">ssh-keygen -t rsa -f ~/.ssh/id_rsa_backup</pre>
<p>Que vous enverrez au serveur via la commande :</p>
<pre class="brush: bash">ssh-copy-id -i ~/.ssh/id_rsa_backup.pub root@exemple.fr</pre>
<p>Vous devrez saisir le mot de passe root de la machine distante. Testez enfin l&#8217;accès :</p>
<pre class="brush: bash">ssh root@exemple.fr</pre>
<p>Vous devriez être connecté sans avoir eu besoin de saisir votre mot de passe.</p>
<h2>Créer le script de sauvegarde</h2>
<p>Créez un répertoire dédié au script et à sa configuration :</p>
<pre class="brush: bash">mkdir -p /scripts/backup
cd /scripts/backup
mkdir conf.d include.d exclude.d</pre>
<p>Pour respecter le <a href="http://www.pathname.com/fhs/">Standard de Hiérarchie des Systèmes de Fichiers</a>, nous devrions placer le script dans <em>/usr/bin</em>, et la configuration dans <em>/etc/backup</em>. Rien ne vous empêche de procéder de la sorte, à condition de modifier les chemins d&#8217;accès dans le script que nous allons voir tout de suite :</p>
<pre class="brush: bash">nano backup</pre>
<pre>#!/bin/bash

###############################################################################
# Variables                                                                   #
###############################################################################

my_pid=$$
my_dir=$(dirname $0)
pid_file="/var/run/backup.pid"

conf_dir="$my_dir/conf.d"
include_dir="$my_dir/include.d"
exclude_dir="$my_dir/exclude.d"

log_dir="/var/log/backup"
log_file="$log_dir/backup"

rsync_args="--archive --recursive --delete --delete-excluded"

backup_root="/mnt/backup"

rsync=$(which rsync)

current_date=$(date "+%Y-%m-%d")
current_minute=$(date +%M)
current_hour=$(date +%H)
yesterday_date=$(date --date "yesterday" "+%Y-%m-%d")

max_age=5
oldest_backup=$(date --date "$max_age days ago" "+%Y-%m-%d/%H")
oldest_log=$(date --date "$max_age days ago" "+%Y-%m-%d")

###############################################################################
# Fonctions                                                                   #
###############################################################################

function check_pid() {
    if [ -f "$pid_file" ]
    then
        old_pid=$(cat "$pid_file")
        old_pid_exists=$(ps -p $old_pid | grep -v TTY | awk -F " " '{print $1}')

        if [ "$old_pid_exists" != "" ]
        then
            exit
        fi
    fi
}

function log() {
    if [ "$2" == "true" -o "$2" == "TRUE" -o "$2" == "yes" -o "$2" == "YES" -o "$2" == "1" ]
    then
        log_date=$(date "+%d/%m/%Y %H:%M:%S")

        echo "[$log_date] $1" &gt;&gt; "$log_file"
    else
        echo "$1" &gt;&gt; "$log_file"
    fi
}

function check_dir() {
    if [ ! -d "$1" ]
    then
        mkdir -p "$1"
    fi
}

###############################################################################
# Lancement de la procédure                                                   #
###############################################################################

##### Vérification des journaux ###############################################

check_dir "$log_dir"

if [ ! -f "$log_file" ]
then
    touch "$log_file"
fi

##### Déplacement des anciens journaux ########################################

if [ "$current_hour" == "00" -a "$current_minute" == "00" ]
then
    mv "$log_file" "$log_file-$yesterday_date"
fi

##### Démarrage de la procédure ###############################################

check_pid

echo $my_pid &gt; "$pid_file"

start_date=$(date "+%d/%m/%Y %H:%M:%S")

log " "
log "###############################################################################"
log "# Début de la procédure : $start_date                                 #"
log "###############################################################################"
log " "

list=$(ls "$conf_dir")

for host in $list; do
    conf_file="$conf_dir/$host"

    source "$conf_file"

    host_rsync_args="$rsync_args"
    host_snapshot="$backup_root/$host/snapshot"

    if [ "$ENABLED" != "yes" -a "$ENABLED" != "YES" -a "$ENABLED" != "true" -a "$ENABLED" != "TRUE" -a "$ENABLED" != "1" ]
    then
        log "**** L'hôte $host est désactivé ****"
        log " "
        continue
    fi

    log "**** Traitement de l'hôte $host ****"
    log " "

    source="$SOURCE"
    target="$host_snapshot"

    check_dir "$target"

    log "Source : $SOURCE" true
    log "Destination : $target" true

    if [ -f "$include_dir/$host" ]
    then
        log "Un fichier d'inclusion existe : $include_dir/$host" true
        host_rsync_args="$host_rsync_args --files-from=$include_dir/$host"
    fi

    if [ -f "$exclude_dir/$host" ]
    then
        log "Un fichier d'exclusion existe : $exclude_dir/$host" true
        host_rsync_args="$host_rsync_args --exclude-from=$exclude_dir/$host"
    fi

    log "Commande : $rsync $host_rsync_args $source $target" true
    log "Démarrage de la création ou mise à jour de l'instantané..." true

    $rsync $host_rsync_args $source $target

    log "Création ou mise à jour de l'instantané terminée" true

    ##### Sauvegarde périodique ###############################################

    if [ "$current_minute" == "00" ]
    then
        log " "
        log "Sauvegarde périodique" true

        source="$host_snapshot/"
        target="$backup_root/$host/$current_date/$current_hour/"

        check_dir "$target"

        log "Source : $source" true
        log "Destination : $target" true
        log "Commande : $rsync $host_rsync_args --links-dest=$source $SOURCE $target" true
        log "Démarrage de la sauvegarde périodique..." true

        $rsync $host_rsync_args --link-dest="$source" "$SOURCE" "$target"

        log "Sauvegarde périodique terminée" true
    fi

    ##### Suppression des anciennes sauvegardes ###############################

    log " "
    log "Recherche d'une ancienne sauvegarde ($backup_root/$host/$oldest_backup)..." true

    if [ -d "$backup_root/$host/$oldest_backup" ]
    then
        log "Une ancienne sauvegarde existe : $backup_root/$host/$oldest_backup" true
        log "Suppression de la sauvegarde la plus ancienne..." true

        rm -rf "$backup_root/$host/$oldest_backup"

        log "Suppression terminée" true
    else
        log "Il n'existe pas d'ancienne sauvegarde" true
    fi

    log " "
done

end_date=$(date "+%d/%m/%Y %H:%M:%S")

log "###############################################################################"
log "# Fin de la procédure : $end_date                                   #"
log "###############################################################################"
log " "

rm -f "$pid_file"</pre>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Veuillez noter que ce script me convient bien : rien ne vous empêche de faire des ajustements pour qu&#8217;il vous corresponde à VOUS !</p>
</div>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p><p class="first-p">Modifiez impérativement la variable <em>backup_root</em> !</p>
</div>
<p>Quelques explications. Si vous voulez respecter les FHS, modifiez les variables <em>conf_dir</em>, <em>include_dir</em> et <em>exclude_dir</em>. Vous pouvez également modifier la variable <em>max_age</em>, dont la valeur (un entier) représente le nombre de jours à conserver.</p>
<p>Ensuite, quelques fonctions classiques : recherche d&#8217;un pid existant (pour ne pas lancer deux sauvegardes simultanées), journalisation, et recherche et création de répertoire.</p>
<p>La procédure commence alors par la vérification de l&#8217;existence des journaux et leur archivage. Puis, le script récupère la liste des fichiers contenus dans <em>conf.d</em>, lit chacun d&#8217;entre eux pour obtenir deux directives de configuration (<em>$ENABLED</em> true/false et <em>$SOURCE</em> représentant la source à sauvegarder), recherche s&#8217;il existe un fichier d&#8217;inclusion (il vaut mieux sinon vous sauvegardez toute la partition, se trouve dans le répertoire <em>include.d</em>) et un fichier d&#8217;exclusion (facultatif, se trouve dans <em>exclude.d</em>).</p>
<p>Chaque minute (via une tâche cron), le script se lance, et créé ou met à jour l&#8217;instantané (le contenu du répertoire <em>$backup_root/$host/snapshot</em>). Chaque heure, ce snapshot est créé dans un répertoire distinct, en faisant appel aux hard links : le fichier n&#8217;est pas copié, mais un hard link est créé. Autrement dit, le fichier est accessible depuis deux adresses différentes. Même si la source (dans le <em>snapshot</em>) est supprimée, le fichier existe toujours grâce au hard link. Dans notre cas, cela nous permet d&#8217;économiser de l&#8217;espace disque.</p>
<p>La conséquence de cette façon de procéder est de disposer à tout instant d&#8217;une image complète du système de fichiers sauvegardé. Et le but, c&#8217;est de le restaurer en une ligne de commande (une simple copie suffira).</p>
<p>Enfin, on supprime les instantanés les plus anciens.</p>
<p>Attribuez le droit d&#8217;exécution au script :</p>
<pre class="brush: bash">chmod +x backup</pre>
<h2>Configuration</h2>
<p>Vous disposez donc d&#8217;un répertoire <em>conf.d, include.d </em>et<em> exclude.d</em>. Le premier contiendra un fichier par machine à sauvegarder. Vous pouvez nommer ce fichier comme bon vous semble. Une seule règle à respecter : ce nom devra être le même que celui du fichier d&#8217;inclusions et du fichier d&#8217;exclusions.</p>
<p>Créons la configuration de notre cloud :</p>
<pre class="brush: bash">nano conf.d/my_cloud</pre>
<pre>ENABLED=true
SOURCE=/</pre>
<p>Si le serveur est une machine différente, on utilisera la notation suivante :</p>
<pre>SOURCE="root@exemple.fr:/"</pre>
<p>Avec cette configuration, on va sauvegarder l&#8217;ensemble de la machine concernée (ou plus exactement, l&#8217;intégralité de la partition <em>/</em>). Ce n&#8217;est probablement pas ce que vous voulez, alors nous devons créer un fichier d&#8217;inclusions :</p>
<pre class="brush: bash">nano include.d/my_cloud</pre>
<p>À peu de chose près, vous devriez mettre ceci :</p>
<pre>/etc/amavis
/etc/apache2
/etc/bind
/etc/clamav
/etc/dovecot
/etc/php5
/etc/postfix
/etc/prosody
/etc/rc.local
/etc/spamassassin
/etc/ssl
/opt
/scripts
/var/vmail
/var/www
/var/lib/mysql</pre>
<p>Avec ce contenu, vous devriez sauvegarder l&#8217;intégralité du serveur que nous avons configuré jusqu&#8217;à maintenant.</p>
<p>Pour éviter de sauvegarder des choses inutiles, créons un fichier d&#8217;exclusions :</p>
<pre class="brush: bash">nano exclude.d/my_cloud</pre>
<pre>log</pre>
<h2>Lancement</h2>
<p>On édite la crontab de l&#8217;utilisateur qui procède à la sauvegarde :</p>
<pre class="brush: bash">crontab -e</pre>
<pre>* * * * * /scripts/backup/backup</pre>
<p>Et on vérifie le contenu du journal :</p>
<pre class="brush: bash">tail -f /var/log/backup/backup</pre>
<h2>Restauration</h2>
<p>Pour restaurer votre serveur, il suffit de copier vers lui tout ou partie de la dernière sauvegarde valide, via <em>scp</em>, tout simplement. Inutile de tergiverser : grâce à ce système de sauvegarde, il suffit d&#8217;une simple copie sécurisée pour restaurer le dernier état valide du serveur ; contrairement à d&#8217;autres solutions de sauvegarde, pas besoin d&#8217;installer un agent sur la machine distante, une simple connexion ssh suffit !</p>
<h2>Conclusion</h2>
<p>Nous voici arrivés à la fin de la série d&#8217;articles sur la création de son cloud personnel. Plus qu&#8217;un article à publier d&#8217;ici quelques minutes, alors à tout de suite !</p>
]]></content:encoded>
			<wfw:commentRss>http://ingnu.fr/2012/02/19/sauvegarder-et-restaurer-son-serveur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pourquoi j&#8217;arrête facebook et twitter</title>
		<link>http://ingnu.fr/2012/02/15/pourquoi-jarrete-facebook-et-twitter/</link>
		<comments>http://ingnu.fr/2012/02/15/pourquoi-jarrete-facebook-et-twitter/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 16:19:33 +0000</pubDate>
		<dc:creator>Jimmy Rudolf</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[statusnet]]></category>

		<guid isPermaLink="false">http://ingnu.fr/?p=609</guid>
		<description><![CDATA[Je l&#8217;ai dis il y a quelques dizaines de minutes sur social.ingnu, j&#8217;abandonne facebook et twitter. Bien que ma principale raison soit évidemment liée à la protection de ma vie privée, il en existe d&#8217;autres. Tout d&#8217;abord, facebook et twitter ont beau cumuler à eux deux une population plus nombreuse que la Chine, je m&#8217;y &#8230; </p><p><a class="more-link block-button" href="http://ingnu.fr/2012/02/15/pourquoi-jarrete-facebook-et-twitter/">Lire la Suite &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ingnu.fr/2012/02/15/pourquoi-jarrete-facebook-et-twitter/contre-facebook/" rel="attachment wp-att-610"><img class="alignleft size-medium wp-image-610" title="contre-facebook" src="http://ingnu.fr/wp-content/uploads/2012/02/contre-facebook-300x195.jpg" alt="" width="300" height="195" /></a><a href="https://social.ingnu.fr/notice/3292">Je l&#8217;ai dis il y a quelques dizaines de minutes</a> sur <a href="https://social.ingnu.fr/">social.ingnu</a>, j&#8217;abandonne facebook et twitter. Bien que ma principale raison soit évidemment liée à la protection de ma vie privée, il en existe d&#8217;autres.</p>
<p>Tout d&#8217;abord, facebook et twitter ont beau cumuler à eux deux une population plus nombreuse que la Chine, je m&#8217;y sens seul. J&#8217;ai l&#8217;impression qu&#8217;il n&#8217;y a aucune activité qui m&#8217;intéresse. C&#8217;est d&#8217;autant plus vrai en ce qui concerne facebook, dont l&#8217;idée est davantage de se constituer un cercle d&#8217;amis plutôt qu&#8217;échanger des idées réellement intéressantes. Je commence à me lasser des photos personnelles, des histoires d&#8217;horoscope, ou de ce que les gens ont bouffé la veille (je ne parle pas de mes propres contacts qui ont des timelines un peu plus développées). Ce que je veux dire, c&#8217;est que trouver des gens qui m&#8217;intéressent sur facebook tient plus du hasard qu&#8217;autre chose. D&#8217;ailleurs, en fait, ce n&#8217;est jamais arrivé.</p>
<p>En ce qui concerne twitter, la situation est différente. La limite à 160 caractères (ou 144 je ne sais plus) est parfaitement incompréhensible pour moi. On est à l&#8217;ère du haut débit, où on s&#8217;échange des photos en quelques secondes, des films en quelques minutes. La limite de caractères arbitrairement imposée par twitter engendre des posts parfaitement incompréhensibles, truffés de raccourcis et d&#8217;abréviations qui pourrissent la timeline, d&#8217;autant que cela nécessite de faire le tri entre l&#8217;information qui est intéressante de celle qui ne l&#8217;est pas. C&#8217;est une perte de temps.</p>
<p>Il y a quelques semaines, j&#8217;ai franchi le pas et j&#8217;ai installé une instance de <a href="http://status.net/">status.net</a>. Je l&#8217;ai installé parce que c&#8217;est un Logiciel Libre, et qu&#8217;il est présenté comme un réseau social libre et décentralisé. J&#8217;en avais déjà entendu parlé, mais j&#8217;étais un peu frileux, n&#8217;étant pas de nature particulièrement sociable.</p>
<p>En fin de compte, je me suis rendu compte que l&#8217;ouverture de cette application n&#8217;est pas seulement une philosophie de développement : cette ouverture se fait aussi sur le monde, à un niveau que je ne soupçonnais pas. On ne suit pas seulement des gens, individuellement, on suit des groupes, des fédérations d&#8217;instances de status.net. Et là, ça s&#8217;emballe : je reçois les posts de plusieurs dizaines de personnes simplement parce que je suis le groupe <a href="http://identi.ca/group/14/id">Debian</a>, ou le groupe <a href="http://identi.ca/group/33/id">GNU</a>. Et le ratio informations intéressantes/inutiles s&#8217;inverse par rapport aux autres réseaux sociaux (je ne parle pas de Google+ que j&#8217;ai quitté il y a quelques temps).</p>
<p>Du coup, on peut communiquer avec beaucoup plus de gens que sur facebook ou twitter, et surtout, beaucoup plus de gens qui partagent les mêmes centres d&#8217;intérêt.</p>
<p>Je n&#8217;ai pas encore bien pris le temps de m&#8217;occuper de mes followers ou de ceux que je follow, ce qui fait que ma liste est relativement restreinte. Mais j&#8217;ai déjà l&#8217;impression que c&#8217;est un nouveau monde qui s&#8217;étend à mes pieds &#8211; à mes doigts. Je me sens comme un explorateur qui vient de découvrir une terre inconnue, qui n&#8217;a qu&#8217;une hâte : l&#8217;explorer. D&#8217;autant que cette terre est déjà bien peuplée, vivante, comme si elle avait toujours été là.</p>
<p>Ce qui me permet de rebondir sur une critique que j&#8217;ai parfois entendu : non, ce n&#8217;est pas mort, non, ce n&#8217;est pas dépeuplé. C&#8217;est au contraire très actif, et de manière beaucoup plus intelligente que les autres réseaux sociaux.</p>
<p>Par un mystère que je ne m&#8217;explique pas, j&#8217;ai l&#8217;impression que des étrangers communiquent plus facilement sur status.net que sur n&#8217;importe quel autre réseau social. En ce qui concerne twitter, c&#8217;est peut être dû au fait que la communication est essentiellement uni-directionnelle, et concernant facebook, peut-être parce qu&#8217;il n&#8217;y a de communication que sur soi-même.</p>
<p>Sur status.net, c&#8217;est l&#8217;esprit Libre : on échange, on partage, on communique de manière omnidirectionnelle. Il suffit de faire partie d&#8217;un groupe pour que tous puissent lire ce que vous écrivez, tandis que vos posts (vos notices) ne quittent pas votre serveur.</p>
<p>Si vous faites partie de mes contacts facebook ou twitter, et que vous ne faites pas encore partie de mes contacts sur social.ingnu, je vous recommande donc chaudement de venir me rejoindre. <a href="https://social.ingnu.fr/main/register">Créez-vous un compte sur mon instance</a> (ou sur <a href="http://identi.ca/">identi.ca</a> par exemple), et ajoutez <em>ingnu@social.ingnu.fr</em> à ceux que vous suivez.</p>
<p>Peut-être alors qu&#8217;un jour, vous aussi vous quitterez les réseaux sociaux riches à milliards qui se servent de vos informations personnelles pour y parvenir, pour revenir du côté lumineux de la Force&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ingnu.fr/2012/02/15/pourquoi-jarrete-facebook-et-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trucs et astuces pour son serveur privé</title>
		<link>http://ingnu.fr/2012/02/13/trucs-et-astuces-pour-son-serveur-prive/</link>
		<comments>http://ingnu.fr/2012/02/13/trucs-et-astuces-pour-son-serveur-prive/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 15:00:00 +0000</pubDate>
		<dc:creator>Jimmy Rudolf</dc:creator>
				<category><![CDATA[Créer son propre cloud]]></category>
		<category><![CDATA[astuces]]></category>
		<category><![CDATA[trucs]]></category>

		<guid isPermaLink="false">http://ingnu.fr/?p=574</guid>
		<description><![CDATA[Avant d&#8217;aborder un système de sauvegarde et de restauration pour son cloud personnel, je me suis dis que ce serait une bonne idée de compiler dans un article quelques trucs et astuces, relatifs notamment à la surveillance de votre serveur. C&#8217;est l&#8217;occasion d&#8217;apprendre ou réapprendre à se servir des outils inclus dans toute bonne distribution &#8230; </p><p><a class="more-link block-button" href="http://ingnu.fr/2012/02/13/trucs-et-astuces-pour-son-serveur-prive/">Lire la Suite &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Avant d&#8217;aborder un système de sauvegarde et de restauration pour son cloud personnel, je me suis dis que ce serait une bonne idée de compiler dans un article quelques trucs et astuces, relatifs notamment à la surveillance de votre serveur.</p>
<p>C&#8217;est l&#8217;occasion d&#8217;apprendre ou réapprendre à se servir des outils inclus dans toute bonne distribution qui se respecte, mais aussi comment compléter ces outils.</p>
<h2>Monitoring &laquo;&nbsp;sur site&nbsp;&raquo;</h2>
<h3>Journaux</h3>
<p>Ce que j&#8217;appelle &laquo;&nbsp;monitoring sur site&nbsp;&raquo;, c&#8217;est comment surveiller son système depuis un shell. Un certain nombre de commandes existent pour nous permettre de diagnostiquer le fonctionnement de notre serveur.</p>
<p>Pour commencer, rien ne vaut les journaux. Concernant notre serveur, voici ceux qui sont principalement à surveiller :</p>
<ul>
<li><em>/var/log/syslog</em>, probablement le plus important de tous</li>
<li><em>/var/log/fail2ban.log</em>, pour surveiller ce que fail2ban fait</li>
<li><em>/var/log/mail.log</em>, pour surveiller le serveur mail</li>
<li><em>/var/www/*/*/log/</em>, pour surveiller les accès et erreurs sur l&#8217;ensemble de vos sites Internet</li>
</ul>
<p>Pour consulter en temps réel un journal, utilisez la commande suivante :</p>
<pre class="brush: bash">tail -f /var/log/syslog</pre>
<p>Pour consulter les X dernières lignes d&#8217;un journal :</p>
<pre class="brush: bash">tail -X /var/log/syslog</pre>
<h3>Processus</h3>
<p>Le monitoring sur site implique également la surveillance des processus. La commande suivante :</p>
<pre class="brush: bash">ps aux</pre>
<p>Vous indiquera l&#8217;état des processus au moment où vous lancez la commande. Pour consulter l&#8217;état des processus en temps réel, utilisez la commande :</p>
<pre class="brush: bash">top</pre>
<p>Cette commande vous informe également de l&#8217;état de la mémoire, de l&#8217;utilisation CPU, et d&#8217;autres choses encore.</p>
<h3>Matériel</h3>
<p>Si vous hébergez vous-même votre serveur &laquo;&nbsp;à la maison&nbsp;&raquo;, vous pourrez également avoir besoin de quelques capteurs de température :</p>
<pre class="brush: bash">apt-get install lm-sensors
sensors-detect</pre>
<p>De même pour les disques durs :</p>
<pre class="brush: bash">apt-get install hddtemp
hddtemp /dev/sd*</pre>
<p>D&#8217;autres informations relatives à votre matériel peuvent être extraites du pseudo système de fichiers <em>/proc</em> :</p>
<pre class="brush: bash">cat /proc/cpuinfo
cat /proc/meminfo</pre>
<h3>RAID</h3>
<p>Si vous bénéficiez d&#8217;un raid logiciel, vous pouvez consulter son état de différentes manières :</p>
<pre class="brush: bash">cat /proc/mdstat
mdadm --detail /dev/md0</pre>
<h2>Monitoring distant</h2>
<p>Le monitoring distant est effectué depuis une interface web par exemple. J&#8217;ai choisi <a href="http://phpsysinfo.sourceforge.net/">phpSysInfo</a>, que je trouve plus agréable à configurer et utiliser que munin, trop centré sur la création de graphs, et relativement compliqué à mettre en œuvre.</p>
<h3>Hôte virtuel</h3>
<p>Première chose, comme d&#8217;habitude, on s&#8217;occupe de l&#8217;hôte virtuel dans apache :</p>
<pre class="brush: bash">mkdir -p /var/www/exemple.fr/system/www
nano /etc/apache2/sites-available/system.exemple.fr</pre>
<pre>&lt;VirtualHost *:80&gt;
	ServerName system.exemple.fr
	Redirect / https://system.exemple.fr/
&lt;/VirtualHost&gt;

&lt;VirtualHost *:443&gt;
	ServerName system.exemple.fr

	DocumentRoot /var/www/exemple.fr/system/www

	SSLEngine On
	SSLCertificateFile /scripts/certificate_authority/apache/system.exemple.fr.crt
	SSLCertificateKeyFile /scripts/certificate_authority/apache/system.exemple.fr.key
&lt;/VirtualHost&gt;</pre>
<p>Nous avons créé un hôte virtuel non sécurisé redirigeant vers un hôte virtuel sécurisé, nous avons déjà vu le principe. Créons maintenant les certificats :</p>
<pre class="brush: bash">/scripts/certificate_authority/make_request apache system.exemple.fr
/scripts/certificate_authority/sign_request apache system.exemple.fr
chown www-data:www-data /scripts/certificate_authority/apache/*</pre>
<div class="warning_block message-block"><p class="printonly"><strong>Warning!</strong></p><p class="first-p">Lorsque le <em>Common Name</em> vous sera demandé, indiquez le nom de domaine ! Et dans notre cas, acceptez la création d&#8217;une clé sans mot de passe !</p>
</div>
<p>On active le site, et on redémarre apache :</p>
<pre class="brush: bash">a2ensite system.exemple.fr
/etc/init.d/apache2 restart</pre>
<p>Dans ce cas, il n&#8217;y a pas vraiment besoin de tenir des journaux.</p>
<h3>Installation de phpSysInfo</h3>
<p>Rien de particulier à signaler : une fois l&#8217;application téléchargée et installée dans son répertoire (<em>/var/www/exemple.fr/system/www</em>), il suffit juste de la configurer en fonction des blocs que vous souhaitez afficher.</p>
<p>Certaines dépendances peuvent être nécessaires, en fonction des blocs que vous aurez configuré. L&#8217;application vous informera via des messages d&#8217;erreurs si des dépendances ne sont pas satisfaites. Vous pourrez alors aisément les installer.</p>
<h2>Notifications</h2>
<p>Si vous faites appel à crontab pour effectuer des tâches routinières, il peut être intéressant d&#8217;avoir des rapports par mail. Il vous suffit d&#8217;éditer votre crontab et d&#8217;y insérer la ligne suivante :</p>
<pre>MAIL="contact@exemple.fr"</pre>
<p>Nous avons installé <a title="Communiquer via XMPP" href="http://ingnu.fr/2012/02/08/communiquer-via-xmpp/">un serveur XMPP</a>, on peut également s&#8217;en servir comme service de notification. Ainsi, pour toute application qui permet d&#8217;exécuter une commande suivant un évènement donné, on peut demander à cette application d&#8217;envoyer un message à un compte XMPP que vous aurez créé à cet effet. Nous utiliserons pour cela le script <em>sendxmpp</em> :</p>
<pre class="brush: bash">apt-get install sendxmpp</pre>
<p>Que l&#8217;on utilisera de la manière suivante :</p>
<pre class="brush: bash">echo "Votre message" | sendxmpp -u &lt;utilisateur&gt; -p &lt;mot de passe&gt; -j exemple.fr &lt;destinataire&gt;@exemple.fr</pre>
<h2>Liste des paquets installés</h2>
<p>Il peut être utile de récupérer la liste de tous les paquets installés, par exemple dans le cas d&#8217;une réinstallation ou d&#8217;un mirroring. Pour récupérer cette liste, on utilisera la commande suivante :</p>
<pre class="brush: bash">dpkg -l | grep ii | awk -F ' ' '{print $2}'</pre>
<p>On peut, du coup, exporter cette liste dans un fichier :</p>
<pre class="brush: bash">dpkg -l | grep ii | awk -F ' ' '{print $2}' &gt; packages.list</pre>
<h2>Conclusion</h2>
<p>Plein d&#8217;autres choses manquent surement à l&#8217;appel. On ne peut pas tout voir, mais théoriquement, ce qu&#8217;on a vu jusqu&#8217;aujourd&#8217;hui devrait être suffisant pour que vous puissiez jouer avec votre propre cloud.</p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Ceci dit, avant de vraiment jouer avec, attendez au moins l&#8217;avant-dernier article (qui est aussi le prochain), consacré à la sauvegarde et à la restauration de son serveur !</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ingnu.fr/2012/02/13/trucs-et-astuces-pour-son-serveur-prive/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Renforcer la sécurité de son serveur</title>
		<link>http://ingnu.fr/2012/02/13/renforcer-la-securite-de-son-serveur/</link>
		<comments>http://ingnu.fr/2012/02/13/renforcer-la-securite-de-son-serveur/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 14:19:54 +0000</pubDate>
		<dc:creator>Jimmy Rudolf</dc:creator>
				<category><![CDATA[Créer son propre cloud]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[certificat]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[fail2ban]]></category>
		<category><![CDATA[iptables]]></category>

		<guid isPermaLink="false">http://ingnu.fr/?p=415</guid>
		<description><![CDATA[Nous voilà sur la dernière ligne droite de notre série d&#8217;articles consacrée à la mise en place d&#8217;un cloud personnel. Nous avons installé à peu près tout ce dont on peut avoir besoin, mais à part un script de pare-feu relativement restrictif et une protection anti-spam et anti-virus pour le serveur mail, il reste encore &#8230; </p><p><a class="more-link block-button" href="http://ingnu.fr/2012/02/13/renforcer-la-securite-de-son-serveur/">Lire la Suite &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ingnu.fr/2012/02/06/creation-de-sa-propre-autorite-de-certification/secure1/" rel="attachment wp-att-321"><img class="alignleft size-full wp-image-321" title="secure1" src="http://ingnu.fr/wp-content/uploads/2012/02/secure1.jpg" alt="" width="240" height="240" /></a>Nous voilà sur la dernière ligne droite de notre série d&#8217;articles consacrée à la <a href="http://ingnu.fr/category/creer-son-propre-cloud/">mise en place d&#8217;un cloud personnel</a>. Nous avons installé à peu près tout ce dont on peut avoir besoin, mais à part un <a title="Créer son propre Cloud : Introduction" href="http://ingnu.fr/2012/02/05/creer-son-propre-cloud-introduction/">script de pare-feu</a> relativement restrictif et une protection anti-spam et anti-virus pour <a title="Installation de son propre serveur mail" href="http://ingnu.fr/2012/02/06/installation-de-son-propre-serveur-mail/">le serveur mail</a>, il reste encore quelques petites choses à faire pour sécuriser notre serveur.</p>
<p>Avant toute chose, contrairement à ce que beaucoup de gens recommandent comme bonne pratique, je ne vais pas aborder la question du changement de port pour améliorer la sécurité de notre serveur. Je pense en effet qu&#8217;un simple <em>nmap</em> sur l&#8217;hôte à tester suffit pour déterminer quels sont les ports ouverts sur une machine, et ce n&#8217;est pas en déplaçant ce port que le &laquo;&nbsp;pirate&nbsp;&raquo; va jeter l&#8217;éponge. Si quelqu&#8217;un est vraiment déterminé à récupérer de votre serveur des données auxquelles il n&#8217;a pas le droit d&#8217;accéder, il y parviendra.</p>
<p>Je mise donc sur une approche différente qu&#8217;on va tout de suite mettre en place, et qui repose sur <a href="http://www.fail2ban.org/">fail2ban</a>. Pour mémoire, fail2ban analyse les tentatives de connexion à votre serveur, et blacklist toute IP qui tentera d&#8217;accéder à votre serveur sans succès, selon un certain nombre de règles (qui peuvent être bien velues à configurer&#8230;).</p>
<h2>fail2ban</h2>
<p>Installons l&#8217;application :</p>
<pre class="brush: bash">apt-get install fail2ban
/etc/init.d/fail2ban stop</pre>
<p>On configure ensuite l&#8217;application :</p>
<pre class="brush: bash">mv /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf-orig
nano /etc/fail2ban/jail.conf</pre>
<p>Le nombre d&#8217;applications nécessitant une connexion réseau pour fonctionner est relativement limité sur notre serveur, ce qui va simplifier la configuration de fail2ban, d&#8217;autant que la plupart des filtres existe déjà.</p>
<p>Voici un fichier <em>jail.conf</em> de référence, correspondant à notre serveur :</p>
<pre>[DEFAULT]
ignoreip = 127.0.0.1 xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
bantime = 600
maxretry = 3
backend = polling
destemail = contact@exemple.fr
banaction = iptables-multiport
mta = sendmail
protocol = tcp

action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]

action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
              %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s]

action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
               %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]

# Choose default action.  To change, just override value of 'action' with the
# interpolation to the chosen action shortcut (e.g.  action_mw, action_mwl, etc) in jail.local
# globally (section [DEFAULT]) or per specific section
action = %(action_)s

[ssh]
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6

[ssh-ddos]
enabled = false
port    = ssh
filter  = sshd-ddos
logpath  = /var/log/auth.log
maxretry = 6

[pam-generic]
enabled = true
filter  = pam-generic
port = all
banaction = iptables-allports
port     = anyport
logpath  = /var/log/auth.log
maxretry = 6

[apache]
enabled = true
port    = http,https
filter  = apache-auth
logpath = /var/www/*/*/log/error.log
maxretry = 6

[apache-multiport]
enabled   = true
port      = http,https
filter    = apache-auth
logpath   = /var/www/*/*/log/error.log
maxretry  = 6

[apache-noscript]
enabled = true
port    = http,https
filter  = apache-noscript
logpath = /var/www/*/*/log/error.log
maxretry = 6

[apache-overflows]
enabled = true
port    = http,https
filter  = apache-overflows
logpath = /var/www/*/*/log/error.log
maxretry = 2

[postfix]
enabled  = true
port     = smtp,ssmtp
filter   = postfix
logpath  = /var/log/mail.log

[sasl]
enabled  = true
port     = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter   = sasl
logpath  = /var/log/mail.log

[named-refused-tcp]
enabled  = true
port     = domain,953
protocol = tcp
filter   = named-refused
logpath  = /var/log/named/security.log</pre>
<p>Si vous activez le monitoring pour bind, vous devez activer la journalisation :</p>
<pre class="brush: bash">nano /etc/bind/named.conf.options</pre>
<pre>logging {
     channel security_file {
         file "/var/log/named/security.log" versions 3 size 30m;
         severity dynamic;
         print-time yes;
     };
     category security {
         security_file;
     };
};</pre>
<pre class="brush: bash">/etc/init.d/bind9 restart</pre>
<p>Vous devriez être relativement tranquille avec ce fichier de configuration.</p>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p><p class="first-p">N&#8217;oubliez surtout pas de renseigner correctement votre (vos) adresse(s) IP en début de fichier !</p>
</div>
<p>Démarrez ensuite le service :</p>
<pre class="brush: bash">/etc/init.d/fail2ban start</pre>
<p>Désormais, si quelqu&#8217;un n&#8217;entre pas dans les clous, son adresse IP sera bloquée directement au niveau d&#8217;iptables, pour une durée déterminée spécifiée en début de fichier de configuration.</p>
<h2>Un firewall &laquo;&nbsp;modulaire&nbsp;&raquo;</h2>
<p>On va un peu compléter <a title="Créer son propre Cloud : Introduction" href="http://ingnu.fr/2012/02/05/creer-son-propre-cloud-introduction/">notre script de pare-feu</a> pour vous permettre de spécifier vous-même une liste d&#8217;adresses IP à bannir.</p>
<pre class="brush: bash">nano /scripts/firewall</pre>
<p>Ajoutez tout à la fin du fichier :</p>
<pre>if [ -f "/scripts/firewall.hosts" ]
then
    for ip in `cat /scripts/firewall.hosts`; do
        ${IPT} -A INPUT -s $ip -j DROP
    done
fi</pre>
<p>Créez ensuite le fichier en question :</p>
<pre class="brush: bash">touch /scripts/firewall.hosts</pre>
<p>Vous pouvez maintenant remplir ce fichier avec les adresses IP que vous souhaitez bloquer (une par ligne).</p>
<p>N&#8217;oubliez pas de relancer le script une fois vos modifications terminées :</p>
<pre class="brush: bash">/scripts/firewall</pre>
<h2>Accès via certificats clients</h2>
<p>Si vous le souhaitez, vous pouvez limiter l&#8217;accès à certains de vos sites Internet à certains clients disposant d&#8217;un certificat délivré par vous-même.</p>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p><p class="first-p">Évitez cette restriction sur l&#8217;accès webdav : les clients webdav peuvent ne pas gérer les certificats clients.</p>
</div>
<p>Il suffit de modifier le fichier de configuration de l&#8217;hôte virtuel que vous voulez &laquo;&nbsp;protéger&nbsp;&raquo;, en rajoutant les lignes suivantes :</p>
<pre>&lt;Location /&gt;
    SSLCACertificateFile /scripts/certificate_authority/ca.crt
    SSLVerifyClient require
    SSLVerifyDepth 4
&lt;/Location&gt;</pre>
<p>Vous créez ensuite un certificat classique :</p>
<pre class="brush: bash">/scripts/certificate_authority/make_request apache-client sous-domaine.exemple.fr
/scripts/certificate_authority/sign_request apache-client sous-domaine.exemple.fr
chown -R www-data:www-data /scripts/certificate_authority/apache-client</pre>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p><p class="first-p">Dans ce cas, ne créez pas de certificat sans mot de passe.</p>
</div>
<p>Il faut ensuite exporter le certificat créé et signé dans un format compatible :</p>
<pre class="brush: bash">openssl pkcs12 -export -clcerts -in /scripts/certificate_authority/apache-client/sous-domaine.exemple.fr.crt -inkey /scripts/certificate_authority/apache-client/sous-domaine.exemple.fr.key -out /scripts/certificate_authority/apache-client/sous-domaine.exemple.fr.p12</pre>
<p>Transmettez ce certificat et son mot de passe au client qui doit accéder au site, client qui devra l&#8217;importer dans son navigateur. Utilisez de préférence SSH pour effectuer ce transfert <img src='http://ingnu.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ingnu.fr/2012/02/13/renforcer-la-securite-de-son-serveur/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gérer ses photos avec PhotoShow</title>
		<link>http://ingnu.fr/2012/02/13/gerer-ses-photos-avec-photoshow/</link>
		<comments>http://ingnu.fr/2012/02/13/gerer-ses-photos-avec-photoshow/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 13:04:25 +0000</pubDate>
		<dc:creator>Jimmy Rudolf</dc:creator>
				<category><![CDATA[Créer son propre cloud]]></category>
		<category><![CDATA[photoshow]]></category>

		<guid isPermaLink="false">http://ingnu.fr/?p=411</guid>
		<description><![CDATA[Maintenant que nous disposons d&#8217;une solution de stockage en ligne, la prochaine étape consistera à mettre en place une application web pour partager ses photos avec le reste du monde. Bien que de très nombreuses solutions existent, et de très bonne qualité (voir mon article sur les alternatives à Google), mon choix s&#8217;est porté sur &#8230; </p><p><a class="more-link block-button" href="http://ingnu.fr/2012/02/13/gerer-ses-photos-avec-photoshow/">Lire la Suite &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ingnu.fr/2012/02/13/gerer-ses-photos-avec-photoshow/selection_003/" rel="attachment wp-att-548"><img class="alignleft size-medium wp-image-548" title="Sélection_003" src="http://ingnu.fr/wp-content/uploads/2012/02/Sélection_003-300x191.png" alt="" width="300" height="191" /></a>Maintenant que nous disposons d&#8217;<a title="Une alternative à Dropbox" href="http://ingnu.fr/2012/02/12/une-alternative-a-dropbox/">une solution de stockage en ligne</a>, la prochaine étape consistera à mettre en place une application web pour partager ses photos avec le reste du monde.</p>
<p>Bien que de très nombreuses solutions existent, et de très bonne qualité (voir mon article sur <a title="Quelles sont les alternatives à Google ?" href="http://ingnu.fr/2011/12/29/quelles-sont-les-alternatives-a-google/">les alternatives à Google</a>), mon choix s&#8217;est porté sur une petite application du nom de <a href="http://www.photoshow-gallery.com/">PhotoShow</a>.</p>
<p>Je l&#8217;ai choisi pour plusieurs raisons. Tout d&#8217;abord, elle ne nécessite aucune base de données. Ensuite, elle ne nécessite pratiquement aucune maintenance, dans la mesure où les photos sont analysées automatiquement. Est également automatique la génération des miniatures. Et malgré sa simplicité, il reste possible de définir tout ou partie de la galerie comme étant privée, dont l&#8217;accès sera réservé aux utilisateurs de votre choix, ou simplement protégé par mot de passe.</p>
<p>Enfin, l&#8217;arborescence des fichiers n&#8217;a pas besoin de se trouver dans l&#8217;arborescence du site. Cela permet d&#8217;éviter que n&#8217;importe qui (les moteurs de recherche par exemple) puisse aspirer sans vergogne vos photos. On respecte ainsi une autre prérogative de <a href="http://ingnu.fr/category/creer-son-propre-cloud/">ma série d&#8217;articles</a> : préserver la confidentialité de nos données.</p>
<h2>Hôte virtuel</h2>
<p>Première chose, comme d&#8217;habitude, on s&#8217;occupe de l&#8217;hôte virtuel dans apache :</p>
<pre class="brush: bash">nano /etc/apache2/sites-available/photos.exemple.fr</pre>
<pre>&lt;VirtualHost *:80&gt;
	ServerName photos.exemple.fr
	Redirect / https://photos.exemple.fr/
&lt;/VirtualHost&gt;

&lt;VirtualHost *:443&gt;
	ServerName photos.exemple.fr

	DocumentRoot /var/www/exemple.fr/photos/www

	SSLEngine On
	SSLCertificateFile /scripts/certificate_authority/apache/photos.exemple.fr.crt
	SSLCertificateKeyFile /scripts/certificate_authority/apache/photos.exemple.fr.key

        CustomLog /var/www/exemple.fr/photos/log/access.log
        ErrorLog /var/www/exemple.fr/photos/log/error.log
&lt;/VirtualHost&gt;</pre>
<p>Nous avons créé un hôte virtuel non sécurisé redirigeant vers un hôte virtuel sécurisé, nous avons déjà vu le principe. Créons maintenant les certificats :</p>
<pre class="brush: bash">/scripts/certificate_authority/make_request apache photos.exemple.fr
/scripts/certificate_authority/sign_request apache photos.exemple.fr
chown www-data:www-data /scripts/certificate_authority/apache/*</pre>
<div class="warning_block message-block"><p class="printonly"><strong>Warning!</strong></p><p class="first-p">Lorsque le <em>Common Name</em> vous sera demandé, indiquez le nom de domaine ! Et dans notre cas, acceptez la création d&#8217;une clé sans mot de passe !</p>
</div>
<p>On active le site, et on redémarre apache :</p>
<pre class="brush: bash">a2ensite photos.exemple.fr
/etc/init.d/apache2 restart</pre>
<h2>Installation de PhotoShow</h2>
<p>On créé l&#8217;arborescence du site :</p>
<pre class="brush: bash">mkdir -p /var/www/exemple.fr/photos/{www,log,thumbs}</pre>
<p>Puis on télécharge et on installe PhotoShow :</p>
<pre class="brush: bash">cd /usr/src
git clone git://github.com/thibaud-rohmer/PhotoShow.git
cp -R PhotoShow/* /var/www/exemple.fr/photos/www/
chown -R www-data:www-data /var/www/exemple.fr/photos</pre>
<p>On configure l&#8217;application :</p>
<pre class="brush: bash">nano /var/www/exemple.fr/photos/www/config.php</pre>
<pre class="brush: php">$config-&gt;photos_dir   = "/var/public-docs/Photos";
$config-&gt;ps_generated   = "/var/www/exemple.fr/photos/thumbs";</pre>
<p>Vous noterez le répertoire <em>/var/public-docs/Photos</em> qu&#8217;il faut créer, et qui contiendra donc vos photos.</p>
<pre class="brush: bash">mkdir /var/public-docs/Photos</pre>
<p>L&#8217;application en elle-même est prête, vous pouvez la visiter depuis l&#8217;adresse <em>http://photos.exemple.fr</em>.</p>
<p>Vous pouvez créer un compte &laquo;&nbsp;<em>anonyme</em>&laquo;&nbsp;, ou &laquo;&nbsp;<em>invites</em>&laquo;&nbsp;, protégé par mot de passe, si vous ne voulez pas que des personnes non identifiées aient accès à votre galerie. Vous pouvez aussi simplement la protéger avec un mot de passe, sans avoir besoin de créer un utilisateur particulier.</p>
<h2>Envoyer automatiquement ses photos prises avec un smartphone Android</h2>
<p>Facile, si vous avez installé l&#8217;application WebDav File Manager comme indiqué dans <a title="Une alternative à Dropbox" href="http://ingnu.fr/2012/02/12/une-alternative-a-dropbox/">mon précédent article</a> (ou toute autre application Android capable de se synchroniser avec un dépôt WebDav ou SSH). Il vous suffit de mettre en place une synchronisation entre le répertoire où vos photos sont stockées sur votre smartphone (<em>DCIM/</em>) et <em>https://files.exemple.fr/public/Photos</em>.</p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Attention si vous mettez d&#8217;autres photos depuis une autre source, ces photos seront aussi copiées sur votre téléphone. Pour l&#8217;éviter, vous pouvez créer un dossier <em>/var/public-docs/Photos/Android</em>, que vous utiliserez pour la synchronisation.</p>
</div>
<p>Le tutoriel d&#8217;aujourd&#8217;hui est déjà terminé. Nous avons vu des choses relativement compliquées à mettre en oeuvre, mais c&#8217;était aussi pour nous simplifier la vie plus tard. Je vous avais bien dis que les prochains articles seraient plus simples !</p>
]]></content:encoded>
			<wfw:commentRss>http://ingnu.fr/2012/02/13/gerer-ses-photos-avec-photoshow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C&#8217;est quoi le Libre ?</title>
		<link>http://ingnu.fr/2012/02/13/cest-quoi-le-libre/</link>
		<comments>http://ingnu.fr/2012/02/13/cest-quoi-le-libre/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 23:09:28 +0000</pubDate>
		<dc:creator>Jimmy Rudolf</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[libre]]></category>
		<category><![CDATA[logiciel]]></category>

		<guid isPermaLink="false">http://ingnu.fr/?p=540</guid>
		<description><![CDATA[Je sais qu&#8217;il y a beaucoup de sources d&#8217;informations pour savoir ce qu&#8217;est le Libre (dont la principale), mais j&#8217;ai toujours constaté avec regret qu&#8217;il y a encore beaucoup de gens qui considèrent mal les Libristes, les défenseurs du Libre. Je les ai vu dire que dans certains domaines, les Logiciels Libres n&#8217;arrivent pas à &#8230; </p><p><a class="more-link block-button" href="http://ingnu.fr/2012/02/13/cest-quoi-le-libre/">Lire la Suite &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ingnu.fr/2012/02/13/cest-quoi-le-libre/3d-gnu-head/" rel="attachment wp-att-543"><img class="alignleft size-medium wp-image-543" title="3d-gnu-head" src="http://ingnu.fr/wp-content/uploads/2012/02/3d-gnu-head-300x289.jpg" alt="" width="300" height="289" /></a>Je sais qu&#8217;il y a beaucoup de sources d&#8217;informations pour savoir ce qu&#8217;est le Libre (<a href="http://www.gnu.org/philosophy/free-sw.html">dont la principale</a>), mais j&#8217;ai toujours constaté avec regret qu&#8217;il y a encore beaucoup de gens qui considèrent mal les Libristes, les défenseurs du Libre.</p>
<p>Je les ai vu dire que dans certains domaines, les Logiciels Libres n&#8217;arrivent pas à la cheville des logiciels privateurs, sur le plan technique. J&#8217;en ai vu dire que les Logiciels Libres n&#8217;apportent rien, et ne sont d&#8217;aucune utilité face aux logiciels privateurs. J&#8217;en ai vu dire que les Logiciels Libres ne sont pas des alternatives viables aux logiciels privateurs, ou aux services web du type Google ou facebook. J&#8217;en ai même lu qui disaient que si un auteur de Logiciel Libre voulait insérer dans son code une partie destinée à espionner l&#8217;utilisateur, personne ne le verrait.</p>
<p>Alors, j&#8217;ai décidé d&#8217;essayer autre chose, que dire &laquo;&nbsp;les Logiciels Libres c&#8217;est mieux, les logiciels privateurs c&#8217;est mal&nbsp;&raquo;.</p>
<p>La plupart des critiques que j&#8217;ai lu sont fondées sur l&#8217;aspect technique des Logiciels Libres. Or, le fondement même des Logiciels Libres est la liberté justement. Ils n&#8217;existent pas simplement pour qu&#8217;une alternative à Microsoft Office ou Microsoft Windows existe, ils existent pour apporter la liberté au sein de l&#8217;informatique. Ils ont été conçus pour libérer leurs utilisateurs des contraintes arbitrairement et injustement imposées par les éditeurs de logiciels.</p>
<p>C&#8217;est à Richard Stallman que l&#8217;on doit cette vision du Logiciel Libre. Tout défenseur du Logiciel Libre se doit de connaître et approuver Stallman, tandis que ses détracteurs se doivent de connaître les intentions formulées par Licence Publique Générale.</p>
<p>L&#8217;aspect technique des Logiciels Libres est pour ainsi dire secondaire : la priorité est d&#8217;accorder des libertés fondamentales aux auteurs et aux utilisateurs de ces logiciels ; l&#8217;aspect technique ne doit être mis en avant que pour leur valorisation par rapport aux solutions privatrices.</p>
<p>Par exemple, dire que GIMP est une plaisanterie face à Photoshop relève de l&#8217;ignorance, puisque cela revient à comparer les deux logiciels sur un plan technique. Or, GIMP n&#8217;est pas une réponse technique à Photoshop, c&#8217;est une réponse de principe. GIMP existe pour que puisse exister une alternative Libre à Photoshop.</p>
<p>Ce que certains considèrent comme une faiblesse est en réalité une force du Logiciel Libre : puisqu&#8217;on veut parler d&#8217;aspect technique, la technicité d&#8217;un Logiciel Libre est dépendante de sa communauté, forte de plusieurs milliers d&#8217;utilisateurs qui sont autant de contributeurs, tandis que la technicité d&#8217;un logiciel privateur n&#8217;est dépendante que du bon vouloir de l&#8217;entreprise qui le publie. Autrement dit, elle n&#8217;est motivée que par l&#8217;argent.</p>
<p>Ce qui m&#8217;amène à poser la question suivante : comment un Libriste peut se considérer comme tel s&#8217;il ne voit aucun inconvénient à utiliser une solution privative ?</p>
]]></content:encoded>
			<wfw:commentRss>http://ingnu.fr/2012/02/13/cest-quoi-le-libre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Une alternative à Dropbox</title>
		<link>http://ingnu.fr/2012/02/12/une-alternative-a-dropbox/</link>
		<comments>http://ingnu.fr/2012/02/12/une-alternative-a-dropbox/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 19:36:16 +0000</pubDate>
		<dc:creator>Jimmy Rudolf</dc:creator>
				<category><![CDATA[Créer son propre cloud]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[gollem]]></category>
		<category><![CDATA[horde]]></category>
		<category><![CDATA[unison]]></category>
		<category><![CDATA[webdav]]></category>

		<guid isPermaLink="false">http://ingnu.fr/?p=413</guid>
		<description><![CDATA[Stocker des données personnelles après d&#8217;un prestataire comme Dropbox (ou dans un autre esprit, MegaUpload) est dangereux, et l&#8217;actualité nous l&#8217;a clairement montré : la fermeture arbitraire du service entraîne non seulement l&#8217;inaccessibilité de vos données, mais en plus, dans le cadre d&#8217;une opération anti-piratage, cela peut conduire également à la suppression de ces données, &#8230; </p><p><a class="more-link block-button" href="http://ingnu.fr/2012/02/12/une-alternative-a-dropbox/">Lire la Suite &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ingnu.fr/2012/02/12/une-alternative-a-dropbox/synchronize/" rel="attachment wp-att-469"><img class="alignleft size-full wp-image-469" title="Synchronize" src="http://ingnu.fr/wp-content/uploads/2012/02/Synchronize.png" alt="" width="256" height="256" /></a>Stocker des données personnelles après d&#8217;un prestataire comme Dropbox (ou dans un autre esprit, MegaUpload) est dangereux, et l&#8217;actualité nous l&#8217;a clairement montré : la fermeture arbitraire du service entraîne non seulement l&#8217;inaccessibilité de vos données, mais en plus, dans le cadre d&#8217;une opération anti-piratage, cela peut conduire également à la suppression de ces données, de manière tout aussi arbitraire.</p>
<p>La solution est une fois de plus évidente : héberger chez soi un tel service.</p>
<p>Ce que je vais vous proposer va faire grincer des dents ceux qui espèrent lire un tutoriel sur l&#8217;installation de <a href="http://sparkleshare.org/">SparkleShare </a>ou <a href="http://owncloud.org/">OwnCloud</a> (d&#8217;autres existent bien sûr). Je n&#8217;en ferai rien. Mais avant de quitter mon site frustré, laissez-moi juste expliquer mes arguments.</p>
<p>SparkleShare et OwnCloud sont relativement jeunes. Or, on est censés leur confier des données personnelles, qui, a priori, ne peuvent se permettre d&#8217;être corrompues ou insécurisées. La jeunesse de ces applications fait que, selon moi, elles présentent des risques de sécurité et de fiabilité.</p>
<p>D&#8217;autre part, cela nécessite parfois d&#8217;installer des dépendances exotiques ou non-libres : SparkleShare requiert mono. Quant à OwnCloud, son manque de fonctionnalités (dû à sa jeunesse encore une fois) n&#8217;en fait pas une solution idéale pour le moment.</p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Attention, comprenez-moi bien : je ne dis pas que ce sont de mauvais logiciels, au contraire. J&#8217;estime que leur existence est nécessaire, et je pense que ce sont des applications qui conviendront très bien à la majorité d&#8217;entre nous. Cependant, dans le cadre de ma série d&#8217;articles sur la mise en place d&#8217;un cloud personnel, elles n&#8217;ont pas leur place.</p>
</div>
<p>Enfin, l&#8217;objectif de cette série de tutoriels est aussi de respecter ce qui est probablement le plus célèbre des paradigmes unix : une application pour chaque tâche. Ce qui veut dire que dans cet article nous verrons comment synchroniser nos documents entre plusieurs machines et proposer un accès générique à ces documents, tandis que dans les prochains articles, nous installerons des applications répondant à des besoins spécifiques, comme la gestion de galeries de photos par exemple.</p>
<p>Ce que je veux, c&#8217;est remplir toutes les fonctionnalités attendues d&#8217;un tel système, en utilisant uniquement des solutions logicielles éprouvées, standards, ne faisant appel à aucune dépendance exotique supplémentaire qui viendrait ralentir le serveur entier. En d&#8217;autres termes, ma solution convient tout aussi bien aux petits serveurs pas chers qui ne proposent pas une puissance de calcul importante ou un espace disque conséquent, qu&#8217;aux serveurs moins modestes capables de faire bien d&#8217;autres choses.</p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Autre chose : cela permet d&#8217;aborder des notions que nous ne verrions pas en ayant recours à ces solutions.</p>
</div>
<p>Si vous avez tenu jusque là, alors rappelons ce qu&#8217;un système tel que Dropbox propose :</p>
<ul>
<li>Un espace de stockage accessible depuis n&#8217;importe où</li>
<li>Transferts intelligents pour économiser la bande passante</li>
<li>Partage de fichiers</li>
<li>Accès mobile</li>
<li>Stockage sécurisé</li>
</ul>
<p>Rien qui ne soit pas accessible à des Logiciels Libres éprouvés !</p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Note : La publication de cet article m&#8217;a pris pas mal de temps. J&#8217;ai testé de nombreuses solutions avant d&#8217;adopter définitivement celle que je vous propose ci-dessous, parce que je voulais être certain de ne pas faire fausse route, compte tenu de mes propres convictions, des outils existants, et de l&#8217;aspect pédagogique de la création de son propre cloud. Vous vous apercevrez également qu&#8217;il s&#8217;agit là probablement de l&#8217;article le plus complexe de la série.</p>
</div>
<h2>Chiffrement</h2>
<p>L&#8217;intérêt de chiffrer vos données sur le disque de votre serveur peut être sujet à discussion : à quoi bon chiffrer ses données sur le disque du serveur si les communications entre vous-même et votre serveur sont déjà chiffrées ? D&#8217;autant que pour que vous puissiez accéder aux données, il faut qu&#8217;elles soient déjà déchiffrées sur le serveur. Autrement dit, avant que vous vous y connectiez. C&#8217;est notamment le cas lors de l&#8217;utilisation d&#8217;une partition chiffrée. Et s&#8217;il faut systématiquement ouvrir un shell sur le serveur pour mettre le mot de passe destiné à déchiffrer les données, cela va rapidement devenir pénible, notamment dans le cadre d&#8217;un accès depuis un Smartphone.</p>
<p>Le chiffrement des données sur le disque du serveur présente un intérêt dans le cas extrêmement improbable où quelqu&#8217;un parviendrait à obtenir un accès shell au serveur. Si le disque virtuel qu&#8217;on a créé n&#8217;est pas chiffré, cette personne pourra librement le consulter. Et si c&#8217;est l&#8217;État qui saisit votre serveur pour une raison X ou Y, vous êtes dans l&#8217;obligation de fournir les moyens nécessaires au déchiffrement du disque. Et si vous feintez de l&#8217;oublier, le cassage du chiffrement ne devrait pas être trop long, compte tenu du fait que la loi vous interdit d&#8217;utiliser un encodage sur plus de 1024bits. Dans tous les cas, le chiffrement au niveau du disque est inutile, encombrant, lourd, et contraignant.</p>
<p>Voilà mon avis personnel sur la question. Si vous estimez que je me trompe, libre à vous de mettre en place les nombreuses solutions de chiffrement qui s&#8217;offrent à vous. N&#8217;oubliez juste pas que <a href="http://www.truecrypt.org/legal/license">TrueCrypt n&#8217;est pas Libre</a> (Open Source est un terme trompeur qui ne signifie pas Libre au sens strict entendu par Richard Stallman &#8211; et moi).</p>
<h2>Accès aux données</h2>
<p>Pour rappel, on n&#8217;accèdera pas directement aux fichiers stockés sur le serveur (à l&#8217;exception d&#8217;un accès par l&#8217;interface web). On stocke les fichiers localement, et on les synchronise avec le serveur. Cela permet de ne pas ralentir la machine locale qui n&#8217;a pas besoin d&#8217;attendre d&#8217;être connectée au serveur pour travailler avec les fichiers, de travailler sur les données locales même si le serveur est inaccessible et de les synchroniser une fois le serveur de retour en ligne, et d&#8217;économiser de la bande passante puisque seules les modifications sont synchronisées.</p>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p><p class="first-p">Ce fonctionnement nécessite que vous disposiez d&#8217;un espace disque suffisant sur chaque périphérique !</p>
</div>
<p>Pour permettre plus de souplesse, on va stocker les documents des utilisateurs dans leur répertoire personnel, et proposer un répertoire public, accessible plus exactement à tous ceux ayant un compte sur le serveur.</p>
<p>Autrement dit, tout utilisateur qui souhaite avoir ses fichiers sur notre serveur devra avoir un compte Unix local. Cela nous permettra de conserver, lors des synchronisations, les propriétaires, groupes et permissions appliquées à tout fichier.</p>
<h2>Accès aux données depuis Apache</h2>
<p>On va installer <a href="http://www.horde.org/apps/gollem">Gollem</a> pour accéder aux fichiers depuis le navigateur.</p>
<p>Gollem est le gestionnaire de fichiers du framework Horde, que <a title="Kronolith : une alternative à Google Calendar" href="http://ingnu.fr/2012/02/07/kronolith-une-alternative-a-google-calendar/">nous avons déjà vu lors de l&#8217;installation de Kronolith</a>. Si vous avez suivi &#8211; comme je l&#8217;expliquais &#8211; la première partie du tutoriel, vous avez dû installer Horde de manière globale. Vous savez donc qu&#8217;il ne sera pas possible d&#8217;installer Gollem de la même manière. Plusieurs options s&#8217;offrent à nous :</p>
<ul>
<li>Installer Gollem dans sa propre instance de Horde</li>
<li>Fusionner l&#8217;agenda avec le gestionnaire de fichiers (en renommant par exemple l&#8217;hôte agenda.exemple.fr)</li>
<li>Installer un autre gestionnaire de fichiers (tel que Ajaxplorer et eXtplorer)</li>
</ul>
<p>Il faut savoir concernant ce dernier point que, à ma connaissance et contrairement à Gollem, les autres gestionnaires de fichiers en ligne ne permettent pas d&#8217;avoir recours à des comptes Unix, ce qui est un pré-requis pour conserver les propriétaires, groupes et droits sur les fichiers, pré-requis que nous pourrions remplir en ayant recours à une couche FTP, le gestionnaire de fichiers devenant un simple client FTP pour l&#8217;hôte local. Inutile, puisque nous n&#8217;utiliserons pas FTP à l&#8217;extérieur du serveur&#8230;</p>
<p>Il faut aussi savoir que si vous optez pour la deuxième solution, les personnes ayant accès à l&#8217;agenda auront aussi accès aux fichiers et vice-versa.</p>
<p>Nous retiendrons donc la première solution.</p>
<p>Nous allons créer un hôte virtuel sécurisé, comme on a maintenant l&#8217;habitude de faire, à la différence que nous allons recourir à l&#8217;authentification par certificat en plus du chiffrement. Cela va vous permettre de contrôler finement l&#8217;accès à vos fichiers depuis l&#8217;interface web : pour y accéder, il sera obligatoire de disposer d&#8217;un certificat client que vous seul pourrez délivrer.</p>
<p>Créons l&#8217;arborescence, puis notre hôte virtuel :</p>
<pre class="brush: bash">mkdir -p /var/www/exemple.fr/files/{log,www}
nano /etc/apache2/sites-available/files.exemple.fr</pre>
<pre>&lt;VirtualHost *:80&gt;
	ServerName files.exemple.fr
	Redirect / https://files.exemple.fr/
&lt;/VirtualHost&gt;

&lt;VirtualHost *:443&gt;
	ServerName files.exemple.fr

	DocumentRoot /var/www/exemple.fr/files/www

	SSLEngine On
	SSLCertificateFile /scripts/certificate_authority/apache/files.exemple.fr.crt
	SSLCertificateKeyFile /scripts/certificate_authority/apache/files.exemple.fr.key

        CustomLog /var/www/exemple.fr/files/log/access.log
        ErrorLog /var/www/exemple.fr/files/log/error.log

        php_value include_path /var/www/exemple.fr/files/pear/php
        SetEnv PHP_PEAR_SYSCONF_DIR /var/www/exemple.fr/files
&lt;/VirtualHost&gt;</pre>
<p>Nous avons créé un hôte virtuel non sécurisé redirigeant vers un hôte virtuel sécurisé, nous avons déjà vu le principe. Créons maintenant les certificats :</p>
<pre class="brush: bash">/scripts/certificate_authority/make_request apache files.exemple.fr
/scripts/certificate_authority/sign_request apache files.exemple.fr
chown www-data:www-data /scripts/certificate_authority/apache/*</pre>
<div class="warning_block message-block"><p class="printonly"><strong>Warning!</strong></p><p class="first-p">Lorsque le <em>Common Name</em> vous sera demandé, indiquez le nom de domaine ! Et dans notre cas, acceptez la création d&#8217;une clé sans mot de passe !</p>
</div>
<p>On active le site, et on redémarre apache :</p>
<pre class="brush: bash">a2ensite files.exemple.fr
/etc/init.d/apache2 restart</pre>
<p>On installe ensuite notre instance de PEAR.</p>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p><p class="first-p">Faites attentions aux chemins de fichiers : ils doivent être complets !</p>
</div>
<pre class="brush: bash">pear config-create /var/www/exemple.fr/files/ /var/www/exemple.fr/pear.conf
pear -c /var/www/exemple.fr/files/pear.conf install pear</pre>
<p>On installe Horde :</p>
<pre class="brush: bash">/var/www/exemple.fr/files/pear/pear -c /var/www/exemple.fr/files/pear.conf channel-discover pear.horde.org
/var/www/exemple.fr/files/pear/pear -c /var/www/exemple.fr/files/pear.conf install horde/horde_role
/var/www/exemple.fr/files/pear/pear -c /var/www/exemple.fr/files/pear.conf run-scripts horde/horde_role</pre>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Indiquez le chemin complet vers la racine du site quand on vous le demandera, à savoir <em>/var/www/exemple.fr/files/www</em></p>
</div>
<pre class="brush: bash">/var/www/exemple.fr/files/pear/pear -c /var/www/exemple.fr/files/pear.conf install -a -B horde/horde
cp /var/www/exemple.fr/files/www/config/conf.php.dist /var/www/exemple.fr/files/www/config/conf.php
chown -R www-data:www-data /var/www/exemple.fr/files</pre>
<p>Il reste à installer quelques dépendances :</p>
<pre class="brush: bash">/var/www/exemple.fr/files/pear/pear -c /var/www/exemple.fr/files/pear.conf install mdb2_driver_mysql</pre>
<p>Créez ensuite un utilisateur MySQL (reportez-vous à <a title="Installation d’un serveur HTTP/HTTPS" href="http://ingnu.fr/2012/02/07/installation-dun-serveur-http-https/">cet article</a> pour le faire via phpMyAdmin) avec sa base de données. Donnez-lui le nom &laquo;&nbsp;<em>Gollem</em>&nbsp;&raquo; par exemple.</p>
<p>Pour pouvoir utiliser PAM (et donc les comptes Unix locaux), il faut installer le paquet correspondant :</p>
<pre class="brush: bash">pecl install pam</pre>
<p>Et modifier Horde :</p>
<pre class="brush: bash">nano /var/www/exemple.fr/files/pear/php/Horde/Auth/Pam.php</pre>
<p>Changez la ligne 40 :</p>
<pre class="brush: php">if (!Horde_Util::extensionExists('pam')) {</pre>
<p>Pour inclure l&#8217;extension <em>pam_auth</em> :</p>
<pre class="brush: php">if (!Horde_Util::extensionExists('pam') &amp;&amp; !Horde_Util::extensionExists('pam_auth')) {</pre>
<p>Enregistrez. On doit encore configurer PAM pour être utilisable par Gollem. Tout d&#8217;abord, créons un lien symbolique qui permettra de lier le service PAM de PHP au service PAM de la machine :</p>
<pre class="brush: bash">cd /etc/pam.d
ln -s login php</pre>
<p>Ensuite, il faut que l&#8217;utilisateur d&#8217;Apache (<em>www-data</em>) ait accès au fichier <em>/etc/shadow</em>. Simple :</p>
<pre class="brush: bash">adduser www-data shadow</pre>
<p>Puis redémarrez Apache :</p>
<pre class="brush: bash">/etc/init.d/apache2 restart</pre>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Surveillez bien le fichier <em>/var/log/auth.log</em> pour y déceler d&#8217;éventuelles erreurs !</p>
</div>
<p>Configurez ensuite Horde exactement de la même manière que lors de l&#8217;installation de Kronolith (là encore, reportez-vous à <a title="Kronolith : une alternative à Google Calendar" href="http://ingnu.fr/2012/02/07/kronolith-une-alternative-a-google-calendar/">cet article</a>). Changez seulement les paramètres relatifs à la base de données, et dans l&#8217;onglet <em>Authentification</em>, affectez la valeur <em>PAM (Pluggable Authentication Modules) authentication</em> à la directive de configuration <em>$conf[auth][driver]</em>. Enregistrez, mais ne vous déconnectez pas encore de l&#8217;interface d&#8217;administration (vous ne pourriez plus y revenir pour le moment). Installons maintenant Gollem :</p>
<pre class="brush: bash">/var/www/exemple.fr/files/pear/pear -c /var/www/exemple.fr/files/pear.conf install -a -B horde/gollem</pre>
<p>Puis corrigez les droits :</p>
<pre class="brush: bash">chown -R www-data:www-data /var/www/exemple.fr/files/</pre>
<p>Retournez dans Horde, dans <em>Administration</em> &gt; <em>Configuration</em>, et générez la configuration de Gollem.</p>
<p>Il faut, en revanche, modifier à la main la configuration relative à l&#8217;accès aux données.</p>
<pre class="brush: bash">cd /var/www/exemple.fr/files/www/gollem/config
mv backends.php backends.php-orig
nano backends.php</pre>
<pre class="brush: php">&lt;?php 

$backends['documents'] = array(
    'disabled' =--&gt; false,
    'name' =&gt; 'Documents',
    'driver' =&gt; 'ssh2',
    'hordeauth' =&gt; true,
    'params' =&gt; array(
        'hostspec' =&gt; 'localhost',
        'permissions' =&gt; '700'
    ),
    'loginparams' =&gt; array(),
    'root' =&gt; '/home',
    'home' =&gt; $GLOBALS['registry']-&gt;getAuth(),
    'attributes' =&gt; array(
        'type',
        'name',
        'edit',
        'download',
        'modified',
        'size',
        'permission',
        'owner',
        'group'
    )
);

$backends['public'] = array(
    'disabled' =&gt; false,
    'name' =&gt; 'Fichiers publics',
    'driver' =&gt; 'ssh2',
    'hordeauth' =&gt; true,
    'params' =&gt; array(
        'hostspec' =&gt; 'localhost',
        'permissions' =&gt; '755'
    ),
    'loginparams' =&gt; array(),
    'root' =&gt; '/var/public-docs',
    'home' =&gt; '/var/public-docs',
    'attributes' =&gt; array(
        'type',
        'name',
        'edit',
        'download',
        'modified',
        'size',
        'permission',
        'owner',
        'group'
    )
);</pre>
<p>On créé deux backends : une pour les documents personnels, une pour les documents publics. Il faut donc créer le répertoire qui va bien :</p>
<pre class="brush: bash">mkdir /var/public-docs
chmod -R 777 /var/public-docs</pre>
<p>On attribue tous les droits à ce répertoire pour que n&#8217;importe qui puisse y écrire. Gollem s&#8217;occupera de mettre les droits à 755 pour chaque fichiers créé, sachant que Gollem permet à tout utilisateur de modifier les droits sur ses propres fichiers.</p>
<p>Il ne reste plus qu&#8217;à tester via l&#8217;adresse <em>http://files.exemple.fr</em>.</p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Vous noterez que systématiquement je vous propose de vous connecter via l&#8217;adresse non-sécurisée correspondante à votre hôte virtuel : c&#8217;est pour s&#8217;assurer que la redirection et le processus de chiffrement se déroulent correctement.</p>
</div>
<p>Une fois que tout fonctionne, vous devriez définir un utilisateur Unix qui sera administrateur de Horde.</p>
<pre class="brush: bash">nano /var/www/exemple.fr/files/www/config/conf.php</pre>
<p>Modifiez la ligne :</p>
<pre class="brush: php">$conf['auth']['admins'] = array('Administrator');</pre>
<p>Et mettez à la place de <em>Administrator</em> le nom de votre utilisateur unix sur votre serveur. Ainsi, en vous connectant à Horde, vous aurez accès à l&#8217;interface d&#8217;administration.</p>
<p>On dispose maintenant d&#8217;un espace privé pour chaque utilisateur, d&#8217;un espace public commun, et d&#8217;un moyen d&#8217;y accéder par un navigateur. Je crois que le plus dur est fait !</p>
<h2>Synchronisation des données</h2>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Si vous comptez n&#8217;utiliser que webdav, vous pouvez zapper cette section et la section suivante. Sachez que vous pouvez parfaitement n&#8217;utiliser que webdav depuis une machine sous GNU/Linux. Néanmoins, j&#8217;ai pensé que faire appel à unison était une solution intéressante, en complément de webdav.</p>
</div>
<p>Nous utiliserons <a href="http://www.cis.upenn.edu/~bcpierce/unison/">unison</a> pour synchroniser nos données. L&#8217;avantage procuré par unison est qu&#8217;il permet une synchronisation bidirectionnelle, tandis que rsync ne propose qu&#8217;une synchronisation unidirectionnelle.</p>
<p>Bien que l&#8217;application ne soit plus maintenue, elle reste un élément fondamental de notre système : la synchronisation bidirectionnelle est ce qui va nous permettre d&#8217;avoir partout les mêmes fichiers, qu&#8217;on les ait modifiés depuis l&#8217;interface web, une machine sous GNU/Linux, sous Windows ou sous Mac.</p>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p><p class="first-p">Il faut que la version d&#8217;unison utilisée soit la même sur toutes les plateformes.</p>
</div>
<p>Le fait que l&#8217;application ne soit plus maintenue devient du coup un avantage. Nous utiliserons donc la dernière version stable : la 2.40.63.</p>
<p>Cette version se trouve dans le dépôt <em>testing</em> de Debian. Si vous ne souhaitez pas ajouter ce dépôt à votre configuration (autrement dit, si vous ne voulez pas vous embêter avec l&#8217;<a href="http://jaqque.sbih.org/kplug/apt-pinning.html">apt pinning</a>), vous pouvez télécharger le paquet directement depuis <a href="http://packages.debian.org/wheezy/unison">cette page</a>.</p>
<p>Si c&#8217;est la voie que vous avez choisi, vous utiliserez <em>dpkg</em> :</p>
<pre class="brush: bash">dpkg -i unison_2.40.63-2_amd64.deb</pre>
<p>Sinon, <em>apt-get</em> :</p>
<pre class="brush: bash">apt-get -t testing install unison</pre>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p><p class="first-p">N&#8217;oubliez pas que si vous ne suivez pas les instructions sur apt pinning, vous risquez de passer involontairement sur une Debian testing !</p>
</div>
<p>Sous WIndows et Mac OS, vous trouverez les binaires sur <a href="http://alan.petitepomme.net/unison/index.html">cette page</a>.</p>
<p>Pour configurer unison, créons un répertoire qui lui sera dédié dans votre répertoire utilisateur, sur votre propre machine :</p>
<pre class="brush: bash">mkdir ~/.unison</pre>
<pre>root = /home/&lt;utilisateur local&gt;/
root = ssh://&lt;utilisateur distant&gt;@exemple.fr//home/&lt;utilisateur distant&gt;/
times = true
auto = true
batch = true
silent = true</pre>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p><p class="first-p">Pensez à remplacer les noms d&#8217;utilisateurs par vos valeurs respectives.</p>
</div>
<p>La première ligne indique la racine des fichiers locaux à copier, ici, votre répertoire utilisateur.</p>
<p>La seconde ligne indique la connexion ssh à utiliser pour synchroniser les fichiers avec le répertoire distant : ici, le <em>home</em> de l&#8217;utilisateur distant.</p>
<p>Ensuite, nous préservons les dates et heures affectées aux fichiers (<em>time</em>), et nous voulons une procédure la plus silencieuse possible.</p>
<p>La première fois que vous exécuterez unison, l&#8217;application vous posera des questions relatives à la synchronisation. Contentez-vous de valider avec la touche Entrée de votre clavier.</p>
<p>Mais avant d&#8217;exécuter unison pour la première fois, il faut créer une clé d&#8217;accès SSH. Toujours sur votre propre machine :</p>
<pre class="brush: bash">ssh-keygen -t rsa -f ~/.ssh/id_rsa_&lt;nom&gt;</pre>
<p>Vous remplacerez <em>&lt;nom&gt;</em> par une valeur vous permettant de savoir qu&#8217;il s&#8217;agit de la clé permettant la synchronisation de vos fichiers avec le serveur. L&#8217;idée, c&#8217;est de la différencier d&#8217;autres clés que vous auriez pu créer avant.</p>
<p>Une fois créée, envoyez-la au serveur :</p>
<pre class="brush: bash">ssh-copy-id -i ~/.ssh/id_rsa_&lt;nom&gt; &lt;utilisateur distant&gt;@exemple.fr</pre>
<p>De même, remplacez les valeurs entre chevrons pour qu&#8217;elles correspondent à votre situation.</p>
<p>Dernière étape avant de lancer la première synchronisation, ouvrir le port 22 sur le serveur. Reprenez notre <a title="Créer son propre Cloud : Introduction" href="http://ingnu.fr/2012/02/05/creer-son-propre-cloud-introduction/">script de mise en place du firewall</a> sur le serveur :</p>
<pre class="brush: bash">nano /scripts/firewall</pre>
<p>Entre les lignes :</p>
<pre>##### Configuration personnalisée #####</pre>
<p>Et :</p>
<pre>##### Fin : Configuration personnalisée #####</pre>
<p>Rajoutez la ligne suivante :</p>
<pre>${IPT} -A SERVICES -p tcp --dport 22 -j ACCEPT</pre>
<p>N&#8217;oubliez pas de relancer le script :</p>
<pre class="brush: bash">/scripts/firewall</pre>
<p>Bien qu&#8217;en début de script nous spécifions l&#8217;adresse IP d&#8217;une machine toujours autorisée à se connecter, nous ne prévoyons pas que d&#8217;autres machines puissent accéder au port 22 (le port utilisé par SSH).</p>
<p>Vu que, dans le cas de l&#8217;utilisation d&#8217;un smartphone par exemple, on ne peut pas prévoir l&#8217;adresse IP du terminal (parce qu&#8217;on peut se connecter depuis une borne wifi inconnue), nous devons ouvrir le port 22 de manière systématique.</p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Dans l&#8217;un des derniers articles de <a href="http://ingnu.fr/category/creer-son-propre-cloud/">notre série consacrée à la mise en place d&#8217;un cloud personnel</a>, nous verrons comment sécuriser de manière plus fine notre serveur. Aussi, je ne recommande pas, pour l&#8217;instant, de changer le port d&#8217;écoute du serveur SSH.</p>
</div>
<p>On peut enfin lancer la première synchronisation, qui va se borner à copier vos fichiers locaux sur le serveur distant. Sur votre machine, lancez simplement :</p>
<pre class="brush: bash">unison</pre>
<p>Et patientez.</p>
<p>Le fichier <em>default.prf</em> que nous venons de créer est considéré par unison comme étant un profil. On peut créer autant de profils que nécessaire. Par exemple, nous avons créé un espace public sur le serveur, dont nous nous servirons plus tard pour stocker des photos et les gérer avec une galerie. Nous verrons alors comment configurer unison pour que cette galerie soit synchronisée avec un répertoire local sous un autre profil.</p>
<p>Pour le moment, il nous reste encore à automatiser la synchronisation de nos documents personnels.</p>
<h2>Automatisation</h2>
<p>Le problème avec unison (en console sous GNU/Linux), c&#8217;est que lors d&#8217;une synchronisation, l&#8217;application ne vérifie pas si une instance de l&#8217;application est déjà en route. Autrement dit, plusieurs instances de unison peuvent tourner en même temps, ce qui peut poser problème lors de longues copies. Pour éviter cela, nous allons devoir créer un script qui se charge de cette vérification. Ce script sera créé sur votre machine avec le super-utilisateur.</p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">À noter pour les utilisateurs Windows ou Mac que l&#8217;interface graphique devrait éviter le lancement de plusieurs instances de l&#8217;application.</p>
</div>
<p>En tant que root, créez le script en question :</p>
<pre class="brush: bash">mkdir /scripts
nano /scripts/unison-launcher</pre>
<pre class="brush: bash">#!/bin/bash

who=`whoami`
mypid=$$
mydir=`dirname $0`
home="/home/$who"
pidfile="$home/unison.pid"

if [ -f "$pidfile" ]
then
        oldpid=`cat "$pidfile"`
        oldpidexists=`ps -p $oldpid | grep -v TTY | awk -F " " '{print $1}'`

        if [ "$oldpidexists" != "" ]
        then
                exit
        fi
fi

touch "$pidfile"
echo $mypid &gt; "$pidfile"

if [ "$1" == "" ]
then
        if [ -f "$home/.unison/default.prf" ]
        then
                unison default
        else
                echo "Le profil par défaut est introuvable ($home/.unison/default.prf)"
        fi
else
        if [ -f "$home/.unison/$1.prf" ]
        then
                unison $1
        else
                echo "Le profil $1 est introuvable ($home/.unison/$1.prf)"
        fi
fi

rm "$pidfile"</pre>
<p>Attribuez ensuite les droits d&#8217;exécution :</p>
<pre class="brush: bash">chmod +x /scripts/unison-launcher</pre>
<p>Ce script est fait pour permettre la synchronisation de comptes différents sur la même machine.</p>
<p>Il ne reste plus qu&#8217;à l&#8217;intégrer dans la crontab de chaque utilisateur à synchroniser :</p>
<pre class="brush: bash">crontab -e</pre>
<pre>*    *    *    *    *    /scripts/unison-launcher</pre>
<p>Vous pouvez passer en argument de ce script le nom d&#8217;un profil à charger. Nous le verrons dans un prochain article.</p>
<div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p><p class="first-p">N&#8217;oubliez pas que le fichier <em>default.prf</em> doit être placé dans un répertoire <em>.unison</em>, présent dans le répertoire personnel de chaque utilisateur à synchroniser !</p>
</div>
<h2>Vérification</h2>
<p>Maintenant que la première synchronisation a été effectuée, rendez-vous dans Gollem pour vérifier (<em>http://files.exemple.fr</em>). Vous devez retrouver tous vos fichiers, avec les bonnes permissions, et appartenant à l&#8217;utilisateur sur votre serveur.</p>
<p>Via Gollem, créez un répertoire de test. Patientez une minute, puis listez les fichiers sur votre propre machine. Le répertoire en question devrait avoir été créé.</p>
<p>Si tout fonctionne, et que vous disposez d&#8217;une autre machine sous GNU/Linux, il vous suffit d&#8217;y copier le script <em>/script/unison-launcher</em> pour synchroniser les utilisateurs de cette machine (après avoir créer les profils par défaut, évidemment).</p>
<h2>Webdav</h2>
<p>Webdav va nous permettre de nous synchroniser avec davantage de clients, et notamment les périphériques Android, puisque unison n&#8217;existe pas sous Android. Webdav étant géré par Apache, nous évitons deux écueils : installer une application dédiée (donc faire tourner un service de plus), et ouvrir un port réseau supplémentaire.</p>
<p>Installons tout d&#8217;abord quelques dépendances et activons-les :</p>
<pre class="brush: bash">apt-get install libapache2-mod-auth-pam
a2enmod auth_pam dav_fs dav
a2dismod userdir</pre>
<p>Nous devons ensuite modifier un peu la configuration de notre hôte virtuel dans Apache.</p>
<pre class="brush: bash">nano /etc/apache2/sites-available/files.exemple.fr</pre>
<p>Rajoutez les deux lignes suivantes dans la configuration de l&#8217;hôte virtuel sécurisé (avant &lt;/VirtualHost&gt;) :</p>
<pre>Include /etc/apache2/mods-available/userdir.load
Include /etc/apache2/mods-available/userdir.conf</pre>
<p>Ensuite, on va modifier la configuration du module userdir :</p>
<pre class="brush: bash">mv /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-available/userdir.conf-orig
nano /etc/apache2/mods-available/userdir.conf</pre>
<pre>&lt;IfModule mod_userdir.c&gt;
    UserDir /home
    UserDir disabled root

    DAVLockDB /var/lib/apache2/DAVLockDB

    &lt;Directory /home/*/&gt;
        AllowOverride FileInfo AuthConfig Limit
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

        DAV On

        AuthPAM_Enabled On
        AuthPAM_FallThrough Off

        AuthUserFile /etc/shadow

        ForceType text/plain
    &lt;/Directory&gt;

    Alias /public /var/public-docs

    &lt;Directory /var/public-docs&gt;
        AllowOverride FileInfo AuthConfig Limit
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

        DAV On

        AuthPAM_Enabled On
        AuthPAM_FallThrough Off

        AuthUserFile /etc/shadow

        ForceType text/plain
    &lt;/Directory&gt;
&lt;/IfModule&gt;</pre>
<p>On définit ici que le répertoire utilisateur pour Apache est son home, et on créé un accès au répertoire public. Afin d&#8217;éviter que n&#8217;importe qui puisse voir le répertoire d&#8217;un autre utilisateur, il faut créer un fichier .htaccess dans chaque répertoire utilisateur. Ainsi, seul l&#8217;utilisateur connecté peut accéder à son propre répertoire.</p>
<pre class="brush: bash">nano /home/&lt;utilisateur&gt;/.htaccess</pre>
<pre>AuthPAM_Enabled on
AuthType Basic
AuthName "PAM"

require user &lt;utilisateur&gt;</pre>
<p>Remplacez <em>&lt;utilisateur&gt;</em> par le nom d&#8217;utilisateur correspondant au répertoire personnel dans lequel vous mettez ce fichier.</p>
<p>Vous pouvez désormais accéder, via un client dav ou votre navigateur, aux adresses suivantes :</p>
<ul>
<li>http://exemple.fr/~utilisateur</li>
<li>http://exemple.fr/public</li>
</ul>
<h2>Synchronisation avec un client Android</h2>
<p>Maintenant que webdav est en place, on va pouvoir configurer un client sous Android.</p>
<p>Et pour cela, nous allons installer sur le terminal l&#8217;application <a href="https://market.android.com/details?id=jp.ddo.shigadroid.webdavfilemanager">WebDav File Manager</a>.</p>
<p>Expliquer comment configurer le client sortirait du cadre de cet article déjà bien touffu par ailleurs. <a href="http://shigadroid.web.fc2.com/en/">La page suivante</a> vous permettra de configurer l&#8217;application ainsi que la synchronisation.</p>
<p>Nous verrons, en revanche, dans notre prochain article, comment configurer l&#8217;application pour envoyer automatiquement les photos prises avec le terminal vers notre serveur.</p>
<h2>Conclusion</h2>
<p>Un tel article mérite bien une conclusion particulière. Nous avons maintenant mis en place tout ce qu&#8217;un service comme Dropbox peut fournir, et peut être même plus encore (nous le verrons dans les prochains articles). En l&#8217;occurrence :</p>
<ul>
<li>on peut accéder à nos fichiers depuis un navigateur et via webdav, donc depuis des périphériques nomades</li>
<li>nos données sont synchronisées donc accessibles depuis n&#8217;importe où</li>
<li>l&#8217;accès à nos données se fait seulement via SSH ou SSL, donc les transferts sont sécurisés</li>
<li>on peut gérer la bande passante allouée à l&#8217;accès aux fichiers</li>
<li>on va pouvoir installer des applications web dédiées à la gestion de certains types de fichiers, de façon plus puissante et plus agréable que tout autre service intégré</li>
<li>on dispose d&#8217;une excellente base pour faire bien d&#8217;autres choses avec nos fichiers !</li>
</ul>
<p>Voilà donc cet article consacré à la mise en place d&#8217;une alternative à Dropbox terminé. Il s&#8217;agissait là probablement du plus complexe que nous ayons eu à aborder depuis le début de l&#8217;installation de notre cloud personnalisé. Il est aussi peu probable que les articles suivants soient aussi long et difficiles à intégrer que celui-ci. Nous avons vu un certain nombre de notions relativement complexes, sans compter les petites modifications à apporter ça et là à des applications existantes (<a title="Son propre réseau social avec status.net" href="http://ingnu.fr/2012/02/08/son-propre-reseau-social-avec-status-net/">nous l&#8217;avons fait pour status.net</a>, nous le faisons ici avec Horde).</p>
<p>Donc, même si vous n&#8217;avez pas eu le courage de tout mettre en œuvre, j&#8217;espère néanmoins que cet article (et les autres !) vous a intéressé.</p>
<p>Prochainement, nous installerons une application pour partager ses photos, application qui reposera sur le dossier public que nous avons mis en place, et dont la mise à jour sera automatique. Cerise sur le gâteau : quand vous prendrez une photo depuis votre smartphone, celle-ci sera automatiquement envoyée à la galerie et intégrée, exactement comme avec Google et Picasa, sauf que nous n&#8217;aurons recours qu&#8217;à des Logiciels Libres !</p>
<p>Ensuite, nous renforcerons la sécurité de notre serveur. Nous mettrons en place un système de sécurité préventif, autant que défensif.</p>
<p>L&#8217;article d&#8217;après sera consacré à la sauvegarde et la restauration de notre serveur.</p>
<p>Enfin, je publierai un dernier article, conclusion globale de tout le chapitre sur l&#8217;installation d&#8217;un cloud personnel.</p>
]]></content:encoded>
			<wfw:commentRss>http://ingnu.fr/2012/02/12/une-alternative-a-dropbox/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Partager ses fichiers sur les réseaux sociaux avec SMP</title>
		<link>http://ingnu.fr/2012/02/09/partager-ses-fichiers-sur-les-reseaux-sociaux-avec-smp/</link>
		<comments>http://ingnu.fr/2012/02/09/partager-ses-fichiers-sur-les-reseaux-sociaux-avec-smp/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 17:29:17 +0000</pubDate>
		<dc:creator>Jimmy Rudolf</dc:creator>
				<category><![CDATA[Créer son propre cloud]]></category>
		<category><![CDATA[sharemypics]]></category>

		<guid isPermaLink="false">http://ingnu.fr/?p=409</guid>
		<description><![CDATA[SMP (pour Share My Pics) est une application que j&#8217;ai développé pour proposer une alternative à twitpic. Son objectif est de partager certains fichiers sur les réseaux sociaux, notamment des images (d&#8217;où son nom), en évitant de les envoyer sur ces réseaux. Cela permet de rester maître de ses données puisqu&#8217;elles ne quittent pas votre &#8230; </p><p><a class="more-link block-button" href="http://ingnu.fr/2012/02/09/partager-ses-fichiers-sur-les-reseaux-sociaux-avec-smp/">Lire la Suite &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ingnu.fr/2012/02/09/partager-ses-fichiers-sur-les-reseaux-sociaux-avec-smp/share-my-pics-2/" rel="attachment wp-att-452"><img class="alignleft size-medium wp-image-452" title="Share-my-pics" src="http://ingnu.fr/wp-content/uploads/2012/02/Share-my-pics-300x199.png" alt="" width="300" height="199" /></a><a href="http://sharemypics.net">SMP</a> (pour <em>Share My Pics</em>) est une application que j&#8217;ai développé pour proposer une alternative à twitpic. Son objectif est de partager certains fichiers sur les réseaux sociaux, notamment des images (d&#8217;où son nom), en évitant de les envoyer sur ces réseaux. Cela permet de rester maître de ses données puisqu&#8217;elles ne quittent pas votre serveur.</p>
<p>Encore en développement, sa procédure d&#8217;installation peut sembler compliquée : je n&#8217;ai pas créé d&#8217;installateur, et son téléchargement depuis <a href="http://redmine.ingnu.fr">redmine</a> n&#8217;est pas vraiment &laquo;&nbsp;<em>user-friendly</em>&laquo;&nbsp;. Cependant, elle est suffisamment stable et propose suffisamment de fonctionnalités pour être parfaitement utilisable. C&#8217;est également l&#8217;occasion pour moi de vous inciter à vous en servir, de sorte à me permettre de l&#8217;améliorer. Et si vous souhaitez tester un peu l&#8217;application, vous trouverez mon instance <a href="http://smp.ingnu.fr/">en cliquant ici</a>.</p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Si vous souhaitez me contacter à propos de SMP, pour soumettre un bug, proposer une fonctionnalité ou dire que l&#8217;application est nulle, je vous serai reconnaissant de bien vouloir passer par <a href="http://redmine.ingnu.fr/projects/smp/issues/new">la page prévue pour</a> ! Par avance, merci !</p>
</div>
<h2>Installation des pré-requis</h2>
<p>La procédure d&#8217;installation de SMP et l&#8217;application en elle-même nécessitent quelques paquets :</p>
<pre class="brush: bash">apt-get install git php-gettext
pear install mail html_tagcloud mdb2 mdb2_driver_mysql</pre>
<h2>Hôte virtuel</h2>
<p>Première chose, comme d&#8217;habitude, on s&#8217;occupe de l&#8217;hôte virtuel dans apache :</p>
<pre class="brush: bash">nano /etc/apache2/sites-available/smp.exemple.fr</pre>
<pre>&lt;VirtualHost *:80&gt;
	ServerName smp.exemple.fr
	Redirect / https://smp.exemple.fr/
&lt;/VirtualHost&gt;

&lt;VirtualHost *:443&gt;
	ServerName smp.exemple.fr

	DocumentRoot /var/www/exemple.fr/smp/www

	SSLEngine On
	SSLCertificateFile /scripts/certificate_authority/apache/smp.exemple.fr.crt
	SSLCertificateKeyFile /scripts/certificate_authority/apache/smp.exemple.fr.key

        CustomLog /var/www/exemple.fr/smp/log/access.log
        ErrorLog /var/www/exemple.fr/smp/log/error.log
&lt;/VirtualHost&gt;</pre>
<p>Nous avons créé un hôte virtuel non sécurisé redirigeant vers un hôte virtuel sécurisé, nous avons déjà vu le principe. Créons maintenant les certificats :</p>
<pre class="brush: bash">/scripts/certificate_authority/make_request apache smp.exemple.fr
/scripts/certificate_authority/sign_request apache smp.exemple.fr
chown www-data:www-data /scripts/certificate_authority/apache/*</pre>
<div class="warning_block message-block"><p class="printonly"><strong>Warning!</strong></p><p class="first-p">Lorsque le <em>Common Name</em> vous sera demandé, indiquez le nom de domaine ! Et dans notre cas, acceptez la création d&#8217;une clé sans mot de passe !</p>
</div>
<p>On active le site, et on redémarre apache :</p>
<pre class="brush: bash">a2ensite smp.exemple.fr
/etc/init.d/apache2 restart</pre>
<h2>Installation de SMP</h2>
<p>Vous devez tout d&#8217;abord vous créer un compte <a href="http://redmine.ingnu.fr/account/register">sur la page suivante</a>. Il s&#8217;agit de mon dépôt privé. Une fois votre compte créé et que vous vous êtes connecté, allez dans les paramètres de votre compte (lien <em>Mon compte</em> en haut à droite). Vous verrez un lien <em><a href="http://redmine.ingnu.fr/my/public_keys">Public Keys</a></em>. Pour pouvoir accéder au dépôt, vous allez renseigner une clé ssh.</p>
<p>Saisissez la commande suivante :</p>
<pre class="brush: bash">ssh-keygen -t rsa -f id_ingnu</pre>
<p>Si vous spécifiez un mot de passe, vous devrez le saisir chaque fois que vous ferez usage de la clé (pour mettre à jour le dépôt ou le télécharger).</p>
<p>Cette commande va créer deux fichiers :</p>
<pre>~/.ssh/id_ingnu         Clé privée
~/.ssh/id_ingnu.pub     Clé publique</pre>
<p>Affichez le contenu de la clé publique :</p>
<pre class="brush: bash">cat ~/.ssh/id_ingnu.pub</pre>
<p>Copiez cette clé, puis retournez dans redmine, dans l&#8217;interface de gestion des clés, puis créez-en une nouvelle, et collez le contenu de votre clé publique réservée à ingnu. Enfin, sauvegardez.</p>
<div class="important_block message-block"><p class="printonly"><strong>Important!</strong></p><p class="first-p">Cette procédure, à ne faire qu&#8217;une fois (à condition de sauvegarder vos clés si vous devez réinstaller votre système d&#8217;exploitation), va vous permettre non seulement de télécharger SMP et le mettre à jour facilement, mais aussi publier vos correctifs et ajouts, ce que nous verrons plus tard.</p>
</div>
<p>On télécharge SMP et on l&#8217;installe :</p>
<pre class="brush: bash">cd /usr/src
git clone git@ingnu.fr:/smp.git
cp -Rv smp/* /var/www/exemple.fr/smp/www/
cd /var/www/exemple.fr/smp/www
mv settings.dist.php settings.php</pre>
<p>On créé ensuite l&#8217;utilisateur MySQL dont on va avoir besoin (je ne ré-explique pas la procédure, vous devez maintenant avoir l&#8217;habitude <img src='http://ingnu.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). Nommez-le par exemple <em>SMP</em>. Ensuite, saisissez la commande suivante (en console bien sûr) pour créer la structure de la base de données :</p>
<pre class="brush: bash">mysql -u root -pVotreMotDePasse SMP &lt; documents/databases/mysql.sql</pre>
<p>On peut maintenant éditer la configuration de SMP (vous trouverez tous les détails <a href="http://sharemypics.net/index.php/Configuration">sur le wiki de SMP</a>).</p>
<pre class="brush: bash">nano settings.php</pre>
<p>Sachez que pour le moment, SMP ne propose aucune interface d&#8217;administration : tout se configure le plus simplement du monde depuis le fichier <em>settings.php</em>. Consultez également le wiki pour voir quelles sont les <a href="http://sharemypics.net/index.php/Catégorie:Extensions">extensions disponibles</a> et comment les configurer.</p>
<p>Lorsque vous aurez terminé la configuration de SMP, attribuez les bons droits au dossier :</p>
<pre class="brush: bash">chown -R www-data:www-data ./</pre>
<h2>Premiers pas</h2>
<p>Ouvrez votre site (<em>http://smp.exemple.fr</em>), puis créez votre compte utilisateur. Si vous avez activé la confirmation par mail, effectuez-la puis revenez dans SMP.</p>
<p>Une fois connecté, vous pouvez cliquer sur la première étape pour afficher et modifier les paramètres de votre compte, et surtout pour <a href="http://sharemypics.net/index.php/Lier_ses_comptes_de_réseaux_sociaux">lier vos comptes de réseaux sociaux</a>. La procédure est extrêmement simple (une fois les clés obtenues de ces réseaux sociaux), et est documentée dans le wiki.</p>
<p>Vous noterez qu&#8217;à tout moment, vous pouvez délier un compte de réseau social. Par exemple, si vous avez lié votre compte facebook et votre compte twitter, et si vous voulez partager un fichier uniquement avec vos contacts facebook, il vous suffit de délier le compte twitter. Par la suite, vous pourrez tout aussi facilement lier à nouveau ce compte.</p>
<p>L&#8217;envoi de fichier est lui aussi extrêmement simple : on lui donne éventuellement un titre, on lui affecte éventuellement des mots-clés, on spécifie le fichier, et on envoi. Une fois envoyé, le lien direct vers le fichier vous sera présenté.</p>
<p>Vous pourrez alors consulter la <em>timeline</em> publique, où votre premier fichier devrait se trouver.</p>
<h2>Développement de SMP</h2>
<p>SMP est en développement actif : de nouvelles fonctionnalités et des corrections de bugs sont régulièrement publiées (du moins, j&#8217;essaye). Consultez l&#8217;état des demandes en cours pour voir où j&#8217;en suis.</p>
<p>Lorsqu&#8217;une mise à jour est publiée, vous voudrez peut-être également mettre à jour votre propre instance de SMP. Rien de plus simple :</p>
<pre class="brush: bash">cd /usr/src/smp
git pull
cp -Rv smp/* /var/www/exemple.fr/smp/www/</pre>
<div class="warning_block message-block"><p class="printonly"><strong>Warning!</strong></p><p class="first-p">Attention toutefois à sauvegarder les anciens fichiers, ainsi que la base de données !</p>
</div>
<p>Si vous souhaitez contribuer à SMP, plusieurs options s&#8217;offrent à vous : forker le projet, ou proposer vos commits directement dans la branche master. Si ma phrase est du chinois pour vous, vous devriez jeter un oeil à la documentation de git (<a href="http://git-scm.com/documentation">officielle</a> et <a href="http://doc.ubuntu-fr.org/git">non-officielle</a>), qui vous expliquera bien mieux que moi les tenants et aboutissants du développement de groupe <img src='http://ingnu.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Conclusion</h2>
<p>J&#8217;espère que cette application vous donnera satisfaction. <a title="[MAJ 27/01/2012] Mes résolutions pour 2012" href="http://ingnu.fr/2012/01/15/mes-resolutions-pour-2012/">En début d&#8217;année</a>, je m&#8217;étais fixé pour objectif de réaliser et publier une application sous licence libre. C&#8217;est chose faite avec SMP, et j&#8217;ai bon espoir qu&#8217;elle trouvera son public.</p>
<p>En attendant, vous disposez d&#8217;une solution libre, équivalente à twitpic, vous permettant de partager vos fichiers sur vos réseaux sociaux. N&#8217;hésitez pas à me faire part de vos appréciations !</p>
]]></content:encoded>
			<wfw:commentRss>http://ingnu.fr/2012/02/09/partager-ses-fichiers-sur-les-reseaux-sociaux-avec-smp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

