02 October 2019

Carl Chenet

Édito d’octobre 2019

Petit ĂŠdito pour octobre 2019 sur les articles Ă  venir sur ce blog Ă  propos de mes projets et ma situation professionnelle.

Niveau professionnel

Je viens de finir une mission d’architecture système de 2 ans et j’en recherche donc une nouvelle. Si vous avez besoin d’un indĂŠpendant architecte système, n’hĂŠsitez pas Ă  me contacter.

Pour l’instant je prends quelques jours de vacances qui sont les bienvenus.

AWS et Terraform

Après cet Êdito, je pense continuer la sÊrie AWS/Terraform. Le premier article a ÊtonnÊ et intÊressÊ.

ÉtonnĂŠ car crĂŠer une infrastructure as code reprĂŠsente en effet une certaine complexitĂŠ. IntĂŠressĂŠ car l’article ĂŠtait complet et allait vraiment du dĂŠbut jusqu’Ă  accĂŠder en SSH Ă  une instance AWS Debian fraĂŽchement crĂŠĂŠe.

Le Courrier du hacker

Mon dernier article portait sur le dĂŠveloppement de ma newsletter consacrĂŠe Ă  l’actualitĂŠ francophone du Logiciel Libre et Open Source, le Courrier du hacker. La newsletter continue Ă  grossir, que ce soit par les abonnĂŠs directement ou par les rĂŠseaux sociaux (Mastodon, Twitter).

Si vous ĂŞtes une entreprise souhaitant augmenter votre visibilitĂŠ dans la communautĂŠ du Logiciel Libre et de l’Open Source francophone, le Courrier du hacker recherche des sponsors. N’hĂŠsitez pas Ă  me contacter si vous ĂŞtes intĂŠressĂŠ.

Le site d’emploi LinuxJobs.fr

Ça fait un moment que je n’ai pas parlĂŠ de LinuxJobs.fr, le site d’emploi que j’ai fondĂŠ. Un article au moins Ă  venir ce mois-ci pour parler des dernières ĂŠvolutions.

Ce blog et vous

N’hĂŠsitez pas Ă  rĂŠagir sur ce blog dans les commentaires, ou via les rĂŠseaux sociaux (ci-dessous), j’essaie de rĂŠpondre Ă  toutes les remarques constructives et je fais souvent ĂŠvoluer les articles en fonction des retours qui m’ont ĂŠtĂŠ faits đŸ˜‰

Me suivre sur les rĂŠseaux sociaux

N’hÊsitez pas à me suivre directement sur les diffÊrents sociaux pour suivre au jour le jour mes diffÊrentes projets dans le Logiciel Libre et/ou pour me contacter :

S’abonner au Courrier du hacker

Le Courrier du hacker

The post Édito d’octobre 2019 appeared first on Carl Chenet's Blog.

02 October, 2019 09:57AM par Carl Chenet

25 September 2019

Carl Chenet

Courrier du hacker : 2400 abonnés, 500 sur les réseaux sociaux

Un billet rapide pour célébrer plus de 2400 abonnés au Courrier du hacker, la newsletter résumant chaque semaine l’actualité francophone du Logiciel Libre et Open Source, ainsi que la barre symbolique des 500 abonnés aux réseaux sociaux (Mastodon, Twitter).

Le Courrier du hacker

Un lettre d’information pérenne

Nous avions largement communiqué sur le centième numéro du Courrier du hacker, mettant en avant la pérennité du projet.

Édito du centième numéro du Courrier du hacker

Augmentation du nombre d’abonnés du Courrier du hacker

Suite à une dépêche sur le site web LinuxFR, de très nombreux nouveaux abonnés nous ont rejoint, un grand merci à eux ! Sûrement rassurés par la pérennité du projet – qui ne fut pas sans douleur quand notre prestataire d’envoi d’e-mails Mailchimp a décidé de fermer notre compte – un nouveau public découvre la newsletter et c’est bien sûr un grand plaisir de les accueillir.

Développement des réseaux sociaux du Courrier du hacker

Côté réseaux sociaux, une excellente surprise avec plus de 500 abonnés en cumulé à nos comptes sur Mastodon et Twitter. C’est l’aboutissement d’une ouverture de notre façon de distribuer le contenu de la newsletter, afin que même les personnes n’étant pas intéressées par le format e-mail puissent accéder aux excellents articles de la communauté francophone.

L’avenir du Courrier du hacker

La formule actuelle semble plaire, nous allons continuer à développer et faire connaître la newsletter, dans la communauté du Logiciel Libre et Open Source mais aussi au-delà quand nous le pouvons. Toute aide sera la bienvenue, un simple tweet, poster les liens du Courrier du hacker sur Reddit, en parler autour de vous est déjà une super participation !

Si vous avez des avis ou des conseils pour nous améliorer, je suis ouvert à vos avis, dans les commentaires sur ce blog ou via les réseaux sociaux dont la liste est juste ci-dessous.

Me suivre sur les réseaux sociaux

N’hésitez pas à me suivre directement sur les différents sociaux pour suivre au jour le jour mes différentes projets dans le Logiciel Libre et/ou pour me contacter :

The post Courrier du hacker : 2400 abonnés, 500 sur les réseaux sociaux appeared first on Carl Chenet's Blog.

25 September, 2019 10:00PM par Carl Chenet

16 September 2019

Debian France

Debian Buster Party à Lille - 2019

Lille - Fêtons l'arrivée de Debian Buster !

Une fête consacrée à Debian Buster et plus largement à Debian se déroulera à Lille, le samedi 5 octobre 2019 de 10h00 à 18h00.

Programme

  • 10h : début de l'atelier
  • 12h : auberge espagnole, options véganes
  • l'après-midi : la foire aux installations continue !
  • 16h : discussions au sujet de Debian et des logiciesl libres
  • 17h : goûter et gateaux pour fêter Buster !

Lieu

Liens

16 September, 2019 07:33PM

Capitole du libre 2019

Debian France tiendra un stand à l'occasion du Capitole du libre, les 16 et 17 novembre 2019 à l'INP-ENSEEIHT de Toulouse.

Des développeurs Debian ainsi que des membres de l'association Debian France seront là pour répondre à vos questions. Des goodies Debian seront également disponibles !

Nous serons présents au village associatif parmi les nombreux autres stands.

16 September, 2019 09:57AM

02 August 2019

Vincent Bernat

SĂŠcuriser BGP sur le serveur avec la validation de l'origine

Une conception moderne pour un réseau de datacentre est le BGP sur le serveur : chaque serveur embarque un démon BGP pour annoncer les IP qu’il gère et reçoit les routes pour contacter ses collègues. Comparé à une conception L2, il est très évolutif, résilient, multi-constructeur et sûr à utiliser1. Jetez un coup d’œil sur l’article « Routage L3 jusqu’à l’hyperviseur avec BGP » pour un exemple de mise en œuvre.

Réseau de type Clos avec deux routeurs de collecte, six routeurs de distribution et neuf serveurs physiques. Tous les liens ont une session BGP établie entre leurs extrémités. Certains serveurs ont une bulle indiquant le préfixe IP qu'ils désirent s'approprier.
BGP sur le serveur dans un réseau de type Clos. Une session BGP est établie sur chaque lien et chaque serveur annonce ses propres préfixes IP.

Bien que le routage sur le serveur élimine les problèmes de sécurité liés aux réseaux Ethernet, un hôte peut annoncer n’importe quel préfixe IP. Dans l’image ci-dessus, deux d’entre eux annoncent 2001:db8:cc::/64. Il peut s’agir d’une utilisation légitime (pour un service distribué) ou d’un détournement de préfixe. BGP propose plusieurs solutions pour améliorer cet aspect et l’une d’entre elles est d’exploiter les fonctionnalités autour de la RPKI.

Courte introduction à la RPKI

Sur Internet, BGP repose essentiellement sur la confiance. Cela contribue à divers incidents dus à des erreurs humaines, comme celui qui a affecté Cloudflare il y a quelques mois, ou à des attaques malveillantes, comme lors du détournement du DNS d’Amazon pour voler des portefeuilles de cryptomonnaies. La RFC 7454 explique les bonnes pratiques pour éviter de tels problèmes.

Les adresses IP sont attribuées par cinq registres régionaux (RIR). Chacun d’eux tient à jour une base de données des ressources Internet, notamment les adresses IP et les numéros d’AS associés. Ces bases de données ne sont pas totalement fiables, mais elles sont largement utilisées pour construire des listes de contrôle d’accès afin de vérifier les annonces d’un partenaire. Voici un exemple généré à l’aide de bgpq3 pour une liaison avec Apple2 :

$ bgpq3 -l v6-IMPORT-APPLE -6 -R 48 -m 48 -A -J -E AS-APPLE
policy-options {
 policy-statement v6-IMPORT-APPLE {
replace:
  from {
    route-filter 2403:300::/32 upto /48;
    route-filter 2620:0:1b00::/47 prefix-length-range /48-/48;
    route-filter 2620:0:1b02::/48 exact;
    route-filter 2620:0:1b04::/47 prefix-length-range /48-/48;
    route-filter 2620:149::/32 upto /48;
    route-filter 2a01:b740::/32 upto /48;
    route-filter 2a01:b747::/32 upto /48;
  }
 }
}

La RPKI (RFC 6480) ajoute une couche de cryptographie à clé publique pour signer l’autorisation d’un AS à annoncer un préfixe IP. Cet enregistrement est une « autorisation d’origine de route » (ROA). Vous pouvez parcourir les bases de données de ces « ROA » par l’intermédiaire de l’instance « RPKI Validator » du RIPE :

Capture d'écran d'une instance de RPKI Validator montrant la validité de 85.190.88.0/21 pour l'AS 64476
RPKI validator montre une « ROA » pour 85.190.88.0/21

Les démons BGP n’ont pas besoin de télécharger ces bases de données ou de vérifier les signatures pour valider des préfixes reçus: ils délèguent ces tâches à un validateur RPKI local implémentant le protocole « RPKI-to-Router Protocol » (RTR, RFC 6810).

Pour plus de détails sur la RPKI, jetez un œil sur l’article « RPKI and BGP: our path to securing Internet Routing » ou encore sur les articles de Stéphane Bortzmeyer sur les RFC 6480, 6481 et 6810.

Utiliser la validation de l’origine dans un réseau interne

Bien qu’il soit possible de configurer notre propre RPKI pour une utilisation en réseau interne, nous pouvons prendre un raccourci et utiliser un validateur, comme GoRTR, qui implémente RTR en acceptant une autre source de vérité. À titre d’exemple, utilisons la topologie suivante :

Réseau de type Clos avec deux routeurs de collecte, six routeurs de distribution et neuf serveurs physiques. Tous les liens ont une session BGP établie entre leurs extrémités. Trois des serveurs physiques sont en fait des validateurs et des sessions RTR sont établies entre ceux-ci les routeurs d'accès.
BGP sur le serveur avec validation des préfixes via RTR. Chaque serveur a son propre numéro d'AS. Les routeurs d'accès établissent des sessions RTR avec les validateurs.

Un applicatif maintient une correspondance entre les numéros d’AS privés et les préfixes autorisés3 :

Numéro d’AS Préfixes autorisés
AS 65005 2001:db8:aa::/64
AS 65006 2001:db8:bb::/64,
2001:db8:11::/64
AS 65007 2001:db8:cc::/64
AS 65008 2001:db8:dd::/64
AS 65009 2001:db8:ee::/64,
2001:db8:11::/64
AS 65010 2001:db8:ff::/64

A partir de cette table, nous construisons un fichier JSON pour GoRTR, en supposant que chaque serveur peut annoncer des préfixes plus longs (comme 2001:db8:aa::­42:d9ff:­fefc:287a/128 pour l’AS 65005) :

{
  "roas": [
    {
      "prefix": "2001:db8:aa::/64",
      "maxLength": 128,
      "asn": "AS65005"
    }, {
      "…": "…"
    }, {
      "prefix": "2001:db8:ff::/64",
      "maxLength": 128,
      "asn": "AS65010"
    }, {
      "prefix": "2001:db8:11::/64",
      "maxLength": 128,
      "asn": "AS65006"
    }, {
      "prefix": "2001:db8:11::/64",
      "maxLength": 128,
      "asn": "AS65009"
    }
  ]
}

Le fichier est déployé sur tous les validateurs et servi par un serveur web. GoRTR est configuré pour le récupérer et le mettre à jour toutes les 10 minutes :

$ gortr -refresh=600 \
        -verify=false -checktime=false \
        -cache=http://127.0.0.1/rpki.json
INFO[0000] New update (7 uniques, 8 total prefixes). 0 bytes. Updating sha256 hash  -> 68a1d3b52db8d654bd8263788319f08e3f5384ae54064a7034e9dbaee236ce96
INFO[0000] Updated added, new serial 1

L’intervalle entre deux mises à jour pourrait être réduit mais GoRTR peut aussi être notifié d’un changement en utilisant le signal SIGHUP. Les clients sont immédiatement avisés du changement.

L’étape suivante consiste à configurer les routeurs d’accès pour valider les préfixes reçus en utilisant les validateurs. La plupart des constructeurs sont compatibles avec RTR :

Platform Sur TCP? Sur SSH?
Juniper JunOS ✔️
Cisco IOS XR ✔️ ✔️
Cisco IOS XE ✔️
Cisco IOS ✔️
Arista EOS
BIRD ✔️ ✔️
FRR ✔️ ✔️
GoBGP ✔️

Configuration pour JunOS

JunOS n’est compatible qu’avec les connextions TCP en clair. La première étape consiste à configurer les serveurs de validation :

routing-options {
    validation {
        group RPKI {
            session validator1 {
                hold-time 60;         # la session est morte après 1 minute
                record-lifetime 3600; # le cache est gardé pendant 1 heure
                refresh-time 30;      # le cache est mis à jour toutes les 30 secondes
                port 8282;
            }
            session validator2 { /* OMITTED */ }
            session validator3 { /* OMITTED */ }
        }
    }
}

Par défaut, au maximum deux sessions sont établies au hasard en même temps. C’est un bon moyen de les équilibrer entre les validateurs tout en conservant une bonne disponibilité. La deuxième étape consiste à définir la politique de validation des routes :

policy-options {
    policy-statement ACCEPT-VALID {
        term valid {
            from {
                protocol bgp;
                validation-database valid;
            }
            then {
                validation-state valid;
                accept;
            }
        }
        term invalid {
            from {
                protocol bgp;
                validation-database invalid;
            }
            then {
                validation-state invalid;
                reject;
            }
        }
    }
    policy-statement REJECT-ALL {
        then reject;
    }
}

La politique ACCEPT-VALID transforme l’état de validation d’un préfixe de unknown à valid si la base de données ROA indique qu’il est valide. Il accepte également la route. Si le préfixe n’est pas valide, il est marqué comme tel et rejeté. Nous avons également préparé une politique REJECT-ALL pour refuser tout le reste, notamment les préfixes inconnus.

Un ROA ne certifie que l’origine d’un préfixe. Un acteur malveillant peut donc ajouter le numéro d’AS attendu en fin du chemin d’AS pour contourner la validation. Par exemple, l’AS 65007 pourrait annoncer 2001:db8:dd::/64, un préfixe attribué à l’AS 65006, en indiquant le chemin 65007 65006. Pour éviter cela, nous définissons une politique supplémentaire pour rejeter les chemins d’AS ayant plus d’un AS :

policy-options {
    as-path EXACTLY-ONE-ASN "^.$";
    policy-statement ONLY-DIRECTLY-CONNECTED {
        term exactly-one-asn {
            from {
                protocol bgp;
                as-path EXACTLY-ONE-ASN;
            }
            then next policy;
        }
        then reject;
    }
}

La dernière étape est de configurer les sessions BGP :

protocols {
    bgp {
        group HOSTS {
            local-as 65100;
            type external;
            # export [ … ];
            import [ ONLY-DIRECTLY-CONNECTED ACCEPT-VALID REJECT-ALL ];
            enforce-first-as;
            neighbor 2001:db8:42::a10 {
                peer-as 65005;
            }
            neighbor 2001:db8:42::a12 {
                peer-as 65006;
            }
            neighbor 2001:db8:42::a14 {
                peer-as 65007;
            }
        }
    }
}

La politique pour l’import rejette tout chemin d’AS plus long qu’un AS, accepte les préfixes validés et rejette tout le reste. La directive enforce-first-as est très importante : elle garantit que le premier (et, ici, le seul) AS dans le chemin correspond à l’AS du serveur. Sans cela, un hôte malveillant pourrait injecter un préfixe en utilisant un AS différent du sien, ce qui irait à l’encontre de notre objectif4.

Vérifions l’état des sessions RTR et la base de données :

> show validation session
Session                                  State   Flaps     Uptime #IPv4/IPv6 records
2001:db8:4242::10                        Up          0   00:16:09 0/9
2001:db8:4242::11                        Up          0   00:16:07 0/9
2001:db8:4242::12                        Connect     0            0/0

> show validation database
RV database for instance master

Prefix                 Origin-AS Session                                 State   Mismatch
2001:db8:11::/64-128       65006 2001:db8:4242::10                       valid
2001:db8:11::/64-128       65006 2001:db8:4242::11                       valid
2001:db8:11::/64-128       65009 2001:db8:4242::10                       valid
2001:db8:11::/64-128       65009 2001:db8:4242::11                       valid
2001:db8:aa::/64-128       65005 2001:db8:4242::10                       valid
2001:db8:aa::/64-128       65005 2001:db8:4242::11                       valid
2001:db8:bb::/64-128       65006 2001:db8:4242::10                       valid
2001:db8:bb::/64-128       65006 2001:db8:4242::11                       valid
2001:db8:cc::/64-128       65007 2001:db8:4242::10                       valid
2001:db8:cc::/64-128       65007 2001:db8:4242::11                       valid
2001:db8:dd::/64-128       65008 2001:db8:4242::10                       valid
2001:db8:dd::/64-128       65008 2001:db8:4242::11                       valid
2001:db8:ee::/64-128       65009 2001:db8:4242::10                       valid
2001:db8:ee::/64-128       65009 2001:db8:4242::11                       valid
2001:db8:ff::/64-128       65010 2001:db8:4242::10                       valid
2001:db8:ff::/64-128       65010 2001:db8:4242::11                       valid

  IPv4 records: 0
  IPv6 records: 18

Voici un exemple de route acceptée :

> show route protocol bgp table inet6 extensive all
inet6.0: 11 destinations, 11 routes (8 active, 0 holddown, 3 hidden)
2001:db8:bb::42/128 (1 entry, 0 announced)
        *BGP    Preference: 170/-101
                Next hop type: Router, Next hop index: 0
                Address: 0xd050470
                Next-hop reference count: 4
                Source: 2001:db8:42::a12
                Next hop: 2001:db8:42::a12 via em1.0, selected
                Session Id: 0x0
                State: <Active NotInstall Ext>
                Local AS: 65006 Peer AS: 65000
                Age: 12:11
                Validation State: valid
                Task: BGP_65000.2001:db8:42::a12+179
                AS path: 65006 I
                Accepted
                Localpref: 100
                Router ID: 1.1.1.1

Une route refusée serait similaire avec comme état de validation invalid.

Configuration de BIRD

BIRD est compatible à la fois avec les connexions TCP en clair et SSH. Configurons le pour utiliser SSH. Nous devons générer des paires de clefs pour le routeur ainsi que pour les validateurs (ils peuvent se partager la même paire de clefs). Nous devons aussi créer un fichier known_hosts pour BIRD :

(validatorX)$ ssh-keygen -qN "" -t rsa -f /etc/gortr/ssh_key
(validatorX)$ echo -n "validatorX:8283 " ; \
              cat /etc/bird/ssh_key_rtr.pub
validatorX:8283 ssh-rsa AAAAB3[…]Rk5TW0=
(leaf1)$ ssh-keygen -qN "" -t rsa -f /etc/bird/ssh_key
(leaf1)$ echo 'validator1:8283 ssh-rsa AAAAB3[…]Rk5TW0=' >> /etc/bird/known_hosts
(leaf1)$ echo 'validator2:8283 ssh-rsa AAAAB3[…]Rk5TW0=' >> /etc/bird/known_hosts
(leaf1)$ cat /etc/bird/ssh_key.pub
ssh-rsa AAAAB3[…]byQ7s=
(validatorX)$ echo 'ssh-rsa AAAAB3[…]byQ7s=' >> /etc/gortr/authorized_keys

GoRTR a besoin d’arguments supplémentaires pour autoriser les connexions via SSH :

$ gortr -refresh=600 -verify=false -checktime=false \
      -cache=http://127.0.0.1/rpki.json \
      -ssh.bind=:8283 \
      -ssh.key=/etc/gortr/ssh_key \
      -ssh.method.key=true \
      -ssh.auth.user=rpki \
      -ssh.auth.key.file=/etc/gortr/authorized_keys
INFO[0000] Enabling ssh with the following authentications: password=false, key=true
INFO[0000] New update (7 uniques, 8 total prefixes). 0 bytes. Updating sha256 hash  -> 68a1d3b52db8d654bd8263788319f08e3f5384ae54064a7034e9dbaee236ce96
INFO[0000] Updated added, new serial 1

Ensuite, configurons BIRD pour utiliser ces serveurs de validation :

roa6 table ROA6;
template rpki VALIDATOR {
   roa6 { table ROA6; };
   transport ssh {
     user "rpki";
     remote public key "/etc/bird/known_hosts";
     bird private key "/etc/bird/ssh_key";
   };
   refresh keep 30;
   retry keep 30;
   expire keep 3600;
}
protocol rpki VALIDATOR1 from VALIDATOR {
   remote validator1 port 8283;
}
protocol rpki VALIDATOR2 from VALIDATOR {
   remote validator2 port 8283;
}

Contrairement à JunOS, BIRD ne dispose pas d’une fonction permettant d’utiliser uniquement un sous-ensemble de validateurs. Par conséquent, nous ne configurons que deux validateurs. Par mesure de sécurité, en cas d’indisponibilité de la connexion, BIRD conservera les ROA pendant une heure.

Nous pouvons vérifier l’état des sessions RTR et le contenu de la base de données :

> show protocols all VALIDATOR1
Name       Proto      Table      State  Since         Info
VALIDATOR1 RPKI       ---        up     17:28:56.321  Established
  Cache server:     rpki@validator1:8283
  Status:           Established
  Transport:        SSHv2
  Protocol version: 1
  Session ID:       0
  Serial number:    1
  Last update:      before 25.212 s
  Refresh timer   : 4.787/30
  Retry timer     : ---
  Expire timer    : 3574.787/3600
  No roa4 channel
  Channel roa6
    State:          UP
    Table:          ROA6
    Preference:     100
    Input filter:   ACCEPT
    Output filter:  REJECT
    Routes:         9 imported, 0 exported, 9 preferred
    Route change stats:     received   rejected   filtered    ignored   accepted
      Import updates:              9          0          0          0          9
      Import withdraws:            0          0        ---          0          0
      Export updates:              0          0          0        ---          0
      Export withdraws:            0        ---        ---        ---          0

> show route table ROA6
Table ROA6:
    2001:db8:11::/64-128 AS65006  [VALIDATOR1 17:28:56.333] * (100)
                                  [VALIDATOR2 17:28:56.414] (100)
    2001:db8:11::/64-128 AS65009  [VALIDATOR1 17:28:56.333] * (100)
                                  [VALIDATOR2 17:28:56.414] (100)
    2001:db8:aa::/64-128 AS65005  [VALIDATOR1 17:28:56.333] * (100)
                                  [VALIDATOR2 17:28:56.414] (100)
    2001:db8:bb::/64-128 AS65006  [VALIDATOR1 17:28:56.333] * (100)
                                  [VALIDATOR2 17:28:56.414] (100)
    2001:db8:cc::/64-128 AS65007  [VALIDATOR1 17:28:56.333] * (100)
                                  [VALIDATOR2 17:28:56.414] (100)
    2001:db8:dd::/64-128 AS65008  [VALIDATOR1 17:28:56.333] * (100)
                                  [VALIDATOR2 17:28:56.414] (100)
    2001:db8:ee::/64-128 AS65009  [VALIDATOR1 17:28:56.333] * (100)
                                  [VALIDATOR2 17:28:56.414] (100)
    2001:db8:ff::/64-128 AS65010  [VALIDATOR1 17:28:56.333] * (100)
                                  [VALIDATOR2 17:28:56.414] (100)

Comme dans le cas de JunOS, un acteur malveillant pourrait essayer de contourner la validation en construisant un chemin où le dernier AS est l’AS légitime. BIRD est suffisamment flexible pour nous permettre d’utiliser n’importe quel AS pour vérifier le préfixe IP. Au lieu de vérifier l’AS d’origine, nous lui demandons de vérifier l’AS du serveur avec cette fonction, sans regarder le chemin :

function validated(int peeras) {
   if (roa_check(ROA6, net, peeras) != ROA_VALID) then {
      print "Ignore invalid ROA ", net, " for ASN ", peeras;
      reject;
   }
   accept;
}

L’instance BGP est alors configurée en utilisant cette fonction comme politique d’import :

protocol bgp PEER1 {
   local as 65100;
   neighbor 2001:db8:42::a10 as 65005;
   ipv6 {
      import keep filtered;
      import where validated(65005);
      # export …;
   };
}

Il est possible de voir les routes rejetées avec show route filtered. Toutefois BIRD ne stocke dans les routes aucune information à propos de la validation. Il est aussi possible de consulter les journaux :

2019-07-31 17:29:08.491 <INFO> Ignore invalid ROA 2001:db8:bb::40:/126 for ASN 65005

Actuellement, BIRD ne réévalue pas les préfixes lorsque les ROA sont mises à jour. Des travaux sont en cours pour y remédier. Si cette fonctionnalité est importante pour vous, jetez un œil sur FRR : il supporte également le protocole RTR et déclenche une reconfiguration des sessions BGP lorsque les ROA sont mis à jour.


  1. Notamment, le flux de données et le plan de contrôle sont séparés. Un nœud peut se retirer du réseau en avertissant ses pairs sans provoquer la perte d’un seul paquet. ↩︎

  2. Les gens utilisent souvent les ensembles d’AS, comme AS-APPLE dans cet exemple, car ils sont pratiques si vous avez plusieurs numéros d’AS ou des clients. Cependant, rien n’empêche actuellement un acteur malhonnête d’ajouter des numéros d’AS arbitraires à son ensemble d’AS↩︎

  3. Nous utilisons des numéros d’AS sur 16 bits pour la lisibilité. Comme nous avons besoin d’attribuer un numéro AS différent pour chaque serveur, dans un déploiement réel, nous utiliserions des numéros d’AS sur 32 bits. ↩︎

  4. Les routeurs Cisco et FRR vérifient le premier AS par défaut. C’est une valeur paramétrable pour permettre l’utilisation de serveurs de routes : ils distribuent des préfixes pour le compte d’autres routeurs. ↩︎

02 August, 2019 09:16AM par Vincent Bernat

21 July 2019

Vincent Bernat

Makefile pour un projet Go (2019)

Très tôt, j’ai pris en grippe le principe du GOPATH mis en avant par Go : je ne veux en aucun cas mélanger mon propre code avec celui des dépendances. Je ne suis pas seul dans cette aversion et moults outils ou des Makefile ont été créés pour éviter d’organiser son code autour du GOPATH.

Heureusement, depuis Go 1.11, il est possible d’utiliser les modules pour gérer les dépendances sans obligation d’utiliser le GOPATH. Tout d’abord, votre projet doit être converti en un module1 :

$ go mod init hellogopher
go: creating new go.mod: module hellogopher
$ cat go.mod
module hellogopher

Ensuite, vous pouvez invoquer les commandes habituelles, telles que go build ou go test. La commande go va résoudre les imports en utilisant les versions spécifiées le fichier go.mod. Lorsqu’il rencontre un import pour un paquet non présent dans go.mod, il télécharge automatiquement la dernière version du module correspondant et l’ajoute dans le fichier.

$ go test ./...
go: finding github.com/spf13/cobra v0.0.5
go: downloading github.com/spf13/cobra v0.0.5
?       hellogopher     [no test files]
?       hellogopher/cmd [no test files]
ok      hellogopher/hello       0.001s
$ cat go.mod
module hellogopher

require github.com/spf13/cobra v0.0.5

Si vous voulez une version spécifique, vous pouvez soit éditer go.mod ou invoquer go get :

$ go get github.com/spf13/cobra@v0.0.4
go: finding github.com/spf13/cobra v0.0.4
go: downloading github.com/spf13/cobra v0.0.4
$ cat go.mod
module hellogopher

require github.com/spf13/cobra v0.0.4

Ajoutez go.mod à votre système de gestion des versions. Vous pouvez également ajouter go.sum, ce qui procure une sécurité contre une dépendance qui mute sa version. Si vous voulez inclure les dépendances (vendoring), vous pouvez lancer go mod vendor et ajouter le répertoire vendor/ à votre système de gestion des versions.

Grâce aux modules, je pense que la gestion des dépendances en Go est maintenant au niveau des autres langages, notamment Ruby. Bien qu’il soit possible d’effectuer la plupart des opérations (construction et tests) en utilisant uniquement la commande go, un Makefile est toujours utile pour organiser les tâches les plus courantes, un peu comme le setup.py de Python ou le Rakefile de Ruby. Je vais décrire le mien.

Utilisation d’outils tierces

La plupart des projets vont nécessiter quelques outils pour la construction ou les tests. Pour éviter à l’utilisateur d’avoir à les installer, je propose de les compiler à la volée. Par exemple, voici comment l’analyse statique du code est effectuée avec Golint :

BIN = $(CURDIR)/bin
$(BIN):
    @mkdir -p $@
$(BIN)/%: | $(BIN)
    @tmp=$$(mktemp -d); \
       env GO111MODULE=off GOPATH=$$tmp GOBIN=$(BIN) go get $(PACKAGE) \
        || ret=$$?; \
       rm -rf $$tmp ; exit $$ret

$(BIN)/golint: PACKAGE=golang.org/x/lint/golint

GOLINT = $(BIN)/golint
lint: | $(GOLINT)
    $(GOLINT) -set_exit_status ./...

Le premier bloc définit comment l’outil tiers est fabriqué : go get est invoqué avec le nom du paquet correspondant à l’outil à installer. Nous ne voulons pas polluer notre gestion de dépendances pour cet outil et nous travaillons donc dans un GOPATH vide. Les binaires générés sont placés dans bin/.

Le second bloc étend la règle générique définie dans le premier bloc en fournissant le nom du paquet pour golint. Pour ajouter un autre outil à compiler, une ligne similaire fait l’affaire.

Le dernier bloc définit la recette pour analyser le code. L’outil utilisé par défaut est golint tel que construit par le premier bloc. Mais il est possible d’outrepasser ceci avec make GOLINT=/usr/bin/golint.

Tests

Voici les règles permettant d’exécuter les tests :

TIMEOUT  = 20
PKGS     = $(or $(PKG),$(shell env GO111MODULE=on $(GO) list ./...))
TESTPKGS = $(shell env GO111MODULE=on $(GO) list -f \
            '{{ if or .TestGoFiles .XTestGoFiles }}{{ .ImportPath }}{{ end }}' \
            $(PKGS))

TEST_TARGETS := test-default test-bench test-short test-verbose test-race
test-bench:   ARGS=-run=__absolutelynothing__ -bench=.
test-short:   ARGS=-short
test-verbose: ARGS=-v
test-race:    ARGS=-race
$(TEST_TARGETS): test
check test tests: fmt lint
    go test -timeout $(TIMEOUT)s $(ARGS) $(TESTPKGS)

L’utilisateur peut invoquer les tests de différente façon :

  • make test lance tous les tests ;
  • make test TIMEOUT=10 implique une durée limite de 10 secondes par test ;
  • make test PKG=hellogopher/cmd exécute les tests pour le paquet cmd ;
  • make test ARGS="-v -short" utilise les arguments fournis ;
  • make test-race exécute les tests en activant la détection des problèmes d’accès concurrents.

go test permet également de déterminer la couverture des tests. Malheureusement, l’outil est très rudimentaire et ne permet de gérer qu’un seul paquet à la fois. Il faut également explicitement lister tous les paquets à instrumenter. Dans le cas contraire, seul le paquet testé l’est. De plus, les temps de compilation sont prohibitifs si trop de paquets le sont. Enfin, afin d’obtenir un rapport compatible avec Jenkins, quelques outils additionnels sont nécessaires.

COVERAGE_MODE    = atomic
COVERAGE_PROFILE = $(COVERAGE_DIR)/profile.out
COVERAGE_XML     = $(COVERAGE_DIR)/coverage.xml
COVERAGE_HTML    = $(COVERAGE_DIR)/index.html
test-coverage-tools: | $(GOCOVMERGE) $(GOCOV) $(GOCOVXML) # ❶
test-coverage: COVERAGE_DIR := $(CURDIR)/test/coverage.$(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
test-coverage: fmt lint test-coverage-tools
    @mkdir -p $(COVERAGE_DIR)/coverage
    @for pkg in $(TESTPKGS); do \ # ❷
        go test \
            -coverpkg=$$(go list -f '{{ join .Deps "\n" }}' $$pkg | \
                    grep '^$(MODULE)/' | \
                    tr '\n' ',')$$pkg \
            -covermode=$(COVERAGE_MODE) \
            -coverprofile="$(COVERAGE_DIR)/coverage/`echo $$pkg | tr "/" "-"`.cover" $$pkg ;\
     done
    @$(GOCOVMERGE) $(COVERAGE_DIR)/coverage/*.cover > $(COVERAGE_PROFILE)
    @go tool cover -html=$(COVERAGE_PROFILE) -o $(COVERAGE_HTML)
    @$(GOCOV) convert $(COVERAGE_PROFILE) | $(GOCOVXML) > $(COVERAGE_XML)

En ❶, un certain nombre d’outils sont requis, de la même façon que golint vu précédemment :

  • gocovmerge permet de combiner plusieurs profils en un seul,
  • gocov-xml convertit le rapport au format Cobertura pour Jenkins,
  • gocov convertit le rapport en un format utilisable par gocov-xml.

En ❷, pour chaque paquet à tester, nous exécutons go test avec l’argument -coverprofile. La liste des paquets à instrumenter est donnée à l’argument -coverpkg en utilisant go list pour extraire les dépendances du paquet en cours de test et en ne conservant que nos propres paquets.

Mise à jour (09.2019)

Comme mentionné dans un commentaire, depuis Go 1.10, il est possible de tester plusieurs paquets tout en collectant les informations de couverture. La recette test-coverage peut donc être simplifiée et gocovmerge n’est plus utile.

Construction

Bien que l’on puisse simplement utiliser go build pour obtenir notre programme, il est assez courant d’avoir à fournir quelques arguments supplémentaires ou de devoir exécuter des étapes additionnelles. Dans l’exemple suivant, la version est extraite de l’étiquette Git la plus proche ou d’un fichier .version à la racine du projet. Elle remplace la variable Version dans le paquet hellogopher/cmd.

VERSION ?= $(shell git describe --tags --always --dirty --match=v* 2> /dev/null || \
            cat $(CURDIR)/.version 2> /dev/null || echo v0)
all: fmt lint | $(BIN)
    go build \
        -tags release \
        -ldflags '-X hellogopher/cmd.Version=$(VERSION)' \
        -o $(BIN)/hellogopher main.go

On en profite également pour effectuer le formatage et l’analyse statique du code.


Les extraits fournis ci-dessus sont un brin simplifiés. Jetez un œil sur le résultat final pour plus de détails !

Mise à jour (09.2019)

Il y a un fil intéressant à propos de cet article sur Reddit. Il contient des indices pour bloquer la version des outils tierces. Plusieurs personnes ont également mis en avant Mage, un logiciel de construction utilisant Go. Il nécessite cependant une étape de construction non triviale.


  1. Pour une application qui n’est pas destinée à servir de dépendance, je préfère utiliser un nom court plutôt qu’un nom dérivé d’une URL, comme github.com/vincentbernat/hellogopher. Cela rend plus aisé à lire les blocs d’import :

    import (
            "fmt"
            "os"
    
            "hellogopher/cmd"
    
            "github.com/pkg/errors"
            "github.com/spf13/cobra"
    )
    

    ↩︎

21 July, 2019 07:20PM par Vincent Bernat

19 July 2019

Tuxicoman

Debian 10 est arrivée

Comme environ une fois tous les 2 ans, ma distribution préférée sort une grosse mise à jour pour sa version « stable ». Le 6 juillet 2019 est sortie Debian 10 (alias « buster ») qui succède à Debian 9 (alias « stretch »)

Comme d’habitude, il s’agit d’une cure de jouvence pour les programmes.
Pour les applis de bureau on retrouve Gnome 3.30.2, Firefox 60.8esr, Blender 2.79b, Libreoffice 6.1.5.2, Gimp 2.10.8, Mesa 18.3.6
Au niveau système, on a Python 3.7.3 (python 2.7.16 est là aussi), Nginx 1.14, Prosody 0.11, PHP 7.3, GCC 8.3.

On reste dans la philosophie de délivrer des programmes testés avec le moins de bugs possibles. Donc ce ne sont pas les toutes dernières versions qui sont livrées et on est sûr que ça marchera jusqu’à la prochaine grosse mise à jour dans 2 ans. C’est pour ça qu’on aime la version « stable » :-)

La mise à jour s’est faite sans accroc. J’utilise cette version sur mon bureau, des portables et des serveurs.

Il y a juste ce bug #928146 de blocage de GPU quand je joue aux jeux vidéos qui m’embête avec les noyaux récents.

Related Posts:

19 July, 2019 05:30PM par Tuxicoman

05 June 2019

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 par Gregory Colpart

12 May 2019

Tuxicoman

Écran de démarrage graphique avec Plymouth sur Debian

Par défaut, le démarrage de Debian est peu rassurant avec ses lignes de texte blanc sur fond noir qui « pissent » à grande vitesse sur l’écran. Ça donne un coté geek qui n’est pas forcément rassurant pour les novices.

On peut résoudre cela en cachant les messages derrière un beau « splashscreen ». Voici la marche à suivre.

thème softwaves

Installer le paquet Plymouth :

# apt install plymouth plymouth-themes

Vous pouvez lister les thèmes disponibles :

# plymouth-set-default-theme -l
details
fade-in
glow
joy
lines
script
softwaves
solar
spacefun
spinfinity
spinner
text
tribar

Voici un apercu graphiques des thèmes :

Je vous conseille le thème « softwaves ». Pour le choisir, on fait ainsi:

# plymouth-set-default-theme -R softwaves

Editer le fichier de config GRUB et demander d’afficher le splashscreen :

# nano /etc/default/grub

Faites en sorte d’avoir le mot « splash » dans la ligne suivante :

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Appliquer les modifications :

# update-grub

Voila ! Vous aurez un bel écran de démarrage qui ne fera plus peur aux novices :-)

Related Posts:

12 May, 2019 03:22PM par Tuxicoman

08 January 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 par ascendances

27 September 2018

Stéphane Blondon

Accéder à une console lorsque gdm plante

S’il est impossible d’avoir un terminal en appuyant simultanément sur ctrl+alt+F6 , il est possible de paramétrer Grub pour démarrer Linux avec un environnement multi-utilisateur mais sans interface graphique (runlevel 3) :

Lorsque le menu de Grub s’affiche, appuyer sur e pour modifier temporairement la configuration.
Puis ajouter 3 à la fin de la ligne :
linux /boot/vmlinuz-… root=UUID=12345678-… ro quiet 3
Puis appuyer sur la/les touches indiquées par Grub pour exécuter cette entrée.

J’ai trouvé plusieurs explications indiquant d’utiliser text à la place de 3 mais ça ne fonctionne pas avec la version avec laquelle j’ai subi ce problème (2.02+dfsg1-6).

La solution vient de https://superuser.com/a/974809, possibilité 5.

…Et Grub était innocent : c’était un problème de paquets mis-à-jour mais non configurés.

27 September, 2018 06:39AM par ascendances

13 June 2018

Philippe Latu

Nouvelle édition de l'antisèche réseau

En plus de la révision des commandes pour la version Stretch, cette nouvelle édition inclut les instructions de gestion d'un espace de noms réseau (Network namespaces).

antisèche réseau

L'exercice consiste toujours à se limiter au recto d'une feuille. Il est donc nécessaire de faire un tri. Aussi, j'ai choisi de faire apparaître les commandes utiles aux supports de travaux pratiques du site.

Addendum ! Les exemples de résolution des noms de domaines font maintenant référence au service Quad9 au lieu de Google.

13 June, 2018 07:13AM par Philippe Latu

22 May 2018

Olivier Berger (pro)

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

MAJ : nous avons trouvé le candidat. Le poste n’est plus disponible.

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

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

22 May, 2018 07:25AM par Olivier Berger

18 May 2018

Olivier Berger (pro)

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

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

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

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

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

 

 

18 May, 2018 08:06AM par Olivier Berger

22 January 2018

Philippe Latu

Configuration d'une interface réseau Ethernet

Une nouvelle édition du support de travaux pratiques Configuration d'une interface réseau Ethernet est disponible. La présentation des outils est maintenant «double pile IPv4 & IPv6».

Comme ce document est utilisé avec des étudiants de 2ème année GE2I, il s'agit essentiellement de manipulations de lecture d'une configuration réseau déjà en place avec la commande ip. On remonte la modélisation réseau en partant de l'identification des ressources matérielles au niveau de la couche physique pour aller jusqu'aux requêtes DNS au niveau application.

Une version imprimable est disponible au format PDF. Si vous avez des remarques ou des demandes de correction, n'hésitez pas. Le dépôt GitHub est là pour ça !

22 January, 2018 11:44AM par Philippe Latu

20 December 2017

David Mercereau

Firewall : Mon script iptables

Je partage ici mon script de firewall iptable. C’est un script « à l’ancienne », dans du bash… ça fait le taf, mais rien de bien transsudant. En gros :

  • On ferme tout les ports sauf ceux qui nous intéresse (80, 25, icmp…)
  • Petite fonction pour ouvrir les ports mis en écoute sur Portsentry. Portsentry c’est un petit logiciel de sécurité en mode « pot de miel ». On met des ports en écoute mais il n’y a rien derrière. Dès que quelqu’un tente de s’y connecter (un robot ou quelqu’un de malveillant), ça bloque son IP dans le firewall pour un temps donnée. C’est radical si vous déplacez le port SSH du 22 vers autre chose et que vous mettez Portsentry à écouter (entre autre) sur le 22…
  • Mode maintenance du serveur web (lancé via ./iptables.sh maintenance). Il permet de mettre une page de maintenance pour tout le monde sauf pour vous (j’explique en détail dans cet article)

#!/bin/bash

## IP :
# Chez moi
MOI="A.A.A.A" 
# Mon serveur
SRV1="X.X.X.X"

IPT="/sbin/iptables"
PORTSENTRYCONF="/etc/portsentry/portsentry.conf"

export IPT PORTSENTRYCONF

function portsentryOpen() {
	. ${PORTSENTRYCONF}
	IFS=',' read -ra TCP_PORTS_SPLIT <<< "${TCP_PORTS}"
	for TCP_PORT in "${TCP_PORTS_SPLIT[@]}"; do 
		${IPT} -A INPUT -p tcp --dport ${TCP_PORT} -j ACCEPT
	done
	IFS=',' read -ra UDP_PORTS_SPLIT <<< "${UDP_PORTS}"
	for UDP_PORT in "${UDP_PORTS_SPLIT[@]}"; do 
		${IPT} -A INPUT -p udp --dport ${UDP_PORT} -j ACCEPT
	done
}

# Remise a 0
${IPT} -F
${IPT} -t nat -F

# Les connexions entrantes sont bloquées par défaut
${IPT} -P INPUT DROP
# Les connexions destinées à être routées sont acceptées par défaut
${IPT} -P FORWARD ACCEPT
# Les connexions sortantes sont acceptées par défaut
${IPT} -P OUTPUT ACCEPT


######################
# Règles de filtrage #
######################
# Nous précisons ici des règles spécifiques pour les paquets vérifiant
# certaines conditions.
 
# Pas de filtrage sur l'interface de "loopback"
${IPT} -A INPUT -i lo -j ACCEPT
 
# Accepter le protocole ICMP (notamment le ping)
${IPT} -A INPUT -p icmp -j ACCEPT
  
# Accepter les packets entrants relatifs à des connexions déjà
# établies : cela va plus vite que de devoir réexaminer toutes
# les règles pour chaque paquet.
${IPT} -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# ftp 
${IPT} -A INPUT -p tcp --dport 20 -j ACCEPT 
${IPT} -A INPUT -p tcp --dport 21 -j ACCEPT
# Préalabielemnt, pour pure-ftpd : echo "29700 29750" > /etc/pure-ftpd/conf/PassivePortRange ${IPT} -A INPUT -p tcp --dport 29700:29750 -j ACCEPT
# SSH
${IPT} -A INPUT -p tcp --dport 222 -j ACCEPT
# NTP
${IPT} -A INPUT -p udp --dport 123 -j ACCEPT
# smtp
${IPT} -A INPUT -p tcp --dport smtp -j ACCEPT
# Pour test bricolage smtp
${IPT} -A INPUT -p tcp --dport 587 -j ACCEPT
# imap(s)
${IPT} -A INPUT -p tcp --dport 143 -j ACCEPT
${IPT} -A INPUT -p tcp --dport 993 -j ACCEPT
# sieve
${IPT} -A INPUT -p tcp --dport 4190 -j ACCEPT
# dns
${IPT} -A INPUT -p tcp --dport domain -j ACCEPT
${IPT} -A INPUT -p udp --dport domain -j ACCEPT
# http
${IPT} -A INPUT -p tcp --dport http -j ACCEPT
# https
${IPT} -A INPUT -p tcp --dport https -j ACCEPT

# Maintenance 
if [ "$1" == "maintenance" ] ; then
	echo "Maintenance On"
	/usr/sbin/service lighttpd start
	${IPT} -A INPUT -p tcp --dport 81 -j ACCEPT
	${IPT} -t nat -A PREROUTING \! -s ${MOI} -p tcp --dport 80 -j DNAT --to-destination ${SRV1}:81
	${IPT} -t nat -A POSTROUTING -j MASQUERADE
elif [ -f "/var/run/lighttpd.pid" ] ; then
	echo "Maintenance Off"
	/usr/sbin/service lighttpd stop
fi

# Portsentry 
if [ -f ${PORTSENTRYCONF} ] ; then
	portsentryOpen ${IPT} ${PORTSENTRYCONF}
fi

# End
${IPT} -A INPUT -j LOG --log-prefix "iptables denied: "  --log-level 4
${IPT} -A INPUT -j REJECT

# Si vous utilisez fail2ban, relancé à la fin du script :
#/usr/sbin/service fail2ban restart

 

 

 

20 December, 2017 01:16PM par David

10 October 2017

Ulrich L.

Manipuler des JSON en ligne de commande grace à JQ exemple avec cURL

Je n'utilise quasiment plus que la ligne de commande pour faire des appels sur des APIs en utilisant cURL. C'est pratique et rapide, facilement scriptable si besoin et l'historique du bash me permet de gagner du temps. Seulement la réponse fournie par cURL n'est pas toujours très lisible surtout quand il s'agit de JSON. Dans cet article je vais donc vous présenter JQ que j'utilise pour afficher un JSON facilement lisible et plus encore.

10 October, 2017 10:00PM

Manipuler des JSON en ligne de commande grace à JQ exemple avec cURL

Je n'utilise quasiment plus que la ligne de commande pour faire des appels sur des APIs en utilisant cURL. C'est pratique et rapide, facilement scriptable si besoin et l'historique du bash me permet de gagner du temps. Seulement la réponse fournie par cURL n'est pas toujours très lisible surtout quand il s'agit de JSON. Dans cet article je vais donc vous présenter JQ que j'utilise pour afficher un JSON facilement lisible et plus encore.

10 October, 2017 10:00PM

26 August 2017

nIQnutn

Nintendo 64: rejouer à de vrais jeux

C'est l'occasion de ressortir les manettes et de recommencer des jeux mythiques. C'est probablement sur la Nintendo 64 que j'ai le plus de souvenirs de jeux, du moins les plus marquants. La 3D, le multijoueur à 4 et des parties sans fin. Les réussites sont nombreuses et ont marqué les esprits en commençant par Super Mario 64, Golden Eye et Mario Kart 64 (je vais pas tous les citer). De nos jours, le jeu vidéo a changé, certains vendent des jeux pas fini et bugués et on croule sous la quantité de jeux disponibles (souvent ils manquent cruellement d'inspiration). C'est de plus en plus rare pour moi d'accrocher, avec le temps on se lasse mais je trouve que les jeux de cette époque avait une véritable identité et à part quelques patates payé à prix d'or (500 Francs de l'époque) je les ai tous terminé.

Tout ça parce que l'autre jour, j'ai eu envie de commencer un nouveau jeu mais ma liste de jeux sur Steam était beaucoup trop longue. Découragé, j'ai préféré revenir à des valeurs sûres.

Installation

Pour installer Mupen64Plus et son interface graphique:


#root
apt install mupen64plus-ui-console mupen64plus-qt

Pour lancer Mupen64Plus, aller dans le menu: Jeux > Mupen64Plus-Qt
ou directement depuis le terminal: mupen64plus-qt

Configuration

On commencer par mettre l'interface en français depuis le menu: Paramètres > Autre et on sélectionne le Français.

Ensuite, on indique le dossier des roms: Paramètres > Chemin et on ajoute notre dossier dans "Dossiers des ROMS"
Puis on actualise la liste des jeux dans le menu: Fichier > Recharger la liste
Pour finir, il faut aller dans: Paramètres > Disposition et sélectionner la vue. Sinon, on reste face à un écran vide :/

Il est possible de récupérer les infos depuis TheGamesDB.net.
Pour l'activer, aller dans le menu: Paramètres > Autre et cocher la case "Télécharger les informations sur les jeux"
On retourne dans le menu: Fichier > Recharger la liste

Il est possible de modifier les information d'une Rom. Il suffit de la sélectionner et dans le menu: Fichier > Télécharger/Mettre à jour les infos...

Si la miniature ne se met pas à jour, faut passer par le dossier ~/.local/share/mupen64plus-qt/cache et supprimer les miniatures.
Il y a visiblement un problème dans la gestion des miniatures et les fichiers .png peuvent ne pas s'afficher s'il y a un déjà un fichier .jpg

Et voilà, c'est prêt !

Ressources

https://wiki.debian.org/Mupen64Plus
https://github.com/dh4/mupen64plus-qt


nIQnutn CC-BY

26 August, 2017 11:49AM par nIQnutn

10 July 2017

Frédéric Lietart

Nextcloud + Cloud Public Object Storage d’OVH

Je cherchais un moyen de sĂŠcuriser un minimum mes donnes hĂŠbergĂŠes par mon instance Nextcloud. Je me suis donc tournĂŠ vers le Cloud Public Object Storage d’OVH. Nous allons voir la mise en place de cet espace en tant qu’espace principal. J’utilise pour cela un serveur XC 2016 hĂŠbergĂŠ chez Online.net fonctionnant sous Debian Jessie (mais toute bonne instance Nextcloud doit fonctionner sans problème).

Voici ce que nous propose OVH :

  • 0,01 â‚Ź HT/mois/Go
  • Triple rĂŠplication des donnĂŠes
  • Trafic entrant gratuit
  • Trafic sortant : 0,01 â‚Ź HT/Go
  • Powered by OpenStack
  • DurabilitĂŠ de vos donnĂŠes 100%

OVH propre d’ailleurs un petit tutoriel pour mettre en place leur solution en tant que stockage externe, mais en stockage principal c’est quand mĂŞme bien mieux đŸ™‚

Nous partons donc d’une instance Nextcloud vierge configurĂŠe avec une base MySQL et un compte administrateur. La crĂŠation chez OVH du conteneur privĂŠ est un jeux d’enfant (après avoir acceptĂŠ les conditions d’utilisations et donnĂŠ un nom Ă  sa première instance Cloud). Une fois crĂŠĂŠ il vous faudra crĂŠer un utilisateur et surtout retenir le mot de passe gĂŠnĂŠrĂŠ pour avoir accès au conteneur pour enfin tĂŠlĂŠcharger le fichier de configuration d’Openstack.

Si on rĂŠsume cela nous donne :

  • une instance Nextcloud toute propre
  • un conteneur privĂŠ Object Storage (Espace client OVH > Cloud > Stockage > CrĂŠer un conteneur)
  • un utilisateur pour l’accès au stockage (Espace client OVH > Cloud > Stockage > Openstack > Ajouter un utilisateur)
  • un fichier de configuration Openstack ou OpenRC (Espace client OVH > Cloud > Stockage > Openstack > sur la clĂŠ Ă  droite)

Configuration de Nextcloud

Il nous faut maintenant ĂŠditer notre fichier de configuration (Nextcloud > config > config.php)

'objectstore' => array(
    'class' => 'OC\\Files\\ObjectStore\\Swift',
    'arguments' => array(
        'username' => 'OS_USERNAME',
        'password' => 'OS_PASSWORD', // mot de passe gĂŠnĂŠrĂŠ dans l'interface OVH
        'bucket' => 'CONTAINER_NAME',
        'autocreate' => false,
        'region' => 'GRA3',
        'url' => 'https://auth.cloud.ovh.net/v2.0',
        'tenantName' => 'OS_TENANT_NAME',
        'serviceName' => 'swift',
    ),
),

Vous trouverez toutes les informations dans le fichier de configuration Openstack ou OpenRC (Espace client OVH > Cloud > Stockage > Openstack > sur la clĂŠ Ă  droite) hormis le mot de passe qui a ĂŠtĂŠ gĂŠnĂŠrĂŠ lors de l’ajout de l’utilisateur.

Si la configuration est bonne, vous devriez avoir accès Ă  votre instance Nextcloud. Commencez Ă  charger des documents et vous devriez voir augmenter l’espace occupĂŠ dans votre conteneur (Espace client OVH > Cloud > Stockage) ainsi que votre estimation de facturation đŸ˜‰

 

 

 

Cet article Nextcloud + Cloud Public Object Storage d’OVH est apparu en premier sur TiFredFr.

10 July, 2017 08:03PM par Frédéric LIÉTART

21 April 2017

Raphaël Hertzog

Le logiciel libre a t’il une couleur politique ?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

13 February 2017

Raphaël Hertzog

Mes activités libres en janvier 2017

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

Debian LTS

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

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

Empaquetage Debian

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

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

Travaux divers

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

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

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

Merci

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

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

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

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

13 January 2017

Frédéric Lietart

Script post-installation Fedora 25

Suite à la sortie de Fedora en version 25 voici mon script de post-installation. Le script est conçu pour le bureau Gnome fournis par défaut dans Fedora.

Fonctionnalités

  • installer les dépôts RPMFusion
  • mettre à jour le système
  • installer mon profit bashrc
  • installer Skype, TeamViewer, Atom, Fedy…
  • faire un peu de nettoyage
  • installer le thème Arc
  • installer les polices Microsoft
  • installer FishShell
  • installer Terminix
  • installation de : nano wget langpacks-fr htop ccze most bash-completion gnome-tweak-tool gnome-shell-extension-user-theme alacarte

Une validation vous sera demandée avant l’installation d’application.

N’hésitez pas à rapporter les divers problèmes.

Installation

curl https://git.lietart.fr/tifredfr/postinstallfedora/raw/master/postinstallfedora25 -o postinstallfedora25 && chmod +x postinstallfedora25 && ./postinstallfedora25

Source : https://git.lietart.fr/tifredfr/postinstallfedora

Cet article Script post-installation Fedora 25 est apparu en premier sur TiFredFr.

13 January, 2017 07:57PM par Frédéric LIÉTART

23 November 2016

Tanguy Ortolo

Interdit ou autorisé ?

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

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

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

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

23 November, 2016 04:56PM par Tanguy

15 November 2016

David Mercereau

PvMonit – Monitoring de mon installation photovoltaïque autonome

Cet article fait suite à la réalisation de mon installation électrique solaire autonome. Je suis très content de celle-ci, seulement j’ai un grand besoin de maîtrise, et ne pas savoir tout ce qui se passait dans ces petites boîtes bleues me taraudait… Il fallait que je monitor. Coup de chance, les appareils Victron que j’ai installés peuvent se connecter à un ordinateur avec les câbles VE Direct USB.

En bon libriste que je suis, j’ai vite découvert OpenEnergyMonitor project. J’ai failli craquer pour un emonPi – Solar PV mais ça ne correspondait pas complètement à mes contraintes. J’ai donc pris mes petits doigts et j’ai pondu PvMonit.

PvMonit C’est quoi ?

PvMonit c’est donc un petit logiciel de monitoring photovoltaïque pour matériel Victron compatible Ve.direct (USB), particulièrement adapté pour les installations autonomes. Il permet une vue « en direct » et un export de l’historique vers emoncms (une branche d’OpenEnergyMonitor project).

Exemple d’usage de PvMonit (le mien) : je dispose d’un RaspberryPi (mini ordinateur qui ne consomme que ~3W), mes appareils Victron (MPTT, BMV) sont connectés avec des câbles VE.Direct USB. PvMonit est installé sur ce RaspberryPi et me permet :

  • D’afficher les informations en temps réel sur une page web (local)
    • Une copie de cette page est faite toutes les heures (si la connexion internet est allumée) et est accessible ici : http://demo.zici.fr/PvMonit/
  • De collecter les données toutes les X minutes et les expédier vers emoncms quand internet est là (le wifi n’étant pas toujours allumé)

Des images :

Installation de PvMonit

Le matériel

Il vous faudra pour suivre ce tuto :

  • Un ordinateur faible consommation configuré sous Debian ou un dérivé type Ubuntu/Raspbian (j’ai fait un article sur l’installation de mon Raspberry PI) 68€ (d’occasion avec coque, ventilateur, carte SD)
  • Les câbles Ve.Direct USB connectés à vos appareils 30€ (x3 car 3 appareils à connecter)
  • En option :
    • Une sonde de température USB pour contrôler la température du local où vivent les batteries. J’utilise « thermomètre USB TEMPer » qui coûte entre 5 et 20€, (ils en parlent ici)
    • Une pince ampèremètre USB pour contrôler la consommation de l’habitat. J’utilise la Aviosys 8870 à 27€ quand même, mais il ne semble pas y avoir beaucoup de concurrence pour ce type de produit… (j’en parle ici)

Voici le schéma de mon installation avec le câblage pour PvMonit incorporé :

pvmonit-cablage

Et voilà dans la vraie vie :

Le logiciel : Installation de PvMonit

Requis

  • Linux (le tutoriel ci-dessous est prévu pour Debian/Rasbian/Ubuntu like)
  • PHP (5.6 minimum)
  • Lighttpd/Apache (ou autre serveur web)
  • Perl
  • Python

Installation

PvMonit dispose de deux fonctions dissociées et indépendantes que je vais distinguer :

  • Interface en temps réel
  • Export vers emoncms

Il y a bien sûr une base commune :

La base / le socle

Installation de PvMonit via le dépôt git et de ses dépendances :

aptitude install php-cli git python-serial sudo
cd /opt
git clone https://github.com/kepon85/PvMonit.git
cp config-default.php config.php

Vous pouvez maintenant éditer le fichier config.php à votre guise !

Test du script vedirect.py : branchez un appareil Victron avec un Câble Ve.Direct USB et voici un exemple de ce que vous devriez obtenir (Ici un MPTT BlueSolare branché sur le ttyUS0)

$ /opt/PvMonit/bin/vedirect.py /dev/ttyUSB0 
PID:0xA04A
FW:119
SER#:HQ********
V:25660
I:500
VPV:53270
PPV:14
CS:3
ERR:0
LOAD:ON
H19:3348
H20:1
H21:17
H22:33
H23:167
HSDS:52

Pour comprendre chaque valeur, téléchargez la documentation Victron VE Direct Protocol documentation : https://www.victronenergy.fr/support-and-downloads/whitepapers

Interface web en temps réel

Installation des dépendances :

aptitude install lighttpd php-cgi 
lighttpd-enable-mod fastcgi
lighttpd-enable-mod fastcgi-php

Configuration du serveur http, avec le fichier /etc/lighttpd/lighttpd.conf :

server.document-root        = "/opt/PvMonit/www"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
server.port                 = 80
index-file.names            = ( "index.html", "index.php")
url.access-deny             = ( "~", ".inc" )
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

On applique la configuration :

service lighttpd restart

On ajoute ensuite la possibilité à l’utilisateur exécutant lighttpd de lancer les script avec sudo sans mot de passe :

Lancer la commande :

visudo

Ajouter la ligne suivante :

+ www-data ALL=(ALL) NOPASSWD: /usr/bin/perl /opt/PvMonit/bin/ampermetre.pl, /opt/temperv14/temperv14 -c, /usr/bin/python /opt/PvMonit/bin/vedirect.py /dev/tty*

C’est terminé, vous pouvez vous connecter sur votre IP local pour joindre votre serveur web :

Export vers emoncms

Connectez-vous à votre interface emoncms hébergée ou créez un compte sur emoncms.org et rendez-vous sur la page « Input api » https://emoncms.org/input/api :

emoncms_api

Récupérez la valeur « Accès en écriture » et ajoutez-la dans le fichier de configuration Pvmonit /opt/PvMonit/config.php :

- $EMONCMS_URL_INPUT_JSON_POST='https://emoncms.chezvous.org/input/post.json';
- $EMONCMS_API_KEY='XXXXXXXXXXXXXXXXXXXXXXXX';
+ $EMONCMS_URL_INPUT_JSON_POST='https://emoncms.org/input/post.json';
+ $EMONCMS_API_KEY='????VOTRE API KEY?????';

Création d’un utilisateur dédié avec pouvoir restreint

adduser --shell /bin/bash pvmonit

Installation des dépendances :

aptitude install lynx

On ajoute ensuite la possibilité à l’utilisateur exécutant l’export de lancer les scripts avec sudo sans mot de passe :

Lancer la commande :

visudo

Ajouter la ligne suivante :

+ pvmonit ALL=(ALL) NOPASSWD: /opt/temperv14/temperv14 -c, /usr/bin/perl /opt/PvMonit/bin/ampermetre.pl, /usr/bin/python /opt/PvMonit/bin/vedirect.py /dev/tty*

Test de collecte :

$ su - pvmonit -c /opt/PvMonit/getForEmoncms.php
2016-11-02T10:55:30+01:00 - C'est un MPTT, modèle "BlueSolar MPPT 100/30 rev2" du nom de MpttBleu
2016-11-02T10:55:30+01:00 - Les données sont formatées comme ceci : V:26180,I:800,VPV:56360,PPV:21,CS:3,ERR:0,H19:3352,H20:5,H21:51,H22:33,H23:167
2016-11-02T10:55:31+01:00 - C'est un MPTT, modèle "BlueSolar MPPT 100/30 rev2" du nom de MpttBlanc
2016-11-02T10:55:31+01:00 - Les données sont formatées comme ceci : V:26200,I:600,VPV:53630,PPV:18,CS:3,ERR:0,H19:1267,H20:4,H21:46,H22:17,H23:201
2016-11-02T10:55:31+01:00 - Après correction, la température est de 11.88°C
2016-11-02T10:55:31+01:00 - Tentative 1 de récupération de consommation
2016-11-02T10:55:32+01:00 - Trouvé à la tentative 1 : la La consommation trouvé est 00.1A
2016-11-02T10:55:32+01:00 - La consommation est de 00.1A soit 23W

Test d’envoi des données :

$ su - pvmonit -c /opt/PvMonit/sendToEmoncms.php 
2016-11-02T10:56:44+01:00 - Données correctements envoyées : 1, données en erreurs : 0

Mettre les scripts en tâche planifiée

crontab -e -u pvmonit

Ajouter :

+# Script de récupération des données, toutes les 5 minutes
+/5 * * * * /usr/bin/php /opt/PvMonit/getForEmoncms.php >> /tmp/PvMonit.getForEmoncms.log
+# Script d'envoi des données, ici toutes les 1/2 heures
+3,33 * * * * /usr/bin/php /opt/PvMonit/sendToEmoncms.php >> /tmp/PvMonit.sendToEmoncms.log

Je n’explique pas ici comment configurer emoncms, les flux pour obtenir de beaux dashboard, je vous laisse lire la documentation

Voici, pour exemple, mon dashboard : http://emoncms.mercereau.info/dashboard/view?id=1

Sonde température (option)

J’utilise la sonde thermomètre USB TEMPer, cette sonde fonctionne avec le logiciel temperv14 qui est plutôt simple à installer

apt-get install libusb-dev libusb-1.0-0-dev unzip
cd /opt
wget http://dev-random.net/wp-content/uploads/2013/08/temperv14.zip
#ou un miroir
#wget http://www.generation-linux.fr/public/juin14/temperv14.zip
unzip temperv14.zip
cd temperv14/
make

Test de la sonde :

$ /opt/temperv14/temperv14 -c
18.50

Ajout de celle-ci dans le fichier /opt/PvMonit/config.php :

- $TEMPERV14_BIN='';
+ $TEMPERV14_BIN='/usr/bin/sudo /opt/temperv14/temperv14';

Autres documentations à propos de cette sonde :

Pince ampèremétrique (option)

J’utilise la pince ampèremétrique USB Aviosys 8870 pour mesurer ma consommation électrique.

Le petit script perl (/opt/PvMonit/bin/ampermetre.pl) est très simple pour lire la pince ampèremétrique, qui sera branchée en USB et apparaîtra dans votre système sur le port /dev/ttyACM0

Celui-ci dépend de la librairie serialport :

aptitde install libdevice-serialport-perl

Test : :

$ /opt/PvMonit/bin/ampermetre.pl 
00.1A

Ajout de celle-ci dans le fichier /opt/PvMonit/config.php :

- $AMPEREMETRE_BIN = '';
+ $AMPEREMETRE_BIN = '/usr/bin/sudo /usr/bin/perl /opt/PvMonit/bin/ampermetre.pl';

Documentation

Voilà voilà, bon courage !

15 November, 2016 10:40PM par David

17 August 2016

Tanguy Ortolo

Aux concepteurs de voies cyclables

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

Route avec une chicane à angle droit !

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

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

Piste cyclable avec une chicane à angle droit !

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

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

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

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

17 August, 2016 10:16AM par Tanguy

10 April 2016

nIQnutn

Désactiver le message d'avertissement de xscreensaver au lancement

Pour désactiver le message d'avertissement de xscreensaver au lancement de votre session, voici une solution simple.

Pour désactiver ce message un peu agaçant au démarrage, il suffit de modifier le fichier de configuration .xscreensaver en passant la variable lock à True :

[codeFile fichier="~/.xscreensaver"]... lock: True ...[/codeFile]

Vous voilà débarrasser.

[info]Au démarrage, il faut lancer la commande: xscreensaver -no-splash[/info]

Ressources


By nIQnutn

10 April, 2016 08:57AM par nIQnutn

17 March 2016

Aurélien Jarno

(Pseudo-)virtualizing Intel USB controllers

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

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

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

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

explain EHCI/OHCI/XHCI

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

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

add table

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

17 March, 2016 04:34PM par aurel32

23 February 2016

Aurélien Jarno

10 years ago…

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

Still it seems to me like yesterday.

23 February, 2016 09:43PM par aurel32

10 December 2014

Olivier Berger (perso)

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

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

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

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

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

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

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

10 December, 2014 10:10PM par obergix