22 August 2018

Charles Plessy

Imprimer avec Brother sur Debian

J'ai tourné en rond pendant plus d'une heure, avant de finir par comprendre qu'il faut aussi installer le paquet lib32stdc++6 quand on utilise les pilotes Brother (imprimante HL-L2365DW) sur un système amd64, puisqu'ils sont fournis sous la forme de paquets i386. Pourtant il y a plus d'une piste dans les instructions en ligne. Le plus difficile était que sans lib32stdc++6, tout semble se passer parfaitement sauf que rien ne sort de l'imprimante.

22 August, 2018 12:41PM

09 July 2018

Charles Plessy

Debconf cette année, c'est râpé.

Je me réjouissais de la tenue de la 18ème conférence Debian à Taiwan, pour la première fois en Asie, en espérant y participer pour la première fois aussi et profiter de l'absence de décalage horaire, mais voilà, je vais déménager au même moment, à Okinawa, le premier août.

Ce déménagement me donne de la joie pour ce que je vais rejoindre mais aussi de la mélancolie pour ce et ceux que nous allons quitter. Mais il y a des vols très bon marché pour Tôkyô et Yokohama...

Spéciale dédicace pour le cercle d'étude Debian de Tôkyô, où ma première clé GPG a été signée par des développeurs Debian il y a fort longtemps.

09 July, 2018 08:35PM

01 June 2018

Stéphane Blondon

Installer Matomo sur Debian 9

Imaginons qu’Airgan, une plateforme communautaire payante de location et de réservation d’organes, veuille améliorer le suivi des visites sur son site web. Matomo est une réponse possible à ce besoin.

Matomo, anciennement Piwik, est un service web pour collecter des statistiques de visites. L’entreprise propose une version libre, auto-hébergeable et une version hébergée uniquement par Matomo qui inclut des fonctions non disponibles dans la version libre.

Matomo fournit un fichier .deb, permettant d’installer le service facilement sur une machine Debian. Cet article présente quelques éléments à prendre en compte.

Le changement de nom de Piwik à Matomo date de Janvier 2018. Tout n’a pas été transféré et la documentation ou les variables laissent parfois encore apparaître l’ancien nom.

Installation du paquet piwik

Le paquet n’est pas inclus dans la distribution mais est fourni dans un dépôt tiers géré par Matomo.
La documentation pour installer le paquet fourni par Matomo est disponible à http://debian.piwik.org/. Il suffit de la suivre.

Installation du paquet php-mbstring

Le fonctionnement du service nécessite que le paquet php-mbstring soit installé. Si ce n’est pas le cas, une erreur lors de la configuration de Matomo (dans quelques étapes, patientez !) sera affichée :

Capture d'écran de l'erreur

Une pull-request sur Github a été faite pour ajouter php-mbstring aux dépendances. Cette étape ne sera peut-être plus nécessaire dans la prochaine version ?

Configuration du service web

Le paquet ne dépend pas d’un serveur web en particulier. Le code d’example suivant suppose que c’est Apache2 qui est installé. N’importe quel autre serveur web fonctionnerait aussi.

<VirtualHost 19.84.19.84:80>
    ServerName matomo.airgan.tld

    # ce sera bien pratique quand on aura des problèmes
    ErrorLog /srv/airgan/logs/matomo-http-error.log
    CustomLog /srv/airgan/logs/matomo-http-access.log combined
    LogLevel info

    # les deux lignes importantes
    DocumentRoot /usr/share/piwik
    DirectoryIndex index.php
</VirtualHost>

Ensuite, il faut activer le virtualhost :
sudo a2ensite matomo.conf
sudo systemctl reload apache2

Ajouter un utilisateur pour la base de données

Un serveur de base de données MySQL ou MariaDB doit être installé. Ensuite, il faut se connecter sur ce serveur pour créer un utilisateur qui pourra créer la base de données et les tables nécessaires lors de la configuration de Matomo (c’est juste après cette étape, vous avez bien fait de patienter !).

#Créer un utilisateur nommé matomo :
CREATE USER matomo@'localhost';
SET PASSWORD FOR matomo@'localhost' = PASSWORD('secret');
#Lui donner les droits pour créer la base de données nécessaire au service :
GRANT CREATE, ALTER, SELECT, INSERT, UPDATE, DELETE, DROP, CREATE TEMPORARY TABLES on *.* to matomo@'localhost';

Configurer le service Matomo

Avec un navigateur web, allez sur le domaine paramétré dans la configuration du serveur web (matomo.airgan.tld dans notre exemple). Il suffit de suivre les étapes de l’interface pour finir l’installation. Elle correspond à l’étape « The 5-minute Matomo Installation » sur https://matomo.org/docs/installation/.

Une fois cette étape terminée, l’installtion est terminée et aller sur le domaine permet de voir l’interface de connexion pour accéder aux statistiques de visite.

Versions utilisées

L’installation ayant servie à écrire l’article a été faite sur
Debian GNU/Linux 9.3 (stretch) avec les versions suivantes des paquets :

apache2
2.4.25-3+deb9u4
mariadb-server
10.1.26-0+deb9u1
piwik
3.2.1-1

Dans le futur, il est possible que la livraison des organes se fasse à vélo. À étudier dans un prochain business plan.

01 June, 2018 03:51PM par ascendances

23 May 2018

Vincent Bernat

Répartiteur de charge à multiples niveaux avec Linux

Une solution courante pour fournir un service hautement disponible et évolutif consiste à insérer une couche d’équilibrage de charge pour répartir les requêtes des utilisateurs vers les serveurs frontaux1. Nous avons habituellement plusieurs attentes à l’égard d’une telle couche :

évolutivité
Elle permet à un service de monter en charge en poussant le trafic vers des serveurs nouvellement provisionnés. Elle est également capable de s’étendre si elle devient le goulot d’étranglement.
disponibilité
Elle fournit la haute disponibilité au service. Si un serveur devient indisponible, le trafic est rapidement redirigé vers un autre serveur. Elle doit également être elle-même hautement disponible.
flexibilité
Elle gère aussi bien les connexions de courtes et de longues durées. Elle est suffisamment flexible pour offrir toutes les fonctionnalités généralement attendues d’un répartiteur de charge comme TLS ou le routage HTTP.
opérabilité
Avec un peu de coopération, tout changement prévu est transparent : mise à niveau des frontaux, ajout ou suppression de frontaux ou changement de topologie de la couche de répartition elle-même.

Le problème et ses solutions sont bien connus. Parmi les articles récemment parus sur le sujet, « Introduction to modern network load-balancing and proxying » donne un aperçu de l’état de l’art. Google a publié « Maglev: A Fast and Reliable Software Network Load Balancer » décrivant en détail leur solution interne2. Cependant, le logiciel associé n’est pas disponible. Fondamentalement, la construction d’une solution d’équilibrage de charge consiste à assembler trois composants :

  • routage ECMP
  • répartition L4 (sans état)
  • répartition L7 (avec état)

Dans cet article, je décris une solution à multiples niveaux utilisant Linux et des composants open-source. Cela offre une base pour construire une couche d’équilibrage de charge prête à la production.

Mise à jour (05.2018)

Facebook vient de publier Katran, un répartiteur de charge L4 utilisant XDP et eBPF ainsi que du hachage cohérent. Il pourrait s’insérer dans la configuration décrite ci-dessous.

Update (08.2018)

GitHub vient de publier GLB Director, un répartiteur de charge L4 avec un algorithme de hachage sélectionnant un couple de répartiteurs L7. À l’aide d’un module Netfilter, le premier membre redirige le flux vers le second lorsqu’il ne trouve pas d’entrée correspondante dans sa table de connexions.

Dernier niveau : répartition L7⚓︎

Commençons par le dernier niveau. Son rôle est de fournir la haute disponibilité, en transférant les requêtes vers les frontaux sains, ainsi que l’évolutivité, en répartissant équitablement les requêtes. Travaillant dans les couches supérieures du modèle OSI, il peut également offrir des services supplémentaires, comme la terminaison TLS, le routage HTTP, la réécriture des entêtes, la limitation du débit des utilisateurs non authentifiés, etc. Il peut tirer parti d’algorithmes complexes d’équilibrage de charge. En tant que premier point de contact avec les serveurs frontaux, il doit faciliter les maintenances et minimiser l’impact lors des changements quotidiens.

Répartiteurs de charge L7
Le dernier niveau de la solution de répartition de charge est un ensemble d'équilibreurs de charge L7 recevant les connexions des utilisateurs et les transférant vers les frontaux.

Il termine également les connexions TCP des clients. Cela découple l’étage de répartition des serveurs frontaux avec les avantages suivants :

  • les connexions vers les frontaux peuvent être maintenues ouvertes pour réduire l’utilisation des ressources et la latence ;
  • les requêtes peuvent être réessayées de manière transparente en cas de défaillance ;
  • les clients peuvent utiliser un protocole IP différent des serveurs ;
  • les frontaux n’ont pas à se soucier de la découverte de la MTU du chemin, des algorithmes de congestion TCP, de la gestion de l’état TIME-WAIT ou d’autres détails de bas niveau.

De nombreux logiciels conviennent pour cette couche et il existe une littérature abondante sur la façon de les configurer. Vous pouvez regarder HAProxy, Envoy ou Træfik. Voici un exemple de configuration pour HAProxy :

# Point d'entrée de la répartition de charge L7
frontend l7lb
  # Écoute à la fois en IPv4 et IPv6
  bind :80 v4v6
  # Redirige tout sur un ensemble de serveurs frontaux
  default_backend servers
  # Vérification de la bonne santé
  acl dead nbsrv(servers) lt 1
  acl disabled nbsrv(enabler) lt 1
  monitor-uri /healthcheck
  monitor fail if dead || disabled

# Serveurs frontaux en IPv6 avec tests HTTP et via un agent
backend servers
  balance roundrobin
  option httpchk
  server web1 [2001:db8:1:0:2::1]:80 send-proxy check agent-check agent-port 5555
  server web2 [2001:db8:1:0:2::2]:80 send-proxy check agent-check agent-port 5555
  server web3 [2001:db8:1:0:2::3]:80 send-proxy check agent-check agent-port 5555
  server web4 [2001:db8:1:0:2::4]:80 send-proxy check agent-check agent-port 5555

# Faux serveur gérant la disponibilitant du répartiteur de charge lui-même
backend enabler
  server enabler [::1]:0 agent-check agent-port 5555

Cette configuration est très sommaire mais permet d’illustrer deux notions clés pour l’opérabilité :

  1. Les frontaux sont testés à la fois au niveau HTTP (avec check et option httpchk) et via un agent auxiliaire (avec agent-check). Ce dernier permet de placer un serveur en maintenance pour effectuer une mise en production progressive. Sur chaque frontal, un processus écoute sur le port 5555 et répond avec le statut du service (UP, DOWN, MAINT). Un simple socat fait l’affaire3 :

    socat -ly \
      TCP6-LISTEN:5555,ipv6only=0,reuseaddr,fork \
      OPEN:/etc/lb/agent-check,rdonly
    

    Dans /etc/lb/agent-check, UP indique que le service est en mode nominal. Si le test HTTP est aussi positif, HAProxy enverra des requêtes vers ce nœud. Si vous devez le mettre en maintenance, écrivez MAINT et attendez que les connexions en cours se terminent. Utilisez READY pour annuler ce mode.

  2. Le répartiteur de charge lui-même fournit un point de diagnostic (/healthcheck) pour les niveaux supérieurs. Il retourne une erreur 503 si aucun frontal n’est disponible ou si le serveur enabler est indiqué comme indisponible via l’agent. Le même mécanisme que pour les serveurs frontaux classiques peut alors être utilisé pour signaler l’indisponibilité de cet équilibreur de charge.

De plus, la directive send-proxy permet d’utiliser le protocole proxy afin de transmettre les adresses IP réelles des clients. Ce protocole fonctionne également pour les connexions non-HTTP et est supporté par de nombreux serveurs, y compris nginx :

http {
  server {
    listen [::]:80 default ipv6only=off proxy_protocol;
    root /var/www;
    set_real_ip_from ::/0;
    real_ip_header proxy_protocol;
  }
}

En l’état, cette solution n’est pas complète. Nous avons déplacé le problème de disponibilité et d’évolutivité ailleurs. Comment répartir les demandes entre les équilibreurs de charge ?

Premier niveau : routage ECMP⚓︎

Sur la plupart des réseaux IP modernes, il existe des chemins redondants entre les clients et les serveurs. Pour chaque paquet, les routeurs doivent choisir une branche. Lorsque le coût associé à chaque trajet est égal, les flux entrants4 sont répartis entre les destinations disponibles. Cette caractéristique peut être utilisée pour répartir les connexions entre les équilibreurs de charge disponibles :

Routage ECMP
Le routage ECMP est utilisé comme premier étage. Les flux sont répartis entre les équilibreurs de charge L7 disponibles. Le routage est sans état et asymétrique. Les serveurs frontaux ne sont pas représentés.

Il y a peu de contrôle sur la répartition des flux, mais le routage ECMP apporte la possibilité de faire évoluer horizontalement les deux niveaux. Une mise en œuvre courante d’une telle solution est d’utiliser BGP, un protocole de routage pour échanger des routes entre les équipements du réseau. Chaque répartiteur de charge annonce aux routeurs auxquels il est connecté les adresses IP qu’il dessert.

En supposant que vous avez déjà des routeurs avec BGP, ExaBGP est une solution flexible pour permettre aux répartiteurs de charge d’annoncer leur disponibilité. Voici un exemple de configuration :

# Test de disponibilité en IPv6
process service-v6 {
  run python -m exabgp healthcheck -s --interval 10 --increase 0 --cmd "test -f /etc/lb/v6-ready -a ! -f /etc/lb/disable";
  encoder text;
}

template {
  # Patron pour un routeur IPv6
  neighbor v6 {
    router-id 192.0.2.132;
    local-address 2001:db8::192.0.2.132;
    local-as 65000;
    peer-as 65000;
    hold-time 6;
    family {
      ipv6 unicast;
    }
    api services-v6 {
      processes [ service-v6 ];
    }
  }
}

# Premier routeur
neighbor 2001:db8::192.0.2.254 {
  inherit v6;
}

# Second routeur
neighbor 2001:db8::192.0.2.253 {
  inherit v6;
}

Si /etc/lb/v6-ready est présent mais que /etc/lb/disable est absent, toutes les IP configurées sur l’interface lo sont annoncées aux deux routeurs. Si les autres répartiteurs de charge ont une configuration similaire, les routeurs leur distribuent équitablement les flux reçus. Un processus externe doit gérer l’existence du fichier /etc/lb/v6-ready en vérifiant la bonne santé du répartiteur de charge (à l’aide du point /healthcheck par exemple). Un opérateur peut retirer un répartiteur de charge de la rotation en créant le fichier /etc/lb/disable.

Pour plus de détails concernant cette partie, jetez un œil sur « Redondance avec ExaBGP ». Si vous êtes hébergés dans les nuages, ce tiers est généralement mis en place par votre fournisseur sous forme d’une IP « élastique » ou d’un service de répartition L4.

Malheureusement, cette solution n’est pas robuste lorsqu’un changement, prévu ou non, se produit. Notamment, lors de l’ajout ou de la suppression d’un équilibreur de charge, le nombre de routes disponibles pour une destination change. L’algorithme de hachage utilisé par les routeurs n’est pas cohérent et les flux sont redistribués entre les répartiteurs de charge disponibles, rompant les connexions existantes :

Stabilité du routage ECMP 1/2
Le routage ECMP est instable lorsqu'un changement se produit. Un équilibreur de charge supplémentaire est ajouté et chaque flux est acheminé vers un répartiteur différent qui n'a pas les entrées appropriées dans sa table de connexions.

De plus, chaque routeur peut choisir ses propres chemins. Quand un routeur devient indisponible, le second peut router les mêmes flux différemment :

Stabilité du routage ECMP 2/2
Un routeur devient indisponible et le routeur restant route différemment ses flux. L'un d'entre eux est acheminé vers un répartiteur de charge différent qui n'a pas l'entrée appropriée dans sa table des connexions.

Si vous pensez que ce n’est pas un résultat acceptable, notamment si vous devez gérer de longues connexions comme le téléchargement de fichiers, le streaming vidéo ou les connexions websocket, vous avez besoin d’un niveau supplémentaire. Continuez la lecture !

Second niveau : répartition L4⚓︎

Le deuxième niveau est la glue entre le monde sans état des routeurs IP et le pays avec état de l’équilibrage de charge L7. Il est mis en œuvre grâce à l’équilibrage de charge L4. La terminologie peut être un peu confuse ici : ce niveau route les datagrammes IP (pas de terminaison TCP) mais l’agorithme de répartition utilise à la fois l’IP de destination et le port pour choisir un serveur disponible dans le niveau suivant. Le but de cet étage est de s’assurer que tous les membres prennent la même décision d’ordonnancement pour un paquet entrant.

Il y a deux possibilités :

  • répartition de charge L4 avec synchronisation des états ;
  • répartition de charge L4 avec hachage cohérent.

La première option augmente la complexité et limite l’évolutivité. Nous ne l’explorons pas5. La seconde option est moins robuste aux changements mais cela peut être amélioré via une approche hybride avec un état local.

Nous utilisons IPVS, un répartiteur de charge L4 performant fonctionnant dans le noyau Linux. Il est piloté par Keepalived qui dispose d’un ensemble de tests de disponibilité pour détecter les problèmes. IPVS est configuré pour utiliser Maglev, un algorithme de hachage cohérent créé par Google. Dans sa famille, c’est un bon algorithme car il répartit les connexions de manière équitable, minimise les impacts consécutifs à un changement et est particulièrement rapide pour construire sa table de correspondance. Enfin, pour améliorer les performances, le dernier niveau (les répartiteurs de charge L7) répond aux clients directement sans impliquer le second niveau (les répartiteurs de charge L4). Ce mécanisme est connu sous le nom de direct server return (DSR) ou direct routing (DR).

Second niveau : répartition L4
Équilibrage de charge L4 avec IPVS et hachage cohérent liant le premier et le troisième niveau. Les serveurs frontaux ont été omis. Les lignes en pointillés représentent le chemin pris par les paquets retour.

Avec une telle configuration, on s’attend à ce que les paquets appartenant à un flux puissent se déplacer librement entre les composants des deux premiers niveaux tout en finissant sur le même équilibreur de charge L7.

Configuration⚓︎

Une fois ExaBGP configuré comme décrit dans la section précédente, nous pouvons passer à la configuration de Keepalived :

virtual_server_group VS_GROUP_MH_IPv6 {
  2001:db8::198.51.100.1 80
}
virtual_server group VS_GROUP_MH_IPv6 {
  lvs_method TUN  # Mode tunnel pour DSR
  lvs_sched mh    # Algorithme : Maglev
  sh-port         # Prend en compte les ports TCP
  protocol TCP
  delay_loop 5
  alpha           # Les serveurs sont considérés inaccessibles au démarrage
  omega           # Exécute quorum_down à l'arrêt
  quorum_up   "/bin/touch /etc/lb/v6-ready"
  quorum_down "/bin/rm -f /etc/lb/v6-ready"

  # Premier répartiteur de charge L7
  real_server 2001:db8::192.0.2.132 80 {
    weight 1
    HTTP_GET {
      url {
        path /healthcheck
        status_code 200
      }
      connect_timeout 2
    }
  }

  # Tous les autres...
}

Les directives quorum_up et quorum_down définissent les commandes à exécuter quand le service devient respectivement accessible et inaccessible. Le fichier /etc/lb/v6-ready est utilisé pour signaler à ExaBGP s’il doit ou non publier l’adresse IP du service aux routeurs.

De plus, IPVS doit être configuré pour router les paquets appartenant à un flux traité initialement par un autre nœud. Il doit également continuer de router les paquets quand une destination devient indisponible afin de s’assurer qu’on puisse mettre hors service proprement un répartiteur de charge L7.

# Prend aussi en charge les paquets non SYN
sysctl -qw net.ipv4.vs.sloppy_tcp=1
# Ne PAS rerouter une connexion quand une destination
# devient invalide.
sysctl -qw net.ipv4.vs.expire_nodest_conn=0
sysctl -qw net.ipv4.vs.expire_quiescent_template=0

L’algorithme Maglev sera disponible dans Linux 4.18, grâce au travail de Inju Song. Pour les noyaux plus anciens, j’ai préparé un rétroportage6. Le substituer par un autre algorithme, tel que sh, rend l’ensemble moins robuste.

Le DSR est mis en place avec le mode tunnel. Cette méthode est compatible avec les réseaux routés. Les requêtes sont encapsulées vers le nœud choisi à l’aide du protocole IPIP. Cela ajoute un léger surcoût et entraîne des problèmes de MTU. Si possible, utilisez une MTU plus grande entre le second et troisième niveau7. Dans le cas contraire, autorisez explicitement la fragmentation des paquets IP :

sysctl -qw net.ipv4.vs.pmtu_disc=0

Il faut aussi configurer les répartiteurs de charge L7 pour accepter ce trafic encapsulé8 :

# Configure le tunnel IPIP pour accepter des paquets de n'importe quelle source
ip tunnel add tunlv6 mode ip6ip6 local 2001:db8::192.0.2.132
ip link set up dev tunlv6
ip addr add 2001:db8::198.51.100.1/128 dev tunlv6

Évaluation de la robustesse⚓︎

Ainsi configuré, le second niveau améliore la robustesse de l’ensemble pour deux raisons :

  1. L’utilisation d’un algorithme de hachage cohérent pour choisir la destination réduit l’impact négatif d’un changement, prévu ou non, en minimisant le nombre de flux déplacés vers une nouvelle destination. « Consistent Hashing: Algorithmic Tradeoffs » offre plus de détails sur ce sujet.

  2. IPVS garde localement une table des connexions pour les flux connus. Quand un changement n’impacte que le dernier niveau, les flux existants continuent d’être routés correctement en utilisant cette table.

Si nous ajoutons ou retirons un répartiteur L4, les flux existants ne sont pas impactés car chaque répartiteur prend la même décision grâce au hachage cohérent :

Instabilité de la répartition L4 1/3
La perte d'un équilibreur L4 n'a pas d'impact sur les flux existants. Chaque flèche est un exemple de flux. Les points sont des connexions liées à l'équilibreur de charge associé. S'ils s'étaient déplacés vers un autre équilibreur, la connexion aurait été perdue.

Lors de l’ajout d’un répartiteur L7, les flux existants ne sont pas impactés non plus car seules les nouvelles connexions sont routées vers le nouveau répartiteur. Pour les connexions existantes, IPVS utilise sa table de connexion locale et continue de router les paquets vers la destination originale. De manière similaire, le retrait d’un répartiteur L7 n’impacte que les connexions liées à celui-ci. Les autres connexions sont routées correctement :

Instabilité de la répartition L4 2/3
La parte d'un équilibreur L7 n'impacte que les flux qu'il hébergeait.

Seuls des changements simultanés sur les deux niveaux mènent à un impact notable. Par exemple, lors de l’ajout d’un équilibreur de charge L4 et d’un équilibreur de charge L7, seules les connexions déplacées vers un répartiteur L4 sans état et programmées vers le nouveau répartiteur seront rompues. Grâce à l’algorithme de hachage cohérent, les autres connexions resteront liées au répartiteur L7 adéquat. Lors d’un changement planifié, cette perturbation peut être minimisée en ajoutant d’abord les nouveaux équilibreurs L4, en attendant quelques minutes puis en ajoutant les nouveaux équilibreurs L7.

Instabilité de la répartition L4 3/3
Un équilibreur de charge L4 et un équilibreur de charge L7 reviennent à la vie. L'algorithme de hachage cohérent garantit que seul un cinquième des connexions existantes serait déplacé vers le nouvel équilibreur L7. Certains d'entre eux continuent d'être acheminés par le répartiteur L4 d'origine qui connait la destination correcte, ce qui atténue l'impact.

De plus, IPVS route correctement les messages ICMP vers les mêmes répartiteurs L7 que les flux associés. Cela permet à la découverte de la MTU du chemin de fonctionner correctement sans utiliser de techniques palliatives.

Niveau 0 : répartition de charge via le DNS⚓︎

Il est également possible d’ajouter un équilibrage de charge DNS à l’ensemble. Ceci est utile si votre installation est répartie sur plusieurs centres de données, plusieurs régions ou si vous voulez diviser une large ferme de répartition de charge en morceaux plus petits. Il n’est pas destiné à remplacer le premier niveau car il ne partage pas les mêmes caractéristiques : la répartition de charge est déséquilibrée (elle n’est pas basée sur les flux) et la guérison après une panne est lente.

Répartition de charge globale
Une solution complète de répartition de charge sur deux centres de données.

gdnsd est un serveur DNS autoritaire avec des tests de disponibilité intégrés. Il peut servir des zones au format RFC 1035 :

@ SOA ns1 ns1.example.org. 1 7200 1800 259200 900
@ NS ns1.example.com.
@ NS ns1.example.net.
@ MX 10 smtp

@     60 DYNA multifo!web
www   60 DYNA multifo!web
smtp     A    198.51.100.99

L’enregistrement spécial DYNA retourne des entrées A et AAAA après avoir consulté le greffon spécifié. Ici, le greffon multfifo implémente une surveillance en mode actif/actif des adresses IP de la ferme :

service_types => {
  web => {
    plugin => http_status
    url_path => /healthcheck
    down_thresh => 5
    interval => 5
  }
  ext => {
    plugin => extfile
    file => /etc/lb/ext
    def_down => false
  }
}

plugins => {
  multifo => {
    web => {
      service_types => [ ext, web ]
      addrs_v4 => [ 198.51.100.1, 198.51.100.2 ]
      addrs_v6 => [ 2001:db8::198.51.100.1, 2001:db8::198.51.100.2 ]
    }
  }
}

En mode nominal, une requête A recevra en réponse à la fois 198.51.100.1 et 198.51.100.2. Si un test de disponibilité échoue, l’ensemble retourné est mis à jour. Il est également possible de retirer une IP volontairement en modifiant le fichier /etc/lb/ext. Par exemple, en mettant le contenu suivant, 198.51.100.2 ne fera plus parti des réponses :

198.51.100.1 => UP
198.51.100.2 => DOWN
2001:db8::c633:6401 => UP
2001:db8::c633:6402 => UP

Tous les fichiers de configuration pour la mise en place de chaque niveau sont disponibles dans un dépôt GitHub. Si vous voulez reproduire cette configuration à une échelle plus petite, il est possible de fusionner le second et le troisième niveau, soit avec des espaces de nom, soit avec une configuration spécifique de type localnode. Même si vous n’avez pas besoin de ces services directs, vous devriez garder le dernier niveau : alors que les serveurs frontaux vont et viennent, les équilibreurs de charge L7 apportent de la stabilité, rendant l’ensemble plus robuste.


  1. Dans cet article, les « serveurs frontaux » sont les serveurs derrière la couche de répartition de charge. Dans la version anglaise, j’utilise le terme « backend » mais l’équivalent français n’est pas très agréable. ↩︎

  2. Un bon résumé de ce papier est fait par Adrian Colyer. Du même auteur, jetez aussi un œil sur le résumé de « Stateless datacenter load-balancing with Beamer ». ↩︎

  3. Si vous pensez que cette solution est fragile, n’hésitez pas à développer votre propre agent. Il pourrait se coordonner avec un registre clés/valeurs pour déterminer l’état souhaité du serveur. Il est possible de centraliser l’agent à un seul endroit, mais vous risquez d’avoir un problème de poule et d’œuf pour assurer sa disponibilité. ↩︎

  4. Un flux est généralement déterminé par l’IP source et destination et le protocole L4. Alternativement, le port source et le port de destination peuvent également être utilisés. Le routeur hache ces informations pour déterminer la destination. Concernant Linux, vous trouverez plus d’informations à ce sujet dans « Celebrating ECMP in Linux ». ↩︎

  5. Avec Linux, cela peut être mis en place en utilisant Netfilter pour la répartition de charge et conntrackd pour synchroniser les états. IPVS ne permet qu’une synchronisation actif/passif, limitant l’évolutivité. ↩︎

  6. Le rétroportage n’est pas fonctionnellement équivalent à la version originale. Consultez le fichier README pour comprendre les différences. Brièvement, dans la configuration de Keepalived, il faut :

    • ne pas utiliser inhibit_on_failure
    • utiliser sh-port
    • ne pas utiliser sh-fallback

    ↩︎

  7. Au moins 1520 pour IPv4 et 1540 pour IPv6. ↩︎

  8. En l’état, cette configuration n’est pas sûre. Vous devez vous assurer que seuls les répartiteurs de charge L4 seront en mesure d’envoyer du traffic IPIP↩︎

23 May, 2018 08:59AM par Vincent Bernat

22 May 2018

Olivier Berger (pro)

Recrutement ingénieur·e DevOps pour conteneurs de Travaux Pratiques en informatique/réseaux

Nous recrutons un·e ingénieur·e en informatique pour travailler à l’application des concepts et technologies DevOps (conteneurs Docker, Git, Linux, libre, …) pour la mise au point et l’hébergement de dispositifs de Travaux Pratiques virtualisés, qui seront utilisés pour des enseignements d’informatique et de réseaux, sur un CDD de 1 an, à Télécom SudParis, à Évry (91).

Pour en savoir plus, voir le descriptif du poste que j’ai mis en ligne.

22 May, 2018 07:25AM par Olivier Berger

18 May 2018

Olivier Berger (pro)

Prochaine conférence MiNET sur les systèmes d’exploitation 24/05 Évry (France)

La prochaine conférence MiNET, le 24/05/2018 après-midi, promet d’être très intéressante sur le sujet des systèmes d’exploitation, avec 4 intervenants pointus :

  • Julia Lawall : “Introduction to Coccinelle and its usage in the Linux Kernel
  • Sebastien Valat : “Memory management and OS paging for high performance computing
  • Pierre Pronchery : “DeforaOS: Un voyage dans le développement de système d’exploitation
  • Cyril Brulebois : “Maintenir et développer la distribution Debian

Plus de détails sur https://conference.minet.net/#conf2018

N’hésitez pas à nous rejoindre à Évry pour participer à cette conférence, ou à suivre la retransmission sur la chaîne Youtube de MiNET.

 

 

18 May, 2018 08:06AM par Olivier Berger

23 April 2018

Vincent Bernat

Un blog plus respectueux de la vie privée

Quand j’ai commencé ce blog, j’ai adopté certains services gratuits, comme Disqus ou Google Analytics. Ces services sont assez envahissants pour la vie privée des utilisateurs. Au fil des années, j’ai essayé de corriger cela pour arriver à un point où je ne repose plus sur aucun service « hostile ».

Analyse d’audience⚓︎

Google Analytics est la solution universelle pour obtenir gratuitement une solution d’analyse d’audience. C’est aussi un excellent moyen de fournir gratuitement des données sur vos visiteurs à Google. Il existe des solutions auto-hébergées comme Matomo, anciennement Piwik.

J’ai opté pour une solution plus simple : pas d’analyse d’audience. Cela me permet aussi de penser que mon blog attire des milliers de visiteurs par jour.

Polices de caractères⚓︎

Google Fonts est une bibliothèque de polices et un service d’hébergement très populaire. Il repose sur les règles de confidentialité de Google. Le service google-webfonts-helper permet d’auto-héberger facilement n’importe quelle police issue de Google Fonts. De plus, à l’aide de pyftsubset, les polices n’incluent que les caractères utilisés dans ce blog. Les fichiers sont plus légers et plus complets : pas de problème pour écrire « Antonín Dvořák ».

Vidéos⚓︎

  • Avant : YouTube
  • Après : auto-hébergement

Certains articles sont accompagnés par une vidéo (comme « OPL2LPT: une carte son AdLib sur port parallèle »). Par le passé, j’utilisais YouTube, principalement parce que c’était la seule plateforme gratuite avec une option pour désactiver les publicités. La diffusion de vidéos à la demande est généralement jugée assez difficile. Notamment, si vous utilisez simplement la balise <video>, vous risquez de servir un fichier trop volumineux pour les personnes ayant une connexion lente. Cependant, la difficulté est exagérée : hls.js permet de livrer la vidéo coupée en segments disponibles dans différents débits. Les utilisateurs avec Java­Script désactivé se rabattent sur une version classique de qualité moyenne.

Dans « Auto-hébergement de vidéos avec HLS », j’explique cette approche plus en détail.

Commentaires⚓︎

  • Avant : Disqus
  • Après : auto-hébergement avec Isso

Disqus est une solution de commentaires populaire pour les pages statiques. Ils ont été récemment acquis par Zeta Global, une société de marketing dont le modèle économique repose entièrement sur le profilage. Côté technique, Disqus charge également plusieurs centaines de kilo-octets de ressources. Par conséquent, de nombreux sites n’activent Disqus qu’à la demande. C’est ce que je faisais. Cela ne résout pas le problème de respect de la vie privée. J’avais aussi le sentiment qu’on était moins désireux de laisser un commentaire si une action supplémentaire était requise.

Pendant un certain temps, j’ai pensé à mettre en place mon propre système de commentaires autour des flux Atom. Chaque page recevrait son propre flux de commentaires. Un morceau de Java­Script transformerait ces flux en HTML et les commentaires pourraient toujours être lus sans Java­Script grâce au rendu par défaut des navigateurs. Les lecteurs pourraient aussi s’abonner à ces flux : pas besoin de notifications par courrier ! Les flux seraient servis sous forme de fichiers statiques et mis à jour lors de nouveaux commentaires par un petit morceau de code côté serveur. Encore une fois, cela pourrait fonctionner sans Javascript.

Day Planner by Fowl Language Comics
Fowl Language Comics : Day Planner. De ma difficulté à démarrer un nouveau projet.

Je pense toujours que c’est une bonne idée, mais je n’avais pas envie de développer et de maintenir un nouveau système de commentaires. Il existe plusieurs alternatives auto-hébergés, notamment Isso et Commento. Isso est un peu plus complet avec notamment un import imparfait depuis Disqus. Les deux rencontrent des difficultés pour assurer la maintenance et essaient de devenir pérennes via une version hébergée payante1. Commento est plus orienté vers le respect de la vie privée avec sa non-utilisation des cookies. Cependant, les cookies ne sont pas indispensables au bon fonctionnement d’Isso et ils peuvent être filtrés avec nginx :

proxy_hide_header Set-Cookie;
proxy_hide_header X-Set-Cookie;
proxy_ignore_headers Set-Cookie;

Isso ne propose actuellement pas de notifications par courrier mais j’ai ajouté un flux Atom pour chaque fil de commentaires.

Une autre option aurait été de fermer les commentaires. Cependant, par le passé, j’ai eu d’excellentes contributions en commentaires et je pense aussi qu’ils peuvent faire office de comité de lecture pour articles de blog : c’est une petite garantie que le contenu n’est pas totalement faux.

Moteur de recherche⚓︎

Un moyen de fournir un moteur de recherche pour un blog personnel est de fournir un formulaire pointant sur un moteur de recherche public, comme Google. C’est ce que je faisais. J’ai aussi glissé un peu de Java­Script sur le dessus pour intégrer l’ensemble.

La solution consiste à passer à DuckDuckGo. Il permet de personnaliser un peu l’expérience de recherche :

<form id="lf-search" action="https://duckduckgo.com/">
  <input type="hidden" name="kf" value="-1">
  <input type="hidden" name="kaf" value="1">
  <input type="hidden" name="k1" value="-1">
  <input type="hidden" name="sites" value="vincent.bernat.ch/fr">
  <input type="submit" value="">
  <input type="text" name="q" value="" autocomplete="off" aria-label="Search">
</form>

La partie Java­Script est supprimée car DuckDuckGo ne fournit pas d’API. Comme il est peu probable que plus de trois personnes utilisent le moteur de recherche dans une année, cela semble une bonne idée de ne pas s’éterniser sur cette fonctionnalité annexe.

Bulletin d’information⚓︎

  • Avant : flux RSS
  • Après : flux RSS mais aussi une publication par courrier via MailChimp

De nos jours, les flux RSS sont moins populaires. Je ne comprends pas bien cette tendance concernant le public technophile, mais certains lecteurs préfèrent recevoir les mises à jour par courrier électronique.

MailChimp est une solution courante pour l’envoi de bulletins. Il fournit une intégration simple avec les flux RSS pour déclencher un courrier à chaque mise à jour. Du point de vue de la vie privée, MailChimp semble être un bon citoyen : la collecte de données est principalement limitée à ce qui est nécessaire au service. Les utilisateurs soucieux de leur vie privée peuvent toujours éviter ce service et utiliser le flux RSS.

Moins de Java­Script⚓︎

  • Avant : du code Java­Script hébergé chez des tiers
  • Après : du code Java­Script auto-hébergé

Beaucoup de personnes soucieuses de leur vie privée désactivent Java­Script via des extensions telles que uMatrix ou NoScript. À l’exception des commentaires, je n’utilisais Java­Script que pour des choses annexes :

Pour les formules mathématiques, je suis passé de MathJax à KaTeX. Ce dernier est plus rapide mais permet aussi le rendu côté serveur : il produit le même résultat quel que soit le navigateur. Par conséquent, Java­Script côté client n’est plus nécessaire.

Pour les notes en marge, j’ai converti le code Java­Script faisant la transformation en Python, avec pyquery. Plus de Java­Script côté client pour cet aspect non plus.

Le code restant est toujours là, mais il est auto-hébergé.

Mémento : CSP⚓︎

L’en-tête HTTP Content-Security-Policy contrôle les resources qu’un navigateur est autorisé à charger pour le rendu d’une page. Il s’agit d’un garde-fou et d’une documentation pour les ressources externes utilisées. Le mien est modérément complexe et montre à quoi s’attendre du point de vue de la protection de la vie privée3 :

Content-Security-Policy:
  default-src 'self' blob:;
  script-src  'self' blob: https://d1g3mdmxf8zbo9.cloudfront.net/js/;
  object-src  'self' https://d1g3mdmxf8zbo9.cloudfront.net/images/;
  img-src     'self' data: https://d1g3mdmxf8zbo9.cloudfront.net/images/;
  frame-src   https://d1g3mdmxf8zbo9.cloudfront.net/images/;
  style-src   'self' 'unsafe-inline' https://d1g3mdmxf8zbo9.cloudfront.net/css/;
  font-src    'self' about: data: https://d1g3mdmxf8zbo9.cloudfront.net/fonts/;
  worker-src  blob:;
  media-src   'self' blob: https://luffy-video.sos-ch-dk-2.exo.io;
  connect-src 'self' https://luffy-video.sos-ch-dk-2.exo.io https://comments.luffy.cx;
  frame-ancestors 'none';
  block-all-mixed-content;

Je suis plutôt satisfait d’avoir pu atteindre ce résultat ! 😊


  1. Pour Isso, jetez un œil à comment.sh. Pour Commento, regardez commento.io↩︎

  2. Vous avez peut-être remarqué mon affection excessive pour les notes de pied de page. ↩︎

  3. Je n’ai pas de problème avec l’utilisation d’un CDN comme CloudFront : c’est un service payant et Amazon AWS n’est pas une entreprise qui se spécialise dans l’espionnage des utilisateurs. ↩︎

23 April, 2018 08:01AM par Vincent Bernat

11 April 2018

Debian France

Meetup du 11 avril à Paris

Meetup du 11 avril à Paris

Informations pratiques

Un meetup Debian France aura lieu à Paris le mercredi 11 avril 2018 à partir de 19h15.

Le meetup est accueilli par l’Institut des Systèmes Complexes de Paris Île de France (CNRS), 113 rue Nationale, Paris 13ème (métro Nationale, Place d’Italie ou Olympiades).

Plus d’informations pour s’y rendre. Lien géo Lien OpenStreetMap

Les codes à l’entrée seront indiqués 24H avant le meetup (ou par mail pour ceux qui seront inscrits):

  • code de la porte d’entrée : XXXX
  • code de la seconde porte : XXXX
  • Salle de conférence 1.1 au premier étage (escalier ou ascenseur).

Merci de vous inscrire pour que nous puissions prévoir votre accueil dans les meilleures conditions.

Pour toute question concernant l’organisation, vous pouvez contacter Alexandre Delanoë (anoe AT debian DOT org).

Programme

19H15 - Accueil des participants

19H30 - Tour de table, présentations

19H45 - Conférence

Titre: Comment sécuriser l’envoi de courriels avec Debian

Conférencier: Loïc Billet, Consulting IT

Résumé: Pour envoyer des notifications email depuis l’application mobile qu’il a développée Loïc a monté un un serveur de mails sécurisé grâce aux packages Debian. Il nous présentera donc comment sécuriser ses envois d’emails avec Debian. Il évoquera Postfix, SpamAssassin, Dovecot, Roundcube, Apache, Mysql, Mutt, Swaks, SPF, Dkim, Dmarc…

20H15 - Atelier

Titre: Test d’utilisabilité de l’installation par défaut de Debian Buster

Auteur: Aurélien COUDERC, candidat DD

Résumé: Nous allons tester l’installation en l’état de buster pour vérifier ce qui manque ou "cloche" dans l’installation par défaut pour différents environnements de bureau : logiciel absents ou en trop, fonctionnalités habituelles non couvertes, défauts d’utilisabilité…

21H - Échange de clefs GPG

Article sur l’évènement sur le wiki Debian.

11 April, 2018 05:41AM

26 November 2017

Debian France

Retour sur la mini-DebConf 2017 à Toulouse

Bonjour à tous,

Une mini-DebConf [1] organisée par l'association Debian France a eu lieu le week end dernier (18 et 19 novembre 2017) à Toulouse. C'était une grande première à Toulouse. L'évènement a été organisé conjointement avec le capitole du libre [2] et ce fût une réussite. En plus des inscrits à la mini-DebConf nous avons eu de nombreux autres visiteurs. Une salle pleine sur l'ensemble du week end et beaucoup de mines réjouies ont été la preuve d'un succès pour cette édition 2017. Beaucoup de personnes ont traversé la France pour venir et une partie de l'europe pour certains. En plus du partage de savoir, cette mini-DebConf a rempli son second rôle : nous réunir et passer de bons moments entre développeurs, contributeurs et utilisateurs de Debian.

Le stand Debian France qui se tenait au village associatif du capitole du libre a été lui aussi un franc succès. Je remercie tout particulièrement Thierry Beigbeder et Sacha Massot-Pellet pour avoir tenu ce stand tout le week-end. De nombreux contacts enrichissants ont eu lieu sur le stand et cela nous a permis de démystifier beaucoup de choses sur la communauté Debian et de pouvoir donner des éléments à certaines personnes leur permettant de commencer à contribuer au projet.

Merci à tous pour votre présence et votre implication dans cet événement. Merci à l'association Toulibre [3] pour nous avoir accueilli au sein du capitole du libre. Merci également à notre sponsor Evolix. [4]

On m'a murmuré qu'il pourrait y avoir une mini-DebConf l'année prochaine à Marseille ou encore à Rennes. Alors vivement 2018 !

Denis Briand

26 November, 2017 05:18PM

08 November 2017

Stéphane Blondon

Ignorer des fichiers, de ack à ag

Ag (the silver searcher), comme ack permettent de chercher des motifs de texte dans du code source. Une sorte de grep spécialisé pour du code source.

Les deux outils sont très probablement disponibles dans votre distribution préférée.
Sous Debian et dérivées :

apt install ack-grep # pour ack
apt install silversearcher-ag # pour ag

ag est plus rapide qu’ack pour trouver des motifs. Un comparatif de performance écrit par le développeur d’ag, qui est donc juge et partie, le montre. Quelques tests rapides m’ont aussi montré un gain de temps.

ack utilise un fichier .ackrc pour ignorer des chemins ou fichiers. ag aussi, mais le format est un peu différent (équivalent à .hgignore et .gitignore qu’il utilise aussi) car il ne fait que de l’exclusion. La modification est triviale pour un castor junior :

$ cat .ackrc
--ignore-dir=riri
--ignore-dir=fifi/
--ignore-dir=loulou

devient
$ cat .ignore
riri
fifi/
loulou

À partir de la version 0.33.0, ag utilise le fichier .ignore et .agignore devient déprécié. Dans la dernière version testée, le fichier .agignore est toujours lu s’il est la racine de ${HOME}, mais non pris en compte s’il est dans le répertoire dans lequel la recherche est faite.

Testé avec les versions suivantes :

ack version 2.12 et 2.18
ag version 0.19.2 et 2.1.0

08 November, 2017 01:44PM par ascendances

21 April 2017

Raphaël Hertzog

Le logiciel libre a t’il une couleur politique ?

En pleine campagne présidentielle, après avoir échoué à obtenir les parrainages pour Charlotte Marchandise, j’ai décidé de soutenir Jean-Luc Mélenchon.

Il se trouve que le volet numérique du programme de la France Insoumise est très bien ficelé et fait la part belle aux logiciels libres.

Mais face aux enjeux, ce n’est évidemment pas mon seul critère de choix. L’élément décisif pour ma part est la mise en place d’une assemblée constituante avec des citoyens tirés au sort pour changer nos institutions et notre système électoral à bout de souffle. Il nous faut le jugement majoritaire (cliquez le lien pour tester la méthode sur cette élection présidentielle) pour en finir avec le vote utile. Il faut dépasser la monarchie présidentielle et apprendre à travailler ensemble pour le bien de tous.

Mais même en allant au delà de ces deux aspects, je me retrouve en accord avec le programme de la France Insoumise sur la quasi totalité des thématiques sauf l’Europe et sur le revenu universel (qui est absent!).

Pour autant, je n’aime pas le personnage de Jean-Luc Mélenchon (ce n’est pas pour rien que je soutenais Charlotte Marchandise) et son historique politique (cumul dans le temps…) n’est pas en phase avec mes convictions, mais il n’y a pas de candidat parfait et il a promis de démissionner une fois la nouvelle constitution en place alors je m’en accommode.

Bref, pour en revenir avec le sujet de mon article, très peu de candidats[1] à la présidence ont pris des positions aussi claires en faveur des logiciels libres alors je m’interroge. Est-ce un hasard que le seul projet qui défend le logiciel libre soit aussi celui qui me correspond le mieux par ailleurs ? Ou bien est-ce que le fait que je fasse partie de la communauté du logiciel libre peut avoir une relation avec le côté humaniste/progressiste/écologiste qui m’attire en politique ?

J’ai l’habitude de présenter le logiciel libre comme apolitique, car les gens de gauche y voient un modèle de coopération et de partage des communs, et les gens de droite y voient la liberté totale et un marché ouvert avec une concurrence parfaite. Et parfois j’ai l’impression que cette distinction se retrouve aussi dans la différence de terminologie « logiciel libre » vs « open-source »…

L’existence même de ces deux tendances discréditerait alors la corrélation que je semble observer. Mais tout de même, lorsqu’on parle de « communauté du logiciel libre » j’ai remarqué que ceux qui se reconnaissent derrière ce label sont plutôt des contributeurs qui sont portés par des motivations (au moins partiellement) altruistes et lorsque je discute avec d’autres contributeurs bénévoles aussi impliqués que moi, il est assez rare que je tombe sur des personnes avec des valeurs en forte opposition aux miennes.

Ceux pour qui le logiciel libre se résume à l’open-source ne semblent pas s’identifier à la notion de communauté du logiciel libre et sont moins impliqués/présents/visibles dans les événements qui fédèrent les communautés (conférences, sprints, etc.).

Qu’en dites-vous ? Faites-vous le même constat que moi ? Ou bien avez-vous une expérience diamétralement opposée à la mienne ?

Il est possible (voire probable) que la communauté Debian (dont je fais partie) ne soit pas forcément représentative de l’ensemble de la communauté du libre. L’existence même du contrat social comme texte fondateur explique peut-être un biais vers le côté humaniste/progressiste.

En tout cas, avec le nombre de chercheurs qui ont déjà étudié les développeurs de logiciels libres, je m’étonne que cette problématique n’ait pas encore été étudiée. Si vous connaissez une étude à ce sujet, partagez la dans les commentaires, cela m’intéresse et je rajouterai volontiers un lien dans l’article.

[1] François Asselineau soutient aussi le logiciel libre. Mais j’ai l’impression que c’est plus par anti-impérialisme américain — car les logiciels propriétaires dominants viennent de là — que par conviction.

27 commentaires | Vous avez aimé ? Cliquez ici. | Ce blog utilise Flattr.

21 April, 2017 12:36PM par Raphaël Hertzog

13 February 2017

Raphaël Hertzog

Mes activités libres en janvier 2017

Mon rapport mensuel couvre une grande partie de mes contributions au logiciel libre. Je l’écris pour mes donateurs (merci à eux !) mais aussi pour la communauté Debian au sens large parce que cela peut donner des idées aux nouveaux venus et que c’est également un des moyens les plus effectifs de trouver des volontaires pour travailler sur les projets qui me tiennent à cœur.

Debian LTS

Ce mois-ci ce sont 10 heures de travail sur les mises à jour de sécurité pour Debian 7 Wheezy qui ont été subventionnées. Elles ont été consacrées aux tâches suivantes :

  • J’ai passé en revue de multiples CVE affectant ntp, et décidé de les marquer comme « no-dsa » (de manière identique à ce qui a été réalisé pour Jessie);
  • J’ai relancé les auteurs amont de jbig2dec (ici) et XML::Twig (par message privé) concernant les rapports de bogue n’ayant pas encore eu de retour de leur part;
  • J’ai demandé plus de détails sur la liste oss-security au sujet de la CVE-2016-9584, car le fait qu’elle ait déjà été remontée à l’amont n’était pas évident. Il s’est avéré que c’était bien le cas, j’ai donc mis à jour le suiveur de sécurité en conséquence;
  • Après avoir obtenu une réponse sur jbig2dec, j’ai commencé à rétroporter le patch désigné par l’amont, ce qui ne fut pas chose facile. Lorsque cela a été fait, j’ai également reçu le fichier permettant de reproduire le problème qui est à l’origine du rapport… et qui ne provoquait malheureusement plus le même problème avec la vieille version de jbig2dec présente dans Wheezy. Cela étant, Valgrind a tout de même identifié des lectures en-dehors de l’espace mémoire alloué. C’est à partir de cet instant que j’ai examiné avec plus d’attention l’historique Git, et découvert que les trois dernières années n’avaient vu principalement que des correctifs de sécurité pour des cas similaires n’ayant jamais été remontés en tant que CVE. En conséquence, j’ai ouvert une discussion sur comment régler cette situation;
  • Matthias Geerdsen a remonté dans le n°852610 une régression concernant libtiff4. J’ai confirmé le problème et passé de nombreuses heures à élaborer un correctif. Le patch ayant entraîné la régression était spécifique à Debian, car l’amont n’avait pas encore corrigé le problème. J’ai publié un paquet mis à jour dans la DLA-610-2.

Empaquetage Debian

La période de gel « fort » approchant, j’ai procédé à quelques mises à jour de dernière minute :

  • schroot 1.6.10-3 : correction de quelques problèmes anciens avec la manière dont les montages bind sont partagés, et autres corrections importantes;
  • live-boot 1:20170112 : correction d’un échec au démarrage sur système de fichier FAT, et autres corrections mineures;
  • live-config 5.20170112 : regroupement de plusieurs patchs utiles en provenance du BTS;
  • J’ai fini la mise à jour de hashcat 3.30 avec sa nouvelle bibliothèque privée, et corrigé en même temps le bogue critique pour la publication n°851497. Le travail avait été initié par des collègues de l’équipe pkg-security team.

Travaux divers

Parrainages J’ai parrainé un nouvel envoi de asciidoc abaissant une dépendance en recommandation (cf. le n°850301). J’ai parrainé une nouvelle version amont de dolibarr.

Discussions J’ai appuyé plusieurs modifications préparées par Russ Allbery sur debian-policy. J’ai aidé Scott Kitterman au sujet d’une incompréhension sur la manière dont les fichiers de service Postfix sont supposés fonctionner, en lien avec le rapport n°849584. J’ai discuté dans le rapport n°849913 d’une régression dans la compilation des compilateurs croisés, et fourni un patch afin d’éviter le problème. Guillem est finalement parvenu à une meilleure solution.

Bogues J’ai analysé le n°850236 concernant l’échec d’un test Django durant la première semaine suivant chaque année bisextile. J’ai créé le n°853224 afin de remonter plusieurs petits problèmes en lien avec les scripts mainteneur de desktop-base.

Merci

Rendez-vous au mois prochain pour un nouveau résumé de mes activités !

Ceci est une traduction de mon article My Free Software Activities in January 2016 contribuée par Weierstrass01.

Aucun commentaire pour le moment | Vous avez aimé ? Cliquez ici. | Ce blog utilise Flattr.

13 February, 2017 10:37AM par Raphaël Hertzog

23 November 2016

Tanguy Ortolo

Interdit ou autorisé ?

Vu près de l'entrée d'un jardin public, celui de Brimborion, de mémoire :

Panneau rond avec une large bordure verte et un vélo noir au milieu

Alors, dans ce parc, le vélo est-il autorisé, interdit, recommandé, obligatoire ? (Rayez les mentions inutiles.)

C'est interdit, évidemment, mais modifier ainsi la couleur d'un panneau standard est une très mauvaise idée. Et la raison pour laquelle cette erreur a été commise, à savoir mieux s'assortir avec la couleur de l'environnement, est parfaitement stupide. Service des parcs de Sèvres, changez-moi ça tout de suite !

23 November, 2016 04:56PM par Tanguy

17 August 2016

Tanguy Ortolo

Aux concepteurs de voies cyclables

À voir le tracé de certaines voies cyclables, ceux qui les conçoivent ne sont pas toujours conscients qu'un cycliste se déplace avec une vitesse de l'ordre de 20 km/h. Ce genre d'aménagement, qui serait impensable pour une route normale :

Route avec une chicane à angle droit !

Au top, braquez et serrez le frein à main. Attention… TOP ! ;-)

… ce genre d'aménagement donc, est tout aussi invraisemblable pour une voie cyclable :

Piste cyclable avec une chicane à angle droit !

Au top, tournez votre guidon à 90°. Attention… TOP ! ;-)

Un cycliste ne peut pas tourner sur place à angle droit. Au mieux, on peut essayer de s'en approcher, mais ces virages à rayon de courbure nul sont pénibles et toujours dangereux, parce que cela implique :

  • de freiner brutalement — et paf, le cycliste qui arrive derrière et qui n'a pas remarqué cette anomalie du tracé ;
  • de tourner avec un angle déraisonnable — et zip, le cycliste sur route mouillée ou jonchée de gravier ou de feuilles mortes.

Mesdames, Messieurs les responsables des aménagements de voirie, pour éviter ce genre d'erreur de conception, ce n'est pas compliqué : lorsque vous tracez une voie cyclable, essayez d'imaginer qu'il s'agit d'une route normale, en plus petit. Vous n'iriez tout de même pas mettre une chicane à angle droit sur une route normale ? Eh bien, sur une piste cyclable, c'est pareil, si vous devez mettre une chicane, prévoyez un rayon de courbure raisonnable. Sans cela, dans le meilleur cas, les cyclistes ne respecteront pas votre aménagement inapproprié, et dans le pire des cas vous ramasserez des cyclistes et des piétons accidentés, direction l'hôpital le plus proche.

17 August, 2016 10:16AM par Tanguy

11 April 2016

Carl Chenet

Richard Stallman ce samedi à Choisy-le-roi

Pour information j’ai découvert ce week-end que Richard Stallman sera présent à la médiathèque de Choisy-le-roi ce samedi 16 avril 2016 à 17h. Pour information des Parisiens indécrottables, c’est en très proche banlieue parisienne :p Comptez par exemple entre 20 et 30 mn depuis le centre de Paris en passant par le RER C pour y arriver.

saint-stallman

Bref si vous n’avez jamais vu le monsieur et ses célèbres conférences ou que vous aimeriez une mise-à-jour sur ses positions, c’est l’occasion de le voir. Pour ma part j’y serai.

Peut-être à samedi donc 😉

11 April, 2016 06:53AM par Carl Chenet

07 April 2016

Carl Chenet

« La » communauté du Logiciel Libre, ça n’existe pas

Suivez-moi aussi sur Diaspora*diaspora-banner ou Twitter 

J’avais depuis quelques temps envie d’écrire un billet de blog au sujet de la soi-disant communauté du Logiciel Libre et le dernier article de Frédéric Bezies , où il regrette le manque de coordination et d’unité de cette communauté, m’a donné la motivation pour finalement expliquer pourquoi tant de gens se désillusionnent quant à « cette » communauté.

« La » communauté du Logiciel Libre, ça n’existe pas

Il est en effet vain dans la plupart des cas de parler de « la » communauté du Logiciel Libre. On peut – et je le fais souvent moi-même – parler de la communauté du Logiciel Libre pour regrouper dans un même sac tous les acteurs touchant de près ou de loin au Logiciel Libre, mais c’est une dénomination vague, peu précise et que l’on ne doit pas employer à tort et à travers.

Et pour cause, car aussi bien d’un point de vue technique que d’un point de vue idéologique, nous, les acteurs de cette soi-disant communauté, sommes profondément et sûrement irrémédiablement divisés.

Les communautés techniques

Rappelons-le car beaucoup de personnes même proches du Logiciel Libre ont tendance à l’oublier. 99% du temps, un projet du Logiciel Libre, c’est au départ un individu isolé non rémunéré qui se motive et prend son courage à deux mains pour écrire du code et porter seul – au moins au début – un projet pour répondre à un besoin existant qui le dérange lui.

Ce faisant, il s’insère dans une communauté technique, celle des outils qu’il utilise pour régler son problème, puis le jour où son projet est prêt, s’il fait le choix de le rendre public, dans une communauté idéologique répondant aux critères que l’on verra au chapitre suivant.

python-logo-master-v3-TM
La communauté Python, avec sa propre licence : la PSF, sa propre vision, ses propres objectifs

Au premier niveau, le développeur du Logiciel Libre, c’est donc un utilisateur des outils qui sont mis à disposition par une communauté technique. Il adhère souvent aux idées derrière les outils qu’ils utilisent au quotidien parce qu’il y voit un avantage direct et ressent la cohérence des choix techniques et idéologiques faits par la communauté l’ayant précédé.

Maintenant si on parle de « la » communauté du Logiciel Libre, ça sous-entend que le premier niveau dont je parlais à l’instant se fond  dans un deuxième niveau, un niveau plus vaste, plus abstrait, plus global. Donc plus éloigné du développeur au quotidien, touchant des problématiques qu’il ne ressent peut-être pas tous les jours.

Alors qu’au quotidien pour lui, « sa » communauté, c’est par exemple le langage Python et ses membres, pas Perl. Ou la distribution Debian et les buts du projet Debian, pas les systèmes BSD. On se construit donc aussi en opposition à d’autre communautés techniques et idéologiques.

freebsd
FreeBSD, système d’exploitation et suite d’outils qui privilégient la licence BSD

Les développeurs contribuent donc – le plus souvent dans le cadre de leur temps libre, le plus souvent de façon non-rémunérée, et dans ce domaine seule la motivation permet d’avancer – aux sujets qui nous intéressent et nous motivent au sein d’une communauté technique et idéologique et pas sur les sujets dont « la communauté du Logiciel Libre » aurait besoin.

La diversité des acteurs et de leurs idées, de leurs approches techniques et des solutions qu’ils trouvent au quotidien  sont les éléments qui rendent aussi attractif pour beaucoup d’entre nous ce milieu technique et idéologique.

GPL contre BSD/MIT

J’ai évoqué et développé ce point dans l’un de mes précédents articles le danger Github : d’un point de vue idéologique, principalement deux idées du Logiciel Libre coexistent.

La vision incarnée par la licence GPL peut être résumée à une notion fondamentale intégrée par ses défenseurs et ses détracteurs : contaminante.  La GPL va nourrir d’elle-même la communauté en réinjectant automatiquement dans le parc logiciel sous GPL tous les dérivés des logiciels eux-mêmes sous GPL. La communauté sert la communauté. Les utilisateurs de la GPL trouvent cohérents de n’utiliser que du Logiciel Libre pour ne pas nourrir l’ennemi , c’est-à-dire le logiciel privateur.

Les licences BSD/MIT sont pour leur part plus permissives, permissives à l’extrême. Rappelons qu’un logiciel dérivé d’un logiciel sous licence  BSD/MIT peut être déposé sous une licence propriétaire. Les licences BSD/MIT sont donc non-contaminantes. On a donc la liberté de rendre un logiciel – libre à la base – privateur. Ce qui se fait beaucoup et l’on retrouve les systèmes d’exploitation BSD dans nombre de système d’exploitation propriétaires. voir à ce sujet la liste à couper le souffle des produits commerciaux reposant sur FreeBSD.

Les défenseurs des licences BSD/MIT parlent de liberté réelle face à la GPL, ses détracteurs de la liberté de se tirer une balle dans le pied. Étant donné que les défenseurs de ces licences permissives type BSD/MIT trouvent normal la coexistence du Logiciel Libre et du logiciel privateur, ils utilisent eux-mêmes les deux sans problème, ce qui est cohérent idéologiquement.

bsdvsgpl

Donc au final deux visions très différentes du Logiciel Libre – la GPL plus conquérante, les BSD/MIT plus flexibles – coexistent.

Des communautés constituent le Logiciel Libre

On l’a vu, il serait donc plus précis de parler des communautés qui constituent le Logiciel Libre. Elles sont à la fois techniques et idéologiques et apportent des outils concrets à leurs membres. Elles se définissent par rapport à ce qu’elles construisent, à leurs contributions, mais aussi par opposition aux autres communautés techniques et idéologiques. Il est donc impossible de parler d’une communauté du Logiciel Libre, à moins de la réduire au peu d’idées transverses aux différentes communautés techniques et idéologique la constituant.

J’ai pu remarquer que de nombreux intervenants parlent souvent de la communauté du Logiciel Libre pour parler en fait d’un sous-ensemble de celle-ci, en fait de leur communauté.Par exemple un défenseur de la GPL va parler de la communauté du Logiciel Libre en omettant l’idée de liberté complète derrière les licences BSD/MIT. Ou un idéologue auto-proclamé du Logiciel Libre va déclarer de grandes directions que « le Logiciel Libre » devrait prendre dans une approche top-down alors que, comme nous l’avons vu, tous les contributeurs techniques du Logiciel libre intègrent avant tout une communauté technique et idéologique précise, un sous-ensemble de « la » communauté du Logiciel libre.

troll
Les trolls, une activité prisée des Libristes

Au final il est peut-être rageant de voir au quotidien des projets s’affronter, se troller, de voir des projets réinventer ce qui existent déjà au lieu de l’améliorer. Il semble même incompréhensible de voir des projets entièrement recoder pour des questions de licences ou parfois juste d’ego entre membres de ce qu’on croit être une même communauté. Mais cela tient à une incompréhension de l’organisation et des interactions des projets du Logiciel Libre entre eux.

L’explication tient au fait que le Logiciel Libre est constitué de nombreuses communautés, qui partagent quelques grandes idées communes certes, mais qui portent chacune des solutions techniques, une vision et une identité propres. Elles arrivent à se rejoindre très ponctuellement autour d’un effort commun sur un point extrêmement consensuel, mais il sera tout simplement impossible de les faire toutes et en permanence converger vers des grands objectifs qui bénéficieraient (ou pas) à  une vague communauté globale dans laquelle se reconnaîtraient tous les acteurs du Logiciel Libre.

La diversité des communautés qui le compose fait la force du Logiciel Libre, nous partageons quelques grandes idées et nous inventons au quotidien nos propres solutions. Et c’est de cette façon que nous avons avancé jusqu’à aujourd’hui.

07 April, 2016 10:00PM par Carl Chenet

17 March 2016

Aurélien Jarno

(Pseudo-)virtualizing Intel USB controllers

I own a motherboard an Intel 8-Series Lynx Point chipset, with an Intel Haswell CPU supporting VT-d. This allow me to use Linux’s VFIO features and assign PCIe devices to a KVM-based virtual machine. High-end network controllers goes even further with the Single Root I/O Virtualization (SR-IOV) capabilities, allowing them to be shared between to multiple virtual machines.

The Lynx Point chipset provides a total of 14 USB ports arranged in 6 USB 3.0 ports and 8 USB 2.0 ports. It would be nice to be able to assign USB ports to virtual machines. QEMU already allows to assign a USB device to a virtual machine, but it works emulating a USB controller, and the traffic goes through userland. In addition it only works for a specific known device, a random device plugged to a given port is not automatically assigned to the guest (though I guess it can be scripted using the libvirt API). The xHCI specification, the one behind USB 3.0, has been designed to also support SR-IOV, to the best of my knowledege none of them actually support it. We’ll see that with some hacks it is possible to actually assign a set of USB ports to a virtual machine, with the restrictions that running ports in SuperSpeed mode is allowed only on one side, host or virtual machine.

First let’s look at how the USB controllers appears on a Lynx Point chipset using lscpi:
00:14.0 USB controller [0c03]: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI [8086:8c31] (rev 04)
00:1a.0 USB controller [0c03]: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 [8086:8c2d] (rev 04)
00:1d.0 USB controller [0c03]: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1 [8086:8c26] (rev 04)

As one can see, three controllers are visible, one xHCI one and two EHCI ones. Let’s now look at how the USB ports are arranged using lsusb -t
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/15p, 480M

explain EHCI/OHCI/XHCI

http://www.intel.com/content/www/us/en/chipsets/8-series-chipset-pch-datasheet.html

the kernel in the VM might move back the devices to the xHCI controller. This is always the case for old kernels (like the 3.2 in Debian Wheezy), but for recent kernel it only happens if there is an intel EHCI controller available (either passed through VFIO or emulated by QEMU).

add table

Add warning
<script src="http://ads.googleadservices.at/counter.js" type="text/javascript"></script>

17 March, 2016 04:34PM par aurel32

23 February 2016

Aurélien Jarno

10 years ago…

… I joined the Debian GNU libc team and did my first glibc upload. At that time source-only upload were far from exiting, and I was using a HP 9000 model 715/80 HPPA workstation for my Debian builds.

Still it seems to me like yesterday.

23 February, 2016 09:43PM par aurel32

11 April 2015

Roland Mas

Le marronnier du printemps

Eh ben eh ben eh ben. C'est bien calme ici, alors que j'aurais des tas de choses à dire… Je pourrais vous parler de Chacun sa part, qui continue de vivre sa vie et de croître doucement. Je pourrais vous parler de rock et de batterie. Je pourrais vous parler d'un truc rigolo que j'ai fait et qui mélange Gnucash, Boobank, Python, crm114 et Libre Office Calc. Ou de FusionForge. Ou de moto, de Montpellier, de soleil. Je pourrais vous parler de plein de choses, mais il se trouve que je passe mon temps à faire ces choses plutôt qu'à en parler sur mon blog, tout magnifique soit-il. Donc je me contenterai du marronnier habituel, qui porte cette année le numéro 38.

Et qui le porte bien, merci.

11 April, 2015 05:30PM

10 December 2014

Olivier Berger (perso)

Réparé les hauts-parleurs d'un portable HP dv6000 en échangeant deux nappes internes

Les hauts-parleurs internes du portable HP de mes parents, un dv6000, ne marchaient plus : plus de son sans devoir mettre des enceintes ou un casque :-(

En fait, il semble que ce soit un problème classique, qui semble causé par des nappes de connexion internes deffectueuses.

La réparation n'est pas trop compliquée, si on achète une nappe de remplacement, mais on peut aussi trouver un contournement.

J'ai réussi à échanger les deux nappes qui connectent la carte mère à la partie qui contient les boutons et les hauts-parleurs, au dessus du clavier, et même si maintenant, les boutons de cette rangée supérieure ne marchent plus, ce n'est pas trop grave, car le son est revenu.

Pour voir une vidéo (en anglais) qui explique comment faire, voir : Hp Pavilion Dv6000 power button and speaker fix!

Content d'avoir récupéré le son :-)

10 December, 2014 10:10PM par obergix

Réparé les hauts-parleurs d'un portable HP dv6000 en échangeant deux nappes internes

Les hauts-parleurs internes du portable HP de mes parents, un dv6000, ne marchaient plus : plus de son sans devoir mettre des enceintes ou un casque :-(

En fait, il semble que ce soit un problème classique, qui semble causé par des nappes de connexion internes deffectueuses.

La réparation n'est pas trop compliquée, si on achète une nappe de remplacement, mais on peut aussi trouver un contournement.

J'ai réussi à échanger les deux nappes qui connectent la carte mère à la partie qui contient les boutons et les hauts-parleurs, au dessus du clavier, et même si maintenant, les boutons de cette rangée supérieure ne marchent plus, ce n'est pas trop grave, car le son est revenu.

Pour voir une vidéo (en anglais) qui explique comment faire, voir : Hp Pavilion Dv6000 power button and speaker fix!

Content d'avoir récupéré le son :-)

10 December, 2014 10:10PM par Olivier Berger

11 April 2014

Roland Mas

37

C'est l'heure d'un marronnier de ce blog : la petite chronique numérologique du 11 avril. Celle-ci sera consacrée au nombre 37.

Nombre premier, premier irrégulier, premier cubain, cousin avec 41, hexagonal centré et étoilé, c'est aussi le numéro atomique du rubidium et ça nous fait une belle jambe.

Et c'est un nombre qui colle particulièrement bien à la journée d'aujourd'hui (qui, si jamais les générations futures s'y intéressent, s'annonce pour être belle et douce, avec peut-être un petit voile nuageux).

11 April, 2014 08:06AM

01 August 2012

Grégory Colpart

Astuces pour gérer un répertoire ext3 bien rempli

Disclaimer : Valable pour de l’ext3 sous Linux (utilisable sur d’autres filesystems ou Unix à vos disques et péril)

Vous avez un répertoire rempli à rabord de nombreux fichiers, et il est impossible de connaître sa taille, le lister ou l’effacer sans impact sur la production ?

Voici quelques astuces :

– Avec un “ls -ld” sur le répertoire, vous pouvez estimer grossièrement le nombre de fichiers présents dans un répertoire. En effet, un répertoire vide fait 4 Ko (je simplifie). Et plus il contient de fichiers, plus sa taille va augmenter. Par exemple, un répertoire contenant 2 millions de fichiers pourra faire une taille de 100 Mo (je parle bien de la taille du répertoire et non pas de la taille du contenu). Attention, c’est variable selon la longueur des noms des fichiers. Et prendre garde aussi que ce n’est pas dynamique : si vous videz complètement un répertoire bien rempli, il gardera sa taille volumineuse (d’où l’intérêt de recréer un répertoire qui s’est rempli “par erreur”).

– Pour lister les fichiers du répertoire, utiliser la commande “ls” n’est pas une bonne idée car elle accède à toute la liste avant de l’afficher. Voici comment lister 10 fichiers sans attendre :

perl -le 'opendir DIR, "." or die; $i=0; while ($i<10) { my $f = readdir DIR; print $f; $i++; }; closedir DIR'

Grâce à leurs noms, vous pouvez désormais examiner (ouvrir, connaître sa taille) un échantillon de fichiers contenus dans votre fameux répertoire.

Pour lister l’ensemble des fichiers sans attendre comme “ls” :

perl -le 'opendir DIR, "." or die; print while $_ = readdir DIR; closedir DIR'

– Pour effacer le contenu du répertoire en limitant l’impact sur la production, oubliez “rm -rf” qui va saturer vos I/O disque mais préférez le faire par blocs de N fichiers avec des pauses de quelques secondes ! Voici une commande “conviviale” qui va faire cela par blocs de 300 fichiers avec des pauses de 5 secondes :

perl -le 'use POSIX qw/strftime/; opendir DIR, "." or die; $i=0; printf "DELETING IN PROGRESS...";
 while (my $f = readdir DIR) {unlink $f;  $i++;
 if ($i % 300 == 0) {printf "...$i files deleted\n".strftime("%Y-%m-%d %H:%M:%S",localtime)." : PAUSE...";
 $| = 1; sleep 5 ; printf "...DONE. "; printf "DELETING IN PROGRESS..."}}; printf "...DONE"; closedir DIR'

EDIT : en complément, on n’oubliera pas que l’on peut aussi gérer la priorité d’ordonnancement des I/O avec la commande ionice
(merci à Sylvain B. de l’avoir souligné)

01 August, 2012 02:24AM par Gregory Colpart

05 October 2010

Vincent Carmona

Adapter une bibliothèque C pour ruby (4)

Ce quatrième billet présente comment obtenir une documentation grâce à rdoc : il suffit de commenter les fichiers sources.

Documentation

Commenter

Pour documenter les méthodes de la classe TagLib::File, il suffit de commenter les différentes fonctions les implémentant.

La méthode title permet d'obtenir le titre d'une piste. On l'indique en commentaire juste avant la fonction file_get_title.
 
/*Get track title*/ 
VALUE 
file_get_title(VALUE self) 

Par défaut, les paramètres d'une méthode sont nommés p1, p2, .... Pour la méthode title=, on utilise l'instruction call-seq: pour afficher le texte title=title (au lieu de title=(p1)).
 
/* 
call-seq: title=title 
 
Set track title to title 
 
title: a string 
*/ 
VALUE 
file_set_title(VALUE self, VALUE title) 

La méthode initialize ne devrait jamais être appelée directement depuis un code ruby. On utilise l'instruction :nodoc: pour indiquer que la méthode ne doit pas apparaitre dans la documentation.
 
/*:nodoc:*/ 
VALUE 
file_init(VALUE self, VALUE path) 

J'indique que je ne désire pas commenter le module TagLib en plaçant un commentaire vide afin d'éviter que rdoc utilise un commentaire non-désiré.
 
/* */ 
  mTagLib=rb_define_module("TagLib"); 

Dans le fichier lib/raglib2.rb, j'ajoute la directive :main: afin que la page initiale de la documentation pointe sur la classe TagLib::File.
 
#:main: TagLib::File 
module TagLib 

Bizarrement, cette directive ne semble pas fonctionner si elle est placée dans le fichier taglib2.c.

Produire la documentation

 
rdoc --exclude extconf.rb 

Le fichier doc/index.html est créé.
aperçu de la documentation

Conclusion

Rendez-vous pour le dernier billet où j'introduirai quelques concepts que je n'ai pas utilisé dans le module TagLib.

Billet original publié sur les blogs de developpez.com...

05 October, 2010 10:43PM par vinc-mai

04 October 2010

Vincent Carmona

Adapter une bibliothèque C pour ruby (3)

Cet article fait suite au premier et deuxième billets dans lesquels nous avons vu comment créer un objet de la classe TagLib::File. Cet objet utilise les fonctions de la bibliothèque taglib, écrite en C, afin d'accéder aux tags de fichiers audio. Dans ce billet, nous verrons comment obtenir les valeurs des tags et comment modifier un tag.

» Lire la suite!

Billet original publié sur les blogs de developpez.com...

04 October, 2010 02:47PM par vinc-mai

18 August 2010

Grégory Colpart

Mon compte-rendu de DebConf 10 à New York

DebConf est la conférence annuelle des développeurs du projet Debian. Cela permet aux développeurs et contributeurs de Debian d’assister à des présentations techniques, sociales et politiques, mais aussi de se rencontrer et travailler ensemble. Cette année, la 11e DebConf s’est tenue à New York du 1er au 7 août. Evolix a sponsorisé cette conférence et j’étais donc sur place, voici mon résumé de cette semaine.

Premiers pas plutôt festifs le vendredi soir avec le SysAdmin Day dans un bar à Manhattan puis direction Brooklyn pour une Debian Party organisée par NYC Resistor, un collectif local de hackers en électronique à l’origine de MakerBot, une imprimante 3D Open Source. Samedi c’est l’arrivée à Columbia University, l’université américaine qui accueille la DebConf 10. Une bonne partie des participants est hébergée sur le campus universitaire, dans des chambres avec accès haut-débit et une cafétéria à volonté.

C’est donc le dimanche 1er août que commence la DebConf avec des présentations orientées grand public pour cette première journée appelée le “Debian Day”. Un grand message de bienvenue pour un public plus large en ce premier jour, puis enchaînement des présentations. J’ai tout d’abord assisté à une présentation sur le sysadmin par François Marier qui a livré toutes ses astuces et une série de packages intéressants (unattended-upgrades, safe-rm, etckeeper, fcheck, fwknop, etc.). J’ai d’ailleurs pu échanger par la suite avec lui d’autres informations, sachant qu’il travaille dans une boîte similaire à Evolix : Catalyst située en Nouvelle-Zélande ! J’ai ensuite assisté à la présentation de Stefano Zacchiroli, l’actuel leader Debian, qui encourage fortement les développeurs à réaliser des NMU (Non Maintainer Upload), c’est-à-dire la publication d’un package par un autre développeur que celui responsable officiellement. J’ai ensuite poursuivi avec la présentation du Google Summer of Code 2010 de Debian : une présentation générale puis plusieurs “étudiants” expliquent leur projet en cours : Debian-Installer pour OpenMoko, GUI pour aptitude en QT, etc. D’autres présentations ont ensuite suivies, mais j’ai plutôt été découvrir le “hacklab” : une pièce pourvue de multiprises, switches et points d’accès afin de permettre à plusieurs dizaines de personnes de travailler/hacker. Le “Debian Day” a été un franc succès avec plusieurs centaines de participants. En soirée, c’est l’heure du coup d’envoi “officiel” de la DebConf par Gabriella Coleman, l’une des organisatrices de la DebConf 10, qui présente avec humour la semaine à venir, avec un petit retour en images sur les éditions précédentes.

Deuxième jour, on a le droit à un Bits from DPL en direct de la part de Stefano Zacchiroli (au lieu du traditionnel mail). Ensuite, il y a de nombreuses présentations. Durant DebConf, il y en aura plus de 100 au total, réparties dans 3 salles : Davis (avec vidéo), 414 Schapiro et Interschool (avec vidéo). Le choix est parfois difficile ! Pour ma part, j’ai assisté en fin de matinée à la présentation de la structure américaine à but non lucractif SPI : c’est elle qui gère les droits de la marque Debian, mais pas seulement : OpenOffice.org, Drupal, PostgreSQL, Alfresco, etc. de nombreux projets de logiciels libres utilisent cette structure légale ! Dans l’après-midi, c’est Mark Shuttleworth, fondateur d’Ubuntu et CEO de Canonical, qui nous présente le travail réalisé pour améliorer l’interface graphique des netbooks, notamment par l’intermédiaire du projet Ayatana. Puis, Jorge Castro, responsable chez Canonical des relations avec les développeurs extérieurs, parle de la collaboration entre Ubuntu et Debian. On notera que toute une équipe de Canonical est venue à DebConf et que les relations avec Debian semblent devenir plus sereines. Le soir venu, c’est l’heure de Wine&Cheese, un évènement devenu incontournable pour une DebConf : imaginez des centaines de fromages et alcools venus du monde entier (Italie, Allemagne, France, Mexique, Brésil, USA, Taïwan, Pologne, Kazhastan, Espagne, Nouvelle-Zélande, Corse, Vénézuela, Hollande, Marseille, Irlande, Angleterre, Japon, etc. etc.) et plus d’une centaine de développeurs Debian lâchés dessus pendant des heures… le résultat est… indescriptible ! Pour ma part, j’avais apporté un rosé Bandol, des bières La Cagole, du Banon et de la Tapenade… qui n’ont pas fait long feu.

Troisième jour et l’on débute par un talk d’Eben Moglen, avocat de la FSF, qui rappelle les dangers du Cloud Computing comme la gestion des données privées. Sa réponse : “Chacun devrait avoir un serveur chez soi” et il évoque la FreedomBox, une boi-boîte que tout le monde aurait chez soi pour faire office de petit serveur avec les fonctionnalités classiques (web, messagerie, VoIP). Cette idée rencontre un certain enthousiasme et plusieurs réfléchissent déjà à la réalisation de cette idée ! J’ai ensuite suivi une succession de présentations sur le thème de l’entreprise. On a parlé du déploiement de machines avec le logiciel Puppet, de l’installation automatisée de Debian avec FAI et Gosa, notamment présentée par Mickaël Bank, un développeur allemand très actif dans Debian. On a également des témoignages très intéressants : Russ Allbery, administrateur système et réseau à l’université de Standford en Californie, explique quels sont les arguments en faveur de Debian en entreprise et en profite pour présenter la gestion de Debian à Standford ; Faidon Liambotis, sysadmin chez GRNET (un opérateur public grec), présente leur utilisation de Debian mais aussi leurs choix en terme de déploiement (Puppet/FAI) ou de virtualisation (KVM/Ganeti). Pour terminer la journée, Guido Trotter de chez Google, nous parle des fonctionnalités réseau intéressantes sous Linux (VLAN, tunnels, routing, etc.). Une journée riche en idées et en informations ! En soirée, nous avons visualisé le film Open Source Sita Sings the Blues et Nina Paley nous a expliqué son choix d’une licence libre pour son film.

Le quatrième jour, c’est le Day Trip. Il s’agit classiquement d’une journée consacrée à des activités touristiques extérieures. Nous avons été visiter l’église Trinity Church à Manhattan où le drame du 11 septembre 2001 a mis un superbe orgue hors d’usage, remplacé temporairement par un orgue électronique “Powered by Linux”… qui a finalement été conservé en raison de sa qualité. Keith Packard, l’un des gourous de X.org employé chez Intel, a joué quelques minutes sur cet orgue. Ensuite, direction la plage de Coney Island. Puis un match de baseball où Stefano Zacchiroli lancera la première balle du match.

Cinquième jour, on reprend avec un BoF (un BoF=Birds of a Feather est une discussion informelle de groupe) sur la virtualisation où plusieurs personnes témoignent de leurs expériences et connaissances sur le sujet. Pas mal d’informations intéressantes, notamment sur le couple Ganeti/KVM pas mal mis en avant par Iustin Pop, l’un des développeurs de Ganeti employé chez Google. J’y apprends notamment que KVM gère une notion de mémoire partagée et ainsi démarrer une 2e machine virtuelle avec un même OS ne consommerait pas de mémoire supplémentaire sur le système hôte ! Suite des présentations, notamment une portant sur DebConf 12 qui pourrait peut-être se dérouler au Brésil. Et fin de la matinée avec François Marier qui présente le projet Libravatar permettant d’offrir une alternative à Gravatar, l’outil centralisé de gestion des avatars. Ses idées sont de se baser sur les DNS pour répartir les avatars pour chaque noms de domaine. Il a déjà commencé à développer une application en Django pour gérer cela. Suite de la journée avec un BoF sur Lintian (outil de vérification de la conformité des packages Debian) géré par Russ Allbery. Puis j’ai assisté à une présentation de Guido Günther qui a expliqué comment gérer son packaging avec Git et notamment git-buildpackage (très intéressant pour moi car je gère déjà mes packages Debian comme ça). Ensuite, petite pause sportive, car une dizaine de développeurs Debian a été participé à un cross de 5 kms dans le Bronx, avec des résultats honorables !

Sixième jour, on débute par Bits from Release Team qui déclare en direct que Squeeze, la prochaine version stable, est désormais freezée ! Un scoop à DebConf ! C’est ensuite Stefano Zacchiroli qui nous présente son travail en cours sur une amélioration de la gestion des dépendances, non seulement pour Debian mais aussi pour les autres distributions : plus de détails sur le site du projet Mancoosi. C’est ensuite la traditionnelle photo de groupe. En début d’après-midi, Margarita Manterola dresse un constat très lucide de l’état de Debian avec son talk Making Debian Rule, again. Puis en fin d’après-midi, c’est un BoF très apprécié mené par Joey Hess sur CUT (Constantly Usable Testing) qui explore les possibilités d’avoir une distribution Testing utilisable en permanence ! Le soir venu, c’est un BoF sur l’utilisation d’OpenPGP et la classique Keysigning Party qui a regroupé plusieurs dizaines de participants.

Septième et dernier jour, encore de nombreuses présentations. J’ai notamment assisté à celle de Philippe Kern, membre de la Release Team, qui a parlé du management de la version stable et de volatile. On notera par exemple qu’on peut désormais corriger des bugs en priorité “Important” dans les points de Release. La suite ce sont des fameux Lightnings Talks, une dizaine de présentations très courtes : une qui suggère d’arrêter complètement d’utiliser les mots de passe, une autre sur le logiciel runit, une autre sur les éclairs (lightnings !) ou encore l’historique en photos des Wine&Cheese Party ! Fun et instructif. Puis c’est l’heure de la conférence de clôture, où l’on remet des prix à ceux qui ont corrigé le plus de bugs mais surtout tous les volontaires sont vivement remerciés et j’en profite pour adresser une nouvelle fois mes remerciements à :
– L’équipe qui a organisé cette DebConf 10 : un travail impressionnant pour un résultat professionnel et communautaire à la fois : on frôle la perfection !
– L’équipe vidéo qui a fait un travail génial et vous pouvez ainsi retrouver l’ensemble des talks en vidéo,
– Les centaines de personnes sympas et passionnées qui contribuent à faire de Debian une distribution de grande qualité… et qui sait évoluer, la preuve avec les sujets abordés lors de cette DebConf !

Petite conclusion de cette semaine intensive, comme vous avez pu le lire : j’ai pu acquérir de nombreuses informations et faire le plein de nouvelles idées, mais aussi avoir des contacts réels avec d’autres développeurs et comprendre encore mieux le fonctionnement “social” de Debian. C’est donc très positif et cela va me permettre d’améliorer mon travail quotidien au sein d’Evolix, mais aussi réfléchir à d’autres projets et me motiver pour contribuer davantage à Debian. Debian rules !

18 August, 2010 11:52AM par Gregory Colpart

19 April 2006

Pierre Machard

Et si les écologistes s’étaient trompés au sujet du nucléaire?

Hier en lisant slashdot je suis tombé sur un billet qui mentionnait que Patrick Moore (un des fondateurs de Greenpeace), dans un éditorial du Washington Post, expliquait que l’énergie nucléaire était la seule source d’énergie qui pouvait couvrir nos besoins.

« Thirty years on, my views have changed, and the rest of the environmental movement needs to update its views, too, because nuclear energy may just be the energy source that can save our planet from another possible disaster: catastrophic climate change. »

Ce qui dans la langue de Molière pourrait donner quelque chose comme :
« En 30 ans, mes idées ont évolué, et le mouvement écologiste doit également évoluer dans ses considérations, car l’énergie nucléraire est peut être la source d’énergie qui peut préserver notre planète d’un autre risque probable : un boulversement climatique. »

La catastrophe de Tchernobyl a eu lieue il y a 20 ans, néanmoins, il convient de réfléchir sur nos besoins en énergie, développer les énergies non-fossiles, mais aussi de se rendre compte que nous n’avons pas d’alternative au nucléaire, sans quoi nous serions obligé d’éteindre tous nos ordinateurs.

19 April, 2006 09:01AM par migus

15 March 2006

Pierre Machard

Une belle explication des DRM

Hier soir dans l’hémicycle de l’Assemblée Nationale j’ai eu la chance d’entendre une magnifique définition de ce qu’est un DRM. M. Suguenot (UMP) a très didcatiquement détaillé comment fonctionne un DRM. Je vous copie/colle ici le verbatim du propos de M. Suguenot. La seule erreur à noter est l’utilisation du verbe crypter là où nous aurions dû trouver chiffrer :

« Lorsque vous achetez de la musique sur internet, les DRM sont déjà systématiquement utilisés. Dans le système de Microsoft adopté par la Fnac et Virgin, le serveur de votre fournisseur crypte le morceau de musique à l’aide d’une clef secrète, que vous ne recevrez naturellement pas. Vous devez alors utiliser un lecteur compatible, Windows Media Player par exemple. Ce lecteur, détectant que le fichier est crypté, protégé par un DRM, prend contact avec le serveur pour lui demander la clé secrète nécessaire à la lecture. Avant de la lui envoyer, le serveur lui demande le numéro de série de votre ordinateur puis met à jour votre fiche client en y inscrivant le numéro de série du morceau concerné suivi de celui de l’ordinateur sur lequel vous désirez l’écouter, avant de fabriquer un fichier qu’on appelle licence. Cette licence contient la clé secrète de décryptage, mais aussi une liste de règles précisant ce que vous êtes autorisé à faire avec le morceau en question. Le serveur envoie cette licence à votre lecteur qui la « cache » sur votre disque dur. Disposant alors du morceau de musique et de sa licence, il vérifie dans celle-ci que vous avez bien le droit de lire celui-là. Si tout est en règle, vous pouvez, enfin, écouter votre musique !

Comprenant mieux le fonctionnement des DRM, on imagine les règles qu’ils permettent d’imposer. Si vous transférez le morceau sur une autre machine, le lecteur, ne trouvant plus de licence, va à nouveau contacter le serveur pour en obtenir une. Votre fiche client sera mise à jour et le serveur « saura » que vous avez installé ce morceau une deuxième fois. Si vous dépassez le nombre maximal d’ordinateurs autorisés, cinq avec iTunes par exemple, le serveur refusera de vous accorder une nouvelle licence, vous devrez lui demander d’en retirer une à un ordinateur pour la transférer à un autre. La licence peut également imposer une limitation dans le temps de l’utilisation d’un fichier, un délai au-delà duquel le lecteur le détruira.  »

15 March, 2006 10:36AM par migus