Planète auto-hébergement

2014-10-18

Free week-end chez Steam

A partir d’aujourd’hui et jusqu’à lundi 20 octobre c’est le free week end chez Steam. La plateforme met propose d’installer gratuitement dix jeux. Les pc Linux ne sont pas oubliés, car sur les dix jeux cinq d’entre eux sont jouables.

Il s’agit de :

  • Awesomenauts
  • Don’t Starve
  • Killing Floor
  • Trine 2
  • XCOM : Ennemy unknown;

A noter aussi qu’ils sont tous en promotions. Pour ma part j’ai craqué sur trois jeux.

Le premier c’est l’excellentissime Trine 2 (3,99 €) qui me faisait de l’oeil depuis un moment déjà. Ce jeu est un vrai chef-d’oeuvre, le mélange jeu de rôle et jeu de plateforme est super bien réalisé. Les trois personnages se complètent très bien en fonction des circonstances et l’univers est simplement magnifique.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="http://www.youtube.com/embed/gcuQH3lmin8" width="560"></iframe>

Le deuxième c’est XCOM : Ennemy Unknow, j’avais adoré la première série sur 486 de l’époque, je l’ai installé pour voir si je retrouvais les mêmes sensations d’avec le premier épisode et malgré les graphismes qui ont beaucoup changés le plaisir est toujours là, le tour par tour est vraiment réussi. Pour 5€ pourquoi se priver.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="http://www.youtube.com/embed/xCHgi2xGQ50" width="560"></iframe>

Le troisième c’est Don’t Starve, simplement pour la découverte. Je dois dire qu’il est vraiment unique en son genre. Je l’ai acheté à cause de ses graphismes qui m’intriguaient fortement et le style survie que je ne connaissais pas. C’est une vraie réussite on se prend vraiment dans le jeu dont la musique est simplement splendide. Le premier pack est à 6,45 je ne regrette pas mon achat.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="http://www.youtube.com/embed/W689SOpXG9o" width="560"></iframe>

Les vacances commencent bien, moi qui avait peur de m’ennuyer. J’apprécie de plus en plus le catalogue des jeux Steam sous Linux qui s’étoffe de plus en plus.

AjaxTerm : accès SSH minimaliste via le navigateur (après correction CSS)

AjaxTerm permet d’accéder à son serveur SSH via une interface HTML.
A quoi ça sert ? A pouvoir utiliser la ligne de commande dans un navigateur, via le protocole HTTP. C’est utile notamment quand le port SSH est bloqué par un proxy d’entreprise.

AjaxTerm est minimaliste et n’a pas évolué depuis des années. Mais il est très léger et facile à installer. Pour une utilisation ponctuelle hébergée sur un serveur peu puissant, je le trouve tout à fait adapté.

Le problème, c’est que, avec le package fourni par Debian, l’interface est quasi inutilisable sur un navigateur récent :
– le curseur n’est pas visible
– la police est proportionnelle donc les caractères ne sont pas alignés verticalement
– les passages à la ligne ne sont pas respectés

AjaxTerm CSS incorrect

Correctif du bug CSS

Tous ces problèmes viennent du style CSS qui ne s’applique pas correctement au HTML de AjaxTerm.
En le corrigeant un peu, AjaxTerm retrouve sa mise en forme normale :

AjaxTerm CSS corrigé

Il suffit de modifier le fichier /usr/share/ajaxterm/ajaxterm.css, pour remplacer son contenu par :

pre.stat {
    margin: 0px;
    padding: 4px;
    display: block;
    font-family: monospace;
    white-space: pre;
    background-color: black;
    border-top: 1px solid black;
    color: white;
}
pre.stat span {
    padding: 0px;
}
pre.stat .on {
    background-color: #080;
    font-weight: bold;
    color: white;
    cursor: pointer;
}
pre.stat .off {
    background-color: #888;
    font-weight: bold;
    color: white;
    cursor: pointer;
}
#term {
    float: left;
    margin: 0px;
    padding: 4px;
    display: block;
    font-family: monospace;
    white-space: pre;
    background-color: black;
    border-top: 1px solid white;
    color: #eee;
}
span.f0  { color: #000; }
span.f1  { color: #b00; }
span.f2  { color: #0b0; }
span.f3  { color: #bb0; }
span.f4  { color: #00b; }
span.f5  { color: #b0b; }
span.f6  { color: #0bb; }
span.f7  { color: #bbb; }
span.f8  { color: #666; }
span.f9  { color: #f00; }
span.f10 { color: #0f0; }
span.f11 { color: #ff0; }
span.f12 { color: #00f; }
span.f13 { color: #f0f; }
span.f14 { color: #0ff; }
span.f15 { color: #fff; }
span.b0  { background-color: #000; }
span.b1  { background-color: #b00; }
span.b2  { background-color: #0b0; }
span.b3  { background-color: #bb0; }
span.b4  { background-color: #00b; }
span.b5  { background-color: #b0b; }
span.b6  { background-color: #0bb; }
span.b7  { background-color: #bbb; }

body { background-color: #888; }

Le problème venait du fait que le CSS utilisait un sélecteur “pre.term” qui ne correspondait à aucune balise HTML. Par conséquent les styles qui l’utilisaient n’étaient pas appliqués.

Apparemment ce bug a été rapporté il y a peu de temps, mais n’avait pas encore été corrigé. J’ai donc proposé mon petit patch (à l’auteur de AjaxTerm, et dans le bug ouvert chez Debian).

Mais d’où vient ce bug ?

Il parait trop gros pour ne jamais avoir été vu depuis qu’il a été développé (en 2006)…

En creusant un peu, je me suis rendu compte que AjaxTerm (sans mon correctif) fonctionnait très bien avec des navigateurs plus anciens. Sur Firefox 3.0, et jusqu’à Firefox 19, pas de problèmes. Idem avec IE8.

C’est à partir de la version 20 de Firefox que ça n’a plus marché.

Damned, serait-ce une régression de Firefox dans la prise en charge CSS ?

Et bien non, c’est un peu + compliqué que ça : le DOM généré était légèrement différent dans les anciennes versions du navigateur. Et, en particulier, cela générait bien un nœud <pre class=”term”> à l’endroit attendu par le style CSS d’origine.

Dans les versions + récentes du navigateur (que ce soit Firefox ou Chromium/Chrome), ce nœud n’est pas généré. J’ai regardé rapidement le changelog de la version 20 de Firefox, mais je n’ai pas trouvé ce qui expliquerait ce petit changement.

NB : le CSS que je propose fonctionne à la fois sur les anciennes et récentes versions de navigateurs

Et la sécurité, dans tout ça ?

D’abord une évidence : il faut crypter la communication HTTP pour que le trafic ne passe pas en clair sur le réseau. Donc cryptage SSL obligatoire.

D’autre part, à ma connaissance, on ne peut pas utiliser d’authentification par clé avec AjaxTerm : on est donc limité à l’authentification par mot de passe.

Mais au fait, avec mon beau Fail2ban qui contrôle les tentatives d’accès par SSH, qu’est-ce que ça donne avec AjaxTerm ?

Sans surprise, les connexions semblent toutes venir de 127.0.0.1. Donc si Fail2ban bloque cette adresse, c’est tout AjaxTerm qui est bloqué.

Mais surtout, le gros problème est que, par défaut, Fail2ban ignore les échecs de connexion provenant de 127.0.0.1 : dans /etc/fail2ban/jail.conf :

# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1/8

Donc, par défaut, Fail2ban ne surveille pas les connexions SSH qui proviennent de AjaxTerm. Et ça, c’est pas cool.

Bien sûr, c’est paramétrable et on peut enlever 127.0.0.1 des IP ignorées. Mais  je n’ai pas osé le faire.

Au final, j’ai préféré protéger l’accès à AjaxTerm en configurant le VirtualHost Apache avec un autre login/mot de passe. Cette première authentification en Basic Authentication (sur HTTPS bien sûr) est bien surveillée par Fail2ban, qui bloquera bien uniquement l’IP qui pose problème.

Comme il s’agit d’une utilisation ponctuelle, cette double authentification n’est pas une grosse contrainte pour moi.

2014-10-12

L’image du jour

Parfois certaines images valent mieux que de long discours. Hommage à Denis Ritchie

stevejobthiefMerci à chdorb “chdorb@free-beer.ch” et Deppen Magnet ” deppenmagnet@nerdpol.ch” pour l’image.

2014-10-11

Bloc-Notes : Optimisation de myrepos – mrconfig

Suite à un article où j’expliquais comment gérer ses fichiers de configuration $HOME, avec git, mr et vcsh, j’ai décidé de me pencher plus précisément sur la configuration de myrepos alias mr. En effet maintenir un seul et même fichier pour une trentaine de dépôts cela devenait fastidieux. J’ai donc opté pour une organisation décentralisée, avec un dossier pour stocker les différents fichiers de configuration de mes dépôts, appelait par le “mrconfig”.

~
├── .config
│   └── labo
│       └── config.d
│           ├── emacs.vcsh
│           └── zsh.vcsh
│       
│           
└── .mrconfig

Dans cette configuration, j’ai un fichier par dépôts, que j’active ou désactive à souhait dans le “mrconfig”. Un fichier de dépôt est configuré de cette façon, exemple avec mon dépôt emacs :

[$HOME/.config/vcsh/repo.d/emacs.git]
checkout = 
		vcsh clone git@labo.olivierdelort.net:colmaris/emacs.git emacs
		vcsh emacs remote set-url --add origin git@github.com:colmaris/dotfiles-emacs.git

Le fonctionnement reste le même, je clone depuis mon Gitlab et lorsque je pousse mes modifications elles sont simultanément poussées sur mon Gitlab est sur Github.

Passons maintenant au chef d’orchestre le fichier “mrconfig” qui contrôle tout ce petit monde :

# -*- mode: sh -*-
[DEFAULT]
git_gc = git gc "$@"


include = cat ~/.config/labo/config.d/conky.vcsh
include = cat ~/.config/labo/config.d/terminator.vcsh
include = cat ~/.config/labo/config.d/emacs.vcsh
include = cat ~/.config/labo/config.d/zsh.vcsh

Je renseigne tous les dépôts que j’utilise et il me suffit d’un “#” pour désactiver le dépôt concerné. Et l’inverse pour l’activer. Ce fonctionnement est beaucoup plus souple dans mes habitudes de travail.

 

2014-10-08

BLOC-NOTES : S’amuser avec les collections intelligentes de Firefox OS

Objectif :

Les collections intelligentes sont des groupements d’applications proposées en fonction d’un thème. Les plus connues sont “social” “musique” et “jeux” que l’on trouve par défaut. Mais il est possible d’en installer d’autre et même d’avoir des thèmes personnalisés.

Mise en place :

Un appuie long sur le bureau pour arriver sur menu de Firefox OS 2.0 :

2014-10-08-14-38-38Ensuite on “tape” sur “Ajouter des collections intelligentes”. Apparaît alors une grande liste de thèmes.

2014-10-08-06-57-43 2014-10-08-06-58-00Personnellement j’ai choisi les thèmes : Actualité, Autour de moi, Restaurant.

2014-10-08-14-38-50Iil suffit d’ouvrir une collection pour profiter de ses applications.

2014-10-08-14-45-14Il est même possible de créer ses propres collections en fonction d’un thème particulier.

2014-10-08-07-01-34 2014-10-08-07-01-57Dans l’exemple ci-dessus j’ai demandé les applications en relation avec le thème “cloud”. Par contre rien n’empêche d’ajouter des applications installés sur le téléphone dans chacune des collections.

Conclusion :

Pour utiliser ses collections il faut être connecté à Internet , pas souvent évident lorsque l’on a pas de forfait illimité. En revanche, rien n’est installé sur le téléphone, ce qui évite d’avoir des services non désirés exécutés sur le téléphone, elles sont directement connectées au site internet en responsive design.

2014-10-07

Le script kiddie de la mort qui tue, le retour

Avant toute chose je tenais particulièrement à remercier toute l’équipe sécurité de 1and1 pour leur inactivité et leur formidable esprit de non communication, ça fait plaisir de se sentir épauler par des professionnels.

Ne voyant toujours rien venir de la part de 1and1, je n’attendais pas qu’ils me disent comment résoudre mon problème, n’étant pas leur client cela se comprend, mais seulement un message m’expliquant qu’ils avaient trouvés un truc bizarre et qu’ils travaillaient dessus. J’ai donc pris le taureau par les cornes et installé un IDS. J’aurai pu le faire avant et comme dit le proverbe : “les cordonniers sont toujours les plus mal chaussés”. La flemme, le manque de temps, d’envie et l’expression trop souvent répété “bah un petit serveur somme le mien personne ne s’y intéressera” auront eu raison de me jeter un “Bien fait toi !”. Qu’à cela ne tienne j‘étais décidé à en découdre.

J’ai souhaité installer snort inline, mais le projet a été abandonné et puis en y réfléchissant je n’avais pas forcément besoin de surveiller tout le réseau, tout du moins dans l’immédiat. Après vérification seul mon serveur de courriel était touché. J’ai donc installé ossec un HIDS, qui a la particularité de répondre aux attaques avec un bannissement par iptables par exemple. Merci à Hardware qui m’a parlé de Ossec, et m’a aidé sur les règles.

Je n’ai pas installé la version wheezy trop vieille. Et puis honnêtement l’installation depuis les sources est tellement facile, pourquoi se priver de la dernière version? Pour les télécharger rendez-vous à cette adresse :

http://www.ossec.net/?page_id=19

A l’heure ou j’écris ses lignes la dernière version stable est la 2.8.1.

#wget http://www.ossec.net/files/ossec-hids-2.8.1.tar.gz
#tar zxvf ossec-hids-2.8.1.tar.gz
#cd ossec-hids-2.8
#./install.sh

Il suffit de se laisser porter par l’installer qui est très bien fait. J’ai fait une installation en local, pour le moment, l’installation définitive se fera avec l’arrivée de mon nouveau serveur très prochainement. Avant de démarrer le service j’ai modifié un petit peu la configuration de base. Le fichier se trouve dans /var/ossec/etc/ossec.conf par défaut.

# L'envoi d'un courriel se fera lorsqu'une alerte à partir du niveau 5 sera détectée. Par défaut le niveau est à 7
 <alerts>
    <log_alert_level>1</log_alert_level>
    <email_alert_level>5</email_alert_level>
  </alerts>

#Ajout d'une commande spécifie pour l'attaque me concernant, chaque ip détectée sera bannie pour toujours par iptables.

 <command>
    <name>firewall-drop-always</name>
    <executable>firewall-drop.sh</executable>
    <expect>srcip</expect>
    <timeout_allowed>no</timeout_allowed>
  </command>

#Chaque hôte et ip activant la règle 3332 seront bannis définitivement 
<active-response>
    <command>firewall-drop-always</command>
    <location>local</location>
    <rules_id>3332</rules_id>
  </active-response>

#pour valider on démarre ossec
#service ossec start
Starting OSSEC HIDS v2.8 (by Trend Micro Inc.)...
Started ossec-maild...
Started ossec-execd...
Started ossec-analysisd...
Started ossec-logcollector...
Started ossec-syscheckd...
Started ossec-monitord...
Completed.

Au bout de quelques heures de fonctionnement les premières adresses commencent à apparaître en état DROP dans iptables.

ban_iptables

Oups, je n’ai supprimé l’adresse de 1and1 Germany :)

Cette solution est plutôt radicale, mais elle demeurera jusqu’à ce que les choses se calme du côté des kiddies. Je laisserai donc le mot de la fin à notre cher Raoul Volfoni :

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="540" src="http://www.youtube.com/embed/urX8n2sA97Q?feature=oembed" width="720"></iframe>

2014-10-06

Le Debian Jessie installer en version beta 2

L’annonce a été faite hier par Cyril Brulebois de l’équipe de développement sur la liste de diffusion, il est disponible dans sa version Beta 2. Le principal changement vient du choix de l’environnement de bureau, cette annonce officialise le retour de Gnome comme environnement par défaut. Un changement intervient aussi dans le menu Tasksel, le menu qui permet de choisir les logiciels à installer. Il est désormais possible de choisir directement quel environnement de bureau nous souhaitons. Cette modification ne permet plus de choisir l’environnement de bureau dès le premier menu d’installation, mais il est toujours possible de télécharger les isos spécifiques pour XFCE, LXDE et KDE. Pour finir j’ai noté l’ajout du support préliminaire pour les architectures arm64 et ppc64el. Pour rappel Jessie sera la nouvelle version stable de Debian, elle portera le numéro 8. Son développement sera gelé le 5 novembre 2014. A partir de cette date les versions des logiciels proposés n’évolueront plus et nous aurons donc un aperçu en attendant sa sortie définitive qui sera selon la devise Debian lorsque se sera prêt !

jessie1

Choix des différents environnements

jessie2

Disparitions du choix d’autres environnements que celui par défaut

Je vous laisse retrouver la liste complète de ses changements :

Important changes in this release of the installer
==================================================

 * Gnome is now the default desktop environment on Linux again.
 * A list of desktop environments is displayed in tasksel, making it
   easy to install another desktop environment (or several of them).
   Unfortunately that is currently a bit underdocumented (#764026).
 * Preliminary support for the arm64 and ppc64el architectures has been
   added.


Other changes in this release of the installer
==============================================

 * brltty: Append the configuration inherited from d-i to the end of
   brltty.conf instead of overwriting it (which was thus losing the
   documentation for the user).
 * brltty: Enable accessibility in XFCE, LXDE and MATE sessions too.
 * busybox: Add support for /32 subnets in udhcpc script (#652573).
 * choose-mirror: Strip off any scheme part found at the start of
   mirror/*/hostname (#706191).
 * console-setup: Correct default keymap for South Korea (#756052).
 * console-setup: Use nepali keymap for Nepali and Tharu by default.
 * debian-installer:
    - Fix the PXE boot images built for kfreebsd, hurd (#759686).
    - Add fonts-lohit-guru-udeb to gtk images, fixing rendering for
      Punjabi (#761573).
    - Remove desktop selection from syslinux; now available in
      tasksel.
    - Keep Linux modules.builtin file in the initrd.
    - Fix lib location and search path for syslinux &gt;= 5 (#756275).
 * fontconfig: Add conf.avail directory to the udeb, fixing broken
   Monospace font in graphical installer (#739011).
 * hw-detect: Improve driver injection disk support.
 * hw-detect: Move firmware installation code to pre-pkgsel.d
 * hw-detect: Correct detection of Macs needing to blacklist snd-aoa
   modules (#650588).
 * iso-scan: Do not error out when searching in folders with
   shell-special characters in their name (#640789).
 * lowmem: Update lowmem limits for linux-x86.
 * lowmem: Make the / ramfs fill the whole memory again (#759336).
 * netcfg: Do not kill_dhcp_client after setting the hostname and
   domain, otherwise Linux udhcpc will stop renewing its lease, and on
   other platforms dhclient will de-configure the network interface
   (#757711, #757988).
 * netcfg: Don't copy /etc/network/interfaces to /target if
   netcfg/target_network_config=ifupdown (#709017).
 * netcfg: Fix support for entering an ESSID manually, it was
   previously getting ignored (#757478).
 * preseed: Update auto-install/defaultroot for jessie.
 * preseed: Always disable locale &amp; keyboard question when auto is
   enabled, even if no preseed file was given on boot, in case the dhcp
   server provides it (#759290).
 * rootskel: Update lowmem limit for gtk on linux-x86.
 * rootskel: Use a tmpfs for some directories to avoid running out of
   space in the fixed-size initrd on kfreebsd-* (#757985).
 * rootskel-gtk: Update gtk-set-font to learn a new mapping (Lohit
   Punjabi).


Hardware support changes
========================

 * libdebian-installer: arm64: Detect UEFI based systems as "efi"
   subarch.
 * libdebian-installer: Add ppc64 and ppc64el support.
 * linux:
    - Include preliminary support for arm64 and ppc64el.
    - udeb: Add ccm, ctr to crypto-modules (#761902).
    - [armhf] udeb: Add ehci-platform, ohci-platform and phy-sun4i-usb
      to usb-modules (#761591).
    - udeb: Add rsi_usb to nic-wireless-modules
    - udeb: Add ath6kl_sdio, libertas_cs, libertas_sdio, mwifiex_sdio,
      r8192u_usb, r8723au, rtl8188eu, rtl818x_pci, rtl8723be,
      rtl8821ae, spectrum_cs to nic-wireless-modules.
    - [armel/orion5x] udeb: Include mvmdio in nic-modules udeb.
    - udeb: Add new sound drivers to sound-modules (#756998).


Known bugs in this release
==========================

 * Firmware handling: udev no longer reports missing firmware
   (#725714), and patches for the kernel need polishing before we are
   able to restore support for loading missing firmware.
 * CD-ROM modules are missing on ppc64el, but the netboot flavour is
   working correctly. This will be fixed in the next release.


Feedback for this release
=========================

We need your help to find bugs and further improve the installer, so
please try it. Installer CDs, other media and everything else you will
need are available at our web site[3].


Thanks
======

The Debian Installer team thanks everybody who has contributed to this
release.

2014-10-04

Le script kiddie de la mort qui tue

Non ce n’est pas le titre du dernier film d’horreur sorti, quoi que, mais de la mésaventure qui me touche depuis vendredi 03 octobre 2014. J’étais en train de faire le tour du propriétaire, vérification des sauvegardes quotidiennes, petit passage dans centreon, visite de mes quelques logs. Et là je m’aperçois que mon fichier mail.log avait grossi anormalement depuis deux jours.

Je commence mon investigation, au bout de quelques minutes je m’aperçois qu’un nom de domaine revient très très très fréquemment. Entre les une seconde et une minute.

connect from s15519008.onlinehome-server.com[74.208.164.28]
warning: s15519008.onlinehome-server.com[74.208.164.28]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
lost connection after AUTH from s15519008.onlinehome-server.com[74.208.164.28]
disconnect from s15519008.onlinehome-server.com[74.208.164.28]

De plus ce nom de domaine à l’air de provenir d’un dédié chez un prestataire puisque il est la forme sxxxxxxxxx.onlinehome-server.info, et qu’il change d’adresse toutes les deux tentatives.

Dans un premier temps j’opère un whois sur le domaine et j’obtiens les infos suivantes :

Email 	is associated with ~4,658,945 domains
is associated with ~1,876,696 domains
	
  
Registrant Org 	1&1 Internet Inc. is associated with ~430 other domains 	
  
Dates 	Created on 2003-10-27 - Expires on 2014-10-27 - Updated on 2013-10-27 	
  
IP Address 	212.227.142.1 - 5,070 other sites hosted on this server 	
  
IP Location 	Germany - Baden-wurttemberg - Karlsruhe - 1&1 Internet Ag
ASN 	Germany AS8560 ONEANDONE-AS 1&1 Internet AG,DE (registered Nov 26, 1997)
Domain Status 	Registered And Active Website

Je continue mes recherches sur internet et je tombe sur cet article de janvier 2014. Tout cela me parait louche. J’ai l’habitude de recevoir des tentative d’authentification sur mes serveurs, mais pas de cette façon. Mon instinct me dit de me méfier, car ce n’est jamais le même sous-domaine qui tente de s’authentifier, il en est de même pour l’adresse IP :

Je décide de contacter 1and1 une première fois, d’une pour les prévenir qu’ils ont peut-être une faille quelque part et d’autre pour si réellement ce domaine leur appartient, en même voir si cela ne vient pas de chez moi. Le technicien me confirme bien que ce domaine leur apartient, qu’il est géré par la maison mère en Allemagne pour finir qu’il va me mettre en relation avec un technicien sécurité. J’attends un peu et je tombe sur un gentil monsieur qui ne parle qu’allemand et tente de m’expliquer dans un anglais à l’accent très germanique qu’il va trouver quelque-un qui parle anglais. Malheureusement nous avons été coupés avant. Je rappelle une deuxième fois et là le technicien que j’ai au bout du fil, est français et je lui raconte ma mésaventure. Il m’explique que le ou les serveurs sont connus pour des fait similaire et me demande de leur envoyer mes fichiers log pour qu’ils enquêtent, ce que j’ai fait.

Il est midi et les attaques ne cessent, mais cela ne me bloque pas le serveur pour autant comme par exemple pendant une attaque ddos.

Je décide quand même de faire quelque-chose en commençant par créer une règle de filtrage fail2ban pour l’authentification sasl.

je modifie mon fichier jail.local dans /etc/fail2ban/ et j’y ajoute ses lignes :

[sasl]

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

 Puis je crééla règle dans /etc/fail2ban/filter.d/sasl.conf :

[Definition]

failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: \w

ignoreregex =

 Je relance le daemon pour valider les changements. Au moment ou je créer ce filtrage Fail2ban ne me sert pas à grand chose puisque les hôtes d’attaque sont aléatoires, mais avec le temps il va forcément réutiliser une ip et là il sera banni, au fur et à mesure que son pool d’ip diminuera.

Je décide aussi de bloquer le domaine onliniehome-server.info dans iptable :

iptables -A INPUT -s onlinehome-server.info -j DROP

Au moment où j’écris ses lignes (03/10/2014) les attaques sont sont beaucoup calmées, peut-être une dizaine par heure contre plusieurs dizaines avant. Je n’ai toujours pas de retour de 1and1 et je ne sais pas si j’en aurai, je les relancerai par mail d’ici demain. A mon avis je ne pense pas qu’ils soient méchants, plutôt des jeunes qui s’amusent, il faut bien que jeunesse se fasse mais c’est quand même embêtant ce genre de situation.

L’affaire continue, suite au prochain numéro.

 

2014-10-03

La vidéoconférence par WebRTC est elle sécurisée?

Actuellement, le schéma WebRTC actuellement proposé par moult sites web comme Talky.io, vLine etc… est similaire. C’est le serveur web qui est responsable de la première mise en relation des clients et de leur authentification.

Le premier utilisateur rejoint une « salle » identifiée par une URL et chaque client qui se connecte à cette URL se joint à la « salle » de visioconférence.

Cela pose un problème de sécurité. Qu’est ce qui m’assure que :

  • le serveur web ne va pas s’interposer entre les clients pour enregistrer toutes les conversations? (il s’assurer que l’IP d’échange de données est bien celle de chaque correspondant)
  • qu’un client caché n’est pas aussi présent dans la salle? (il faudrait vérifier et comprendre le code source livré par le site web à chaque exécution)
  • que mon correspondant ou moi-même ne sommes pas l’objet d’un MITM sur un nœud de connexion réseau. Par exemple, un routeur de mon FAI ou de mon réseau local pourrait relayer la vidéo.

Ces problèmes sont présents actuellement dans les services proposés au grand public. Je vous invite à lire cet article : WebRTC Security – an overview & privacy/MiTM concerns (including a MiTM example) pour aller plus loin sur le sujet.

J'aime(0)Ferme-la !(0)

2014-10-02

La livebox et son loopback … « Go fuck ! »

Illustration issue de Degroupnews.com

Illustration issue de Degroupnews.com

Je suis très content de mon FAI (Sosh), qui m’offre de très bons débits (78/16) pour un prix modique et en « paysannie » !
Mais ils ont une livebox  Play comme modem/routeur :(

Elle est lente, moche, pleines de bugs, manque un tas d’options, et cale très mal les meubles.
donc elle est bonne à rien !

Mon plus gros reproche, est l’absence d’option pour gérer le loopback !
Comme vous le savez, je m’auto-héberge, ce qui veut dire que de chez moi, je suis susceptible d’accéder à des ressources via un nom de domaine  qui pointe en local.
la plus part des box opérateurs gèrent ça très bien, sauf bien sur, la livebox !
de l’extérieur sheldon.fr pointe sur mon serveur, de chez moi ça redirige vers … l’interface d’administration de la livebox :/

 

Quelles alternatives s’offrent à moi ?

  • la plus évidente : changer de modem, et prendre un vrai truc de bonhomme ! -> malheureusement il existe encore très peu de modem compatible VDSL2 (je ne parle même pas des routeurs), et encore moins qui sont compatible avec le protocole utilisé par l’agrume (VPC 8.35, G993_2)
  • changer d’opérateur ? -> il n’y a que Orange qui me propose du VDSL
  • modifier le fichier /etc/hosts sur chaque machine -> trop galère: j’ai trop de VMs, PC et pas pratique sur les smartphones & cie
  • bidouiller les nom DNS dans l’interface de la livebox -> solution simple, mais incompatible quand on utilise plusieurs domaines et sous domaines sur une même machine (ce qui est mon cas)
  • changer les DNS ? -> trop simple ça suffit pas
  • Obiwan envoi direct ses requêtes à Chuck Noris

Il en reste une dernière, monter son propre DNS local avec les usines habituelles telles que Bind, Bind9 …
ou alors maître en place Dnsmasq !

dnsmasq http://www.thekelleys.org.uk/dnsmasq/doc.html

Dnsmasq, c’est quoi ?

c’est un petit outil tout mignon, tout léger, qui fait des tas de trucs  et qui est très simple à administrer, pas mal non ?
On peut en faire :

  • un serveur DNS local
  • un cache DNS
  • un serveur DHCP
  • un relai DHCP
  • il supporte le DHCPv4, DHCPv6, le BOOTP et le PXE

On essai ?

J’ai décidé de monter un container pour gérer ce service, et bien évidemment j’utilise encore et toujours … OpenVZ (on va pas se refaire hein !)
mais une fois n’est pas coutume, il y a quelques modifs à faire sur le CT à savoir :

vzctl set CTID --capability setuid:on --save
vzctl set CTID --capability net_admin:on --save
vzctl set CTID --capability net_raw:on --save

Pour le reste des caractéristiques, j’ai mis : 1 core, 256 Mo ram, et 4 Go de disque
et je suis large, une fois ma VM configurée et Dnsmasq installé, elle consomme 9 Mo ram, et 8 taches (ça doit être ma plus petite VM ^^) !

l’installation n’est pas trop compliquée :

apt-get install dnsmasq

la partie configuration se situe dans /etc/dnsmasq.conf
voici un exemple de ma config et ses commentaires.

# utilisation du nom de domaine complet pour les requetes DNS
domain-needed

#simule les requetes reverses en local
bogus-priv

#interface d'écoute
interface=eth0

#mon domaine
domain=sheldon.fr

#la taille du cache en nombres de requetes
cache-size=1000

# Cette directive permet d'ajouter le domaine défini ci-dessous aux noms simples figurant dans /etc/hosts
expand-hosts

#gestion des logs, attention c'est verbeux !
log-facility=/var/log/dnsmasq.log
log-queries


# plage dynamique de 192.168.0.110 à 192.168.0.149 avec un bail de 24h
dhcp-range=192.168.0.110,192.168.0.149,255.255.255.0,24h

#les options se déclare avec type,valeur - ici la valeur 3 est la passerelle de ma livebox
dhcp-option=3,192.168.0.1

# adresse IP fixe pour la machine FF:FF:FF:FF:FF:FF
#dhcp-host=FF:FF:FF:FF:FF:FF,test,192.168.0.15

# Désactiver cette directive uniquement si votre serveur est le serveur DHCP officiel du réseau
dhcp-authoritative


#déclaration pour mon serveur xmpp
address=/xmpp.sheldon.fr/192.168.0.241
srv-host=_xmpp-client._tcp.sheldon.fr,192.168.0.241,5222
srv-host=_xmpp-server._tcp.sheldon.fr,192.168.0.241,5269
txt-record=_xmppconnect.sheldon.fr,"_xmpp-client-xbosh=http://sheldon.fr:5280/http-bind"

 

Le fichier resolv.conf

#mon domaine
domain sheldon.fr
search sheldon.fr

#la déclaration DNS
#en premier il s’interroge lui même afin de vérifier si il a la requête en cache
nameserver 127.0.0.1
#si il ne la connaît pas, il interroge un autre DNS
nameserver 208.67.222.222

 

La déclaration des machines en local, dans /etc/hosts :
mon fichier avec quelques exemples :

fe00::0         ip6-localnet
00::0           ip6-mcastprefix
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters



192.168.0.220   zimbra  zimbra.sheldon.fr
192.168.0.239   munin   munin.sheldon.fr
192.168.0.241   xmpp    xmpp.sheldon.fr
#...

127.0.0.1 localhost
192.168.0.10 ovz-dns.sheldon.fr  ovz-dns

::1             localhost ip6-localhost ip6-loopback

 

n’oubliez pas un /etc/init.d/dnsmasq restart après les modifications !

 

Dnsmasq est très pratique, il permet également la déclaration pour le protocole XMPP :)
Autre limitation de la livebox (décidément …), je ne peux pas modifier les DNS transmis par son propre serveur DHCP, j’ai donc été obligé de le désactiver (mince alors) pour utiliser celui de dnsmasq, afin qu’il renseigne sa propre ip en tant que DNS au client DHCP.
La partie cache, fonctionne également très bien, exemple :

Première requête, elle n’est pas dans le cache, elle est donc transmise vers mon DNS qui fait autorité (temps : 26ms)

dig linux.org

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> linux.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37505
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;linux.org.			IN	A

;; ANSWER SECTION:
linux.org.		3104	IN	A	107.170.40.56

;; Query time: 26 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Oct  2 11:34:54 2014
;; MSG SIZE  rcvd: 43

à la seconde requête, elle est cette fois dans le cache, le traitement est instantané :

dig linux.org

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> linux.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24005
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;linux.org.			IN	A

;; ANSWER SECTION:
linux.org.		3103	IN	A	107.170.40.56

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Oct  2 11:34:55 2014
;; MSG SIZE  rcvd: 43

Vous souhaitez vérifier le bon fonctionnement ?
allons faire un tour dans les logs :

Oct  2 11:34:54 dnsmasq[3027]: query[A] linux.org from 127.0.0.1
Oct  2 11:34:54 dnsmasq[3027]: forwarded linux.org to 208.67.222.222
Oct  2 11:34:54 dnsmasq[3027]: reply linux.org is 107.170.40.56
Oct  2 11:34:55 dnsmasq[3027]: query[A] linux.org from 127.0.0.1
Oct  2 11:34:55 dnsmasq[3027]: cached linux.org is 107.170.40.56
Oct  2 11:40:18 dnsmasq[3027]: query[A] linux.org from 127.0.0.1
Oct  2 11:40:18 dnsmasq[3027]: cached linux.org is 107.170.40.56

On voit donc la première requête est adressé à 208.67.222.222, qui la résous, puis la mets en cache, lors du second appel, c’est le cache de Dnsmasq qui répond.

Autre exemple, lorsque je veux utiliser ma webmail depuis chez moi, avant je tombais sur l’interface de la livebox, maintenant dnsmasq voit l’enregistrement présent dans /etc/hots et corrige ma requête DNS :

Oct  2 11:59:23 dnsmasq[3027]: query[A] zimbra.sheldon.fr from 192.168.0.211
Oct  2 11:59:23 dnsmasq[3027]: /etc/hosts zimbra.sheldon.fr is 192.168.0.220

Conclusion :
c’est simple à mettre en place (à peine 5/10 min), facile à maintenir, très souple (bon faut chercher un peu dans les options) et libre !
que demander de plus ?

Le changement c’est pour bientôt

A travers ce titre racoleur, je dois l’avouer, il s’agit plutôt d’une conjecture sur mon envie de changement concernant ma solution d’auto-hébergement plutôt qu’un sujet politique. Depuis 2011 je suis sur la même plate-forme, plusieurs machines virtuelles hébergées sur proxmox qui lui-même est installé sur un ordinateur de salon classique. Après un premier bilan il y a deux ans j’étais satisfait de cette solution, elle me convenait très bien. Mais le problème c’est que j’aime le changement, la remise en question, la nouveauté et les nouveaux défis.

Mon premier serveur(droite) sous mandrake 10

Mon premier serveur(droite) sous mandrake 10, lors de nos lan

Les gamers

Les Gamers

Les Gamers

Les Gamers

A l’époque j’avais concrétisé pas mal d’année de travail et de recherche en réalisant ce projet qui me tenait à coeur, m’auto-héberger presque en totalité. Ce projet à commencer au début de mes études en informatiques et il ne m’a jamais quitté depuis. Pourquoi confier à d’autres mes courriels, données, création, alors que j’ai la compétence pour le faire ? L’idée ne m’est pas venu un beau matin en me levant. Tout a commencé pendant mon BTS lorsque j’hébergeais pour tous les gamer de ma classe un petit forum et les versions serveurs de nos jeux préférés (counter-strike, quake 3, ennemi territory et bien d’autre), cela nous permettait de nous fragger (comme on dit le jargon gamer) après une dure journée de chauffage de banc. La seule constante avec aujourd’hui c’est que tous mes serveurs tournent sous Linux que j’ai découvert en 1995 avec une Mandrake 5.3. Depuis j’ai amélioré mes compétences, mes connaissances, ma technicité, sur l’administration système, réseau. Par la suite ce fut mon métier et j’ai commencé par héberger :

  • Un petit serveur web pour mon blog
  • Un serveur de courriel
  • Un serveur Dns
  • Un serveur de Base de données

De ce point de départ beaucoup de choses ont évoluées, certains serveurs ont disparu d’autre ont vu le jour suite à des besoins spécifiques (gitlab, owncloud, piwik, …). Aujourd’hui les choses continuent encore d’évoluer, Proxmox me correspond de moins en moins, le matériel vieillit (3 ans de fonctionnement 24/24 7/7), la quantité de données croit exponentiellement chaque année. Pour faire une parenthèse sur Proxmox je ne leur reproche absolument rien en particulier, mais il se tourne de plus en plus vers les entreprises leur cible principale et je les comprends. Proxmox m’a rendu pas mal de services en tant que particulier, mais n’étant pas une entreprise et ne souhaitant pas le devenir, je commence à chercher d’autre solution de virtualisations. Cela n’enlève rien à la qualité du logiciel, bien au contraire je suis sûr qu’il en sera encore meilleur.

Mon matériel aussi à évoluer au fil des ans, au départ il y avait :

Premier Pare-feu, Jetway mini-ITX sous ipcop

Pare-feu,  mini-ITX sous ipcop

first-firewall1

La bête mes à nue

  • Le serveur
  • Un Nas
  • Un pare-feu

Depuis le NAS et le pare-feu ont été virtualisés, mais avec le temps je m’aperçois que tous regroupé n’est pas forcément une bonne chose non plus, il faut trouver le juste milieu. Je repartirai très certainement sur trois appareils comme au départ, d’ailleurs j’ai déjà commencé avec le pare-feu : une Carte Alix avec ipfire.

Maintenant je souhaite passer sur une installation plus silencieuse, moins énergivore et moins encombrante niveau matériel. Toujours basée sur la virtualisation qui est pour moi une technologie d’avenir. Concrètement j’établis un pseudo mon cahier des charges.

Le matériel

Comme expliquer plus haut le cas du pare-feu est réglé, le plus facile. Il ne me reste plus que le futur serveur et le Nas. Tous deux doivent répondre aux mêmes contraintes :

  • Assez puissant pour héberger des hôtes virtuels
  • Disposer de ports SataPeu encombrantSilencieux
  • Générique : matériel grand public pour facilité les réparations en cas de pannes
  • Un prix entre 150€ – 200€ tout compris (Proc, RAM, Alim, Boîtier, sans les DD)
  • Qui consomme le moins possible d’énergie
  • Connectique la plus variée possible, mais au moins une carte réseau au Giga.

J’avoue que je louche de plus en plus sur les cartes de type bay trail, j’ai d’excellent retours de la part de plusieurs amis qui utilisent ses cartes-mères.

Deux modèles se détachent, le premier c’est la gigabyte GA-C1037UN-EU, la seconde c’est la MSI J1800I.

La gigabyte est plus adaptée en utilisation serveur, deux cartes réseau, 3 ports sata, possibilité d’ajouter de la RAM jusqu’à 16 go sur slot standard ce qui me permetra de garder la RAM de mon précédent serveur.

Je verrai plus la MSI en tant que Nas, seulement une carte réseau, des slots mémoires pour portable, Ram maxi 8Go.

En comptant le boîtier, l’alimentation, la Ram pour la MSI, je suis pratiquement dans mon budget.

En sachant que récupère tous Disque durs, certains sont tous neufs, la RAM, tout ce qui est petit câblage (Sata, alim etc …)

Le Logiciel

Comme je l’expliquais plus haut proxmox ne répond plus à mes besoins. Il me faut une solution de virtualisation moins gourmande en ressources que KVM, moins obsolète que OpenVZ (en ce qui concerne sur Debian). Et puis j’ai envi de décourvrir d’autre logiciel de virtualisation. Et plus précisément Docker, on peut parler de conteneur plus que de virtualisation pure.

J’ai donc commencé mes investigations sur Docker et je compte bien en apprendre plus. Du côté des hôtes virtualisés cela ne bougera pas trop, très certainement je basculerai tous mes serveurs web sous nginx, j’en ai marre de gérer la doublette avec apache, qui malgré mes optimisations il devient de plus en plus gourmand.

Rien n’est arrêté, je commence à peine mes réflexions sur mon nouveau projet, s’il le faut la semaine prochaine je partirai sur une autre installation. Mais ce qui est sûr c’est que je vais commencé à travailler sur Docker puis le matériel viendra tout seul.

Cela promet de belles aventures, que je ne manquerai pas de partager ici.

2014-10-01

bloc-notes : Déplacer le dossier data de owncloud

Objectif :

Déplacer le dossier data de owncloud vers un autre disque dur plus grand. Le dossier data contient les données de tous les utilisateurs de ownCloud. Y sont présent :

  • les fichiers
  • les agendas
  • les contacts
  • et autres

Mise en place :

En premier il faut arrêter le serveur web.

service stop apache2 #pour apache
service stop nginx   #pour nginx

 Puis il faut installer le nouveau disque dur, le partitionner, le formater et le monter.

Pour l’installer, spécificité de proxmox :

qm set <Id de la VM> -sata1 /dev/sdb
#cela fonctionne aussi avec un partion simple
qm set <Id de la VM> -sata1 /dev/sdb1

Redémarrage de la VM pour valider l’installation.

Pour le partitionner, j’ai utilisé cfdisk, mais un autre gestionnaire est possible.

Capture d'écran de 2014-09-28 14:33:30Pour le formatage :

mkfs.ext4 /dev/sdb

Pour le monter :

mkdir /mnt/datacloud
mount /dev/sdb1 /mnt/datacloud

Afin que le montage soit permanent il faut éditer le fichier /etc/fstab et rajouter la ligne en fin de fichier :

/dev/sdb1       /mnt/datacloud  ext4        defaults        0       0

A présent les données peuvent être déplacées :

mv /var/www/owncloud/data/ /mnt/datacloud/data

Cela prendra plus ou moins de temps en fonction de la taille du dossier.

Ensuite mise en place des droits, sans cela les données ne seront pas visible depuis l’interface Web. Il faut donner les droits à l’utilisateur qui gère le service web sur le serveur, sous Debian il s’agit de “www-data”.

chown -R www-data:www-data /mnt/datacloud/data/

Modification de la configuration de ownCloud :

#edition du fichier de configuration 
sudo nano /var/www/owncloud/config/config.php

Chercher la ligne “datadirectory” et modifier le champs avec le nouveau chemin.

'datadirectory' => '/mnt/datacloud/data',

Pour terminer, démarrage du serveur web :

service apache2 start
ou
service nginx start

2014-09-30

J’ai rejoint la framasphère

Suite l’article de Cyrille BORNE j’ai eu envie de retenter l’expérience DIASPORA*  version Framasoft. Lors de son annonce j’étais plus qu’enthousiaste à l’idée qu’un réseau social décentralisé, libre voit le jour et se place en concurrent de Facebook. Puis ce fut la désillusion, la réalité à vite reprit son cours et il y a eu les problèmes, une levée de fond fantôme, la mort d’un des développeurs, l’abandon du projet par le reste de l’équipe.

Mais Diaspora* c’est avant tout un logiciel libre car le code source appartient maintenant à sa communauté, il est accessible via Github.  A ceux qui pensent le contraire Diaspora* n’est pas mort pour autant, le réseau continue de vivre avec sa communauté. Un logiciel décentralisé car il est tout à fait possible d’installer son propre pod pour le connecter avec les autres, ainsi les données partagées sur le réseau sont hébergées chez soi. De plus Diaspora* continue toujours de faire parler de lui, très récemment suite à l’apparition d’une communauté importante autour de Firefox OS et aujourd’hui avec la création d’un pod français par Framasoft. C’est ce dernier évènement qui m’a donné envie de retenter l’aventure Diaspora* pour plusieurs raisons :

  1. Framasoft est un des acteurs majeurs du libre francophone, gage de sérieux
  2. Une initiative portée par une association à but non lucratif, cela pourrait convaincre certains de migrer.
  3. Actuellement en pleine remise en question sur mon utilisation des réseaux sociaux framasphère tombe à pic.
  4. L’envie d’ajouter ma petite participation à l’édifice et redonner sa chance à Diaspora*

Je souhaite bonne chance à Framasoft dans cette initiative et je me joins à eux pour la faire vivre avec la publication de mes articles et autres. Pour être un peu plus utopique je souhaite qu’elle change les habitudes du grand public envers les réseaux sociaux privateurs et commerciales, mais ça c’est une autre histoire.

Pour rejoindre la communauté, il suffit de se créer un compte sur https://framasphere.org, pour les puristes de Facebook il y a même de quoi le lier avec votre profil.

Quant à moi vous pourrez m’y retrouver sur Olivier Delort ou olivierd@framasphere.org, ou via les tags que je suis :

 frama1 frama2 frama3

Piwik et le syndrome de la page blanche

Suite à la mise à jour de mon piwik à 2.7.0, celui-ci refusait de fonctionner. En guise de page d’accueil j’avais une belle page blanche. Je procède donc à une investigation comme suit :

Pour commencer j’ai fait une recherche dans mon Error log qui se trouve /var/log/piwik.error.log, et il en ressort se message d’erreur :

[28-Sep-2014 15:57:09] PHP Fatal error: Maximum execution time of 30 seconds exceeded in .../piwik/vendor/tedivm/jshrink/src/JShrink/Minifier.php on line 302

Il semblerait que l’exécution du script php Minifier.php dure plus de 30 seconde, pour y remédier :

  1. Editer le fichier php.ini

sudo nano /etc/php5/apache2/php.ini

 2. Chercher la ligne : max_execution_time

 3. Remplacer le chiffre 30 par une valeur plus élevée (70 par exemple)

 4. Relancer le service apache

sudo service apache2 restart

Malgré cela j’avais toujours cette maudite page blanche, après avoir contacté le support par courriel, un gentil technicien m’a répondu et m’invita à supprimer le contenu du répertoire /tmp.

sudo rm -fr /var/www/piwik/tmp/*

Suite à cette action Piwik est réapparut, il manque néanmoins toutes les statistiques de la journée du dimanche 28 septembre mais c’est toujours mieux que d’avoir perdu trois ans de données.

2014-09-29

Nouvelle fonctionnalité Steam : le lecteur audio

Le 24 septembre dernier Steam a reçu une nouvelle mise à jour, pourquoi n’en parler qu’aujourd’hui ? Etant donné que je viens juste de réaliser cette mise à jour. Parmi les nouveautés un lecteur audio pour écouter les OST de mes jeux préférés. Si comme moi vous possédez la bande son de certains jeux vous pouvez désormais les écouter sans utiliser de logiciel annexe.

Il était tout à fait possible de copier les fichiers audio dans sa bibliothèque pour les écouter. Même si au final cela ne change pas grand-chose, j’apprécie lorsque j’ai lancé un jeu et que j’ai oublié de démarrer ma musique.

La mise en place très simple il n’y a pratiquement rien à faire.

Dans le menu afficher -> informations musicales (Figure 1)

Figure 1

Figure 1

Sur cette fenêtre il est possible d’ajouter l’album à une playlist, je n’ai pas trouvé comment faire des playlist par chansons et pas par album. On peut aussi afficher où se situe l’album sur notre disque dur. Il suffit ensuite de chercher l’album qui nous intéresse et de lancer la lecture. (Figure 2)

Figure 2

Figure 2

Pour finir un mini lecteur apparait. Avec toutes les fonctionnalités de base, lecture en répétition, aléatoire.

Capture d'écran de 2014-09-28 20:19:28

Petite fonctionnalité qui ne paye pas de mine, mais qui me simplifie grandement la vie.

2014-09-28

Journée de la transition de Perpignan

Hier, samedi 27 septembre, c’est tenu la journée nationale de transition citoyenne et Perpignan s’est joint à cet évènement. Bien évidemment j’étais de la partie avec mon association afin de montrer aux plus grands nombres qu’il existe une autre façon d’utiliser les nouvelles technologies, l’informatique à travers les logiciels libres, différentes solutions économiques comme le recyclage.

Nous partagions le stand avec l’association A.R.C qui s’occupe du recyclage informatique et de la revente à prix réduit pour les particuliers.

L’ambiance était super malgré le vent qui s’est levé en fin de matinée, plein d’animations étaient proposées, notamment pour les enfants, atelier cuisine avec des produits locaux, théâtre, poèmes, jeux de bois géants.

Nous avons tous passé une agréable journée, en espérant y participer de nouveau l’année prochaine.

 

IMG_0028 IMG_0030 IMG_0029 IMG_0031 IMG_0032 IMG_0033 IMG_0034 IMG_0035 IMG_0036 IMG_0037 IMG_0038

2014-09-27

Pourquoi Yahoo est contraint de livrer des données personnelles à la NSA

En 2008, Yahoo s’opposait à donner suite aux demande de données sur ses clients par la NSA. Yahoo a récemment publié comment elle s’est finalement pliée à la demande de la NSA.
Ces milliers de pages de documents déclassifiés sont très intéressants.

Premièrement, entre 1978 et 2007, la NSA avait besoin d’émettre un ordre FISA (service de renseignement envers les puissances étrangères) pour accéder à des données personnelles. Ces ordres ne permettaient que d’espionner les citoyens des puissances étrangères (ou agissant pour elles).

Cette limitation provient en partie du 4ème amendement de la constitution des états unis qui protège les citoyens américains d’intrusion dans leur vie privée sans mandat judiciaire et ciblé.

En 2005, Georges Bush est attrapé pour avoir permis à la NSA d’espionner les communications internationales de citoyens américains depuis 2002. Ces écoutes visaient officiellement à traquer les terroristes, mais étaient en tout état de cause contraire à la loi FISA de 1978.

Pour rendre légale ces écoutes, la loi FISA est amendée en 2007 par le Protect America Act. Celui-ci permet dorénavant à la NSA :

  • d’espionner les communications depuis ou vers des citoyens étrangers sans nécessiter d’autorisation
  • supprime la nécessité d’apporter de preuve que le citoyen visé est étranger ou en dehors des états unis.

Cela ouvre ainsi le champ à la surveillance électronique de masse des communications des citoyens non-américains. PRISM commence à voir le jour et la NSA voudrait que les services de communications mondiaux comme Yahoo donnent à la NSA un accès en masse aux données de leurs clients.

Il y a cependant une ambiguïté juridique, lorsque l’on espionne la communication entre un citoyen français et un citoyen américain, on espionne le citoyen américain en piétinant le garde fou du 4ème amendement ! De plus, puisque aucune preuve que le citoyen visé est bien hors US ou non américain n’est due par la NSA pour émettre un ordre d’écoute, cela ouvre la porte à bien des abus.

Ce sont ces points qu’à soulevé Yahoo pour refuser de donner un accès aux données de ses clients à la NSA. Cependant, la FISC, a conclu que ceux-ci n’étaient que des effets de bord minimes conformes à l’esprit de la loi. Yahoo à 250’000 $ de pénalité par jour tant qu’il refusait de se plier à la demande de la NSA.

Vous savez maintenant comment la NSA peut légalement et avec tout le confort lire vos emails (Gmail, Yahoo), écouter vos appels Skype, etc…

J'aime(3)Ferme-la !(0)

2014-09-26

Bloc-notes : Changer le fond d’écran de gdm

Objectif :

Changer l’image de fond sur l’écran de connexion de gnome sous Debian.

Mise en place :

Choisir une image par exemple :

the_tree_by_katenfelix-d3906jv

Image brute

Source : http://jesper-ullbing.deviantart.com/art/the-tree-196523563

J’ai choisi de la modifier pour qu’elle s’adapte à GDM et surtout à la résolution de mon écran sinon l’image ne sera pas entièrement visible.

Image modifier avec la bonne résolution

Image modifier avec la bonne résolution

La suite tien deux lignes de commandes.

sudo mv /usr/share/gnome-shell/theme/noise-texture.png /usr/share/gnome-shell/theme/noise-texture-bak.bak 
sudo cp Images/the_tree_by_flou.png /usr/share/gnome-shell/theme/noise-texture.png

Le thème de base proposé par debian utilise un fichier appelé “noise-texture.png” qui permet d’obtenir le fond gris foncé de base. L’idée est simplement de le remplacer par notre image modifiée.

Une petite fermeture de session plus tard :

Capture d'écran de 2014-09-25 20:34:38Capture d'écran de 2014-09-25 20:34:28Cette opération sera à répéter à chaque changement de fond, ou en cas de mise à jour de gnome-shell comme en ce moment avec la mise à jour vers la 3.14.

2014-09-25

Migration d’un serveur Gitlab

Après onze mois à l’essai j’ai enfin prit le temps de trouver une demeure définitive à mon Gitlab. En effet plus les mois passent, plus il est devenu indispensable dans ma vie de  tous les jours. Il me permet de garder un historique de mes scripts, fichiers de configurations et autres projets sur lesquels je travaille.

Gitlab est une sur-couche à git écrite en ruby qui permet de faire tourner un serveur git à la github chez soi. Beaucoup plus complet que ce propose github (avis très personnel), il est parfait lorsque l’on veut maintenir de petits fichiers de configurations. Il peut être aussi utilisé en complément de Github comme je le fais, ainsi je partage mes projets avec beaucoup plus de monde. Pour plus d’information rendez-vous sur le site officiel www.gitlab.com. Si vous voulez vous lancer dans l’aventure je vous conseille la “comunauty edition”.

 Préparation

Sur l’ancien serveur j’effectue une sauvegarde totale (base de données, dépôts …)

cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production

 

Par défaut celle-ci se trouve dans “/home/git/gitlab/tmp/backups”, c’est un fichier compressé qui ressemble à ça :

[TIMESTAMP]_gitlab_backup.tar #[TIMESTAMP] fait référence au moment de la sauvegarde

 

Je fais une copie de ce fichier pour plus tard, l’idée est de restaurer cette sauvegarde sur le nouveau serveur fraîchement installé. Se nouveau serveur sera installé à la même version que l’ancien, dans mon cas la 6.7.5. Lors de mes tentatives de restauration j’avais fait l’inverse, mais la migration ne s’est pas déroulée correctement.

Pour installer le nouveau serveur j’ai tout simplement suivit la documentation sur le site.

 Migration

Première étape j’importe le fichier [TIMESTAMP]_gitlab_backup.tar dans le dossier /root. A ne pas copier directement dans le dossier /home/git/gitlab/tmp/backups cela changera les droits. Ensuite la migration est très simple :

cd /home/git/gitlab/tmp
#Création du dossier de sauvegarde
mkdir backups
#Copie du fichier de sauvegarde
cp /root/[TIMESTAMP]_gitlab_backup.tar /home/git/gitlab/tmp/backups/[TIMESTAMP]_gitlab_backup.tar
#Attribution des droits à l'utilisateur git
sudo chown -R git:git /home/git/gitlab/tmp/backups/[TIMESTAMP]_gitlab_backup.tar
#Lancement de la restauration
cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production

 

Après quelques secondes la restauration est terminée. Tout y est la base de données, les utilisateurs, les dépôts, toutes les données de l’ancien serveur.

Maintenant tout le travail de configuration reste à faire, afin basculer définitivement sur le nouveau serveur.

Configuration post migration

Gitlab

Dans un premier temps il faut indiquer à gitlab l’url à utiliser pour l’interface web. Deux fichiers sont à modifier, je profite aussi de l’occasion pour activer les connexions ssl de mon futur serveur.

Le premier se trouve dans /home/git/gitlab/config/gitlab.ymlATTENTION avec les fichiers en Yaml les espaces sont très important il faut les respecter scrupuleusement !

## GitLab settings
  gitlab:
    ## Web server settings
    host: url.monserveur.tld
    port: 443
    https: true #activation des connexions ssl

 

Le second se trouve dans /home/git/gitlab-shell/config.yml – ATTENTION avec les fichiers en Yaml les espaces sont très important il faut les respecter scrupuleusement !

# Url to gitlab instance. Used for api calls. Should be ends with slash.
gitlab_url: "https://url.monserveur.tld/"

 

Pour valider les modifications un redémarrage du service gitlab.

service gitlab restart

 

Un peu plus haut j’abordais l’activation du SSL pour l’interface web mais aussi pour toutes les communication avec git. J’ai créé un certificat de classe1 signé chez StartSSL. Par la suite je me suis trouvé dans l’obligation  de le modifier pour l’utiliser avec Nginx. Depuis le site de startSSL j’ai récupéré le certificat, la clef non chiffrée et le certificat intermédiaire. Afin d’utiliser conjointement le certificat et l’intermédiaire dans nginx il faut les combiner.

cat gitlab_ssl.crt sub.class.server.ca.pem > gitlab.combined.crt

 

Nginx

Activation des connexions ssl nginx. D’abords créer une sauvegarde de l’ancien fichier.

mv /etc/nginx/sites-available/gitlab /etc/nginx/sites-available/gitlab_bak

 

Pour récupérer le nouveau fichier :

git clone https://labo.olivierdelort.net/colmaris/gitlab-recipes.git

 

Ce fichier réécrit les requêtes entrantes sur le port 80 vers le port 443, de plus il corrige l’erreur 400 Bad request que j’ai eu lors du premier démarrage.

ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
service nginx restart

 

Hop un nouveau  lien symbolique vers les sites activés, et je relance nginx.

Lors de ma première connexion j’ai retrouvé tous mes utilisateurs, les dépôts, comme si de rien n’était. Je dois encore mettre à jour mon nouveau  serveur et profiter des dernières nouveautés de la 7.3.0 au moment où j’écris ses lignes.

Encore des stars à poil sur Internet

Ce week-end, a été publié encore une flopée de photos et vidéos de stars Hollywood dans des positions des plus embarrassantes si vous voyez ce que je veux dire.

Je suis impressionné que des mecs aient pu récolter des photos si compromettantes sur des personnes si ciblées.
Est ce que le système de données personnelles centralisé (vendu sous le petit nom moins angoissant « cloud ») qui permet entre autres à une poignée d’individus (les patrons des admins) de surveiller les autres (nous) ne se retourne pas finalement en partie contre eux ?

A un moment donné, ce système géant il faut bien le maintenir en fonctionnement, et malgré toute l’automatisation des machines il faut un grand nombres d’informaticiens pour maintenir cela en marche avec les délégations de pouvoir et d’accès qui vont avec.
Quel admin n’a jamais eu accès (je n’ai pas dit « accédé ») aux données confidentielles de ses clients?

Comme je doute qu’il y ait (pour l’instant) un traitement différencié pour les VIPs (et comment choisirait-on les VIPs?), il y a une palanquée de personnes qui ont accès aux photos, à la géolocalisation, aux carnets de contacts, agendas, etc… des système de données personnelles mondiaux. Et ceci quand ils veulent puisque tout est archivé pour l’éternité.

Comme, contrairement à beaucoup de chose, quand on copie les données, on n’empêche pas le système de tourner et on peut faire en sorte que ça ne se voit pas (admin power), il me parait moins étonnant que des admin, à priori quelconques, voient des choses croustillantes et décident de les garder sous le coude (coucou Mr Snowden).

Là où il fallait autrefois des moyens de fou furieux pour espionner une célébrité, il n’est plus besoin que de quelques touches de clavier pour les informaticiens ayant accès aux données en production.
Miam !

J'aime(3)Ferme-la !(1)

2014-09-24

La journée de transition citoyenne à Perpignan

L’association Perpinux sera présente pour démontrer qu’il existe aussi une transition, une alternative à notre utilisation des nouvelles technologies et du multimédia. N’hésitez à venir rencontrez les bénévoles sur notre stand si vous êtes dans le coin pour échanger, apprendre, débattre.

Plus d’infos sur le site internet de Perpinux.

Fail2ban pour sécuriser Tiny Tiny RSS (et module rpaf pour le reverse-proxy)

Fail2ban sait surveiller les authentifications faites par SSH, Basic Authentication d’Apache etc. Il peut bloquer l’IP et avertir l’administrateur au bout de n tentatives infructueuses (y compris par SMS).

Mais il peut aussi surveiller les authentifications applicatives, pour peu que l’application en question génère des logs exploitables.

C’est notamment possible avec Tiny Tiny RSS.

fail2ban+ tt-rss_logo_original_128

Configuration Fail2ban

Je suis parti d’un post sur les forums de tt-rss, qui explique comment configurer cela via les logs de syslog : http://tt-rss.org/forum/viewtopic.php?f=8&t=2817#p18518 (merci à son auteur : JackyOhh)

Ce que je propose ci-dessous n’est qu’une variante de sa solution, qui s’appuie sur les logs standards d’Apache plutôt que syslog.

Dans le fichier config.php de tt-rss, il faut commencer par activer les logs “PHP logging” plutôt que “SQL” :

define('LOG_DESTINATION', '');

La valeur vide indique d’utiliser la sortie log de PHP. Avec la configuration standard d’Apache, c’est redirigé vers le error.log de Apache (par défaut /var/log/apache2/error.log, ou l’emplacement spécifié via la directive ErrorLog).

Il faut ensuite ajouter un filter Fail2ban adapté, en créant un fichier /etc/fail2ban/filter.d/tt-rss-auth.conf :

# Fail2Ban configuration file
#
# Author: Mossroy
# Inspired by http://tt-rss.org/forum/viewtopic.php?f=8&t=2817#p18518
#
# $Revision$
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = apache-common.conf

[Definition]

# Option:  failregex
# Notes.:  regex to match the password failure messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values:  TEXT
#

failregex = ^%(_apache_error_client)s PHP Warning: *Failed login attempt for .* from .*$

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Puis ajouter dans /etc/fail2ban/jail.conf :

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

Et redémarrer fail2ban :

service fail2ban restart

Adaptations pour que cela fonctionne derrière un reverse-proxy

Dans ma configuration, j’ai un serveur1 en frontal qui est un reverse-proxy vers un serveur2 qui fait effectivement tourner tt-rss. Cela pose deux problèmes :

  • Fail2ban est installé sur serveur1 (car c’est là qu’il faudrait bloquer les IP). Mais serveur1 n’a pas directement accès aux logs de serveur2
  • Les logs de tt-rss (sur le serveur2) affichent toujours l’IP de serveur1 (puisque c’est effectivement serveur1 qui l’appelle), au lieu de l’IP de l’utilisateur réel (qui est celle qu’on veut pouvoir bloquer)

D’abord, j’ai configuré un partage NFS pour que serveur1 (et donc fail2ban) puisse voir les logs de serveur2.

Ensuite, il existe un module Apache, mod_rpaf, qui permet de “corriger” la variable REMOTE_ADDR, de sorte que Apache croit que les requêtes viennent directement depuis l’IP de l’utilisateur : https://github.com/gnif/mod_rpaf. Cela consiste à renseigner cette variable avec l’IP qu’il trouve dans l’entête HTTP X-Forwarded-For.

Et ce module est disponible dans les dépôts Debian : https://packages.debian.org/fr/wheezy/libapache2-mod-rpaf

NB : Tout jeu de mot entre le nom de ce module “rpaf” et une histoire drôle avec un chien serait purement fortuite ;-)

apt-get install libapache2-mod-rpaf

Puis il faut le configurer pour mettre l’IP du reverse-proxy dans /etc/apache2/mods-available/rpaf.conf :

RPAFproxy_ips 192.168.0.1

(remplacer le 192.168.0.1 par l’adresse IP du reverse-proxy)

Après avoir redémarré Apache, les logs affichent bien l’adresse IP de l’utilisateur.

A noter que ce module Apache m’a également permis de corriger plusieurs soucis liés à l’utilisation d’un reverse-proxy :

  • Les applications n’ont plus besoin d’être modifiées pour lire l’entête X-Forwarded-For. Elles peuvent directement lire l’IP source comme s’il n’y avait pas de reverse-proxy. C’est cool parce que rares sont les applications qui prennent en compte ce type de configuration
  • C’est plus sécurisé car le module ne fait confiance qu’aux adresses IP listées dans rpaf.conf. Cela évite que quelqu’un se fasse passer pour quelqu’un d’autre en ajoutant simplement une entête X-Forwarded-For

Enregistrement SRV pour XMPP sur les DNS de Gandi

Si vous lisez la documentation sur les enregistrements SRV pour XMPP, vous verrez qu’il est indiqué de mettre quelque chose comme ça dans votre zone DNS :

_xmpp-client._tcp.example.net. 86400 IN SRV 5 0 5222 example.net.
_xmpp-server._tcp.example.net. 86400 IN SRV 5 0 5269 example.net.

Manque de bol, ca ne marche pas si votre DNS est chez Gandi. Il faut mettre plutôt ceci :

_xmpp-client._tcp 86400 IN SRV 5 0 5222 example.net.
_xmpp-server._tcp 86400 IN SRV 5 0 5269 example.net.

Vous pouvez vérifier vos enregistrement SRV avec ce site (Attention, la propagation des modifications de votre DNS peut prendre du temps)

J'aime(1)Ferme-la !(0)

Mise à jour vers Gnome 3.14 sur Debian Sid

Depuis le 20 septembre je reçois des mises à jour depuis experimental sur la nouvelle mouture de de Gnome à savoir la 3.14.

Au moment où j’écris ses lignes la migration n’est pas complète, beaucoup de choses manques notamment les extensions pour générer les thèmes de gnome-shell la fameuse “user-themes“, qui est toujours coincée en 3.12 chez Sid. Du coup au revoir mon joli thème perso, je vais devoir le mettre à jour et l’activer à la main.

Après un rapide tour du propriétaire je remarque une nette rapidité à l’ouverture de session, le petit effet de zoom à l’exécution d’une application dans le menu est agréable. J’ai une réelle impression de vélocité du système dans ma navigation, utilisation, ouvertures de mes applications quotidiennes.

il y a encore quelques petits bugs, comme celui de Nautilus qui ne souhaite pas rester dans ma barre de favoris et quelques réglages effacés (l’affichage non désiré des fichiers cachés).

Beaucoup de paquets n’ont pas encore été mis à jour, mais cela devrait arriver dans les jours à venir. Pour ma part j’attends patiemment de retrouver une interface graphique stable, mais c’est le jeu quand on est sous Sid.

 

2014-09-20

Configurer Tiny Tiny RSS sur Debian Wheezy, et lire ses flux RSS sur Firefox OS

Il existe beaucoup de lecteurs de flux RSS, que ce soit sur ordinateur ou sur mobile.

Mais je voulais pouvoir centraliser la liste de mes flux, et synchroniser les articles lus/non lus, quel que soit l’appareil que j’utilise. Tout ça en auto-hébergement bien sûr. Pour cela, Tiny Tiny RSS (tt-rss) est parfait.

Mais son interface n’est pas bien adaptée sur un smartphone, donc j’utilise l’application FeedMonkey sur Firefox OS, qui sait s’y synchroniser.

tt-rss_logo_original_128 + feedmonkey-icon-128

Tiny Tiny RSS

C’est un excellent lecteur de flux RSS en mode web, que je vous recommande. Il est sous licence libre GPLv3, avec une interface web très bien léchée, et a toutes les fonctionnalités que j’attendais. Plus d’infos sur http://tt-rss.org/redmine/projects/tt-rss/wiki.

Cerise sur le gâteau : il a une option “minimiser l’usage du trafic” à la connexion, qui évite les aller-retours réseaux quand on le garde en arrière-plan (l’actualisation de la page ne se fait que quand on le demande). Pratique quand on utilise une connexion réseau dont il ne faut pas trop abuser.

Tiny Tiny RSS me parait très bien adapté à de l’auto-hébergement. Il a des concurrents plus légers en termes de consommation de ressources, mais qui ont moins de fonctionnalités. Pour mon besoin, c’est un bon compromis.  Il tourne raisonnablement bien sur mon Olinuxino A20, alors qu’il ramait un peu sur une sheevaplug.

Configuration de la mise à jour des articles

La seule difficulté d’installation est la configuration de la mise à jour des articles. La doc officielle http://tt-rss.org/redmine/projects/tt-rss/wiki/UpdatingFeeds dit d’utiliser :

php ./update.php --daemon (single process) or php ./update_daemon2.php (multi-process)

Et elle précise d’éviter de le faire sous le user root (pour des raisons de sécurité, effectivement). Mais elle n’explique pas comment faire ça facilement sous Debian Wheezy.

Heureusement, il se trouve que tt-rss a un package debian. Malheureusement pas pour la version Wheezy, mais pour la version “sid” de debian (c’est-à-dire celle qui est encore loin d’être stable). Plutôt que de réinventer la roue, j’en ai repris les scripts, en les adaptant à un tt-rss installé manuellement dans /var/www, et déjà configuré dans Apache.

En décompressant le fichier tt-rss_1.13+dfsg-1_all.deb (ou la dernière version en date), on peut y récupérer les fichiers /etc/init.d/tt-rss, /etc/default/tt-rss et /etc/logrotate.d/tt-rss

Il faut commencer par copier ces 3 fichiers tel quel dans l’arborescence de notre Debian Wheezy, puis les modifier :

/etc/init.d/tt-rss

Dans /etc/init.d/tt-rss, on ne touche pas au code, mais il faut modifier les valeurs de quelques variables en début de fichier :

Remplacer :

PIDFILE=/var/lib/tt-rss/update_daemon.lock

par :

PIDFILE=/var/www/tt-rss/lock/update_daemon.lock

et remplacer les /usr/share/tt-rss/www par /var/www/tt-rss dans les répertoires du daemon :

Remplacer :

DAEMON="/usr/share/tt-rss/www/update.php"
DAEMON_ARGS="--daemon"

if [ "$FORKING" != "0" ]; then
    DAEMON="/usr/share/tt-rss/www/update_daemon2.php"
    DAEMON_ARGS=""
fi

LOADER=/usr/bin/php
DAEMON_DIR="/usr/share/tt-rss/www"

par :

DAEMON="/var/www/tt-rss/update.php"
DAEMON_ARGS="--daemon"

if [ "$FORKING" != "0" ]; then
    DAEMON="/var/www/tt-rss/update_daemon2.php"
    DAEMON_ARGS=""
fi

LOADER=/usr/bin/php
DAEMON_DIR="/var/www/tt-rss/lock"

 /etc/default/tt-rss

Dans /etc/default/tt-rss, il faut simplement activer le daemon :

DISABLED=0

 /etc/logrotate.d/tt-rss

Rien à modifier dans ce fichier

 

Ensuite on peut installer le service :

update-rc.d tt-rss defaults

Puis le démarrer :

service tt-rss start

Et voilà ! Vous pouvez surveiller les logs dans /var/log/tt-rss.log

Attention à ne pas se faire avoir avec les permissions des répertoires : il faut que tout le répertoire /var/www/tt-rss (et ses sous-répertoires) ait pour owner www-data, de sorte que le contenu puisse être accessible en mis à jour par le daemon. Si nécessaire :

chown -R www-data:www-data /var/www/tt-rss

 

Réduction de la fréquence de mise à jour

Par défaut, je trouve que tt-rss est un peu “agressif” dans sa stratégie de mise à jour. Évidemment, ça permet d’avoir les nouveaux articles au plus vite, mais c’est au détriment d’une consommation de ressources importantes : CPU sur le serveur, réseau entre le serveur et les machines qui hébergent les flux RSS, réseau entre le serveur et le client web.

Personnellement, j’ai donc préféré réduire certaines fréquences de mise à jour.

Hélas, ce ne sont pas des paramètres externalisés dans tt-rss. Donc si vous modifiez comme moi ces valeurs, il faudra le refaire à chaque mise à jour de tt-rss.

Sur le serveur

Par défaut, les flux RSS sont tous interrogés toutes les 2 minutes. On peut choisir un délai différent dans l’IHM de tt-rss, flux par flux. J’ai préféré passer ce délai par défaut à 10 minutes, qui est donc appliqué à tous mes flux automatiquement.

Ca se passe dans le fichier include/rssfuncs.php : passer la valeur DAEMON_SLEEP_INTERVAL de 120 à 600 secondes

define_default('DAEMON_SLEEP_INTERVAL', 600);

Sur le client web

Par défaut, le client web interroge le serveur toutes les minutes (sauf si on activé le mode “minimiser l’usage du trafic” : dans ce cas l’interrogation est déclenchée par l’utilisateur). J’ai préféré passer ce délai à 15 minutes.

C’est dans le fichier js/tt-rss.js :

setTimeout("timeout()", 15*60*1000);

Optimisation des performances en désactivant la détection de la langue

Par défaut, tt-rss essaie sur chaque article de détecter quelle langue est utilisée, pour configurer la césure des mots dans cet article.

Le problème, c’est que cette fonctionnalité consomme beaucoup de CPU : http://tt-rss.org/redmine/issues/779. Quand on a un serveur peu puissant, ça me semble une fonctionnalité dont on peut largement se passer.

Un paramètre a été introduit en version 1.10, qui permet de désactiver la détection de la langue des articles. Dans le fichier config.php :

define('DETECT_ARTICLE_LANGUAGE', false);

 

Lecture des flux sur Firefox OS

ttrss-mobile

J’ai longtemps utilisé le projet ttrss-mobile.  C’est une petite application PHP qui utilise l’API JSON de tt-rss, pour exposer une IHM adaptée aux smartphones.

ttrss-mobile marche très bien, mais je l’ai finalement abandonné pour plusieurs raisons :

  • il ne permet pas la lecture hors-ligne
  • la saisie du login/mdp et les fréquents aller-retours avec le serveur rendent son utilisation un peu lourde au quotidien
  • le projet ne semble plus très actif

FeedMonkey

feedmonkey-icon-128

Cette application existe depuis longtemps sur le MarketPlace de Mozilla, mais il y avait jusqu’à peu des bugs qui la rendaient inutilisable pour moi : https://github.com/jeena/FeedMonkey/issues?q=is%3Aissue+author%3Amossroy

En particulier, j’ai corrigé le bug qui était le plus gênant pour moi, car il bloquait les mises à jour d’articles au bout de 24h : https://github.com/jeena/FeedMonkey/issues/30

Bref, maintenant, ça marche bien.

Ce qu’il faut savoir, c’est que FeedMonkey ne stocke actuellement pas votre mot de passe (uniquement l’URL du serveur et le login). C’est bien pour la sécurité. Par contre, si vous ne voulez pas avoir à re-saisir le mot de passe trop souvent, je vous conseille d’augmenter la durée de vie de la session du serveur, dans le fichier config.php de tt-rss :

Remplacer la durée de 24h :

define('SESSION_COOKIE_LIFETIME', 86400);

Par une durée d’une semaine (par exemple) :

define('SESSION_COOKIE_LIFETIME', 604800);

FeedMonkey est assez minimaliste dans son interface et dans ses fonctionnalités, mais c’est ce qui le rend efficace à mon goût. Il est très rapide et va à l’essentiel.

FeedSpider

feedspider_app_icon

J’ai découvert FeedSpider à travers l’article d’Olivier Delort : http://blog.olivierdelort.net/?p=1418

Il est sur le Marketplace, et il marche très bien aussi.

FeedSpider a bien plus de fonctionnalités que FeedMonkey, en particulier l’accès par catégories, plus d’options, l’ajout de flux RSS etc.

Mais il m’a semblé plus lent (il fait apparemment + d’aller-retours serveurs), et un peu plus lourd à l’utilisation.

Techniquement, il stocke votre mot de passe dans le localStorage (cf https://github.com/OthelloVenturesLtd/FeedSpider2/blob/68f7aafb0d345a99974e4c0a94229473939ef8e3/source/data/credentials.js). Ce n’est pas gravissime mais ça aurait été bien de prévenir l’utilisateur (et de lui laisser le choix). Et puis c’est dommage qu’il soit stocké en clair. A ce propos, stocker des informations cryptées fait partie des améliorations demandées à la plateforme Firefox OS par les développeurs : https://openwebapps.uservoice.com/forums/258478-open-web-apps/suggestions/6190136-encrypted-indexeddb

Bref, pour l’instant je reste sur FeedMonkey, mais ce FeedSpider est très complet fonctionnellement. J’y passerai peut-être un jour.

TE-Reader

te-reader-icon

Je l’ai trouvé par hasard sur le Marketplace. Mais je n’ai pas trouvé le code source, ni la licence. J’ai posé la question : http://www.apps.meissel.com/?p=12#comment-13

En attendant, je n’ai pas testé donc n’ai pas encore d’avis dessus.

2014-09-16

Serveur Tiny Tiny Rss et Firefox OS

En grand lecteur de flux Rss que je suis, il était indispensable que je puisse me connecter sur mon serveur Tiny Tiny Rss. Après quelques cliques sur internet je suis tombé sur l’application qui répond exactement à mes besoins : FeedSpider.

Cette petite application disponible via le market, permet de consulter ses flux rss depuis diverses sources :

  • Tiny Tiny Rss
  • Owncloud News
  • Feedly
  • The Old Reader
  • Inoreader
spider1

Sélection des différents services

La prise en main et la configuration sont très simple, l’interface est très bien pensée et très agréable lors la lecture. Du côté des fonctionnalités, pour moi tout y est, je retrouve la configuration faite dans TTRSS. Une fois le service sélectionné, il suffit de renseigner son login, mot de passe, et l’url du serveur TTRSS.

spider2

Connexion à Tiny Tiny Rss

Sur le premier écran sont visible uniquement les nouveaux articles avec leurs catégories respectives, il est possible de modifier cela dans les paramètres. Très appréciable aussi de pouvoir ajouter un flux à partir du téléphone sur le serveur.

spider3 spider4 spider5

Je n’ai pas encore fait le tour complet du propriétaire, je ne l’utilise seulement depuis un jour, mais pour l’instant j’y trouve mon compte et j’en suis satisfait.

2014-09-15

Maj Proxmox 3.3

Une nouvelle version de Promox en 3.3 vient d’être publiée.

proxmox_the_ultimate

Voici les principaux changements :

mais également :

  • gestion des vlan pour les CTs
  • gestion du htoplug sur les VMs (kvm)
  • nouveaux drivers pour les cartes réseaux (avec gestion « multiqueue »)
  • nouveaux kernels 26.32-136 et 3.10.0-4 (mais toujours pas de support OpenVZ)
  • basé sur Debian Wheezy et 7.6

source : http://pve.proxmox.com/wiki/Roadmap#Proxmox_VE_3.3

 

Pour mettre votre installation à jour, rien de plus simple, utilisez pveupgrade :

pveupgrade 
Starting system upgrade: apt-get dist-upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  libpve-storage-perl pve-cluster pve-firewall pve-manager snmpd srvadmin-omcommon
6 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 6,291 kB of archives.
After this operation, 1,999 kB disk space will be freed.
Do you want to continue [Y/n]?

2014-09-12

Mon nouveau jouet tout feu tout flame !

Moi aussi j’ai succombé à la déferlante Firefox os-Flame que je viens hier soir. Je ne vais pas refaire le détail du packaging qui a déjà été très bien réalisé par mon confrère libriste Dada.

A l’heure actuelle j’ai fait un rapide flashage en 2.0, avec une image pré-compilée, mais dès que possible j’essaierai de compiler un 2.1 histoire d’avoir une version avec les dernières modifications. J’ai aussi rencontré des problèmes avec mon serveur mail chiffré pourtant je n’ai pas de certificat auto-signé, j’utilise celui de Gandi.

Toujours de pas de carddav pour mes contacts hébergés sur ownCloud, mais par contre le calendrier fonctionne très bien tant que je ne souhaite pas le synchroniser en SSL.

Mis à part ses quelques problèmes à approfondir, j’accroche complétement à l’interface, le téléphone en lui-même est très bien. Je ne suis de toute façon pas objectif puisque mon ancien mobile était un vieux Galaxy S qui peinait à faire tourner CyanogenMod 10.

Pour info je n’ai payé que 29 euros de frais de douane et TVA contrairement aux 36 euros annoncés sur le wiki de Mozilla ou les 47 euros payés par d’autre. Je ne manquerai pas de faire d’autres articles en essayant de ne pas reprendre ce qui a déjà été fait, mais toujours en partageant mes expériences bonnes ou mauvaises.

Pour l’instant je suis encore dans l’euphorie de la nouveauté et de la découverte.

2014-09-08

Nouveaux paquets en test pour Proxmox

Je viens de trouver par hasard en faisant les maj d’un cluster Proxmox 3.2 quelques bonnes surprises :)

 

Logo-ProxmoxVE

  •  un nouveau module de gestion du Firewall, paramétrable au niveau du cluster, de l’hôte ou des VMs.
  • une console en HTML5, fini le vieux VNC asthmatique !
  • un nouveau kernel en 3.10, mais toujours pas de support officiel d’OpenVZ (ou alors il faut mettre les mains dans le cambouis sans garantie de succès)
  •  QEMU en 2.1
  • et une mise à jour de Corosync et Fence, rendant la gestion du HA moins hasardeuse !

vous trouverez ces paquets dans le repo de tests, pour cela,
éditez nano /etc/apt/sources.list

et ajoutez y :

# PVE pvetest repository provided by proxmox.com
deb http://download.proxmox.com/debian wheezy pvetest

Pensez à faire un upgrade ;)

pveversion -v
proxmox-ve-2.6.32: 3.2-136 (running kernel: 2.6.32-31-pve)
pve-manager: 3.2-30 (running version: 3.2-30/1d095287)
pve-kernel-2.6.32-32-pve: 2.6.32-136
pve-kernel-2.6.32-30-pve: 2.6.32-130
pve-kernel-2.6.32-29-pve: 2.6.32-126
pve-kernel-2.6.32-31-pve: 2.6.32-132
lvm2: 2.02.98-pve4
clvm: 2.02.98-pve4
corosync-pve: 1.4.7-1
openais-pve: 1.1.4-3
libqb0: 0.11.1-2
redhat-cluster-pve: 3.2.0-2
resource-agents-pve: 3.9.2-4
fence-agents-pve: 4.0.10-1
pve-cluster: 3.0-14
qemu-server: 3.1-34
pve-firmware: 1.1-3
libpve-common-perl: 3.0-19
libpve-access-control: 3.0-15
libpve-storage-perl: 3.0-22
pve-libspice-server1: 0.12.4-3
vncterm: 1.1-8
vzctl: 4.0-1pve6
vzprocps: 2.0.11-2
vzquota: 3.1-2
pve-qemu-kvm: 2.1-5
ksm-control-daemon: 1.1-1
glusterfs-client: 3.5.2-1

Quelques screens :

L’interface Html5 :
Capture d'écran - 08092014 - 16:59:19

Capture d'écran - 08092014 - 17:26:45

La gestion du Firewall :

Capture d'écran - 08092014 - 17:00:33

2014-09-05

Finalement, le raspberry pi en serveur web, c’est pas top

Mon Raspberry PI n’aura pas tenu la charge.

Pourtant, on ne peut pas dire que je lui en ai demandé beaucoup. Juste un lecteur de flux RSS, un serveur CalDAV / CardDAV. Rien d’accessible au grand public, donc pas trop d’accès.

Et pourtant, la carte SD ne doit pas aimer les écritures / lectures que je lui demande. J’ai eu pas mal de fichiers corrompus, un coup dans /usr/share/perl5, un coup dans /etc/apache2.

J’ai donc décidé de ne plus m’en servir pour l’instant. Le Raspberry PI ne me sert juste à mettre un disque dur externe en réseau dans ma maison, mais plus d’accès depuis l’extérieur.

Je suis déçu, je pensais quand même que ça tiendrait un peu mieux que ça. C’est p’tet uniquement la carte qu’il faut changer, mais elle est quasi neuve, en plus ça m’oblige à réinstaller le système. Pas envie de perdre du temps avec ça. Mon expérience hébergement à la maison est donc en pause. Dommage.

J’ai remis un serveur CalDAV / CardDAV chez mon hébergeur, ça fonctionne et je ne gère pas le matos. Il me reste à remettre un lecteur de flux, mais comme je suis en mutualisé, je n’ai pas les cron, pas pratique pour les flux.

J’ai vraiment envie de continuer l’aventure hébergement à la maison, mais pas envie d’investir plus que ça.

(crédit photo benbrown)

2014-09-04

WordPress 4.0

WordPress 4.0 vient de sortir il y a quelques heures.

Voici ses nouveautés :

  •  Une nouvelle galerie des fichiers medias.
    Le look est nouveau mais il y a aussi une nouvelle fonctionnalité sympa : En affichant les détails d’un media, on peut voir la liste des articles qui y font référence.
  • La mise en page de l’éditeur est plus dynamique.
    C’est plus pratique à utiliser quand on écrit de grands articles je trouve.
    J’ai quand même trouvé un bug, les boites flottantes de droite ne scrollent plus quand on arrive en bas de la page donc je ne peux pas accéder à tout leur contenu.
  • L’interface de recherche a été revue.
    Le look est plus moderne, on a le droit à de grosses icones.. whoah. Nan je rigole, je trouve cela futile.
    Par contre, on a accès aux détails du plugin en overlay quand on clique dessus plutot que charger une nouvelle page et ca j’aime bien.
  • Enfin le meilleur pour la fin, l’intégration des médias riches (vidéo, audio, tweet) se fait beaucoup plus facilement. Plus besoin de se prendre la tête avec les balises. On colle l’url dans l’article et WordPress inclut le widget qu’il faut si le site d’origine est dans cette liste
J'aime(5)Ferme-la !(0)

2014-09-03

Encoder des vidéos avec le codec VP9 sur Ubuntu Trusty, en utilisant Libav (et Docker pour le fun)

Comme j’auto-héberge mes vidéos, j’ai besoin de les ré-encoder avant de les mettre en ligne. Ma source est en H.264 1080p, et je veux les réencoder avec des codecs libres, et dans une résolution et un bitrate adaptés à l’auto-hébergement.

Encoder des vidéos en WebM avec les codecs VP8 et Vorbis est assez facile sur Ubuntu, en utilisant libav.

Mais comment faire pour encoder avec les codecs VP9 et Opus, qui promettent un rapport qualité/poids deux fois meilleur ?

vp9-opus

DISCLAIMER : je ne suis pas un spécialiste de l’encodage vidéo. Je me suis contenté des paramètres par défaut de libav. Il est probable qu’on puisse avoir de meilleurs résultats avec un paramétrage + fin de l’encodage (je suis preneur de suggestions). D’autre part, je me suis concentré sur la partie vidéo plutôt que la partie audio (dont je néglige ici la taille et la consommation de CPU)

VP8+Vorbis avec libav

D’abord, quand je dis que c’est facile en VP8+Vorbis, ça n’a pas toujours été vrai : il y avait un bug que j’ai rapporté dans la version de libav de Ubuntu 14.04 (Trusty) qui empêchait la lecture des fichiers dans Firefox : https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/1323822

Heureusement, c’est corrigé depuis mi-juillet 2014, en passant à la version 9.14, au lieu de 9.13.

Sur Ubuntu 12.04 (Precise), pas de soucis, j’ai encodé pendant 2 ans dans ce format.

VP9+Opus avec libav

Pour le VP9, la version 9.x de libav (fournie avec Trusty) ne le prend hélas pas encore en charge. J’ai fait la demande de passer à la version 10 avant la sortie de Trusty, mais c’était déjà trop tard : https://bugs.launchpad.net/ubuntu/+source/libav/+bug/1296378

Le VP9 est bien disponible dans la version suivante d’Ubuntu (Utopic – 14.10) car ils sont passés à la version 10.3 de libav.

Mais ce n’est pas si simple : il manque encore un patch pour que avconv accepte d’utiliser ce codec VP9 (et Opus) dans un conteneur WebM. Et ce patch n’est commité que dans la branche 11.x de libav (qui n’est qu’en beta pour l’instant).

J’ai essayé de backporter le patch en 10.4 : ça compile sans problèmes, et je peux générer du WebM avec le codec VP9.

Mais bref, plutôt que de demander un backport du patch sur Utopic, le plus simple serait que Utopic passe sur libav 11.x (dès qu’il sera sorti). C’est envisagé ici : https://bugs.launchpad.net/ubuntu/+source/libav/+bug/1360026

Et, d’ici là, il “suffit” de compiler libav 11.x (actuellement en beta 1) :

wget https://libav.org/releases/libav-11_beta1.tar.gz
tar xvzf libav-11_beta1.tar.gz
cd libav-11_beta1
sudo apt-get install build-essential libvpx-dev yasm libvorbis-dev libmp3lame-dev pkg-config libopus-dev
./configure --enable-libvpx --enable-libmp3lame --enable-libvorbis --enable-libopus
make -j4

Le point important à retenir pour la compilation est d’installer le package pkg-config : j’ai eu du mal à trouver que c’était ça qui me manquait pour compiler avec le support de l’opus.

Il est probablement possible d’utiliser un PPA pour installer libav 11, mais je ne voulais pas “polluer” ma machine avec : certains logiciels sur ma machine dépendent de libav et pourraient dysfonctionner avec cette version.

Utiliser Docker pour faire les conversions sous Trusty

docker

Allez, j’avoue, j’ai trouvé une excuse bidon pour essayer Docker : compiler libav sur Trusty est + simple que ce que j’explique ci-dessous…

Cela dit, cela pourrait servir plus tard :

  • quand libav sera passé en version 11 dans Utopic (ou version ultérieure), cela évitera de le compiler à la main. Edité le 06/09/2014 : c’est fait
  • et ça peut permettre de profiter des dernières améliorations/corrections des codecs vpx et opus (qui sont a priori dépendants de la version d’Ubuntu)

Mais bref, avec Docker, l’idée ici est de pouvoir utiliser les librairies d’un autre OS sans polluer l’hôte. Au lieu de lancer une machine virtuelle complète, on utilise un conteneur léger (Docker) à la place.

NB : ne pas confondre la notion de conteneur Docker et de conteneur audio/video comme le WebM : ce sont deux choses complètement différentes.

Configuration avec Docker

D’abord installer Docker :

sudo apt-get install docker.io
sudo ln -sf /usr/bin/docker.io /usr/bin/docker

Puis créer le conteneur et se connecter dedans :

sudo docker pull ubuntu:utopic
sudo docker run -i -t ubuntu:utopic /bin/bash

Puis y installer libav (quand il sera en version 11, sinon on peut le compiler avec la procédure ci-dessus) :

sudo apt-get update
sudo apt-get install libav-tools opus-tools

Dans un autre terminal, enregistrer l’état du conteneur, pour pouvoir s’en re-servir par la suite :

sudo docker ps -a
sudo docker commit xxxxxxx utopic-libav11

(en remplaçant xxxxxx par l’id du conteneur que vous venez de lancer, et qui s’est affiché avec la commande “ps” du dessus)

Script de lancement

Se faire un petit script shell “convertir_webm_docker.sh” qui lance la conversion dans le conteneur Docker :

# Nécessite le package realpath
FULLPATH=`realpath "$1"`
# remove all the prefix until "/" character
FILENAME=${FULLPATH##*/}
# remove all the prefix until "." character
FILEEXTENSION=${FILENAME##*.}
# remove a suffix, in our case, the filename, this will return the name of the directory that contains this file
BASEDIRECTORY=${FULLPATH%$FILENAME}
# File name without extension
BASEFILENAME=`echo ${FILENAME%.*}`
sudo docker run -i -t -v "$BASEDIRECTORY":/host utopic-libav11 avconv -y -i "/host/$FILENAME" -vf scale=-1:724 -threads auto -b:v 1000k $2 "/host/$BASEFILENAME-720p-1Mbps.webm"
sudo chown mosssroy:mossroy "$BASEDIRECTORY/$BASEFILENAME-720p-1Mbps.webm"
sleep 2
# Un peu bourrin : ça fonctionne tant qu'on n'utilise pas docker pour autre chose! Il y a probablement une meilleure manière de faire (suggestions bienvenues)
sudo docker stop $(sudo docker ps -a -q --no-trunc)
sudo docker rm $(sudo docker ps -a -q --no-trunc)

Il faut installer le package realpath :

sudo apt-get install realpath

Et lancer la conversion comme suit :

convertir_webm_docker.sh fichier_source parametres_eventuels

Ca démarre en un clin d’œil, et convertit aussi vite qu’en-dehors de Docker (en tous cas, je n’ai pas vu la différence).

Lancement du script par clic-droit dans Nautilus

Pour plus de facilité d’utilisation, j’ai configuré ce script pour qu’il soit accessible en clic-droit depuis Nautilus (le navigateur de fichiers d’Ubuntu) :

Créer un fichier “convertir_en_webm.desktop” dans le répertoire ~/.local/share/applications avec le contenu suivant :

[Desktop Entry]
Categories=
Comment=Convertir en WebM
Comment[fr]=Convertir en WebM
Encoding=UTF-8
Exec=/bin/sh /home/mossroy/convertir_webm_docker.sh %U
GenericName=Convertir en WebM
GenericName[fr]=Convertir en WebM
Icon=
MimeType=video/quicktime;video/mp4;video/mpeg
Name=Convertir en WebM
Name[fr]=Convertir en WebM
Path=/home/mossroy
ServiceTypes=
SwallowExec=
SwallowTitle=
Terminal=true
TerminalOptions=
Type=Application
URL=
Name[fr_FR]=Convertir en WebM

Et ajouter à la fin du fichier ~/.local/share/applications les lignes suivantes pour l’associer aux types MIMEs souhaités :

video/mpeg=convertir_en_webm.desktop;
video/mp4=convertir_en_webm.desktop;
video/quicktime=convertir_en_webm.desktop;

Ensuite, dans Nautilus, un “clic-droit->Ouvrir avec” sur un fichier vidéo d’un de ces types MIME devrait proposer de le convertir. Et le fichier webm devrait apparaitre dans le même répertoire, à la fin de la conversion.

Exemples de vidéos générées

Plutôt que de vous mettre mes vidéos de vacances, je suis parti de la vidéo libre “Tears of Steel”, en 4K H.264 (6.7 Go, bitrate de 73Mbps). J’ai d’abord pris un extrait de 20s avec une scène calme suivie de scènes d’action :

avconv -i tearsofsteel_4k.mov -c:v copy -c:a copy -ss 00:07:40 -t 00:00:20 extrait_tears_of_steel_4k.mov

Je sais, ce n’est pas très juste de partir d’une vidéo déjà compressée pour comparer des résultats de compression. Cela introduit un biais dû à la compression initiale. Pour limiter ce biais, je suis parti d’une vidéo d’excellente qualité (3840×1714 à 73 Mbps), dont je réduis fortement la définition et le bitrate (1622×724 à 1Mbps).

Pourquoi un bitrate de 1Mbps ? C’est l’upload maximum d’une ligne ADSL standard, et ça permet d’avoir des fichiers de taille raisonnable. J’ai trouvé que c’était un bon compromis pour de l’auto-hébergement.

Voici le résultat (les moins bons au début, les meilleurs à la fin). Mettez les vidéos en plein écran pour vous faire une idée.

VP8+Vorbis

./avconv -i extrait_tears_of_steel_4k.mov -c:v libvpx -c:a libvorbis -vf scale=-1:724 -threads auto -b:v 1000k extrait_tears_of_steel_720p_vp8_vorbis_1Mbps.webm

Conversion en 1min 58s, qui génère un fichier de 3.3Mo :

VP8+Vorbis encodé en 2 passes

./avconv -i extrait_tears_of_steel_4k.mov -c:v libvpx -c:a libvorbis -vf scale=-1:724 -threads auto -b:v 1000k -pass 1 -passlogfile logfile_vp8.fpf extrait_tears_of_steel_720p_vp8_vorbis_1Mbps_2passes.webm
./avconv -i extrait_tears_of_steel_4k.mov -c:v libvpx -c:a libvorbis -vf scale=-1:724 -threads auto -b:v 1000k -pass 2 -y -passlogfile logfile_vp8.fpf extrait_tears_of_steel_720p_vp8_vorbis_1Mbps_2passes.webm

Conversion en 1min 58s, qui génère un fichier de 2.7Mo :

VP9+Opus

./avconv -i extrait_tears_of_steel_4k.mov -c:v libvpx-vp9 -c:a libopus -vf scale=-1:724 -threads auto -b:v 1000k extrait_tears_of_steel_720p_vp9_opus_1Mbps.webm

Conversion en 6min 24s, qui génère un fichier de 2.7Mo :

VP9+Opus encodé en 2 passes

./avconv -i extrait_tears_of_steel_4k.mov -c:v libvpx-vp9 -c:a libopus -vf scale=-1:724 -threads auto -b:v 1000k -pass 1 -passlogfile logfile_vp9.fpf extrait_tears_of_steel_720p_vp9_opus_1Mbps_2passes.webm
./avconv -i extrait_tears_of_steel_4k.mov -c:v libvpx-vp9 -c:a libopus -vf scale=-1:724 -threads auto -b:v 1000k -pass 2 -y -passlogfile logfile_vp9.fpf extrait_tears_of_steel_720p_vp9_opus_1Mbps_2passes.webm

Conversion en 6min 52s , qui génère un fichier de 2.8Mo :

La différence de qualité me parait très nette. Le VP9 vaut vraiment le coup par rapport au VP8.

L’encodage en 2 passes améliore encore sensiblement la qualité. Ca donne un résultat vraiment correct pour du 720p sur seulement 1 Mbps.

NB : il me reste un souci avec l’encodage en 2 passes : quand j’utilise des vidéos issues de mon appareil photo, le bitrate que je demande n’est pas respecté : https://bugzilla.libav.org/show_bug.cgi?id=731. Edité le 05/10/2014 : le bug est maintenant identifié. Un workaround consiste à fixer le framerate avec le paramètre “-r”

Performances en encodage/décodage

Premier constat : l’encodage est très consommateur en CPU. 3 fois plus que pour le VP8 dans l’exemple ci-dessus (mais le décodage de la source en 4K biaise ce calcul : avec une source en “seulement” 1080p, c’est plutôt 4 à 5 fois plus long que le VP8).

Ce n’est pas une surprise mais je ne m’attendais pas à une différence si importante. D’autre part, dans la version 11 beta1 de libav, l’encodage n’exploite pas tous les coeurs/processeurs de la machine (pas de multi-thread). Il me semble que c’était le cas dans d’autres versions, donc ça sera peut-être activé dans la version finale. Edité le 05/10/2014 : cela dépend de la version de libvpx, ce n’est pas encore implémenté dans la version actuelle (1.3.0), mais cela semble en cours de développement dans une branche dédiée.

Deuxième constat : le décodage est également + consommateur, mais dans une moindre mesure. Très grossièrement, à bitrate égal, il faut environ 50 % de CPU en plus pour le décodage VP9 :

  • VP9+Opus sous Firefox = 60 à 70 % du CPU d’un coeur d’un Core i5 3450S
  • VP8+Vorbis sous Firefox = 40 à 50 % du CPU
  • VP9+Opus sous Totem = 26 % du CPU (avec piste Opus non reconnue)
  • VP8+Vorbis sous Totem  = 18 % du CPU

Troisième constat : Firefox consomme 2 fois plus de CPU que Totem pour décoder. Idem pour Chromium (mais dans une moindre mesure). J’ai rapporté le problème chez Mozilla. Edité le 05/10/2014 : apparemment cela dépend des plateformes matérielles. Sur d’autres machines, il n’y a pas de différence notable.

Sur mon vieux netbook (Atom N570 double coeur), ces différences se voient : les vidéos en 720p 1Mbps se lisent très bien sous Totem. Sous Firefox (ou Chromium), le VP8 se lit avec quelques saccades, alors que le VP9 se bloque au bout de quelques frames.

Support logiciel en décodage

Le codec VP9 est bien supporté sous Trusty : en décodage par Gstreamer (le backend de Totem), Firefox et Chromium, mais pas encore par VLC (v2.1.4), ni par XBMC/Kodi (v13).

Le codec Opus n’est pas encore très bien supporté, en tous cas dans un conteneur WebM, et dans les versions fournies actuellement avec Trusty :

  • GStreamer ne semble pas le reconnaître du tout dans un conteneur WebM (il le prend pour du “audio/x-unknown”), alors qu’il le reconnaît s’il est seul dans un conteneur Ogg (testé avec le fichier ehren-paper_lights-96.opus). Idem pour VLC (il le prend pour du “undf” dans le WebM). Il est possible que cela vienne d’un bug dans libav lui-même. Cela dit, mkvinfo reconnaît bien la piste Opus, et j’ai le même comportement avec une autre vidéo VP9/Opus.
  • Aucun problème avec Firefox, sur les cas que j’ai testés
  • Un petit piège sur Chromium/Chrome : ils refusent apparemment les largeur/hauteur impairs (ou peut-être qui ne sont pas multiples de 4 ?). Donc il faut parfois changer un peu les dimensions pour tomber sur des valeurs compatibles : c’est pour cette raison que j’ai mis le paramètre “-vf scale=-1:724″ au lieu de “-vf scale=-1:720″ (qui me donnait une largeur impair sur cette vidéo : à adapter pour chaque vidéo)

Mes conclusions personnelles :

  • Le codec VP9 a de l’avenir !
  • Vivement l’accélération matérielle (surtout pour les périphériques mobiles) et/ou des processeurs plus puissants et/ou des optimisations dans l’implémentation (notamment le support du multi-thread)
  • Si votre matériel est suffisamment puissant (pour l’encodage et pour le décodage), et que vous ne diffusez les vidéos que via un navigateur, vous pouvez y aller : Firefox et Chromium/Chrome sont prêts (mais bien sûr pas IE ni Safari, qui boudent et préfèrent les codecs non libres). Côté mobile, c’est supporté par Firefox OS>=1.3 (décodage logiciel donc il faut du matériel puissant), je n’ai pas regardé pour les autres OS : cela prendra probablement un peu de temps pour que cela fonctionne (compatibilité logicielle et matérielle). Edité le 05/10/2014 : apparemment ça fonctionne avec Chrome sur Android (au moins sur les Nexus 4)
  • Si vous voulez que les vidéos soient facilement lisibles sur Trusty (en-dehors du navigateur), mieux vaut garder le codec audio Vorbis pour l’instant. Cela dit, il est probable que ce problème de compatibilité soit corrigé bientôt
  • Si vous restez en VP8, et avec un bitrate de 1 Mbps, le 720p me parait bien trop pixelisé. Il vaut mieux choisir une définition plus faible que le 720p. J’utilise du 480p, voire 360p.

2014-08-26

Lychee, rapide mais gourmand. Et si je me lançais finalement ?

Je souhaite mettre en place un système de partage d’album-photos avec ma famille, mes amis. Tous les dossiers ne sont pas accessibles à ma famille, tous les dossiers ne sont pas accessibles à mes amis.

J’ai un disque dur externe branché sur mon Raspberry PI, avec une arborescence /media/mondisque/2002/mesphotos, /media/mondisque/2003/mesphotos, ainsi de suite.

Je souhaite donc que mon système de partage se base là-dessus et qu’il ne réimporte pas tout dans son propre répertoire.
Je souhaite aussi que le système de partage ne modifie rien du tout dans mes répertoires de photos (genre pas de miniatures, pas de fichiers de config, etc.). Tout doit se faire dans /var/www/monsystèmedepartage.

Lychee semblait parfait pour ça. Rapide à l’affichage (les miniatures sont générées par un plugin, en ligne de commande via un script python). Gestion des albums privés, etc.

MAIS, bah oui, il fallait un mais, il réimporte tout dans son propre répertoire. Inutile donc. Car je vais avoir mes fichiers stockés à deux endroits en même temps. Ma carte SD du Raspberry ne me dit pas merci. Et la doc de Lychee semble confirmer ça. Fort dommage.

Si je devais créer ce genre de script, je n’aurais que ça :

  • cache : la même arbo que mon disque dur avec les miniatures et un fichier de config par répertoire (qui me permettra de dire si l’album est privé ou pas, quelle clé autorise la consultation, etc.)
  • config.ini : où sera stocké entre autre le chemin de mon disque dur avec mes photos
  • import.py : un script qui va chercher dans config.ini le répertoire de mes photos et génère la bonne arbo dans le répertoire cache
  • index.php : pour faire le rendu
  • style.css : pour faire joli

Et c’est tout. C’EST TOUT.

À mon clavier ?

(crédit photo artolog)

2014-08-25

Fichier /usr/share/perl5/Debconf/Encoding.pm d’origine

Ma raspbian était toute cassée, la faute à un fichier /usr/share/perl5/Debconf/Encoding.pm tout pourri (pourquoi ? va comprendre Charles).

Si ça vous arrive, voici le fichier propre (un grand merci à Arnaud) :

#!/usr/bin/perl
# This file was preprocessed, do not edit!

package Debconf::Encoding;

use strict;
use warnings;

our $charmap;
BEGIN {
    no warnings;
    eval q{ use Text::Iconv };
    use warnings;
    if (! $@) {
        $charmap = `locale charmap`;
        chomp $charmap;
    }
    
    no warnings;
    eval q{ use Text::WrapI18N; use Text::CharWidth };
    use warnings;
    if (! $@ &amp;&amp; Text::CharWidth::mblen(" a ") == 1) {
        *wrap = *Text::WrapI18N::wrap;
        *columns = *Text::WrapI18N::columns;
        *width = *Text::CharWidth::mbswidth;
    }
    else {
        require Text::Wrap;
        require Text::Tabs;
        sub _wrap { return Text::Tabs::expand(Text::Wrap::wrap(@_)) }
        *wrap = *_wrap;
        *columns = *Text::Wrap::columns;
        sub _dumbwidth { length shift }
        *width = *_dumbwidth;
    }
}

use base qw(Exporter);
our @EXPORT_OK=qw(wrap $columns width convert $charmap to_Unicode);

my $converter;
my $old_input_charmap;
sub convert {
    my $input_charmap = shift;
    my $string = shift;
    
    return unless defined $charmap;
    
    if (! defined $old_input_charmap ||
    $input_charmap ne $old_input_charmap) {
        $converter = Text::Iconv-&gt;new($input_charmap, $charmap);
        $old_input_charmap = $input_charmap;
    }
    return $converter-&gt;convert($string);
}

my $unicode_conv;
sub to_Unicode {
    my $string = shift;
    my $result;
    
    return $string if utf8::is_utf8($string);
    if (!defined $unicode_conv) {
        $unicode_conv = Text::Iconv-&gt;new($charmap, "UTF-8");
    }
    $result = $unicode_conv-&gt;convert($string);
    utf8::decode($result);
    return $result;
}

1

2014-08-24

Tout cassé ma Raspbian

Ce matin, j’ai voulu installer MySQL sur mon Raspberry PI équipe de Raspbian.

sudo apt-get install php5-mysql

Pour une raison que j’ignore, ça a tout cassé ma distribution.

Dès que je voulais lancer une installation / mise à jour d’un paquet, voici les erreurs que j’ai obtenues :

Des erreurs ont été rencontrées pendant l'exécution : /var/cache/apt/archives/mysql-server-5.5_5.5.38-0+wheezy1_armhf.deb E: Sub-process /usr/bin/dpkg returned an error code (1)

Ou

0 mis à jour, 46 nouvellement installés, 0 à enlever et 1 non mis à jour. 19 partiellement installés ou enlevés. E: Impossible de localiser un fichier du paquet mysql-server-5.5. Cela signifie que vous devrez corriger ce paquet vous-même. E: Impossible d'activer les dépendances de construction

Ou

Les paquets suivants seront mis à jour : mysql-server-5.5 1 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour. 18 partiellement installés ou enlevés. Il est nécessaire de prendre 0 o/1 915 ko dans les archives. Après cette opération, 30,9 Mo d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer [O/n] ? Bareword found where operator expected at /usr/share/perl5/Debconf/Encoding.pm line 15, near "$charmap = <code>locale" (Might be a runaway multi-line `` string starting on line 2) (Missing operator before locale?) debconf: Perl may be unconfigured (Unrecognized character \xE8; marked by ←- HERE after</code>locale c←- HERE near column 23 at /usr/share/perl5/Debconf/Encoding.pm line 15. Compilation failed in require at /usr/share/perl5/Debconf/Template.pm line 17. ... ... ... Des erreurs ont été rencontrées pendant l'exécution : /var/cache/apt/archives/mysql-server-5.5_5.5.38-0+wheezy1_armhf.deb E: Sub-process /usr/bin/dpkg returned an error code (1)

J’ai tout tenté :

sudo apt-get dist-upgrade
sudo apt-get install -f
sudo dpkg --configure php5-common

J’ai tenté de purger mysql-server, de réinstaller, j’ai testé ça, etc.

J’ai regardé le fichier /usr/share/perl5/Debconf/Encoding.pm car il contiendrait des erreurs … et voici ce que j’ai (il semble tout pourri, alors que les autres fichiers .pm du répertoire semblent OK) https://gist.github.com/nicosomb/6b1feac217e289f30b2f

Après, c’est un fichier d’encodage, c’est p’tet normal du coup …

Bref, je ne sais pas du tout quoi faire, impossible d’installer / supprimer quoique ce soit sur ma raspbian. Pratique !

J’ai tout fait en direct sur mon compte Diaspora* avec Bob Maerten : https://diaspora-fr.org/posts/563184

2014-08-22

Le logiciel libre n’est pas nécessairement un gage de liberté pour l’utilisateur

Le titre est un poil provocateur.

L’erreur que l’on fait tous plus ou moins, c’est de considérer le libre comme un gage de liberté. Se le dire, c’est prendre le risque de passer à côté d’un détail important. En effet, on peut se poser la question suivante : « Suis-je bien l’utilisateur qui bénéficie des avantages de la solution libre et/ou open source ? »

Clairement, il est impossible de répondre systématique à cette question par l’affirmative. Il faudrait lister quelques cas de figure :


L’admin

Chez moi, assis derrière ma machine qui tourne avec du libre, avec tout les accès nécessaires pour l’administrer, c’est fort probable. Ce qui me conforte dans cette idée est que je dispose des droits nécessaires pour casser entièrement mon système et qu’à priori, nul autre que moi ne dispose de ces droits. J’ai donc aussi le devoir de tenir mon système en état si je veux l’utiliser au mieux. Attention quand même car dans ce cas, il ne fait pas oublier la possible présence et exploitation (comme dans n’importe quel logiciel) de failles non comblées, soit pour cause de mise à jour non effectuée, soit parce qu’il s’agit d’une faille « zero day ».

Le proche de l’admin

Par contre, chez moi, toujours assis derrière ma machine mais SANS les accès pour son administration, c’est déjà moins certain. Ainsi, si dans mon entourage quelqu’un vient à utiliser ma machine pour ses propres besoins, son usage est limité au cadre que j’ai autorisé. Comme je suis le seul à disposer de mon mot de passe root, une partie de l’environnement n’est pas accessible complètement aux autres utilisateurs (fichiers de configuration, logs, certains programmes déjà installés, l’installation de nouveaux programmes…). Je reste, moi administrateur de la machine, alors le seul vrai utilisateur de la solution. Mon entourage me fait confiance et passe par moi pour l’ensemble des actions qu’il n’est pas autorisé à effectuer.

La connaissance de l’admin

Le raisonnement est identique pour mon serveur. Cette machine n’utilise que des logiciels libres (Debian stable, avec uniquement les dépôts « main ») mais pour la même raison que précédemment, je suis le seul qui bénéficie des bienfaits de l’usage des logiciels installés dessus. L’ami à qui j’ai proposé d’héberger son site web ne profite par exemple pas directement des bienfaits des logiciels qu’il utilise sur ma machine car je reste l’administrateur de cette machine. Il me connaît IRL et me fait confiance.

L’utilisateur des services proposés par l’admin

Sortons de chez moi maintenant. Dans le même esprit que l’exemple précédent, lorsqu’on utilise des services en ligne propulsées par des solutions libres, on est pas directement utilisateur de logiciels libres. On est simplement utilisateur d’un service et ce qui fait tourner ce service n’a pas d’importance. Ce que le fournisseur de service fait de nos données (celles qu’il héberge) peut tout autant être légitime, qu’illégitime. Voilà d’ailleurs pourquoi je n’ai jamais tenté l’aventure du RHIEN. Je trouve cette initiative extrêmement intéressante mais pour autant, je pense que ça implique une très grande confiance de la part des hébergés vis à vis de l’hébergeur. Même animé d’intentions louables, l’hébergeur reste un humain avec des parfois faiblesses, dont la curiosité…

Oui… donc :

Tout ça pour dire que les logiciels libres ne sont que des outils et que des outils peuvent être bien utilisés ou non. Le mot « confiance » figure dans chacun des quatre paragraphes précédents et cela n’est pas innocent de ma part. La confiance accordée dans une solution logicielle devrait donc, de mon point de vue, être la combinaison de deux confiances différentes :

  • Celle envers le logiciel en lui même (merci aux licences libres, qui facilitent l’audit du code source).
  • Celle envers celui par qui on utilise le logiciel (nous même, un proche, une connaissance, un parfait inconnu, une entreprise…).

J’essaye de garder ça dans un coin de ma tête à chaque fois que je pose les mains sur un clavier…

Avec HSTS, forcez vos visiteurs à revenir en HTTPS sur votre site web

HSTS permet à un site web en HTTPS de notifier au navigateur web qu’il doit toujours revenir le voir en HTTPS et non en HTTP.

Concrètement, ça prend la forme d’une entête spéciale envoyée par le serveur lors de la consultation d’une page web en HTTPS. Donc il faut que votre visiteur visite au moins une fois votre site web en HTTPS pour que la règle soit prise en compte.

Pour l’activer sur Apache, rajoutez cette ligne à votre virtualhost SSL :

Header add Strict-Transport-Security: "max-age=15768000; includeSubdomains"

J'aime(2)Ferme-la !(0)

2014-08-18

La config de mon Raspberry PI

Mes premiers tests avec arkOS n’ont pas été concluants. J’ai donc décidé d’installer Raspbian, une Debian pour Raspberry.

Petit tour d’horizon de ce que j’y ai installé …

Pour mes flux RSS, FreshRSS

Projet : https://github.com/marienfressinaud/FreshRSS

Rien d’extraordinaire lors de l’installation, ça se fait tout seul, Marien & Alexandre bossent bien sur ce projet.

Le gros avantage par rapport à mes derniers essais de FreshRSS, c’est que j’ai la possibilité de mettre en place un cron pour mettre à jour les flux (j’utilisais FreshRSS sur un hébergement mutualisé avant).

Niveau application Android, j’ai installé EasyRSS modifiée par Alexandre. Pour configurer FreshRSS pour que l’API fonctionne, y’a Alexandre (encore lui) qui explique ça très bien.

Pour mon agenda et mes contacts, Baikal

Projet : https://github.com/jeromeschneider/Baikal

Pareil, rien d’original là non plus, car c’est je pense ce qui se fait de mieux et de plus simple à installer. Y’a des tutos un peu partout sur internet ( ou ).

J’ai installé CardDAV-Sync et CalDav Sync sur mon téléphone Android pour me connecter sur mon serveur Baikal.

Pour partager des photos, rien de bien intéressant pour l’instant

J’ai testé PhotoShow. Galerie légère, basée sur le système de fichiers (donc sans base de données). Système de partage, avec albums-photos privés / publics. Exactement ce que je voulais.

Par contre, la génération des miniatures prend un temps énorme. J’ai du mettre un set_time_limit(0) pour que le script ne s’arrête pas. Mais même comme ça, c’était inutilisable, le Rasperry tirait la langue.

J’en ai parlé ici avec Cyrille notamment : https://diaspora-fr.org/posts/544083

Sur ses conseils (https://diaspora-fr.org/posts/545831), j’ai testé DropCenter, mais ça ne correspond à ce que je veux. Et pas le temps du tout de contribuer au projet pour l’améliorer.

Aujourd’hui, je n’ai rien pour partager mes photos, Dropbox reste 1.000 fois plus efficace.

Je compte voir aussi si j’ai la possibilité de mettre en place un système automatique (ou presque) pour que les photos prises avec mon téléphone soient envoyées via FTP sur le disque dur (pour le serveur FTP, j’ai installé vsftpd, y’a par exemple un tuto ici).

Pour mettre en place un NAS, un disque de 3To

Histoire de faire de la place sur le disque de 500Go de l’ordi familial, on a acheté un disque de 3To pour archiver photos et vidéos.

J’ai branché ce disque sur le Raspberry, j’ai installé samba (sudo apt-get install samba samba-common-bin) et j’ai créé le fichier /etc/samba/smb.conf (j’ai en fait suivi à la lettre le tuto trouvé ici).

J’ai donc accès sur toutes les machines de la maison à toutes nos photos, nos vidéos et notre musique. Pratique.

Prochaine étape, j’ai voulu accéder depuis ma TV aux fichiers présents sur le disque dur : bien pratique pour pouvoir regarder des films ! J’en parle ici : https://diaspora-fr.org/posts/550363

J’ai installé minidlna, qui me permettra de créer une bibliothèque de fichiers lisibles par notre Freebox Crystal. Ça fonctionne … partiellement. On peut afficher nos photos sur la télé. Mais la musique et les vidéos ne sont pas disponibles. Pour la musique, les dossiers paraissent vides (alors que bien entendu, ils ne le sont pas sur le disque). Pour les vidéos, je peux les lister, mais si j’en sélectionne une pour la visionner, ça ne fonctionne pas. Je continue mes tests.

Bilan

Bilan satisfaisant pour l’instant. Le partage des photos n’est pas primordial, par contre pouvoir regarder les vidéos sur la télé sera intéressant d’ici quelques mois, quand on voudra regarder pas mal de dessins animés avec les loustics. Je vais donc voir ce que je peux faire (peut-être finalement brancher le disque dur sur la Freebox directement et voir si je peux y accéder depuis nos ordinateurs sur le réseau). Si vous avez des idées / des questions, allez-y, c’est encore tout frais.

2014-08-14

Campagne de dons libre association de l'April : derniers jours

L'April a lancé une campagne de dons en faveur de la promotion du logiciel libre en milieu associatif.

Le logiciel libre, porteur d’une idéologie de partage, rejoint les valeurs véhiculées par le monde associatif en général (partage, volontariat, bénévolat, passion, etc.) et par l’éducation populaire en particulier. Paradoxalement, nous constatons régulièrement que les associations sont captives de logiciels et services privateurs de liberté.

Dans le cadre du groupe de travail « Libre Association », l'April a entrepris de « jeter des ponts entre les logiciels libres et le monde associatif » en réalisant un guide répertoriant des méthodes et des outils de travail adaptés aux besoins des associations. Ce guide est prévu pour donner à chaque association les clés de ses libertés informatiques. Il est disponible en version Web et en Version papier (PDF).

L'April a réalisé et diffusé gratuitement à 10 000 exemplaires une première version de ce guide, en 2012, grâce à une subvention de la Fondation Crédit Coopératif. Dans la continuité de ces actions, l'April souhaite financer une nouvelle édition du guide et le distribuer gracieusement auprès des associations.

Il ne reste plus que quelques jours !

2014-08-10

Servir plusieurs noms de domaines en HTTPS en auto-hébergement

Actuellement, mon FAI ne me propose que de l’IP v4.
Donc je n’ai qu’une adresse IP publique, et en plus elle n’est pas fixe.

Malgré cela, il y a des solutions pour s’auto-héberger, y compris avec plusieurs noms de domaines, et avec du cryptage SSL.

La résolution DNS

J’ai acheté mes noms de domaines chez Gandi. Comme chez n’importe quel registrar, il est facile de configurer son DNS pour qu’il pointe vers la bonne adresse IP.

Oui mais comment faire si l’IP n’est pas fixe ?

Il y a des solutions type dyndns.org (dont le service est hélas devenu payant), mais on ne peut pas utiliser son propre nom de domaine : ce n’est forcément qu’un sous-domaine.

Heureusement, ils ont la bonne idée chez Gandi de proposer une API, qui permet (entre autres) de modifier les DNS à distance.

Gandi_logo_black

Et il existe un petit script Python qui permet d’automatiser la mise à jour du DNS quand l’adresse IP change : https://github.com/Chralu/gandyn/ (j’y ai très modestement contribué)

Ca marche plutôt très bien. Je le lance alternativement sur mes 2 noms de domaines via crontab : l’un à 0 minutes, l’autre à 30 minutes de chaque heure :

0 * * * * /root/gandyn/gandyn.py --config /root/gandyn/gandyn_domaine1.conf
30 * * * * /root/gandyn/gandyn.py --config /root/gandyn/gandyn_domaine2.conf

Ce délai est suffisant dans mon cas : mon IP n’est pas fixe mais elle change très peu souvent (autour d’une fois par an). Il faut aussi penser à choisir un TTL (Time To Live) suffisamment court pour vos entrées DNS : j’ai mis 15 minutes mais ces valeurs peuvent se discuter…

Le seul point faible est que la recherche de l’adresse IP s’appuie sur un service externe : http://ifconfig.me/ip . Et il n’est pas extrêmement fiable : j’ai souvent des timeouts.

Configuration SSL/TLS

Sur les 2 noms de domaine, j’utilise du cryptage SSL (ou plutôt TLS) pour certaines communications en HTTPS.

Il y a quelques années, il n’était pas possible d’héberger sur une même adresse IP plusieurs noms de domaines en HTTPS. Logique puisque la négociation du certificat SSL/TLS se fait avant l’envoi effectif de la requête HTTP (pour qu’elle soit elle-même cryptée). Le serveur HTTP, ne connaissant pas l’URL, ne peut donc pas choisir entre les différents certificats.

Mais ouf, il y a maintenant le SNI : https://fr.wikipedia.org/wiki/Server_Name_Indication

Ça permet justement d’indiquer au serveur quel est le nom de domaine auquel on veut accéder AVANT la négociation TLS. Et le serveur est donc capable de choisir le bon certificat.

Il faut bien sûr un serveur compatible ET un client compatible : https://en.wikipedia.org/wiki/Server_Name_Indication#Support . En résumé :

  • Côté serveur, il faut un Apache >=2.2.12 ou Tomcat sur un Java>=1.7
  • Côté client, n’importe quel Firefox >=2.0 ou Chrome>=6 ou IE>=7 (mais uniquement à partir de Vista), et côté mobiles iOS>=4.0 ou Android>=3.0 ou Windows Phone>=7.0 ou Firefox OS>=1.0

Cela parait des critères raisonnables en 2014, mais comment ça se passe si un utilisateur se connecte quand même avec un client non compatible ? Par exemple IE8 sur Windows XP (Oui il en reste encore…) Avec la configuration d’Apache par défaut, le serveur prend le premier des deux certificats, et a donc une chance sur 2 de se tromper. Dans ce cas, le navigateur va râler sur le fait que le certificat ne correspond pas au nom de domaine.

Une solution radicale consiste à activer l’option ci-dessous dans Apache :

SSLStrictSNIVHostCheck On

Cette option se situe (sous Debian ou Ubuntu) dans /etc/apache2/mods-enabled/ssl.conf , et elle est commentée par défaut (c’est-à-dire à Off).

Si cette option est activée, un browser non compatible se verra carrément refuser l’accès. C’est ce que j’ai fait.

Comment générer les certificats SSL ?

Dans mon cas, l’objectif est uniquement de crypter la communication, notamment pour que les mots de passe d’administration ne passent pas en clair.

Première possibilité : un certificat auto-signé

https://wiki.debian.org/Self-Signed_Certificate

Avantage : simple, rapide et gratuit. On peut choisir librement toutes les caractéristiques du certificat, y compris sa date d’expiration ou le fait qu’il soit wildcard

Inconvénient : Il y aura un avertissement affiché par les navigateurs puisque vous n’êtes pas une autorité de certification qu’ils connaissent.

Deuxième possibilité : un certificat gratuit ou pas cher

Il en existe pas mal qui ne sont pas très chers, voire même gratuits.  Mais attention à ce qu’ils soient sérieux.

Gandi offre un certificat SSL la première année, puis ça coûte 12€ HT par an : https://www.gandi.net/ssl

Mais un certificat wildcard coûte beaucoup plus cher : 120€ HT par an, chez Gandi.

Avantage : pas d’avertissement du navigateur

Inconvénient : un wildcard coûte vraiment cher

Troisième possibilité : un certificat (gratuit) généré par CACert

cacert4

CACert est une initiative communautaire pour délivrer gratuitement des certificats SSL. Le principe est de faire une “toile de confiance” : au lieu de payer un organisme qui vérifie notre identité, la vérification est faite par vous et moi, à travers un système d’accréditeurs et de points.

Avantage  : gratuit, participation à la toile de confiance, permet les certificats wildcard

Inconvénient : long à mettre en œuvre si on veut un certificat qui dure + de 6 mois, puisqu’il faut rencontrer physiquement plusieurs accréditeurs. Mais le principal inconvénient reste que le certificat racine de CACert n’est accepté par défaut par aucun des principaux navigateurs du marché. Donc il y aura quand même un avertissement du navigateur chez quasiment tout le monde.

Dans mon cas, le cryptage ne sert pour l’instant qu’à l’administration et à des services non publics. D’autre part, je voulais un certificat wildcard : j’ai finalement opté pour CACert, dont la philosophie me plaît.

Certificats wildcard

Au fait, je parle de wildcard depuis plusieurs paragraphes : c’est quoi un certificat wildcard ?

C’est tout simplement un certificat qu’on peut utiliser pour n’importe quel sous-domaine. Exemple : le certificat *.domaine.fr peut être utilisé pour sousdomaine1.domaine.fr et sousdomaine2.domaine.fr. Il n’y a pas besoin de générer un nouveau certificat quand on rajoute un sous-domaine.

Dans mon cas, j’utilise beaucoup de NameVirtualHost dans Apache, qui se basent justement sur le sous-domaine pour diriger vers un service ou un autre. Donc un wildcard est très adapté.

Seul hic sur lequel je suis tombé : un *.domaine.fr ne couvre par défaut pas le nom “domaine.fr” tout court : il ne couvre que les sous-domaines. C’est d’ailleurs précisé dans la doc de Gandi.

Pour créer un certificat qui couvre aussi domaine.fr, la demande de certificat est un poil plus compliquée, car il faut y ajouter un SubjectAltName qui correspond à “domaine.fr” tout court.

J’ai essayé de m’appuyer sur http://techbrahmana.blogspot.fr/2013/10/creating-wildcard-self-signed.html mais ça n’a pas fonctionné : il semble que CACert ignore le SubjectAltName mis de cette manière.

La solution est venue de chez CACert même, en utilisant un petit script qui génère le fichier CSR nécessaire : http://wiki.cacert.org/VhostTaskForce#Shell_Script

La page d’accueil des sites web est morte

Longtemps, la page d’accueil d’un site web a été le lieu de départ de tout visiteur. Elle guidait le visiteur vers les pages plus profonde du site web. Par cette fonction même le webmaster pouvait choisir de mettre en avant un contenu plutôt qu’un autre.

Mais le RSS et surtout les réseaux sociaux ont profondément changé la manière dont les internautes visitent les sites web aujourd’hui. Ils ne passent plus par la page d’accueil des sites web. Ils reçoivent un flux continu d’informations choisies pour correspondre à leur désir. Quand le contenu de l’information est incomplet (pour des raisons commerciales), un lien direct permet d’aller directement vers la page web du contenu sans passer par la page d’accueil du site web.

C’est le constat qu’en fait aussi le New York Times dans un rapport interne. Voici l’évolution du nombre de visiteurs de sa page d’accueil sur les dernières années :

new york times homepageLes applications mobiles dédiées qui répliquent souvent le site web subissent le même sort. Les internautes ne prennent plus la peine de lancer régulièrement ces applications pour vérifier si un contenu les intéresse.

J'aime(2)Ferme-la !(0)

2014-08-09

Surveillance des logs avec logwatch sur une semaine complète

Logwatch, l’analyseur de log bien pratique et largement utilisé présente toutefois un défaut majeur. Par défaut, il analyse les logs jour par jour uniquement et envoi un rapport chaque matin, cette fréquence d’envoi peut toutefois vite devenir décourageante à lire.

Voyons donc comment configurer logwatch pour qu’il fasse un rapport chaque fin de semaine sur la semaine écoulée.

Commençons simplement en installant logwatch

sudo apt-get install logwatch

Une tâche cron est créée dans /etc/cron.daily/00logwatch
Nous allons tout d’abord déplacer cette tâche cron en weekly

sudo mv /etc/cron.daily/00logwatch /etc/cron.weekly/

Puis la modifier pour configurer directement l’usage de logwatch
Pour cela, nous allons simplement remplacer la ligne
/usr/sbin/logwatch –output mail
par
/usr/sbin/logwatch –detail med –mailto adresse@domain.tld –range "between -7 days and -1 days" –archives

C’est tout, logwatch nous fera à présent un rapport chaque semaine couvrant les 7 derniers jours.

Le niveau de détail de l’analyse peut être choisi entre high, med ou low.

2014-08-06

Fail2ban vous prévient par SMS avec l’API de Free Mobile

Fail2ban est un outil très pratique pour protéger les serveurs de certaines attaques.

Et en plus, il peut vous prévenir par SMS, si vous avez une carte SIM de Free Mobile

fail2ban

Configuration des filters

Je pensais que la configuration par défaut des filters sous Debian fonctionnait à coup sûr : j’avais tort.

Je vous conseille de tester chaque filter (avec fail2ban-regex, ou en simulant une vraie attaque). J’ai dû plusieurs fois modifier les expressions régulières pour qu’elles correspondent aux logs effectivement générées par mon serveur Apache :

failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$

par :

failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch).*$

  • pour le filtre apache-badbots, j’ai remplacé la regex :

failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$

par :

failregex = ^<HOST>.*"(GET|POST).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$

Mais, une fois bien configuré, c’est très efficace. Dès qu’une ligne dans un fichier de log correspond à une regex d’un filter, fail2ban prend les mesures nécessaires : en général blocage de l’IP via iptables, et envoi d’un email pour prévenir les administrateurs.

FreeMobile

Utilisation de l’API de SMS de Free Mobile

Depuis juin 2014, Free Mobile met à disposition de ses clients une API qui permet d’envoyer gratuitement des SMS sur votre téléphone via un appel d’URL.

Ca n’est pas très compliqué de s’en servir avec fail2ban : il suffit de se créer un nouveau fichier de configuration dans le répertoire action.d, et de le référencer dans jail.conf

Voici le fichier d’action sendSMSFreeMobile.conf que je me suis créé :

# Fail2Ban configuration file to send an SMS through Free Mobile API
#
# Author: Mossroy
#
# $Revision$
#

[Definition]

# Option:  actionstart
# Notes.:  command executed once at the start of Fail2Ban.
# Values:  CMD
#
actionstart =

# Option:  actionstop
# Notes.:  command executed once at the end of Fail2Ban
# Values:  CMD
#
actionstop =

# Option:  actioncheck
# Notes.:  command executed once before each actionban command
# Values:  CMD
#
actioncheck =

# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    <ip>  IP address
#          <failures>  number of failures
#          <time>  unix timestamp of the ban time
# Values:  CMD
#
actionban = wget --ca-certificate=/path/to/RapidSSLCABundle.pem -O /dev/null "https://smsapi.free-mobile.fr/sendmsg?user=12345678&pass=abcdefgh&msg=Fail2ban : <ip> has been banned by <name>"

# Option:  actionunban
# Notes.:  command executed when unbanning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    <ip>  IP address
#          <failures>  number of failures
#          <time>  unix timestamp of the ban time
# Values:  CMD
#
actionunban = wget --ca-certificate=/path/to/RapidSSLCABundle.pem -O /dev/null "https://smsapi.free-mobile.fr/sendmsg?user=12345678&pass=abcdefgh&msg=Fail2ban : <ip> has been unbanned"

[Init]

# Defaut name of the chain
#
name = default

(il faut bien sûr renseigner dedans votre user et votre mot de passe)

Et dans jail.conf je l’ai configuré comme action par défaut, en plus du blocage et de l’envoi d’email :

# ban & send an e-mail with whois report and relevant log lines
# to the destemail, and also send an SMS with FreeMobile.
action_mwls = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
               %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
               sendSMSFreeMobile[name=%(__name__)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_mwls)s

Et ça marche !

Par contre, il y a quelques pièges à évite r :

    • Dans le fichier sendSMSFreeMobile.conf, attention à ne pas mettre le caractère % dans la ligne de commande wget, parce que fail2ban les interprète mal et refuse de démarrer. Je suis tombé sur ce cas au départ, parce que j’avais encodé les espaces en %20.
    • Debian et Ubuntu semblent ne pas connaître le certificat racine de l’URL de l’API. J’ai donc dû bypasser le contrôle du certificat avec l’option –no-check-certificate . Je sais : c’est mal. Mais le risque me paraissant faible, je n’ai pas pris la peine d’installer le certificat racine qui pose problème. Pour le faire, les explications sont là : http://thenubbyadmin.com/2014/01/29/solving-wget-error-cannot-verify-site-certificate-unable-to-locally-verify-the-issuers-authority/
    • EDIT du 27/08/2014 : suite aux suggestions de Leryan, j’ai amélioré les choses pour éviter de bypasser le contrôle du certificat. J’ai plutôt demandé à wget d’accepter le certificat de RapidSSL (voir les commentaires ci-dessous). Ce certificat peut être téléchargé ici : https://knowledge.rapidssl.com/library/VERISIGN/INTERNATIONAL_AFFILIATES/RapidSSL/AR1548/RapidSSLCABundle.txt et doit être placé dans le répertoire indiqué dans le fichier sendSMSFreeMobile.conf
    • Le user/password est ici en dur dans le fichier de configuration. Il peut être judicieux d’ajuster les droits d’accès à ce fichier pour que n’importe qui ne puisse pas le lire
    • Je n’ai pas pris la peine de tester le code HTTP retour : si ça ne marche pas tant pis. Donc attention à ne pas vous baser uniquement sur l’envoi de SMS. C’est juste un “nice-to-have” qui ne remplace pas l’envoi d’email. En particulier, l’envoi de SMS peut être bloqué par Free Mobile (code HTTP 402) si les envois sont trop fréquents

2014-07-29

Mysearch 1.4 : cachez votre IP avec le mode relai

MySearch est un programme qui va récupérer les résultats de recherches sur Google, GoogleImage, Wikipedia, Openstreetmap, ou Yacy et les afficher en enlevant tout ce qui utilisé pour vous tracer : cookies personnels, liens personnalisés, javascript traceur, images traceuses, etc…

Par exemple, voici mon instance perso : http://search.jesuislibre.net

Vous allez me dire, ca ressemble à DuckDuckGo, mais sans les bangs. Mais DuckDuckGo n’a pas la pertinence de Google. MySearch, oui.
Et comment être sûr que DuckDuckGo ou Mysearch ne m’espionnent pas aussi? Avec Mysearch, vous avez accès au code source, et surtout vous pouvez l’installer facilement sur votre machine grâce au paquet Debian (nécessite Debian Jessie).
Une fois installé, vous pouvez y accéder par http://localhost:60061

Il restait un problème, si j’installe Mysearch sur ma machine, alors Google aura connaissance de mon IP et pourra toujours lier mes mots clés à mon IP. C’est là qu’intervient le mode relai entre installations Mysearch !

C’est encore en beta/alpha mais l’idée est que votre recherche soit transmise par l’intermédiaire d’une autre installation Mysearch plutôt qu’en direct. Rassurez-vous, cet intermédiaire ne pourra pas connaître les mots clés que vous cherchez ni connaître ou altérer les résultats car le flux est chiffré par SSL de bout en bout.

Pour activer le mode « relai »:
Modifiez le fichier de config /etc/mysearch/mysearch.conf mettez la valeur relay = true
Pour prendre en compte le changement, relancez le service : #service mysearch restart
Le port 60062 est utilisé pour le relai et doit donc être ouvert.

En activant le mode relai :
– Toutes les requêtes que vous lancerez devront passer par un intermédiaire sinon elles échoueront. Pour l’instant, l’intermédiaire est forcé à search.jesuislibre.net. Si les requetes ne marchent plus vérifier que mon serveur est toujours en ligne ;-) Si le service est utilisé, j’organiserai une pool.
– Vous autorisez automatiquement les autres à pouvoir utiliser votre relai pour leurs requêtes. Vous pouvez vérifier si votre relai est utilisé par d’autres en regardant sur la première page. Normalement vous ne devrez pas voir de connexions étant donné que le pooling n’est pas actif pour l’instant.

mysearch

J'aime(7)Ferme-la !(0)

2014-07-27

Mise en place technique de ce blog

Commençons par le sujet technique qui m’a occupé ces derniers temps : la mise en œuvre de ce blog !

Installer un blog, même auto-hébergé, n’est pas compliqué.

Oui, sauf que je me pose quelques contraintes (machines peu puissantes, passage par un reverse-proxy), et que ça entraîne pas mal de complications…

240px-WordPress_logo.svg

Configuration de WordPress à travers un reverse-proxy

Dans mon installation, il y a 2 serveurs : un Apache frontal (serveur1) qui s’occupe entre autres du cryptage SSL (pour la partie administration), et qui est configuré en reverse-proxy pour un second serveur Apache/PHP (serveur2) où est installé le blog (WordPress 3.9.1)

D’abord, je suis tombé sur un premier os : j’avais eu la mauvaise idée de ne pas utiliser le même préfixe d’URL sur les 2 serveurs : http://serveur1/wordpress et http://serveur2/wordpress_mossroy

Ca pose des problèmes, ne serait-ce que pour les cookies, qui sont affectés à un Path donné : quand ils sont générés par serveur2, ils le sont pour le Path qu’il connait, c’est-à-dire /wordpress_mossroy. Mais, côté navigateur, il ne les envoie pas puisqu’on est sur /wordpress. Il y a une parade : utiliser la directive ProxyPassReverseCookiePath d’Apache : https://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypassreversecookiepath

Et ça fonctionne … sauf que, après essais, ça n’empêche pas certains plugins WordPress de s’appuyer quand même sur ce Path.

Au final, j’ai trouvé une solution plus simple : utiliser le même Path sur les 2 serveurs (j’ai finalement mis / tout court). Un NameVirtualHost côté serveur2 me permet de l’installer physiquement où je veux, pas forcément dans /var/www

 

Workaround quand l’URL déclarée dans WordPress ne correspond pas à celle sur laquelle il est accessible

Oui, ça m’est arrivé plusieurs fois pendant mes tests : WordPress demande à ce qu’on lui dise quelle est son URL publique. Et il l’utilise pour construire certains liens. Mais quand cette URL publique ne fonctionne pas, cela arrive à tout bloquer… y compris la page d’admin où on voudrait corriger ça ;-)

Voilà la commande qui m’a sauvée plusieurs fois (requête SQL à lancer sur la base MySQL de WordPress) :

update wp_options set option_value="http://la_bonne_url_publique" where option_name="siteurl";

 

Configurer l’administration en HTTPS

D’abord, pour que WordPress veuille bien fonctionner en HTTPS depuis un reverse-proxy, il faut rajouter dans le wp-config.php :

define('FORCE_SSL_ADMIN', true);
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';

Source : http://codex.wordpress.org/Administration_Over_SSL

Ca modifie bien les liens qui pointent vers les pages d’admin vers leur version https.

Mais il reste un hic, causé à nouveau par l’utilisation du reverse-proxy : si je pointe vers http://serveur1/wp-admin , il me renvoie vers https://serveur2/wp-admin au lieu de https://serveur1/wp-admin

La solution est de rajouter en plus de la réécriture d’URL côté Apache (c’est décrit dans le même lien ci-dessus) :

# Redirection vers la version HTTPS pour l'administration
RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)\ HTTP/ [NC]
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^/?(wp-admin/|wp-login\.php) https://serveur1%{REQUEST_URI}%{QUERY_STRING} [R=301,QSA,L]

Mise en place d’un cache pour accélérer l’affichage des pages

Le blog tourne actuellement sur un serveur ARM à 1GHz (dual-core). Ce n’est pas très puissant, et les pages mettent quelques secondes à s’afficher, même sans montée en charge.

Un appel unitaire vers une page du site met environ 2.5 secondes à répondre. C’est beaucoup trop long.

Temps de réponse sans cache

Mettre en place un cache a du sens dans ce contexte : le contenu ne change pas très souvent : lors de l’ajout/modification d’un article (mais aussi lors de l’ajout d’un commentaire).

Après quelques recherches, j’ai choisi d’utiliser un plugin WordPress adapté à cela : WP Super Cache.

Une fois activé, l’affichage de la même page passe à 200ms environ :

Temps de réponse avec cache

Pour le paramétrage du plugin,  j’ai fait un rapide test de montée en charge avec l’outil Gatling (en suivant http://javamind-fr.blogspot.fr/2013/10/premier-scenario-de-tests-avec-gatling.html)

Avec 10 utilisateurs simultanés :

Paramétrage Temps de réponse moyen d’une page en cache (ms)
mode réécriture + fichiers compressés 480
mode réécriture + fichiers non compressés 602
mode PHP + fichiers compressés 544
mode PHP + fichiers non compressés 623
mode Legacy + fichiers compressés 550
mode Legacy + fichiers non compressés 590

Les préconisations de l’auteur du plugin sont donc justes : j’ai activé le mode réécriture, et la compression des fichiers de cache.

Par ailleurs, je suis à nouveau tombé sur un problème lié à l’utilisation d’un reverse-proxy, et ai dû le contourner avec un lien symbolique dans le répertoire du cache : http://wordpress.org/support/topic/plugin-wp-super-cache-cache-not-refreshed-behind-a-reverse-proxy-workaround.

Et j’ai encore un petit souci de préchargement du cache à cause du fait que ma partie administration est en HTTPS : https://wordpress.org/support/topic/how-to-preload-cache-in-http-version-when-admin-is-in-https.

Premiers essais du Raspberry avec arkOS (avec une Freebox Crystal)

J’ai donc reçu le Raspberry PI que Thomas m’a revendu.

C’est parti pour les tests.

Au branchement, pas de loupiote. En fait, je n’avais pas branché comme il fallait. Ça commence.

C’est parti avec arkOS

Sur la carte SD, il y a déjà arkOS d’installé.
Connexion SSH, root / root
L’interface web se trouve là http://ip_du_rpi:8000 (admin / admin)

Genesis, l’interface d’arkOS est en version 0.5.1. Une nouvelle version est sortie, il faudra faire la mise à jour.

Je change le login par défaut, j’installe les modules suivants :

  • basic website
  • calendar / contacts
  • database sqlite3
  • execute
  • jekyll
  • nodejs
  • php
  • package manager
  • python
  • ruby
  • secure shell
  • wallabag
  • ownCloud

Pas d’informations du temps d’installation des modules, perturbant.
Apparemment, suite à un échange sur twitter, c’est fait sur la 0.6.
Finalement, ça m’a pris 10 minutes.

Mise à jour de 0.5.1 => 0.6

Voici le script de MAJ :

systemctl stop genesis
if [ -L "/usr/bin/python" ]; then rm /usr/bin/python; fi
pacman -Sy genesis
wget https://raw.githubusercontent.com/cznweb/genesis/master/tools/migrate06.py
python2 migrate06.py
systemctl start genesis

Voici le rendu :

:: Synchronizing package databases...
 core is up to date
 extra is up to date
 community is up to date
 arkos is up to date
resolving dependencies...
looking for inter-conflicts...

Packages (4): python2-meld3-1.0.0-1  python2-nginx-0.1.3-1  supervisor-3.0-1
              genesis-0.6.0-1

Total Download Size:    1.55 MiB
Total Installed Size:   8.15 MiB
Net Upgrade Size:       4.99 MiB

:: Proceed with installation? [Y/n]
:: Retrieving packages ...
 python2-meld3-1.0.0...    39.6 KiB  62.3K/s 00:01 [######################] 100%
 supervisor-3.0-1-any     420.0 KiB  59.4K/s 00:07 [######################] 100%
 python2-nginx-0.1.3...     5.7 KiB  96.1K/s 00:00 [######################] 100%
 genesis-0.6.0-1-any     1124.7 KiB  59.2K/s 00:19 [######################] 100%
(4/4) checking keys in keyring                     [######################] 100%
(4/4) checking package integrity                   [######################] 100%
(4/4) loading package files                        [######################] 100%
(4/4) checking for file conflicts                  [######################] 100%
(4/4) checking available disk space                [######################] 100%
(1/4) upgrading python2-nginx                      [######################] 100%
(2/4) installing python2-meld3                     [######################] 100%
(3/4) installing supervisor                        [######################] 100%
(4/4) upgrading genesis                            [######################] 100%
warning: /etc/genesis/genesis.conf installed as /etc/genesis/genesis.conf.pacnew

Quand j’ai voulu redémarrer le système, j’ai eu le warning suivant.

[root@arkos nicosomb]# systemctl start genesis
Warning: Unit file of genesis.service changed on disk, 'systemctl daemon-reload' recommended.
[root@arkos nicosomb]# systemctl daemon-reload
[root@arkos nicosomb]# systemctl start genesis

C’est bon, c’est redémarré.

Configuration de la Freebox V5

Attribution d’une IP fixe au raspberry

Il vous faut l’adresse MAC du Rpi :

cat /sys/class/net/eth0/address

Dans Ma Freebox, Configurer routeur, Baux DHCP permanents, vous spécifiez une IP fixe pour l’adresse MAC de votre RPI. Pensez à bien appuyer sur le gros « + » avant d’enregistrer les paramètres.
Rebootez la Freebox.

Sur l’interface arkOS, lire ça https://bbs.arkos.io/t/set-a-static-ip-address/76/2

IP Publique

Dans l’interface de gestion du routeur Freebox, faites une redirection de port, du port 80 à l’IP fixe que vous venez de définir. Dans mon cas, je précise aussi que le port interne est le port 8000, celui de arkOS.

Nom de domaine

Chez votre hébergeur, pour votre NDD, créez une nouvelle entrée A qui pointe vers votre IP publique.

Installation de wallabag

Dans arkOS, wallabag nécessite mariadb, les 2 étaient déjà installés, mais lors de la 0.5. Donc arkOS continuait de me dire qu’il fallait MariaDB. Étrange. J’ai désinstallé / réinstallé wallabag. C’est OK.
Il faut maintenant mettre en route MariaDB, ça se passe dans Tools > Databases > Status. Ça prend quelques dizaines de secondes … et ça ne se met pas en route. Très bien …

Je me rabats sur la création d’une BDD Sqlite, même si un récent ticket sur wallabag me dit que ça va être compliqué.

Et bam !

« Sorry, an error has occurred.
Genesis encountered an error when trying to perform your last requested operation, and it cannot continue it. »

Stacktrace:
Traceback (most recent call last):
 File "/usr/lib/python2.7/site-packages/genesis/core/application.py", line 166, in dispatcher
 self.start_response)
 File "/usr/lib/python2.7/site-packages/genesis/api/urlhandler.py", line 89, in url_handler
 return handler(req, start_response)
 File "/usr/lib/python2.7/site-packages/genesis/plugins/core/root.py", line 282, in handle_generic
 result = handler.event(event, params, vars = vars)
 File "/usr/lib/python2.7/site-packages/genesis/api/helpers.py", line 115, in event
 return handler(event, *params, **kwparams)
 File "/usr/lib/python2.7/site-packages/genesis/plugins/databases/main.py", line 303, in on_submit
 elif self._rootpwds[dbtype] == False:
 KeyError: 'SQLite3'

Finalement, je retourne dans la création d’un site wallabag, je dis que je veux le créer avec sqlite, ça tourne (« running post install configuration ») et success ! En avant Guingamp.

Maintenant, comment j’accède à mon wallabag ?

Apparemment, je dois créer une nouvelle entrée A dans ma zone DNS de mon NDD (j’ai une pensée à toi, qui ne comprend rien à ça. Sois fort).

Ah non, c’est pas ça non plus. Bon, c’est quand même fort ça … Tout est installé, j’ai créé des applications et impossible de voir facilement comment accéder à celle-ci.

Pendant ce temps, y’a l’image de raspbian qui se télécharge, il reste 20 minutes. Autant dire que les heures d’arkOS semblent comptées.

Le temps de mettre en page ce billet, il ne reste que 3 minutes pour l’image Raspbian.

Je ne dis pas que j’abandonne définitivement arkOS, mais j’ai quand même passé du temps à essayer de comprendre, en vain. Je retesterai prochainement.

Sinon, niveau interface, la 0.6 semble pas mal. C’est déjà un bon point.

Direction la plage maintenant !

2014-07-26

Bloc-Notes : Conky au démarrage de gnome-shell 3.12

Objectif :

Lancer conky à l’ouverture de session de gnome 3.12.

 

Mise en place :

Avec le script suivant, à placer dans /usr/share/gnome/autostart/conky.desktop

#conky.desktop
[Desktop Entry]
Type=Application
Name=Conky
Comment=Start conky script
Exec=conky -d
OnlyShowIn=GNOME;
X-GNOME-Autostart-Phase=Application

 

2014-07-18

[Wiki]Installer et configurer son serveur DNS connecté aux serveurs root avec Unbound

Nous n’avions pas encore parlé DNS sur HomeServer-DIY. Voilà qui est réparé avec un tuto sur la mise en place d’un serveur DNS perso:

Sur un réseau IP chaque machine est joignable par une adresse unique qui est son adresse IP. Elle se présente sous la forme de nombres séparés par des points. Par exemple, 158.88.4.144. Mais les utilisateurs trouvent souvent assez peu pratique de travailler avec ces nombres et préfèrent utiliser un nom de domaine comme homeserver-diy.net. Pour traduire un nom de domaine en adresse IP de façon à ce que la machine cliente s’adresse au bon endroit, elle utilisera le protocole DNS. Pour simplifier, lorsque vous demanderez à votre PC de joindre un nom de domaine, il fera une requête à un serveur DNS qui lui répondra en lui disant à quelle adresse IP correspond à ce domaine. Ce tuto va expliquer comment mettre en place votre propre serveur DNS pour en tirer plusieurs bénéfices.

Pour savoir comment, comme d’habitude, il suffit d’aller sur notre wiki: Installer et configurer son serveur DNS connecté aux serveurs root avec Unbound

2014-07-06

Raspberry Pi : ce que j’ai commandé

Voila, j’ai enfin trouvé ce que je voulais. J’ai investis dans de l’occasion, c’est Thomas qui me revend son matériel quasi neuf qu’il n’a jamais utilisé ou presque.

Au programme :

Je le recevrai dans plusieurs jours, je vais donc pouvoir commencer mes premiers tests et me mettre en place un serveur pour peu de frais.

Bien entendu, si j’ai des choses intéressantes à raconter, j’en parlerai ici.

2014-07-03

Investir dans un Raspberry, quelques interrogations

Finalement, les échanges que j’ai eu dernièrement concernant le fait d’être + libre (sur mon blog, sur diaspora*, IRL, etc.) m’ont fait réfléchir.

Il y a quelques mois (années même, ça passe vite), j’ai cherché à me « libérer » le plus possible des solutions propriétaires que j’utilise : mail, calendrier, réseaux sociaux, logiciels. Tout. J’avais presque réussi, mais ça avait un double coût : avoir un serveur dédié pour que je puisse y faire tout ce que je voulais, et ça me prenait du temps.
J’ai finalement abandonné, principalement pour raisons financières. Aujourd’hui, je n’ai plus qu’un hébergement mutualisé chez web4all. Et je ne veux pas de nouveau payer 10 ou 15 € par mois pour un dédié.

Depuis quelques mois maintenant, il est possible d’investir dans des nano ordinateurs, comme le Raspberry PI (le + connu).
Vous avez chez vous un matériel qui ne coûte quasiment rien (30€ à l’achat et une très faible consommation électrique) qui ne prend pas de place, ne fait pas de bruit et vous permet d’accéder à distance à vos fichiers, d’héberger vos applications, de vous faire un media center à la maison, etc.

Et forcément, ça me tente. Ça me tente car je pourrais notamment y stocker mes photos (au lieu d’utiliser Hubic), je pourrais échanger des fichiers (au lieu d’utiliser Dropbox), je pourrais réutiliser FreshRSS comme lecteur de flux (sur un mutualisé, le fait qu’il n’y ait pas de cron m’embête un peu), etc.
Je pourrais aussi héberger mes mails (comme je l’ai déjà fait par le passé avec un dédié), mais la maintenance me rebute un peu.

Et grâce à cette machine, je pourrais finalement me revenir du bon côté de la force ;-) .

Apparemment, un Raspberry PI en 512 Mo semble un peu léger pour faire tourner un serveur web. Il existe d’autres matériels, comme le cubieboard, le cubox-i (beaucoup plus cher) qui pourraient convenir à tout ça.

Mes conditions :

  • matériel qui ne coûte pas cher (inférieur à 50€)
  • pouvoir se connecter en SSH dessus (pas d’écran à la maison, et pas envie d’en acheter)
  • faire tourner un serveur web (bon, ça, c’est faisable avec tous)
  • installer quelques applis (media center pour la maison, gestion de docs / partage web, lecteur RSS, blog ?) sans que ça ne rame trop (je ne m’attends pas à une bête de guerre de toute façon)

Voila voila, je continue mes recherches, on verra bien si je craque.

Quelques liens :

(photo par epsos)

2014-06-20

Vie privée, internet, … tout ça … pfff

Je pense que je viens de comprendre quelque chose récemment. Une chose qui m’avait échappé jusqu’alors.

J’ai pris conscience il y a quelques années déjà que le respect de la vie privée était un enjeu important, notamment sur internet en général et sur le web en particulier. Ce n’est pas par pur intérêt technique que j’ai décidé d’auto-héberger mes services internet avec un maximum de logiciels libres. Je pense que ça fait partie des moyens susceptibles de renforcer le respect de ma vie privée sur internet.

Ceci dit, l’auto-hébergement ne protège pas des atteinte à la vie privée lorsqu’on surf sur internet. De nombreux sites collectent des infos et tracent de plus en plus finement leurs visiteurs. Ainsi, certains comme Facebook tracent leurs utilisateurs y compris lorsqu’ils ne sont plus sur le site.
Il existe quand même des moyens pour se prémunir au moins partiellement des effets de ces pratiques. On peut citer le « Do Not Track » à activer dans son navigateur (de moins en moins respecté quand même), des modules à ajouter au navigateur (j’utilise adblock et RequestPolicy sous Firefox), ou simplement la suppression des cookies à la fin de la session.

Bon, ok, tout ceci est connu, vu, revu et rabâché.
Je parle parfois des atteintes à la vie privée sur internet à mon entourage. Je constate que ces problématiques sont généralement plutôt comprises quand on les exposent et pourtant, ça s’arrête là. Dans les faits, le retour à la réalité se fait sans le moindre changement.
J’en ai sans doute parlé à plusieurs dizaines de personnes et rien ne bouge. C’est même souvent de pire en pire. Les services ou logiciels peu respectueux des libertés semblent plus séduisant que ce que j’ai à en dire.

J’ai plusieurs hypothèse pour expliquer ça :

  • Les gens ne se sentent pas concernées individuellement.
  • Ils sont devenus fatalistes et pensent qu’on a quoi qu’il arrive déjà perdu.
  • Ils pensent naïvement que puisqu’ils n’ont rien cacher, il n’y a pas de problème pour tout montrer à qui le veut. Ça c’est juste un raisonnement fallacieux.
  • Ils ont pris goût au confort de tout ces services qui leur veulent du bien.

Une nouvelle hypothèse m’est venue récemment :

  • Les gens n’ont pas (ou plus) le moindre respect pour leur propre vie privée.

Je pense que cette hypothèse est la conséquence de toutes les autres réunies et j’ai l’impression que finalement, c’est la bonne :( .
Cela me fait dire que quoi que l’on propose comme solution technique pour protéger la vie privée, cela n’aura qu’un impact limité, voir très limité, puisqu’on ne cible pas le bon problème.
Quand plus de gens auront pris conscience que leur vie privée a une valeur inestimable, ils seront plus demandeurs de solutions techniques pour la protéger.
Mon constat peut sembler fataliste mais je ne désespère pas totalement…

2014-06-13

Chris Burnat un héros méconnu

Chris Burnat est décédé ce mercredi 11 juin 2014 à Rozelle  dans sa patrie d’adoption, l’Australie. Cet homme plus habitué à la célébrité des changelogs, n’aurait pas aimé cette publicité, tant il savait se montrer calme et  modeste, avec un sens de l’humour très développé.Chris Burnat

Au yeux de certains, il aurait pu passer pour un vieil homme de 70 ans, mais pour le Projet SME Server, c’était un Roc, un travailleur acharné, un packageur de RPM, un QA debuggeur, un auteur de documentation et plus simplement un camarade.

Pour moi, il était la preuve que l’age est un poids à traîner mais surtout pas un handicap, il était celui qui savait vous engager dans le projet en demandant simplement de faire le meilleur de vous même, il était celui qui savait guider vos débuts, patiemment.

Des gars comme Chris ont façonné le libre que nous avons, en y passant le plus clair de leur temps, avec cette flamme dans les yeux de ceux qui ont compris que leurs actions les dépassent.

La SME Server 9.0 va sortir très bientôt, et cela n’aurait pas été possible sans lui.

Pour finir je vais laisser Chris s’exprimer :

The End of the Internet
Congratulations! This is the last page.
Thank you for visiting the End of the Internet.
There are no more links.
You must now turn off your computer and go do something productive.
Go read a book, for pete’s sake.

Edit : une vidéo d’hommage a été faite par sa famille : Voir Ici

2014-06-12

Webmasters, arrêtez de faire le boulot de la NSA

Les journaux ont beau jeu de dénoncer l’espionnage des populations par quelques multinationales et Etats.
Pourtant derrière ce discours, les mêmes journaux livrent quotidiennement les données personnelles de leur lecteurs directement aux mains de ces mêmes multinationales du tracking et participent ainsi activement au fichage et profilage qu’ils dénoncent. Petit aperçu de la presse française :

Par exemple, sur Mediapart est bourré d’outils de statistiques, ce qui est bien étrange car il n’a aucune nécessité publicitaire :

  • Google (Analytics, Favicons,  Google+)
  • Facebook
  • Twitter
  • Xiti
  • Chartbeat

Sur Reflets.info, dont on ne peut nier la compétence technique :

  • Google (fonts)
  • WordPress.com Stats
  • Twitter

Sur Liberation.fr :

  • Chartbeat
  • SmartAdserver
  • Google (Google Tag Manager)
  • Xiti
  • Panoplie de sites publicitaires

Sur LeMonde.fr :

  • SmartAdserver
  • Chartbeat
  • Xiti
  • Yandex.ru
  • Panoplie de sites publicitaires

Sur leFigaro.fr :

  • Google (Analytics, Favicon)
  • SmartAdserver
  • Xiti
  • Facebook
  • Twitter
  • Panoplie de sites publicitaires

Sur l’Express :

  • Google (Analytics, API)

Sur le Nouvel Obs :

  • Google (Analytics, API)
  • Chartbeat
  • Twitter
  • Facebook
  • Xiti

Sur Numerama:

  • Google (Analytics, API, Google+, Google Tag Manager)
  • Twitter
  • Facebook
  • Xiti

Sur NextInpact (anciennement PCInpact), en étant logué comme abonné payant (et donc sans publicité):

  • Google (Analytics, fonts)
  • Xiti

Sur Korben :

  • Google (Analytics, Google Tag Manager)
  • Disqus
  • Panoplie de sites publicitaires

Je crois que ce serait bien plus efficace que chacun commence par balayer devant sa porte si on veut avancer vers un internet qui respecte la vie privée. Si vous connaissez des gens travaillant pour ces sites web, n’hésitez pas à leur demander des comptes.

C’est trop facile de faire une pétition qui n’a aucune chance d’aboutir (vous ne voyez pas que même un référendum, le pouvoir politique s’en cale) ou d’apposer une futile bannière « Reset the net » (on dirait du « green-washing ») pendant une journée.

Ce serait néanmoins dommage de terminer cet article sans rendre hommage aux bons élèves : Framablog, Sebsauvage, Standblog, Wikipedia

 

J'aime(20)Ferme-la !(2)

2014-06-07

Bloc-Notes : Paramètres de sécurité Oracle Java sous Debian

Objectif :

Afficher la console locale d’une VM proxmox sans être bloqué par les paramètres de sécurité Java avec un pc sous Openbox. Par défaut Java bloque les connexions sur les sites chiffrés auto-signés.

 

Mise en place :

Dans un terminal :

/usr/lib/jvm/jdk-8-oracle-x64/bin/ControlPanel

Ouverture du panneau de contrôle java :

securite_javaIl suffit ensuite de cliquer sur le bouton Modifier la liste des sites.

site_javaPuis rajouter le site internet auto-signé, dans mon cas l’url de proxmox.

 

2014-06-06

Bloc-Notes : Nginx en reverse proxy d’Apache

Objectif :

Soulager apache pendant les heures d’affluences, soulager ma machine virtuelle en consommation mémoire, permettre au contenu statique d’être téléchargé plus rapidement. Héberger plusieurs serveurs web avec une seule connexion internet et donc un seul port 80 ouvert sur le pare-feu.

nginx_schemas

Schémas de présentation

Installation :

service apache2 stop
apt-get install nginx
service nginx stop

Mise en place :

1.Apache :

Modifier le fichier ports.conf et les fichiers de configurations du ou des hôtes virtuels.

nano /etc/apache2/ports.conf

# renseigner les différent ports d'écoute
Listen 80
Listen 81
Listen 82
Listen 85
Listen 86
# port d'écoute pour les requêtes SSL
<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 8083
    Listen 8084
</IfModule>

<IfModule mod_gnutls.c>
    Listen 8083
    Listen 8084
</IfModule>

 Sur les hôtes virtuels voici la modification à apporter (exemple) :

<VirtualHost *:85> <- ligne à modifier
        ServerAdmin courriel@olivierdelort.net
        ServerName blog.olivierdelort.net


        DocumentRoot /var/www/blog/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/blog>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
ServerSignature Off
</VirtualHost>

Pour que les ip soient correctement journalisées sur le serveur apache, installer :

apt-get install libapache2-mod-rpaf

2.NGINX

Configuration de nginx en mode reverse proxy :

nano /etc/nginx/conf.d/proxy.conf

proxy_redirect          off;
proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffer_size   16k;
proxy_buffers       32   16k;
proxy_busy_buffers_size 64k;

Configuration globale de nginx :

user www-data;
worker_processes 2;
pid /var/run/nginx.pid;

events {
	worker_connections 1024;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	server_tokens off;

	server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";
   	gzip_min_length	0;
	gzip_vary on;
	gzip_proxied any;
	gzip_comp_level 5;
	gzip_buffers 16 8k;
	gzip_http_version 1.1;
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# nginx-naxsi config
	##
	# Uncomment it if you installed nginx-naxsi
	##

	#include /etc/nginx/naxsi_core.rules;

	##
	# nginx-passenger config
	##
	# Uncomment it if you installed nginx-passenger
	##
	
	#passenger_root /usr;
	#passenger_ruby /usr/bin/ruby;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

 

Création d’un hôte virtuel pour les différentes redirections

nano /etc/nginx/sites-enabled/reverse

#exemple de redirection depuis le port 80 vers le port 85 d'apache
server {
        listen   80;
        server_name blog.olivierdelort.net;
        access_log  /var/log/olivier.access.log;
        error_log  /var/log/olivier.nginx_error.log debug;
        location / {
                proxy_pass         http://127.0.0.1:85/;
        }
}

#Ici les images du blog sont chargé directement par nginx qui est plus performant qu'apache sur ce genre de contenu
server {
        listen   80;
        server_name  olivierdelort.net;
        location = /50x.html {
        root /var/www/nginx-default;
        }
        access_log /var/log/pictures.nginx.access.log;
        error_log /var/log/pictures.nginx.error.log;
        index index.html;
        location / {
        expires     max;
        root  /var/www/blog/wp-content/uploads/;
        }

 

Pour finir on démarre les services :

service apache2 start
service nginx start

2014-06-05

Création d’un nas maison avec proxmox – Partie 2 Le partage de fichiers

Voici la deuxième partie sur la création d’un nas à partir d’une machine virtuelle sous proxmox. Dans cette partie nous allons aborder le partage de fichiers. Mes fichiers doivent être accessible depuis n’importe quel ordinateur de mon réseau local et n’importe quel système d’exploitation.

Deux serveurs de partage seront installés, NFS pour le partage en natif Linux et Samba pour les postes sous Windows.

Enfin l’installation d’un serveur ownCloud pour synchroniser mes documents, images, photos, musiques.

Avant de commencer la configuration du serveur de partage, j’ai modifié la méthode de montage des deux disques durs. En effet j’ai préféré faire un montage basé sur l’UUID pour m’y retrouver plus facilement. J’utilise un petit utilitaire compris dans le paquet util-linux afin d’identifier les différents disques durs.

root@elune:~# blkid 
/dev/sdb1: LABEL="serietv" UUID="5b8275e1-85cb-4406-ba7f-8c54d48d7978" TYPE="ext4" 
/dev/sdc1: LABEL="films" UUID="27bd44d9-71aa-4b4a-9ed4-ab79e715d3fd" TYPE="ext4"

Il me reste plus qu’a modifier mon fstab pour que les disques soient montés au démarrage.

UUID=5b8275e1-85cb-4406-ba7f-8c54d48d7978 /media/5b8275e1-85cb-4406-ba7f-8c54d48d7978 ext4 defaults,nofail,acl,user_xattr,noexec,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 2
UUID=27bd44d9-71aa-4b4a-9ed4-ab79e715d3fd /media/27bd44d9-71aa-4b4a-9ed4-ab79e715d3fd ext4 defaults,nofail,acl,user_xattr,noexec,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 2

Samba

Installation de samba sous Debian :

apt-get install samba

Ensuite toute la configuration se fait via le fichier smb.conf situé dans /etc/samba. Le fichier se découpe en deux parties, une pour la configuration générale du serveur, l’autre pour les différents partages.

Voici la configuration que j’utilise :

#======================= Global Settings =======================
[global]
#Spécifie le groupe de travail
workgroup = WORKGROUP
#Description du serveur
server string = %h server
#pas de proxy
dns proxy = no
#Niveau de précision des log plus d'infos ici[->]
log level = 1
#pas de log dévènement
syslog = 0
#ou enregistrer le fichier de logs
log file = /var/log/samba/log.%m
#taille maximale du fichier
max log size = 1000
#mot de passes chiffrés
encrypt passwords = true
smb password file = /etc/smbpasswd
#niveau de sécurité : seul les utilisateurs avec un compte peuvent se connecter
security = user
#Permet de mapper les autorisation Unix vers windows, tous les fichiers créés à partir
#d'un poste windows aura les autorisations linux 777
create mask = 0777
#pareil que create mask mais pour les dossiers
directory mask = 0777
#améliore les transferts de fichiers
use sendfile = yes
aio read size = 16384
aio write size = 16384
#utilisaeurs sans mot de passe interdit
null passwords = no
#seul maître à bords
local master = yes
#pas de serveur de temps ni de support wins
time server = no
wins support = no

Passons maintenant à la configuration des partages :

En exemple la configuration d’un de mes partages.

#======================= Share Definitions =======================
[photos]
path = /media/5b8275e1-85cb-4406-ba7f-8c54d48d7978/photos/
#invités interdit
guest ok = no
#lecture seule non
read only = no
#dossier navigable
browseable = yes
#hérite des différentes acl
inherit acls = yes
inherit permissions = no
ea support = no
store dos attributes = no
printable = no
#lorsqu'un dossier ou un fichiers est crée il hérite des autorisations suivantes
create mask = 0755
force create mode = 0644
directory mask = 0755
force directory mode = 0755
hide dot files = yes

Le partages de fichiers samba est opérationnel. Seul les utilisateurs avec un compte sur le serveur pourrons accéder aux fichiers. Personnellement je n’utilise windows que pour les jeux, mais n’étant pas un extrémiste du libre, je tolère que mon entourage n’utilise pas le même système que moi. C’est alors plus facile pour échanger nos fichiers.

NFS – Network File System

NFS est un système de fichier réseau qui permet le partage entre machines UNIX. C’est le gros morceaux, car tous mes ordinateurs linux doivent pouvoir y accéder en lecture/écriture.

Installation.

apt-get install nfs-kernel-server

Ensuite les partages se configurent dans un seul fichier /etc/exports

/export/videos 192.168.66.0/24(rw,subtree_check,insecure,no_root_squash) 192.168.67.1(rw,subtree_check,insecure,no_root_squash)

  •  /export/videos : Nom du partage afficher lors de interrogation du serveur showmount -e IP_du_serveur_NFS
  • 192.168.66.0/24 – j’autorise n’importe quels ordinateurs du réseau à se connecter au partage
  • rw : accès en lecture/écriture
  • subtree_check : vérification de l’arborescence
  • insecure : permet au client de se connecter sur un port différent de celui par défaut le 1024, utile dans certains cas.
  • no_root_squash : spécifie que le root de la machine sur laquelle le répertoire est monté possède les droits root sur le répertoire

Tous les partages sont configurés de la même façon.

Mon pc de salon qui est en Wi-Fi utilise mon nas, pour ne pas ouvrir mon réseau local, sur mon pare-feu j’ai créer un réseau dédié au Wi-Fi en 192.168.67.XX, avec uniquement des accès ciblés vers mon réseau local. C’est pour cela qu’en plus de plage Ip locale j’ai renseigné celle de mon pc de salon.

ownCloud – l’accès depuis internet

J’ai besoin d’avoir accès à certains documents hors de chez moi avec une mise à jour à chaque modifications. C’est là qu’intervient le célèbre ownCloud. Si vous voulez plus d’infos c’est par ici[angl].

De plus il offre la possibilité de synchroniser ses contacts, son calendrier, la musique en streaming, et pleins d’autre petites applications sympatiques.

Pour l’installer, toujours sous Debian, il suffit de suivre le mini-tuto du site officiel. Il permet d’ajouter les dépôts et de procéder à l’installation.

Les données hébergées doivent être sauvegardées, mais pas aussi fréquemment que les VM. J’ai donc ajouté un disque virtuel ou seront stockés mes fichiers owncloud. Ce disque sera sauvegardé une fois par semaine avec un historique dont je n’ai pas encore définit la durée, peut être 15 jours ou un mois en fonction de son évolution.

add-hdd

Il sera monté dans /home/olivier/owncloud et il servira pour le dossier data de owncloud.

config_owncloudVoici une capture d’écran lors de mon installation. Pour la base de données je préfère utiliser mon serveur MariaDB à la place de sqlite. C’est aussi une des raisons qui m’ont poussé à ne pas utiliser le plugin d’openmediavault qui impose l’utilisation de sqlite.

Ajout des droits pour l’utilisateur d’apache afin qu’il puisse utiliser le dossier data.

chown -R www-data:www-data /home/olivier/owncloud

 Il me reste plus qu’a modifier la configuration de reverse proxy pour accéder au ownCloud depuis internet en ssl.

Conclusion

Mon nas est maintenant fonctionnel et prêt à accueillir mes fichiers. Mes fichiers sont disponibles partout où je suis, j’ai de la place pour le stockage multimédia, ils sont accessible via windows et Linux.

Dans la prochaine partie nous verrons comment sauvegarder et restaurer tout ce petit monde.

2014-06-03

Proxmox : Suprimer le message « no subscription »

Logo-ProxmoxVE

Depuis Promox 3.1, à chaque login (ou sur certaines actions), vous avez une fênetre qui apparait :

subscription

Moi perso ça a finis par me gonfler !
Voici une astuce simple pour le virer :

On commence par faire un backup (au cas où) du fichier incriminé.

cp /usr/share/pve-manager/ext4/pvemanagerlib.js /usr/share/pve-manager/ext4/pvemanagerlib.js.backup

On édite le fichier :

 nano /usr/share/pve-manager/ext4/pvemanagerlib.js

et vous cherchez la ligne :

if (data.status !== 'Active') {

Puis vous la remplacez par :

if (false) {

 

c'est tout :)

Un driver libre pour contrôler les sensors d’une carte mère Asus

 

asus_logo

J'ai récemment changé mon hyperviseur (j'en ferai une présentation plus tard).

Au programme : moins de place, moins de conso, plus de WAF !

J'ai donc acheté une nouvelle machine qui comprends une carte mère Asus :)
Tout content, je réinstalle mon OS, mes programmes … dont "lm-sensors" afin d'avoir une vue sur les températures et autres paramètres de la CM.

sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +27.8°C  (crit = +105.0°C)
temp2:        +29.8°C  (crit = +105.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +34.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:         +34.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:         +33.0°C  (high = +80.0°C, crit = +100.0°C)

le drame… quasiment aucune info …

nada !

Autre soucis, j'utilise open-vz et j'ai donc un vieux kernel qui date de la préhistoire …
à coup de recherches sur l'Internet, dans dmesg, les modules …

il m'en manque un, celui qui gère les sonde de la carte mère (évidemment …)

Je dispose d'une Asus H81i-Plus en socket 1150 avec un H81, en cherchant sur les modèles de cette famille il me faut le driver pour le composant "w83627ehf".

Problème celui ci est déjà présent indecision (pourquoi tu marches pas ???), mais pas utilisable car j'ai pas ce composant sur ma CM (wtf ??).
En cherchant encore j'ai un "nct6775" qui est poutant gérer par le driver "w83627ehf" …

Etant donné qu'on est dans le monde des bisounours barbus, autant le recompiler soi même, nan ?

Il vaut dans un premier temps le nécessaire du parfait geek : les headers du kernel, les outils de compilations …
Puis récuper sur le site du fabricant les sources (cool c'est du libre !) : https://github.com/groeck/nct6775

 

et enfin :

cd /tmp
wget https://github.com/groeck/nct6775/archive/master.tar.gz
tar xvzf master.tar.gz
cd nct6775-master
make
cp ./nct6775.ko /lib/modules/mon-kernel/kernel/drivers/hwmon/
depmod -a
modprobe nct6775
echo nct6775 >> /etc/modules

On vérifie avec "lsmod" :

lsmod
Module                  Size  Used by
nct6775                51920  0 
[...]
hwmon_vid               3148  1 nct6775
[...]

 

et petit coups de "sensors" :)

sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +27.8°C  (crit = +105.0°C)
temp2:        +29.8°C  (crit = +105.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +35.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:         +35.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:         +32.0°C  (high = +80.0°C, crit = +100.0°C)

nct6779-isa-0290
Adapter: ISA adapter
Vcore:                  +0.85 V  (min =  +0.00 V, max =  +1.74 V)
in1:                    +1.03 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
AVCC:                   +3.38 V  (min =  +2.98 V, max =  +3.63 V)
+3.3V:                  +3.38 V  (min =  +2.98 V, max =  +3.63 V)
in4:                    +1.01 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in5:                    +0.00 V  (min =  +0.00 V, max =  +0.00 V)
in6:                    +0.86 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
3VSB:                   +3.39 V  (min =  +2.98 V, max =  +3.63 V)
Vbat:                   +3.26 V  (min =  +2.70 V, max =  +3.63 V)
in9:                    +1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in10:                   +0.14 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in11:                   +0.12 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in12:                   +0.11 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in13:                   +0.11 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in14:                   +0.12 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
fan1:                  2061 RPM  (min =    0 RPM)
fan2:                  1192 RPM  (min =    0 RPM)
fan5:                     0 RPM  (min =    0 RPM)
SYSTIN:                +121.0°C  (high =  +0.0°C, hyst =  +0.0°C)  sensor = thermistor
CPUTIN:                 +34.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
AUXTIN0:                +34.0°C  (high =  +0.0°C, hyst =  +0.0°C)  ALARM  sensor = thermistor
AUXTIN1:               +114.0°C    sensor = thermistor
AUXTIN2:               +113.0°C    sensor = thermistor
AUXTIN3:                +36.0°C    sensor = thermal diode
PECI Agent 0:           +35.0°C  
PCH_CHIP_CPU_MAX_TEMP:   +0.0°C  
PCH_CHIP_TEMP:           +0.0°C  
PCH_CPU_TEMP:            +0.0°C  
intrusion0:            ALARM
intrusion1:            ALARM
beep_enable:           disabled

 

C'est déjà mieux !
Mais pas encore parfait, trop de blabla, et certaines infos sont éronnées !

éditez : nano /etc/sensors.d/sensors3.conf

à l'instance : chip "w83627ehf-*" "w83627dhg-*" "w83667hg-*" "nct6775-*" "nct6776-*"

modifiez de la façon suivante :

chip "w83627ehf-*" "w83627dhg-*" "w83667hg-*" "nct6775-*" "nct6776-*" "nct6779-*"


    ignore fan5

    ignore temp1 #SYSTIN
    ignore temp3 #AUXTIN1
    ignore temp4 #AUXTIN2
    ignore temp5 #AUXTIN3
    ignore temp8 #PCH_CHIP_CPU_MAX_TEMP
    ignore temp9 #PCH_CHIP_TEMP
    ignore temp10 #PCH_CPU_TEMP
    ignore intrusion0
    ignore intrusion1
    ignore beep_enable


label in1 "+5V"
  compute in1 @ * (40/8), @ / (40/8)
  set in1_min 5 * 0.95
  set in1_max 5 * 1.05

label in3 "+3.3V"
  set in3_min 3.3 * 0.95
  set in3_max 3.3 * 1.05

label in4 "+12V"
  compute  in4  @ * (96/8), @ / (96/8)
  set in4_min 12 * 0.95
  set in4_max 12 * 1.05

label in8 "Vbat"
  set in8_min 3.0 * 0.90
  set in8_max 3.3 * 1.10

ignore in2
ignore in5
ignore in6
ignore in7
ignore in9
ignore in10
ignore in11
ignore in12
ignore in13
ignore in14

label fan1 "Chassis fan"
  set fan1_min 300

label fan2 "CPU fan"
  set fan2_min 300

 

refaites un "sensors"

nct6779-isa-0290
Adapter: ISA adapter
Vcore:         +0.85 V  (min =  +0.00 V, max =  +1.74 V)
+5V:           +5.16 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
+3.3V:         +3.38 V  (min =  +2.98 V, max =  +3.63 V)
+12V:         +12.10 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
Vbat:          +3.28 V  (min =  +2.70 V, max =  +3.63 V)
Chassis fan:  2099 RPM  (min =    0 RPM)
CPU fan:      1198 RPM  (min =    0 RPM)
CPUTIN:        +34.5°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
AUXTIN3:       +35.0°C    sensor = thermal diode
PECI Agent 0:  +36.0°C

 

c'est déjà mieux, même si dans mon cas, certaines valeurs "max" et "mini" sont toujours à 0 sad
 

2014-06-02

Suivre les commentaires d’un article particulier en RSS avec WordPress

Parmi les arguments avancés pour l’utilisation de DisquS figure celle-ci :

Je crois que l’intérêt de Disqus est pour les utilisateurs, qui peuvent suivre facilement les conversations autour des commentaires qu’ils ont laissés. Combien de fois avez-vous laissé un commentaire sur un blog, vérifié une ou deux fois s’il y avait des réponses intéressantes, puis oublié cette page. Avec Disqus, si quelqu’un répond trois mois plus tard, l’utilisateur peut en obtenir une notification et rebondir.

Et bien vous devriez savoir que pour chaque article publié avec WordPress on peut avoir un flux RSS particulier des commentaires. Ex : http://tuxicoman.jesuislibre.net/2014/05/disqus-pourquoi.html/feed

En bonus, pas besoin de laisser son mail pour s’inscrire ni de prier pour que vos démarches de désinscriptions soient bien prises en compte.

J'aime(5)Ferme-la !(1)

Pour vivre heureux, vivons caché

Pour un article récent sur le déploiement avec Puppet, je voulais partager un peu de code et quoi de mieux qu’un dépôt git ? A priori, pas grand chose… Bref deux possibilités s’offraient à moi pour partager mon dépôt git, à savoir :

  • l’héberger sur mon Gitlab auto-hébergé,
  • l’héberger sur GitHub.

J’ai pas mal hésité avant de me décider à savoir où j’allais l’héberger et j’ai finalement choisi de publier mon dépôt sur GitHub. L’unique raison qui m’a poussé à utiliser Github est que j’avais peur pour la sécurité de mon serveur.

En effet, j’ai eu peur qu’en diffusant l’url de mon Gitlab, je m’expose à d’inutiles risques. En effet, Gitlab est fréquement mis à jour, ce qui est bien et parfois la raison de cette mise à jour et la correction d’une faille de sécurité. Malheureusement, je n’ai pas toujours le temps de faire les mise à jour rapidement et du coup je ne suis pas rassurer de partager un lien vers mon Gitlab sachant qu’il peut être parfois vulnérable.

Voilà, je ne dis pas de cacher tous ses services auto-hébergés mais c’est comme pour la vie réelle, vous ne criez pas sur tous les toits votre adresse et vos dates de vacances. Du coup, même logique, ne divulguez pas plus d’informations que nécessaires, il en va de la sécurité de votre serveur…

Note : Je prend Gitlab comme exemple, mais cela fonctionne avec n’importe quel service hébergé sur votre serveur.

Généré le 2014-10-21 01:25 UTC avec Planet Venus