August 24, 2026

Vincent Bernat

Une introduction interactive au Spanning Tree Protocol

Avertissement

Cet article contient des exemples interactifs. Pour les visualiser et interagir avec eux, vous devez quitter votre lecteur de flux.

Imaginez que vous louiez des bureaux pour un Ă©vĂ©nement de trois jours. Vous installez Ă  la hĂąte quelques commutateurs Ethernet et scotchez des cĂąbles au sol pour connecter tout le monde. Malheureusement, Gaston, votre collĂšgue le plus maladroit, trĂ©buche sur un cĂąble Ă  chaque fois qu’il se lĂšve pour aller chercher un cafĂ©. Vous pourriez ajouter des cĂąbles supplĂ©mentaires, mais vous provoqueriez alors une tempĂȘte de diffusion : des paquets Ethernet qui tournent en boucle et se multiplient jusqu’à saturation.

C’est lĂ  qu’intervient le spanning tree protocol (STP). STP bloque le trafic sur un sous-ensemble des cĂąbles pour ne laisser qu’un arbre sans boucle. Quand Gaston rĂ©cidive, STP reconstruit l’arbre en une seconde, ce qui laisse Ă  Nono, votre unique renfort technique, le temps de rebrancher le cĂąble1. Jugez par vous-mĂȘme : l’illustration ci-dessous fait tourner une vĂ©ritable implĂ©mentation de STP dans votre navigateur !

:demo

A1 @0,0 prio=4096
A2 @0,1
A3 @0,2
A4 @0,3

B1 @1,0 prio=8192
B2 @1,1
B3 @1,2
B4 @1,3

C1 @2,0 prio=8192
C2 @2,1
C3 @2,2
C4 @2,3

A1 -- A2 hazard=0
A2 -- A3 hazard=0
A3 -- A4 hazard=0
B1 -- B2
B2 -- B3
B3 -- B4
C1 -- C2 hazard=0
C2 -- C3 hazard=0
C3 -- C4 hazard=0

A1 -- B1 cost=10
B1 -- C1 cost=10
A4 -- B4 cost=20
B4 -- C4 cost=20

LĂ©o @-0.3,0.7 proto=none icon=đŸ‘ŠđŸ»
ZoĂ© @-0.3,1.3 proto=none icon=đŸ‘§đŸœ
Eva @0.3,0.7  proto=none icon=đŸ‘±đŸ»â€â™€ïž
Luc @0.3,1.3  proto=none icon=đŸ‘šđŸŸ
A2 -- Léo hazard=0 A2:edge
A2 -- Zoé hazard=0 A2:edge
A2 -- Eva hazard=0 A2:edge
A2 -- Luc hazard=0 A2:edge

Max @-0.3,1.7 proto=none icon=đŸ‘šđŸœ
Ana @-0.3,2.3 proto=none icon=đŸ‘©đŸŸ
Ida @0.3,1.7  proto=none icon=đŸ‘”đŸŸ
LĂ©a @0.3,2.3  proto=none icon=đŸ‘©đŸŒ
A3 -- Max hazard=0 A3:edge
A3 -- Ana hazard=0 A3:edge
A3 -- Ida hazard=0 A3:edge
A3 -- Léa hazard=0 A3:edge

Tom @0.7,0.7 proto=none icon=đŸ‘ŠđŸŒ
Zac @0.7,1.3 proto=none icon=đŸ‘šđŸ»
Sam @1.3,0.7  proto=none icon=đŸ§‘đŸœ
Noa @1.3,1.3  proto=none icon=đŸ‘±đŸŒ
B2 -- Tom hazard=0.2 B2:edge
B2 -- Zac hazard=0.2 B2:edge
B2 -- Sam hazard=0.2 B2:edge
B2 -- Noa hazard=0.2 B2:edge

Isa @0.7,1.7 proto=none icon=đŸ‘©đŸ»
Cam @0.7,2.3 proto=none icon=đŸ§‘đŸŸâ€đŸŠ±
Aya @1.3,1.7  proto=none icon=đŸ§•đŸœ
Guy @1.3,2.3  proto=none icon=👮🏿
B3 -- Isa hazard=0.2 B3:edge
B3 -- Cam hazard=0.2 B3:edge
B3 -- Aya hazard=0.2 B3:edge
B3 -- Guy hazard=0.2 B3:edge

Awa @1.7,0.7 proto=none icon=đŸ‘©đŸż
Ève @1.7,1.3 proto=none icon=đŸ‘§đŸŒ
AĂ«l @2.3,0.7  proto=none icon=🧓🏿
Ali @2.3,1.3  proto=none icon=đŸ§”đŸŸ
C2 -- Awa hazard=0 C2:edge
C2 -- Ève hazard=0 C2:edge
C2 -- Aël hazard=0 C2:edge
C2 -- Ali hazard=0 C2:edge

Gil @1.7,1.7 proto=none icon=đŸ‘šđŸŒâ€đŸŠł
Lou @1.7,2.3 proto=none icon=🧑🏿
Lia @2.3,1.7  proto=none icon=đŸ‘§đŸ»
Mia @2.3,2.3  proto=none icon=đŸ‘©đŸœâ€đŸŠ°
C3 -- Gil hazard=0 C3:edge
C3 -- Lou hazard=0 C3:edge
C3 -- Lia hazard=0 C3:edge
C3 -- Mia hazard=0 C3:edge

Note

Cet article est aussi disponible en vidĂ©o, en anglais avec des sous-titres en français, mais je vous conseille de continuer ici afin d’explorer les dĂ©monstrations interactives.

Les bases

Conçu dans les annĂ©es 80, le spanning tree protocol a donnĂ© naissance Ă  une dĂ©clinaison « rapide » (RSTP) et Ă  une variante « compatible VLAN » (MSTP)2. Tout ingĂ©nieur rĂ©seau sensĂ© sait qu’il existe de meilleures solutions, comme BGP EVPN VXLAN. Pourtant, puisque n’importe quel commutateur le parle, le vĂ©nĂ©rable spanning tree protocol n’a pas dit son dernier mot.

Nous nous concentrons sur RSTP : il a remplacĂ© le protocole d’origine en 2004. Pour Ă©liminer les boucles rĂ©seau, RSTP met en Ɠuvre une machine Ă  Ă©tats complexe. Des temporisateurs, les changements d’état des liens et les trames de contrĂŽle qu’un pont reçoit de ses voisins commandent ses transitions. Ces trames Ethernet sont les Bridge Protocol Data Units (BPDU). Vous pouvez les voir Ă  l’Ɠuvre ci-dessous : appuyez sur le bouton « Start ».

:protocol rstp
:tx-hold 10

A1 @0,1
C11 @1,0 prio=4096 icon=🌳
C12 @1,2 prio=4096 icon=🌳
C21 @2,0 prio=4096 icon=🌳
C22 @2,2 prio=4096 icon=🌳
A2 @3,1

H1 @0,0.2 proto=none icon=đŸ’»
H2 @0,1.8 proto=none icon=đŸ–šïž
H3 @3,0.2 proto=none icon=📠
H4 @3,1.8 proto=none icon=đŸ“ș

A1 -- C11
A1 -- C12
A2 -- C21
A2 -- C22
C11 -- C12
C11 -- C21
C11 -- C21
C11 -- C22
C12 -- C21
C12 -- C22
C21 -- C22
A1 -- H1 A1:edge
A1 -- H2 A1:edge
A2 -- H3 A2:edge
A2 -- H4 A2:edge

Au bout de quelques instants, la topologie converge vers un arbre : depuis la racine C11, il existe un chemin vers chaque pont3 et aucune boucle. En haut Ă  droite, l’interface affiche une icĂŽne d’arbre 🌳 suivie du temps qu’il a fallu pour atteindre cet Ă©tat. Coupez un lien et observez comment le protocole trouve en moins d’une seconde un autre chemin pour joindre C12. Vous pouvez arrĂȘter la simulation, l’avancer pas Ă  pas, la rĂ©initialiser ou la ralentir avec le mode « escargot » 🐌. Ne vous inquiĂ©tez pas de toutes les informations affichĂ©es : je les explique plus loin.

Tous les exemples s’exĂ©cutent dans votre navigateur grĂące Ă  MSTPD, une implĂ©mentation libre de RSTP4 fonctionnant en espace utilisateur5.

Interlude historique

Radia Perlman, intronisĂ©e Ă  l’Internet Hall of Fame en 2014, a rĂ©sumĂ© dans ce poĂšme l’ancĂȘtre de STP qu’elle a inventĂ© chez DEC. Il a Ă©tĂ© repris plus tard dans un brevet amĂ©ricain :

I think that I shall never see
A graph more lovely than a tree.
A tree whose crucial property
Is loop-free connectivity.
A tree which must be sure to span
So packets can reach every LAN.
First, the root must be selected.
By ID, it is elected.
Least cost paths from root are traced.
In the tree, these paths are placed.
A mesh is made by folks like me,
Then bridges find a spanning tree.

― Radia Perlman, Algorhyme.

Élection de la racine

Pour construire un arbre, RSTP commence par Ă©lire comme pont racine celui qui a l’identifiant de pont le plus faible. Cet identifiant combine la prioritĂ© et l’adresse MAC : 8192.6e:2b:10:a0:5f:29.

Dans l’exemple ci-dessous, S1 et S2 ont des prioritĂ©s de 4 096 et 8 192 : S1 devient racine. S4 a une prioritĂ© de 12 288, tandis que S3 conserve la prioritĂ© par dĂ©faut de 32 7686 : S4 devient racine. S5 et S6 n’ont pas de prioritĂ© particuliĂšre : l’adresse MAC la plus faible l’emporte et S5 devient racine.

:protocol rstp

S1 @0,0 prio=4096
S2 @0,1 prio=8192
S1 -- S2

S3 @1,0
S4 @1,1 prio=12288
S3 -- S4

S5 @2,0
S6 @2,1
S5 -- S6

Au dĂ©part, chaque pont s’annonce comme racine7 :

Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Rapid Spanning Tree (2)
    BPDU Type: Rapid/Multiple Spanning Tree (0x02)
    Root Identifier: 8192.02:00:00:01:00:01
    Bridge Identifier: 8192.02:00:00:01:00:01

Dùs qu’un pont reçoit une BPDU annonçant une meilleure racine, il propage cette nouvelle information à ses voisins.

Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Rapid Spanning Tree (2)
    BPDU Type: Rapid/Multiple Spanning Tree (0x02)
    Root Identifier: 4096.02:00:00:00:00:00
    Bridge Identifier: 8192.02:00:00:00:00:01

Attribution des rĂŽles aux ports

La deuxiĂšme Ă©tape consiste Ă  attribuer un rĂŽle Ă  chaque port. RSTP dĂ©finit cinq rĂŽles, chacun reprĂ©sentĂ© par une lettre :

  • racine (R, root),
  • dĂ©signĂ© (D, designated),
  • alternatif (A, alternate),
  • dĂ©sactivĂ© (X, disabled),
  • de secours (B, backup)8.

Chaque pont qui n’est pas racine choisit comme port racine celui dont le chemin vers la racine a le coĂ»t le plus faible. Sauf si vous configurez une valeur spĂ©cifique, chaque pont dĂ©duit le coĂ»t d’un lien Ă  partir de son dĂ©bit : 20 000 pour 1 Gbit/s. En cas d’égalitĂ©, l’identifiant de port le plus faible l’emporte.

Chacun des ports restants devient un port dĂ©signĂ© si la BPDU qu’il Ă©met est « meilleure » que celle qu’il reçoit. Sinon, il devient un port alternatif. Plus tard, si le port racine tombe, le « meilleur » port alternatif devient le port racine. Les critĂšres pour choisir la meilleure BPDU sont :

  1. l’identifiant de pont racine le plus faible,
  2. le coĂ»t cumulĂ© jusqu’à la racine le plus faible,
  3. l’identifiant de pont le plus faible,
  4. l’identifiant de port le plus faible.
:protocol rstp

S1 @1,0  prio=4096 icon=🌳
S2 @0,1
S3 @2,1

S1 -- S2
S1 -- S3
S1 -- S3
S2 -- S3

Dans l’exemple ci-dessus, aprĂšs convergence, S1 est la racine car sa prioritĂ© est de 4 096, alors que les autres ponts ont une prioritĂ© de 32 768. Tous ses ports sont des ports dĂ©signĂ©s puisque le coĂ»t cumulĂ© jusqu’à la racine est nul.

Le port de S2 face Ă  S1 devient un port racine car il prĂ©sente le coĂ»t cumulĂ© le plus faible vers la racine : 20 000 contre 40 000. S3 possĂšde deux ports face Ă  S1 et celui dont l’identifiant de port est le plus faible devient le port racine : 0x8000 contre 0x8001. L’autre candidat est un port alternatif car le port distant sur ce lien Ă©met une meilleure BPDU, avec un coĂ»t cumulĂ© nul. Sur le segment entre S2 et S3, c’est le port de S2 qui l’emporte : les deux ponts ont le mĂȘme coĂ»t cumulĂ© jusqu’à la racine (20 000), mais l’identifiant de pont de S2 est plus petit : 32768.02:00:00:00:00:01 contre 32768.02:00:00:00:00:02.

Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Rapid Spanning Tree (2)
    BPDU Type: Rapid/Multiple Spanning Tree (0x02)
    Root Identifier: 4096.02:00:00:00:00:00
    Root Path Cost: 20000
    Bridge Identifier: 32768.02:00:00:00:00:01
    Port identifier: 0x8002

Si vous coupez le lien actif entre S1 et S3, S3 promeut le « meilleur » port alternatif en port racine. Si vous dĂ©sactivez aussi le second lien, S3 retient le port alternatif restant comme port racine. En revanche, si vous dĂ©sactivez le lien entre S1 et S2, S2 doit travailler un peu plus pour Ă©lire un nouveau port racine, car il ne dispose d’aucun port alternatif.

Sauf Ă©vĂ©nement particulier, les ports dĂ©signĂ©s Ă©mettent une BPDU toutes les 2 secondes9. Si un pont ne reçoit plus de BPDU de son voisin pendant 3 pĂ©riodes « hello » consĂ©cutives, il le considĂšre comme mort et efface les informations associĂ©es au port.

Transition d’état des ports

Chaque port se trouve dans l’un des trois Ă©tats suivants. Le schĂ©ma reprĂ©sente chaque Ă©tat par une couleur de fond :

  • rejet (discarding, rouge),
  • apprentissage (learning, jaune),
  • transmission (forwarding, vert).

Un port racine passe automatiquement Ă  l’état de transmission. Un port alternatif reste Ă  l’état de rejet. Un port dĂ©signĂ© dispose de deux moyens pour passer de l’état de rejet Ă  l’état de transmission :

  • Si le port est un port d’extrĂ©mitĂ© (edge port), soit par configuration, soit parce que l’équipement distant ne parle aucune variante de STP, le pont suppose que cet Ă©quipement ne participe pas au protocole et ne peut donc pas crĂ©er de boucle. Dans ce cas, le port dĂ©signĂ© passe immĂ©diatement Ă  l’état de transmission.
  • Sinon, il envoie une proposition Ă  son voisin en aval. Si le pont distant estime que la BPDU reçue est « meilleure » que toutes celles mĂ©morisĂ©es pour ses autres ports, il Ă©lit le port de rĂ©ception comme port racine et dĂ©marre le processus de synchronisation : pour Ă©viter une boucle, il fait passer Ă  l’état de rejet tous les ports dĂ©signĂ©s qui ne sont ni des ports d’extrĂ©mitĂ© ni dĂ©jĂ  synchronisĂ©s. Il renvoie ensuite un accord. À la rĂ©ception de cet accord, le port dĂ©signĂ© du pair passe Ă  l’état de transmission10.
:protocol rstp

S1 @1,0 prio=4096 icon=🌳
S2 @1,1
S3 @0,2
S4 @2,2
S5 @0,3 prio=8192 icon=đŸȘŸ
S6 @2,3
H1 @0,1.2   proto=none icon=đŸ–šïž
H2 @2,1.2   proto=none icon=📠
H3 @2.5,1.3 proto=none icon=đŸ“ș
H4 @2.5,2.3 proto=none icon=đŸ’»

S1 -- S2
S2 -- S3
S2 -- S4
S3 -- S5
S4 -- S6
S4 -- S3
S5 -- S6

S3 -- H1 S3:edge
S4 -- H2 S4:edge
S4 -- H3 S4:edge
S6 -- H4 S6:edge

Dans la topologie ci-dessus, H1, H2, H3 et H4 sont des Ă©quipements terminaux qui ne participent pas au protocole. Nous configurons les ports auxquels ils sont raccordĂ©s comme des ports d’extrĂ©mité : ces ports passent donc immĂ©diatement Ă  l’état de transmission.

Utilisez le bouton « step » pour faire avancer la simulation. L’horloge passe Ă  1 seconde. Avancez encore d’un cran : S1 et S2 s’envoient mutuellement une proposition. Voici celle de S2 :

Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Rapid Spanning Tree (2)
    BPDU Type: Rapid/Multiple Spanning Tree (0x02)
    BPDU flags: 0x4e, Agreement, Port Role: Designated, Proposal
        0... .... = Topology Change Acknowledgment: No
        .1.. .... = Agreement: Yes
        ..0. .... = Forwarding: No
        ...0 .... = Learning: No
        .... 11.. = Port Role: Designated (3)
        .... ..1. = Proposal: Yes
        .... ...0 = Topology Change: No
    Root Identifier: 32768.02:00:00:00:00:01
    Root Path Cost: 0
    Bridge Identifier: 32768.02:00:00:00:00:01
    Port identifier: 0x8001

S1 ignore cette proposition : son propre identifiant de racine est plus faible. Quand S2 reçoit une proposition similaire de S1, il accepte S1 comme racine. Il Ă©lit Ă©galement le port vers S1 comme port racine et dĂ©marre le processus de synchronisation. Ses deux ports dĂ©signĂ©s sont dĂ©jĂ  Ă  l’état de rejet : rien ne change de ce cĂŽtĂ©. Avancez encore d’un cran : S2 envoie deux BPDU Ă  S1. Dans l’une d’elles, le bit d’accord vaut 1 et le bit de proposition vaut 0. Elle montre aussi que S2 a acceptĂ© S1 comme racine et que son port racine est dĂ©sormais Ă  l’état de transmission. À la rĂ©ception de cette BPDU, S1 fait passer son propre port dĂ©signĂ© Ă  l’état de transmission. À partir de cet instant, le lien entre S1 et S2 achemine le trafic utilisateur.

Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Rapid Spanning Tree (2)
    BPDU Type: Rapid/Multiple Spanning Tree (0x02)
    BPDU flags: 0x79, Agreement, Forwarding, Learning, Port Role: Root, Topology Change
        0... .... = Topology Change Acknowledgment: No
        .1.. .... = Agreement: Yes
        ..1. .... = Forwarding: Yes
        ...1 .... = Learning: Yes
        .... 10.. = Port Role: Root (2)
        .... ..0. = Proposal: No
        .... ...1 = Topology Change: Yes
    Root Identifier: 4096.02:00:00:00:00:00
    Root Path Cost: 20000
    Bridge Identifier: 32768.02:00:00:00:00:01
    Port identifier: 0x8001

Voyons maintenant ce qui est arrivĂ© Ă  S5. RĂ©initialisez la simulation et avancez de deux pas. S5 Ă©change des BPDU avec S3 et S6. Comme S5 possĂšde un identifiant de racine plus faible que S3 et S6, il reste la racine, tandis que S3 et S6 acceptent la proposition et Ă©lisent leurs ports racines. S3 et S6 dĂ©marrent le processus de synchronisation. Le port de S6 vers H4 reste actif car il s’agit d’un port d’extrĂ©mitĂ©. Avancez d’un cran : S3 et S6 renvoient tous deux un accord Ă  S5, qui fait passer ses deux ports dĂ©signĂ©s Ă  l’état de transmission. Pourtant, le lien entre S5 et S3 continue de rejeter le trafic utilisateur ! Si vous regardez attentivement, le port de S3 vers S5 est maintenant un port dĂ©signĂ©, et non un port racine. Lors de la mĂȘme Ă©tape, S3 reçoit aussi une meilleure BPDU de S2, avec S1 comme racine. Il Ă©lit son port vers S2 comme port racine et rĂ©trograde le port vers S5 en port dĂ©signĂ©, qui reste Ă  l’état de rejet.

À l’étape suivante, les choses se corsent un peu. S3 envoie une proposition Ă  S511 :

Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Rapid Spanning Tree (2)
    BPDU Type: Rapid/Multiple Spanning Tree (0x02)
    BPDU flags: 0x4f, Agreement, Port Role: Designated, Proposal, Topology Change
        0... .... = Topology Change Acknowledgment: No
        .1.. .... = Agreement: Yes
        ..0. .... = Forwarding: No
        ...0 .... = Learning: No
        .... 11.. = Port Role: Designated (3)
        .... ..1. = Proposal: Yes
        .... ...1 = Topology Change: Yes
    Root Identifier: 4096.02:00:00:00:00:00
    Root Path Cost: 40000
    Bridge Identifier: 32768.02:00:00:00:00:02
    Port identifier: 0x8002

S5 Ă©lit S1 comme racine et le port vers S3 comme port racine. Il dĂ©marre son processus de synchronisation, mais le port dĂ©signĂ© vers S6 ne passe pas Ă  l’état de rejet. Pourquoi ? Ce port reste un port dĂ©signĂ© et son voisin S6 avait dĂ©jĂ  envoyĂ© un accord sur ce lien : il conserve donc son statut de port synchronisĂ©.

Revenons maintenant un pas en arriĂšre pour observer ce qui arrive Ă  S6. À cet instant, S6 croit que S5 est la racine. Avancez d’un cran : S4 envoie une nouvelle proposition Ă  S6. S6 l’accepte, Ă©lit S1 comme racine et le port vers S4 comme port racine. Le rĂŽle du port face Ă  S5 change : de port racine, il devient port dĂ©signĂ©. Comme son pair continue d’annoncer une BPDU infĂ©rieure sur le lien, ce port devient contestĂ© (disputed) et passe Ă  l’état de rejet. Le port racine passe Ă  l’état de transmission et le lien devient immĂ©diatement opĂ©rationnel, car le port dĂ©signĂ© de S4 est dĂ©jĂ  Ă  l’état de transmission. Si nous avançons d’un cran, S5 et S6 Ă©changent deux BPDU. Celle de S5 est meilleure grĂące Ă  son identifiant de pont plus faible. Le port de S5 reste un port dĂ©signĂ©, tandis que S6 rĂ©trograde le sien en port alternatif.

Reprenons une derniĂšre fois depuis le dĂ©but : coupez le lien entre S1 et S2, laissez tourner la simulation jusqu’à ce que la topologie soit stable, arrĂȘtez-la, puis rĂ©tablissez le lien entre S1 et S2. Lors du premier pas, S1 et S2 Ă©changent des propositions. S2 Ă©lit S1 comme racine Ă  la place de S5, et le port vers S1 comme port racine. Il rĂ©trograde son ancien port racine en port dĂ©signĂ© et le place Ă  l’état de rejet. L’autre port dĂ©signĂ© reste synchronisĂ© et conserve son Ă©tat de transmission. À l’étape suivante, S2 envoie un accord Ă  S1 et le lien entre eux commence Ă  acheminer le trafic utilisateur. S2 envoie Ă©galement une proposition Ă  S3, mais pas Ă  S4 : il lui envoie une BPDU ordinaire. S4 Ă©lit malgrĂ© tout S1 comme racine et le port vers S2 comme port racine. Il rĂ©trograde son ancien port racine, celui vers S3, en port dĂ©signĂ©, qui passe Ă  l’état de rejet Ă  cause du changement de port racine. L’autre port alternatif, celui vers S6, devient lui aussi un port dĂ©signĂ© et reste Ă  l’état de rejet. Le nouveau port racine passe Ă  l’état de transmission. À l’étape suivante, le port de S4 vers S3 se stabilise comme port alternatif aprĂšs avoir reçu une « meilleure » BPDU de S3.

RSTP est une gigantesque machine Ă  Ă©tats dĂ©coupĂ©e en machines plus petites : Bridge Detection, Port Information, Port Protocol Migration, Port Role Selection, Port Role Transitions, Port Receive, Port State Transitions, Port Timers, Port Transmit et Topology Change. Certaines s’appliquent Ă  l’ensemble du pont, d’autres Ă  chaque port. Chaque pont exĂ©cute une instance ; le temps, les changements d’état opĂ©rationnel des ports et les BPDU reçues des autres instances en pilotent les transitions. Ce fonctionnement par Ă©vĂ©nements rend RSTP plus efficace, mais aussi plus difficile Ă  apprĂ©hender.

Locomotive Ă  vapeur articulĂ©e Garratt de classe Msa des Western Australian Government Railways : Ă©lĂ©vation et plan
Image provisoire de la machine Ă  Ă©tats Port Information extraite d'IEEE 802.1Q-2005, page 182. Dans l'attente de l'autorisation de reproduction de l'IEEE, voici le plan de la locomotive Ă  vapeur articulĂ©e Garratt de classe Msa des Western Australian Government Railways.

Notification de changement de topologie

Un pont maintient automatiquement une table d’adresses MAC : il associe chaque adresse MAC source au port qui l’a reçue en dernier. Pour commuter une trame Ethernet, il consulte cette table afin de choisir le bon port12. Quand un lien tombe, un frigo connectĂ© joignable par un port peut le devenir par un autre. Les ponts concernĂ©s doivent alors purger les adresses MAC apprises : elles ne sont peut-ĂȘtre plus valables.

Pour cela, RSTP met en Ɠuvre des notifications de changement de topologie Ă  l’aide d’un mĂ©canisme d’inondation. Lorsqu’un port qui n’est pas un port d’extrĂ©mitĂ© passe Ă  l’état de transmission, un pont gĂ©nĂšre des BPDU dont le bit topology change (TC) est activĂ©. Il les envoie Ă  tous ses ports dĂ©signĂ©s, Ă  l’exception des ports d’extrĂ©mitĂ©, ainsi qu’à son port racine. Il purge Ă©galement la table d’adresses MAC sur ces ports. Quand un pont reçoit une telle BPDU, il propage la notification sur ses ports dĂ©signĂ©s hors ports d’extrĂ©mitĂ© et sur son port racine, sauf celui par lequel elle est arrivĂ©e. Il purge lui aussi la table d’adresses MAC sur ces ports. Dans les exemples, les BPDU dont le bit TC vaut 1 sont entourĂ©es d’un cercle rouge.

:protocol rstp

S1 @1,0 prio=4096 icon=🌳
S2 @0,1
S3 @1,1
S4 @2,1
S5 @1,2
LPT @0.1,2 proto=none icon=đŸ–šïž

S1 -- S2
S1 -- S3
S1 -- S4
S2 -- S3
S2 -- S5
S4 -- S5
S5 -- LPT S5:edge

Lancez la simulation et attendez quelques secondes que la topologie se stabilise. ArrĂȘtez la simulation et dĂ©sactivez le lien entre S2 et S5. S5 Ă©lit le port face Ă  S4 comme port racine, lequel passe immĂ©diatement Ă  l’état de transmission. Avancez d’un cran : S5 Ă©met une BPDU avec le bit TC Ă  1 :

Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Rapid Spanning Tree (2)
    BPDU Type: Rapid/Multiple Spanning Tree (0x02)
    BPDU flags: 0x79, Agreement, Forwarding, Learning, Port Role: Root, Topology Change
        0... .... = Topology Change Acknowledgment: No
        .1.. .... = Agreement: Yes
        ..1. .... = Forwarding: Yes
        ...1 .... = Learning: Yes
        .... 10.. = Port Role: Root (2)
        .... ..0. = Proposal: No
        .... ...1 = Topology Change: Yes
    Root Identifier: 4096.02:00:00:00:00:00
    Root Path Cost: 40000
    Bridge Identifier: 32768.02:00:00:00:00:04
    Port identifier: 0x8002

S4 reçoit cette BPDU. Il purge la table d’adresses MAC sur le port face Ă  S1 : par exemple, LPT Ă©tait auparavant joignable par ce port, mais il faut dĂ©sormais passer par S5. Avancez d’un cran : S4 envoie Ă  S1 une BPDU avec le bit TC Ă  1. À la rĂ©ception de cette BPDU, S1 purge la table d’adresses MAC sur les ports face Ă  S2 et S3. Avancez d’un cran : S1 envoie une notification Ă  S2 et Ă  S3. Avancez encore d’un cran : S2 envoie une notification Ă  S3, tandis que S3 ne fait rien car son port vers S2 est un port alternatif. S3 ne purge aucune table d’adresses MAC : LPT reste joignable par son port vers S1.

Si vous avancez encore un peu, vous verrez que certaines BPDU pĂ©riodiques conservent le bit TC Ă  1. Chaque port dispose d’un temporisateur Ă©gal au temporisateur « hello » plus une seconde13. Ce temporisateur dĂ©marre quand le port Ă©met une notification. Jusqu’à son expiration, le port positionne le bit TC Ă  1 dans toutes les BPDU qu’il envoie. Vous pouvez aussi voir certaines BPDU pĂ©riodiques sans le bit TC : elles proviennent d’un port qui n’a fait que recevoir une notification et qui n’a donc pas armĂ© son temporisateur.

Sécurité

RSTP est sensible aux erreurs de configuration et peu rĂ©sistant face aux acteurs malveillants. Un pont qui ne parle pas RSTP peut crĂ©er une boucle. Une personne malveillante peut s’insĂ©rer dans la topologie pour perturber le service, espionner le trafic ou le modifier.

Pour limiter ces problĂšmes, vous devez identifier les ports d’extrĂ©mitĂ©. Un port d’extrĂ©mitĂ© est raccordĂ© Ă  un Ă©quipement tel qu’un PC ou une imprimante. Ces Ă©quipements ne gĂ©nĂšrent pas de BPDU et ne peuvent pas crĂ©er de boucle. RSTP propose deux options liĂ©es :

  • Quand elle est vraie, AdminEdge initialise un port comme port d’extrĂ©mitĂ©.
  • Quand elle est vraie, AutoEdge permet Ă  un port de devenir un port d’extrĂ©mitĂ© s’il ne reçoit aucune BPDU pendant 3 secondes. Cette option est activĂ©e par dĂ©faut.

Si un port d’extrĂ©mitĂ© reçoit une BPDU, quelles que soient les valeurs de ces deux options, il redevient un port ordinaire.

R0 @1.5,1.5 prio=8192

# AutoEdge=true, AdminEdge=false, bridge
S1 @3,1.58
R0 -- S1

# AutoEdge=true, AdminEdge=false, end device
H1 @2.84,2.18 icon=đŸ–šïž proto=none
R0 -- H1

# AutoEdge=true, AdminEdge=true, bridge
S2 @2.18,2.84
R0 -- S2 R0:edge

# AutoEdge=true, AdminEdge=true, end device
H2 @1.58,3 icon=đŸ’» proto=none
R0 -- H2 R0:edge

# AutoEdge=false, AdminEdge=true, bridge
S3 @0.68,2.76
R0 -- S3 R0:edge R0:no-auto-edge

# AutoEdge=false, AdminEdge=true, end device
H3 @0.24,2.32 icon=📠 proto=none
R0 -- H3 R0:edge R0:no-auto-edge

# AutoEdge=false, AdminEdge=false, bridge
S4 @0,1.42
R0 -- S4 R0:no-auto-edge

# AutoEdge=false, AdminEdge=false, end device
H4 @0.16,0.82 icon=đŸ“ș proto=none
R0 -- H4 R0:no-auto-edge

# Network port, bridge
S5 @0.82,0.16
R0 -- S5 R0:network S5:network

# Network port, end device
H5 @1.42,0 icon=☕ proto=none
R0 -- H5 R0:network

# AdminEdge=true, bpdu-guard=true, bridge
S6 @2.32,0.24
R0 -- S6 R0:bpdu-guard R0:edge

# AdminEdge=true, bpdu-guard=true, end device
H6 @2.76,0.68 icon=💡 proto=none
R0 -- H6 R0:bpdu-guard R0:edge

Dans la topologie ci-dessus, S1, S2, S3, S4, S5 et S6 se comportent comme des ponts, tandis que H1, H2, H3, H4, H5 et H6 se comportent comme des Ă©quipements terminaux :

  • S1 et H1 sont sur un port sans configuration : AutoEdge est vraie, AdminEdge est fausse,
  • S2 et H2 sont sur un port oĂč AdminEdge est vraie,
  • S3 et H3 sont sur un port oĂč AutoEdge est fausse et AdminEdge est vraie,
  • S4 et H4 sont sur un port oĂč AutoEdge est fausse.

Si vous lancez la topologie et attendez une vingtaine de secondes, les liens vers S1, S2, S3, S4, H1, H2, H3 et H4 finissent par acheminer le trafic utilisateur : aucune de ces options n’a d’importance.

Mais qu’en est-il des deux derniĂšres paires ? S5 et H5 sont raccordĂ©s Ă  un port de type network. Un tel port active une fonctionnalitĂ© propriĂ©taire : le bridge assurance. Le port Ă©met des BPDU quel que soit son rĂŽle. S’il n’en reçoit aucune pendant 3 pĂ©riodes « hello » consĂ©cutives, il passe Ă  l’état de rejet. Sur le lien entre R0 et S5, vous pouvez voir des BPDU circuler dans les deux sens, contrairement aux autres liens, oĂč seuls les ports dĂ©signĂ©s en Ă©mettent.

S6 et H6 sont raccordĂ©s Ă  un port oĂč AdminEdge est vraie et oĂč le BPDU guard est activĂ©. Il s’agit d’une autre fonctionnalitĂ© propriĂ©taire, qui dĂ©sactive un port s’il reçoit une BPDU.

En rĂ©sumĂ©, si vous attendez d’un port qu’il soit un port d’extrĂ©mitĂ©, positionnez AdminEdge Ă  vrai et activez le BPDU guard. Sinon, dĂ©clarez-le comme port network.

Pourquoi RSTP aujourd’hui ?

Un cas d’usage solide pour RSTP aujourd’hui est le rĂ©seau d’administration hors bande (OOB) d’un centre de donnĂ©es, oĂč quelques secondes d’indisponibilitĂ© sont tolĂ©rables. La configuration est minimale et vous pouvez utiliser des commutateurs bon marchĂ©, comme un Cisco 2960X14. Deux commutateurs jouent le rĂŽle de ponts racines et plusieurs boucles raccordent les commutateurs prĂ©sents dans chaque baie. Cette conception simple survit Ă  une panne sur chaque boucle15.

:protocol rstp
:tx-hold 10

# Root bridges
R1 @0,1 prio=0
R2 @0,2 prio=4096
R1 -- R2 cost=200 R1:network R2:network
R1 -- R2 cost=200 R1:network R2:network

# First loop
C1  @1,0 icon=đŸ—„ïž
C4  @2,0 icon=đŸ—„ïž
C7  @3,0 icon=đŸ—„ïž
C10 @4,0 icon=đŸ—„ïž
C12 @5,0 icon=đŸ—„ïž
C13 @5,3 icon=đŸ—„ïž
C15 @4,3 icon=đŸ—„ïž
C18 @3,3 icon=đŸ—„ïž
C21 @2,3 icon=đŸ—„ïž
C24 @1,3 icon=đŸ—„ïž
R1  -- C1  R1:network C1:network
C1  -- C4  C1:network C4:network
C4  -- C7  C4:network C7:network
C7  -- C10 C7:network C10:network
C10 -- C12 C10:network C12:network
C12 -- C13 C12:network C13:network
C13 -- C15 C13:network C15:network
C15 -- C18 C15:network C18:network
C18 -- C21 C18:network C21:network
C21 -- C24 C21:network C24:network
C24 -- R2  C24:network R2:network

# Second loop
C2  @1,0.5 icon=đŸ—„ïž
C5  @2,0.5 icon=đŸ—„ïž
C8  @3,0.5 icon=đŸ—„ïž
C11 @4,0.5 icon=đŸ—„ïž
C14 @4,2.5 icon=đŸ—„ïž
C17 @3,2.5 icon=đŸ—„ïž
C20 @2,2.5 icon=đŸ—„ïž
C23 @1,2.5 icon=đŸ—„ïž
R1  -- C2  R1:network C2:network
C2  -- C5  C2:network C5:network
C5  -- C8  C5:network C8:network
C8  -- C11 C8:network C11:network
C11 -- C14 C11:network C14:network
C14 -- C17 C14:network C17:network
C17 -- C20 C17:network C20:network
C20 -- C23 C20:network C23:network
C23 -- R2  C23:network R2:network

# Third loop
C3  @1,1 icon=đŸ—„ïž
C6  @2,1 icon=đŸ—„ïž
C9  @3,1 icon=đŸ—„ïž
C16 @3,2 icon=đŸ—„ïž
C19 @2,2 icon=đŸ—„ïž
C22 @1,2 icon=đŸ—„ïž
R1  -- C3  R1:network C3:network
C3  -- C6  C3:network C6:network
C6  -- C9  C6:network C9:network
C9  -- C16 C9:network C16:network
C16 -- C19 C16:network C19:network
C19 -- C22 C19:network C22:network
C22 -- R2  C22:network R2:network

La convergence prend environ 6 secondes. Chaque boucle doit rester petite (environ 16 ponts) pour rĂ©duire la probabilitĂ© d’une double panne et Ă©viter de partager trop de bande passante. Cette conception peut Ă©voluer un peu sans devenir trop complexe : un VLAN par boucle ou un domaine de pont par boucle.

Quelle taille pour un rĂ©seau ?

L’ñge maximal, dont la valeur par dĂ©faut est 20, dĂ©termine la distance maximale entre un nƓud et la racine. La topologie ci-dessous est trop grande : les BPDU issues de R1 ne parviennent pas au-delĂ  de S2016.

:protocol rstp
:tx-hold 10
:max-age 20

R1 @0,0 prio=4096 icon=🌳
R2 @0,5 prio=4096 icon=đŸȘŸ

S1  @1,0
S2  @2,0
S3  @3,0
S4  @4,0
S5  @5,0
S6  @6,0

S7  @6,1
S8  @5,1
S9  @4,1
S10 @3,1
S11 @2,1
S12 @1,1

S13 @1,2
S14 @2,2
S15 @3,2
S16 @4,2
S17 @5,2
S18 @6,2

S19 @6,3
S20 @5,3
S21 @4,3
S22 @3,3
S23 @2,3
S24 @1,3

S25 @1,4
S26 @2,4
S27 @3,4
S28 @4,4
S29 @5,4
S30 @6,4

S31 @6,5
S32 @5,5
S33 @4,5
S34 @3,5
S35 @2,5
S36 @1,5

R1  -- S1
S1  -- S2
S2  -- S3
S3  -- S4
S4  -- S5
S5  -- S6
S6  -- S7
S7  -- S8
S8  -- S9
S9  -- S10
S10 -- S11
S11 -- S12
S12 -- S13
S13 -- S14
S14 -- S15
S15 -- S16
S16 -- S17
S17 -- S18
S18 -- S19
S19 -- S20
S20 -- S21
S21 -- S22
S22 -- S23
S23 -- S24
S24 -- S25
S25 -- S26
S26 -- S27
S27 -- S28
S28 -- S29
S29 -- S30
S30 -- S31
S31 -- S32
S32 -- S33
S33 -- S34
S34 -- S35
S35 -- S36
S36 -- R2
R1  -- R2 cost=200 down

Une fois la topologie stabilisĂ©e, une partie du rĂ©seau considĂšre R1 comme racine et l’autre partie vote pour R2. À la frontiĂšre, S20 tente de dĂ©marrer une synchronisation avec S21 pour faire passer son port dĂ©signĂ© Ă  l’état de transmission. Sa BPDU ressemble Ă  ceci :

Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Rapid Spanning Tree (2)
    BPDU Type: Rapid/Multiple Spanning Tree (0x02)
    BPDU flags: 0x4e, Agreement, Port Role: Designated, Proposal
    Root Identifier: 4096.02:00:00:00:00:00
    Root Path Cost: 400000
    Bridge Identifier: 32768.02:00:00:00:00:15
    Port identifier: 0x8002
    Message Age: 20
    Max Age: 20

S21 la rejette car l’ñge du message est Ă©gal Ă  l’ñge maximal. De son cĂŽtĂ©, la BPDU que S21 envoie Ă  S20 ressemble Ă  ceci :

Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Rapid Spanning Tree (2)
    BPDU Type: Rapid/Multiple Spanning Tree (0x02)
    BPDU flags: 0x7c, Agreement, Forwarding, Learning, Port Role: Designated
    Root Identifier: 4096.02:00:00:00:00:01
    Root Path Cost: 320000
    Bridge Identifier: 32768.02:00:00:00:00:16
    Port identifier: 0x8001
    Message Age: 16
    Max Age: 20

Cela ne suffit pas à changer le port racine de S20, car S20 dispose d’un identifiant de racine plus faible : 4096.02:00:00:00:00:00 contre 4096.02:00:00:00:00:01.

RĂ©parer le lien entre R1 et R2 rĂ©sout le problĂšme. L’ñge de message maximal transportĂ© par un paquet est dĂ©sormais de 18, en dessous de l’ñge maximal configurĂ©. Mais cela ne fonctionne que jusqu’à la rupture d’un autre lien. Une correction possible consiste Ă  porter l’ñge maximal Ă  4017.

RSTP est-il rapide ?

RSTP converge en gĂ©nĂ©ral en quelques secondes au dĂ©marrage. Il rĂ©pare souvent un arbre en moins d’une seconde. MĂȘme la topologie Ă  38 ponts converge en moins de 10 secondes18. Certaines topologies mettent un peu plus de temps Ă  se rĂ©tablir quand la racine devient indisponible19.

:protocol rstp

R0 @1,0 prio=0
S1 @1,1 prio=4096
S2 @0,2 prio=8192
S3 @2,2

R0 -- S1
S1 -- S2
S2 -- S3
S3 -- S1

Dans la topologie ci-dessus, lancez la simulation, attendez la convergence, arrĂȘtez-la, puis coupez le lien entre R0 et S1. La topologie est dĂ©jĂ  optimale, mais RSTP peine Ă  converger de nouveau.

D’abord, S1 perd son port racine. Il n’a plus aucune information sur R0 et se proclame racine. Il conserve ses ports vers S2 et S3 comme ports dĂ©signĂ©s Ă  l’état de transmission. Avancez d’un cran : il envoie une BPDU Ă  S2 et Ă  S3 pour les informer du changement de racine. À sa rĂ©ception, S2 accepte S1 comme racine, car il ne connaĂźt pas de meilleure racine sur un autre port. Il Ă©lit le port vers S1 comme port racine. L’autre port reste un port dĂ©signĂ©. Aucun des deux ports ne change d’état.

À la rĂ©ception de la BPDU de S1, S3 se comporte diffĂ©remment : il connaĂźt R0 comme une meilleure racine que S1 grĂące Ă  son port alternatif vers S2. Il promeut ce port en port racine et rĂ©trograde le port vers S1 en port dĂ©signĂ©, ce qui nĂ©cessite un nouvel accord. Avancez d’un cran : S3 envoie une proposition Ă  S1 avec R0 comme racine. S1 Ă©lit R0 comme racine et promeut son port vers S3 en port racine.

Lors de la mĂȘme sĂ©quence, S3 reçoit aussi une BPDU de S2 affirmant que S1 est la racine. S3 n’a donc plus aucun port annonçant R0 comme racine : il Ă©lit S1 comme racine et son port vers S2 comme port racine. Avancez d’un cran : sa BPDU suivante vers S1 contient cette information et S1 s’élit de nouveau racine. Mais lors de la mĂȘme vague, S1 envoie une proposition Ă  S2 avec R0 comme racine. Alors que S1 et S3 s’accordent sur le fait que S1 est la racine, S2 croit dĂ©sormais que c’est R0 ! À son tour, S2 convainc de nouveau S3 que R0 est la racine, S3 convainc S1, S1 convainc S2 et S2 convainc S3.

Cela pourrait durer indĂ©finiment, mais ce n’est pas le cas. Les BPDU affirmant « R0 est la racine » finissent par se pĂ©rimer lorsque l’ñge du message dĂ©passe l’ñge maximal. Dans l’exemple ci-dessus, Ă  la onziĂšme seconde, S2 envoie une BPDU Ă  S3 avec R0 comme racine, mais S3 la jette car elle a atteint l’ñge maximal. Avec un peu de chance, la convergence peut aussi ĂȘtre plus rapide si un port cesse de transmettre des BPDU aprĂšs avoir atteint le nombre maximal autorisĂ© par seconde : il s’agit du transmit hold count, dont la valeur par dĂ©faut est 6.

À propos de MSTP

MSTP est la version « compatible VLAN » de RSTP : il exĂ©cute plusieurs instances de RSTP et permet d’associer chaque VLAN Ă  une instance donnĂ©e. Par exemple, vous pouvez rattacher les VLAN 100 Ă  200 Ă  une premiĂšre instance et les VLAN 300 Ă  400 Ă  une seconde. Les VLAN restants sont rattachĂ©s Ă  une instance spĂ©ciale appelĂ©e Internal Spanning Tree (IST). MSTP apporte sa propre complexitĂ©, mais l’idĂ©e est de disposer de plusieurs topologies logiques indĂ©pendantes. Pour creuser le sujet, jetez un Ɠil Ă  « MSTP Tutorial Part I: Inside a Region ».

À propos des exemples interactifs

Les exemples interactifs exĂ©cutent MSTPD directement dans votre navigateur, compilĂ© en WebAssembly avec emscripten. Une API C remplace le code qui dialogue avec le noyau Linux : elle gĂšre les ponts et les ports, exporte l’état en JSON et fait avancer le temps de maniĂšre dĂ©terministe. Une surcouche JavaScript la rend plus agrĂ©able Ă  utiliser :

import { loadMSTPD } from "./dist/mstpd.mjs";
const mstp = await loadMSTPD();

// Crée 3 ponts
const a = mstp.createBridge("A", { priority: 4096 });
const b = mstp.createBridge("B", { priority: 8192 });
const c = mstp.createBridge("C");

// Chaque pont a deux ports
const a1 = a.addPort("a-b", { portno: 1 });
const a2 = a.addPort("a-c", { portno: 2 });
const b1 = b.addPort("b-a", { portno: 1 });
const b2 = b.addPort("b-c", { portno: 2 });
const c1 = c.addPort("c-a", { portno: 1 });
const c2 = c.addPort("c-b", { portno: 2 });

// Construit une topologie en triangle
mstp.link(a1, b1);
mstp.link(a2, c1);
mstp.link(b2, c2);

// Active tous les ponts et tous les ports
for (const br of [a, b, c]) br.enable();
for (const p of [a1, a2, b1, b2, c1, c2]) p.enable();

// Exécute 40 secondes de temps réel et affiche la topologie
mstp.step(40);
console.log("Topology:", mstp.topology());

Plusieurs dizaines de tests unitaires explorent les fonctionnalitĂ©s de MSTPD et vĂ©rifient qu’elles se comportent correctement dans cet environnement :

$ node --test *.test.mjs
✔ two bridges: lower priority becomes root (41.657342ms)
✔ triangle loop: exactly one port blocks and all agree on the root (5.832ms)
✔ breaking the active link reconverges and restoring recovers (18.730753ms)
[
]
â„č tests 40
â„č pass 40
â„č fail 0
[
]
â„č duration_ms 396.190897

Du code JavaScript supplĂ©mentaire recherche les blocs <pre> contenant une dĂ©finition de topologie et les transforme en composant interactif. Vous pouvez inspecter et modifier la dĂ©finition en cliquant sur le bouton « edit ».

Il y a aussi une astuce pour dĂ©terminer si la topologie a convergĂ©. AprĂšs chaque pas, nous enregistrons un instantanĂ© de la mĂ©moire de la simulation, jouons 50 secondes en accĂ©lĂ©rĂ© pour vĂ©rifier que la topologie est stable, puis remontons le temps en restaurant cet instantanĂ©. đŸ•°ïž

Le code complet se trouve sur GitHub. Je suis trĂšs satisfait du rĂ©sultat. Il peut ĂȘtre difficile de suivre tout ce qui se passe Ă  chaque Ă©tape, mais la possibilitĂ© d’avancer et reculer aide beaucoup. Je compte rĂ©utiliser cette approche dans de prochains articles.

Note

Michael Lynch a relu une premiĂšre version de la version anglaise de cet article. Il est l’auteur de « Refactoring English », un livre pour amĂ©liorer votre Ă©criture en anglais : articles de blog, documentation, messages de commit et tutoriels. Les erreurs restantes sont les miennes !


  1. Les sprites de Gaston et Nono proviennent de Craftpix. ↩

  2. STP a Ă©tĂ© introduit dans IEEE 802.1D-1990. Il est encore prĂ©sent dans IEEE 802.1D-1998, mais il a Ă©tĂ© retirĂ© d’IEEE 802.1D-2004 au profit de RSTP, introduit dans IEEE 802.1w-2001. MSTP est apparu dans IEEE 802.1s-2002 avant d’ĂȘtre intĂ©grĂ© Ă  IEEE 802.1Q-2003. Tous deux font partie d’IEEE 802.1Q-2022, aux cĂŽtĂ©s de SPB, un protocole dont je n’avais jamais entendu parler avant d’écrire cet article. ↩

  3. À partir d’ici, j’emploie le terme « pont » plutĂŽt que le mot plus courant « commutateur ». ↩

  4. MSTPD implĂ©mente la machine Ă  Ă©tats d’IEEE 802.1Q-2005, mais sous Linux, il ne fait tourner que RSTP. Linux 5.18 a ajoutĂ© la prise en charge de la commutation pour plusieurs arbres recouvrants, mais MSTPD ne l’utilise pas encore. Consultez la PR #150 pour suivre les avancĂ©es sur ce point. ↩

  5. Le noyau Linux ne gĂšre que STP. Il dĂ©lĂšgue les autres protocoles Ă  l’espace utilisateur. ↩

  6. La prioritĂ© est un multiple de 4 096 : avec MSTP, les 12 bits de poids faible de la prioritĂ© du pont encodent l’identifiant de l’instance MST, ne laissant que les 4 bits de poids fort pour la prioritĂ© configurĂ©e. ↩

  7. Pour inspecter les BPDU qui circulent sur un lien, sĂ©lectionnez-le, cliquez sur le bouton « Download packets », puis ouvrez le fichier avec Wireshark. ↩

  8. Un port de secours n’existe que si le pont possĂšde plusieurs ports sur le mĂȘme domaine de collision. Cela ne devrait pas se produire dans un rĂ©seau commutĂ©. ↩

  9. C’est la valeur du temporisateur « hello ». Elle Ă©tait autrefois configurable, mais IEEE 802.1Q-2005 la fixe Ă  2. MSTPD n’autorise pas d’autre valeur. ↩

  10. Si un port ne reçoit pas d’accord Ă  l’expiration du temporisateur « hello » (ou de l’ñge maximal si le port vient tout juste d’ĂȘtre activĂ©), il se rabat sur la mĂ©thode Ă  base de temporisateurs, par compatibilitĂ© avec STP : il passe Ă  l’état d’apprentissage, attend de nouveau l’expiration du temporisateur « hello », puis passe Ă  l’état de transmission. ↩

  11. Comme dans beaucoup de propositions, S3 positionne aussi le bit d’accord Ă  1. Le bit de proposition signifie « je suis le port dĂ©signĂ© sur ce lien et je veux passer Ă  l’état de transmission ». Le bit d’accord signifie « je suis dĂ©jĂ  synchronisĂ© avec le reste de mon pont sur cette information de racine ». Les deux peuvent ĂȘtre vrais en mĂȘme temps. ↩

  12. S’il ne trouve aucune entrĂ©e, le pont duplique la trame Ethernet sur tous les ports, sauf celui d’entrĂ©e. Il en va de mĂȘme si l’adresse MAC de destination est l’adresse de diffusion (ff:ff:ff:ff:ff:ff). Ce comportement amorce le processus d’apprentissage. ↩

  13. Ce temporisateur rend RSTP rĂ©sistant Ă  la perte de paquets. ↩

  14. Vous pouvez en trouver d’occasion pour moins de 100 €. Tous les ports utilisent PVST+ par dĂ©faut et basculent automatiquement vers RSTP classique. ↩

  15. Une solution de rechange serait l’Ethernet Ring Protection Switching (ERPS), un autre protocole dont je n’avais jamais entendu parler avant de me documenter pour cet article. ↩

  16. Si vous observez attentivement ce qui se passe Ă  t=2s, vous verrez que R2 gagne en popularitĂ© comme racine : S17 Ă  S36 croient que R2 est la racine. S16 ne suit pas car nous atteignons l’ñge maximal. Plus tard, S17 Ă  S20 changent d’avis. Je vous laisse explorer l’état des diffĂ©rents ponts pour en comprendre la cause. ↩

  17. En portant l’ñge maximal Ă  40, vous devez aussi augmenter le dĂ©lai de transmission Ă  21 (:forward-delay 21), car le standard impose la condition suivante : 2 × (Forward Delay − 1) ≄ Max Age. Pour cette topologie prĂ©cise, vous pourriez aussi porter l’ñge maximal Ă  37 et le dĂ©lai de transmission Ă  20. ↩

  18. La simulation peut sembler lente, mais elle ne tourne pas en temps rĂ©el. Regardez l’horodatage dans le coin supĂ©rieur droit pour connaĂźtre le temps Ă©coulĂ©, par exemple « t=8s ». Une fois la topologie stabilisĂ©e, ce mĂȘme coin affiche le temps de convergence, par exemple Â«â€ŻđŸŒł 2s ». ↩

  19. Khaled Elmeleegy, Alan Cox et Eugene Ng ont formalisĂ© ce phĂ©nomĂšne dans « On Count-to-Infinity Induced Forwarding Loops in Ethernet Networks », puis dans « Understanding and Mitigating the Effects of Count to Infinity in Ethernet Networks ». Ils proposent une correction qui n’a jamais trouvĂ© sa place dans un standard. ↩

24 August, 2026 03:00PM by Vincent Bernat

June 16, 2026

L'usine à clous soviétique ou l'échec des KPI

En 2008, j’ai dĂ©crochĂ© mon second emploi, dans l’équipe rĂ©seau d’Orange Portails1, la division derriĂšre les sites web et le moteur de recherche de l’opĂ©rateur tĂ©lĂ©com français Orange. Tout y fonctionnait comme sur des roulettes : un environnement technique complet, une Ă©quipe dĂ©diĂ©e pour chaque pan de l’activitĂ© et la libertĂ© de me concentrer sur ce que je faisais de mieux. Quelques annĂ©es plus tard, plus rien n’allait : minĂ©s par une obsession du chiffre, nous n’arrivions plus Ă  livrer les nouveaux services dans les temps.

Avertissement

C’est une histoire que j’aime raconter pour mettre en garde contre la loi de Goodhart2. Comme ces Ă©vĂ©nements remontent Ă  prĂšs de 15 ans, mes souvenirs sont un peu flous. Je suis parti en 2012.

Les premiÚres années

À mes dĂ©buts, le dĂ©partement fonctionnait comme une startup. Son origine Ă©tait l’entreprise française Echo. Elle avait bĂąti un moteur de recherche. France TĂ©lĂ©com l’a rachetĂ© et rebaptisĂ© Voila. C’était le moteur de recherche le plus consultĂ© en France au dĂ©but des annĂ©es 2000. France TĂ©lĂ©com a regroupĂ© les activitĂ©s de portail au sein de la division Wanadoo Portails, renommĂ©e plus tard Orange Portails.

L’environnement technique Ă©tait excellent. Nous disposions de nombreux outils internes3 : un systĂšme de tickets, un outil de graphes RRD, un IPAM, un outil de reporting et un outil d’alerte basĂ© sur SNMP4. Nous dĂ©ployions nos serveurs Linux avec CFEngine. Nous installions les systĂšmes et les applications depuis des dĂ©pĂŽts Debian internes. Nous documentions tout dans une instance MediaWiki privĂ©e. La supervision Ă©tait basĂ©e sur un ancĂȘtre de XYmon. L’architecture rĂ©seau Ă©tait propre et Ă©volutive, avec peu de dette technique. Un nouvel arrivant Ă©tait opĂ©rationnel en une journĂ©e.

C’était un environnement Ă©panouissant pour moi. J’ai dĂ©veloppĂ© plusieurs outils : lldpd, une implĂ©mentation de 802.1AB, Snimpy, une interface pythonique pour Net-SNMP, Wiremaps, un outil de dĂ©couverte de niveau 2 dotĂ© d’une machine Ă  remonter le temps pour savoir quel Ă©quipement est connectĂ© oĂč, KitĂ©rƑ, un outil pour simuler des conditions rĂ©seau, QCSS-3, un contrĂŽleur pour rĂ©partiteurs de charge, et ipoo, un service accessible via un bot Jabber et un script Greasemonkey pour exposer des informations liĂ©es aux adresses IP. J’ai ajoutĂ© le support SNMP pour Keepalived et Quagga. J’ai aussi lancĂ© ce blog, avec des articles comme « DNS anycast », des articles sur TLS comme « DĂ©ni de service TLS : quelles solutions ? », des articles sur SNMP comme « IntĂ©gration de Net-SNMP dans une boucle d’évĂšnements », des articles sur Linux comme « Comprendre la mise en cache des routes IPv4 sous Linux », et un article sur VXLAN bien avant que ce soit Ă  la mode.

La chute

Quand nous avions besoin de nouveaux serveurs, l’équipe de proximitĂ© en prenait un lot dans l’inventaire, y installait notre distribution Linux, les dĂ©plaçait dans le datacenter et les cĂąblait au rĂ©seau. Nous ouvrions un ticket dĂ©crivant les serveurs dont nous avions besoin et, une semaine plus tard, nos serveurs Ă©taient disponibles. đŸ’«

Orange voulait savoir si l’équipe de proximitĂ© Ă©tait performante : elle a donc rĂ©clamĂ© des KPI. Le choix s’est portĂ© sur le nombre de tickets traitĂ©s dans l’annĂ©e. Orange a demandĂ© Ă  doubler ce nombre. Au lieu d’un seul ticket pour un nouveau service, nous en ouvrions six, un par serveur. À la fin de l’annĂ©e, les KPI avaient plus que doublĂ©.

Tout le monde y a vu une rĂ©ussite du pilotage de la performance. Il a donc Ă©tĂ© demandĂ© de rĂ©cidiver l’annĂ©e suivante. Cette fois, nous devions ouvrir un ticket par serveur et par Ă©tape. De nouveau, les KPI ont doublĂ©. En coulisses, les tickets partaient Ă  diffĂ©rentes personnes et n’étaient plus traitĂ©s dans l’ordre. Aussi, pour l’annĂ©e suivante, il a Ă©tĂ© dĂ©cidĂ© de crĂ©er des mĂ©ta-tickets et de tenir des rĂ©unions pour suivre l’avancement de ces tickets. Bien sĂ»r, toutes ces Ă©tapes supplĂ©mentaires faisaient encore grimper le KPI.

Cette mĂ©thode de pilotage de la performance s’est Ă©tendue aux autres Ă©quipes5. Tout est devenu plus lent. Au lieu de quelques semaines, il nous fallait six mois pour dĂ©ployer un nouveau service. Nous avions bĂąti une usine Ă  clous soviĂ©tique. Mais les KPI Ă©taient bons et nous avons lĂąchĂ© l’affaire.

Prenons un autre exemple. Nous devions estimer l’impact de chaque opĂ©ration de nuit. Nous n’étions pas mauvais : l’essentiel des opĂ©rations Ă©taient dĂ©clarĂ©es « sans impact ». La plupart du temps, c’était le cas. Parfois, il y avait un impact de 5 secondes. On nous a demandĂ© de faire plus d’efforts pour tenir l’impact annoncĂ©. Qu’avons-nous fait ? Nous avons commencĂ© Ă  dĂ©clarer un impact attendu de 5 secondes. Un jour, nous avons eu un impact de 30 secondes et il nous a Ă©tĂ© reprochĂ© de ne pas avoir respectĂ© l’impact annoncĂ©. Au final, la plupart des opĂ©rations Ă©taient dĂ©clarĂ©es avec un impact attendu de 10 minutes, et nous avons cessĂ© de nous en prĂ©occuper : au lieu de basculer le trafic avec soin, nous nous autorisions un impact de 5 minutes. Et nos KPI n’avaient jamais Ă©tĂ© aussi bons.

Graphique montrant l'impact des opérations de nuit. Année aprÚs année, la tolérance de l'impact est augmentée. La derniÚre année, l'impact attendu est de 10 minutes et toutes les opérations sont en dessous de ce seuil. Toutefois, les impacts sont beaucoup plus importants que la premiÚre année.
Vue d'artiste de l'évolution des impacts au fil des années.

Les KPI ne sont pas inutiles, mais ils peuvent avoir des consĂ©quences nĂ©gatives. Utilisez-les avec prĂ©caution : laissez les personnes opĂ©rationnelles participer au choix des indicateurs et reliez ces indicateurs Ă  la qualitĂ© du service rendu, par exemple avec des objectifs de niveau de service. Sinon, mĂȘme les plus consciencieux finissent par lĂącher prise et dĂ©tourner le systĂšme avant de partir6. 📊


  1. En interne, cette entitĂ© s’appelait « Hebex » (hĂ©bergement et exploitation) et Ă©tait situĂ©e sur les sites de Bagnolet et de Sophia-Antipolis. ↩

  2. La loi de Goodhart est souvent citĂ©e, mais la loi de Campbell dĂ©crit encore mieux mon expĂ©rience : plus on s’appuie sur un chiffre pour prendre des dĂ©cisions, plus vite les gens le corrompent. ↩

  3. À l’époque, le SaaS n’était pas vraiment rĂ©pandu. Je me souviens avoir envisagĂ©, avec deux collĂšgues, de vendre Wiremaps en SaaS, avec un chiffrement homomorphe pour la base de donnĂ©es. Mais qui aurait acceptĂ© d’externaliser sa pile d’observabilité ? ↩

  4. Snalert Ă©tait un outil d’alerte mĂ©tacirculaire Ă©crit en Perl. Il pouvait interroger un trĂšs grand nombre de cibles SNMP en peu de temps. Toute notre supervision reposait sur SNMP, y compris la supervision systĂšme. ↩

  5. Mon Ă©quipe gĂ©rait aussi les rĂšgles de nombreux pare-feux sous Linux. Pour gonfler nos KPI, nous appliquions la mĂȘme mĂ©thode : plutĂŽt que d’accepter un seul ticket avec une matrice de flux, nous exigions un ticket par flux. ↩

  6. Orange n’est pas un cas isolĂ©. Le processus de promotion de Google est un autre exemple bien connu de KPI dĂ©faillant. Michael Lynch le raconte dans « Why I Quit Google to Work for Myself ». ↩

16 June, 2026 06:26AM by Vincent Bernat

June 09, 2026

Tenir un blog bilingue avec l'aide d'une IA

L’IA inonde le web de contenus insipides. Les articles sur LinkedIn avec une image gĂ©nĂ©rĂ©e par IA, remplis d’émojis, publiĂ©s par des soi-disant experts sur un sujet auquel ils ne portent pas assez d’intĂ©rĂȘt pour Ă©crire eux-mĂȘmes, sont les pires spĂ©cimens. Bien que je sois trĂšs contrariĂ© de cette situation, je m’appuie sur des LLMs pour la grammaire, les rĂ©visions linguistiques et la traduction. Je ne trouve pas cela incohĂ©rent.

Ma langue maternelle est le français mais j’écris la plupart des articles en anglais et en français. Quand j’ai commencĂ© Ă  Ă©crire ce blog en 2011, je rĂ©digeais d’abord en français avant de traduire en anglais. J’ai fini par comprendre qu’il Ă©tait prĂ©fĂ©rable de le faire dans l’autre sens afin de rendre le texte plus naturel et idiomatique. J’essaie d’écrire un anglais « correct » mais cela n’a jamais Ă©tĂ© mon point fort1. Par exemple, j’ai toujours eu des difficultĂ©s sur l’accord des temps. J’apprends les rĂšgles et je les oublie immĂ©diatement. Je ne me vois pas non plus embaucher un Ă©diteur pour quelque chose que je considĂšre comme un loisir.

À titre d’exemple, j’ai gardĂ© l’historique des modifications successives lors de l’écriture de « Scaling Akvorado BMP RIB with sharding » :

  1. la premiĂšre Ă©bauche rĂ©digĂ©e Ă  l’aide d’un dictionnaire de synonymes2 ;
  2. la version modifiĂ©e par la compĂ©tence « rĂ©vision linguistique » ;
  3. la traduction en français gĂ©nĂ©rĂ©e par la compĂ©tence « traduction » ;
  4. la version révisée par un humain avec quelques modifications sur la version anglaise.

Je sais que les IA peuvent dĂ©naturer la voix de l’auteur pendant l’édition, mais les corrections apportĂ©es lors de la seconde Ă©tape sont mineures. Les instructions sont « d’appliquer de lĂ©gĂšres modifications de style » tout en demandant d’éviter les formes passives, les phrases trop longues, les verbes peu expressifs et les mots inutiles. Elles dĂ©finissent Ă©galement l’audience cible : technique avec un niveau d’anglais B2.

Dans l’extrait suivant, j’ai utilisĂ© « long time » au lieu de « long-standing ». Outre le trait d’union manquant, le premier s’applique Ă  des personnes (a long-time friend), tandis que le second concerne des situations (a long-standing agreement). J’ai mis pas mal de temps Ă  comprendre la seconde modification : l’IA prĂ©fĂšre cette forme grammaticale pour introduire la dĂ©finition de « RIB sharding ».

As the Internet routing table contains more than 1 million routes, Akvorado needs to scale to tens of millions of routes. This has been a long time long-standing challenge, but I expect this issue is now fixed by using RIB sharding, a method to split that splits the routing database into several parts to enable concurrent updates.

Dans la modification ci-dessous, l’IA utilise le mot « device » plutĂŽt que le mot « équipement » car ce dernier est indĂ©nombrable. Je le sais mais je tombe rĂ©guliĂšrement dans ce piĂšge.

When Akvorado does not find a route from a specific device, it falls back to a route sent by another equipment device.

J’encourage l’IA Ă  utiliser des verbes descriptifs et elle s’exĂ©cute en remplaçant une pĂ©riphrase par un verbe prĂ©cis :

The benchmarks demonstrate it has better performance than outperforms other packages, both packages for lookups, insertions, and memory usage.

Elle corrige aussi les erreurs de grammaire. Dans le passage suivant, « list of routes » est au singulier. De plus, « stored » reprĂ©sente un Ă©tat et il ne faut pas le faire suivre de « into » qui indique un changement.

The list of routes for each prefix are is not stored directly into in the prefix tree.

Voici un dernier exemple : le verbe « require » doit ĂȘtre suivi d’un nom ou d’un objet suivi d’un infinitif. Il n’est pas possible de le faire suivre directement par un infinitif.

An alternative would be to have one prefix tree for each peer but it would require to configure configuring all routers to export their routes.

MĂȘme si je lis beaucoup d’anglais3, je bute toujours sur ces rĂšgles de grammaire. Le français est une langue relativement simple une fois les bases acquises alors que l’anglais est rempli d’irrĂ©gularitĂ©s.


J’indique dans chaque pied de page si une IA a Ă©tĂ© utilisĂ©e pour modifier le contenu. Il y a 3 niveaux :

  • 🧠: pas d’IA ou pratiquement pas (par exemple, des corrections grammaticales)
  • ✹: amĂ©liorĂ© par l’IA (par exemple, des rĂ©visions linguistiques)
  • đŸ€–: gĂ©nĂ©rĂ© par IA (par exemple, traduit depuis une autre langue)

Survolez avec la souris ou tapotez sur l’icĂŽne pour rĂ©vĂ©ler le nom de l’IA et son rĂŽle dans la modification du document.

Capture d'Ă©cran montrant le pied de page avec l'Ă©moji « étincelles »
Exemple d'utilisation de transparence sur l'usage de l'IA : Claude Sonnet 4.5 a Ă©ditĂ© cet article.

Le graphique ci-dessous reprĂ©sente par annĂ©e les outils utilisĂ©s pour modifier chaque article. J’ai rĂ©cemment demandĂ© Ă  une IA des corrections grammaticales sur les anciens articles, aussi bien en anglais qu’en français. Depuis 2018, les articles sont traduits en français Ă  l’aide de DeepL puis ensuite d’une IA. Depuis 2024, je m’appuie sur une IA pour les rĂ©visions linguistiques des articles en anglais.

&#128444; Graphique montrant l'utilisation de l'IA année par année. Chaque niveau a sa propre teinte.
Utilisation de l'IA année par année. Passez la souris sur une bande pour plus de détails.

Si vous ĂȘtes fermement opposĂ© Ă  l’utilisation des LLM dans l’écriture, j’espĂšre que vous acceptez mon point de vue plus nuancĂ© comme une contrepartie pour des articles en français, l’IA mĂąchant Ă©normĂ©ment le travail de traduction. En ce qui concerne l’anglais, la littĂ©rature sur le sujet s’accorde sur l’importance de choisir le bon mot pour capturer l’attention du lecteur jusqu’à la fin.

[
] Bien écrire consiste à maßtriser un certain nombre de choses fondamentales, à savoir le vocabulaire, la grammaire et le style, et à remplir le troisiÚme compartiment de sa boßte à outils avec les bons instruments.

― Stephen King, On Writing

Note

Contrairement Ă  d’autres articles rĂ©cents, je n’ai pas utilisĂ© d’IA, ni pour traduire en français, ni pour relire la version anglaise. Pour cette derniĂšre, une personne anonyme a acceptĂ© de corriger ma copie.

Mise Ă  jour (06.2026)

Voir la discussion associĂ©e Ă  cet article sur Lobsters, ainsi que l’article « How developers react to AI-scented blog posts » de Cynthia Dunlop, l’une des coautrices de « Writing for Developers ».


  1. J’ai rĂ©cemment lu « Writing for Developers » du dĂ©but Ă  la fin et je l’ai trouvĂ© motivant. Michael Lynch est en train d’écrire « Refactoring English » sur le mĂȘme sujet et je me suis inscrit Ă  l’accĂšs anticipĂ©. ↩

  2. Je suis trĂšs satisfait des outils d’aide Ă  l’écriture proposĂ©s par Kagi. L’outil de traduction et le dictionnaire me sont trĂšs utiles pour trouver le bon mot. Je recours aussi Ă  l’assistant de recherche de Kagi lors de la phase de documentation. ↩

  3. DĂšs le CM2, je jouais Ă  Monkey Island 2 en anglais sans l’avoir appris Ă  l’école. J’utilisais un dictionnaire et je restais perplexe Ă  la vue des verbes irrĂ©guliers. ↩

09 June, 2026 08:15PM by Vincent Bernat

June 07, 2026

Stéphane Blondon

Just, make, task : trois outils pour faire (des trucs)

Sous Unix, un fichier Makefile est le moyen classique d’exĂ©cuter diverses tĂąches (en premier lieu des compilations de binaires). RĂ©cemment, deux outils (just et task) ont gagnĂ© en popularitĂ©. Ils ont le mĂȘme objectif, tout en cherchant Ă  ĂȘtre plus adaptĂ©s aux usages de dĂ©veloppement actuels.

L’installation des diffĂ©rents outils est simple :

  • Le binaire make est dans le paquet make (incroyable !) et est probablement dĂ©jĂ  installĂ©.
  • Le binaire just est dans le paquet just (bis).
  • Debian ne contient pas de paquet task. Un binaire task est bien disponible dans le paquet taskwarrior mais c’est un outil pour dĂ©compter le temps passĂ©. Les dĂ©veloppeurs de Taskfile fournissent un paquet Debian, dĂ©clarĂ© comme incompatible avec taskwarrior Ă  cause du nom identique de l’exĂ©cutable. Compiler le binaire soi-mĂȘme est facile une fois que les outils pour compiler du Go sont dĂ©jĂ  prĂ©sents sur la machine.

A. Formats de fichier

Voici des exemples minimaux pour les trois outils :

1. Makefile

cible:
commande


Les fichiers Makefile utilisent des tabulations. Aujourd’hui, on s’attend plutĂŽt Ă  des espaces. Un Ă©diteur correct sait dĂ©jĂ  le gĂ©rer donc ça ne devrait pas ĂȘtre vraiment un problĂšme mais peut surprendre un nouvel arrivant.

2. Justfile

cible:
commande

Il n’y a pas de diffĂ©rence visible avec le Makefile prĂ©cĂ©dent car les fichiers Justfile en sont proches. Le format est simple et utilise des espaces plutĂŽt que des tabulations.

C’est un format spĂ©cifique que les autres outils ne prennent pas toujours bien en charge (ou pas par dĂ©faut). Par exemple, bat (dans le paquet Debian nommĂ© batcat) ou pygments ne savent pas faire de la coloration syntaxique sur ce format. Par contre, il existe des greffons pour Codium ou pour emacs (par exemple, just-mode, son code source et le dĂ©pĂŽt Melpa), etc. De mĂȘme, WordPress ne le prend pas en compte donc tous les codes source de Justfile ne bĂ©nĂ©ficieront pas de coloration syntaxique dans cet article.

Exemple de fichier Justfile dans CodiumExemple de fichier Justfile dans Codium

3. Taskfile

version: &apos3&apos
tasks:
cible:
cmd: commande

Taskfile rĂ©utilise le format YAML. Cela permet d’avoir une syntaxe connue et un outillage dĂ©jĂ  prĂȘt (coloration syntaxique et vĂ©rification de la syntaxe). Cependant, cela donne aussi des contenus plus verbeux que les Justfiles.

À noter que la ligne version est indispensable aux Taskfile car des versions antĂ©rieures du format de fichier sont incompatibles.

B. Exemples équivalents

Voici trois fichiers d’exemple montrant les mĂȘmes commandes basiques pour les Makefile, Justfile et Taskfile :

1. Makefile

BINNAME = hellomake
.PHONY: build clean test
build: ## Compile le binaire
gcc -o $(BINNAME) main.c
./gen_assets.sh
clean: ## Supprime les fichiers générés
rm -f $(BINNAME)
test: ## Exécute les tests
./tests.sh

Historiquement, les Makefile Ă©taient (et sont encore) utilisĂ©s pour produire des fichiers. Les cibles peuvent ĂȘtre des fichiers et donc on se retrouve rĂ©guliĂšrement Ă  utiliser .PHONY. C’est pratique mais ça ne me semble pas trĂšs Ă©lĂ©gant.

2. Justfile

BINNAME := "hellojust"
# Compile le binaire
build:
gcc -o {{BINNAME}} main.c
./gen_assets.sh
# Supprime les fichiers générés
clean:
rm -f {{BINNAME}}
# Exécute les tests
test:
./tests.sh

La syntaxe reste trĂšs proche d’un Makefile. En terme de possibilitĂ©, il n’y a pas de dĂ©pendances sur les fichiers pour exĂ©cuter (ou non) une commande.

3. Taskfile.yml

version: &apos3&apos
vars:
BINNAME: hellotask
tasks:
build:
desc: Compile le binaire
cmds:
- gcc -o {{.BINNAME}} main.c
- ./gen_assets.sh
clean:
desc: Supprime les fichiers générés
cmd: rm -f {{.BINNAME}}
test:
desc: Exécute les tests
cmd: ./tests.sh

Le format YAML permet de faire des listes ou de laisser sur une seule ligne s’il n’y a qu’une seule instruction (cf. cmd). L’ensemble des attributs rend le contenu assez explicite. Il n’y a pas de dĂ©pendances sur les fichiers (comme just).

C. ParamĂštres Ă  passer Ă  la commande

1. Makefile

Il est possible de fournir une valeur par défaut, modifiable sur la ligne de commande :

PORT ?= 8000
staticserver:
python3 -m http.server $(PORT)

Le rĂ©sultat dans un terminal :

$ make staticserver
python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
[...]
$ make staticserver PORT=8888
python3 -m http.server 8888
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) ...

2. Justfile

Justfile a des paramĂštres avec des valeurs par dĂ©faut :

staticserver port="8000":
python3 -m http.server {{port}}

Le rĂ©sultat dans un terminal :

$ just staticserver
python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) 

[...]
$ just staticserver 8888
python3 -m http.server 8888
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) 


À noter que just staticserver PORT=8888 provoque une erreur (invalid int value: 'PORT=8888').

3. Taskfile

version: &apos3&apos
tasks:
staticserver:
vars:
PORT: &apos{{default "8000" .PORT}}&apos
cmds:
- python3 -m http.server {{.PORT}}

Le rĂ©sultat dans un terminal :

$ task staticserver
task: [staticserver] python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
[...]
$ task staticserver PORT=8888
task: [staticserver] python3 -m http.server 8888
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) ...

D. Prise en compte de fichier .env

La prise en charge est plus ou moins directe mais rien d’insurmontable.

1. Makefile

Contrairement Ă  just et task, make ne prend pas nativement les fichiers .env en charge. Il suffit d’ajouter ces lignes en dĂ©but de fichier pour que le fichier .env soit chargé :

# Chargement du fichier .env
ifneq (,$(wildcard ./.env))
include .env
export
endif

C’est simplement du code valide pour make : ici, la fonction wildcard permet de dĂ©tecter l’existence du fichier .env. La directive include charge le fichier donc les donnĂ©es du fichier .env deviennent disponibles comme variables dans le Makefile. La directive export passe l’ensemble des variables en tant que variables d’environnement aux commandes exĂ©cutĂ©es par le Makefile.

C’est plus simple pour just et task car le chargement de fichiers d’environnement est dĂ©jĂ  intĂ©grĂ© aux outils.

2. Justfile

Il suffit d’activer l’usage de fichier .env puis de rĂ©cupĂ©rer la variable d’environnement souhaitĂ©e :

set dotenv-load
port := env("PORT", "8000")

La variable port dans just vaudra ce que contient la variable d’environnement PORT si elle est disponible, sinon elle vaudra 8000.

3. Taskfile 

Il est possible de dĂ©finir plusieurs fichiers qui Ă©crasent leurs valeurs selon l’ordre de leur dĂ©finition :

dotenv:
- .env.local # config locale (priorité la plus haute)
- [...]
- .env # fichier par défaut (priorité la plus faible)

La variable d’environnement PORT dĂ©finie (ou redĂ©finie) par le fichier d’environnement de plus grande prioritĂ© sera disponible via $PORT.

E. Lister les commandes disponibles

Cette possibilitĂ© est disponible nativement pour just et task :

  • just --list utilise le commentaire situĂ© au-dessus de la commande.
  • task --list utilise la valeur de desc si elle est disponible pour documenter la commande.

L’usage est visible dans les exemples de la section « B. Exemples Ă©quivalents ».

Pour make, cela devrait ĂȘtre possible avec --print-targets dans le futur lorsqu’une nouvelle version sera publiĂ©e.

En attendant, il faut Ă©crire une cible dĂ©diĂ©e. Par exemple :

help: ## Montre les commandes disponibles
@echo "Commandes disponibles :"
@grep -E &apos^[a-zA-Z_-]+:.*?##&apos $(MAKEFILE_LIST) | \
sort | \
awk &aposBEGIN{FS=":.*?## "}{printf " %-10s %s\n", $$1, $$2}&apos

Cela suppose que l’on a un commentaire qui suit la convention attendue par la cible help :

cible: ## viser le centre
guillaume --tell --vise=pomme

F. Ne pas afficher la commande exécutée

Dans ce cas, seules les sorties standard et d’erreur sont affichĂ©es.

make et just utilisent la mĂȘme astuce : prĂ©fixer la commande par @.

task utilise l’attribut silent qui peut ĂȘtre insĂ©rĂ© Ă  plusieurs endroits. Une variable d’environnement est aussi disponible.

tasks:
echo:
cmds:
- cmd: echo "Print something"
silent: true

Conclusion

Les trois outils ont des capacitĂ©s non abordĂ©es dans cet article. J’ai l’impression que les cas d’usage entre just et task se recoupent complĂštement.

make est le choix classique avec la barriĂšre Ă  l’entrĂ©e la plus faible pour entrer sur une base de code. Cependant, si just ou task est dĂ©jĂ  installĂ© pour dĂ©velopper des services web par exemple, autant le mettre partout.

Entre les deux, j’ai une prĂ©fĂ©rence pour just qui est moins verbeux. La popularitĂ© des deux projets est grandissante mais just a l’air de prendre l’avantage :

Comparaison des étoiles Github au 7 juin 2026Comparaison des étoiles Github au 7 juin 2026

Actuellement :

  • just a 32,4 k★
  • task a 15,7 k★

Les restes

Versions utilisĂ©es pour l’article :

  • make 4.4.1
  • just 1.50.0
  • task 3.41.0

Un serveur HTTP de fichiers statiques est vraiment fourni avec Python : la commande python3 -m http.server est fonctionnelle. C’est pratique pour du rĂ©seau local mais une mauvaise idĂ©e en production.

Le graphique montrant l’évolution des Ă©toiles Github a Ă©tĂ© tĂ©lĂ©chargĂ© depuis https://www.star-history.com/?repos=go-task%2Ftask%2Ccasey%2Fjust&type=timeline&legend=top-left. Le service permet aussi de tĂ©lĂ©charger un fichier .csv si besoin.

07 June, 2026 06:27PM by ascendances

May 24, 2026

Vincent Bernat

Partitionner une table de routage pour des lectures sans verrou en Go

Pour associer des informations de routage, telles que les chemins d’AS ou les communautĂ©s BGP, aux flux, Akvorado peut importer des routes via le BGP Monitoring Protocol (BMP). Comme la table de routage Internet contient plus d’un million de routes, Akvorado doit gĂ©rer des dizaines de millions de routes1. C’est un dĂ©fi de longue date2, mais je pense que ce problĂšme est dĂ©sormais rĂ©solu grĂące au sharding de la RIB, une mĂ©thode qui dĂ©coupe la base de routage en plusieurs parties afin de permettre les mises Ă  jour concurrentes.

Implémentation précédente

Akvorado associe deux Ă©lĂ©ments pour construire sa RIB :

  1. un arbre de préfixes et
  2. une liste de routes attachée à chaque préfixe.
Implémentation de la RIB BMP d'Akvorado avant le sharding, avec la disposition mémoire de chaque structure et un unique verrou.
Implémentation de la RIB BMP d'Akvorado sans sharding. Un unique verrou en lecture/écriture.

Dans le diagramme ci-dessus, la RIB stocke cinq prĂ©fixes IPv4 et deux prĂ©fixes IPv6. L’un d’eux, 2001:db8:1::/48, contient trois routes :

  • depuis le pair 3, via 2001:db8::3:1, AS 65402, chemin d’AS 65402, communautĂ© 65402:31 ;
  • depuis le pair 4, via 2001:db8::4:1, mĂȘmes ASN, chemin d’AS et communauté ;
  • depuis le pair 5, via 2001:db8::5:1, AS 65402, chemin d’AS 65401 65402, communautĂ© 65402:31.

La structure rib est dĂ©finie en Go de la maniĂšre suivante :

type rib struct {
    tree          *bart.Table[prefixIndex]
    routes        map[routeKey]route
    nlris         *intern.Pool[nlri]
    nextHops      *intern.Pool[nextHop]
    rtas          *intern.Pool[routeAttributes]
    nextPrefixID  prefixIndex
    freePrefixIDs []prefixIndex
}

L’arbre de prĂ©fixes s’appuie sur le paquet bart, une adaptation de l’algorithme ART de Donald Knuth. Les benchmarks montrent qu’il surpasse les autres implĂ©mentations pour les recherches, les insertions et la consommation mĂ©moire3. De plus, l’auteur est d’une grande aide.

Stocker les routes dans une table associative

La liste des routes de chaque prĂ©fixe n’est pas stockĂ©e directement dans l’arbre de prĂ©fixes : cela mettrait trop de pression sur le ramasse-miettes en allouant un tableau par prĂ©fixe.

À la place, la RIB attribue un identifiant de 32 bits unique Ă  chaque prĂ©fixe, soit en prenant le dernier identifiant disponible dans le tableau freePrefixIDs, soit en utilisant la valeur nextPrefixID avant de l’incrĂ©menter. Les routes sont ensuite stockĂ©es dans la table associative routes, qui s’appuie en Go sur une structure particuliĂšrement optimisĂ©e. Pour rĂ©cupĂ©rer les routes attachĂ©es Ă  un prĂ©fixe, nous les cherchons un par un dans la table routes via une clef de 64 bits qui combine l’index de 32 bits du prĂ©fixe avec l’index de 32 bits reprĂ©sentant la position de la route dans la liste. Akvorado parcourt les routes de la premiĂšre Ă  la derniĂšre pour trouver la meilleure4. Il sait qu’il n’y a plus de route lorsque la clĂ© ne renvoie aucun rĂ©sultat.

type prefixIndex uint32
type routeIndex uint32
type routeKey uint64

Canonisation des routes

Une route contient un identifiant de pair BGP, un NLRI partiel5, le prochain saut et les attributs.

type route struct {
    peer       uint32
    nlri       intern.Reference[nlri]
    nextHop    intern.Reference[nextHop]
    attributes intern.Reference[routeAttributes]
    prefixLen  uint8
}

type nlri struct {
    family bgp.Family
    path   uint32
    rd     RD
}
type nextHop netip.Addr
type routeAttributes struct {
    asn              uint32
    asPath           []uint32
    communities      []uint32
    largeCommunities []bgp.LargeCommunity
}

Pour Ă©conomiser la mĂ©moire et les allocations, les NLRI, les prochains sauts et les attributs de route sont canonisĂ©s : un entier de 32 bits remplace la valeur rĂ©elle. Ce mĂ©canisme est antĂ©rieur au paquet unique introduit dans Go 1.23. Nous le conservons car ses compromis sont diffĂ©rents :

  • il utilise un comptage de rĂ©fĂ©rences explicite plutĂŽt que des pointeurs faibles ;
  • il fonctionne avec des valeurs non comparables implĂ©mentant les mĂ©thodes Hash() et Equal()6 ;
  • il utilise des instances explicites pour la canonisation, ce qui se rĂ©vĂšlera utile pour le sharding ;
  • il offre de meilleures performances. Voir par exemple ce benchmark ;
  • il consomme deux fois moins de mĂ©moire grĂące Ă  des rĂ©fĂ©rences 32 bits plutĂŽt que des pointeurs ;
  • mais il n’est pas utilisable de maniĂšre concurrente.

Qu’est-ce qui pose problùme ?

Note

Pour l’AS 12322, nous n’utilisons pas encore BMP7. Mais Gerhard Bogner a eu la patience, la disponibilitĂ© et les compĂ©tences techniques pour m’aider Ă  dĂ©boguer ce problĂšme.

Le verrou global en lecture/Ă©criture est le goulot d’étranglement de cette implĂ©mentation. Mais pourquoi ? Plusieurs composants utilisent la RIB, chacun avec ses propres contraintes :

  • Les consommateurs Kafka consultent la RIB pour enrichir les flux avec des informations de routage. Leur nombre est bornĂ©e par la somme des partitions Kafka8. Akvorado ajuste Ă©galement ce nombre afin de garantir un export groupĂ© efficace des flux vers ClickHouse. Sur notre installation, la quantitĂ© de consommateurs oscille entre 8 et 16. Comme nous voulons observer les donnĂ©es rĂ©centes le plus tĂŽt possible, nous ne pouvons pas nous permettre que les consommateurs Kafka prennent trop de retard.

  • Les routeurs surveillĂ©s envoient leurs routes via le protocole BMP. À la connexion, ils peuvent envoyer des millions de routes9. AprĂšs la synchronisation initiale, les mises Ă  jour arrivent en continu et peuvent connaĂźtre des pics ponctuels. Le routeur dĂ©tecte une station BMP bloquĂ©e lorsque sa fenĂȘtre TCP est pleine. Dans ce cas, il rĂ©initialise la session. Bien qu’Akvorado dispose d’un important tampon en entrĂ©e, il doit appliquer les routes reçues suffisamment vite pour ne pas ĂȘtre considĂ©rĂ© comme bloquĂ©.

  • Quand un pair BGP distant tombe, Akvorado purge les routes associĂ©es en parcourant la RIB. Quand un routeur surveillĂ© tombe, Akvorado patiente un peu, mais finit par purger toutes les routes associĂ©es.

En rĂ©sumé : sur une installation chargĂ©e, la contention sur le verrou est forte autant pour les lecteurs que pour les Ă©crivains, et aucun des deux ne peut prendre trop de retard.

Sharding de la RIB

PremiÚre étape

Pour supprimer le verrou global, la RIB est dĂ©coupĂ©e en plusieurs « shards », chacun gĂ©rant un sous-ensemble des prĂ©fixes :

Implémentation de la RIB BMP d'Akvorado aprÚs le sharding, avec la disposition mémoire de chaque structure et un verrou par partition.
Implémentation de la RIB BMP d'Akvorado avec sharding.

L’arbre de prĂ©fixes reste global et protĂ©gĂ© par un unique verrou. Chaque partition dispose de son propre verrou en lecture/Ă©criture, de sa table de routes et de ses blocs de canonisation pour stocker les NLRI, les prochains sauts et les attributs de route, ce qui n’aurait pas Ă©tĂ© possible avec le paquet unique de Go. Les index de prĂ©fixes sont eux aussi partitionnĂ©s : les 8 bits de poids fort correspondent Ă  l’index de la partition et les 24 bits de poids faible Ă  l’index local du prĂ©fixe.

Gerhard a confirmĂ© que suite Ă  ce changement Ă  l’aveugle, le composant BMP a commencĂ© Ă  ronronner. 🎉

J’ai ensuite Ă©crit un benchmark portant sur un demi-million de routes synthĂ©tiques mais plausibles10, rĂ©parties entre 0 et 8 Ă©crivains qui modifient les routes aussi vite que possible, tandis que 1 Ă  16 lecteurs consultent en boucle un ensemble de 10 000 routes. J’ignore si ce benchmark est rĂ©aliste, mais il confirme les amĂ©liorations Ă  la fois sur les latences en lecture et en Ă©criture :

Deux cartes de chaleur. L'une pour le ratio de latence en lecture, l'autre pour celui de la latence en écriture. Toutes deux comparent l'accélération entre le code avant et aprÚs le sharding via des cases colorées. La plupart des cases sont vertes.
Amélioration des performances de latence en lecture et en écriture aprÚs le sharding.

Il montre Ă©galement qu’un grand nombre d’écrivains dĂ©grade la latence en lecture.

DeuxiÚme étape

L’unique verrou en lecture/Ă©criture protĂ©geant l’arbre de prĂ©fixes constitue la cible suivante. Le paquet bart propose des mĂ©thodes alternatives pour les mutations. Elles renvoient un arbre mis Ă  jour via une copie partielle. Les lecteurs n’ont plus besoin du verrou global, qui ne sert plus qu’à synchroniser les Ă©crivains. L’arbre de prĂ©fixes est encapsulĂ© dans un pointeur atomique.

Implémentation de la RIB BMP d'Akvorado pour le sharding avec lectures sans verrou, avec la disposition mémoire de chaque structure.
Implémentation de la RIB BMP d'Akvorado avec sharding et lectures sans verrou.

Sans verrou, un lecteur peut dĂ©sormais rĂ©cupĂ©rer un index de prĂ©fixe pĂ©rimĂ© en parcourant sa copie de l’arbre, lorsqu’un Ă©crivain concurrent supprime la derniĂšre route attachĂ©e Ă  cet index et le recycle pour un autre prĂ©fixe. Pour Ă©viter ce problĂšme, nous combinons l’index de prĂ©fixe avec un numĂ©ro de gĂ©nĂ©ration que nous stockons dans l’arbre :

type generation uint32
type prefixRef struct {
    idx prefixIndex
    gen generation
}
type rib struct {
    mu     sync.Mutex
    tree   atomic.Pointer[bart.Table[prefixRef]]
    shards []*ribShard
}

Chaque partition stocke le numĂ©ro de gĂ©nĂ©ration de chaque index de prĂ©fixe local. Ce numĂ©ro est incrĂ©mentĂ© quand l’index de prĂ©fixe associĂ© est libĂ©rĂ©. Lors de la recherche des routes attachĂ©es Ă  un index de prĂ©fixe, le lecteur vĂ©rifie que le numĂ©ro de gĂ©nĂ©ration correspond. Sinon, il considĂšre que l’index a Ă©tĂ© recyclĂ© et que la liste de routes est vide11. Le schĂ©ma prĂ©cĂ©dent illustre ce cas pour l’index de prĂ©fixe 5, stockĂ© avec un numĂ©ro de gĂ©nĂ©ration de 3, alors que la valeur actuelle dans le tableau []generations est 4. Le numĂ©ro de gĂ©nĂ©ration peut boucler, mais ce n’est pas un problĂšme car les recherches sont rapides.

L’exĂ©cution du benchmark sur cette nouvelle implĂ©mentation montre les amĂ©liorations sur la latence en lecture ainsi qu’en Ă©criture dĂšs que le coĂ»t de la copie partielle de l’arbre de prĂ©fixes est amorti.

Six cartes de chaleur. Trois pour le ratio de latence en lecture, trois autres pour celui de la latence en écriture. Elles comparent par paires les valeurs sans sharding, avec sharding, et avec lectures sans verrou. Pour la latence en lecture, la plupart des cases sont vertes, ce qui traduit l'amélioration apportée par la seconde étape. Pour la latence en écriture, l'accélération est négative pour un faible nombre de lecteurs.
Amélioration des performances de latence en lecture et en écriture aprÚs les lectures sans verrou. La colonne centrale montre les améliorations cumulées des deux étapes.

Parmi les nombreuses tentatives d’optimisation du composant BMP, le sharding de la RIB est l’une des plus satisfaisantes. Akvorado 2.2 implĂ©mente la premiĂšre Ă©tape. La PR #2433, rĂ©digĂ©e pendant l’écriture de ce billet, implĂ©mente la seconde et est sortie avec Akvorado 2.4. đŸȘ“


  1. Chaque routeur exportant des flux n’a pas besoin d’envoyer ses routes. Quand Akvorado ne trouve pas de route pour un Ă©quipement donnĂ©, il se rabat sur une route envoyĂ©e par un autre Ă©quipement. C’est Ă  l’opĂ©rateur de juger si cette approximation est acceptable. ↩

  2. J’ai effectuĂ© de nombreuses tentatives pour augmenter l’efficacitĂ© du composant BMP. Voir par exemple les PR #254, PR #255, PR #278, PR #2244 et PR #2245. MalgrĂ© ces efforts, ce composant est restĂ© problĂ©matique pour certains utilisateurs. Voir la discussion #2287 comme exemple le plus rĂ©cent. ↩

  3. Cela continue de s’amĂ©liorer : bart 0.28.0 introduit une implĂ©mentation alternative qui troque un peu de mĂ©moire contre de meilleures performances en recherche. Je ne l’ai pas encore essayĂ©e car cela fait dĂ©jĂ  quelques mois que je prĂ©pare ce billet. ↩

  4. Akvorado prĂ©fĂšre la route dont le prochain saut correspond exactement. Sinon, il se rabat sur n’importe quelle autre route. C’est une approximation. Une alternative consisterait Ă  maintenir un arbre de prĂ©fixes par pair BGP, mais il faudrait alors configurer tous les routeurs pour qu’ils exportent leurs routes. Le dĂ©mon BMP de pmacct adopte cette approche. ↩

  5. Si nous considĂ©rons la RIB BGP comme une base de donnĂ©es, le NLRI (Network Layer Reachability Information) en constitue la clĂ© primaire. Son contenu dĂ©pend de la famille BGP. Pour IPv4 ou IPv6 unicast, il s’agit du prĂ©fixe. Pour les familles VPNv4 et VPNv6, il inclut le route distinguisher. Si l’extension ADD-PATH est activĂ©e, le NLRI contient Ă©galement un identifiant de chemin.

    Dans notre implĂ©mentation, nous ne stockons pas le prĂ©fixe : nous le reconstituons Ă  partir de l’adresse IP recherchĂ©e et de la longueur de prĂ©fixe stockĂ©e sĂ©parĂ©ment. ↩

  6. Les mĂ©thodes Hash() s’appuient sur les paquets hash/maphash et unsafe pour une meilleure performance. Voir par exemple la fonction Hash() de la structure nlri. ↩

  7. Bien qu’auteur ou co-auteur des premiĂšres RFC liĂ©es Ă  BMP depuis 2016 (RFC 7854, RFC 8671, RFC 9069), Cisco n’a pas fourni d’implĂ©mentation utilisable dans IOS XR avant la version 24.2.1. Il nous reste encore quelques routeurs Ă  mettre Ă  jour pour activer cette fonctionnalitĂ©. ↩

  8. La KIP-932 introduit, dans Kafka 4.2, la notion de groupes partagĂ©s pour permettre la consommation coopĂ©rative d’une mĂȘme partition. Akvorado ne la prend pas encore en charge. ↩

  9. BMP peut ĂȘtre configurĂ© pour envoyer les routes de chaque pair BGP avant ou aprĂšs l’application des politiques entrantes. Dans ce dernier cas, plus d’un million de routes peuvent arriver par transit. BMP peut aussi ĂȘtre configurĂ© pour envoyer la RIB locale, qui ne contient que le meilleur chemin pour chaque prĂ©fixe. ↩

  10. Les prĂ©fixes sont alĂ©atoires, mais la distribution de leurs tailles et celle des longueurs de chemin AS suivent les donnĂ©es fournies par Geoff Huston. ↩

  11. Une alternative aurait Ă©tĂ© de rĂ©essayer la recherche, mais cela n’aurait pas de sens : la RIB est une structure cohĂ©rente Ă  terme et une liste de routes vide est bien un Ă©tat qui s’est produit rĂ©cemment. ↩

24 May, 2026 07:00PM by Vincent Bernat

April 26, 2026

hackergotchi for Aur&#233;lien Jarno

Aurélien Jarno

Running upstream OpenSBI on SpacemiT K1

The SpacemiT K1 is a rather interesting RISC-V SoC, found for instance on boards like the Banana Pi BPI-F3 board. It's one of those platforms that looked promising on paper, but took a bit of time before things really started to move upstream. Things have clearly accelerated over the last few months.

Linux 7.0 brings, among other things PCIe support, making the board quite capable as a development board. SD card, CPU thermal sensor and cpufreq support are already in the pipe.

Unfortunately the situation is less advanced on the firmware side. There is only very basic support for the SpacemiT K1 in U-Boot for the second stage, and initial SPL support has been posted on the mailing list, but has not yet been merged. In practice, this means you still have to rely on the vendor U-Boot, which is based on the rather old 2022.10 release.

On the other hand, OpenSBI does have upstream support for the SpacemiT K1, however it is not compatible with the vendor U-Boot, mostly due to device tree differences.

This can be addressed by applying a few patches to the vendor U-Boot, which I have published in a git tree in the k1-bl-v2.2.y-opensbi branch (technically this can also be handled on the OpenSBI side, but I prefer using a vanilla upstream OpenSBI version). The first two patches update the configuration to get closer to the upstream U-Boot defaults, and to enable some configuration options for the Milk-V Jupiter board, which stores its firmware in SPI NOR flash, instead of eMMC for the Banana Pi BPI-F3. The following patches update the device tree by adding extra compatible entries to several devices, as expected by the upstream kernel and OpenSBI (thanks to Troy Mitchell for the hint about the UART change) and update the CPU riscv,isa properties. Finally an additional patch adds the SpacemiT P1 PMIC to the device tree, which is required for the OpenSBI reboot patchset I recently posted (this is currently done only for the Banana Pi BPI-F3 and Milk-V Jupiter boards, but extending it to other boards should be straightforward) [Update: This patchset is included in OpenSBI v1.9].

Building this U-Boot version is as simple as running this command in the source directory:

make k1_defconfig && make

On a Banana Pi BPI-F3 board, the resulting U-Boot can be flashed with:

echo 0 > /sys/block/mmcblk0boot0/force_ro
dd if=FSBL.bin of=/dev/mmcblk0boot0 bs=512 seek=1
dd if=u-boot.itb of=/dev/mmcblk0p1

Building upstream OpenSBI is also fairly simple, and can be done by running this command in the source directory:

make PLATFORM=generic

On a Banana Pi BPI-F3 board, the resulting OpenSBI can be flashed with:

dd if=fw_dynamic.itb of=/dev/mmcblk0p2

Note that the vendor U-Boot version is patched to install OpenSBI in a separate partition instead of embedding, as the upstream U-Boot does. While this works well on the Banana Pi BPI-F3, the corresponding partition in the Milk-V Jupiter SPI NOR flash is too small for the upstream OpenSBI version, and can't be easily resized without breaking compatibility. To address this, the branch k1-bl-v2.2.y-opensbi-embedded contains an additional patch (a bit hackish I admit) to somehow restore the upstream approach. The build process remains simple, first build OpenSBI with the following command:

make PLATFORM=generic

Then build U-Boot, specifying the patch to the just built OpenSBI firmware:

make k1_defconfig && make OPENSBI=/path/to/opensbi/build/platform/generic/firmware/fw_dynamic.bin

On a Milk-V Jupiter board, the resulting combined U-Boot/OpenSBI can be flashed with:

modprobe mtdblock
dd bs=4k if=FSBL.bin of=/dev/mtdblock2
dd bs=4k if=u-boot.itb of=/dev/mtdblock5

This combined U-Boot/OpenSBI can also be used on a Banana Pi BPI-F3, using the same flashing procedure as above, while skipping the OpenSBI part (although running it won't cause any issue, it will simply be unused).

All of this is admittedly a bit hackish, but enabling the use of upstream OpenSBI is already one step forward. Hopefully, in a few months, we will be able to rely entirely on upstream U-Boot.

26 April, 2026 12:13PM by aurel32

April 22, 2026

Vincent Bernat

CSS & rythme vertical pour le texte, les images et les tableaux

Le rythme vertical structure les lignes selon un espacement rĂ©gulier de haut en bas. Il permet de guider l’Ɠil de maniĂšre fluide et prĂ©visible. GrĂące Ă  l’unitĂ© CSS rlh, ce rythme est simple Ă  mettre en place pour le texte1. Mais les illustrations et les tableaux peuvent perturber la mise en page. Le typographe amateur en moi aspire Ă  suivre la sagesse de Bringhurst :

Les titres, intertitres, citations, notes de bas de page, illustrations, lĂ©gendes et autres intrusions dans le texte crĂ©ent des syncopes et des variations par rapport au rythme de base d’un interlignage rĂ©gulier. Ces variations peuvent et doivent animer la page, mais le texte principal doit Ă©galement reprendre, aprĂšs chaque variation, prĂ©cisĂ©ment la mesure et la phase.

― Robert Bringhurst, The Elements of Typographic Style

Pour le texte

Trois facteurs rĂ©gissent le rythme vertical : la taille de police, la hauteur de ligne et la marge ou le remplissage. Posons la base avec une police de 18 pixels et une hauteur de ligne de 1,5 :

html {
  font-size: 112.5%;
  line-height: 1.5;
}
h1, h2, h3, h4 {
  font-size: 100%;
}
html, body,
h1, h2, h3, h4,
p, blockquote,
dl, dt, dd, ol, ul, li {
  margin: 0;
  padding: 0;
}

Le CSS Values and Units Module Level 4 dĂ©finit l’unitĂ© rlh, Ă©gale Ă  la hauteur de ligne de l’élĂ©ment racine. Tous les navigateurs la gĂšrent depuis 20232. Utilisez-la pour insĂ©rer des espaces verticaux ou corriger la hauteur de ligne quand la taille de police change3 :

h1, h2, h3, h4 {
  margin-top: 2rlh;
  margin-bottom: 1rlh;
}
h1 {
  font-size: 2.5rem;
  line-height: 2rlh;
}
h2 {
  font-size: 1.5rem;
  line-height: 1rlh;
}
h3 {
  font-size: 1.25rem;
  line-height: 1rlh;
}
p, blockquote, pre {
  margin-top: 1rlh;
}
aside {
  font-size: 0.875rem;
  line-height: 1rlh;
}

VĂ©rifions le rĂ©sultat en superposant une grille4 au-dessus du texte :

Capture d'écran de mon site avec une grille en superposition et chaque ligne de texte alignée sur la grille
L'unité CSS rlh fonctionne bien pour régler les espaces verticaux du texte. Vous pouvez afficher la grille avec Ctrl+Shift+G.

Si un sous-élément utilise une police aux métriques intrinsÚques plus hautes, il peut étirer la boßte de la ligne au-delà de la hauteur configurée5. Une astuce consiste à ramener la hauteur de ligne à 1. Les glyphes débordent mais ne poussent pas la ligne plus haut.

code, kbd {
  line-height: 1;
}

Pour les images adaptatives

Les images adaptatives, dont la taille s’ajuste Ă  la largeur de l’affichage, sont difficiles Ă  aligner sur la grille car leur hauteur nous est inconnue. Le CSS Rhythmic Sizing Module Level 1 introduit la propriĂ©tĂ© block-step pour ajuster la hauteur d’un Ă©lĂ©ment Ă  un multiple d’une unitĂ© de pas. Cependant, la plupart des navigateurs ne la gĂšrent pas encore.

Avec JavaScript, nous pouvons ajouter un remplissage autour de l’image pour qu’elle ne perturbe pas le rythme vertical :

const targets = document.querySelectorAll(".lf-media-outer");
const adjust = (el, height) => {
  const rlh = parseFloat(getComputedStyle(document.documentElement).lineHeight);
  const padding = Math.ceil(height / rlh) * rlh - height;
  el.style.padding = `${padding / 2}px 0`;
};

targets.forEach((el) => adjust(el, el.clientHeight));
Capture d'écran de mon site avec une grille en superposition et une image qui ne rompt pas le rythme vertical. Un remplissage supplémentaire est visible avant et aprÚs l'image. La hauteur de l'image avec son remplissage est de 216.
L'image s'aligne sur la grille grùce au remplissage calculé par JavaScript. 216 est divisible par 27, notre hauteur de ligne dans cet exemple.

Comme l’image est adaptative, sa hauteur peut varier. Il faut appeler la fonction adjust() dans un observateur :

const ro = new ResizeObserver((entries) => {
  for (const entry of entries) {
    const height = entry.contentBoxSize[0].blockSize;
    adjust(entry.target, height);
  }
});
for (const target of targets) {
  ro.observe(target);
}

Pour les tableaux

Les cellules d’un tableau pourraient fixer leur hauteur Ă  1rlh mais paraĂźtraient Ă  l’étroit. Passer Ă  2rlh gaspille trop d’espace. À la place, nous utilisons l’interligne incrĂ©mental : une ligne sur cinq est alignĂ©e sur la grille.

table {
  border-spacing: 2px 0;
  border-collapse: separate;
  th {
    padding: 0.4rlh 1em;
  }
  td {
    padding: 0.2rlh 0.5em;
  }
}

Pour aligner les Ă©lĂ©ments aprĂšs le tableau, il faut ajouter un peu de remplissage. Nous pouvons soit rĂ©utiliser le code JavaScript des images, soit utiliser quelques lignes de CSS qui comptent les lignes rĂ©guliĂšres et calculent le remplissage vertical manquant :

table:has(tbody tr:nth-child(5n):last-child)   { padding-bottom: 0.2rlh; }
table:has(tbody tr:nth-child(5n+1):last-child) { padding-bottom: 0.8rlh; }
table:has(tbody tr:nth-child(5n+2):last-child) { padding-bottom: 0.4rlh; }
table:has(tbody tr:nth-child(5n+3):last-child) { padding-bottom: 0 }
table:has(tbody tr:nth-child(5n+4):last-child) { padding-bottom: 0.6rlh; }

Une cellule d’en-tĂȘte a deux fois le remplissage d’une cellule rĂ©guliĂšre. Avec deux lignes rĂ©guliĂšres, le remplissage total vaut 2×2×0,2+2×0,4=1,6. Il faut ajouter 0.4rlh pour atteindre 2rlh de remplissage vertical supplĂ©mentaire autour du tableau.

Capture d'écran de mon site avec une grille en superposition et un tableau suivant le rythme vertical. Un remplissage supplémentaire est visible aprÚs le tableau. La hauteur du tableau avec son remplissage est de 405.
Une ligne sur cinq est alignée sur la grille. Un remplissage supplémentaire est ajouté aprÚs le tableau pour ne pas rompre le rythme vertical. 405 est divisible par 27, notre hauteur de ligne dans cet exemple.

Rien de tout cela n’est indispensable, mais une fois l’Ɠil entraĂźnĂ©, il devient difficile de ne plus le remarquer. En attendant que les navigateurs implĂ©mentent le CSS Rhythmic Sizing, un mĂ©lange de de bidouilles CSS et d’un peu de JavaScript suffit. Le texte principal reprend dĂ©sormais aprĂšs chaque intrusion « prĂ©cisĂ©ment la mesure et la phase ». đŸŽŒ


  1. Voir « Vertical rhythm using CSS lh and rlh units » par PaweƂ Grzybek. PrĂ©cĂ©demment, une bonne rĂ©fĂ©rence Ă©tait « Scale & Rhythm » de Iain Lamb. ↩

  2. Pour une meilleure compatibilitĂ©, remplacez 2rlh par calc(var(--line-height) * 2rem) et dĂ©finissez la propriĂ©tĂ© --line-height dans la pseudo-classe :root. J’ai Ă©crit un petit greffon PostCSS Ă  cet effet. ↩

  3. Il aurait Ă©tĂ© plus Ă©lĂ©gant de calculer la hauteur de ligne avec calc(round(up, calc(2.4rem / 1rlh), 0) * 1rlh). Cependant, l’arithmĂ©tique typĂ©e n’est pas encore implĂ©mentĂ©e par Firefox. De plus, les navigateurs ne gĂšrent round() que depuis 2024. J’ai donc codĂ© un autre greffon PostCSS pour cela. ↩

  4. Ce code CSS dĂ©finit une grille qui suit la hauteur de ligne :

    body {
      position: relative;
    }
    body::after {
      content: "";
      position: absolute;
      inset: 0;
      z-index: 9999;
      background: linear-gradient(180deg, #c8e1ff99 1px, transparent 1px);
      background-size: 20px 1rlh;
      pointer-events: none;
    }
    

    ↩

  5. Voir « Deep dive CSS: font metrics, line-height and vertical-align » par Vincent De Oliveira. ↩

22 April, 2026 07:48PM by Vincent Bernat

February 11, 2026

hackergotchi for Louis-Philippe Véronneau

Louis-Philippe Véronneau

ContrecƓur, Ray-Mont, les conteneurs et nous

Voici un texte que j'ai Ă©cris pour un numĂ©ro Ă  paraĂźtre du journal RĂ©sister et fleurir. J'Ă©cris rarement en français sur mon blog (qui est principalement destinĂ© Ă  un auditoire international), mais cela m'arrive quand mĂȘme parfois!


AnnoncĂ© pour la premiĂšre fois en 2014, le projet d'expansion du Port de MontrĂ©al Ă  ContrecƓur a fait couler beaucoup d'encre dans les derniĂšres annĂ©es.

En effet, il est certain que les travaux en eau et la construction du nouveau terminal portuaire causeront des dommages environnementaux irrĂ©parables — pensons notamment au chevalier cuivrĂ©, qui verra son habitat essentiel saccagĂ©. Cependant, ce projet soulĂšve Ă©galement des questions importantes quant Ă  sa viabilité économique et Ă  l'avenir des installations portuaires dans la grande rĂ©gion de MontrĂ©al.

Un contexte économique mondial qui a changé

Si le projet de ContrecƓur pouvait avoir un certain sens pour les acteurs Ă©conomiques lorsqu'il a Ă©tĂ© lancĂ© en 2014, force est de constater que le contexte Ă©conomique mondial a depuis changĂ©. En effet, le Port de MontrĂ©al vit deux pressions qui fragilisent sa place comme acteur portuaire de premier plan en AmĂ©rique du Nord.

PremiÚrement, les chaßnes d'approvisionnement internationales ont été fortement perturbées en 2019 à la suite de la pandémie et le commerce international ne s'en est jamais totalement remis. En effet, cet événement majeur a mis en lumiÚre la fragilité de nos économies et beaucoup de pays ont compris le danger de dépendre (parfois substantiellement) de pays étrangers pour leurs besoins de base, comme l'alimentation.

Avec le retour de Donald Trump aux États-Unis, il est clair que nous vivons prĂ©sentement la fin du statu quo pro-mondialisation qui rĂ©gnait depuis les annĂ©es 80. Si la remise en question de notre partenariat Ă©conomique avec les États-Unis, dans un Ă©lan de diversification Ă©conomique, aurait pu avoir comme effet l'augmentation des activitĂ©s portuaires Ă  destination de l'Europe et de l'Asie, il semble pour l'instant que cela n'a pas eu d'effet majeur dans le volume de marchandises transitant par le Port de MontrĂ©al.

Évolution du volume de marchandises transportĂ© par le Port de MontrĂ©al

En second lieu, le Port de MontrĂ©al ne rĂ©pond plus aux standards internationaux en terme d'infrastructures maritimes, principalement Ă  cause du niveau d'eau insuffisant dans le fleuve Ă  la hauteur de MontrĂ©al. Tel que notĂ© dans un rapport scientifique rĂ©cent demandĂ© par la SociĂ©tĂ© pour la nature et les parcs du Canada – section QuĂ©bec (SNAP-QuĂ©bec) :

« Le tirant d'eau du fleuve Saint-Laurent, qui atteint au maximum environ 11 mĂštres, limite l'accĂšs Ă  des navires de 4 500 EVP1. Pour rivaliser avec les ports de Halifax ou de New York, il faudrait pouvoir accueillir des navires d'au moins 5 500 Ă  6 000 EVP. Cette contrainte physique ne peut pas ĂȘtre levĂ©e sans un dragage majeur. »

Ainsi, alors que le Port est limité à des navires de 4 500 EVP, ces bateaux ne forment plus que 30 % de la capacité mondiale de transport maritime. En effet, les plus gros bateaux, de classe Ultra Large Container Vessels, peuvent désormais transporter plus de 18 000 EVP.

Tel que présenté dans le graphique ci-dessous, l'effet conjoint de ces deux pressions cause une diminution marquée du volume de marchandises conteneurisées et une stagnation de celui des marchandises solides transitant par le Port de Montréal.

Un transfert de capacité plutÎt qu'une augmentation nette

Quand on comprend le contexte Ă©conomique dans lequel s'inscrit ce projet, les travaux Ă  ContrecƓur peuvent sembler Ă©tonnants. Si le nombre de conteneurs est au mieux appelé à rester stable dans les prochaines annĂ©es, pourquoi le Port de MontrĂ©al souhaite-il augmenter sa capacitĂ© de prĂšs de 60 % ?

Dans le rapport de la SNAP-QuĂ©bec mentionnĂ© plus haut, les chercheurs Henri Chevaliers et Éric Pineault avancent une piste de solution : l'administration portuaire s'est trompĂ©e dans ses calculs et le projet est dĂ©jĂ  trop avancĂ© pour revenir en arriĂšre.

Bien que crĂ©dible, cette analyse paraĂźt tout de mĂȘme sommaire. Et si, plutĂŽt que d'envisager le projet Ă  ContrecƓur comme une maniĂšre d'augmenter son volume de marchandises, le Port de MontrĂ©al souhaitait plutĂŽt ... y dĂ©placer une partie de sa capacité ?

Selon son rapport annuel 2024, 37 % des coĂ»ts totaux du Port sont des dĂ©penses en main-d'Ɠuvre. Pire encore, ces coĂ»ts sont la seule variable opĂ©rationnelle que l'entreprise ne contrĂŽle pas directement. En effet, si elle peut continuer Ă  investir des capitaux pour optimiser ses infrastructures, le rapport de force du Syndicat des dĂ©bardeurs, bien connu pour ĂȘtre trĂšs combatif, rend le contrĂŽle des coĂ»ts de main-d'Ɠuvre complexe et imprĂ©visible. Les grĂšves de 10 jours en 2020, 5 jours en 2022 et de 4 jours en 2024 lui ont causĂ© des ennuis financiers importants, en plus de nuire Ă  sa valeur rĂ©putationnelle Ă  l'international.

Pour Ă©viter ce genre de dĂ©sagrĂ©ment, il est fort probable que le nouveau terminal de ContrecƓur soit presque entiĂšrement automatisĂ©. En procĂ©dant de la sorte, le Port rĂ©duirait fortement ses besoins en main‑d'Ɠuvre et augmenterait son rapport de force face au Syndicat des dĂ©bardeurs, grĂące Ă  la menace de dĂ©placer toujours plus de capacitĂ© vers des installations ne requĂ©rant pas leurs services.

Sans ContrecƓur, ce projet d'automatisation des installations du Port de MontrĂ©al serait difficilement rĂ©alisable. En effet, d'un point de vue technique, ce dernier doit continuer ses opĂ©rations et doit s'assurer de respecter ses contrats de manutention. Automatiser ses terminaux existants à MontrĂ©al serait l'Ă©quivalent de remplacer un moteur d'avion en plein vol : possible, mais techniquement complexe et donc particuliĂšrement coĂ»teux. De plus, la machinerie nĂ©cessaire pour opĂ©rer un tel terminal automatisĂ© augmenterait grandement les nuisances sonores et visuelles, nuisances dĂ©jĂ  souvent intolĂ©rables pour le voisinage...

Notons cependant que l'ouverture d'un nouveau terminal Ă  ContrecƓur n'entraĂźnera pas la fin des activitĂ©s du Port Ă  MontrĂ©al, mĂȘme Ă  moyen ou Ă  long terme. En effet, certains clients industriels comme Sucre Lantic ou Lallemand sont des partenaires du Port de trĂšs longue date et lui assurent une stabilitĂ© opĂ©rationnelle importante. Les infrastructures de ces clients sont fortement intĂ©grĂ©es aux activitĂ©s portuaires Ă  MontrĂ©al et il serait impensable d'envisager leur dĂ©placement.

Finalement, en libérant de l'espace sur ses quais à Montréal, le Port pourrait continuer d'améliorer ses infrastructures pour les bateaux de croisiÚre, un secteur qui, malgré ses répercussions environnementales souvent désastreuses, a connu une croissance mondiale de 16 % depuis 2019.

Ray-Mont Logistiques, entre l'arbre et l'écorce

Qu'en est-il donc de Ray-Mont Logistiques dans tout cela ? À la lumiĂšre de cette analyse, en restant Ă  MontrĂ©al, Charles Raymond risque littĂ©ralement de « manquer le bateau » et d'ĂȘtre pris avec des infrastructures portuaires moins intĂ©ressantes que celles auxquelles il pourrait avoir accĂšs Ă  ContrecƓur.

Comme les investissements de l'entreprise sur le site d'Assomption Sud sont encore pour l'instant minimales en comparaison avec son projet final de phase 2 (augmentation importante de la surface asphaltée, chemins de fer, élévateurs à grain, infrastructures d'ensachement, etc.), il est encore le temps pour elle de lever l'ancre.

De plus, la réglementation en place limitant ses heures d'opération de 7h du matin à 19h le soir est une épine majeure dans son pied et freine ses perspectives rentabilité futures.

Le dĂ©mĂ©nagement de RML serait cependant une victoire en demi-teinte, car elle ne rĂ©glerait pas le problĂšme de fond de l'industrialisation croissante de nos environnements et pĂ©renniserait la destruction des Ă©cosystĂšmes marins et terrestres Ă  ContrecƓur.

Il semble donc clair que notre stratĂ©gie de perturbation des activitĂ©s de Ray-Mont Logistiques — tant sur le terrain qu'au niveau des diffĂ©rentes instances gouvernementales — fonctionne et est plus importante que jamais. Chaque retard dans les travaux menant Ă  la phase 2 sera une occasion supplĂ©mentaire pour cette entreprise de fermer boutique et d'accepter que le site choisit dans Hochelaga, ne lui appartiendra jamais rĂ©ellement.

De Viauville Ă  ContrecƓur, en passant par la forĂȘt magique de Pointe-Aux-PĂšre et la Grande TourbiĂšre de Blainville, faisons-leur comprendre que nos espaces de vie ne sont pas Ă  vendre, car en dĂ©finitive, ils n'appartiennent Ă  personne.


  1. « Équivalent vingt pieds », une mesure standard de la capacitĂ© en conteneurs. ↩

11 February, 2026 06:46PM by Louis-Philippe Véronneau

December 20, 2025

Carl Chenet

Le travail en profondeur (deep work)

🧠 Le travail en profondeur (deep work en anglais) est l’énorme oubliĂ© de l’activitĂ© sur site. Étant donnĂ© l’organisation actuelle des bureaux, il n’est aujourd’hui possible (quasiment) qu’en tĂ©lĂ©travail.

⚠ Pour rappel, le travail en profondeur s’incarne dans des plages de temps de travail ininterrompues, de 1h à 4h. Vous commencez à voir le problùme.

📳 Impossible de se concentrer dans un open space. Les discussions au tĂ©lĂ©phone incessantes vous en empĂȘchent. Des rĂ©unions dĂ©marrent tous les demi-heures, parfois tous les quarts d’heure, et viennent briser votre concentration.

📱 Entre les deux, des collĂšgues discutent de diffĂ©rents projets, mais aussi de la pluie et du beau temps sous votre nez, vous interpellent directement s’ils ont une question, perturbant les calculs complexes que vous Ă©tiez laborieusement en train d’essayer de mener Ă  leur terme.

🍔 À midi, c’est le grand dĂ©part, des groupes se joignent, il faut courir pour manger avec untel ou unetelle, ou on vient vous chercher sans vergogne Ă  votre bureau, sans se soucier du rythme de travail qui est nĂ©cessaire pour mener Ă  bien votre Ă©tude en cours.

📝 Bien sĂ»r, tous les mĂ©tiers n’ont peut-ĂȘtre pas besoin de travail en profondeur. Les mĂ©tiers rĂ©actifs, ou on se met en avant en rĂ©agissant Ă  tout ce qui se passe dans l’entreprise (et souvent Ă  rien), sont ceux qui permettent d’ĂȘtre le plus visible et donc de se mettre en avant. Mais beaucoup le nĂ©cessitent. Le dĂ©veloppement d’applications, la conception d’architecture complexe, et sĂ»rement beaucoup d’autres demandent un travail en profondeur pour ĂȘtre menĂ© Ă  bien et dans les meilleures conditions.

❓ Et vous ? Comment gĂ©rez-vous vos plages de travail en profondeur ? Vous y arrivez sur site ou vous attendez vos jours de tĂ©lĂ©travail ? Dites moi tout en commentaires 🙏

L’auteur

đŸ§‘â€đŸ’» Je suis architecte infrastructure cloud (AWS et Azure) senior freelance, adepte du tĂ©lĂ©travail et du travail en profondeur, et conçois les infrastructures dont vous avez besoin pour faire tourner les services IT de vos entreprises. Disponible pour une nouvelle mission dĂšs mi-janvier 2026. N’hĂ©sitez pas Ă  me contacter si je peux vous aider dans vos projets.

20 December, 2025 01:08PM by Carl Chenet

September 18, 2025

hackergotchi for Louis-Philippe Véronneau

Louis-Philippe Véronneau

Compte-rendu de livre: Santé Inc. Mythes et faillites du privé en santé d'Anne Plourde

Voici un texte que j'ai Ă©cris pour le numĂ©ro de septembre 2025 de mon journal syndical. J'Ă©cris rarement en français sur mon blog (qui est principalement destinĂ© Ă  un auditoire international), mais cela m'arrive quand mĂȘme parfois!


Introduction

DÚs l'introduction, Plourde annonce ses couleurs: ce livre s'adresse aux personnes qui croient en un systÚme de santé universel, mais qui doutent de la capacité du systÚme public d'y arriver.

Dans ce livre, cette derniÚre s'attaque plus particuliÚrement à « la 'Santé Inc.', et donc aux entreprises (qu'il s'agisse de grandes multinationales ou d'entrepreneurs indépendants) qui mÚnent leurs activités dans l'objectif d'en tirer un profit - ce qu'on appelle communément le secteur privé à but lucratif. » (p.14-15)

Le livre est divisé en 5 chapitres, qui abordent chacun un mythe.

A picture of the book cover

Faillite 1: Le privé en santé échoue depuis un siÚcle

Mythe: le systÚme de santé est essentiellement public, le privé est une nouveauté.

Ce chapitre aborde l'histoire du systÚme de santé au Québec. Plourde affirme ainsi qu'à partir du XX^e^ siÚcle, les avancées de la médecine font en sorte que les hÎpitaux deviennent de réels lieux de soins (plutÎt que des lieux de prise en charge des 'indigents')

En effet, mis à part la tranche de population trÚs pauvre pour qui les soins sont gratuits, la forte majorité des gens n'ont pas accÚs aux soins pour des raisons financiÚres.

À partir des annĂ©es 1930, les syndicats rĂ©ussissent Ă  gagner la mise en place d'assurances privĂ©es sur les milieux de travail. Ce gain initial s'avĂšre en fait ĂȘtre un Ă©chec, car les progrĂšs de la mĂ©decine s'accompagnent d'une explosion des coĂ»ts, que les assurances collectives ont bien de la misĂšre Ă  assumer.

À partir des annĂ©es 1950, ce systĂšme ne fonctionne plus (il n'a jamais rĂ©ellement fonctionnĂ©...) et mĂȘme les hĂŽpitaux se montrent ouverts Ă  la crĂ©ation d'une assurance publique universelle.

Plourde brosse un portrait des services offerts à cette époque et démontre qu'en fait, que ce soit à cause des coûts ou à cause de la présence de déserts médicaux dans les quartiers et régions rurales jugées non rentables par le privé, seuls les riches ont accÚs aux services de santé.

C'est dans ce contexte qu'en 1971 la commission Castonguay-Nepveu propose la mise en place d'une assurance publique et universelle:

« [...] la commission Castonguay-Nepveu recommandait non seulement l'adoption d'une assurance maladie publique et universelle, mais également la nationalisation de l'ensemble des services de santé et des services sociaux et leur intégration dans un systÚme entiÚrement public. » p.29

L'État crĂ©e donc les CLSC, dans une optique de soins publics, dĂ©mocratiques et holistiques. En plus d'offrir des soins de santĂ©, ces derniers reçoivent comme mandat l'inclusion dĂ©mocratique des patient·e·s dans le rĂ©seau de santĂ© ainsi que la lutte contre les enjeux de santĂ© causĂ©s par des facteurs comme la malnutrition, la pollution, l'insalubritĂ© des logements, etc.

Les nouveaux CLSC sont cependant mis Ă  mal par le refus des mĂ©decins d'abandonner leur statut de travailleurs autonomes et de devenir salarié·e·s. Suite Ă  d'intenses campagnes de lobbying, l'État accepte finalement qu'ils restent la seule catĂ©gorie de travailleuses et de travailleurs de la santĂ© Ă  avoir des cabinets privĂ©s tout en pouvant bĂ©nĂ©ficier d'un financement public. Cette condition vient cependant avec l'impossibilitĂ© de travailler au privĂ©.

Les autres catégories de professionnel·le·s de la santé (psychologues, dentistes, etc.) peuvent cependant continuer de recevoir du financement privé, ce qui permet la survie des assurances privées. En effet, à l'instar de la commission Parent, la commission Castonguay-Nepveu croit qu'il est plus stratégique d'augmenter graduellement la couverture des soins de santé à travers les années pour tenter de minimiser le choc fiscal initial. Cela n'arrivera toutefois jamais.

Ploudre démontre ainsi que le pourcentage des dépenses privées des ménages dans le total des dépenses de santé au Québec a en fait augmenté depuis les années 70. En 2021, un ménage moyen dépensait 2897$ en soins privés, pour un total de 19,4 milliards de dollars (25,8% du budget total public-privé en santé). Ce pourcentage en 1970 était d'environ 20%.

Preuve de la faillite des CLSC, de nos jours, seul 15% des médecins de famille y pratiquent. La forte majorité travaillent ainsi dans des cliniques privées, les GMF.

La conclusion de ce chapitre est donc que le privé ne peut pas sauver le réseau de la santé, car il n'a jamais réellement été chassé du réseau!

Faillite 2: Le privé en santé échoue à réduire les coûts

Mythe 2: le privé coûte moins cher

« Cela est vrai tant pour le financement privé que pour la prestation privée des services » p.46

L'auteure affirme qu'un problÚme majeur du régime québécois est le régime privé d'assurance médicaments, qui entraßne la multiplication des frais de gestion et brise le pouvoir de négociation collectif dont jouirait un régime public et universel. Pire encore, il laisse au public les cas les plus coûteux (soit les pauvres, qui sont statistiquement plus malades que les riches).

De plus, Plourde note que le marché privé vise le profit et non la promulgation de soins. Quand le rapport de force des entreprises est important, les prix montent:

« Ainsi, en pleine crise de santé mentale, les tarifs suggérés par l'Ordre des psychologues du Québec en 2023 étaient 50% plus élevés que ce qui était affiché sur le site en 2021. » p.49

Plourde affirme également que lorsque le privé arrive à réaliser certains actes à coûts plus faibles que le public, c'est parce qu'il rogne sur les conditions de travail et sur la qualité des services, deux choses qui ne sont pas désirables.

À son avis, un facteur majeur dans l'augmentation des coĂ»ts en santĂ© est le fait que les mĂ©decins accaparent une partie trĂšs importante du budget de la santĂ© au QuĂ©bec:

« Alors que les mĂ©decins ne reprĂ©sentaient que l'Ă©quivalent de 6% des effectifs du rĂ©seau, cette profession accaparait Ă  elle seule 15% des dĂ©penses totales du MSSS en 2021-2022. La mĂȘme annĂ©e, les autres employé·e·s du rĂ©seau public, qui constituent donc 94% des effectifs, ont reçu une rĂ©munĂ©ration totale Ă©quivalent Ă  moins de 30% des dĂ©penses du MSSS.

La rémunération individuelle moyenne des médecins est de prÚs de 400 000$ par année, ce qui est 6,4 fois plus élevé que la rémunération moyenne des autres employé·e·s du réseau, et 8,2 fois plus que le revenu d'emploi moyen de l'ensemble des travailleuses et travailleurs du Québec. » p.61

Plourde termine le chapitre en démontrant que les expériences faites sur les coûts en clinique privée au Québec et ailleurs au Canada démontrent systématiquement que le privé coûte substantiellement plus cher.

Faillite 3: Le privĂ© en santĂ© Ă©choue Ă  ĂȘtre efficace

Mythe 3: le privé est plus efficace

« la Commission Castonguay-Nepveu ne s'est pas contentée de recommander la nationalisation des services de santé: elle a également recommandé leur démocratisation. » p.73

Lors de la création des CLSC, les conseils d'administration sont formés de patient·e·s et de membres de la communauté. L'idée de démocratisation de la santé est alors explicite:

« Cette petite rĂ©volution reprĂ©sentait non seulement une importante perte de pouvoir pour les Ă©lites Ă©conomiques, mais elle offrait aussi Ă  la population des outils pour rĂ©sister aux assauts que ces mĂȘmes Ă©lites n'allaient pas tarder Ă  lancer contre le nouveau systĂšme public. » p.74

Malheureusement, cette vision de la santé est mise à mal par l'imposition de pratiques de gestion néolibérales:

« Loin d'améliorer l'efficacité des services, ce processus de déconnexion grandissante avec le terrain aboutit donc, en contradiction complÚte avec les recommandations de la Commission Castonguay-Nepveu, à la destruction progressive des capacités du réseau à connaßtre les besoins réels de la population et d'y répondre adéquatement. » p.77

Conséquence de cette déconnexion, cette bureaucratisation accrue fait augmenter les coûts. Plourde affirme par exemple que les gens qui prodiguent des soins à domicile passent prÚs de 70% de leur temps de travail à effectuer des tùches administratives.

« Cette centralisation des pouvoir promue par les nouvelle gestion publique et le milieu des affaires s'accompagne nĂ©cessairement d'une bureaucratisation des services, puisque, au fur et Ă  mesure que les gestionnaires dĂ©tenteurs d'un pouvoir rĂ©el s'Ă©loignent du terrain, des mesures de contrĂŽle administratifs de plus en plus lourdes et complexes doivent ĂȘtre dĂ©veloppĂ©es. Celles-ci prennent par exemple la forme d'exigences de reddition de comptes statistiques auprĂšs du personnel qui dispense les soins et les services. » p.76

Un autre exemple de bureaucratisation du systÚme de santé est le financement à l'acte:

« Durant les annĂ©es 1980, environ 600 actes pouvaient faire l'objet d'une facturation de la part des mĂ©decins auprĂšs de la RĂ©gie de l'assurance malade. En une trentaine d'annĂ©es, ce nombre dĂ©jĂ  faramineux est passĂ© Ă  ... 11 000! La gestion de la rĂ©munĂ©ration mĂ©dicale est si lourde et si complexe que les mĂ©decins eux-mĂȘmes peinent dĂ©sormais Ă  s'y retrouver dans leur propre facturation et doivent faire appel Ă  des firmes spĂ©cialisĂ©es pour accomplir ces tĂąches. » p.80

Pire encore:

« [...] le financement Ă  l'activitĂ© a l'avantage considĂ©rable de mettre un prix prĂ©cis sur chaque activitĂ© hospitaliĂšre et, du mĂȘme coup, de faciliter leur achat et leur vente (et donc leur privatisation). » p.83

Plourde s'attarde par la suite à prouver l'inefficacité de GMF. Alors que ces cliniques privées ont été créés pour désengorger les urgences en offrant de plus longues plages horaires, cela ne semble pas avoir eu l'effet désiré. En effet, depuis leur création, les GMF n'ont jamais atteint les cibles de prise en charge de patient·e·s imposées par les gouvernements.

Comme les GMF sont incapables (lire: ils refusent) de prendre en charge des patient·e·s dans des plages horaires considérées comme peu attrayantes par les médecins (tard le soir et les fins de semaine), il leur est permis de signer des contrats avec d'autres organismes pour que ces derniers offrent cette prise en charge à leur place. Ainsi:

« En 2022, 41% des GMF avaient convenu de telles ententes et offraient donc une quantité d'heures de services inférieures à celle prévue par le programme GMF. Mais le plus surprenant et le plus choquant, c'est qu'au moins 37% de ces ententes ont été conclues avec les services d'urgence d'un hÎpital! » p.87-88

Malgré ces manquants, les GMF continuent néanmoins de recevoir l'ensemble de leur financement.

Autre absurditĂ© de ce systĂšme: le MinistĂšre a dĂ©cidĂ© de 'prĂȘter' gratuitement aux GMF des employé·e·s travaillant dans les CLSC pour combler leurs besoins en services de travail social et en psychologie:

« À partir de 2016, Ă  la suite d'une directive du ministĂšre en ce sens, une quantitĂ© grandissante de travailleurs sociaux et de travailleuses sociales ainsi que des psychologues qui pratiquaient jusqu'alors dans les CLSC ont Ă©tĂ© mis·e·s Ă  la disposition des GMF, gratuitement, par les Ă©tablissements publics. Officiellement, ces professionnel·le·s restent Ă  l'emploi des Ă©tablissements publics, mais ils et elles sont placé·e·s sous 'l'autoritĂ© fonctionnelle' des mĂ©decins de GMF et pratiquent dans leurs locaux. » p. 88

Une conséquence encore plus regrettable de ce systÚme est la perte d'accÚs à ces services dans les CLSC:

« Ainsi, seules les personnes inscrites auprÚs d'un médecin de GMF ont accÚs aux professionnel·le·s qui y sont transféré·e·s par les établissements publics. Or, plus du tiers de la population du Québec n'a toujours pas cette chance. » p.89

Plourde répertorie ainsi une perte de 42% de l'offre de service en travail social (700 000 heures/an) et de 52% en psychologie (60 000 heures/an) dans les CLSC dans les derniÚres années.

Constatant les problÚmes importants des GMF, le gouvernement a par la suite décidé de favoriser la création de super-GMF, qui offrent des services comme des radiographies, des prélÚvements et doivent servir en théorie de 'mini-urgences'. Plourde démontre cependant qu'en 2017, 62% de ces groupes n'atteignaient pas le nombre minimal de visites exigées. En 2021, cette proportion était de 82%.

Elle constate finalement que pour tenter de remplir leurs quotas, les médecins de ces super-GMF ont tendance à délaisser leurs propres patient·e·s, qui doivent alors se tourner vers l'urgence ou d'autres super-GMF...

On en comprend donc que le privé n'est pas réellement plus efficace que le public en santé.

Faillite 4: Le privé en santé échoue à désengorger le public

Mythe 4: le privé aide à réduire les listes d'attente dans le public

« [...] dans les faits, le privé est plutÎt un compétiteur féroce qui vampirise les ressources du public et réduit sa capacité à répondre aux besoins de la population » p. 95

C'est surtout le cas car la main d'Ɠuvre en santĂ© est finie et que le privĂ© tend donc Ă  'voler' des travailleuses et des travailleurs qui iraient autrement au public. En gĂ©nĂ©ral, si le privĂ© arrive Ă  ĂȘtre plus attractif, c'est parce qu'il est en mesure d'offrir de meilleurs salaires que le public et parce qu'il n'a pas besoin d'offrir des services 24h/24 7j/7.

En 1987, prÚs de 60% des personnes dans le domaine de la santé et de l'assistance sociale travaillait au public. En 2019, ce n'était plus le cas que de 50% des travailleurs et travailleuses de ce domaine.

Selon Plourde, cette situation est causée par trois problÚmes:

  1. Le dĂ©sengagement de l'État et les coupures budgĂ©taires
  2. La détérioration des conditions de travail
  3. Le fait que l'État paie plus cher pour un mĂȘme service offert au privĂ© qu'au public

Cette derniÚre parle ainsi de 'ponts d'or' du public vers le privé pour décrire cette situation.

« Les difficultés à réduire les listes d'attente pour le type de procédures qui sont privatisées dans ces cliniques ne sont pas causées par des manques d'équipement ou de salles d'opération dans les hÎpitaux publics. Elles sont causées par le manque de disponibilité du personnel, problÚme majeur qui force les hÎpitaux à sous-utiliser leurs salles d'opération. » p.104

Face Ă  ces problĂšmes, l'auteure remet de l'avant le fait que les barriĂšres mises en place pour empĂȘcher que les mĂ©decins ne travaillent au privĂ© fonctionnent. En effet, trĂšs peu de mĂ©decins travaillent au public (~4%) alors qu'au contraire la pratique privĂ©-publique est trĂšs populaire chez les physiothĂ©rapeutes ou les psychologues. Ces barriĂšres pour empĂȘcher la double pratique devraient donc ĂȘtre graduellement mises en place pour les autres professions, dans une optique de renationalisation des soins.

En effet, alors que de 2010 à 2020 le nombre de psychologues au Québec a augmenté de 5,5%, la crise de l'accessibilité s'est aggravée. Alors qu'en 2010, 28% des psychologues travaillaient dans la santé publique, en 2020, elles et ils n'étaient plus 23% à le faire. Pendant ce temps, la pratique privée a récupéré ces gens.

Plourde termine ce chapitre en mettant en garde contre la tĂ©lĂ©mĂ©decine, qui, n'Ă©tant pas offerte au public, est un service qui peut ĂȘtre offert par les mĂ©decins sans remettre en cause leur appartenance au rĂ©seau public. Elle craint en effet que cette pratique mixte ne prenne de l'ampleur, au profit du privĂ©.

Faillite 5: Le privé en santé échoue à préserver la qualité et l'équité

Mythe 5: le privé améliore la qualité des soins sans nuire à l'équité dans l'accÚs aux services

« On nous fait croire également que lorsque des personnes mieux nanties paient pour avoir accÚs plus rapidement aux services dans le secteur privé, elles libÚrent de la place dans le secteur public, facilitant ainsi l'accÚs pour les personnes qui n'ont pas les moyens de payer pour des services privés. » p. 124

Dans ce dernier chapitre, Plourde affirme que la décision de privatiser encore plus notre systÚme de santé est une entreprise d'abord et avant tout idéologique. En effet:

« [...] une revue de la littérature internationale a montré en 2014 que la mortalité et les coûts des services étaient plus élevés dans les établissements de santé privé à but lucratif que dans les organismes sans but lucratif. » p. 126

Ces effets sont connus depuis longtemps déjà, le Québec n'étant pas le premier à s'engager dans ce chemin. DÚs 1990, l'Italie privatise plusieurs services de santé et devient un contre-exemple marqué. On constate ainsi que plus le pourcentage de services assurés par le privé est grand, plus la mortalité des patient·e·s est importante. Des constats similaires ont été faits suite aux privatisations en santé en Angleterre en 2013 et en 2020 en Colombie-Britannique.

Selon Plourde, cette surmortalitĂ© est le rĂ©sultat de la crĂ©ation d'un systĂšme Ă  deux vitesses. En effet, alors que statistiquement les personnes plus aisĂ©es sont plus en santĂ©, grĂące au systĂšme privĂ©, elles ont accĂšs Ă  des soins plus rapidement. À l'inverse, les personnes les plus pauvres sont obligĂ©es de se retourner vers le systĂšme public, dĂ©financĂ© au profit du privĂ©.

On en revient donc à la conclusion générale que:

« Traiter la maladie comme une source de profits ne conduit pas à l'amélioration de la santé et des services, bien au contraire. Persévérer dans la voie néfaste d'une privatisation accrue des services serait donc une grave erreur. » p. 154

18 September, 2025 04:00AM by Louis-Philippe Véronneau

April 08, 2025

Cher Hydro-Québec: le Quartier latin mérite mieux

Voici un texte que j'ai Ă©cris pour le numĂ©ro d'avril 2025 de mon journal syndical. J'Ă©cris rarement en français sur mon blog (qui est principalement destinĂ© Ă  un auditoire international), mais cela m'arrive quand mĂȘme parfois!


Vue de haut de l'emprise du nouveau poste de transformation électrique, coin Berri et Ontario

Mai 2024. Le Devoir annonce qu'Hydro-QuĂ©bec s'est entendue avec BibliothĂšques et Archives nationales du QuĂ©bec pour l'achat du terrain coin Berri et Ontario pour la construction d'un nouveau poste de transformation Ă©lectrique. Berri-2, un poste de 315 000 volts, remplacera le jardin de lecture et le terrain gazonnĂ© face Ă  l'Îlot Voyageur1. Exit, la statue de Danny LaferriĂšre.

On nous apprend ainsi qu'un bĂątiment plus grand que la Grande BibliothĂšque — sans fenĂȘtres — s'Ă©rigera sur ce terrain d'ici 2033, entrainant la perte d'un des derniers espaces verts du Quartier latin. BAnQ, mise Ă  genoux par plus d'une dĂ©cennie de dĂ©sinvestissement et de nĂ©gligence de la part de QuĂ©bec, n'a pas d'autre choix que d'accepter. La CAQ lui a en effet confiĂ© le mandat de revitaliser l'ancienne bibliothĂšque Saint-Sulpice, sur Saint-Denis, sans toutefois lui accorder les budgets nĂ©cessaires pour le faire.

La vente de ce terrain pour 22 millions de dollars, c'est pour BAnQ l'Ă©quivalent parapublic d'aller au Pawn Shop vendre sa guitare pour payer son loyer. Tout le monde constate l'humiliation imposĂ©e Ă  l'institution, mĂȘme si sa directrice, Marie GrĂ©goire, ancienne bonze de l'Action dĂ©mocratique du QuĂ©bec, s'en cache bien. AprĂšs tout, dĂ©fendre « une institution d'avant-garde et de rĂ©fĂ©rence vouĂ©e Ă  l'enrichissement du savoir et de la culture »2, c'est probablement le travail d'un·e autre.

* * *

Comme beaucoup d'autres quĂ©bĂ©cois·e·s, j'entretiens avec Hydro-QuĂ©bec une relation ambigĂŒe.

Symbole inspirant d'une pĂ©riode de prise en main collective face aux diktats du privĂ© — « Maintenant ou jamais! MaĂźtres chez nous » — Hydro-QuĂ©bec reprĂ©sente Ă©galement pour moi notre arrogance collective vis Ă  vis des question autochtones.

En dĂ©finitive, nous n'avons pas su bĂątir cette « relation de nation Ă  nations » tant de fois promise, jamais rĂ©alisĂ©e. Cette arrogance, que l'on voit encore chez Hydro-QuĂ©bec dans ses projets d'infrastructure, elle provient de notre refus d'admettre que, nous aussi, nous Ă©tions et sommes encore actrices et acteurs de ce colonialisme destructeur qui ravage les PremiĂšres Nations, les MĂ©tis et les Inuit au QuĂ©bec et au Canada


Je m'Ă©gare ici peut-ĂȘtre un peu du sujet principal de cet article, mais c'est Ă  mon avis un dĂ©tour nĂ©cessaire. L'attitude de notre chĂšre sociĂ©tĂ© d'État dans ce dossier n'est pas nouvelle et doit ĂȘtre replacĂ©e dans un contexte plus large.

Quand nous lui demandons plus de transparence et qu'elle nous ignore, quand nous tentons de lui faire comprendre que ses dĂ©cisions mettent en pĂ©ril nos milieux de vie et d'Ă©tude et qu'elle nous rĂ©pond “qu'elle n'a pas le choix”, elle emploie somme toute les mĂȘmes tactiques que celles utilisĂ©es pour dĂ©possĂ©der les nations autochtones au QuĂ©bec de leurs terres, de leurs lacs et de leurs riviĂšres. Les mĂȘmes tactiques, moins la police et la violence physique.

* * *

Estimation de la volumétrie du futur poste de transformation électrique

Avec raison, le Quartier latin s'enflamme et se mobilise. Lise Bissonnette, Christine St-Pierre, Phyllis Lambert, Michel Tremblay, Kev Lambert, Nicole Brossard, l'Association citoyenne du Village de MontrĂ©al, le SPUQ-UQÀM, Marie D. Martel, Carol Couture et bien d'autres dĂ©noncent tour Ă  tour le projet. Dans les mots de Denys Arcand: « dĂ©ment. [
] C'est du dĂ©lire ! C'est complĂštement fou. »3.

Toujours au front, Manon MassĂ© pose la question qui tue: ne pourrait-on pas utiliser 
 d'autres terrains? Le Quartier latin n'est en effet pas Ă©tranger aux lieux laissĂ©s Ă  l'abandon pour profiter des effets de la spĂ©culation immobiliĂšre rampante4. RĂ©ponse: « Hydro-QuĂ©bec exclut d'emblĂ©e d'exproprier »5. ProtĂ©ger (le capital) et servir (les intĂ©rĂȘts des riches propriĂ©taires des terrains du centre-ville), notre chĂšre sociĂ©tĂ© d'État joue bien ici son rĂŽle de police de l'Ă©nergie.

Hydro-QuĂ©bec sort donc encore la mĂȘme cassette: les communs et l'environnement n'ont pas de valeur et elle n'hĂ©sitera pas Ă  les dĂ©truire si cela lui permet d'atteindre ses objectifs de rentabilitĂ©. “Énergie verte”, une hypocrisie telle qu'on croyait entendre la Caisse de dĂ©pĂŽt et placement du QuĂ©bec affirmant appliquer les plus hauts standards Ă©thiques tout en continuant Ă  investir dans des entreprises responsables du gĂ©nocide en Palestine.

Au-delĂ  de la question du terrain, avons-nous vraiment besoin d'un nouveau poste de transformation Ă©lectrique plus gros et plus puissant? Si Hydro-QuĂ©bec affirme que c'est nĂ©cessaire « pour rĂ©pondre Ă  la croissance de la demande en Ă©lectricitĂ© du centre-ville », permettons-nous d'en douter. Il suffit en effet de jeter un coup d'Ɠil le soir Ă  tous ces bĂątiments complĂštement illuminĂ©s pour voir Ă  quel point le gaspillage d'Ă©nergie est un vĂ©ritable leitmotiv quĂ©bĂ©cois.

Dans les faits, cette “nĂ©cessitĂ©â€ est plutĂŽt le rĂ©sultat d'une course folle vers l'avant au nom de la “transition Ă©cologique”, alors que la solution rĂ©elle Ă  nos problĂšmes environnementaux est le refus collectif. De la consommation. De la croissance. Du capitalisme. De la mort collective.

* * *

Nous apprenions rĂ©cemment que le CĂ©gep du Vieux MontrĂ©al et l'UQÀM collaboreront pour mettre de l'avant des « actions concertĂ©es entourant la relance du Quartier latin »6. Pourquoi ne pas en profiter pour dĂ©fendre nos communs?

Il est clair que le conseil d'administration du CVM doit dénoncer le projet de construction d'un poste de transformation au coin Berri et Ontario et doit prendre position en faveur d'une rétrocession de ce terrain à BAnQ. La communauté du Quartier latin organise d'ailleurs une manifestation le samedi 26 avril pour dénoncer le manque d'écoute dans ce dossier.

Et au-delĂ  de cet enjeu — aprĂšs tout hyperlocal — continuons de dĂ©noncer l'attitude d'Hydro-QuĂ©bec, particuliĂšrement envers les communautĂ©s autochtones. VĂ©ritĂ©, rĂ©conciliation, transfert de 25% des parts de la sociĂ©tĂ© d'État aux nations autochtones au QuĂ©bec?


  1. Jean-François NADEAU et Étienne PARÉ, « Un poste d'Hydro-QuĂ©bec en plein Quartier latin Ă  quel prix? », Le Devoir (14 mai 2024), https://www.ledevoir.com/societe/transports-urbanisme/812870/projet-hydro-quebec-coeur-quartier-latin-tenu-secret ↩

  2. BAnQ, « DĂ©claration de services aux citoyens (P-5) », 21 juin 2023, https://www.banq.qc.ca/declaration-de-services-aux-citoyens-p-5/ ↩

  3. Jean-François NADEAU, « De grands noms de la culture dĂ©noncent le projet d’Hydro-QuĂ©bec au Quartier latin », Le Devoir (17 fĂ©vrier 2025), https://www.ledevoir.com/societe/transports-urbanisme/845293/figures-culture-denoncent-projet-hydro-quebec-quartier-latin ↩

  4. Exemple parmi tant d’autres: cet entrepĂŽt de 140 mĂštres de long situĂ© sur Saint-Hubert derriĂšre l'Îlot Voyageur, vĂ©ritable verrue urbaine qui pourrie tranquillement depuis 2003 en attendant que son propriĂ©taire, l’Aquilini Investment Group, dĂ©cide finalement d’en faire du logement. ↩

  5. Jean-François NADEAU, « De l'Ă©lectricitĂ© dans l'air autour du projet d’Hydro-QuĂ©bec pour le Quartier latin », Le Devoir (23 octobre 2024), https://www.ledevoir.com/societe/transports-urbanisme/822244/electricite-air-autour-projet-hydro-quebec-quartier-latin ↩

  6. CĂ©gep du Vieux MontrĂ©al, « Le cĂ©gep du Vieux MontrĂ©al et l'UQAM signent une entente pour consolider leur partenariat privilĂ©giĂ© et explorer de nouvelles pistes de collaboration », 12 fĂ©vrier 2025, https://www.cvm.qc.ca/wp-content/uploads/COMMUNIQUE_cvm-uqam.pdf ↩

08 April, 2025 04:00AM by Louis-Philippe Véronneau

December 18, 2024

hackergotchi for Gr&#233;gory Colpart

Grégory Colpart

MiniDebConf Toulouse 2024 (fr)

AprĂšs la MiniDebConf Marseille 2019, le COVID-19 a rendu impossible/difficile l’organisation de nouvelles MiniDebConf pendant quelques annĂ©es. Avec la reprise progressive d’évĂ©nements d’ampleur en prĂ©sentiel (FOSDEM, DebConf, etc.), l’idĂ©e Ă©tait de proposer une nouvelle MiniDebConf en France mais avec une organisation plus lĂ©gĂšre. En 2023, nous avons eu l’idĂ©e de contacter les organisateurs de Capitole du Libre afin de rĂ©itĂ©rer l’expĂ©rience de 2017 : pouvoir organiser une MiniDebConf en parallĂšle de l’évĂ©nement annuel qui se tient Ă  Toulouse en novembre. Mais notre demande Ă©tait trop tardive pour 2023, donc aprĂšs discussions avec Capitole du Libre en novembre 2023 Ă  Toulouse puis en fĂ©vrier 2024 Ă  Bruxelles, nous avons pu confirmer la tenue d’une MiniDebConf Toulouse en novembre 2024 !

Nous avons alors constituĂ© une petite Ă©quipe d’organisation et nous nous sommes lancĂ©s : Call for Papers en mai 2024, ajout d’un MiniDebCamp de deux jours, coordination avec la DebConf vidĂ©o team, recherche de sponsors, crĂ©ation d’un logo, commande des T-shirts et stickers, planning, gestion des inscriptions
 mĂȘme avec une organisation plus lĂ©gĂšre (la gestion de la salle de confĂ©rence, des badges, de la nourriture pendant le week-end Ă©tant faite par Capitole du Libre), il restait un peu de travail de prĂ©paration.

Jeudi 14 et vendredi 15 novembre 2024, une quarantaine de dĂ©veloppeurs dĂ©barquent du monde entier (France, Espagne, Italie, Suisse, Allemagne, Angleterre, BrĂ©sil, Urugay, Inde, Brest, Marseille
) pour passer deux jours de MiniDebCamp dans les beaux espaces collaboratifs d’Artilect dans le centre-ville de Toulouse.

Puis le samedi 16 et dimanche 17 novembre 2024, la MiniDebconf s’est tenue dans les locaux de l’ENSEEIHT au sein de l’évĂšnement Capitole du Libre. On a dĂ©marrĂ© dĂšs le samedi matin avec une ouverture (JĂ©rĂ©my Lecour) marquĂ©e par un hommage Ă  Lunar (Nicolas Dandrimont), puis Reproducible Builds – rebuilding what is distributed from ftp.debian.org (Holger Levsen) et Discussion on my research work on sustainability of Debian OS (Eda). AprĂšs un dĂ©jeuner grĂące aux food trucks du Capitole du Libre, c’est reparti pour un aprĂšs-midi intense : What’s new in the Linux kernel (and what’s missing in Debian) (Ben Hutchings), Linux live patching in Debian (Santiago Ruano RincĂłn), Trixie on mobile: are we there yet? (Arnaud Ferraris), PostgreSQL container groups, aka cgroups down the road (CĂ©dric Villemain), Upgrading a thousand Debian hosts in less than an hour (JĂ©rĂ©my Lecour et moi-mĂȘme) et Using debusine to automate your QA (Stefano Rivera &co).

Dimanche, c’est le second jour, et l’on reprend avec une prĂ©sentation de la DebConf 25 (Benjamin Somers) qui se dĂ©roulera Ă  Brest en juillet 2025 puis l’on enchaĂźne la matinĂ©e avec How LTS goes beyond LTS (Santiago Ruano RincĂłn & Roberto C. SĂĄnchez), Cross building (Helmut Grohne) et State of the javascript (Bastien RoucariĂšs). L’aprĂšs-midi, place aux Lightning Talks, PyPI Security: Past, Present & Future (Salvo “LtWorf” Tomaselli) et le classique Bits from DPL (Andreas Tille) avant la confĂ©rence de clĂŽture (Pierre-Elliott BĂ©cue).

Toutes les confĂ©rences sont Ă  retrouver en vidĂ©o sur le programme (encore merci Ă  la formidable DebConf vidĂ©o team), merci aux sponsors (Viridien, Freexian, Evolix, Collabora et Data Bene) et grand merci Ă  toute l’équipe du Capitole du Libre de nous avoir « supportĂ© »  rendez-vous Ă  Brest en juillet 2025 !

Articles Ă  propos (ou mentionnant) la MiniDebConf Toulouse :

18 December, 2024 04:45PM by Gregory Colpart

November 30, 2024

hackergotchi for Aur&#233;lien Jarno

Aurélien Jarno

UEFI Unified Kernel Image for Debian Installer on riscv64

On the riscv64 port, the default boot method is UEFI, with U-Boot typically used as the firmware. This approach aligns more closely with other architectures, which avoid developping riscv64 specific code. For advanced users, booting using U-Boot and extlinux is possible, thanks to the kernel being built with CONFIG_EFI_STUB=y.

The same applies to the Debian Installer, which is provided as ISO images in various sizes and formats like on other architectures. These images can be put on a USB drive or an SD-card and booted directly from U-Boot in UEFI mode. Some users prefer to use the netboot "image", which in practice consists of a Linux kernel, an initrd, plus a set of Device Tree Blob (DTB) files.

However, booting this in UEFI mode is not straightforward, unless you use a TFTP server, which is also not trivial. Less known to users, there is also a corresponding mini.iso image, which contains all the above plus a bootloader. This offers a simpler alternative for installation, but depending on your (vendor) U-Boot version this still requires to go through a media.

Systemd version 257-rc2 comes with a great new feature, the ability to include multiple DTB files in a single UKI (Unified Kernel Image) file, with systemd-stub automatically loading the appropriate one for the current hardware. A UKI file combines a UEFI boot stub program, a Linux kernel image, an optional initrd, and further resources in a single UEFI PE file. This finally solves the DTB problem in the UEFI world for distributions, as a single image can work on multiple boards.

Building upon this, debian-installer on riscv64 now also creates a UEFI UKI mini.efi image, which contains systemd-stub, a Linux kernel, an initrd, plus a set of Device Tree Blob (DTB) files. Using this image also ensures that the system is booted in UEFI mode. Booting it with debian-installer is as simple as:

load mmc 0:1 $kernel_addr_r mini.efi # (can also be done using tftpboot, wget, etc.)
bootefi $kernel_addr_r

Additional parameters can be passed to the image using the U-Boot bootargs environment variable. For instance, to boot in rescue mode:

setenv bootargs "rescue/enable=true"

30 November, 2024 09:41AM by aurel32

November 25, 2024

Stéphane Blondon

Afficher une fenĂȘtre de notification depuis le shell

Plusieurs commandes permettent d’afficher une fenĂȘtre de notification qui disparaĂźt automatiquement. Voici quelques outils avec les fonctionnalitĂ©s minimales. Chacun d’entre eux a des paramĂštres supplĂ©mentaires spĂ©cifiques.

Notify-send

notify-send est disponible dans le paquet libnotify-bin (dans Debian et ses dérivées) et est probablement déjà installé. La capture montre le rendu avec Gnome. La commande :

$ notify-send "ici un titre" "ici le contenu"

Zenity

zenity est basĂ© sur GTK et permet l’affichage de diffĂ©rents types de fenĂȘtre. Pour obtenir la fermeture automatique de la fenĂȘtre, il faut ajouter un paramĂštre spĂ©cifique :

$ zenity --info --title="ici un titre" --text="ici un contenu" --timeout=5

Kdialog

Notification avec kdialog

kdialog fait partie de KDE. Le type passivepopup est une notification qui apparaßt dans un coin du bureau et disparaßt automatiquement :

$ kdialog --passivepopup --title "ici un titre" "ici un contenu"

Xmessage

xmessage fait partie d’outils fournis avec X11 (paquet x11-utils sous Debian et dĂ©rivĂ©es). Il doit ĂȘtre disponible Ă  peu prĂšs partout mais, contrairement aux commandes citĂ©es prĂ©cĂ©demment, ne bĂ©nĂ©ficie pas de l’intĂ©gration avec le thĂšme du bureau. En bref, ça fonctionne mais c’est moche.

$ xmessage -timeout 5 "ici un contenu"

Versions utilisées

Le rendu des captures d’écran peuvent diffĂ©rer selon la version des logiciels utilisĂ©s. Les captures ont Ă©tĂ© faites avec :

  • Gnome 47
  • KDE Plasma 5.27
  • Zenity 4.0.2
  • Xmessage 1.0.7

25 November, 2024 09:05AM by ascendances

November 19, 2024

hackergotchi for Aur&#233;lien Jarno

Aurélien Jarno

AI crawlers should be smarter

It would be fantastic if all those AI companies dedicated some time to make their web crawlers smarter (what about using AI?). Noawadays most of them still stupidly follow every link on a Git frontend.

Hint: Changing the display options does not provide more training data!

19 November, 2024 10:31PM by aurel32

October 08, 2024

hackergotchi for Louis-Philippe Véronneau

Louis-Philippe Véronneau

Dette et déficit: jusqu'ici, tout va bien

Voici un texte que j'ai Ă©cris pour le dernier numĂ©ro de mon journal syndical. J'Ă©cris rarement en français sur mon blog (qui est principalement destinĂ© Ă  un auditoire international), mais cela m'arrive quand mĂȘme parfois!


Dans une chronique publiée le 5 octobre dernier, Gérard Fillion, journaliste aux affaires économiques à Radio-Canada, titrait: « Le grand retour de la rigueur budgétaire ? »1.

Nul besoin de ce point d'interrogation, cher Gérard: les coupures que nous vivons actuellement dans les cégeps et dans nos services publics marquent bel et bien le retour non pas de la rigueur, mais de l'austérité budgétaire.

Dans cet encadré, je vous propose de déconstruire trois mythes économiques trop souvent utilisés pour justifier des choix politiques sous le couvert de la nécessité économique.

1. Le Québec est trop endetté et doit réduire sa dette

Sophisme relativement courant, celui de la peur de la dette gouvernementale a la peau dure, et ce, malgré le bilan exemplaire du Québec (et du Canada!) en matiÚre de finances publiques.

Adoptée en 2006, la Loi sur la réduction de la dette et instituant le Fonds des générations2 établissait une cible d'endettement québécoise qui semblait alors raisonnable: en 2026, nous visions une dette brute équivalente à 45% du PIB.

Passons outre les subtilités du débat « dette nette vs dette brute » et regardons ce qu'il en est, prÚs de 20 ans plus tard. Surprise! cette cible a été atteinte en 2022 et la dette brute se situe maintenant à 41,5% du PIB3 4.

Péril en la demeure? Décote éventuelle du Québec sur les marchés financiers? Que nenni!

Mieux encore, tel que dĂ©montrĂ© dans le graphique ci-dessous, nous payons substantiellement moins d'intĂ©rĂȘts sur notre dette qu'en 20124.

Notons de plus « [qu'en] 2023, l'ensemble des agences [de notation] ont confirmé la cote de crédit du Québec avec perspective stable. »5.

Un graphique du service de la dette au Québec

Que devrions-nous donc faire, maintenant que la cible est atteinte?

Suite Ă  un appel du MinistĂšre des finances en 2021, l'Association des Ă©conomistes quĂ©bĂ©cois, le CIRANO, l'Institut du QuĂ©bec et la Chaire de recherche en fiscalitĂ© et en finances publiques — des gens qui n'ont pas la rĂ©putation d'ĂȘtre particuliĂšrement Ă  gauche — en ont conclu que « la rĂ©duction de la dette ne devrait pas ĂȘtre un exercice sans fin »6.

Bref, la dette du Québec n'est pas du tout inquiétante et mieux vaudrait investir notre argent ailleurs...

2. Le déficit budgétaire force le gouvernement à couper

Ligne de communication populaire dans les médias depuis quelques temps, on ne cesse de répéter que le déficit budgétaire est de 11 milliards!

11 milliards, quel gros chiffre, penserez-vous sûrement. Difficile de s'imaginer ce que cela peut représenter, en termes de finances personnelles. Plusieurs centaines de maisons? Combien de millions de paires de bas?

Le hic est justement que les finances gouvernementales ne sont pas des finances personnelles. Contrairement Ă  vous, le gouvernement est maĂźtre de ses revenus et ses dĂ©ficits, dĂ©ficits qui, loin d'ĂȘtre une fatalitĂ©, sont causĂ©s par des choix politiques. Nous y reviendrons plus bas au 3e mythe.

Chose certaine, en ne cessant de répéter ce chiffre magique de 11 milliards, les journalistes, politicien·ne·s et autres figures publiques commettent notre second mythe économique. En effet, les finances publiques doivent se calculer en pourcentage du PIB, et non en argent nominal.

Si l'on procĂšde de la sorte, c'est parce que le pourcentage du PIB prend en compte la capacitĂ© de payer d'un État. Un État qui a un grand PIB a ainsi plus de facilitĂ© Ă  rembourser une mĂȘme somme qu'un État qui a un plus petit PIB.

Voici un exemple simple que j'utilise en classe pour illustrer cette situation. Si un individu a des revenus annuels de 100$ et une dette de 100$, cette dette est trĂšs importante! Il devrait consacrer 100% de ses revenus Ă  sa dette pour la rembourser au complet. À l'inverse, une autre personne qui a Ă©galement une dette de 100$, mais des revenus annuels de 100 000$ n'est pas trĂšs endettĂ©e. Ce 100$ reprĂ©sente pour elle 0,1% de ses revenus.

Cette mĂȘme dette de 100$ ne veut donc pas dire grand-chose si on ne la compare pas aux revenus. C'est la mĂȘme chose pour les gouvernements. La dette du QuĂ©bec est minuscule pour les États-Unis, mais serait trĂšs grande pour la municipalitĂ© de Sainte-Élie-de-Caxton.

Le PIB du Québec prévu pour 2024 est de 579 milliards de dollars. Le déficit annoncé de 11 milliards ne représente donc qu'un peu moins de 2% du PIB. Notons que la France anticipe cette année un déficit de 5,6% de son PIB et que l'Union Européenne considÚre 3% comme une cible maximale raisonnable7.

Quand les médias parlent de finances publiques en termes nominaux (en dollars) plutÎt qu'en pourcentage du PIB, sachez que c'est un exercice de désinformation, qui vise à créer chez vous un sentiment de peur en vous mettant face à de trÚs gros chiffres, sans les mettre en contexte.

3. Nous manquons d'argent pour nos politiques sociales

Dernier mythe Ă©conomique, cette idĂ©e que nous manquons d'argent pour mettre en place des politique sociales durables et progressistes. Pour reprendre les doux mots de Pascale DĂ©ry, ministre de l'Ă©ducation supĂ©rieure: « On ne peut pas tout faire en mĂȘme temps »8 !!!

Ce mythe est peut-ĂȘtre le plus facile des trois Ă  dĂ©construire. En effet, les gouvernements semblent constamment nous prouver que leurs dĂ©cisions Ă©conomiques ne tiennent pas la route. Mentionnons en vrac:

  • 1,7 milliards de perte rĂ©currente suite Ă  la plus rĂ©cente baisse d'impĂŽts, vĂ©ritable cadeau aux riches7.
  • 6,7 milliards de chĂšques Ă  saveur Ă©lectorale envoyĂ©s Ă  la population en 2022 sous le couvert de la « lutte Ă  l'inflation »9 10.
  • 2 milliards pour Bombardier, une entreprise qui, aprĂšs avoir mis Ă  pied des centaines d'employé·e·s au QuĂ©bec, a Ă©tĂ© vendue Ă  rabais l'Ă©tranger11.
  • 1,37 milliards pour Northvolt, une entreprise maintenant en faillite12.
  • 7 millions pour les Kings, une Ă©quipe de hockey dĂ©tenue par un milliardaire13.
  • 6,5 millions pour la PGA, une association qui gĂ©nĂšre plus de 2,6 milliards de revenus annuels14.

Difficile à la vue de ces chiffres d'affirmer qu'il manque d'argent pour offrir un repas par jour à tous les enfants du Québec (1,5 milliards/an15)...

D'un point de vue plus structurel, la Coalition Main Rouge propose depuis des années un ensemble de mesures pour dégager plus de 14 milliards de dollars en revoyant nos priorités fiscales16.

Certaines de ces mesures, comme « Adopter un rĂ©gime entiĂšrement public d’assurance mĂ©dicaments » ou encore « Mettre fin Ă  l'incorporation des mĂ©decins » sont d'une simplicitĂ© telle que leur absence ne peut s'expliquer que par une capture rĂ©glementaire de la part des lobbys visĂ©s.

Alors que nos prioritĂ©s devraient ĂȘtre la faim, la pauvretĂ©, l'Ă©ducation, la santĂ©, l'environnement, etc., on cesse de nous rĂ©pĂ©ter que la richesse est créée par ceux et celles qui sont dĂ©jĂ  riches et qui sauront Ă  leur grĂ© nous donner gĂ©nĂ©reusement leurs miettes.

Rejetons cette vision du monde absurde et donnons-nous finalement les moyens de nos ambitions collectives.


  1. Fillion, G. (2024, 5 octobre). Le grand retour de la rigueur budgĂ©taire?. Radio-Canada. https://ici.radio-canada.ca/nouvelle/2109983/retour-rigueur-budgetaire-economie-politique ↩

  2. QuĂ©bec. (2006). Loi sur la rĂ©duction de la dette et instituant le Fonds des gĂ©nĂ©rations, RLRQ c R-2.2.0.1. https://www.legisquebec.gouv.qc.ca/fr/document/lc/R-2.2.0.1 ↩

  3. Gouvernement du QuĂ©bec. (2022). Rapport préélectoral sur l'Ă©tat des finances publiques du QuĂ©bec. https://www.finances.gouv.qc.ca/documents/Autres/fr/RapportPreelectoralFR_2022.pdf ↩

  4. Gouvernement du QuĂ©bec. (2024). Budget 2024-2025. https://www.finances.gouv.qc.ca/Budget_et_mise_a_jour/budget/documents/Budget2425_PlanBudgetaire.pdf ↩↩

  5. MinistĂšre des Finances du QuĂ©bec. (2024). Dette du QuĂ©bec et Fonds des gĂ©nĂ©rations. https://www.finances.gouv.qc.ca/ministere/finances_publiques/dette_quebec_fonds_generations.asp ↩

  6. CRFFP. (2021). Les rĂšgles budgĂ©taires du QuĂ©bec : rĂ©flexions d’un panel d’experts (Regard CFFP R2021/15). https://cffp.recherche.usherbrooke.ca/wp-content/uploads/2021/12/r_2021-15_regles_budgetaires_du_quebec.pdf ↩

  7. Fillion, G. (2024, 21 fĂ©vrier). Des dĂ©ficits plus Ă©levĂ©s Ă  QuĂ©bec : pourquoi avoir baissĂ© les impĂŽts?. Radio-Canada. https://ici.radio-canada.ca/nouvelle/2050907/deficits-quebec-baisse-impots-budget-provincial ↩↩

  8. Goudreault, Z. (2024, 5 septembre). « On ne peut pas tout faire en mĂȘme temps » dans les cĂ©geps, affirme DĂ©ry. Le Devoir. https://www.ledevoir.com/societe/education/819278/on-ne-peut-pas-tout-faire-meme-temps-cegeps-affirme-dery ↩

  9. Lecavalier, C. (2022, 22 mars). 500 $ pour 6,4 millions de QuĂ©bĂ©cois. La Presse. https://www.lapresse.ca/affaires/economie/2022-03-22/budget-du-quebec/500-pour-6-4-millions-de-quebecois.php ↩

  10. Bordeleau, S. (2022, 9 novembre). Inflation : QuĂ©bec dĂ©taille son aide de 400 $ Ă  600 $. Radio-Canada. https://ici.radio-canada.ca/nouvelle/1931431/cheque-caq-inflation-modalites ↩

  11. Arseneault, J. et Lecavalier, C. (2024, 24 juillet). Plus de 2 milliards de fonds publics: L'engrenage de la C Series. La Presse. https://www.lapresse.ca/affaires/2024-07-24/plus-de-2-milliards-de-fonds-publics/l-engrenage-de-la-c-series.php ↩

  12. LabbĂ©, J. (2024, 24 septembre). Les dĂ©boires de Northvolt placent QuĂ©bec sur la dĂ©fensive. Radio-Canada. https://ici.radio-canada.ca/nouvelle/2107011/debat-urgence-northvolt-quebec ↩

  13. Tanguay, S. (2024, 3 octobre). Les oppositions Ă  QuĂ©bec mitraillent les «Kings des dĂ©penses». Le Devoir. https://www.ledevoir.com/politique/quebec/821037/oppositions-quebec-mitraillent-kings-depenses ↩

  14. Brousseault-Pouliot, V. (2024, 25 septembre). Coupe des PrĂ©sidents: QuĂ©bec dĂ©fend sa subvention. La Presse. https://www.lapresse.ca/actualites/coupe-des-presidents/un-cout-de-9-millions-pour-les-contribuables/2024-09-25/coupe-des-presidents/quebec-defend-sa-subvention.php ↩

  15. Plourde, A. (2023). Un programme universel d’alimentation scolaire pour le QuĂ©bec. Institut de recherche et d’informations socioĂ©conomiques. https://iris-recherche.qc.ca/publications/programme-alimentation-scolaire/ ↩

  16. Coalition Main Rouge. (2021). Solutions fiscales et mesures de contrĂŽle des dĂ©penses proposĂ©es par la Coalition Main rouge Automne 2021. https://www.nonauxhausses.org/wp-content/uploads/Tableau10milliardsdesolutions2021.pdf ↩

08 October, 2024 04:00AM by Louis-Philippe Véronneau

September 26, 2024

hackergotchi for Debian France

Debian France

Debian France renouvelle ses instances

AGO de Debian France

Rappel

L'assemblée générale annuelle de l'association Debian-France vient de se terminer. Pour rappel, Debian France est une association qui se propose de représenter Debian en France, voire en Europe puisqu'elle est la seule organisation de confiance (Trusted Organization) active du projet Debian sur ce continent. Ce statut lui permet ainsi de recueillir des dons pour le projet Debian et de gérer le budget du projet qui lui incombe, en parallÚle du sien.

Spécificité de l'AGO 2024

En 2023, il n'y a pas eu d'AGO. Cela est dû à plusieurs facteurs dont des soucis avec les outils de communication de l'association et un quotidien chargé pour les membres du bureau. Le CA a donc été renouvelé aux deux tiers cette année.

Bilan du vote

Les membres sortants du CA pour les années 2022 et 2023 étaient :

  • Alban Vidal ;
  • CĂ©dric Boutillier ;
  • Cyril Brulebois ;
  • GrĂ©gory Colpart ;
  • Pierre-Elliott BĂ©cue ;
  • William Bonnet.

À l'issue du scrutin, et en conformitĂ© avec les candidatures, ont Ă©tĂ© Ă©lus au CA :

  • Alban Vidal ;
  • Georges Khaznadar ;
  • GrĂ©gory Colpart ;
  • Pierre-Elliott BĂ©cue ;
  • William Bonnet.

Élection du bureau

Le CA nouvellement élu s'est réuni et a nommé au bureau :

  • PrĂ©sident : Pierre-Elliott BĂ©cue ;
  • Vice-PrĂ©sident : Alban Vidal ;
  • TrĂ©sorier : Jean-Pierre Giraud ;
  • SecrĂ©taire : Jean-Philippe Mengual ;
  • SecrĂ©taire adjoint : Quentin Lejard.

Mot du président

AprĂšs deux annĂ©es de gestion somme toute "banale" (nous avons quand mĂȘme intensifiĂ© notre activitĂ© autour de l'organisation des DebConfs en prenant part Ă  la gestion financiĂšre de l'Ă©vĂ©nement, ce qui induit une belle charge additionnelle), Debian France se voit confier des missions accrues pour 2024 et 2025. En effet, l'association aura la charge de l'organisation de la Mini DebConf Toulouse qui aura lieu les 16 et 17 novembre 2024 en parallĂšle du Capitole du Libre, et les prĂ©paratifs pour DebConf 25 qui se tiendra Ă  Brest.

L'annĂ©e risque donc d'ĂȘtre chargĂ©e, nous ne manquerons pas de communiquer sur nos activitĂ©s.

26 September, 2024 06:11AM

June 07, 2024

Meetup 2024/2 - 13 Juin - Bordeaux

Meetup du 13 Juin Ă  Bordeaux

Debian France organise un nouveau meetup Ă  Bordeaux avec le soutien de Yaal Coop et de Collabora.

Il se dĂ©roulera le 13 Juin 2024 Ă  partir de 18h00 au Yack (l'espace de co-working de Yaal) Ă  BĂšgles (mĂȘme lieu que le prĂ©cĂ©dent meetup).

Il n'y a pas de sujet précis cette fois-ci, il s'agira donc d'une Bug Squashing Party! Le but sera de fermer (ou au moins proposer un patch) le plus grand nombre de bugs.

Merci de vous inscrire sur Mobilizon à l'évÚnement pour que nous puissions prévoir votre accueil dans les meilleures conditions.

Venez nombreux et n'hésitez pas à répandre l'information!

Lieu

Liens

07 June, 2024 04:06PM

May 25, 2024

Retour du Meetup Debian Ă  Bordeaux du 16 mai

Retour du Meetup du 16 Mai Ă  Bordeaux

Le 16 mai dernier s'est tenu le meetup Debian au sein du Yack (le local de coworking de Yaal Coop).

Nous étions 8 participants dont : 2 développeurs Debian (sthibault et daissi), des contributeurs Debian (dont Stéphane à qui l'on doit entre autres le nouveau template de Debian Policy) et utilisateurs avancés de Debian (dev, devops, etc). Bien que plus que bienvenu, nous n'avons pas vu d'utilisateurs avec un profil moins technique. Une bonne partie des participants n'a appris l'existence de l'évÚnement avant que quelques jours avant celui-ci malgré les annonces tout au long du mois précédent. Une meilleure communication (via plus de rappels, en ciblant les communautés d'utilisateurs ou des distributions dérivées) en amont des prochains meetups pourrait éventuellement mobiliser plus de participants.

Comme prĂ©vu, le thĂšme du jour Ă©tait le packaging Debian avec les slides disponibles sur le wiki Debian. Trop occupĂ©s Ă  discuter packaging Debian (et surtout l'heure des pizzas avait sonnĂ©), nous n'avons pas eu le temps d'emballer signal-estimator (et sa dĂ©pendance intrusive-shared-ptr). Cependant, la majeure partie du travail avait Ă©tĂ© rĂ©alisĂ©e en prĂ©paration du meetup, les paquets devraient ĂȘtre soumis pour inclusion dans l'archive Debian d'ici quelques jours/semaines. Nous avons Ă©galement abordĂ© diffĂ©rents thĂšmes dans le dĂ©sordre : la courbe d'apprentissage de l'emballage Debian peu rude, Debian CI, la transition t64, l’absence de roadmap du projet Debian, etc.

Le prochain meetup Debian devrait avoir lieu à la mi-juin (à confirmer) également au Yack. Si ce premier meetup était plutÎt théorique, le second sera lui plus pratique du genre BSP, packaging ou contribution à Debian.

PS : merci Samuel d'ĂȘtre venu avec un adaptateur USB-C - HDMI! 🙂

25 May, 2024 09:26AM

April 30, 2024

Meetup 2024/1 - 16 Mai - Bordeaux

Meetup du 16 Mai Ă  Bordeaux

Debian France organise un nouveau meetup Ă  Bordeaux avec le soutien de Yaal Coop et de Collabora.

Il se déroulera le 16 Mai 2024 à partir de 18h30 dans les locaux de Yaal Coop.

Le thĂšme sera : « Packaging, l’art de crĂ©er des paquets selon la politique Debian »

Qu'est ce qu'un paquet Debian ? Quelles sont les bonnes pratiques du packaging ? Comment en construire un ? Nous allons créer ensemble votre premier paquet!

Si vous souhaitez empaqueter un logiciel lors du meetup, vous pouvez le soumettre à daissi@debian.org pour une évaluation de sa difficulté (dans la limite des places disponibles :-).

Merci de vous inscrire (soit sur le wiki Debian, soit sur Mobilizon) à l'évÚnement pour que nous puissions prévoir votre accueil dans les meilleures conditions.

Venez nombreux et n'hésitez pas à répandre l'information!

Lieu

Liens

30 April, 2024 07:43PM

September 03, 2023

hackergotchi for J. Fernando Lagrange

J. Fernando Lagrange

Ajout du paquet imapsync dans debian

Contexte

Avec la sortie de Debian 12, en juin dernier, je dois mettre à jour un serveur de dépÎts de paquets.

Comme ce serveur contient un seul paquet (imapsync, qui n'est pas dans debian), il a été décidé de supprimer ce serveur de dépÎt et de directement passer par le code source amont lorsqu'on a besoin d'utiliser cet outil au boulot.

Du travail a déjà été fait pour inclure imapsync dans debian, c'est d'ailleurs ce qui m'a permis de créer un paquet en août 2021.

Participer à mettre ce paquet directement dans Debian, c'est un peu ma façon de renvoyer l'ascenseur.

Reprise du travail

J'ai repris le travail lĂ  oĂč la personne prĂ©cĂ©dente l'a laissĂ©e.

Et j'ai indiquĂ© ce que j'ai fait sur le bogue de suivi « Intent To Package » #919587: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919587

J'ai ensuite construit le paquet et je l'ai envoyé sur debian mentors.

03 September, 2023 03:17PM by Low Memory

August 16, 2023

hackergotchi for Charles Plessy

Charles Plessy

J'ai oublié « make clean ».

Je ne me souviens plus de la derniĂšre fois oĂč j'ai utilisĂ© la commande make clean. Si j'empaquĂšte pour Debian, le travail se fait dans un dĂ©pĂŽt git, et j'utilise les commandes git clean -fdx ; git checkout . que je peux rappeler depuis mon historique des commandes via Ctrl-r la plupart du temps. Et dans les autres cas, si les sources ne sont pas dĂ©jĂ  dans git, alors les commandes git init . ; git add . ; git commit -m 'hopla' rĂšglent le problĂšme.

16 August, 2023 04:32AM

July 23, 2023

hackergotchi for Aur&#233;lien Jarno

Aurélien Jarno

Welcome Debian riscv64

After many years of effort, I am happy to announce that Debian riscv64 is now an official architecture!

This milestone is not the end of the journey but rather the beginning of a new one: the port will need to be rebootstrapped in the official archive, build daemons will have to be reinstalled and handed over to DSA, many bugs will need to be fixed. If everything goes well, the architecture will eventually be released with Trixie. Please note that this process will be long and will span several months.

I would like to take this opportunity to thanks everyone who contributed to this significant milestone, including individuals and Debian teams, as well as the organizations and companies that provided us with resources (by rough chronological order): MIT CSAIL, Sifive, Mullvad, tetaneutral.net, OSU Open Source Lab, Microchip, BeagleBoard.org Foundation, RISC-V international, PLCT Lab (ISCAS), StarFive, and Metropolitan Area Network Darmstadt.

23 July, 2023 07:28PM by aurel32

July 14, 2023

Goodbye Debian GNU/kFreeBSD

Over the years, the Debian GNU/kFreeBSD port has gone through various phases. After many years of development, it was released as technology preview with the release of Squeeze and eventually became an official architecture with the release of Wheezy. However it ceased being an official architecture a couple of years later with the release of Jessie, although a jessie-kfreebsd suite was available in the official archive. Some years later, it was moved to the debian-ports archive, where it slowly regressed over the years. The development totally has now been stopped for over a year, and the port has been removed from the debian-ports archive. It's time to say it goodbye!

I feel a touch of nostalgia as I was deeply involved in the Debian GNU/kFreeBSD port for nearly a decade, starting in 2006. There are many different reasons to like GNU/kFreeBSD ranging from political to technical considerations. Personally, I liked the technical aspect, as the FreeBSD kernel, at that time, was ahead of the Linux kernel in term of features: jails, ZFS, IPv6 stateful firewalling, and at a later point superpages. That said it was way behind for hardware support and to the best of my knowledge this remains unchanged. Meanwhile, the Linux kernel development accelerated in the latter stages of the 2.6.x series, and eventually closed the feature gap. At some point, I began to lose interest, and also to lack time, and slowly stepped away from its development.

14 July, 2023 04:14PM by aurel32

May 10, 2023

hackergotchi for Charles Plessy

Charles Plessy

Plussez pour patcher Firefox pour afficher du Markdown.

J'ai écrit auparavant que quand Firefox reçoit un fichier dont le type média est text/markdown, il le propose au téléchargement, alors que les autres navigateurs l'affichent comme un fichier texte.

Il est maintenant possible de plusser sur connect.mozilla.org pour demander que Firefox formatte le markdown par défaut.

10 May, 2023 11:43PM

March 09, 2023

If you work at Dreamhost, can you help us?

Update: thanks to the very kind involvment of the widow of our wemaster, we could provide enough private information to Dreamhost, who finally accepted to reset the password and the MFA. We have recovered evrything! Many thanks to everybody who helped us!

Due to tragic circumstances, one association that I am part of, Sciencescope got locked out of its account at Dreamhost. Locked out, we can not pay the annual bill. Dreamhost contacted us about the payment, but will not let us recover the access to our account in order to pay. So they will soon close the account. Our website, mailing lists and archives, will be erased. We provided plenty of evidence that we are not scammers and that we are the legitimate owners of the account, but reviewing it is above the pay grade of the custommer support (I don't blame them) and I could not convince them to let somebody higher have a look at our case.

If you work at Dreamhost and want to keep us as custommers instead of kicking us like that, please ask the support service in charge of ticket 225948648 to send the recovery URL to the secondary email adddresses (the ones you used to contact us about the bill!) in addition to the primary one (which nobody will read anymore). You can encrypt it for my Debian Developer key 73471499CC60ED9EEE805946C5BD6C8F2295D502 if you worry it gets in wrong hands. If you still have doubts I am available for calls any time.

If you know somebody working at Dreamhost can you pass them the message? This would be a big, big, relief for our non-profit association.

09 March, 2023 01:35PM

January 08, 2023

Quelqu'un pourrait-il patcher Firefox pour afficher du Markdown ?

Quand Firefox reçoit un fichier dont le type mĂ©dia est text/markdown, il le propose au tĂ©lĂ©chargement, alors que les autres navigateurs l'affichent comme un fichier texte. Dans le ticket 1319262, il est proposĂ© d'afficher les fichiers Markdown par dĂ©faut. Mais il faudrait un patch


08 January, 2023 12:18AM

December 16, 2022

Les grots mots dans Debian.

Une conversation sur la list debian-project a attiré mon attention sur un mot italien signifiant quelque chose comme « auriez-vous la gentillesse d'aller voir ailleurs ? », mais en version plus directe et vulgaire. J'ai ensuite utilisé http://codesearch.debian.net pour étudier plus en détail son emploi.

Je l'ai trouvé dans :

  • le code source de XEmacs ;
  • une liste de gros mots pour policer les conversations dans BZFlag ;
  • le gĂ©nĂ©rateur alĂ©atoire de phrases PolyGen ;
  • le code source du jeu de plateau Tagua ;
  • une base de donnĂ©es d'Ă©pigrammes vulguaires pour la plateforme Ă©ducative WIMS ;
  • le jeu de mots croisĂ©s parololottero ;
  • une base de donnĂ©es d'Ă©pigrammes vulguaires pour messages de bienvenue ou signatures de courriels ;
  • des listes de mots de passes trop frĂ©quents ;
  • un commentaire destinĂ© Ă  un dĂ©onmmĂ© Wolf dans le code source d'un autre programme ;
  • a collection of rude gestures in the xwrists package.

Ce fut une promenade rafraßchissante et récréactive dans l'univers des paquets Debian.

16 December, 2022 01:00PM

October 04, 2022

hackergotchi for Debian France

Debian France

ÉvĂšnements fin 2022 - dĂ©but 2023

Bonjour Ă  toutes et tous,

Dans les mois qui viennent, trois évÚnements auront lieu dans lesquels l'association Debian France tiendra un stand afin d'y faire de la promotion du projet Debian, mais aussi pour y proposer quelques goodie.

Comme chaque évÚnement, nous sommes à la recherche de volontaires pour tenir le stand Debian France. Pour chacun d'eux, un Framadate est ouvert pour recenser les volontaires et leurs disponibilités.


1) Open Source Experience - Paris

2) Capitole du libre - Toulouse

3) FOSDEM - Bruxelles (Belgique)

  • Dates : 4 et 5 FĂ©vrier 2023
  • Site de l'Ă©vĂšnement : https://fosdem.org/2023/
  • Il s'agit d'un salon ou le stand Debian est tenu par de membres Debian France mais aussi des contributeurs d'autres pays. La page d'inscription n'est pas encore ouverte, mais sera disponible sur le Wiki Debian Ă  l'adresse suivante : https://wiki.debian.org/DebianEvents/be

N'hésitez pas à contacter l'association pour toutes question à l'adresse asso@france.debian.net ou bien sur IRC, réseau OFTC, canal #debian-france.

Bien à vous et en espérant vous compter parmi nous,

Quentin et Alban - Secrétaires Debian France

04 October, 2022 10:42PM

February 08, 2022

Stéphane Blondon

Hello Debian en Brainfuck

screenshots.debian.net est un service qui permet d’afficher des captures d’écran de logiciels. C’est assez pratique pour se faire une idĂ©e d’une interface par exemple. Une capture d’écran montrait dĂ©jĂ  l’interprĂ©teur Brainfuck beef affichant un classique
Hello Word!. Mais on peut aussi personnaliser en affichant un
Hello Debian! :

Utilisation de beef

Brainfuck

Brainfuck est un langage dont l’intĂ©rĂȘt principal est d’ĂȘtre difficilement comprĂ©hensible par un humain. Pas la peine de s’étendre sur ses spĂ©cificitĂ©s, wikipedia le fait trĂšs bien. Il ressemble Ă  une machine de Turing: le programme dĂ©place un curseur dans un tableau et modifie les valeurs contenues dans les cellules du tableau.
Voici une version commentĂ©e du programme utilisĂ© (le dĂ©but est quasi-identique au hello world fourni sur la page wikipedia puisqu’on veut Ă©crire la mĂȘme chose) :

++++++++++          affecte 10 Ă  la case 0
[                   boucle initialisant des valeurs au tableau 
   >                avance Ă  la case 1 
   +++++++          affecte 7 Ă  la case 1
   >                avance Ă  la case 2
   ++++++++++       affecte 10 Ă  la case 2 
   >                avance Ă  la case 3
   +++              affecte 3 Ă  la case 3
   >                avance Ă  la case 4
   +                affecte 1 Ă  la case 4
   >                avance Ă  la case 5
   +++++++++++      affecte 11 Ă  la case 5
   <<<<<            retourne Ă  la case 0
   -                enlĂšve 1 Ă  la case 0
]                   jusqu'Ă  ce que la case 0 soit = Ă  0

La boucle initialise le tableau en 10 itérations et son état est alors :

Case 0 1 2 3 4 5
Valeur 0 70 100 30 10 110

Suite du programme :

>++                 ajoute 2 Ă  la case 1 (70 plus 2 = 72)
.                   imprime le caractĂšre 'H' (72)
>+                  ajoute 1 Ă  la case 2 (100 plus 1 = 101)
.                   imprime le caractĂšre 'e' (101)
+++++++             ajoute 7 Ă  la case 2 (101 plus 7 = 108)
.                   imprime le caractĂšre 'l'  (108)
.                   imprime le caractĂšre 'l'  (108)
+++                 ajoute 3 Ă  la case 2 (108 plus 3 = 111)
.                   imprime le caractĂšre 'o' (111)
>++                 ajoute 2 Ă  la case 3 (30 plus 2 = 32)
.                   imprime le caractĂšre ' '(espace) (32)

<<<                 revient Ă  la case 0
++                  ajoute 2 Ă  la case 0 (0 plus 2 = 2)
[                   une boucle
   >                avance Ă  la case 1 
   --               enlĂšve 4 Ă  la case 1 (72 moins 4 = 68)
   >                avance Ă  la case 2
   -----            enlĂšve 10 Ă  la case 2 (111 moins 10 = 101)
   <<               retourne Ă  la case 0
   -                enlĂšve 1 Ă  la case 0
]                   jusqu'Ă  ce que la case 0 soit = Ă  0

>                   va case 1
.                   affiche 'D'
>                   va case 2
.                   affiche 'e'
---                 enlĂšve 3 Ă  la case 2 (101 moins 3 = 98)
.                   affiche 'b'
>>>                 va case 5
-----               enlĂšve 5 Ă  la case 5
.                   affiche 'i'
<<<                 va case 2
-                   enlĂšve 1 Ă  la case 2
.                   affiche 'a'
>>>                 va case 5
+++++               ajoute 5 Ă  la case 5
.                   affiche 'n'
<<                  va Ă  la case 3
+                   ajoute 1 Ă  la case 3
.                   affiche un point d'exclamation

>                   va Ă  la case 4
.                   imprime le caractĂšre 'nouvelle ligne' (10)

screenshots.debian.net

Une capture de l’exĂ©cution du programme est disponible pour les interprĂ©teurs beef et hsbrainfuck sur screenshot.debian.net.
Les images disponibles sur screenshots.debian.net sont aussi réutilisées par le service packages.debian.org (par exemple packages.debian.org) et par certains gestionnaires de paquets.
Si vous avez envie d’ajouter des captures d’écran Ă  des paquets qui n’en auraient pas (les plus courants sont dĂ©jĂ  faits), sachez que l’affichage n’est pas direct car il y a une validation manuelle des images envoyĂ©es. Le dĂ©lai reste limitĂ© Ă  quelques jours (voire Ă  la journĂ©e).

08 February, 2022 07:50PM by ascendances

April 18, 2021

Florent Gallaire

Debian et RMS, la montagne a accouchĂ© d’une souris

Suite au retour de Richard Stallman (RMS) au board de la Free Software Foundation (FSF), pas moins de neuf anciens Debian Project Leader (DPL) – Neil McGovern, Stefano Zacchiroli, Ian Jackson, Lucas Nussbaum, Martin Michlmayr, Mehdi Dogguy, Sam Hartman, Sam Hocevar et Steve McIntyre – ainsi que l’actuel DPL Jonathan Carter, ont signĂ© une lettre ouverte initiĂ©e par Molly de Blanc et intitulĂ©e An open letter to remove Richard M. Stallman from all leadership positions.

Rappelons que Richard Stallman n’est rien de moins que l’inventeur des quatre libertĂ©s essentielles dĂ©finissant le logiciel libre et du concept juridique de copyleft, ainsi que le fondateur de la Free Software Foundation et du projet GNU (Linux sans le noyau).

Richard Stallman Ă  la FĂȘte de l'HumanitĂ© 2014 (par Thesupermat)

Steve Langasek a ensuite soumis une General Resolution (GR) proposant que la personne morale Debian soutienne officiellement la prise de position de ses leaders. Mais rien ne s’est passĂ© comme prĂ©vu, et ce qui devait ĂȘtre un rĂ©fĂ©rendum consensuel a tournĂ© au pugilat sur la mailing list debian-vote en mars et en avril, ces discussions publiques n’étant bien sĂ»r que la partie Ă©mergĂ©e de l’iceberg.

Huit options ont finalement été soumises au vote :

  1. « Call for the FSF board removal, as in rms-open-letter.github.io« 
  2. « Call for Stallman’s resignation from all FSF bodies »
  3. « Discourage collaboration with the FSF while Stallman is in a leading position »
  4. « Call on the FSF to further its governance processes »
  5. « Support Stallman’s reinstatement, as in rms-support-letter.github.io« 
  6. « Denounce the witch-hunt against RMS and the FSF »
  7. « Debian will not issue a public statement on this issue »
  8. « Further Discussion » (default option)

Pour faire court, c’est l’option 7 qui l’a emportĂ© : Debian will not issue a public statement on this issue. Voici une reprĂ©sentation du rĂ©sultat du scrutin qui utilise la mĂ©thode Condorcet :

Résultat du vote de la GR concernant Richard Stallman

En s’essayant Ă  un peu de taxinomie politique, on constate que les options peuvent ĂȘtre classĂ©es en trois groupes. Les options explicites, anti et pro parlent d’elles-mĂȘmes, mais comment connaĂźtre l’orientation d’une option implicite ? Sans la condamner, mais en refusant de participer Ă  une chasse aux sorciĂšres, l’option 7 constitue bien un soutien implicite Ă  RMS. Le nombre de voix par rapport Ă  l’option par dĂ©faut Further Discussion est le moyen le plus simple d’évaluer ce vote :

  • anti-RMS explicite (droite) : options 1, 2, 3 et 4 pour 203 + 222 + 219 + 221 = 216 voix de moyenne
  • pro-RMS implicite (centre) : option 7 pour 277 voix
  • pro-RMS explicite (gauche) : options 5 et 6 pour 52 + 84 = 68 voix de moyenne

Concernant les suffrages exprimĂ©s, il n’y a donc pas eu de vol de scrutin et la mĂ©thode Condorcet Ă©vite effectivement les problĂšmes de type Ballon d’or 2018, oĂč l’éparpillement des voix d’un camp permet Ă  une option minoritaire de l’emporter. En effet, une large majoritĂ© des votants voulait la peau de RMS, mais cette large majoritĂ© voulait aussi prĂ©server le projet Debian d’une explosion probable, et a permis Ă  l’option centriste de l’emporter de justesse.

Cependant, le systĂšme de vote de Debian a failli sur un point fondamental mais qui n’avait pourtant jamais semblĂ© poser problĂšme jusqu’ici. En effet, un vote concernant une General Resolution n’est pas secret, ce qui est une pratique totalitaire qui doit ĂȘtre changĂ©e. On peut ainsi consulter le dĂ©tail des votes de chaque votant. S’agissant d’un sujet aussi controversĂ©, la sincĂ©ritĂ© du scrutin a trĂšs probablement Ă©tĂ© altĂ©rĂ©e par un taux de participation infĂ©rieur Ă  ce qu’il aurait pu ĂȘtre, avec seulement 420 votants sur 1018 Debian Developers.

 

18 April, 2021 07:19AM by fgallaire

Highvoltage 2.0 : Jonathan Carter réélu DPL pour 2021

Jonathan Carter (Highvoltage) vient d’ĂȘtre réélu Debian Project Leader (DPL). Il va donc pouvoir continuer le travail commencĂ© l’annĂ©e derniĂšre.

La victoire de Jonathan est sans surprise, car sans rĂ©elle opposition, Sruthi Chandran incarnant pour la seconde annĂ©e consĂ©cutive une candidature de tĂ©moignage – non-homme, non-blanc -, mais n’étant malheureusement pas une prĂ©tendante crĂ©dible Ă  la victoire. Voici une reprĂ©sentation du rĂ©sultat du scrutin qui utilise la mĂ©thode Condorcet :

DPL 2021
Bravo à toi Jonathan, et bonne chance dans la mise en Ɠuvre de ton programme !

18 April, 2021 01:47AM by fgallaire

March 21, 2021

Quel DPL pour 2021 ?

Le temps passe vite, et cela fait déjà presque un an que Jonathan Carter a été élu Debian Project Leader (DPL). Chaque développeur Debian pouvait donc se porter candidat entre le 7 et le 13 mars à la suite du traditionnel appel à candidatures.

Le 11 mars Jonathan exprimait le souhait de se reprĂ©senter, tout comme Sruthi Chandran, elle aussi dĂ©jĂ  candidate l’annĂ©e derniĂšre, dans ce qui constituera un remake de l’élection 2020.

Il y aura donc deux candidats cette année :

Les presque mille dĂ©veloppeurs Debian seront libres de voter du 4 au 17 avril lors d’un vote utilisant la mĂ©thode Condorcet.

Vous pouvez retrouver tous les débats de la campagne sur la mailing list debian-vote.

21 March, 2021 01:02PM by fgallaire

November 17, 2020

September 27, 2020

Stéphane Blondon

Effet boomerang pour les contributions Ă  du logiciel libre

Lorsqu’on corrige une anomalie ou qu’on a ajoute une fonctionnalitĂ© Ă  un logiciel ou une bibliothĂšque, on peut la garder pour soi ou la partager. La deuxiĂšme solution demande un peu plus d’efforts Ă  court terme mais est prĂ©fĂ©rable Ă  long terme.

Le dĂ©lai de retour d’un correctif ou d’une amĂ©lioration dĂ©pend de l’endroit oĂč il est proposé : plus il est poussĂ© loin et plus il va mettre de temps Ă  revenir mais le nombre de personnes/machines bĂ©nĂ©ficiant du correctif sera plus grand.

Les différentes possibilités

Effet boomerang d'une contribution

Gardé pour soi

Cette mĂ©thode est absente du schĂ©ma puisqu’elle consiste Ă  ne pas envoyer la modification Ă  l’extĂ©rieur. C’est le plus rapide Ă  mettre en Ɠuvre, d’autant plus que la qualitĂ© du correctif n’est validĂ©e qu’en interne (juste soi-mĂȘme ou par l’équipe intĂ©grant la modification). Diverses façons d’arriver Ă  ses fins sont possibles comme surcharger la signature de la mĂ©thode qui pose problĂšme, attraper l’erreur non traitĂ©e correctement, intĂ©grer la bibliothĂšque dans le code et la modifier directement (vendoring), etc.

Par contre, personne d’autre ne bĂ©nĂ©ficie du correctif et personne d’extĂ©rieur ne fera une revue de code.

Publication solitaire

La vitesse de mise au point est Ă©quivalente Ă  la mĂ©thode prĂ©cĂ©dente. Le dĂ©ploiement prend un peu de temps. Elle permet de rendre la modification disponible pour les autres utilisateurs s’ils la trouvent. Ce phĂ©nomĂšne est visible avec l’incitation au fork proposĂ©e par les forges comme Github, Gitlab, Bitbucket, etc, sans pousser la modification vers le dĂ©veloppeur amont (via une pull request). Cette technique est utilisĂ©e lorsque des dĂ©veloppeurs :

  1. forkent un dépÎt,
  2. créent un commit modifiant le nouveau dépÎt,
  3. font dépendre leur application de ce commit (npm install git+https://alice@forge...).

Cependant, ce comportement n’est pas limitĂ© aux forges publiques : il existait dĂ©jĂ  avant en publiant le correctif dans un article de blog, une liste de diffusion (liste non exhaustive).

Envoyé vers la distribution

La correction est envoyĂ©e dans la distribution Linux utilisĂ©e ; c’est souvent fait en incluant la modification dans un fichier, attachĂ© Ă  un rapport de bogue sur la distribution.

Une fois que la modification sera intĂ©grĂ©e et qu’un nouveau paquet sera publiĂ©, l’ensemble des utilisateurs, y compris l’auteur, en bĂ©nĂ©ficieront. Cela Ă©vite de maintenir la modification de son cĂŽtĂ© lorsque de nouvelles versions du paquet seront publiĂ©es. La durĂ©e d’intĂ©gration est plus longue selon la rĂ©activitĂ© du mainteneur du paquet et le mode de publication (version espacĂ©e ou rolling release). Bien Ă©videmment, le bĂ©nĂ©fice de la modification sera perdu en cas de changement de distribution.

Cette solution est nĂ©cessaire pour corriger/amĂ©liorer un Ă©lĂ©ment spĂ©cifique d’un paquet de la distribution. Cela peut arriver dans deux cas :

  • soit parce que c’est un paquet spĂ©cifique Ă  la distribution (le paquet apt pour debian par exemple)
  • soit parce qu’une modification du logiciel spĂ©cifique Ă  la distribution a une influence sur la modification soumise

Envoyé vers le développeur amont

PlutĂŽt que d’envoyer le correctif vers la distribution utilisĂ©e, il est alors envoyĂ© directement vers le dĂ©veloppeur du logiciel. Si le dĂ©veloppement est hĂ©bergĂ© sur une forge publique, cela suppose le faire un fork (comme dans le cas d’une publication solitaire), puis de faire une pull request (terme Github), merge request (terme Gitlab). Sinon, il faut regarder quelle est la forme attendue : en postant sur une liste de diffusion, ou directement vers le mainteneur, etc. Il sera nĂ©cessaire de rĂ©pondre aux remarques et demandes de corrections pour que la modification soit intĂ©grĂ©e dans le logiciel amont.

Comme dans le cas d’une intĂ©gration dans la distribution, une fois intĂ©grĂ©e, la modification sera disponible pour tous :

  • soit en rĂ©utilisant le logiciel directement via le paquet issus du langage (par exemple gem pour ruby, wheel pour python, crate pour Rust, etc.)
  • soit parce que la version du logiciel sera elle aussi intĂ©grĂ©e dans la distribution et donc obtenue dans un paquet de la distribution

Ce type de contributions sont les plus longues à revenir au contributeur mais elles permettent le déploiement le plus large (et donc la plus grande disponibilité pour soi et pour les autres).

Autres considérations

S’il n’est pas possible d’attendre le retour de la modification, la solution optimale est de faire un correctif local et un envoi vers la distribution ou vers le dĂ©veloppeur amont (pour qu’une solution long terme soit aussi disponible automatiquement).

Pour bĂ©nĂ©ficier de l’envoi amont, il faut que le temps de retour soit infĂ©rieur au temps de changement de techno/bibliothĂšque. Dans un Ă©cosystĂšme oĂč les outils et bibliothĂšques sont abandonnĂ©s trĂšs rapidement, l’effort d’intĂ©gration peut ĂȘtre perçu comme vain puisque la personne ayant fait le dĂ©veloppement aura peu le temps d’en profiter. D’un point de vue gĂ©nĂ©ral, avec une majoritĂ© de personnes faisant ce calcul, cela ne fait qu’empirer le problĂšme, avec des multitudes de fork s’ignorant mutuellement, chacun avec une fonctionnalitĂ© ou une correction diffĂ©rente. Javascript me semble ĂȘtre dans cette situation.

À propos du schĂ©ma

Le schĂ©ma a Ă©tĂ© rĂ©alisĂ© avec Dia, installable par le paquet du mĂȘme nom pour Debian et dĂ©rivĂ©es.
Fichier source .dia

27 September, 2020 07:09PM by ascendances

April 19, 2020

Florent Gallaire

Jonathan Carter élu DPL pour 2020

C’est Jonathan Carter qui vient d’ĂȘtre Ă©lu Debian Project Leader (DPL) pour l’annĂ©e 2020, succĂ©dant ainsi Ă  Sam Hartman qui avait Ă©tĂ© Ă©lu en 2019.

ArrivĂ© l’an passĂ© derriĂšre Sam Hartman presque Ă  Ă©galitĂ© avec Martin Michlmayr et Joerg Jaspert, Jonathan l’emporte logiquement cette annĂ©e dans une Ă©lection sans rĂ©elle concurrence.

En effet, Brian Gupta avait immĂ©diatement indiquĂ© que le seul objet de sa candidature Ă©tait de constituer un rĂ©fĂ©rendum, qui s’est rĂ©vĂ©lĂ© peu concluant, sur la crĂ©ation des fondations Debian US et Debian Europe ; tandis que la jeune indienne Sruthi Chandran, dont on devrait rĂ©entendre parler dans les prochaines annĂ©es, manquait de lĂ©gitimitĂ© pour le poste n’étant dĂ©veloppeuse Debian que depuis un an.

Bravo à toi Jonathan, et bonne chance dans la mise en Ɠuvre de ton programme !

19 April, 2020 02:18AM by fgallaire

June 05, 2019

hackergotchi for Gr&#233;gory Colpart

Grégory Colpart

Mini-DebConf Marseille 2019 (fr)

L’idĂ©e d’organiser une mini-DebConf Ă  Marseille est nĂ©e Ă  Toulouse en 2017 : aprĂšs avoir participĂ© avec plaisir Ă  plusieurs (mini)DebConfs, se lancer dans l’organisation d’un tel Ă©vĂšnement est une maniĂšre de rendre la pareille et de contribuer Ă  Debian !

Fin 2018, aprĂšs avoir rĂ©uni les personnes motivĂ©es, nous avons choisi la date du 25/26 mai 2019 et dimensionner l’évĂšnement pour 50 Ă  70 personnes en sĂ©lectionnant un lieu appropriĂ© au centre-ville de Marseille. Je ne vais pas m’attarder ici sur dĂ©tails de l’organisation (appel Ă  confĂ©rences, enregistrement des participants, composition du programme etc.), car nous allons publier bientĂŽt un « Howto Organizing a mini-DebConf » pour partager notre expĂ©rience.

Tout a commencĂ© dĂšs le mercredi 22 mai, oĂč la formidable Ă©quipe vidĂ©o DebConf s’est rĂ©unie pour un sprint de 3 jours pour prĂ©parer la couverture de l’évĂ©nement avec le matĂ©riel dĂ©jĂ  arrivĂ© et former les membres qui gĂšreront le matĂ©riel pour la mini-DebConf Hambourg.

Vendredi 24 mai, l’équipe de traduction francophone de Debian est arrivĂ©e pour un sprint d’une journĂ©e. La plupart d’entre eux ne s’était jamais rencontrĂ© physiquement !

Une majeure partie des participants sont arrivĂ©s dans l’aprĂšs-midi du vendredi 24 mai. Le bureau d’accueil (Front-Desk) Ă©tait dĂ©jĂ  prĂȘt, et les arrivants ont pu rĂ©cupĂ©rer leur badge et un T-shirt de l’évĂ©nement. Pour des raisons Ă©cologiques, nous avions dĂ©cidĂ© de minimiser les goodies offerts au participants donc pas de sacs ou papiers superflus, mais un booklet distribuĂ© en amont. Si besoin, des goodies Debian (stickers, casquettes, polos, etc.) Ă©taient aussi en vente au Front-Desk.

La soirĂ©e de vendredi a dĂ©butĂ© avec un mini-CheeseWineBOF avec des denrĂ©es locales (fromages, vins, pastis, olives, fruits et lĂ©gumes) et apportĂ©es par des participant(e)s : merci Ă  Valhalla pour fromage italien, ainsi qu’à Urbec et Tzafrir !

La soirĂ©e de vendredi s’est poursuivie : pendant que l’équipe vidĂ©o finalisait son installation dans la salle de confĂ©rence, les participants ont Ă©tĂ© invitĂ©s Ă  une rĂ©union du Linux Users Group de Marseille : une prĂ©sentation de Florence Devouard, pionniĂšre de WikipĂ©dia, qui est revenue l’historique de WikipĂ©dia/WikimĂ©dia avec de nombreuses anecdotes. La soirĂ©e s’est achevĂ©e avec une tradition locale : la dĂ©gustation de pizzas marseillaises. Le week-end n’est pas encore commencĂ©, et dĂ©jĂ  de bons moments sont partagĂ©s entre les participants !

Samedi matin, c’était le coup d’envoi officiel de la mini-DebConf ! Ouverture des portes Ă  8h30 pour le petit dĂ©jeuner : cookies fait-maison, cafĂ© en grains, nous avons proposĂ© durant tout le week-end de la cuisine locale, fait-main et vĂ©gĂ©tarienne. Autre objectif : minimiser les dĂ©chets, et dans cette optique nous avons rĂ©flĂ©chi Ă  diffĂ©rents dispositifs : couverts en dur, tasses Ă  Ă©tiqueter, Ecocups, etc.

75 participants s’étaient inscrits, ce qui correspondait au maximum de la capacitĂ© du lieu. Et 73 sont effectivement venus, ce qui est un bel exploit, notamment pour une confĂ©rence totalement gratuite. Si l’on compte quelques participants non-inscrits, nous avons Ă©tĂ© au total plus de 75 participants, soit au-delĂ  de nos espĂ©rances !

À 9h45, c’est la confĂ©rence d’ouverture ! JĂ©rĂ©my dĂ©roule le programme du week-end, remercie les sponsors et rappelle le Code of Conduct, le systĂšme d’autorisations pour les photos, etc.

À 10h, c’est parti pour la premiĂšre confĂ©rence ! Les choses sĂ©rieuses dĂ©butent : Cyril Brulebois – release manager du Debian Installer – dĂ©taille le fonctionnement de la migration d’un package vers Testing, et propose une solution pour visualiser les dĂ©pendances entre les packages et comprendre ainsi pourquoi un package peut ĂȘtre bloquĂ©.

On enchaĂźne ensuite avec Peter Green – co-fondateur du projet Raspbian – qui prĂ©sente l’outil autoforwardportergit qu’il utilise pour automatiser la crĂ©ation de packages Debian modifiĂ©s pour Raspbian.

AprĂšs une pause-cafĂ©, c’est RaphaĂ«l Hertzog qui revient sur 5 ans du projet Debian LTS (Long Term Support). Il explique l’historique ainsi que le fonctionnement : la gestion des sponsors, le travail rĂ©parti entre plusieurs dĂ©veloppeurs, l’offre extended LTS, l’infrastructure. Le sujet du financement des contributeurs provoquera plusieurs questions et suscitera un Lightning Talk sur le sujet dimanche matin.

Durant le midi, pendant que l’infatiguable Ă©quipe vidĂ©o forme des dĂ©butants Ă  ses outils, un dĂ©jeuner est servi sous forme de buffet vĂ©gĂ©talien ou vĂ©gĂ©tarien. Nous sommes fiers d’avoir rĂ©ussi Ă  offrir une cuisine fait-maison avec des produits frais et locaux, et sans gĂąchis grĂące Ă  une bonne gestion des quantitĂ©s.

AprĂšs le dĂ©jeuner, c’est l’heure de la KSP (Key Signing Party) organisĂ©e par BenoĂźt. L’occasion pour chacun d’échanger des signatures de clĂ©s GPG et de renforcer le rĂ©seau de confiance.

Et l’on repart pour un cycle de confĂ©rences, avec Elena “of Valhalla” Grandi qui prĂ©sente le protocole ActivityPub pour des rĂ©seaux sociaux fĂ©dĂ©rĂ©s comme Mastodon, Pixelfed, etc.

C’est au tour de Laura Arjona Reina venue de Madrid pour prĂ©senter la Welcome Team au sein de Debian qui Ɠuvre pour accueillir les nouveaux arrivants.

Ensuite, Denis Briand – fraĂźchement Ă©lu prĂ©sident de Debian France – nous parle de l’association Debian France, de son but, de ses actions et de ses projets.

C’est au tour de FrĂ©dĂ©ric Lenquette d’aborder le sujet « Hardening and Secure Debian Buster » en explorant toutes les possibilitĂ©s de sĂ©curisation d’une Debian 10.

Enfin, derniĂšre confĂ©rence de la journĂ©e de samedi : une partie de l’équipe de traduction francophone (Thomas Vincent, Jean-Philippe Mengual and Alban Vidal) prĂ©sente son travail : comment fonctionne le travail en Ă©quipe, quelles tĂąches peuvent ĂȘtre faites par des dĂ©butants, etc.

Samedi soir, fin de la premiÚre journée : tous les participants sont invités à prolonger les échanges à la Cane BiÚre, un bar proche de la mini-DebConf.

Dimanche matin, on repart avec une prĂ©sentation de l’équipe vidĂ©o (reprĂ©sentĂ©e par Nicolas Dandrimont et Louis-Philippe VĂ©ronneau) qui rĂ©vĂšle ses secrets pour assurer la couverture vidĂ©o des (mini)DebConfs !

Puis on enchaĂźne avec une session de 6 Lightning Talks animĂ©s par Eda : « kt-update » (Jean-François Brucker), « the Debian Constitution » (Judit Foglszinger), « Elections, Democracy, European Union » (Thomas Koch), les mĂ©thodes de vote de Condorcet et du Jugement Majoritaire (RaphaĂ«l Hertzog), « encrypt the whole disk with LUKS2 » (Cyril Brulebois), « OMEMO – the big fish in the Debian bowl » (Martin) et « Paye ton Logiciel Libre » (Victor).

AprĂšs quelques mots pour clĂŽturer les confĂ©rences, c’est dĂ©jĂ  l’heure du rangement pour certains, tandis que d’autres en profitent pour faire un mini-DayTrip : descendre la CanebiĂšre Ă  pied et embarquer au Vieux Port pour l’archipel du Frioul pour marcher et nager !

Nous remercions les 75 participant(e)s venus du monde entier (Canada, USA, IsraĂ«l, Angleterre, Allemagne, Espagne, Suisse, Australie, Belgique etc.) ! Nous remercions Ă©galement la fantastique Ă©quipe vidĂ©o qui rĂ©alise un travail remarquable et impressionnant de qualitĂ©. Nous remercions Debian France qui a organisĂ© l’évĂ©nement, et les sponsors : Bearstech, Logilab et Evolix. Nous remercions la Maison du Chant de nous avoir mis Ă  disposition les locaux. Nous remercions Valentine et CĂ©lia qui ont assurĂ© tous les repas, il y a eu de nombreux compliments. Nous remercions Florence Devouard d’avoir assurĂ© une belle prĂ©sentation vendredi soir, ainsi que tous les orateurs(ices) de la mini-DebConf. Et je tiens Ă  remercier tous les bĂ©nĂ©voles qui ont assurĂ© la prĂ©paration et le bon dĂ©roulement de l’évĂ©nement : Tristan, AnaĂŻs, BenoĂźt, Juliette, Ludovic, Jessica, Éric, Quentin F. et JĂ©rĂ©my D. Mention spĂ©ciale Ă  Eda, Moussa, Alban et Quentin L. pour leur implication et leur motivation, et Ă  Sab et JĂ©rĂ©my qui se sont plongĂ©s avec moi dans cette folle aventure depuis plusieurs mois : you rock guys !

Twitter : https://twitter.com/MiniDebConf_MRS
Mastodon : https://mamot.fr/@minidebconf_mrs
Photos : https://minidebcloud.labs.evolix.org/apps/gallery/s/keMJaK5o3D384RA
Vidéos : https://ftp.acc.umu.se/pub/debian-meetings/2019/miniconf-marseille

05 June, 2019 01:57PM by Gregory Colpart

January 08, 2019

Stéphane Blondon

Processeur Intel -> Architecture AMD64 pour Debian

TL;DR

Nom courant Dénomination Debian Disponibilité
x86 i386 rarement en vente aprĂšs 2010
x86_64 amd64 Ă  moins d’acheter des ordinateurs spĂ©cifiques, il n’y a plus que ça pour le grand public

Si vous venez d’acheter un ordinateur, choisissez amd64.

L’histoire, avec un grand L

Intel avait conçu une architecture 8086, amĂ©liorĂ©e successivement jusqu’au 286 (un processeur 16 bits).
Au milieu des annĂ©es 80, Intel amĂ©liore cette architecture qui devient 32 bits (avec les dĂ©nominations commerciales 386 puis 486, Pentium, Pentium II, etc.), nommĂ©e i386 par Debian, communĂ©ment appelĂ©e x86. Cette architecture est aussi parfois nommĂ©e ia32 pour « Intel Architecture 32 bits ». D’autres constructeurs de processeurs comme AMD ou Cyrix concevaient des processeurs compatibles. C’est donc cette mĂȘme architecture (i386) qui devait ĂȘtre utilisĂ©e pour ces processeurs.

Autocollant Intel Pentium 4 (32 bits) comme on en trouvait collé sur des ordinateurs portables au début des années 2000

Puis Intel dĂ©cida de faire un nouveau processeur, 64 bits, incompatible avec les x86. AssociĂ© Ă  HP, une nouvelle gamme de processeur, Itanium, voit le jour en 2001. La dĂ©nomination Debian est donc ia64 (« Intel Architecture 64 bits »). C’est un Ă©chec commercial, dĂ» Ă  des performances dĂ©cevantes et l’absence de compatibilitĂ© ascendante. Cette gamme sera arrĂȘtĂ©e dans l’indiffĂ©rence gĂ©nĂ©rale en 2013.

ParallĂšlement Ă  Intel, AMD dĂ©cide d’étendre le processeur x86 pour qu’il fonctionne en 64 bits tout en ayant une compatibilitĂ© 32 bits. Cette architecture est souvent appelĂ©e x86_64, parfois x64. En 2003, AMD vend l’Athlon 64, premier processeur disponible au public de cette nouvelle architecture. Debian la dĂ©signe par le terme amd64. Des accords entre AMD et Intel permettant aussi Ă  Intel de produire cette architecture, Intel a emboĂźtĂ© le pas Ă  AMD et produit aussi des processeurs compatibles amd64. C’est pourquoi les processeurs modernes Intel nĂ©cessitent cette architecture lors de l’installation d’un systĂšme Debian.

Bien plus rĂ©cent que le Pentium4, c’est un processeur 64 bits. Les autocollants, c’est bien joli mais pas trĂšs informatif.

D’autres architectures moins connues voire complĂštement oubliĂ©es existent

Debian est installable sur de nombreuses autres architectures, mais qui ne sont pas orientĂ©es grand public. La seule exception Ă©tant peut-ĂȘtre ARM avec les cartes RaspberryPi (cf. wiki).

Des exemples d’autres architectures et processeurs associĂ©s : https://lists.debian.org/debian-www/2017/10/msg00125.html (Ă  la toute fin du message)

08 January, 2019 09:10PM by ascendances

October 16, 2018

Didier Raboud

Raksha – Une idĂ©e

J’étais donc ce week-end en cours CG (responsables de groupes) pour l’ASVd Ă  Froideville. Je tombe sur une conversation entre Chat et PĂ©lican au sujet du lancement d’une commission IT au niveau cantonal pour fournir des services aux groupes du canton.

On continue la discussion, qui embraie rapidement sur un Ă©change d’idĂ©es sur Framasoft, MiData (db.scout.ch) et les diffĂ©rentes initiatives pour fournir des services IT aux groupes scouts du canton.

Pour un petit historique, il y’a dĂ©jĂ  eu plusieurs initiatives dans ce sens, mais actuellement, je n’ai pas connaissance d’équipes actives ou fonctionnelles pour ça:

  • Pour l’ASVd:
    • un bĂ©nĂ©vole s’occupe des services cloud (NextCloud), email, listes et site Internet (WordPress).
    • des groupes DropBox continuent d’exister.
  • Pour les groupes:
    • rien de centralisĂ©, mais diffĂ©rentes initiatives isolĂ©es naĂźssent et meurent (Trello, Mattermost, etc)

Bref. La discussion a finalement tourné autour des idées suivantes:

  • Un service scout
  • S’inspirer de ce que fait Framasoft et les collectifs Chatons: dĂ©centraliser les services et reprendre le contrĂŽle!
  • Commencer petit; proposer quelque chose de spĂ©cifique aux scouts suisses, voir mĂȘme scouts vaudois pour commencer.
  • Tirer profit du bĂ©nĂ©volat, mais couvrir tous les frais
  • Offrir des services « collectifs » (une instance cloud par canton) et « spĂ©cifiques » (une instance Mattermost par groupe)
  • Avoir des ambitions techniques Ă©levĂ©es:
    • uniquement du logiciel libre
    • automatisation des processus
    • confiance dans les donnĂ©es (backup)
    • monitoring des services
    • intĂ©grations qui font sens
    • authentification unifiĂ©e
    • reproductibilitĂ© du projet

Tout ça est Ă©videmment Ă  discuter, clarifier, raffiner, prioriser avec les premiers intĂ©ressĂ©s. Mais
 Je cherchais un nom, en rapport autant avec le champ lexical des chats (Chatons) et du scoutisme. J’avais d’abord pensĂ© Ă  « gamelle », qui me plaisait bien, mais tous les `.ch` Ă©taient pris. « VeillĂ©e », vraiment bien, et veillĂ©e.ch est libre; mais il y’aurait confusion avec le mĂȘme nom sans accent. â˜č

En feuilletant mon Livre de la Jungle de poche (non, non, en vrai: https://fr.wikipedia.org/wiki/Le_Livre_de_la_jungle#Les_animaux ), j’ai commencĂ© Ă  parcourir les diffĂ©rents animaux de l’histoire en testant leur disponibilitĂ© en .ch . Et c’est lĂ  que MĂšre Louve; Raksha, est apparue libre!

Raksha : la louve grise, Ă©galement appelĂ©e MĂšre-Louve ou La dĂ©mone, mĂšre adoptive de Mowgli. Elle le dĂ©fend lorsque Shere-Khan le rĂ©clame Ă  l’entrĂ©e de sa taniĂšre.

C’est plutĂŽt un bon nom: les scouts avec une Ăąme de louveteaux reconnaĂźtront le nom immĂ©diatement, et c’est Ă©galement un animal qui a des petits par portĂ©es, avec un aspect de dĂ©fense des intĂ©rĂȘts des scouts, et un aspect de collectif. Des chatons au louveteaux, on n’est pas trĂšs loin!

Bref. On doit se voir pour en discuter!

16 October, 2018 08:15AM by OdyX

August 31, 2018

hackergotchi for Louis-Philippe Véronneau

Louis-Philippe Véronneau

Introduction Ă  Gitlab CI

Voici les notes de l'atelier d'introduction à Gitlab CI que je donne le 23 septembre dans le cadre de la Semaine québécoise de l'informatique libres.

Pourquoi faire de l'intégration continue?

Il y a plusieurs bonnes raisons pour commencer à faire de l'intégration continue (CI). En voici quelques unes:

  1. Tester son code. Souvent, l'intégration continue est une bonne maniÚre de commencer à tester son code. Les tests automatisés permettent de trouver des erreurs d'inattention et forcent à vérifier si le code que l'on écrit fonctionne réellement.

  2. Tester son code sur des environnements radicalement différents. Avoir des tests que l'on peut faire rouler localement sur sa machine est une bonne chose, mais utiliser un CI permet de tester son code sur des environnements sur lesquels on ne travaille pas.

  3. Tester son code automatiquement. Utiliser un CI liĂ© Ă  une plateforme d'hĂ©bergement git permet de s'assurer que les nouveaux commits rĂ©ussissent les tests avant d'ĂȘtre ajoutĂ©s Ă  la branche master.

  4. Déployer son code automatiquement. Il est possible d'aller une étape plus loin et d'utiliser le CI pour publier du code sur une archive comme PyPi ou NPM automatiquement si tous les tests passent. On parle alors de déploiement continu (CD).

Introductions aux fonctionnalités de Gitlab CI

Aperçu

Pour utiliser Gitlab CI, il faut tout d'abord avoir un projet sur une instance Gitlab. Quand on ajoute un commit git au dépÎt, si un fichier .gitlab-ci.yml est présent dans le dépÎt, Gitlab suit ces instructions et roule un script dans le runner, une machine externe qui sert à faire des tests.

Sur la plupart des instances Gitlab, il existe des runners partagĂ©s que tout le monde peut utiliser. Il est Ă©galement possible de monter un runner privĂ© pour son propre projet. Cela peut ĂȘtre intĂ©ressant si on a des tests qui demandent beaucoup de ressources.

Le fichier .gitlab-ci.yml

Pour commencer à utiliser Gitlab CI, il faut tout d'abord créer un fichier .gitlab-ci.yml.

Voici un exemple trĂšs simple de fichier:

---
image: debian:stable

test12345:
  script:
  - echo 'deb http://deb.debian.org/debian buster main contrib non-free' >> /etc/apt/sources.list
  - apt-get update
  - apt-get install -y -t buster rolldice
...

La premiĂšre partie du fichier est le paramĂštre image. C'est l'image docker qui va ĂȘtre utilisĂ©e par dĂ©faut dans les tests que l'on effectue. Cette image est rĂ©cupĂ©rĂ©e du Docker Hub. Pour utiliser une image, on spĂ©cifie le tag complet de l'image. Ainsi, l'image pour la version stable de Debian est debian:stable.

La seconde partie du fichier est le test que l'on roule. Il est possible d'avoir plusieurs tests l'un à la suite de l'autre. Le test dans notre exemple est nommé test12345, mais il aurait été possible de le nommer d'une autre maniÚre. apt:rolldice aurait également été un nom valide.

Chaque test doit comporter un script. Ce script est un ensemble de commandes shell de type bash. L'ensemble des commandes que l'on souhaite effectuer s'y retrouvent étapes par étapes.

Il est possible d'avoir plusieurs tests l'un Ă  la suite de l'autre:

---
image: debian:stable

apt:rolldice:stable:
  script:
  - apt-get install -y rolldice

apt:rolldice:buster:
  script:
  - echo 'deb http://deb.debian.org/debian buster main contrib non-free' >> /etc/apt/sources.list
  - apt-get update
  - apt-get install -y -t buster rolldice
...

Il est également possible de changer l'image par défaut utilisée dans un test:

---
image: debian:stable

apt:rolldice:stable:
  script:
  - apt-get install -y rolldice

apt:rolldice:buster:
  image: debian:buster
  script:
  - apt-get install -y rolldice
...

Les fichiers présents dans votre dépÎt git sont accessibles par vos scripts comme si vous travailliez directement dans ce dossier:

> foobar.txt

Hello World

> .gitlab-ci.yml

---
image: debian:stable

test:hello:
  script:
  - cat foobar.txt
  - cat foobar.txt | grep "Hello World"
...

Le paramĂštre service

Pour certains tests plus complexes, il est parfois nécessaire d'avoir un service externe différent de notre image docker principale, par exemple une base de données.

Gitlab CI permet de rouler un service externe accessible par nos tests. Ces services sont également des images Docker. Par voici un exemple simple d'utilisation d'une base de données:

> mytest.sql

CREATE TABLE `table1` (randomvar VARCHAR(30) NOT NULL);
CREATE TABLE `table2` (randomvar VARCHAR(30) NOT NULL);
CREATE TABLE `table3` (randomvar VARCHAR(30) NOT NULL);
CREATE TABLE `table4` (randomvar VARCHAR(30) NOT NULL);

> .gitlab-ci.yml

---
image: debian:stable

services:
  - mariadb:10.1

variables:
  MYSQL_DATABASE: mytest
  MYSQL_ALLOW_EMPTY_PASSWORD: 1

test:mariadb:
  script:
  - apt-get update && apt-get -y install mariadb-client-10.1
  - mariadb -u root -h mariadb -D mytest < mytest.sql
  - mariadb -u root -h mariadb -e "SELECT * FROM information_schema.columns WHERE table_schema = 'mytest'";
...

N'importe quelle image Docker peut ĂȘtre utilisĂ©e comme service. Si vous avez des besoins particuliers, il est nĂ©cessaire de crĂ©er une image Docker par vous mĂȘme.

Artifacts

Si vous souhaitez utiliser Gitlab CI pour compiler du code ou crĂ©er des fichiers que vous souhaitez conserver par la suite, il est nĂ©cessaire d'utiliser le paramĂštre artifacts. Sa fonction est de spĂ©cifier un fichier ou un dossier qui va ĂȘtre enregistrĂ© par Gitlab et que vous allez pouvoir rĂ©cupĂ©rer par la suite.

> input.md

# Hello World

This is a markdown test. It should be rendered to HTML properly using the great
[pandoc](https://pandoc.org/MANUAL.html).

> .gitlab-ci.yml

---
image: debian:stable

build:html:
  script:
  - apt-get update && apt-get -y install pandoc
  - pandoc -o output.html input.md
  artifacts:
    paths:
    - output.html
...

Tests à plusieurs étapes

Par défaut, les tests dans Gitlab CI fonctionnent tous simultanément. Cela est pratique pour des tests de type unit test. Pour des tests plus élaborés, on peut parfois vouloir fonctionner par étapes et créer des dépendances entre nos tests.

Le paramĂštre stage permet de spĂ©cifier des groupes dans lesquels on peut placer nos diffĂ©rentes tĂąches. Ces groupes peuvent par la suite ĂȘtre ordonnĂ©s, pour que les tests roulent dans un ordre prĂ©cis.

On peut également utiliser le paramÚtre dependencies pour créer un lien de dépendance entre différentes tùches. Les artifacts créés dans une tùches sont automatiquement passés à une seconde tùche si elle en dépend.

> hello.c

#include 

int
main (void)
{
  printf ("Hello, world!\n");
  return 0;
}

> .gitlab-ci.yml

---
stages:
  - build
  - test

compile:debian:
  image: debian:stable
  stage: build
  script:
  - apt-get update && apt install -y build-essential
  - gcc -Wall hello.c -o hello
  artifacts:
    paths:
    - hello

compile:alpine:
  image: alpine
  stage: build
  script:
  - apk add --update build-base
  - gcc -Wall hello.c -o hello
  artifacts:
    paths:
    - hello

test:debian:
  image: debian:stable
  stage: test
  dependencies:
  - compile:debian
  script:
  - ./hello

test:alpine:
  image: alpine
  stage: test
  dependencies:
  - compile:alpine
  script:
  - ./hello
...

Variables secrĂštes

Si vous souhaitez utiliser Gitlab pour publier votre projet sur une plateforme comme PyPi ou NPM, il est nécessaire de stocker vos informations d'authentification quelque part.

Il n'est bien évidemment pas recommandé d'ajouter vos mots de passes directement dans votre fichier .gitlab-ci.yml ou dans un autre fichier dans votre dépÎt git pour des raisons de sécurité: n'importe qui pourrait lire ces fichiers et compromettre vos comptes.

Gitlab permet de stocker des variables secrĂštes. Pour ce faire, il faut aller dans l'onglet Settings > CI/CD > Variables de votre projet.

Une fois que vous avez créé une variable secrÚte, il est possible d'y référer comme une variable normale dans votre fichier .gitlab-ci.yml.

---
image: debian:stable

test:secret-var:
  script:
  - apt-get update && apt-get -y install wget
  - wget https://agendadulibre.qc.ca/events/$SECRET
...

Compiler et héberger un site web statique à l'aide de Gitlab CI et Gitlab Pages

Un cas de figure intĂ©ressant pour Gitlab CI est la compilation d'un site web statique. Une fois compilĂ©, ce site web peut par la suite ĂȘtre hĂ©bergĂ© directement sur Gitlab grĂące au projet Gitlab Pages. Cela peut ĂȘtre utile pour hĂ©berger la documentation d'un projet.

Voici un exemple de projet utilisant Gitlab CI et Gitlab Pages. Ce projet utilise Sphinx avec le thÚme Read the Docs. Le site web compilé est disponible en ligne ici.

Une fois que l'on a ajouté un fichier .gitlab-ci.yml qui compile notre site statique, il faut aller dans l'onglet Settings > Pages de notre projet git pour mettre en ligne notre projet. Gitlab offre également la possibilité d'utiliser un domaine externe.

Plus d'informations

La documentation complĂšte du fichier .gitlab-ci.yml est disponible en ligne.

Atelier collaboratif d'utilisation de Gitlab CI

Trouvez un projet qui vous intĂ©resse et tentez de crĂ©er une sĂ©rie de tests áș§ l'aide de Gitlab CI.

Instructions pour installer Gitlab CI + Docker sur une machine privée (avancé)

On souhaite installer Docker et Gitlab CI sur un serveur Debian Stretch. Ces étapes nécessitent une certaine connaissance de la ligne de commande.

Docker

L'executor Docker est le plus simple et le plus flexible. C'est également celui qui est mis en place sur gitlab.com.

On commence donc par installer Docker sur notre machine. En temps normal, on installerait Docker à partir du dépÎt officiel Debian. Malheureusement, Docker n'est pas packagé dans Debian alors il est nécessaire de l'installer à partir du dépÎt offert par Docker.

On commence par ajouter un fichier source Ă  apt:

> /etc/apt/sources.list.d/docker.sources

Types: deb
URIs: https://download.docker.com/linux/debian/
Suites: stretch
Architectures: amd64
Components: main
Signed-By: /usr/share/keyrings/docker-archive-keyring.gpg

On complÚte l'installation en téléchargeant la clef GPG et en installant les packets1:

$ apt install apt-transport-https
$ curl https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-archive-keyring.gpg
$ apt update
$ apt install docker-ce

Docker a la fùcheuse habitude de démarrer avant que l'interface réseau ne soit en ligne. Cela fait en sorte que quand notre machine redémarre, notre CI n'a plus accÚs à internet, ce qui fait avorter nos tests.

Pour remédier à ce problÚme, on créé un fichier cron qui redémarre Docker 30 secondes aprÚs que notre machine ait démarrée:

$ sudo echo '@reboot root /bin/sleep 30 && /bin/systemctl restart docker' > /etc/cron.d/docker-reboot

On souhaite également éviter que notre serveur se remplisse des instances de test que l'on fait rouler. On ajoute donc un autre fichier cron pour purger Docker périodiquement:

$ sudo echo '0 3 * * * root /usr/bin/docker system prune -a -f > /dev/null 2>&1' > /etc/cron.d/docker-prune

Et voilĂ ! Docker est prĂȘt Ă  ĂȘtre utilisĂ© dans notre installation future de Gitlab CI!

Gitlab CI

Encore une fois, plutÎt que d'utiliser le dépÎt Gitlab offert par Debian pour installer Gitlab CI, on choisi plutÎt le dépÎt offert par Gitlab.

Gitlab est encore trĂšs jeune dans Debian et il y de nombreuses mises Ă  jour de sĂ©curitĂ©. Peut-ĂȘtre dans le futur les paquets Debian vont ĂȘtre plus fiables, mais ce n'est pas le cas pour l'instant.

On commence par ajouter un fichier source Ă  apt:

> /etc/apt/sources.list.d/gitlab.sources

Types: deb
URIs: https://packages.gitlab.com/runner/gitlab-runner/debian/
Suites: stretch
Architectures: amd64
Components: main
Signed-By: /usr/share/keyrings/gitlab-archive-keyring.gpg

On complÚte l'installation en téléchargeant la clef GPG et en installant les packets:

$ curl https://packages.gitlab.com/gpg.key | gpg --dearmor > /usr/share/keyrings/gitlab-archive-keyring.gpg
$ apt update
$ apt install gitlab-runner

Une fois gitlab-runner installé, on peut utiliser l'outil en ligne de commande pour créer un nouveau runner:

$ sudo gitlab-runner register
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
> https://url-de-l-instance-gitlab
Please enter the gitlab-ci token for this runner:
> le-token-de-votre-projet                 
Please enter the gitlab-ci description for this runner:
> La description du runner
Please enter the gitlab-ci tags for this runner (comma separated):
> nom-du-runner-gitlab-ci, docker

Pour obtenir le token nécessaire à la création du runner, il faut aller dans l'onglet Settings > CI/CD > Runners dans votre projet git. Le token est spécifié dans la section Setup a specific Runner manually.

Et voilĂ ! Si tout fonctionne correctement, le runner devrait s'afficher dans la l'onglet Settings > CI/CD > Runners de votre projet.

Pro Tip

Si vous utilisez votre propre runner Gitlab CI dans un environnement en production, il est important de s'assurer que ce dernier fonctionne pour s'éviter de fùcheux ennuis.

Pour s'assurer que notre runner est fonctionnel, on peut créer un projet git dont le seul but est de s'assurer que le CI fonctionne. Ce dernier n'a qu'à contenir un fichier .gitlab-ci.yml de base.

Par la suite, vous pouvez faire rouler le test à tous les jours ou à toutes les heures en créant un nouvel item dans dans l'onglet CI/CD > Schedules de votre projet.

Voici un exemple de fichier gitlab-ci.yml que l'on peut utiliser:

---
image: debian

test-ci:
  script:
  - apt-get update && apt-get -y install rolldice
  tags:
    - nom-du-runner-gitlab-ci
...

Il est bien important de spécifier le nom du runner sur lequel vous souhaitez que le test roule dans la section tags pour éviter de faire le test sur une autre machine que la vÎtre.


  1. Cette mĂ©thode est bien plus sĂ©curitaire qu'utiliser apt-key add car elle elle autorise la clef GPG externe seulement pour la source que l'on souhaite ajouter et non pour toutes les autres sources. Plus de dĂ©tails sur cette mĂ©thode ici. ↩

31 August, 2018 04:00AM by Louis-Philippe Véronneau

April 21, 2017

hackergotchi for Rapha&#235;l Hertzog

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.

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

February 13, 2017

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.

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

February 02, 2017

Élections prĂ©sidentielles, logiciel libre et Charlotte Marchandise

L’élection prĂ©sidentielle approche et commence Ă  prendre une grande place mĂ©diatique. À cette occasion, les associations comme l’April essaient d’interpeller les candidats pour les sensibiliser sur le sujet


En temps qu’association, il faut garder ses distances et ne pas prendre position. Mais en tant qu’individu, je peux aller plus loin et soutenir explicitement un candidat qui partage les valeurs du logiciel libre.

Charlotte MarchandiseC’est ce que je veux faire aujourd’hui. Je vous invite Ă  dĂ©couvrir Charlotte Marchandise. C’est la gagnante des primaires citoyennes organisĂ©es par laprimaire.org et son programme politique est en parfaite adĂ©quation avec mes valeurs (revenu de base inconditionnel, 6Ăšme rĂ©publique, transition Ă©cologique, etc.) y compris sur le logiciel libre (voir ici l’article dĂ©diĂ© de son programme).

C’est une candidature citoyenne non-partisane qui ne peut donc s’appuyer sur aucun financement prĂ©-existant. Elle a donc besoin de nos dons. J’ai dĂ©jĂ  fait un don consĂ©quent et je vous invite Ă  en faire de mĂȘme. Cliquez ici pour accĂ©der au formulaire permettant de soutenir la campagne de Charlotte Marchandise.

Si vous ne pouvez pas donner, je vous invite simplement Ă  parler de Charlotte et de son programme dans votre entourage et Ă  partager cet article. Si vous avez un peu de temps Ă  investir, vous pouvez participer Ă  la recherche de parrainages.

Je fais partie de ceux qui ne veulent plus de la classe politique en place et qui souhaite une réforme des institutions et du systÚme électoral en premier lieu. Avec cette candidature citoyenne, « hackons le systÚme » !

02 February, 2017 01:57PM by Raphaël Hertzog

January 14, 2017

Mes activités libres en décembre 2016

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 publiĂ© la DLA-741-1 concernant unzip. Ce fut une mise Ă  jour facile;
  • J’ai passĂ© en revue le patch de Roberto Sanchez pour la CVE-2014-9911 concernant ICU;
  • J’ai publiĂ© la DLA-759-1 concernant nss, en collaboration avec Antoine BeauprĂ©. J’ai fusionnĂ© et mis Ă  jour le travail de Guido pour activer la suite de tests au cours de la compilation, et pour ajouter les tests DEP-8;
  • J’ai créé le dĂ©pĂŽt Git qui sera utilisĂ© pour la maintenance de php5 dans Debian LTS, et j’ai commencĂ© Ă  travailler sur une mise Ă  jour. J’ai ajoutĂ© les patchs pour 2 CVE (CVE-2016-3141 et CVE-2016-2554), ainsi que quelques fichiers binaires requis par certains tests (qui Ă©chouent, Ă  l’heure actuelle).

Empaquetages divers

Avec l’approche du gel dĂ©finitif de Stretch, certains clients m’ont demandĂ© de pousser des paquets dans Debian et/ou de corriger des paquets sur le point d’ĂȘtre retirĂ©s de cette distribution.

Alors que j’essayais de ramener uwsgi dans testing, j’ai créé les rapport de bogue n°847095 (libmongoclient-dev: Ne devrait pas rentrer en conflit avec le paquet de transition mongodb-dev) et n°847207 (uwsgi: FTBFS sur de multiples architectures avec des rĂ©fĂ©rences indĂ©finies Ă  des symboles uwsgi_*), de mĂȘme que j’ai travaillĂ© sur quelques-uns des bogues critiques pour la publication qui maintenaient le paquet hors de testing.

J’ai Ă©galement travaillĂ© sur quelques nouveaux paquets (lua-trink-cjson, lua-inotify, lua-sandbox-extensions) qui amĂ©liorent le paquet « hindsight » dans certains cas d’usage, et j’ai parrainĂ© une mise Ă  jour de rozofs dans experimental, afin de corriger un conflit de fichiers avec inn2 (cf. le n°846571).

Travaux Debian divers

Debian Live J’ai publiĂ© deux mises Ă  jour de live-build. Avec la seconde ont Ă©tĂ© ajoutĂ©es plusieurs options de personnalisation de la configuration GRUB (que nous utilisons dans Kali pour surcharger le thĂšme, et ajouter de nouvelles entrĂ©es au menu), Ă  la fois pour le boot EFI et pour le boot normal.

Rapports de bogue divers Rapport de bogue n°846569 concernant libsnmp-dev, afin de tenir compte de la transition libssl (j’avais remarquĂ© que le paquet n’était pas maintenu, j’ai en consĂ©quence fait appel aux nouveaux mainteneurs potentiels sur la liste debian-devel). Le n°847168 sur devscripts pour debuild qui a commencĂ© Ă  Ă©chouer lorsque lintian Ă©chouait (rĂ©gression inattendue). Le n°847318 concernant lintian, afin d’éviter les faux-positifs sur les paquets Kali (ce qui Ă©tait ennuyeux du fait de la rĂ©gression debuild prĂ©cĂ©demment mentionnĂ©e). Le n°847436 concernant un problĂšme de mise Ă  jour avec tryton-server. Le n°847223 concernant firefoxdriver, dans la mesure oĂč il dĂ©pendait toujours d’iceweasel au lieu de firefox.

Parrainage J’ai parrainĂ© une nouvelle version d’asciidoc (rapport de bogue n°831965), ainsi que de ssldump (version 0.9b3-6), pour la transition libssl. J’ai Ă©galement poussĂ© une nouvelle version de mutter, afin de corriger le n°846898 (elle Ă©tait dĂ©jĂ  prĂȘte dans SVN).

Distro Tracker

Pas grand chose de nouveau, j’ai corrigĂ© le n°814315 en basculant quelques URLs restantes vers https. J’ai fusionnĂ© les patchs d’efkin pour corriger la suite de tests fonctionnels (cf. le n°814315), ce qui constitue une contribution vraiment trĂšs utile ! Ce mĂȘme contributeur s’est attaquĂ© Ă  un autre ticket (le n°824912) concernant l’ajout d’une API pour rĂ©cupĂ©rer les objets d’action. Cela reprĂ©sente une tĂąche plus importante et demande quelques rĂ©flexions. Je dois encore lui faire mes retours sur ses derniers patchs (aprĂšs dĂ©jĂ  deux itĂ©rations).

Travaux divers

J’ai mis Ă  jour la formule salt letsencrypt-sh pour la version 0.3.0, et ajoutĂ© la possibilitĂ© de personnaliser le script hook pour recharger le serveur Web.

Le compte Twitter @planetdebian n’est plus actif depuis que twitterfeed.com a fermĂ© ses portes, et que son remplaçant (dlvr.it) n’apprĂ©cie pas le fil RSS de planet.debian.org. J’ai créé le n°848123 concernant planet-venus, ce dernier ne prĂ©servant pas l’attribut isPermalink dans le tag guid.

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 December 2016 contribuée par Weierstrass01.

14 January, 2017 01:55PM by Raphaël Hertzog

December 11, 2016

Mes activités libres en novembre 2016

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

Dans les 11 heures de travail (rĂ©munĂ©rĂ©es) qui m’incombaient, je suis parvenu Ă  publier la DLA-716-1, aussi connue sous le nom de tiff 4.0.2-6+deb7u8, corrigeant les CVE-2016-9273, CVE-2016-9297 et CVE-2016-9532. On dirait bien que ce paquet est concernĂ© par de nouvelles CVE tous les mois.

J’ai ensuite consacrĂ© pas mal de temps Ă  passer en revue toutes les entrĂ©es dans dla-needed.txt. Je souhaitais me dĂ©barrasser des commentaires erronĂ©s ou qui ne sont plus pertinents, et en mĂȘme temps aider Olaf, qui s’occupait du « frontdesk LTS » pour la premiĂšre fois. Cela a abouti au marquage de pas mal d’entrĂ©es comme « no-dsa » (c’est Ă  dire que rien ne sera fait pour elles, leur gravitĂ© ne le justifiant pas), telles que celles affectant dwarfutils, dokuwiki, irssi. J’ai supprimĂ© libass, car la CVE ouverte Ă©tait sujette Ă  dĂ©bat et marquĂ©e comme « pas importante ». Tandis que je faisais cela, j’ai corrigĂ© un bogue dans le script bin/review-update-needed que nous utilisons pour identifier les entrĂ©es n’ayant fait aucun progrĂšs derniĂšrement.

Je me suis ensuite attaquĂ© Ă  libgc, et publiĂ© la DLA-721-1, ou libgc 1:7.1-9.1+deb7u1. Elle corrige la CVE-2016-9427. Le patch Ă©tait important et a du ĂȘtre rĂ©troportĂ© manuellement, car il ne s’appliquait pas correctement.

Enfin, la derniĂšre tĂąche rĂ©alisĂ©e fut le test d’une nouvelle version d’imagemagick et la revue d’une mise Ă  jour prĂ©parĂ©e par Roberto.

Travaux concernant pkg-security

L’équipe pkg-security continue sur sa bonne lancĂ©e : j’ai parrainĂ© le travail de patator concernant le nettoyage d’une dĂ©pendance inutile de pycryptopp, qui allait ĂȘtre retirĂ© de Testing du fait du ticket n°841581. AprĂšs m’ĂȘtre penchĂ© sur ce bogue, il s’est avĂ©rĂ© que celui-ci Ă©tait rĂ©solu dans libcrypto++ 5.6.4-3. Je l’ai donc clĂŽturĂ©.

J’ai parrainĂ© plusieurs envois : polenum, acccheck, sucrack (mises Ă  jour mineures), bbqsql (nouveau paquet importĂ© de Kali). Quelques temps plus tard, j’ai corrigĂ© quelques soucis dans le paquet bbsql, qui avait Ă©tĂ© rejetĂ© de NEW.

Je me suis Ă©galement occupĂ© de quelques bogues critiques pour la publication, et liĂ©s Ă  la transition vers openssl 1.1 : j’ai adoptĂ© dans l’équipe sslsniff et corrigĂ© le n°828557, par une compilation dĂ©pendante de libssl1.0-dev. Ceci aprĂšs avoir ouvert le ticket amont correspondant. J’ai fait la mĂȘme chose pour ncrack et le n°844303 (le ticket amont est ici). Quelqu’un d’autre s’est occupĂ© de samdump2, mais j’ai tout de mĂȘme adoptĂ© le paquet dans l’équipe pkg-security, dans la mesure oĂč il s’agit d’un paquet concernant le thĂšme de la sĂ©curitĂ©. J’ai aussi effectuĂ© un envoi en tant que non-mainteneur d’axel et du n°829452 (cela ne concerne pas pkg-security, mais nous l’utilisons dans Kali).

Travaux Debian divers

Django J’ai participĂ© Ă  la discussion dĂ©battant de l’opportunitĂ© de laisser Django compter le nombre de dĂ©veloppeurs qui l’utilisent. L’impact quant Ă  la diffusion de donnĂ©es personnelles que ce changement entraĂźnerait a suscitĂ© l’intĂ©rĂȘt des listes de diffusion Debian, et jusqu’à celui de LWN.

Sur un plan plus technique, j’ai poussĂ© la version 1.8.16-1~bpo8+1 vers jessie-backports, et corrigĂ© le bogue critique pour la publication n°844139. Pour se faire, j’ai rĂ©troportĂ© deux commits amont, ce qui a menĂ© Ă  l’envoi 1.10.3-2. Je me suis ensuite assurĂ© que cela Ă©tait Ă©galement corrigĂ© dans la branche amont 1.10.x.

dpkg et /usr fusionnĂ©. En parcourant debian-devel, j’ai dĂ©couvert que le bogue n°843073 menaçait la fonctionnalitĂ© d’un /usr fusionnĂ©. Dans la mesure oĂč le bogue Ă©tait prĂ©sent dans du code que j’avais Ă©crit il y a plusieurs annĂ©es, et du fait que Guillem n’était pas intĂ©ressĂ© par sa correction, j’ai passĂ© une heure Ă  mettre au point un patch relativement propre que ce dernier pourrait appliquer. Guillem n’a malheureusement pas encore rĂ©ussi Ă  sortir une nouvelle version de dpkg embarquant ces patchs. EspĂ©rons que cela ne tardera plus trop.

Debian Live J’ai fermĂ© le n°844332 , qui demandait le retrait de live-build de Debian. Étant marquĂ© comme orphelin, j’avais toujours gardĂ© un Ɠil sur ce paquet, et avait poussĂ© quelques petites corrections vers Git. J’ai dĂ©cidĂ© cette fois d’adopter officiellement le paquet au sein de l’équipe debian-live, et de travailler un peu plus dessus. J’ai passĂ© en revue tous les patchs en attente dans le suiveur de bogues, et poussĂ© de nombreuses modifications vers Git. Quelques changements restent Ă  faire pour finaliser un meilleur rendu du menu GRUB, et j’ai prĂ©vu de pousser une nouvelle version trĂšs prochainement.

Diverses crĂ©ations de tickets J’ai créé deux tickets amont concernant uwsgi, afin d’aider Ă  la correction de bogues ouverts et critiques pour la publication affectant ce paquet. J’ai créé le n°844583 concernant sbuild, afin de supporter les suffixes arbitraires de version pour les recompilations binaires (binNMU). Et j’ai créé le n°845741 concernant xserver-xorg-video-qxl, afin qu’il soit corrigĂ© pour la transition vers xorg 1.19.

Zim. Alors que j’essayais de corriger le n°834405 et de mettre Ă  jour les dĂ©pendances requises, j’ai dĂ©couvert que je devais mettre Ă  jour pygtkspellcheck en premier lieu. Le mainteneur de ce paquet Ă©tant malheureusement aux abonnĂ©s absents (MIA – missing in action), je l’ai adoptĂ© en tant que membre de l’équipe python-modules.

Distro Tracker. J’ai corrigĂ© un petit bogue, qui entraĂźnait l’affichage d’une affreuse trace Ă  l’occasion de requĂȘtes avec un HTTP_REFERER non-ASCII.

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 November 2016 contribuée par Weierstrass01.

11 December, 2016 07:37PM by Raphaël Hertzog

November 23, 2016

hackergotchi for Tanguy Ortolo

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 05:56PM by Tanguy

October 29, 2016

hackergotchi for J. Fernando Lagrange

J. Fernando Lagrange

Certificats Let’s Encrypt ! avec certbot

Qu’est-ce que c’est donc ? (bis)

Le mois dernier, j'avais partagé comment je faisais pour renouveler des certificats Let's Encrypt ! Je me suis alors rendu compte qu'il y a des outils dédiés dans le projet Debian, et qu'ils ont étés rétroportés pour Jessie: le paquet Debian certbot. Voici comment j'utilise ce paquet.

Pour rappel:
« Let's Encrypt (abrĂ©gĂ© LE) est une autoritĂ© de certification lancĂ©e le 3 dĂ©cembre 2015 (BĂȘta Version Publique). Cette autoritĂ© fournit des certificats gratuits X.509 pour le protocole cryptographique TLS au moyen d’un processus automatisĂ© destinĂ© Ă  se passer du processus complexe actuel impliquant la crĂ©ation manuelle, la validation, la signature, l’installation et le renouvellement des certificats pour la sĂ©curisation des sites internet. »
Contenu soumis à la licence CC-BY-SA 3.0. Source : Article Let's Encrypt de Wikipédia en français (auteurs ).

Voici donc comment j'utilise ce paquet Debian certbot pour:

  • CrĂ©er de nouveaux certificats (pour nginx)
  • Mettre Ă  jour ces certificats

Préambule: installation

Pour installer le paquet certbot, il faut d'abord ajouter la source des paquets rétroportés. C'est indiqué dans les instructions (en anglais) et sur la page wiki (en français). Personnellement, voici comment j'ai fait:

J'ai créé un fichier /etc/apt/sources.list.d/backports.list contenant la ligne suivante:

deb http://ftp.debian.org/debian jessie-backports main

Puis lancé les commandes suivantes:

root@server ~# apt update
[
]
root@server ~# apt install certbot
[
]

Créer de nouveaux certificats (pour nginx)

J'utilise nginx comme serveur web. J'ai mis en place le certificat Let's Encrypt ! en 3 étapes:

  1. Créer le certificat
  2. Configurer nginx pour utiliser le nouveau certificat
  3. Relancer nginx

Créer le certificat

Voici comment j'ai créé les certificats pour le site web www.fosforito.fr:

root@server ~# systemctl stop nginx.service
root@server ~# certbot certonly -d www.fosforito.fr
[
]

Puis, j'ai suivi les instructions (en anglais) pour utiliser l'authentification avec un serveur web autonome (standalone). Cela autorise certbot à lancer son propre serveur web, le temps de créer le certificat. nginx ne doit donc pas fonctionner le temps de créer le certificat (quelques secondes dans mon cas), c'est le but de la premiÚre commande. Pour le relancer, j'ai utilisé la commande suivante:

root@server ~# systemctl start nginx.service

Configuration de nginx

Pour utiliser la configuration ci-dessous, j'ai d'abord créé une clé Diffie-Hellman comme indiqué par SSL Labs:

root@server ~# openssl dhparam -out /etc/nginx/dhparams.pem 2048
[
]

Voici le fichier /etc/nginx/sites-available/www.fosforito.fr.conf que j'utilise avec la commande root@server ~# ln -s /etc/nginx/sites-available/www.fosforito.fr.conf /etc/nginx/sites-enabled/www.fosforito.fr.conf:

server {
    listen 443;
    server_name www.fosforito.fr;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.fosforito.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.fosforito.fr/privkey.pem;

    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

    ssl_prefer_server_ciphers on;

    ssl_dhparam /etc/nginx/dhparams.pem;

    root /srv/www.fosforito.fr/;
    index index.html;

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


}

Une fois tout cela mis en place, je teste avec SSL Labs et je vois que ce site obtient un A, ce qui me va bien. 🙂

Mise Ă  jour du certificat

Le paquet certbot met en place une tùche planifiée pour mettre à jour automatiquement le(s) certificat(s) Let's Encrypt ! présent(s) sur le serveur. Malheureusement, pour l'instant, cela ne fonctionne que pour le serveur web apache (paquet apache2 dans Debian).
Pour nginx, j'ai simplement modifiĂ© la tĂąche planifiĂ©e, dans le fichier /etc/cron.d/certbot, pour arrĂȘter le serveur web avant le renouvellement de certificat et le relancer aprĂšs. Voici le fichier au complet (notez les options pre-hook et post-hook):

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot -q renew --pre-hook "service nginx stop" --post-hook "service ngnix start"

Récapitulatifs

Mise en place du certificat pour nginx

  1. ArrĂȘter nginx
  2. Créer le certificat Let's Encrypt !
  3. Créer le groupe Diffie-Hellman
  4. Mettre en place la configuration du site web
  5. Relancer nginx

Renouvellement du(des) certificat(s)

Ajouter les options pre-hook et post-hook à la tùche plannifiée.

29 October, 2016 06:36PM by Low Memory

August 17, 2016

hackergotchi for Tanguy Ortolo

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 12:16PM by Tanguy

August 10, 2016

hackergotchi for J. Fernando Lagrange

J. Fernando Lagrange

Renouvellement de certificats LetsEncrypt avec systemd

Qu'est-ce que c'est donc ?

« Let's Encrypt (abrĂ©gĂ© LE) est une autoritĂ© de certification lancĂ©e le 3 dĂ©cembre 2015 (BĂȘta Version Publique). Cette autoritĂ© fournit des certificats gratuits X.509 pour le protocole cryptographique TLS au moyen d'un processus automatisĂ© destinĂ© Ă  se passer du processus complexe actuel impliquant la crĂ©ation manuelle, la validation, la signature, l'installation et le renouvellement des certificats pour la sĂ©curisation des sites internet1. » (Contenu soumis Ă  la licence CC-BY-SA 3.0. Source : Article Let's Encrypt de WikipĂ©dia en français (auteurs) )

Bref, c'est bien pratique pour faire du HTTPS (entre autres) et on peut automatiser le renouvellement des certificats. Il y a plusieurs annĂ©es, j'aurais fait un cron, mais comme j'ai appris que systemd pouvait gĂ©rer des tĂąches rĂ©pĂ©titives, je me suis dit que c'Ă©tait l'occasion de m'y mettre ! 😉

Comment on fait ?

Voici les étapes suivies, détaillées ci-dessous puis quelques documents qui m'ont permis de le faire, sans compter le conseil d'un ami: « T'as qu'à faire un timer ! » :

  • Copier certbot sur le serveur, logiciel (libre, non-copyleft) de gestion des certificats de Let's Encrypt
  • CrĂ©er un script pour renouveler les certificats avec certbot
  • CrĂ©er un service systemd pour lancer le script
  • CrĂ©er une minuterie (timer) systemd pour lancer le service Ă  intervalles rĂ©guliers

Enfin, activer et lancer la minuterie puis vérifier que ça fonctionne.

1. Copier certbot sur le serveur

Je le copie dans le dossier /opt du serveur:

root@serveur:~# cd /opt/ && git clone https://github.com/certbot/certbot
[
]

2. Créer le script pour utiliser certbot

Le script se nomme certbot-renew, il est créé dans /opt/certbot/, au mĂȘme endroit que certbot. CrĂ©ez aussi le dossier pour les journaux avec la commande mkdir /var/log/letsencrypt/.

Si vous utilisez le serveur web apache, changez le service que systemd doit arrĂȘter et redĂ©marrer, en gras dans le code ci-dessous:

root@serveur:~# cat > /opt/certbot/certbot-renew << EOF
#!/bin/sh
# Inspired by <https://letsencrypt.org/getting-started/>
systemctl stop nginx.service
/opt/certbot/certbot-auto renew -nvv --standalone > /var/log/letsencrypt/renew.log 2>&1
LE_STATUS=$?
systemctl start nginx.service
if [ "$LE_STATUS" != 0 ]; then
echo Automated renewal failed:
tail -n 200 /var/log/letsencrypt/renew.log
exit 1
fi
EOF

3. Créer le service systemd

C'est ce service qui va lancer le script /opt/certbot/certbot-renew créé à l'étape précédente:

root@serveur:~# cat > /etc/systemd/system/certbot-renew.service << EOF
# Voir <https://mjanja.ch/2015/06/replacing-cron-jobs-with-systemd-timers/>
[Unit]
Description=Renouvellement des certificats letsencrypt

[Service]
Type=simple
nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
ExecStart=/opt/certbot/certbot-renew
EOF

4. Créer la minuterie systemd

C'est cette minuterie qui va lancer le service créé à l'étape précédente. Notez que la valeur daily pour OnCalendar lance le service à minuit. Comme le serveur était programmé pour faire d'autres choses à minuit, j'ai utilisé un autre moment. ^^

root@serveur:~# cat > /etc/systemd/system/certbot-renew.timer << EOF
# Voir <https://mjanja.ch/2015/06/replacing-cron-jobs-with-systemd-timers/>
[Unit]
Description=Renouvellement des certificats letsencrypt

[Timer]
#OnCalendar=daily
OnCalendar=*-*-* 04:20:42

[Install]
WantedBy=timers.target
EOF

 

Il ne reste plus qu'à activer cette minuterie pour qu'elle soit lancée à chaque démarrage du serveur:  systemctl enable certbot-renew.timer

Pour Ă©viter un redĂ©marrage, la minuterie peut ĂȘtre lancĂ©e manuellement: systemctl start certbot-renew.timer

Pour vĂ©rifier que tout fonctionne bien le service peut aussi ĂȘtre lancĂ© manuellement: systemctl start certbot-renew.service. VĂ©rifiez alors les journaux pour voir si tout s'est bien dĂ©roulĂ©.

 

Voici donc comment j'ai procédé, il doit exister bien d'autres façons de faire, n'hésitez-pas à m'en faire part et/ou à améliorer ce que je présente ici.

Documentation, ressources:

Manuels de systemd: systemd.exec, systemd.service et systemd.timer.
Manuel de ioprio_set.
Remplacer les cron jobs par des minuteries systemd (en anglais).
Pour débuter avec Let's Encrypt (en anglais).

Un brin de persĂ©vĂ©rance, un tonneau de tests et quelques couplets de corrections. 😉

 

10 August, 2016 09:02PM by Low Memory

June 28, 2016

hackergotchi for Tanguy Ortolo

Tanguy Ortolo

J'ai testé pour vous UltraViolet (c'est de la merde)

AprÚs avoir acheté un beau coffret de la trilogie cinématographique Le Hobbit, j'ai eu la surprise d'un trouver des instructions pour « récupérer une copie numérique » pour regarder ces films « sur tous mes écrans » grùce à un machin appelé UltraViolet. Les instructions indiquées sont les suivantes :

  1. allez sur warnerbros.fr/uv ;
  2. entrez un code d'activation.

S'agissant d'un machin dĂ©veloppĂ© par la MAFIAA, je pouvais dĂ©jĂ  prĂ©dire le rĂ©sultat, mais par acquit de conscience, j'ai tout de mĂȘme essayĂ©, avec un navigateur Web Firefox sous Debian GNU/Linux, plugin Flash installĂ© et Ă  jour, JavaScript et cookies activĂ©s sans restriction. AprĂšs tout, il est bien indiquĂ© sur le papier que c'est censĂ© marcher « sur tous mes Ă©crans », avec de beaux petits schĂ©mas reprĂ©sentant un tĂ©lĂ©phone, une tablette, un ordinateur portable et un tĂ©lĂ©viseur.

Logo UltraViolet

Étape 1, Warner Bros

Deux Ă©tapes, on pourrait difficilement faire plus simple ! Sauf qu'Ă©videmment, ça se complique. Sur la page UltraViolet de Warner Bros, il n'y a pas d'endroit oĂč saisir un code ; au lieu de cela, il est proposĂ© deux sites partenaires oĂč on doit pouvoir l'entrer : Nolim films et Flixter.

Étape 1, deuxiùme partie, premier essai, Nolim films

Lorsque j'ai essayé, hier, la page de Nolim films affichait seulement « chargement en cours ». AprÚs quelques minutes, j'ai donc renoncé et été voir chez Flixter.

Étape 1, deuxiùme partie, deuxiùme essai, Flixter

CĂŽtĂ© Flixter, ça commence bien, on arrive sur un site en anglais. Une fois passĂ© en français, il y a un bouton pour « Utiliser un code ». On tape le code et
 ça dit qu'il n'y a aucun rĂ©sultat. En fait, il faut saisir le titre du film, et ensuite seulement, saisir le code d'activation.

Étape 2, (essayer de) regarder ou tĂ©lĂ©charger le film

Il faut alors créer un compte, qui demande de fournir des renseignements personnels, c'est à dire des informations qui ne devraient certainement pas les concerner : pour regarder un film qu'on a acheté, il est anormal de devoir donner son nom, prénom et date de naissance. Personnellement, j'ai renseigné mon nom, mais une date de naissance bidon.

Enfin, on peut regarder son film. Enfin, essayer, parce que ça ne marche pas : ça lance une page avec Flash, qui affiche
 du noir, puis un indicateur de chargement, et qui finit par planter le lecteur Flash.

On peut aussi télécharger son film avec un logiciel propriétaire proposé pour cela. Il est prévu pour Windows, et ne s'installe pas sous Wine.

Étape 3, ripper son DVD

Comme prĂ©dit, ça ne fonctionne pas. Il est donc temps de faire un peu chauffer mon processeur pour ripper mes DVD : ça au moins, ça fonctionne, et sans la moindre restriction. Autrement, ces flims doivent Ă©galement ĂȘtre disponibles sur les rĂ©seaux de contrefaçon : contrairement Ă  l'UltraTropLaid, ça aussi, ça fonctionne.

28 June, 2016 01:34PM by Tanguy

June 17, 2016

hackergotchi for J. Fernando Lagrange

J. Fernando Lagrange

La brique en voyage

La situation

Il se trouve que j'ai déménagé récemment. J'en ai profité pour demander un abonnement Internet à l'association de la Fédération FDN de mon coin: Rézine. J'ai donc mis ma brique Internet chez quelqu'un, le temps que l'accÚs Internet soit en place.

Le problĂšme

Quand j'ai connectĂ© la brique depuis un autre accĂšs Internet, plus rien n'a fonctionnĂ© : pas de nouvelles de la brique sur Internet, ni sur le rĂ©seau local ! 🙁

La solution

Note pour les avocats: cette solution a fonctionnĂ© chez moi, mais il y a un risque de perdre des donnĂ©es. Rien ne garanti qu'elle fonctionnera chez vous ! Je ne peux pas ĂȘtre tenu pour responsable des actions que vous faites. En cas de doute, demandez de l'aide au membre FFDN le plus proche de chez vous !

 

"Malheureusement", j'ai un modÚle de brique datant de juillet 2015 (avec la migration du blog sur la brique fin 2015). Et une fois fonctionnelle, je ne me suis pas occupé de son entretien: ne pas toucher à quelque chose qui fonctionne me semble un bon conseil à suivre en informatique.

Mais lĂ , je n'avais pas vu qu'il y avait des erreurs sur le disque. Ces erreurs n'ont Ă©tĂ© gĂȘnantes qu'une fois la brique Ă©teinte et rallumĂ©e. J'ai donc pris le disque dur de la brique (la carte microSD) et je l'ai mis dans mon PC.

Puis, avec la commande lsblk j'ai vu que la partition de ce disque était /dev/sdc1; j'ai alors pu lancer une vérification du disque avec la commande suivante:

# fsck /dev/sdc1
[
lĂ , ça dĂ©file et des fois ça pose des questions
]

Quand la question était posée de corriger les erreurs, j'ai répondu oui. Une fois toutes les erreurs corrigées, j'ai relancé la commande pour vérifier qu'il n'y avait plus d'erreur:

# fsck /dev/sdc1
fsck de util-linux 2.25.2
e2fsck 1.42.12 (29-Aug-2014)
/dev/sdc1 : propre, 93335/917568 fichiers, 848399/3859968 blocs

C'est alors, plein d'espoir que j'ai remis le disque dur dans la brique pour la brancher et l'allumer: ça marchait à nouveau ! 🙂

DeuxiĂšme problĂšme

Tout content que la brique refonctionne, j'ai payé un coup à boire à la personne qui l'héberge et je suis rentré chez moi. C'est avec un peu de déception que j'ai réalisé le lendemain que la brique ne fonctionnait plus ! :'-(

Ce deuxiĂšme problĂšme est aussi liĂ© au fait que j'ai mis en place ma brique en juillet 2015: Ă  partir du moment oĂč l'application vpnclient mettait en place le tunnel chiffrĂ©, la brique n'avait plus accĂšs aux DNS (dont on parle dans cette superbe confĂ©rence) !

AprĂšs demande d'information Ă  mon fournisseur de tunnels, c'est normal pour pleins de raisons diffĂšrentes, bref je dois utiliser leur DNS.

DeuxiĂšme solution

Une fois le problÚme identifié, la solution n'est pas loin ! Ici, j'ai mis à jour l'application vpnclient et le tour était joué: la derniÚre version de cette application prends en compte les DNS ! \o/

Je peux donc maintenant bloguer Ă  nouveau, par exemple pour indiquer comment j'ai dĂ©placĂ© ma brique ! 🙂

Prochaines étapes: mise en place de sauvegardes
 Stay tuned for more info

 

17 June, 2016 09:13AM by Low Memory

April 28, 2016

hackergotchi for Tanguy Ortolo

Tanguy Ortolo

Pour des cartes restaurant anonymes

Contexte

Dans les annĂ©es 2000, la RATP et la SNCF on progressivement imposĂ© le remplacement des tickets de papier anonymes par des cartes Ă  puce nommĂ©es Navigo, pour les utilisateurs d'abonnements. Le problĂšme, c'est que ces cartes Ă  puces Ă©taient nominatives, et que dans un pays libre, « aller et venir librement, anonymement, est l’une des libertĂ©s fondamentales. » La CNIL a donc imposĂ© la crĂ©ation d'une carte Navigo anonyme.

L'histoire bĂ©gaie un peu. Dans les annĂ©es qui viennent, sous la pression de l'État, les opĂ©rateurs de titres restaurant vont progressivement imposer le remplacement des titres de papier anonymes par des cartes Ă  puce, qui permettent un plus grand contrĂŽle des usages, afin d'en limiter les utilisations dĂ©tournĂ©es. Le problĂšme, c'est que ces cartes Ă  puce sont nominatives, et que dans un pays libre, se nourrir, et plus gĂ©nĂ©ralement consommer librement, anonymement, est l'une des libertĂ©s fondamentales. La CNIL devrait donc imposer la crĂ©ation de cartes restaurant anonymes.

C'est possible

Les opĂ©rateurs de titres restaurant objecteront peut-ĂȘtre que c'est techniquement impossible. Pour les aider ainsi que la CNIL, voici une description d'un systĂšme qui rendrait possible l'utilisation de cartes restaurant anonymes. Comme pour les cartes de transport, choisir l'anonymat peut impliquer de renoncer Ă  certains avantages.

L'entreprise distribuant des titres restaurant à ses salariés dispose d'un stock de quelques cartes anonymes, seulement identifiées par leur numéro. Comme toute carte restaurant, chacune est associée à un compte initialement vide.

Lorsqu'un salariĂ© demandĂ© Ă  disposer d'une carte anonyme, l'entreprise lui fournit une de ces cartes. Elle peut noter et transmettre Ă  l'opĂ©rateur le fait que cette carte est maintenant attribuĂ©e, mais a interdiction de relever le nom du salariĂ© qui l'utilise. Si le salariĂ© disposait dĂ©jĂ  d'une carte nominative, son numĂ©ro doit ĂȘtre relevĂ© afin de cesser d'alimenter le compte correspondant, ce qui peut ĂȘtre traitĂ© de la mĂȘme façon qu'un retrait de l'offre de titres restaurant. Évidemment, l'entreprise a interdiction de tenter de dissuader les salariĂ©s de choisir l'anonymat, et de pĂ©naliser ceux qui feraient ce choix.

Chaque mois, lors de la distribution des titres restaurant, le salarié utilisateur d'une carte anonyme se présente en personne, comme cela se fait pour des titres en papier. Le responsable approvisionne le compte correspondant au numéro indiqué sur la carte, et note sur un registre séparé que ce salarié a bien bénéficié de la distribution. L'entreprise a interdiction de noter sur ce registre le numéro de la carte créditée, et, d'une façon générale, de noter ou de transmettre tout ce qui pourrait permettre d'associer les noms des salariés avec les numéros des cartes anonymes. Encore une fois, l'entreprise a interdiction de pénaliser les salariés qui se présentent pour une distribution anonyme.

Le salariĂ© utilise sa carte restaurant de façon normale pour rĂ©gler ses consommations et achats Ă©ligibles dans les conditions prĂ©vues. Les restaurateurs de enseignes acceptant les paiements par carte restaurant ont interdiction de pĂ©naliser les utilisateurs de cartes anonymes. Seules les fonctionnalitĂ©s annexes de gestion peuvent ĂȘtre affectĂ©es par le caractĂšre anonyme de la carte : ainsi, en cas de perte, l'opposition sur cette carte ne pourra pas ĂȘtre effectuĂ©e avec le seul nom du bĂ©nĂ©ficiaire, mais nĂ©cessitera la connaissance de son numĂ©ro, faute de quoi elle ne pourra ĂȘtre rĂ©alisĂ©, et le crĂ©dit restant devra ĂȘtre considĂ©rĂ© comme non rĂ©cupĂ©rable. De telles restrictions doivent ĂȘtre justifiĂ©es par une raison technique : ainsi, il ne serait pas admissible de restreindre une opĂ©ration de promotion chez un restaurateur partenaire aux seuls titulaires de cartes nominatives.

28 April, 2016 07:47PM by Tanguy

April 25, 2016

Parking Méditerranée - Gare de Lyon : attention, hostile aux vélos

Parking Méditerranée

La Gare de Lyon est une grande gare parisienne, qui est desservie à la fois par le réseau régional et par plusieurs grandes lignes nationales. On y trouve donc :

  • des riverains, qui habitent ou travaillent prĂšs de la gare ;
  • des usagers quotidiens ;
  • des voyageurs occasionnels, qui partent ou reviennent par exemple de week-end ou de vacances en province.

Le parking MĂ©diterranĂ©e, opĂ©rĂ© par la SAEMES, est situĂ© sous la gare de Lyon, et accueille le mĂȘme type de clients :

  • des usagers quotidiens, qui y parquent leur vĂ©hicule tous les jours ou toutes les nuits ;
  • des voyageurs occasionnels, qui parquent ponctuellement leur vĂ©hicule pour quelques jours, voire quelques semaines.

Cet usage est indépendant du type de véhicule, qu'il s'agisse d'une voiture, d'une moto ou d'une bicyclette.

Théoriquement, un accÚs vélo

Sur sa page Web, le parking Méditerranée - Gare de Lyon affiche un joli logo vélo, qui suggÚre la possibilité d'y garer sa bicyclette (qu'est-ce que ça pourrait bien vouloir dire d'autre ?).

De surprise en surprise

La réalité est toute autre. Le voyageur qui arrive à vélo au parking Méditerranée va de surprise en surprise (et de pire en pire) :

  1. L'espace vélo n'est pas indiqué, les panneaux donnant seulement le choix entre l'espace voiture et l'espace moto. Faute de mieux, autant choisir l'espace moto, c'est ce qui se fait de plus approchant.
  2. On est censĂ© prendre un ticket, mais la machine n'en distribue pas aux vĂ©los : on a beau appuyer sur le bouton prĂ©vu pour cela, rien ne sort et la barriĂšre reste fermĂ©e. Qu'Ă  cela ne tienne, un vĂ©lo est suffisamment maniable pour contourner la barriĂšre, mais ça commence mal (et ça va mal finir, mais pour le moment, on a un train Ă  prendre)

  3. Une fois arrivĂ© dans l'espace moto, comme on peut s'y attendre, rien n'est prĂ©vu pour fixer des vĂ©los. Peu importe, un cycliste urbain est de toute façon habituĂ© Ă  stationner comme il le peut, une barriĂšre fera donc l'affaire, en vĂ©rifiant bien qu'on ne gĂȘne pas le passage ou le stationnement des autres usagers.
  4. Une fois rentrĂ© de voyage, et de retour Ă  la gare de Lyon, on constate que l'exploitant du parking a enchaĂźnĂ© la bicyclette, sans un mot d'explication, sans doute parce qu'elle Ă©tait mal garĂ©e, mais comment pourrait-elle ĂȘtre bien garĂ©e puisque l'espace vĂ©los n'est pas indiqué ?
  5. À l'accueil, l'exploitant exige un paiement pour libĂ©rer le vĂ©lo. Pourquoi pas, mais 15 €, c'est un peu cher pour trois jours de stationnement en occupant zĂ©ro emplacement.

Un parking hostile aux vélos

Le parking Méditerranée - Gare de Lyon, qui s'affiche sur le Web avec un espace vélo, est en réalité hostile à ce type de véhicule. Le fait d'afficher un espace vélo, qui s'avÚre en réalité indisponible, pourrait d'ailleurs relÚver de la publicité mensongÚre.

Suite Ă  cette dĂ©sagrĂ©able expĂ©rience, j'ai commencĂ© une enquĂȘte sur le stationnement vĂ©lo dans les parkings publics des grandes gares parisiennes, dont certains indiquent ainsi disposer d'un espace vĂ©lo, qui peut s'avĂ©rer inexistant. Affaire Ă  suivre.

25 April, 2016 07:01PM by Tanguy

April 11, 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 by Carl Chenet

April 07, 2016

« 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-TMLa 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.

freebsdFreeBSD, 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.

trollLes 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 by Carl Chenet

April 03, 2016

Nouveau forum pour l’emploi dans la communautĂ© du Logiciel Libre et opensource

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

Un rapide message pour annoncer le lancement d’un forum dĂ©diĂ© Ă  l’emploi dans la communautĂ© du Logiciel Libre et opensource :

Le forum de LinuxJobs.fr : https://forum.linuxjobs.fr

forum-small

Devant le succĂšs de LinuxJobs.fr , le site d’emploi de la communautĂ© du Logiciel Libre et opensource, et la communautĂ© d’utilisateurs qui s’est constituĂ© autour, il Ă©tait dommage de s’arrĂȘter Ă  l’échange d’offres d’emplois. C’est pourquoi LinuxJobs.fr créé un lieu d’échange et de discussions pour sa communautĂ©, avec des catĂ©gories comme les rĂ©munĂ©rations, le droit du travail, les questions des jeunes diplĂŽmĂ©s, des les Ă©tudiants ou l’entrepreunariat.

banieres linux vert

Ce nouveau forum est fiÚrement propulsé par le nouveau moteur de forums Flarum, un logiciel libre sous licence MIT.

Au plaisir de discuter bientĂŽt avec vous sur le forum de LinuxJobs.fr.

Quelques liens pour finir :

03 April, 2016 10:00PM by Carl Chenet

March 31, 2016

Le danger Github (revu et augmenté)

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

Alors que le projet CPython (implĂ©mentation historique du projet Python) a annoncĂ© son passage chez Github (avec quelques restrictions, nous reviendrons lĂ -dessus), il est plus que jamais important de s’interroger sur les risques encourus d’utiliser un logiciel propriĂ©taire dans notre chaĂźne de crĂ©ation du Logiciel Libre.

Des voix critiques s’élĂšvent rĂ©guliĂšrement contre les risques encourus par l’utilisation de Github par les projets du Logiciel Libre. Et pourtant l’engouement autour de la forge collaborative de la startup Californienne Ă  l’octocat continue de grandir.

codercatL’octocat, mascotte de Github

Ressentis Ă  tort ou Ă  raison comme simples Ă  utiliser, efficaces Ă  l’utilisation quotidienne, proposant des fonctionnalitĂ©s pertinentes pour le travail collaboratif en entreprise ou dans le cadre d’un projet de Logiciel Libre, s’interconnectant aujourd’hui Ă  de trĂšs nombreux services d’intĂ©gration continue, les services offerts par Github ont pris une place considĂ©rable dans l’ingĂ©nierie logicielle ces derniĂšres annĂ©es.

Quelles sont ces critiques et sont-elles justifiées ? Nous proposons de les exposer dans un premier temps dans la suite de cet article avant de peser le pour ou contre de leur validité.

1. Points critiques

1.1 La centralisation

L’application Github appartient et est gĂ©rĂ©e par une entitĂ© unique, Ă  savoir Github, inc, sociĂ©tĂ© amĂ©ricaine. On comprend donc rapidement qu’une seule sociĂ©tĂ© commerciale de droit amĂ©ricain gĂšre l’accessibilitĂ© Ă  la majoritĂ© des codes sources des applications du Logiciel Libre, ce qui reprĂ©sente un problĂšme pour les groupes utilisant un code source qui devient indisponible, pour une raison politique ou technique.

github-logo

De plus cette centralisation pose un problĂšme supplĂ©mentaire : de par sa taille, ayant atteint une masse critique, elle s’auto-alimente. Les personnes n’utilisant pas Github, volontairement ou non, s’isolent de celles qui l’utilisent, repoussĂ©es peu Ă  peu dans une minoritĂ© silencieuse. Avec l’effet de mode, on est pas « dans le coup » quand on n’utilise pas Github, phĂ©nomĂšne que l’on rencontre Ă©galement et mĂȘme devenu typique des rĂ©seaux sociaux propriĂ©taires (Facebook, Twitter, Instagram).

1.2 Un logiciel privateur

Lorsque vous interagissez avec Github, vous utilisez un logiciel privateur, dont le code source n’est pas accessible et qui ne fonctionne peut-ĂȘtre pas comme vous le pensez. Cela peut apparaĂźtre gĂȘnant Ă  plusieurs points de vue. IdĂ©ologique tout d’abord, mais peut-ĂȘtre et avant tout pratique. Dans le cas de Github on y pousse du code que nous contrĂŽlons hors de leur interface. On y communique Ă©galement des informations personnelles (profil, interactions avec Github). Et surtout un outil crucial propriĂ©taire fourni par Github qui s’impose aux projets qui dĂ©cident de passer chez la sociĂ©tĂ© amĂ©ricaine : le gestionnaire de suivi de bugs.

windowsWindows, qui reste le logiciel privateur par excellence, mĂȘme si d’autres l’ont depuis rejoint

1.3 L’uniformisation

Travailler via l’interface Github est considĂ©rĂ© par beaucoup comme simple et intuitif. De trĂšs nombreuses sociĂ©tĂ©s utilisent maintenant Github comme dĂ©pĂŽt de sources et il est courant qu’un dĂ©veloppeur quittant une sociĂ©tĂ© retrouve le cadre de travail des outils Github en travaillant pour une autre sociĂ©tĂ©. Cette frĂ©quence de l’utilisation de Github dans l’activitĂ© de dĂ©veloppeur du Libre aujourd’hui participe Ă  l’uniformisation du cadre de travail dudit dĂ©veloppeur.

L'uniforme Ă©voque l'armĂ©e, ici l'armĂ©e des clonesL’uniforme Ă©voque l’armĂ©e, ici l’armĂ©e des clones

2. Validité des points critiques

2.1 Les critiques de la centralisation

2.1.1 Taux de disponibilité du service

Comme dit prĂ©cĂ©demment, Github est aujourd’hui la plus grande concentration de code source du Logiciel Libre. Cela fait de lui une cible privilĂ©giĂ©e.  Des attaques massives par dĂ©nis de service ont eu lieu en mars et aoĂ»t 2015. De mĂȘme, une panne le 15 dĂ©cembre 2015 a entraĂźnĂ© l’indisponibilitĂ© de 5% des dĂ©pĂŽts. Idem le 15 novembre. Et il s’agit des incidents rĂ©cents dĂ©clarĂ©s par les Ă©quipes de Github elles-mĂȘmes. On peut imaginer un taux d’indisponibilitĂ© moyen des services bien supĂ©rieur.

githubdown

2.1.2 Blocage de la construction du Logiciel Libre par réaction en chaßne

Aujourd’hui plusieurs outils de gestion des dĂ©pendances comme npm dans le monde javascript, Bundler dans le monde Ruby ou mĂȘme pip pour le monde Python sont capables d’aller chercher le code source d’une application directement depuis Github. Les projets du Logiciel Libre Ă©tant de plus en plus intriquĂ©s, dĂ©pendants les uns des autres, si l’un des composants de la chaĂźne de construction vient Ă  manquer, c’est toute la chaĂźne qui s’arrĂȘte.

Un excellent exemple de cet Ă©tat de fait est la rĂ©cente affaire du npmgate (voir l’article Du danger d’un acteur non-communautaire dans votre chaĂźne de production du Logiciel Libre). Github peut trĂšs bien demain ĂȘtre mis en demeure par une entreprise de retirer du code source de son dĂ©pĂŽt, ce qui pourrait entraĂźner une rĂ©action en chaĂźne menant Ă  l’impossibilitĂ© de construire de nombreux projets du Logiciel Libre, comme cela vient d’arriver Ă  la communautĂ© Node.js Ă  cause de la sociĂ©tĂ© Npm, inc. gĂ©rant l’infrastructure de l’installeur automatisĂ© npm.

2.2 Un peu de recul historique : SourceForge

MĂȘme si l’ampleur du phĂ©nomĂšne n’a pas Ă©tĂ© la mĂȘme, il est bon de rappeler que Github n’est pas apparu ex-nihilo et avait un prĂ©dĂ©cesseur ayant joui en son temps d’un engouement important : SourceForge.

Fortement centralisĂ©, reposant Ă©galement sur de fortes interactions avec la communautĂ©, SourceForge est un SAAS fortement vieillissant  ces derniĂšres annĂ©es et subit une vĂ©ritable hĂ©morragie de ses utilisateurs au profit de Github. Ce qui signifie beaucoup d’ennuis pour ceux qui y sont restĂ©s. Pour le projet Gimp, il s’agit tout d’abord d’abus publicitaires trompeurs indignes, qui entraĂźnent Ă©galement le dĂ©part du projet VLC , puis l’apparition d’installeurs comprenant des adwares se faisant passer pour l’installeur officiel Windows de Gimp. Et enfin purement et simplement le piratage du compte SourceForge du projet Gimp par
 les Ă©quipes de SourceForge elle-mĂȘme.

Nous voyons ici des exemples rĂ©cents et trĂšs concrets des pratiques dont sont capables les sociĂ©tĂ©s commerciales lorsqu’elles sont sous la pression de leurs actionnaires. D’oĂč la nĂ©cessitĂ© de bien comprendre l’enjeu reprĂ©sentĂ© par le fait de leur confier une centralisation des donnĂ©es et des Ă©changes ayant de fortes consĂ©quences sur le fonctionnement et les usages de la communautĂ© du Logiciel Libre et opensource.

 

2.3 Les critiques relatives Ă  utiliser un logiciel privateur

2.3.1 Une communauté, différents rapports au logiciel propriétaire

Cette critique, avant tout idĂ©ologique, se heurte Ă  la conception mĂȘme que chacun des membres de la communautĂ© se fait du Logiciel Libre et opensource, et en particulier d’un critĂšre : contaminant ou non, qu’on rĂ©sume en gĂ©nĂ©ral par GPL versus MIT/BSD.

 

bsdvsgpl

Les dĂ©fenseurs du Logiciel Libre contaminant vont ĂȘtre gĂȘnĂ©s d’utiliser un logiciel propriĂ©taire car ce dernier ne devrait pas exister. Il doit ĂȘtre assimilĂ©, pour citer Star Trek,  car il est une boĂźte noire communicante, qui met en danger la vie privĂ©e, dĂ©tourne nos usages Ă  des fins commerciales, gĂȘne ou contraint la libertĂ© de jouir entiĂšrement de ce qu’on a acquis, etc.

gplv3

Les pendants d’une totale libertĂ© sont moins complexĂ©s dans leur utilisation des logiciels privateurs puisqu’ils acceptent l’existence desdits logiciels privateurs au nom d’une libertĂ© sans restriction. Ils acceptent mĂȘme que le code qu’ils dĂ©veloppent aboutissent dans ces logiciels, ce qui arrive bien plus souvent qu’on ne le croit, voir Ă  ce sujet la liste Ă  couper le souffle des produits commerciaux reposant sur FreeBSD. On peut donc voir dans cette aile de la communautĂ© du Logiciel Libre une totale sĂ©rĂ©nitĂ© Ă  utiliser Github. Et ce qui est cohĂ©rent vis-Ă -vis de l’idĂ©ologie soutenue. Si vous ĂȘtes dĂ©jĂ  allĂ© au Fosdem, un coup d’Ɠil dans l’amphithéùtre Janson permet de se rendre compte de la prĂ©sence massive de portables Apple tournant sous MacOSX.

FreeBSD, principal projet des BSD sous licence MITFreeBSD, principal projet des BSD sous licence BSD

2.3.2 Les pertes de donnĂ©es et obstructions liĂ©es Ă  l’usage d’un logiciel privateur

Mais au-delĂ  de cet aspect idĂ©ologique pur et pour recentrer sur l’infrastructure de Github elle-mĂȘme, l’utilisation du gestionnaire de suivi de bugs de Github pose un problĂšme incontournable. Les rapports de bugs sont la mĂ©moire des projets du Logiciel Libre. Il constitue le point d’entrĂ©e des nouveaux contributeurs, des demandes de fonctionnalitĂ©s, des rapports de bugs et donc la mĂ©moire, l’histoire du projet qui ne peut se limiter au code seul. Il est courant de tomber sur des rapports de bugs lorsque vous copiez/collez votre message d’erreur dans un moteur de recherche. MĂ©moire prĂ©cieuse non seulement pour le projet lui-mĂȘme, mais aussi pour ses utilisateurs actuels et Ă  venir.

Github propose d’extraire les rapports de bugs via son API, certes, mais combien de projets anticiperont une Ă©ventuelle dĂ©faillance de Github  ou un retournement de situation arrĂȘtant brusquement le service ? TrĂšs peu Ă  mon avis. Et comment migrer vers un nouveau systĂšme de suivi de bugs les donnĂ©es fournies par Github ?

L’exemple de l’utilitaire de gestion de listes de choses Ă  faire (TODO list) Astrid, rachetĂ© par Yahoo! il y a quelques annĂ©es reste un trĂšs bon exemple de service ayant grandi rapidement, largement utilisĂ© et qui a fermĂ© du jour au lendemain, proposant pendant quelques semaines seulement d’extraire ses donnĂ©es. Et il s’agissait lĂ  d’un simple gestionnaire de tĂąches Ă  faire. Le mĂȘme problĂšme chez Github serait dramatiquement plus difficile Ă  gĂ©rer pour de trĂšs nombreux projets, si on leur laisse la possibilitĂ© de le gĂ©rer. Certes le code reste disponible et pourra continuer de vivre ailleurs, mais la mĂ©moire du projet sera perdue, alors qu’un projet comme Debian approche aujourd’hui les 800000 rapports de bugs. Une vraie mine d’or d’informations sur les problĂšmes rencontrĂ©s, les demandes de fonctionnalitĂ©s et le suivi de ces demandes. Les dĂ©veloppeurs du projet CPython passant chez Github ont anticipĂ© ce problĂšme et ne vont pas utiliser le systĂšme de suivi de bugs de Github.

mastering-issuesIssues, le suivi de bug propriétaire de Github

Autre perte si Github disparaĂźt ou devient inaccessible : le travail de revue des « push requests » (abrĂ©gĂ©es par PRs) en cours. Pour les lecteurs qui ne connaĂźtraient pas cette fonctionnalitĂ© de Github, il s’agit d’adresser de cloner le dĂ©pĂŽt Github d’un projet, de modifier ce clone pour l’adapter Ă  vos besoins, puis ensuite de proposer vos modifications au dĂ©pĂŽt d’origine. Le propriĂ©taire du dĂ©pĂŽt d’origine va alors Ă©tudier les modifications qui lui ont Ă©tĂ© proposĂ©es et si elles lui conviennent les fusionner Ă  son propre dĂ©pĂŽt. Il s’agit donc d’une fonctionnalitĂ© trĂšs importante offerte de Github, qui propose de rĂ©aliser les diffĂ©rentes opĂ©rations graphiquement via son interface.

Toutefois le travail de revue des modifications proposĂ©es peut ĂȘtre long et il est courant d’avoir, pour un projet qui marche bien, plusieurs PRs en cours. Et il est Ă©galement courant d’échanger des commentaires via ces PRs et/ou via le systĂšme de suivi de bugs propriĂ©taires de Github dont nous avons parlĂ© plus haut.

Le code en lui-mĂȘme n’est donc pas perdu si Github devient inaccessible (quoique, voire plus bas un cas spĂ©cifique), mais le travail de revue matĂ©rialisĂ©e par les Ă©ventuels demandes et commentaires prĂ©sents dans les PRs et les suivis de bugs associĂ©s l’est bien, lui. Rappelons Ă©galement que Github permet de cloner des projets via son interface web propriĂ©taire, puis d’y apporter toujours via la mĂȘme interface des modifications et ensuite de gĂ©nĂ©rer des PRs sans tĂ©lĂ©charger aucunement le code sur son poste. Dans ce cas de figure, si Github devient indisponible, la perte du code et du travail en cours est totale.

Enfin certains utilisateurs se servent de Github entre autre comme d’une application de favoris, afin de suivre l’activitĂ© de leurs projets prĂ©fĂ©rĂ©s en s’abonnant Ă  ces projets par la fonctionnalitĂ© « Watch ».  Ce travail de rĂ©union de donnĂ©es pour la veille technologique est perdu  en cas d’indisponibilitĂ© du service Github.

Proposed Debian LogoDebian, l’un des principaux projets du Logiciel Libre avec autour de 1000 contributeurs officiels

 

2.4 L’uniformisation

La communautĂ© du Logiciel Libre oscille sans cesse entre un besoin de normes afin de rĂ©duire le travail nĂ©cessaire pour l’interopĂ©rabilitĂ© et l’attrait de la nouveautĂ©, caractĂ©risĂ©e par l’intrinsĂšque besoin de diffĂ©rence vis-Ă -vis de l’existant.

Github a popularisĂ© l’utilisation de Git, magnifique outil qui aujourd’hui touche des mĂ©tiers bien diffĂ©rents des programmeurs auxquels il Ă©tait initialement liĂ©. Peu Ă  peu, tel un rouleau compresseur, Git a pris une place si centrale que considĂ©rer l’usage d’un autre gestionnaire de sources est quasiment impossible aujourd’hui, particuliĂšrement en entreprise, malgrĂ© l’existence de belles alternatives qui n’ont malheureusement pas le vent en poupe, comme Mercurial.

git-logo

Un projet de Logiciel Libre qui naĂźt aujourd’hui, c’est un dĂ©pĂŽt Git sur Github avec un README.md pour sommairement le dĂ©crire. Les autres voies sont totalement ostracisĂ©es. Et quelle est la punition pour celui qui dĂ©sobĂ©it ? Peu ou pas de contributeurs potentiels. Il semble trĂšs difficile de pousser aujourd’hui le contributeur potentiel Ă  se lancer dans l’apprentissage d’un nouveau gestionnaire de sources ET une nouvelle forge pour chaque projet auquel on veut contribuer. Un effort que fournissait pourtant tout un chacun il y a quelques annĂ©es.

Et c’est bien dommage car Github, en proposant une expĂ©rience unique et originale Ă  ses utilisateurs, taille  Ă  grands coups de machette dans les champs des possibles. Alors oui, sĂ»rement que Git est aujourd’hui le meilleur des systĂšme de gestion de versions. Mais ça n’est pas grĂące Ă  cette domination sans partage qu’un autre pourra Ă©merger. Et cela permet Ă  Github d’initier Ă  Git les nouveaux arrivants dans le dĂ©veloppement  Ă  un ensemble de fonctionnalitĂ©s trĂšs restreint, sans commune mesure avec la puissance de l’outil Git lui-mĂȘme.

3. Centralisation, uniformisation, logiciels privateurs et bientÎt
 fainéantise ?

Le combat contre la centralisation est une part importante de l’idĂ©ologie du Logiciel Libre car elle accroĂźt le pouvoir de ceux qui sont chargĂ©s de cette centralisation et qui la contrĂŽlent sur ceux qui la subissent. L’aversion Ă  l’uniformisation nĂ©e du combat contre les grandes firmes du logiciel souhaitant imposer leur vision fermĂ©e et commerciale du monde du logiciel a longtemps nourri la recherche rĂ©elle d’innovation et le dĂ©veloppement d’alternatives brillantes. Comme nous l’avons dĂ©crit, une partie de la communautĂ© du Libre s’est construit en opposition aux logiciels privateurs, les considĂ©rant comme dangereux. L’autre partie, sans vouloir leur disparition, a quand mĂȘme choisi un modĂšle de dĂ©veloppement Ă  l’opposĂ© de celui des logiciels privateurs, en tout cas Ă  l’époque car les deux mondes sont devenus de plus en plus poreux au cours des derniĂšres annĂ©es.

 

L’effet Github est donc dĂ©lĂ©tĂšre au point de vue des effets qu’il entraĂźne : la centralisation,  l’uniformisation, l’utilisation de logiciels privateurs comme leur systĂšme de gestion de version, au minimum. Mais la rĂ©cente affaire de la lettre « Cher Github  » met en avant un dernier effet, totalement inattendu de mon point de vue : la fainĂ©antise. Pour les personnes passĂ©es Ă  cĂŽtĂ© de cette affaire, il s’agit d’une lettre de rĂ©clamations d’un nombre trĂšs important de reprĂ©sentants de diffĂ©rents projets du Logiciel Libre qui rĂ©clament Ă  l’équipe de Github d’entendre leurs dolĂ©ances, apparemment ignorĂ©es depuis des annĂ©es, et d’implĂ©menter de nouvelles fonctionnalitĂ©s demandĂ©es.

Mais depuis quand des projets du Logiciel Libre qui se heurtent depuis des annĂ©es Ă  un mur tentent-ils de faire pleurer le mur et n’implĂ©mentent pas la solution qui leur manquent ? Lorsque Torvald a subi l’affaire Bitkeeper et que l’équipe de dĂ©veloppement du noyau Linux n’a plus eu l’autorisation d’utiliser leur gestionnaire de versions, Linus a mis au point Git. Doit-on rappeler que l’impossibilitĂ© d’utiliser un outil ou le manque de fonctionnalitĂ©s d’un programme est le moteur principal de la recherche d’alternative et donc du Logiciel Libre ? Tous les membres de la communautĂ© du Logiciel Libre capable de programmer devrait avoir ce rĂ©flexe. Vous n’aimez pas ce qu’offre Github ? Optez pour Gitlab. Vous n’aimez pas Gitlab ? AmĂ©liorez-le ou recodez-le.

gitlabLogo de Gitlab, une alternative possible Ă  Github

Que l’on soit bien d’accord, je ne dis pas que tout programmeur du Libre qui fait face Ă  un mur doit coder une alternative. En restant rĂ©aliste, nous avons tous nos prioritĂ©s et certains de nous aiment dormir la nuit (moi le premier). Mais lorsqu’on voit 1340 signataires de cette lettre Ă  Github et parmi lesquels des reprĂ©sentants de trĂšs grands projets du Logiciel Libre, il me paraĂźt Ă©vident que les volontĂ©s et l’énergie pour coder une alternative existe. Peut-ĂȘtre d’ailleurs apparaĂźtra-t-elle suite Ă  cette lettre, ce serait le meilleur dĂ©nouement possible Ă  cette affaire.

Finalement, l’utilisation de Github suit cette tendance de massification de l’utilisation d’Internet. Comme aujourd’hui les utilisateurs d’Internet sont aspirĂ©s dans des rĂ©seaux sociaux massivement centralisĂ©s comme Facebook et Twitter, le monde des dĂ©veloppeurs suit logiquement cette tendance avec Github. MĂȘme si une frange importante des dĂ©veloppeurs a Ă©tĂ© sensibilisĂ©e aux dangers de ce type d’organisation privĂ©e et centralisĂ©e, la communautĂ© entiĂšre a Ă©tĂ© absorbĂ©e dans un mouvement de centralisation et d’uniformisation. Le service offert est utile, gratuit ou Ă  un coĂ»t correct selon les fonctionnalitĂ©s dĂ©sirĂ©es, confortable Ă  utiliser et fonctionne la plupart du temps. Pourquoi chercherions-nous plus loin ? Peut-ĂȘtre parce que d’autres en profitent et profitent de nous pendant que nous sommes distraits et installĂ©s dans notre confort ? La communautĂ© du Logiciel Libre semble pour le moment bien assoupie.

cat-sleeping-fireplaceLe « lion » devant la cheminée

Texte sous licence Creative Commons CC BY-ND 3.0 FR

31 March, 2016 09:00PM by Carl Chenet

August 01, 2012

hackergotchi for Gr&#233;gory Colpart

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 by Gregory Colpart

August 18, 2010

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 by Gregory Colpart

January 24, 2010

Autres exemples de migration Etch->Lenny [1]

La fin du support officiel de Debian Etch approchant, il est grand temps de migrer vers Lenny pour les machines pas encore à jour. AprÚs un premier exemple de migration Debian Etch->Lenny, je poursuis la série avec des informations tirées de plusieurs migrations récentes sur des serveurs en production.

Je ne rappellerais pas toutes les prĂ©cautions nĂ©cessaires (tests prĂ©alables, sauvegardes, dĂ©sactivations des services, etc.) ni la classique question  sur  “quand faut-il migrer ?”, vous trouverez tout cela dans mes exemples prĂ©cĂ©dents. Je rappelle simplement l’idĂ©e de base : prendre les prĂ©cieuses Release Notes, mettre Ă  jour le fichier sources.list, puis exĂ©cuter les commandes aptitude update && aptitude upgradex, puis mettre-Ă -jour les services les plus critiques via aptitude install <PACKAGE>, et enfin aptitude dist-upgrade && aptitude dist-upgrade (rĂ©pĂ©ter dist-upgrade est souvent nĂ©cessaire).

Passons désormais aux différentes remarques sur ces migrations :

– PostgreSQL : on passe de la version 8.1 Ă  8.3. Notez qu’il s’agit de paquets diffĂ©rents, il est donc possible de garder la version 8.1 en Etch, et d’installer en parallĂšle la version 8.3, afin de faciliter encore plus la migration. Pour migrer les donnĂ©es, on rĂ©alisera un dump avec pg_dumpall qui sera rĂ©injectĂ© dans la nouvelle base. On pourra ensuite adapter le port dans postgresql.conf pour passer la version 8.3 en production.

– phpPgAdmin : avec PostgreSQL 8.3, on ne peut plus se connecter Ă  la table template1 : c’est le comportement par dĂ©faut de phpPgAdmin, qu’on devra donc modifier en mettant postgres Ă  la place (pour la variable $conf[‘servers’][0][‘defaultdb’] dans le fichier config.inc.php)

– Apache : la configuration de l’alias /icons/ est dĂ©placĂ© dans le fichier mods-available/alias.conf, il peut donc faire doublon avec la dĂ©claration dans apache2.conf, ce qui sera signalĂ© via le warning suivant : [warn] The Alias directive in /etc/apache2/apache2.conf at line 240 will probably never match because it overlaps an earlier Alias. Commenter les directives dans le fichier apache2.conf rĂ©soudra ce petit soucis.

– OpenLDAP : on passe d’une version 2.3 Ă  2.4, mais le plus marquant pour la migration est que cela force le processus Ă  tourner avec un utilisateur/groupe dĂ©diĂ©. Pour diverses raisons (dist-upgrade interrompu par exemple), on pourra rencontrer des soucis plus ou moins alarmants. Ainsi, j’ai pu rencontrer cette erreur :
bdb(dc=example,dc=com): PANIC: fatal region error detected; run recovery
bdb_db_open: database “dc=example,dc=com” cannot be opened, err -30978. Restore from backup!
backend_startup_one: bi_db_open failed! (-30978)
slap_startup failed
On veillera donc sur l’utilisateur/groupe propriĂ©taire des fichiers dans le rĂ©pertoire /var/lib/ldap et, au besoin, on ajustera : chown -R openldap:openldap /var/lib/ldap/
Mon conseil : mettre-à-jour le paquet slapd de façon spécifique avant le dist-upgrade

– Postfix : on passe de 2.3 Ă  2.5. On notera simplement la valeur par dĂ©faut de $smtp_line_length_limit characters qui passe Ă  990, ce qui coupe les lignes trop longues pour se conformer au standard SMTP. Si cela posait problĂšme, on pourrait revenir Ă  l’ancien comportement en positionnant smtp_line_length_limit=0

– SpamAssassin : l’utilisant en stockant la configuration des utilisateurs dans un annuaire LDAP, le daemon spamd s’est mis à rñler : cannot use –ldap-config without -u
Le problĂšme sera rĂ©solu en ajoutant l’option -u nobody, ce qui fera tourner spamd en tant que nobody (ce qui n’est pas une mauvaise chose, au contraire).

– Amavis : apparemment, lors de la dĂ©tection d’un virus, le code retournĂ© n’est plus 2.7.1 mais 2.7.0 : 2.7.0 Ok, discarded, id=13735-07 – VIRUS: Eicar-Test-Signature
Rien de bien grave, mais cela a nĂ©cessitĂ© d’adapter un plugin Nagios pour qu’il attende le bon code de retour.

– Courier-imapd-ssl : aprùs une mise-à-jour gardant mon fichier /etc/courier/imapd-ssl actuel, j’obtenai des erreurs avec certains clients IMAP :
couriertls: accept: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
En regardant de plus prĂšs, certaines directives changent dans ce fichier de configuration, et il est donc conseillĂ© de repartir du fichier proposĂ© par Lenny, et d’y apporter ses modifications (souvent, cela se limite Ă  prĂ©ciser le certificat).

– Horde : si vous utilisez une base de donnĂ©es pour stocker les paramĂštres ou autres, la paquet php-db (dĂ©jĂ  en Recommends: en Etch) est d’autant plus nĂ©cessaire, sous peine d’obtenir l’erreur : PHP Fatal error:  _init() [<a href=’function.require’>function.require</a>]: Failed opening required ‘DB.php’ (include_path=’/usr/share/horde3/lib:.:/usr/share/php:/usr/share/pear’) in /usr/share/horde3/lib/Horde/DataTree/sql.php on line 1877

– Sympa : on attaque lĂ  le cauchemard de mes migrations. À chaque fois, tellement de soucis majeurs et mineurs, que j’ai l’impression d’ĂȘtre le seul Ă  utiliser ce paquet. Voici en vrac tous les soucis rencontrĂ©s : les accents dans les descriptions ont sautĂ©s (une sorte de double encodage) et cela a nĂ©cessitĂ© des corrections manuelles, la table logs_table doit ĂȘtre créée Ă  la main (j’utilise Sympa avec PostgreSQL), et enfin une typo surprenante un “GROUP BY” Ă  la place d’un “ORDER BY” (j’ai ouvert le bug #566252 Ă  ce sujet).

– Asterisk : on passe de la version 1.2 Ă  la version 1.4. Lors de la migration, j’ai constatĂ© un bug Ă©trange, le fichier modules.conf qui charge les modules additionnels a disparu. Du coup, sans lui, Asterisk ne charge pas les modules nĂ©cessaires (SIP, etc.). Il a donc fallu le restaurer.

– udev : le meilleur ami des sysadmins (ou pas). Si les migrations douloureuses Sarge->Etch sont loin derriĂšre nous, il reste nĂ©anmoins quelques blagues. La derniĂšre en date a Ă©tĂ© un renommage des interfaces rĂ©seau : eth0->eth1 et eth1->eth2. Classique mais Ă©tonnant, ce genre d’humour est sensĂ© ĂȘtre dĂ©passĂ© grĂące aux “persistent rules” qui nomment les interfaces en fonction de l’adresse MAC. À rester vigilant sur ce point avant le redĂ©marrage donc.

VoilĂ  pour les remarques. Vous noterez que je n’ai pas abordĂ© le noyau Linux. C’est parce que pour la majoritĂ© de nos serveurs, ils sont gĂ©rĂ©s de façons spĂ©cifiques (au lieu d’utiliser les noyaux officiels Debian). Ainsi, ils restent dans leur version actuelle (2.6.31 Ă  cette heure) pendant la migration. Bien sĂ»r, cela n’empĂȘche pas d’effectuer un redĂ©marrage de la machine suite Ă  la mise-Ă -jour : cela permet de s’assurer que tout est bien en place et le sera toujours aprĂšs un Ă©ventuel redĂ©marrage d’urgence.

Rendez-vous pour de prochaines migrations !

24 January, 2010 06:05PM by Gregory Colpart