19 September 2020

Vincent Bernat

Keepalived et unicast avec plusieurs interfaces

Keepalived est une implémentation Linux de VRRP. Le rôle habituel de VRRP est de partager une adresse IP virtuelle entre un ensemble de routeurs. Pour chaque instance VRRP, un hôte primaire est élu et prend en charge l’adresse IP, assurant ainsi la haute disponibilité du service associé. Keepalived peut également être utilisé pour une élection primaire/secondaire générique, grâce à sa capacité à utiliser des scripts pour tester le bon fonctionnement du service et à exécuter des commandes lors d’un changement d’état.

Une configuration basique ressemble à ceci :

vrrp_instance gateway1 {
  state BACKUP          # ❶
  interface eth0        # ❷
  virtual_router_id 12  # ❸
  priority 101          # ❹
  virtual_ipaddress {
    2001:db8:ff/64
  }
}

Le mot-clé state, en ❶, indique à Keepalived de ne pas prendre le rôle primaire au démarrage. Sinon, les nouveaux nœuds créent une perturbation temporaire en reprenant l’adresse IP jusqu’à ce que l’élection soit terminée. Le mot-clé interface, en ❷, définit l’interface pour l’envoi et la réception des paquets VRRP. C’est également l’interface par défaut pour configurer l’adresse IP virtuelle. La directive virtual_router_id, en ❸, est commune à tous les nœuds qui partagent l’IP virtuelle. Le mot-clé priority, en ❹, détermine l’élection du routeur primaire. Si vous avez besoin de plus d’informations sur Keepalived, consultez la documentation.

La conception de VRRP est étroitement liée aux réseaux Ethernet et nécessite un réseau avec le support du multicast pour la communication entre les nœuds. Dans certains environnements, notamment les nuages publics, le multicast est indisponible. Dans ce cas, Keepalived peut envoyer des paquets VRRP en unicast :

vrrp_instance gateway1 {
  state BACKUP
  interface eth0
  virtual_router_id 12
  priority 101
  unicast_peer {
    2001:db8::11
    2001:db8::12
  }
  virtual_ipaddress {
    2001:db8:ff/64 dev lo
  }
}

Un autre processus, comme un démon BGP, doit annoncer l’adresse IP virtuelle au « réseau ». Au besoin, Keepalived peut déclencher toute action nécessaire à cet effet en utilisant les scripts notify_*.

Jusqu’à la version 2.21 (pas encore publiée), la directive interface est obligatoire et Keepalived transmettra et recevra des paquets VRRP sur cette interface uniquement. Si les autres nœuds sont joignables par plusieurs interfaces, comme avec BGP sur le serveur, il faut trouver une alternative. Une solution simple consiste à utiliser une interface VXLAN :

$ ip -6 link add keepalived6 type vxlan id 6 dstport 4789 local 2001:db8::10 nolearning
$ bridge fdb append 00:00:00:00:00:00 dev keepalived6 dst 2001:db8::11
$ bridge fdb append 00:00:00:00:00:00 dev keepalived6 dst 2001:db8::12
$ ip link set up dev keepalived6

L’apprentissage des adresses MAC est désactivé et une entrée générique pour chaque nœud distant est ajouté dans la base de données de transmission de l’interface : les paquets transmis sont diffusés à tous les pairs, notamment les paquets VRRP. Consultez « VXLAN & Linux » pour plus de détails.

vrrp_instance gateway1 {
  state BACKUP
  interface keepalived6
  mcast_src_ip 2001:db8::10
  virtual_router_id 12
  priority 101
  virtual_ipaddress {
    2001:db8:ff/64 dev lo
  }
}

À partir de la version 2.21 de Keepalived, unicast_peer peut être utilisé sans la directive interface. Je pense que l’utilisation de VXLAN reste néanmoins une astuce intéressante applicable à d’autres situations où la communication par diffusion ou multicast est nécessaire, alors que le réseau sous-jacent ne le permet pas.

19 September, 2020 08:02PM par Vincent Bernat

Synchroniser NetBox avec un module Ansible sur mesure

La collection netbox.netbox d’Ansible Galaxy fournit divers modules pour mettre à jour des objets dans NetBox:

- name: create a device in NetBox
  netbox_device:
    netbox_url: http://netbox.local
    netbox_token: s3cret
    data:
      name: to3-p14.sfo1.example.com
      device_type: QFX5110-48S
      device_role: Compute Switch
      site: SFO1

Cependant, si NetBox n’est pas votre source de vÊritÊ, vous voudrez vous assurer qu’il reste synchronisÊ avec votre base de gestion de configuration1 en supprimant les Êquipements ou les adresses IP obsolètes. Alors qu’il devrait être possible de bricoler un playbook avec une requête, une boucle et des filtres pour supprimer les ÊlÊments indÊsirables, cela semble fastidieux, inefficace et constitue un dÊtournement de YAML comme langage de programmation. Un module Ansible ad hoc rÊsout ce problème et est probablement plus flexible.

Note

Je vous recommande de lire  Écrire un module Ansible sur mesure  en introduction, ainsi que  Synchroniser des tables MySQL  pour un premier exemple plus abordable.

Code​

Le module expose la signature suivante et synchronise NetBox avec le contenu du fichier YAML fourni :

netbox_sync:
  source: netbox.yaml
  api: https://netbox.example.com
  token: s3cret

Les objets synchronisÊs sont :

  • les sites,
  • les constructeurs,
  • les types d’Êquipements,
  • les rĂ´les des ĂŠquipements,
  • les ĂŠquipements,
  • les adresses IP.

Dans notre environnement, le fichier YAML est gÊnÊrÊ à partir de notre source de vÊritÊ et contient un ensemble d’Êquipements et une liste d’adresses IP :

devices:
  ad2-p6.sfo1.example.com:
     datacenter: sfo1
     manufacturer: Cisco
     model: Catalyst 2960G-48TC-L
     role: net_tor_oob_switch
  to1-p6.sfo1.example.com:
     datacenter: sfo1
     manufacturer: Juniper
     model: QFX5110-48S
     role: net_tor_gpu_switch
# [‌]
ips:
  - device: ad2-p6.example.com
    ip: 172.31.115.18/21
    interface: oob
  - device: to1-p6.example.com
    ip: 172.31.115.33/21
    interface: oob
  - device: to1-p6.example.com
    ip: 172.31.254.33/32
    interface: lo0.0
# [‌]

L’Êquipe rÊseau n’est le seul utilisateur de NetBox. Si l’ajout de nouveaux objets ou la modification d’objets existants est peu risquÊ, la suppression d’objets indÊsirables peut être hasardeuse. Le module ne supprime que les objets qu’il a crÊÊs ou modifiÊs. Pour les identifier, il les marque avec une Êtiquette spÊcifique, cmdb. La plupart des objets de NetBox acceptent les Êtiquettes.

DÊfinition du module​

En se basant sur le squelette prÊsentÊ dans l’article prÊcÊdent, nous dÊfinissons le module :

module_args = dict(
    source=dict(type='path', required=True),
    api=dict(type='str', required=True),
    token=dict(type='str', required=True, no_log=True),
    max_workers=dict(type='int', required=False, default=10)
)

result = dict(
    changed=False
)

module = AnsibleModule(
    argument_spec=module_args,
    supports_check_mode=True
)

Il contient un argument supplÊmentaire optionnel dÊfinissant le nombre de requêtes à envoyer en parallèle à NetBox pour la rÊcupÊration des objets existants afin d’accÊlÊrer l’exÊcution.

Abstraction du processus de synchronisation​

Nous devons synchroniser diffÊrents types d’objets, mais une fois que nous avons une liste des objets que nous voulons dans NetBox, le travail est toujours le même :

  • vĂŠrifier si les objets existent dĂŠjà ;
  • les rĂŠcupĂŠrer et les mettre sous une forme permettant de les comparer ;
  • rĂŠcupĂŠrer les objets dont nous ne voulons plus ;
  • comparer les deux ensembles ;
  • ajouter les objets manquants, mettre Ă  jour les objets existants, supprimer les objets en trop.

Ces comportements sont codÊs dans une classe abstraite Synchronizer. Pour chaque type d’objet, une classe concrète est construite avec les attributs appropriÊs pour adapter son comportement et une mÊthode wanted() pour fournir les objets dÊsirÊs.

Je ne dÊtaille pas ici le code de la classe abstraite. Jetez un coup d’œil aux sources si nÊcessaire.

Synchroniser les Êtiquettes et les tenants​

Pour commencer, voici comment nous dÊfinissons la classe synchronisant les Êtiquettes :

class SyncTags(Synchronizer):
    app = "extras"
    table = "tags"
    key = "name"

    def wanted(self):
        return {"cmdb": dict(
            slug="cmdb",
            color="8bc34a",
            description="synced by network CMDB")}

Les attributs app et table dÊfinissent les objets NetBox que nous voulons manipuler. L’attribut key est utilisÊ pour dÊterminer comment rechercher des objets existants. Dans cet exemple, nous voulons rechercher des Êtiquettes en utilisant leurs noms.

La mÊthode wanted() doit renvoyer un dictionnaire qui associe les clÊs des objets à la liste des attributs dÊsirÊs. Ici, les clÊs sont le nom des Êtiquettes et nous ne crÊons qu’une seule Êtiquette, cmdb, avec la couleur et la description fournies. C’est cette Êtiquette que nous utiliserons pour marquer les objets que nous crÊerons ou modifierons.

Si l’Êtiquette n’existe pas, elle est crÊÊe. Si elle existe, les attributs fournis sont mis à jour. Les autres attributs ne sont pas modifiÊs.

Nous voulons Êgalement crÊer un tenant spÊcifique pour les objets acceptant un tel attribut (Êquipements et adresses IP) :

class SyncTenants(Synchronizer):
    app = "tenancy"
    table = "tenants"
    key = "name"

    def wanted(self):
        return {"Network": dict(slug="network",
                                description="Network team")}

Synchroniser les sites​

Nous devons Êgalement synchroniser la liste des sites. Cette fois, la mÊthode wanted() utilise les informations fournies dans le fichier YAML : elle parcourt les Êquipements et construit la liste des centres de donnÊes.

class SyncSites(Synchronizer):

    app = "dcim"
    table = "sites"
    key = "name"
    only_on_create = ("status", "slug")

    def wanted(self):
        result = set(details["datacenter"]
                     for details in self.source['devices'].values()
                     if "datacenter" in details)
        return {k: dict(slug=k,
                        status="planned")
                for k in result}

Grâce à l’utilisation de l’attribut only_on_create, les attributs spÊcifiÊs ne sont pas mis à jour s’ils sont diffÊrents. Le but de ce synchroniseur est surtout de collecter les rÊfÊrences aux diffÊrents sites pour les utiliser dans d’autres objets.

>>> pprint(SyncSites(**sync_args).wanted())
{'sfo1': {'slug': 'sfo1', 'status': 'planned'},
 'chi1': {'slug': 'chi1', 'status': 'planned'},
 'nyc1': {'slug': 'nyc1', 'status': 'planned'}}

Synchroniser les constructeurs, les types d’Êquipements et les rôles des Êquipements​

La synchronisation des constructeurs est très similaire, sauf que nous n’avons pas besoin de l’attribut only_on_create :

class SyncManufacturers(Synchronizer):

    app = "dcim"
    table = "manufacturers"
    key = "name"

    def wanted(self):
        result = set(details["manufacturer"]
                     for details in self.source['devices'].values()
                     if "manufacturer" in details)
        return {k: {"slug": slugify(k)}
                for k in result}

Concernant les types d’Êquipements, nous utilisons l’attribut foreign indiquant le lien entre un attribut NetBox et le synchroniseur qui le gère.

class SyncDeviceTypes(Synchronizer):

    app = "dcim"
    table = "device_types"
    key = "model"
    foreign = {"manufacturer": SyncManufacturers}

    def wanted(self):
        result = set((details["manufacturer"], details["model"])
                     for details in self.source['devices'].values()
                     if "model" in details)
        return {k[1]: dict(manufacturer=k[0],
                           slug=slugify(k[1]))
                for k in result}

La mÊthode wanted() renvoie des rÊfÊrences aux constructeurs en utilisant les valeurs contenues dans l’attribut key. Dans ce cas, il s’agit du nom du constructeur.

>>> pprint(SyncManufacturers(**sync_args).wanted())
{'Cisco': {'slug': 'cisco'},
 'Dell': {'slug': 'dell'},
 'Juniper': {'slug': 'juniper'}}
>>> pprint(SyncDeviceTypes(**sync_args).wanted())
{'ASR 9001': {'manufacturer': 'Cisco', 'slug': 'asr-9001'},
 'Catalyst 2960G-48TC-L': {'manufacturer': 'Cisco',
                           'slug': 'catalyst-2960g-48tc-l'},
 'MX10003': {'manufacturer': 'Juniper', 'slug': 'mx10003'},
 'QFX10002-36Q': {'manufacturer': 'Juniper', 'slug': 'qfx10002-36q'},
 'QFX10002-72Q': {'manufacturer': 'Juniper', 'slug': 'qfx10002-72q'},
 'QFX5110-32Q': {'manufacturer': 'Juniper', 'slug': 'qfx5110-32q'},
 'QFX5110-48S': {'manufacturer': 'Juniper', 'slug': 'qfx5110-48s'},
 'QFX5200-32C': {'manufacturer': 'Juniper', 'slug': 'qfx5200-32c'},
 'S4048-ON': {'manufacturer': 'Dell', 'slug': 's4048-on'},
 'S6010-ON': {'manufacturer': 'Dell', 'slug': 's6010-on'}}

Les rôles des Êquipements sont, quant à eux, dÊfinis ainsi :

class SyncDeviceRoles(Synchronizer):

    app = "dcim"
    table = "device_roles"
    key = "name"

    def wanted(self):
        result = set(details["role"]
                     for details in self.source['devices'].values()
                     if "role" in details)
        return {k: dict(slug=slugify(k),
                        color="8bc34a")
                for k in result}

Synchroniser les Êquipements​

Un Êquipement est essentiellement un nom avec des rÊfÊrences à un rôle, un modèle, un site et un tenant. Ces rÊfÊrences sont dÊclarÊes comme des clÊs Êtrangères en rÊfÊrence aux synchroniseurs dÊfinis prÊcÊdemment.

class SyncDevices(Synchronizer):
    app = "dcim"
    table = "devices"
    key = "name"
    foreign = {"device_role": SyncDeviceRoles,
               "device_type": SyncDeviceTypes,
               "site": SyncSites,
               "tenant": SyncTenants}
    remove_unused = 10

    def wanted(self):
        return {name: dict(device_role=details["role"],
                           device_type=details["model"],
                           site=details["datacenter"],
                           tenant="Network")
                for name, details in self.source['devices'].items()
                if {"datacenter", "model", "role"} <= set(details.keys())}

L’attribut remove_unused est un garde-fou provoquant un Êchec si nous devons supprimer plus de 10 Êquipements : cela peut être l’indication qu’il y a un problème quelque part ou un important dÊpart de feu dans l’un des sites.

>>> pprint(SyncDevices(**sync_args).wanted())
{'ad2-p6.sfo1.example.com': {'device_role': 'net_tor_oob_switch',
                             'device_type': 'Catalyst 2960G-48TC-L',
                             'site': 'sfo1',
                             'tenant': 'Network'},
 'to1-p6.sfo1.example.com': {'device_role': 'net_tor_gpu_switch',
                             'device_type': 'QFX5110-48S',
                             'site': 'sfo1',
                             'tenant': 'Network'},
[‌]

Synchroniser les adresses IP​

La dernière Êtape consiste à synchroniser les adresses IP. Nous ne les attachons pas à un Êquipement2. Nous spÊcifions plutôt leurs noms dans la description :

class SyncIPs(Synchronizer):
    app = "ipam"
    table = "ip-addresses"
    key = "address"
    foreign = {"tenant": SyncTenants}
    remove_unused = 1000

    def wanted(self):
        wanted = {}
        for details in self.source['ips']:
            if details['ip'] in wanted:
                wanted[details['ip']]['description'] = \
                    f"{details['device']} (and others)"
            else:
                wanted[details['ip']] = dict(
                    tenant="Network",
                    status="active",
                    dns_name="",        # information is present in DNS
                    description=f"{details['device']}: {details['interface']}",
                    role=None,
                    vrf=None)
        return wanted

Il y a une petite difficultÊ : NetBox autorise les addresses IP en double. Une simple recherche ne suffit donc pas. En cas de multiples rÊsultats, nous choisissons le meilleur en prÊfÊrant ceux marquÊs par l’Êtiquette cmdb, puis ceux dÊjà attachÊes à une interface :

def get(self, key):
    """Grab IP address from NetBox."""
    # There may be duplicate. We need to grab the "best".
    results = super(Synchronizer, self).get(key)
    if len(results) == 0:
        return None
    if len(results) == 1:
        return results[0]
    scores = [0]*len(results)
    for idx, result in enumerate(results):
        if "cmdb" in result.tags:
            scores[idx] += 10
        if result.interface is not None:
            scores[idx] += 5
    return sorted(zip(scores, results),
                  reverse=True, key=lambda k: k[0])[0][1]

Calculer les Êtats actuels et attendus​

Chaque synchroniseur est initialisÊ avec une rÊfÊrence au module Ansible, une rÊfÊrence à pynetbox, les donnÊes contenues dans le fichier YAML fourni et deux dictionnaires vides pour les Êtats actuels et attendus :

source = yaml.safe_load(open(module.params['source']))
netbox = pynetbox.api(module.params['api'],
                      token=module.params['token'])

sync_args = dict(
    module=module,
    netbox=netbox,
    source=source,
    before={},
    after={}
)
synchronizers = [synchronizer(**sync_args) for synchronizer in [
    SyncTags,
    SyncTenants,
    SyncSites,
    SyncManufacturers,
    SyncDeviceTypes,
    SyncDeviceRoles,
    SyncDevices,
    SyncIPs
]]

Chaque synchroniseur a une mÊthode prepare() dont le but est de calculer l’Êtat source et l’Êtat cible. Elle renvoie True en cas de diffÊrence.

# Check what needs to be synchronized
try:
    for synchronizer in synchronizers:
        result['changed'] |= synchronizer.prepare()
except AnsibleError as e:
    result['msg'] = e.message
    module.fail_json(**result)

Appliquer les changements​

Pour revenir au squelette dÊcrit dans l’article prÊcÊdent, la dernière Êtape est d’appliquer les changements quand une diffÊrence est dÊtectÊe. Chaque synchroniseur consigne les Êtats actuels et attendus dans, respectivement, sync_args["before"][table] et sync_args["after"][table] oÚ table est le nom de la table correspondant au type d’objet NetBox. L’objet diff est un peu plus ÊlaborÊ car il est construit table par table. Ansible affiche alors le nom de chaque table avant la reprÊsentation de la diffÊrence :

# Compute the diff
if module._diff and result['changed']:
    result['diff'] = [
        dict(
            before_header=table,
            after_header=table,
            before=yaml.safe_dump(sync_args["before"][table]),
            after=yaml.safe_dump(sync_args["after"][table]))
        for table in sync_args["after"]
        if sync_args["before"][table] != sync_args["after"][table]
    ]

# Stop here if check mode is enabled or if no change
if module.check_mode or not result['changed']:
    module.exit_json(**result)

Chaque synchroniseur expose Êgalement une mÊthode synchronize() pour appliquer les changements et une mÊthode cleanup() pour supprimer les objets indÊsirables. L’ordre est important en raison de la relation entre les objets.

# Synchronize
for synchronizer in synchronizers:
    synchronizer.synchronize()
for synchronizer in synchronizers[::-1]:
    synchronizer.cleanup()
module.exit_json(**result)

Le code complet est disponible sur GitHub. Par rapport Ă  l’utilisation de la collection netbox.netbox, la logique est ĂŠcrite en Python au lieu d’essayer d’assembler des tâches Ansible. Je pense que cela est Ă  la fois plus flexible et plus facile Ă  lire, notamment lorsque l’on essaie de supprimer des objets obsolètes. Bien que je n’aie pas testĂŠ, cela devrait ĂŠgalement ĂŞtre plus rapide. Une alternative aurait ĂŠtĂŠ de rĂŠutiliser le code de la collection netbox.netbox, car il contient des primitives similaires. Malheureusement, je n’y ai pas pensĂŠ jusqu’à prĂŠsent. đŸ˜ś


  1. À mon avis, une bonne option pour une source de vÊritÊ est d’utiliser des fichiers YAML dans un dÊpôt Git. La gestion des versions est offerte et l’utilisation d’un Êditeur de texte est le seul savoir-faire nÊcessaire. ↊︎

  2. Cette lacune est principalement de la feignantise : nous ne nous soucions pas vraiment de cette information. Notre principale motivation pour mettre des adresses IP dans NetBox est de garder une trace des adresses IP utilisÊes. Cependant, si une adresse IP est dÊjà attachÊe à une interface, nous ne touchons pas à cette association. ↊︎

19 September, 2020 04:11PM par Vincent Bernat

09 August 2020

Charles Plessy

Merci, VAIO

J'utilise tous les jours un VAIO Pro 13 mk2 acheté il y a 5 ans avec 3 ans de guarantie. Cela faisait quelques mois que j'avais remarqué que quelque chose enflait lentement à l'intérieur. Et en juillet, tout s'est accéléré au point qu'il a doublé d'épaisseur. Après avoir appelé le service après-vente de VAIO, quelqu'un est passé le prendre pour faire une estimation du coût de la réparation. Et ensuite on nous a annoncé que ça serait gratuit. Le voici de retour dans mes mains en moins de deux semaines. Bravo VAIO !

09 August, 2020 01:01AM

28 May 2020

Olivier Berger (pro)

Expérimentations autour de TPs en distanciel, TPs sur le Cloud

J’ai participĂŠ au colloque IMT4ET de l’IMT, pour faire une courte prĂŠsentation sur le thème des Travaux Pratiques Ă  distance et des expĂŠrimentations sur les TP “virtuels” sur le Cloud sur lesquelles je travaille en ce moment.

Update: a version in english is also available.

J’y parle de Guacamole et MeshCentral, d’Antidote, de Eclipse Che et de Labtainers, les diffĂŠrents trucs excitants du moment, mais aussi de kubernetes, docker et de trucs louches comme du DevOps acadĂŠmique đŸ˜‰

Les slides sont disponibles en ligne, et voici une vidĂŠo ou j’expose mes idĂŠes sur la question :

Update : une version rĂŠdigĂŠe de mon propos est parue sur le site “Innovation pĂŠdagogique”, si vous prĂŠfĂŠrez une version textuelle.

N’hĂŠsitez pas Ă  me contacter si vous voulez creuser les sujets prĂŠsentĂŠs, pour collaborer sur tous ces outils en logiciel libre.

28 May, 2020 07:54PM par Olivier Berger

29 March 2020

Carl Chenet

Le micromanagement

Aujourd’hui on va parler de micromanagement et surtout du manager qui pratique le micromanagement. On va l’appeler le micromanager. Tu l’as sûrement déjà croisé dans ta vie professionnelle, celui qui passe ses journées sur ton dos et ceux de tes collègues, à dire comment chacun doit faire son boulot – alors que t’as 10 ans d’ancienneté dans ta spécialité – et qui s’étonne au final que les projets avancent pas et que les gens ne prennent pas d’initiative.

Je préfère qu’on fasse comme ça

Dans une approche top-bottom classique, le micromanager a raison. Il a la vision. Ok, pourquoi pas ? Chaque boîte a ses spécificités, il faut avant tout répondre aux besoins de la boîte. Fair enough, je pense que n’importe quel informaticien avec quelques expériences en a conscience.

L’expérience de chacun

Maintenant, on est des professionnels. On a déjà mené à bien des tonnes de projets. Donc à priori on va faire en gros comme d’habitude et mener à bien le projet, en autonomie sur les points qu’on gère et en équipe pour se synchroniser et construire un système qui marche. On a de la bouteille, on en a vu passer des projets.

Oui mais non. Pas avec le micromanager. Parce que là, tu devrais pas faire ça comme ça, en fait. Parce que ça n’est pas le résultat qui compte, c’est le chemin vers le résultat, même si à la fin ça fait la même chose. Même si ça coûte 1 ou 2 jours en plus de reprendre tout comme il veut à chaque fois, pour quasiment le même résultat. D’ailleurs, tant qu’il n’aura pas relu personnellement ton travail, il ne sera pas validé. L’intégration continue, c’est lui.

Et les ennuis commencent

Le micromanager a toujours raison. D’ailleurs la preuve, en réunion, personne ne le contredit (ou si peu). Il parle souvent des heures, quasiment tout seul.

Le problème, c’est qu’il n’y a que lui qui le sait. Vraiment. Il faudrait lui dire, mais ceux qui l’ont fait bizarrement ne sont pas restés longtemps. Non, il ne les a pas virés, ils sont partis d’eux-mêmes. Pas fous, ils savent que c’est mort pour ce projet.

Le mec en soirée qui a toujours raison

Parce que, habituellement, dans la vie, le mec qui a toujours raison en soirée, tu l’écoutes 2 minutes si t’es poli puis tu t’éloignes vers quelqu’un avec qui tu peux discuter. Et c’est pareil dans la tech, entre professionnels expérimentés. Sauf quand c’est ton boss. Là, c’est chiant.

Quand un mec te dit qu’il faut faire un projet de telle manière, et que toi t’as déjà fait 30 ou 40 projets et que tu sais très bien comment faire, tu piges très vite quelles sont ses priorités et tu vas les appliquer.

Mais avec le micromanager, tu vas jamais pouvoir les appliquer, parce qu’il n’y a que lui qui fait bien et qui sait comment bien faire. Et bien sûr c’est irréalisable. Et pas faire comme lui, c’est s’exposer à “un risque” ou “mal faire” ou c’est “moins performant”.

Perte d’autonomie

Avec le micromanager, ta belle expérience de 10 ans ne sert à rien en fait. Il suffit de penser comme lui. Et comme tu n’y arrives pas, évidemment tu n’as plus envie de rien faire.

Donc on fait le minimum et on se met à attendre le prochain retour du micromanager, et avancer jusqu’au prochain point où on devra de nouveau attendre le micromanager. De toute façon tu sais que tu vas devoir tout reprendre. Il n’y a pas de specs, pas de cahiers de recette. Tout est dans sa tête. Perte d’autonomie complète, perte d’initiative.

Ben alors ? Vous pourriez le faire vous-même !

Bien sûr de temps en temps le micromanager ne va pas comprendre pourquoi sa belle équipe remplie de seniors ne produit pas ce qu’il veut, même approximativement.

Il a déjà pourtant expliqué maintes et maintes fois ce qu’il faut faire. C’est fou que les gens ne comprennent pas ce qu’il veut alors qu’il suffit de l’écouter. Bon ok il n’y a pas de specs, pas de cahiers de recette, pas de documentation, il n’a pas eu le temps de l’écrire. Ça change tout le temps (au gré de ses idées en fait). Ou elle est illisible. Et de toute façon ils ne vont pas comprendre, donc ça sert à rien la doc (ou si peu).

Tous ces “ingénieurs” qui ne comprennent rien, franchement, il manque d’autonomie, de prise d’initiative.

Donc chaque jour le micromanager prend le clavier des mains de ses subordonnés si besoin (en fait à chaque fois). En leur ré-expliquant pour la énième fois que le formatage du code c’est super important (même si le projet a 6 mois de retard), que vraiment c’est mieux de faire ça pour des raisons de sécurité (même si l’infra n’existe pas encore), que c’est pas la bonne pratique de faire comme ça (alors que le programme fait ce qui est attendu).

Puis bon, quelque part pour lui, qu’ils ne comprennent rien, c’est flatteur. C’est lui le meilleur, le plus intelligent, le plus indispensable. On change les petits bras mais le micromanager demeure (enfin pour l’instant).

Bon il y a quand même quelque chose qui le stresse un peu, c’est la deadline qui s’approche et il a encore rien sorti. Ça l’embête un peu. Il sait qu’il est entouré de nuls, mais bon quand même, ils sont beaucoup (parce qu’évidemment il a besoin de plein de bras pour son projet vu que tu en as plein qui sautent du train).

La peur de délivrer

En fait, au fond, le micromanager, il aimerait sortir le projet tout seul, par lui-même. Le “hic” c’est que si on lui a confié une équipe, c’est qu’à priori il y a besoin d’être plusieurs pour aller au bout du projet dans les délais. Mais lui ça le stresse grave. Il supporte pas de sortir un produit qui n’est pas parfait. Ou plutôt il prend comme excuse que ça ne sera jamais parfait pour ne pas sortir son produit. Un cas classique en somme. Mais il le saurait s’il avait lu (et compris) un bouquin de gestion de projet.

Et comme la deadline approche, qu’il l’a déjà reportée trois fois et qu’il ne veut pas se faire virer, il va devoir de toute façon baisser ses prétentions à la qualité au final. Le projet parfait, ça n’existe pas. Et s’il ne délivre pas quelque chose au final, c’est quelqu’un d’autre que lui qui prendra la direction du projet, pour le plus grand soulagement de ses subordonnés.

Sic transit gloria mundi.

Comment gérer le micromanager ?

Vous êtes au-dessus de lui hiérarchiquement ? Non ? Hé bien une seule solution.

Les carrières sont courtes, pas le temps de se faire infantiliser, d’autres missions vous offriront davantage d’autonomie et d’indépendance (en fait, presque toutes). Fuyez.

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 Le micromanagement appeared first on Carl Chenet's Blog.

29 March, 2020 10:00PM par Carl Chenet

23 March 2020

Debian France

Debian France renouvelle ses instances

L'assemblée générale annuelle de l'association Debian-France vient de se terminer. Pas de confinement ici, puisque tout se passe en ligne et peut donc continuer envers et contre tout. 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.

L'assemblée générale a renouvelé le tiers de son conseil d'administration, actant ainsi l'entrée de Cyril Brulebois, un développeur Debian de longue date, au sein de son organe directeur. Le CA a reconduit le bureau de 2019, mais a élu un nouveau président: Jean-Philippe MENGUAL.

2019 avait marqué un véritable redécolage de Debian France: présence marquée aux FOSDEM, au Capitole du libre, à Paris, Lyon, organisation d'une minidebconf à Marseille, d'un meet-up à Bordeaux. Elle espère faire pareil en 2020, mais avec une claire volonté de mieux associer la communauté francophone des développeurs et des utilisateurs de Debian. Tout ce que fait l'asso doit avoir un "label" Debian clair, être partagé ici, et avec le projet dans son ensemble quand un budget est nécessaire ou pour les événements d'ampleur internationale (minidebconf). Dès février, Debian France a, via Debian, soutenu la tenue d'un sprint de l'équipe Ruby par exemple.

L'association espère donc mieux communiquer avec toute la communauté et s'articuler avec toutes ses composantes, comme debian-facile.

L'enjeu, outre une promotion plus marquée de Debian (Ubuntu étant moins présent), c'est aussi d'inspirer des gens qui, en entendant parler des actions, peuvent vouloir y contribuer. Ils sont les bienvenus! Tenir les stands, participer aux choix de goodies, adhérer à l'association, candidater au conseil d'administration pour 2021, autant de choses qui aideront à faire vivre l'asso et promouvoir le projet Debian. L'asso est "trusted organization", donc gère une partie du budget de Debian, elle doit donc être composée, au CA et au bureau, de développeurs Debian (pas exclusivement mais bon). Autant dire qu'avec moins de 100 développeurs vivant en France, toute bonne volonté est bienvenue! Et toute candidature à être développeur Debian est une bonne idée si vous vous en sentez capable et en avez envie.

Haut-les-coeurs donc, et merci à tous ceux qui suivent l'association et le projet! L'association remercie tous ses membres qui ont participé à l'assemblée générale et son bureau qui a géré cette année avec enthousiasme et dynamisme. Elle espère que cette année sera riche en synergies et partages, dans l'esprit du logiciel libre.

23 March, 2020 05:34PM

27 February 2020

Charles Plessy

Comment ne pas ouvrir un PDF avec GIMP

Des outils comme le client courriel en ligne de commande neomutt peuvent lancer des applications graphiques. Pour sélectionner quelle application pour quel type de fichier, mutt utilise le système mailcap, fourni par le paquet mime-support.

mailcap tire ses informations par défaut de deux sources: des fichiers installés dans /usr/lib/mime/packages au format mailcap ou dans /usr/share/applications au format FreeDesktop par les paquets distribuant les applications. La charte Debian demande que les paquets fournissant des informations au format FreeDesktop évitent de les répéter au format mailcap (9.7.2).

L'éditeur d'image GIMP déclare pouvoir ouvrir des fichiers PDF dans /usr/share/applications/gimp.desktop. Le lecteur de PDF par défaut de GNOME, Evince, le déclare dans /usr/share/applications/org.gnome.Evince.desktop. Les environnements de bureau suivant la norme FreeDesktop ont accès à des informations complémentaires donnant la priorité à Evince. Le système mailcap ne les consulte pas, et donne la priorité à l'ordre alphabétique. Donc quand on ouvre un fichier PDF avec mutt, on l'ouvre avec GIMP, ce qui n'est vraiment pas pratique.

Heureusement, mailcap est facilement configurable. Pour changer la priorité pour son compte personnel, on peut simplement copier l'entrée correspondante qui se trouve dans /etc/mailcap et la mettre dans $HOME/.mailcap. Par exemple (pour faire simple):

grep evince /etc/mailcap >> $HOME/.mailcap

édité le 28 février pour ajouter $HOME à l'exemple.

27 February, 2020 10:00PM

09 December 2019

Carl Chenet

Édito de décembre 2019

Mieux vaut tard que jamais, voici l’ĂŠdito de dĂŠcembre 2019. On y parle de ma carrière professionnelle, de la newsletter du Courrier du hacker et de mon site d’emploi LinuxJobs.fr.

Niveau professionnel

Après quelques semaines de vacances, je suis de retour sur le marchĂŠ et recherche une mission d’architecte infrastructure, cloud AWS si possible mais je suis ouvert Ă  tout type de besoin. Disponible immĂŠdiatement ! N’hĂŠsitez pas Ă  me contacter : carl.chenet@mytux.fr

Le Courrier du hacker

Ma newsletter le Courrier du hacker avec 2500 abonnĂŠs et 117 numĂŠros, qui rĂŠsume l’actualitĂŠ francophone du Logiciel Libre et Open Source, a commencĂŠ Ă  trouver des sponsors (merci Ă  eux !).

Revenu du Courrier du hacker en novembre 2019

Revenu sur Twitter du Courrier du hacker en novembre 2019

Je vais sÝrement Êcrire un rÊsumÊ de tout ce qui est arrivÊ au Courrier du hacker en 2019 (je commence après ce billet en fait ;)) et qui sera bien sÝr publiÊ les premiers jours de janvier 2020.

N’hĂŠsitez pas Ă  vous abonner au Courrier du hacker juste en dessous (0 spam, vos e-mails ne servent qu’Ă  l’envoi de la newsletter).

Le Courrier du hacker

Le site d’emploi LinuxJobs.fr et confĂŠrences

Beaucoup de boulot sur LinuxJobs.fr, le site de l’emploi du Logiciel Libre et Open Source en France, principalement pour le faire connaĂŽtre au-delĂ  des frontières de la communautĂŠ elle-mĂŞme. Je suis par exemple allĂŠ donner une confĂŠrence Ă  l’ĂŠcole 42 invitĂŠ par l’asso 42l sur l’emploi et le Logiciel Libre, oĂš la confĂŠrence a ĂŠtĂŠ très bien accueillie. En espĂŠrant rĂŠ-ĂŠditer l’expĂŠrience bientĂ´t.

Et Ă  ce sujet si vous souhaitez que je donne la mĂŞme confĂŠrence dans votre universitĂŠ, votre ĂŠcole ou votre centre de formation, n’hĂŠsitez pas Ă  me contacter.

ConfĂŠrence emploi avec le Logiciel Libre et l'Open Source

DĂŠcembre 2019 dĂŠmarre plutĂ´t bien et j’essaierai d’ĂŠcrire un billet sur LinuxJobs.fr avant celui du rĂŠcapitulatif de l’annĂŠe 2019, qui sera publiĂŠ les premiers jours de janvier.

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 :

The post Édito de dÊcembre 2019 appeared first on Carl Chenet's Blog.

09 December, 2019 03:21PM par Carl Chenet

17 November 2019

Debian France

Paris Open Source Summit 2019

Debian France tiendra un stand à l'occasion du Paris Open Source Summit, les 10 et 11 Décembre 2019 aux Docks de Paris - 87 Avenue des Magasins Généraux, 93300 Aubervilliers.

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, emplacement A32 parmi les nombreux autres stands.

17 November, 2019 10:09PM

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

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

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

21 April 2017

Raphaël Hertzog

Le logiciel libre a t’il une couleur politique ?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

13 February 2017

Raphaël Hertzog

Mes activités libres en janvier 2017

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

Debian LTS

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

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

Empaquetage Debian

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

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

Travaux divers

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

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

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

Merci

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

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

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

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

23 November 2016

Tanguy Ortolo

Interdit ou autorisé ?

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

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

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

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

23 November, 2016 04:56PM par Tanguy

17 August 2016

Tanguy Ortolo

Aux concepteurs de voies cyclables

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

Route avec une chicane à angle droit !

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

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

Piste cyclable avec une chicane à angle droit !

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

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

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

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

17 August, 2016 10:16AM par Tanguy

17 March 2016

Aurélien Jarno

(Pseudo-)virtualizing Intel USB controllers

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

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

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

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

explain EHCI/OHCI/XHCI

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

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

add table

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

17 March, 2016 04:34PM par aurel32

23 February 2016

Aurélien Jarno

10 years ago…

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

Still it seems to me like yesterday.

23 February, 2016 09:43PM par aurel32

11 April 2015

Roland Mas

Le marronnier du printemps

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

Et qui le porte bien, merci.

11 April, 2015 05:30PM

10 December 2014

Olivier Berger (perso)

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

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

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

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

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

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

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

10 December, 2014 10:10PM par obergix

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

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

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

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

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

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

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

10 December, 2014 10:10PM par Olivier Berger

11 April 2014

Roland Mas

37

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

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

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

11 April, 2014 08:06AM

01 August 2012

Grégory Colpart

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

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

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

Voici quelques astuces :

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

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

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

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

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

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

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

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

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

01 August, 2012 02:24AM par Gregory Colpart

05 October 2010

Vincent Carmona

Adapter une bibliothèque C pour ruby (4)

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

Documentation

Commenter

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

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

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

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

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

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

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

Produire la documentation

 
rdoc --exclude extconf.rb 

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

Conclusion

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

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

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

04 October 2010

Vincent Carmona

Adapter une bibliothèque C pour ruby (3)

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

» Lire la suite!

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

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

19 April 2006

Pierre Machard

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

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

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

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

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

19 April, 2006 09:01AM par migus

15 March 2006

Pierre Machard

Une belle explication des DRM

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

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

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

15 March, 2006 10:36AM par migus