13 May 2012

Carl Chenet

Informations sur la future version stable de Debian Wheezy 7.0

Suivez-moi aussi sur Identi.ca : http://identi.ca/carlchenet

La publication de la première version alpha du Debian-Installer de la future version stable Debian Wheezy 7.0 par l’équipe du Debian-Installer du projet Debian  nous permet d’en apprendre un peu plus sur les fonctionnalités offertes par cette future version.

  • Pour Debian GNU/Linux :
    • Debian-Installer basé sur le noyau Linux 3.2.16
    • Ext4 sera le système de fichiers par défaut
    • /boot pourra être formaté à l’aide du système de fichiers BtrFS pour Grub2 et Lilo
    • Support par le Debian-Installer de NBD (Network Block Devices)
  • Pour Debian GNU/kFreeBSD
    • Debian-Installer basé sur le noyau kFreeBSD 8.3
    • Nombreuses améliorations dans le support de ZFS
  • Généralement au niveau du Debian-Installer :
    • Détection de davantages d’OS
    • Choix offert lorsque plusieurs images ISO sont détectées sur un média d’installation USB
    • Support de nouveaux matériels
    • Meilleur gestion du réseau

Vous pouvez accéder à la liste exhaustive des nouveautés de cette version alpha du Debian-Installer pour Wheezy. Un grand merci à toute l’équipe du Debian-Installer pour le travail crucial qu’ils effectuent.


13 May, 2012 10:21PM par Carl Chenet

12 May 2012

Carl Chenet

Debian à Solutions Linux 2012

Suivez-moi aussi sur Identi.ca : http://identi.ca/carlchenet

L’association Debian France a réservé un stand pour représenter le projet Debian à Solutions Linux 2012 au sein du village associatif.

Cet événement se déroulera à Paris (CNIT à la Défense, Hall Marie Curie) les 19, 20 et 21 juin 2012. L’événement est en semaine (mardi, mercredi et jeudi) et nous cherchons donc à réunir une équipe pour assurer une présence constante sur le stand afin de pouvoir répondre aux questions du public pendant les trois jours.

Si vous connaissez le projet Debian et que vous êtes intéressés pour aider en étant présent sur le stand à un moment ou l’autre de l’événement, n’hésitez pas à vous inscrire sur la page du Wiki Debian dédiée à l’événement, à vous manifester dans les commentaires ou à me joindre directement.

Debian à Solutions Linux 2011

L’année dernière le public était venu nombreux et nous espérons qu’il en sera de même cette année.

 


12 May, 2012 12:15PM par Carl Chenet

10 May 2012

Olivier Berger (pro)

Appel à commentaires sur ADMS.F/OSS 0.3 : vocabulaire pour les méta-données décrivant les logiciels dans les forges

Je reprends ici une news que je viens de publier sur : Un vocabulaire pour les méta-données décrivant les logiciels paru pour appel à commentaires

La période de appel à commentaires du vocabulaire de méta-données ADMS.F/OSS v0.3 vient de commencer.

ADMS.F/OSS est un vocabulaire de méta-données permettant de décrire des logiciels libres ou open-source (F/OSS), qui doit permettre d’explorer, trouver et tirer des liens facilement vers des logiciels sur le Web. Les spécifications visent à réutiliser au maximum des spécifications existantes telles que DOAP, ADMS, et le Trove software map. La version actuelle de ADMS.F/OSS (version 0.3) a été élaborée entre janvier et avril par un groupe de travail qui comptait 45 personnes issuesde 14 pays différents et est proposée aux commentaires du public jusqu’au 2 juin.

Pour plus de détails, merci de vous référer à l’annonce complète en anglais : Vocabulary for software metadata released for public review

Si vous développez ou administrez des forges ou des catalogues de logiciels, alors, ceci vous concerne peut-être.

Merci d’avance.

P.S.: en ce qui me concerne, mes commentaires sur ce draft sont sur : https://joinup.ec.europa.eu/asset/adms_foss/topic/public-comments-admsf/oss-v03#comment-11982

10 May, 2012 03:45PM par Olivier Berger

Raphaël Hertzog

La traduction anglaise du Cahier de l’Admin Debian est disponible

The Debian Administrator's Handbook Cover Je suis vraiment content qu’on ait terminé ce projet. Roland et moi avons passé tellement de temps sur ce livre depuis décembre dernier… aussi bien pour la traduction à proprement parler que pour toutes les autres choses que l’on a tendance à oublier: une jolie couverture, une mise en page agréable et irréprochable pour le livre imprimé, la coordination du travail des relecteurs, s’enregistrer comme éditeur pour avoir un numéro ISBN, etc. Je reviendrai sûrement sur certains aspects de cette aventure dans de futurs articles.

En attendant, profitez pleinement de ce livre conforme aux principes du logiciel libre selon Debian:

Consultez l’annonce officielle (il y a une remise pour ceux qui achètent le livre papier dans les 8 premiers jours).

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

10 May, 2012 09:45AM par Raphaël Hertzog

04 May 2012

Tanguy Ortolo

Signing-party et conférence crypto

Statue of Saint Peter holding the heaven's key

Le lundi 21 mai au soir, à Paris, se tiendra une conférence organisée par Parinux, où j'expliquerai les principes de base de la cryptographie et leur application dans les systèmes SSL et PGP. Cette conférence sera suivie par une signing-party PGP et CAcert.

Pour le déroulement de la signing-party, je vous demanderai de :

  1. générer un paire de clefs si vous n'en avez pas déjà une ;
  2. m'envoyer votre clef publique et vous inscrire ;
  3. imprimer quelques exemplaires de votre empreinte de clef ;
  4. imprimer la liste des participants que je vous enverrai ;
  5. venir munis de tout cela ainsi que d'un stylo et d'une ou deux pièce d'identité.

Conférence

Cette conférence commencera à 18:45. Elle aura pour but de comprendre les principes et les enjeux des systèmes cryptographiques utilisés aujourd'hui. Pour cela, je donnerai :

  1. une brève description de l'histoire de la cryptographie ;
  2. une petite explication des principes mathématiques des cryptosystèmes asymétriques ;
  3. une explication des systèmes de certification ;
  4. une présentation pratique du système OpenPGP avec son implémentation libre GnuPG.

Signing-party

À l'issue de la conférence, vers 20:30, nous procéderons à une signing-party. Il s'agira pour les participants de vérifier mutuellement leur identité afin de certifier leurs clefs PGP.

Cette signing-party sera également l'occasion, pour les utilisateurs de l'autorité de certification SSL CAcert, de certifier leur identité dans le cadre de cette organisation.

Détails pratiques

Il vous est demandé de vous inscrire afin d'évaluer le nombre de participants.

Si vous n'utilisez pas encore PGP, vous pouvez générer une paire de clefs avec la commande suivante, ou en utilisant un outil graphique tel que ceux fournis avec les bureaux GNOME et KDE :

$ gpg --gen-key

Pour faciliter le déroulement de cette signing-party, veuillez m'envoyer votre clef publique. Vous pouvez exporter votre clef dans un fichier avec la commande suivante (indiquez votre adresse à la place de celle de Tintin…), ou en utilisant un outil graphique :

$ gpg --armor --export tintin@example.com

Pour permettre aux participants tardifs de participer, il sera également utile de vous munir de morceaux de papier indiquant votre empreinte de clef ; vous pouvez en générer avec l'outil gpg-key2ps du paquet Debian signing-party, ou copier plusieurs fois la sortie de la commande :

$ gpg --fingerprint tintin@example.com

Le jour venu, vous aurez besoin à cette signing-party d'un exemplaire imprimé par vos soins de la liste des participants que je vous enverrai, ainsi que d'un stylo.

Pour les utilisateurs de CAcert, veuillez venir avec une bonne liasse de formulaires d'accréditation pré-remplis à votre nom (en tant que demandeur et en tant qu'accréditeur pour ceux qui ont assez de points pour cela).

04 May, 2012 05:59PM par Tanguy

01 May 2012

Raphaël Hertzog

Mes activités Debian en avril 2012

Voici le récapitulatif mensuel de toutes mes activités gravitant autour de Debian. Si vous faites partie des personnes ayant fait un don pour soutenir mon travail (186,38 €, merci à tous !), c’est l’occasion de constater ce que je fais de votre argent. Sinon, c’est toujours quelques nouvelles intéressantes sur l’avancement de mes différents projets.

Nouvelles de Dpkg

Pour la première fois depuis plusieurs années, il y a eu une nouvelle version de dpkg (1.16.3) dont le changelog ne mentionne pas mon nom. Les 3-4 commits que j’ai effectués ne méritaient pas une entrée de changelog. Je dois reconnaître qu’il m’a été assez facile de mettre dpkg de côté compte tenu de l’ambiance actuelle avec Guillem et de comment j’ai été occupé avec mes autres projets.

Faire profil bas pendant un certain temps ne peut pas faire de mal. Mais je n’ai pas l’intention d’arrêter de contribuer à dpkg. Au contraire même, c’est une activité que j’apprécie beaucoup (habituellement).

Travail d’empaquetage

J’ai mis en paquet la version 3.0.0 de SQL-Ledger, et plus tard dans le mois j’ai parrainé le paquets de LedgerSMB, un fork de SQL-Ledger qui — contrairement à ce dernier — est développé comme un vrai projet libre.

J’ai également empaqueté la version 0.56 de Zim, et mis à jour WordPress en version 3.3.2 avec ses nombreuses corrections de sécurité.

The Debian Administrator’s Handbook

Comme depuis plusieurs mois, la plus grande partie de mon temps a été consacrée à la traduction anglaise du Cahier de l’Admin Debian. La grande nouvelle est que le fond de libération a été complété (merci à l’École Ouverte Francophone qui a fait le don nécessaire pour compléter le fond). Cela veut donc dire que le livre sera publié sous des licences compatibles aux principes du logiciel libre selon Debian (GPL-2+ / CC-BY-SA 3.0) dès sa publication.

On espère le publier la semaine prochaine (c’est-à-dire entre le 7 et le 11 mai). La sortie PDF pour le livre imprimé est quasiment prête. Il reste du travail sur la sortie HTML/EPUB et on doit aussi prépaper la publication des sources…

Souhaitons que tout se déroule comme prévu.

Merci

Au mois prochain pour un nouveau résumé de mes activités !

Ceci est une traduction de mon article My Debian Activities in April 2012.

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

01 May, 2012 02:02PM par Raphaël Hertzog

25 April 2012

Vincent Bernat

XBMC Eden & Debian Wheezy

Il y a deux ans, je me suis monté un HTPC pour y faire tourner XBMC. À l’époque, j’étais parti sur une installation minimale de Ubuntu Lucid pour y installer les paquets officiels de l’équipe XBMC. Depuis, la version Eden a été publiée and XBMC a fait son apparition dans Debian unstable. C’était donc une excellente occasion de faire le saut.

Logo non officiel pour XBMC Eden

En bref : L’installation de XBMC sur une Debian Wheezy est extrêmement simple. La seule difficulté majeure est la configuration de la télécommande : soit le profil par défaut est satisfaisant, soit il est nécessaire de s’enfoncer des les arcanes pour y apporter les modifications nécessaires.

Ma configuration matérielle est la suivante :

  • un boîtier Antec Micro Fusion 350 comprenant un combiné récepteur infra-rouge/afficheur LCD SoundGraph iMON1,
  • une carte mère Zotac ION-ITX-D-E incluant un processeur Intel Atom 330 et une puce nVidia ION,
  • un amplificateur home cinéma Onkyo connecté via HDMI,
  • une télécommande Logitech Harmony 555.

Installation

Installer Debian Wheezy

L’installation d’une Debian Wheezy2 ne présente aucune difficulté. Obtenir une clef USB amorçable depuis l’image ISO de l’installeur Debian pour Wheezy est devenu très simple :

$ sudo dd if=debian-testing-i386-netinst.iso \
>         of=/dev/disk/by-id/usb...

L’installation s’est déroulée sans problème à l’exception de l’incapacité de GRUB de s’installer sur le disque. Il s’agit d’un bug connu ne se produisant qu’en présence de partitions LVM. J’espère que celui-ci sera corrigé pour la publication de Wheezy.

Cela n’a que peu de rapport avec XBMC, mais je voulais également en profiter pour tester systemd qui pourrait devenir l’init par défaut dans Debian (du moins dans Debian GNU/Linux). Voici un extrait du README.Debian :

systemd peut être installé aux côtés de sysvinit et, par défaut, ne change absolument rien au comportement du système. C’est voulu. Pour tester systemd, il convient d’ajouter init=/bin/systemd à la ligne de commande du noyau et de redémarrer. Une autre solution est d’installer le paquet systemd-sysv.

Le système final démarre en environ 15 secondes.

Configurer X

Le décodage vidéo dans le pilote nouveau en est encore à ses balbutiements. Il est donc encore nécessaire de se rabattre sur le pilote propriétaire de NVIDIA. Le fichier /etc/apt/sources.list doit être complété pour ajouter les dépôts contrib et non-free. Il faut ensuite installer les paquets xserver-xorg-video-nvidia, nvidia-vdpau-driver et xserver-xorg.

Voici le contenu de mon /etc/X11/xorg.conf.d/nvidia.conf :

Section "Device"
    Identifier     "NVidia ION"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    Option         "HWCursor" "False"
    Option         "NoFlip" "False"
    Option         "FlatPanelProperties" "Scaling = Native"
    Option         "DynamicTwinView" "False"
    Option         "ConnectedMonitor" "DFP-1"
    Option         "CustomEDID" "DFP-1:/etc/X11/edid.bin"
    Option         "NoLogo" "True"
EndSection

Section "Extensions"
    Option "Composite" "false"
EndSection

L’option CustomEDID permet d’indiquer au pilote d’utiliser l’EDID indiqué notamment si l’ampli est éteint. Il est possible d’obtenir celui adapté à votre ampli en utilisant la commande get-edid issue du paquet read-edid.

Installer XBMC

Grâce au travail d’Andrés Mejía, XBMC est désormais disponible officiellement dans Debian Wheezy. Pour l’installer, il suffit de taper aptitude install xbmc. J’ai placé ce fichier xbmc.service dans le répertoire /etc/systemd/system pour l’intégration de XBMC dans systemd :

[Unit]
Description = XBMC media center
After = syslog.target

[Service]
User = xbmc
Group = xbmc
Type = simple
ExecStart = /usr/bin/xinit /usr/bin/xbmc-standalone -- :0
Restart = on-failure

[Install]
WantedBy = multi-user.target

La commande systemctl enable xbmc.service permet d’activer ce service au démarrage. Il convient également d’autoriser l’utilisateur xbmc de lancer X. Pour se faire, il suffit d’exécuter dpkg-reconfigure -plow x11-common et d’autoriser tout le monde à lancer le serveur X. sudo peut constituer une alternative.

Configuration

Son

Bien que je souhaiterais utiliser PulseAudio, je veux également que la conversion stéréo vers 5.1 soit effectuée par l’ampli. Avec PulseAudio, l’ampli reçoit un signal sur six canaux et n’effectuera aucune conversion. J’opte donc pour l’utilisation directe d’ALSA.

Activer les sorties numériques constitue la première étape :

$ amixer scontrols | grep IEC958
Simple mixer control 'IEC958',0
Simple mixer control 'IEC958 Default PCM',0
Simple mixer control 'IEC958',1
$ amixer sset 'IEC958',0 unmute
$ amixer sset 'IEC958 Default PCM',0 unmute
$ amixer sset 'IEC958',1 unmute
$ sudo systemctl stop alsa-utils.service

L’ordre des différents canaux est incorrecte. Il est possible de le corriger avec le fichier /etc/asound.conf suivant où est déclarée une nouvelle sortie, hdmi2 :

pcm.hdmi2 {
  type asym
  playback.pcm {
    type plug
    slave.pcm "remap-surround51"
  }
}

pcm.!remap-surround51 {
  type route
  slave.pcm "hdmi"
  ttable {
    0.0= 1
    1.1= 1
    2.4= 1
    3.5= 1
    4.2= 1
    5.3= 1
  }
}

On indique ensuite à XBMC d’utiliser cette sortie au lieu de celle par défaut. La sortie hdmi classique doit cependant toujours être utilisée pour les signaux type AC3. La commande speaker-test -D hdmi2 -c 6 permet de vérifier le bon ordonnancement des canaux.

Afficheur LCD

L’afficheur LCD intégré dans le SoundGraph iMON est supporté par le module noyau imon ainsi que par le paquet lcdproc. Voici les modifications qu’il faut apporter au fichier /etc/LCDd.conf pour le faire fonctionner :

[server]
Driver=imonlcd
ServerScreen=off

[imonlcd]
Protocol=1
OnExit=2
Contrast=400

Télécommande

Il s’agit de la partie la plus complexe. J’utilise une télécommande universelle Logitech Harmony. Le support pour Linux est satisfaisant : la configuration s’effectue à travers le site web de Logitech et l’utilitaire congruity permet de pousser la configuration définie vers la télécommande.

Les télécommandes sous Linux

Avant Linux 2.6.36, la plupart des télécommandes infra-rouges nécessitaient LIRC :

  • Le pilote reçoit le signal du récepteur infra-rouge et le rend disponible via /dev/lirc.
  • lircd, avec l’aide d’un fichier de configuration décrivant le protocole utilisé par la télécommande, lit ce signal et le transforme en un code LIRC.
  • XBMC, connecté à lircd, reçoit le code LIRC et le transforme en une commande XBMC. Cette transformation est définie dans le fichier Lircmap.xml.
  • XBMC fait correspondre chaque commande à une action (telle que Play ou Fullscreen) à l’aide d’une table de correspondance également utilisée par les autres périphériques comme la souris, le clavier ou un joystick.

Depuis Linux 2.6.36, les télécommandes sont reconnues comme un périphérique d’entrée générique au même titre qu’un clavier :

  • Le pilote reçoit le signal du récepteur infra-rouge.
  • Un décodeur va transformer ce signal en un évènement (généralement l’appui d’une touche). La configuration du décodeur est effectuée à l’aide de ir-keytable.
  • X reçoit ces évènements et les transforment en évènements X destinés aux applications.
  • XBMC les reçoit et utilise la table de correspondance appropriée pour les transformer en actions.

Pour compliquer un peu les choses, il est toujours possible d’utiliser LIRC : lircd va recevoir les évènements en provenance du noyau et les transformer en codes LIRC.

De plus, le récepteur infra-rouge du SoundGraph iMON accepte deux protocoles différents : un protocole propriétaire et le protocole RC-6. Le pilote Linux sait gérer ces deux protocoles mais utilise par défaut le premier. Le protocole RC-6 est le protocole utilisé par de nombreuses télécommandes MCE.

J’espère n’avoir perdu personne jusqu’ici.

La façon simple

Il est possible d’obtenir une configuration fonctionnelle avec peu de configuration :

Télécommande Logitech Harmony
La télécommande doit être déclarée comme étant un Media Center PC de marque Microsoft: Windows Media Center SE.
Récepteur infra-rouge iMON
Il doit être configuré pour utiliser le protocole RC-6. Voir ci-dessous pour les détails.
LIRC
Dans /etc/lirc/hardware.conf, mettre DEVICE=/dev/input/by-id/usb-15c2_0038-event-if00 et DRIVER=devinput. Dans /etc/lirc/lircd.conf, mettre simplement include "/usr/share/lirc/remotes/devinput/lircd.conf.devinput".
XBMC
Une fois les autres éléments configurés, la télécommande doit fonctionner sans aucune configuration supplémentaire dans XBMC.

Pour utiliser le protocole RC-6, il faut installer le paquet ir-keytable et utiliser les commandes suivantes :

$ sudo modprobe rc-imon-mce
$ sudo ir-keytable -s rc0 -p rc-6 -c -w /lib/udev/rc_keymaps/imon_mce
Read imon_mce table
Old keytable cleared
Wrote 77 keycode(s) to driver
Protocols changed to RC-6

Pour rendre ce changement permanent, ajouter le module rc-imon-mce dans /etc/modules et créer le fichier /etc/udev/rules.d/90-imon.rules avec le contenu suivant :

# Override the keytable for iMON
ACTION=="add|change", SUBSYSTEM=="rc", DRV_NAME="imon", \
   RUN+="/usr/bin/ir-keytable -s $name -p rc-6 -c -w /lib/udev/rc_keymaps/imon_mce"

La façon compliquée

Si la configuration par défaut ne convient pas totalement et que l’on désire lier certains boutons à certaines actions, il y a deux grandes solutions possibles :

  1. Partir de la configuration décrite ci-dessus avec LIRC et définir les boutons supplémentaires à cinq endroits différents.
  2. Retirer LIRC et configurer la télécommande Logitech pour émuler un clavier Microsoft MCE.

La première option est particulièrement pénible. Il faut d’abord trouver un code non utilisé au niveau de la Logitech Harmony, s’il en reste. Ensuite, il faut s’assurer que ce code est bien défini dans la table utilisée par l’utilitaire ir-keytable. Dans le cas contraire, il est possible de l’ajouter mais cela nécessite de compiler un noyau avec des instructions de débogage pour le connaître. Ensuite, ce code doit être traduit dans le fichier lircd.conf. Il faut ensuite définir une traduction supplémentaire dans le fichier Lircmap.xml. Enfin, il faut définir l’action associée au niveau de XBMC.

L’autre solution n’est pas non plus idéale mais me semble plus simple. La première étape est de configurer la télécommande Logitech Harmony en tant que Microsoft MCE keyboard. Cela nous permet d’avoir beaucoup de touches disponibles. En raison de l’absence de touches multimédias, il faut redéfinir la configuration de la télécommande. Le plus simple est de suivre la configuration d’un clavier dans XBMC :

Bouton Commande Bouton Commande
Channel Down PageDown Stop X
Channel Up PageUp Skip back Comma
Prev Backspace Skip forward .
Up DirectionUp Play P
Down DirectionDown Rewind R
Left DirectionLeft Fast forward F
Right DirectionRight Star Delete
OK Enter Pound W
Menu C Red F1
Exit Esc Green F2
Guide Tab Yellow F3
Info I Blue F4

Malheureusement, le fichier de programmation fourni avec ir-keytable n’est pas complet. J’ai construit une version plus complète3. Avec cette configuration, la plupart des fonctionnalités de XBMC fonctionneront sans avoir à modifier d’autres fichiers.

Les touches supplémentaires peuvent être définies en écrivant une table de correspondance dédiée pour XBMC4. Voici un extrait de celle que j’utilise :

<keymap>
 <global>
  <keyboard>
    <end>XBMC.ShutDown()</end>
    <f1>XBMC.ActivateWindow(MusicLibrary)</f1>
    <f2>XBMC.ActivateWindow(Videos,TvShowTitles)</f2>
    <f3>XBMC.ActivateWindow(Videos,MovieTitles)</f3>
    <f4>XBMC.ActivateWindow(Weather)</f4>
  </keyboard>
 </global>
 <FullscreenVideo>
  <keyboard>
   <opensquarebracket>SubtitleDelayMinus</opensquarebracket>
   <closesquarebracket>SubtitleDelayPlus</closesquarebracket>
   <f6>xbmc.runscript(script.xbmc.subtitles)</f6>
  </keyboard>
 </FullscreenVideo>
</keymap>

FTP

Plutôt que d’utiliser SSH, je préfère déposer les nouveaux fichiers via FTP anonyme. vsftpd permet de répondre très simplement à ce besoin. Voici mon fichier de configuration :

listen=YES
xferlog_enable=YES
use_localtime=YES
setproctitle_enable=YES

secure_chroot_dir=/var/run/vsftpd/empty
nopriv_user=ftp
ftpd_banner=XBMC
hide_ids=YES

ftp_username=xbmc
anon_umask=022
anon_root=/home/xbmc/media
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_world_readable_only=YES

vsftpd n’est actuellement pas compatible avec systemd (voir le bug #670308). J’ai retiré le lien symbolique dans /etc/rc2.d et j’utilise le fichier vsftpd.service suivant :

[Unit]
Description=Vsftpd ftp daemon
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/sbin/vsftpd /etc/vsftpd.conf
ExecReload=/bin/kill -HUP $MAINPID
ExecStartPre=-/bin/mkdir -p /var/run/vsftpd/empty

[Install]
WantedBy=multi-user.target

Divers

  1. Dans /etc/default/grub, réduire TIMEOUT à 0 permet d’obtenir un démarrage plus rapide.

  2. Activer le mécanisme « dirty regions » permet d’augmenter la réactivité de XBMC.

  3. aptitude install upower pm-utils permet à XBMC d’arrêter/suspendre la machine lui-même. Il est nécessaire de lui donner les droits nécessaires en créant le fichier /var/lib/polkit-1/localauthority/50-local.d/xbmc.pkla :

    [Actions for xbmc user]
    Identity=unix-user:xbmc
    Action=org.freedesktop.upower.*;org.freedesktop.consolekit.system.*
    ResultAny=yes
    ResultInactive=yes
    ResultActive=yes
    

  1. La lisibilité de l’afficheur LCD est désastreuse. Il est hautement préférable de s’orienter vers la version VFD. Le récepteur infra-rouge est également très médiocre et la télécommande plus que minimaliste. 

  2. Debian Wheezy n’est pas encore publiée. Si vous n’êtes pas familier avec Debian, il peut être assez pénible de maintenir une telle installation jusqu’au début du gel dans quelques mois. 

  3. Certaines touches ne sont pas présentes dans cette table. Par exemple, le point d’exclamation dispose d’un code dans le protocole RC-6 mais n’a pas de code spécifique au niveau du noyau. Il partage en effet la touche « 1 ». Il serait possible de l’affecter à un code arbitraire mais cela risque de rendre les choses difficiles à maintenir. 

  4. Par exemple, dans ~/.xbmc/userdata/keymaps/harmony.xml

25 April, 2012 06:29PM par Vincent Bernat

19 April 2012

Tanguy Ortolo

Des urnes électorales

L'approche d'élections en France est l'occasion de se pencher sur les caractéristiques des urnes utilisées : elles ont l'air d'objets communs, mais malgré leur conception assez simple, elles respectent des caractéristiques particulières essentielles aux garanties de secret et de vérifiabilité.

Des garanties

Pour être plus précis, dans un scrutin public, chacun doit pouvoir (j'en oublie sans doute) :

  • voter sans que quiconque puisse déterminer le vote en question ;
  • détecter les fraudes (ajout, retrait ou modification de votes) ;
  • vérifier le décompte des votes.

Le système de vote actuel avec isoloir, feuille d'émargement, urne et comptage public fournit toutes ces garanties (à vrai dire, le secret du vote n'est pas applicable dans le cas marginal d'une unanimité), mais je vais ici m'attacher particulièrement aux caractéristiques des urnes elles-mêmes. Notons tout de même qu'il ne s'agit pas garanties absolues : dans le cas d'une fraude, ce qui est garanti, c'est qu'il sera possible de la détecter, pas qu'elle sera effectivement détectée.

Des urnes

Parmi leurs caractéristiques générales, les urnes utilisées sont transparentes et grandes :

Transparentes
Pour que chacun puisse constater ce que devient le bulletin de vote, et vérifier qu'il n'y a pas de mécanisme caché à l'intérieur, qui irait par exemple empiler les enveloppes dans l'ordre : un tel système permettrait à un observateur notant l'ordre de passage des électeurs de déterminer précisément le vote de chacun.
Grandes
Ou, pour être plus précis, grandes par rapport à la taille d'une enveloppe, afin que celles-ci puissent s'entasser dans le désordre : avec une petite urne, elles s'empileraient nécessairement dans l'ordre faute de place…

Conclusion

Quand vous irez voter, vérifiez bien ces caractéristiques de l'urne, et si vous constatez qu'elle est opaque, plaignez-vous !

Ce dernier conseil n'est pas seulement hypothétique, puisque certaines mairies ont réellement mis en place des urnes opaques : il s'agit d'ordinateurs de votes, dont le mécanisme interne est caché au public (quand bien même ils auraient le capot ouvert, on ne pourrait pas les vérifier pour autant), qui pourraient tout à fait noter l'ordre des votes, voire modifier ceux-ci. Peut-être le font-ils réellement d'ailleurs, mais il n'y a aucun moyen de le savoir…

19 April, 2012 08:49PM par Tanguy

18 April 2012

Florent Gallaire

Prince of Persia libéré !

Prince of Persia est un jeu vidéo culte qui a réellement marqué l’histoire des jeux vidéo, en particulier pour son innovante technique d’animation rotoscopique. Or sa version originelle, sortie sur Apple II en 1989, vient d’être libérée par Jordan Mechner.

C’est son père qui, il y a trois semaines, en faisant du rangement, a retrouvé dans un carton trois vieilles disquettes 3.5″, âgées de plus de 20 ans, dans lesquelles se trouvait encore le précieux code source du jeu.

Le code source, qui est maintenant disponible sur GitHub, est de l’assembleur pour 6502, un processeur utilisé sur une très grande variété de machines différentes, ce qui laisse pas mal d’espoir de voir apparaître de nouveaux portages. La riche documentation technique, fournie à l’époque par Jordan pour aider les développeurs effectuant les portages commerciaux, devrait alors être encore une fois d’un grand secours.

La disponibilité du code source rend les choses beaucoup plus simples, bien que la programmation en assembleur puisse paraître effrayante pour beaucoup de programmeurs “modernes”, et évite d’avoir recours au reverse engineering comme lors du superbe travail de portage de Prince of Persia sur Commodore 64, économisant ainsi beaucoup d’énergie et de talent.

Le choix de la licence utilisée n’est pas encore très clair, Jordan indiquant juste dans le README:

We did this for fun, not profit. As the author and copyright holder of this source code, I personally have no problem with anyone studying it, modifying it, attempting to run it, etc. Please understand that this does NOT constitute a grant of rights of any kind in Prince of Persia, which is an ongoing Ubisoft game franchise. Ubisoft alone has the right to make and distribute Prince of Persia games.

Je lui ai demandé des précisions sur son Twitter, moyen de communication qu’il semble privilégier, et j’espère qu’il répondra rapidement. En attendant, vous pouvez toujours jouer au clone Flash de POP :

<object class="flashmovie" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" height="300" id="fm_prince-of-persia_435036047" width="420"> <param name="movie" value="http://91.121.199.16/1980-games/flash4/jeux-action/jeux-flash/prince-of-persia.swf"/> <object data="http://91.121.199.16/1980-games/flash4/jeux-action/jeux-flash/prince-of-persia.swf" height="300" name="fm_prince-of-persia_435036047" type="application/x-shockwave-flash" width="420">

Flash n’est pas installé ? Tant mieux !

</object> </object>

Et ainsi réfléchir aux Ghz de CPU et aux Go de RAM que vous utilisez, alors que la version dont on a aujourd’hui le code source faisait que le Mhz du 6502 et ses quelques Ko de RAM suffisaient à obtenir le même résultat.

À l’époque où un jeu vidéo était une œuvre indissociable de son développeur, inventeur aussi bien de l’idée originale que du scénario, créateur aussi bien du code source que des graphismes ; et où chaque instruction assembleur utilisée était un trésor d’optimisation de code (when men were men and wrote their own device drivers)…

flattr this!

18 April, 2012 12:58AM par fgallaire

15 April 2012

Florent Gallaire

Zack 3.0

Stefano Zacchiroli (Zack) vient d’être re-réélu Debian Project Leader.

Il devance très largement Wouter Verhelst (déjà candidat malheureux en 2007 et 2010) et Gergely Nagy (déjà malheureux lui en 2004) :

Zack a annoncé pendant la campagne que ce troisième mandat consécutif de DPL serait son dernier. Souhaitons qu’il se déroule aussi bien, et même encore mieux !, que les deux premiers, et que Zack puisse mettre en œuvre au mieux son programme.

flattr this!

15 April, 2012 03:46PM par fgallaire

11 April 2012

Roland Mas

Et un de plus

Et un anniversaire de plus. Bigre. Toujours pas de divorce, ni de dépression, ni de Rolex. Je n'ai toujours pas décidé d'arrêter de fumer, ni de suivre un régime, ni de grisonner aux tempes. Je me demande si je ne suis pas un peu en retard sur les modèles standard.

D'un autre côté, mes super-pouvoirs de geek ne semblent pas céder à la pression du temps, mes clients sont rigoureusement sélectionnés pour que tout se passe bien avec eux, ma maison ne devrait plus tarder à être complètement étanchéifiée, et ma carrière musicale ne fait que commencer (il est question de me diversifier au kazoo et/ou à l'ocarina).

Accessoirement, il fait beau et y'a des bières au frais. Si vous êtes dans les environs et vous voulez inaugurer la saison des apéros sur la terrasse, vous serez les bienvenus, mais plutôt aujourd'hui parce que demain y r'pleut et qu'après je vais faire la fête ailleurs.

Me voilà donc trentecinquenaire !

11 April, 2012 08:45AM

05 April 2012

Stéphane Blondon

Nombre de paquets et délai de publication dans Debian

Tout philosophe écologiste conviendrait aisément qu’il est plus difficile de bouger une baleine obèse qu’un canari chétif. Il en va des projets informatiques comme de mère Nature : plus la taille augmente et moins l’animal est véloce. Appliqué à une distribution Linux, le problème pourrait se résumer ainsi : plus le nombre de paquets est grand, plus les dépendances sont complexes et plus il y a des chances d’avoir des bugs. Cela provoque des délais de mise au point qui s’allongent. Pour les dernières publications de Debian, le délai entre deux verssions a été en moyenne de 2 ans mais il a grandement varié par le passé.

délai = f(paquets) ?

Voici le nombre de paquets et la temps passé entre la sortie et la sortie de la version suivante :

Buzz (1.1) : 474 paquets – 178 jours
Rex (1.2) : 848 paquets – 175 jours
Bo (1.3) : 414 paquets – 974 jours
Hamm (2.0) : 1.500 paquets – 228 jours
Slink (2.1) : 2.250 paquets – 502 jours
Potato (2.2) : 2.600 paquets – 703 jours
Woody (3.0) : 8.500 paquets – 1053 jours
Sarge (3.1) : 15.000 paquets – 671 jours
Etch (4.0) : 18.000 paquets – 679 jours
Lenny (5.0) : 28.000 paquets – 721 jours

Après le traumatisme de la douloureuse publication de Sarge (la durée de Woody est très importante parce qu’il a été difficile de sortir Sarge), ne pas faire trop durer la préparation des versions futures était dans toutes les têtes. Une image valant mille mots et économisant mon clavier, je vous invite à regarder ci-dessous.


Les croix rouges sont les premières publications (jusqu’à Woody incluse) ; les croix bleues sont Sarge, Etch et Lenny. Les courbes sont des estimations de régression pour chacun des deux ensembles.

Première période :

g(x) = 19,29 * sqrt(x * 0,45) - 113,34

Seconde période :

h(x)= 0,004 * x + 610

(En réalité, le logiciel ayant fait les calculs a ajouté plein d’autres chiffres après la virgule mais c’est probablement pour permettre au processeur de chauffer un peu plus. Ou pour tenter de m’impressionner.)

J’ignore si des résolutions officielles ont été prises après la publication de Sarge. En revanche, la volonté d’améliorer la communication entre des développeurs a été considérée comme une voie d’amélioration par plusieurs chefs de projet Debian successifs : par exemple, la volonté d’avoir des équipes pour maintenir des ensembles de logiciels plutôt qu’un personne seule, la facilitation des NMU. De même, certaines personnes a des postes clé ont été épaulées par d’autres développeurs Debian car c’était un goulot d’étranglement. À ma connaissance (qui est très parcellaire sur le sujet), les réponses se sont concentrées sur l’organisation humaine plutôt que sur les critères techniques, avec succès.

Sources

Le nombre de paquet et le calcul des durées de chaque version a été calculé à partir de l’historique de la distribution sauf pour Lenny. Le nombre de paquet étant absent de l’annonce lors de sa sortie, le nombre de paquets de Lenny a été récupéré en enregistrant la page listant l’ensemble des paquets de Lenny et un bon vieux grep "<dt><a href=" allpackages.htm |wc -l sur le fichier enregistré. Soit 28.057, arrondi à 28.000.

Les calculs de régression et la création du graphique ont été faites avec gnuplot (version 4.4 patchlevel 0, disponible dans testing actuellement) et le contenu des fichiers suivants :

Fichier de données pour la première période (debstat1.dat)

# stats Buzz à Woody
#nbre_paquets	délai_en_jours
474	178
848	175
974	414
1500	228
2250	502
2600	703
8500	1053

Fichier de données pour la seconde période (debstat2.dat)

# stats Sarge Etch Lenny
#nbre_paquets	délai_en_jours
15000	671
18000	679
28000	721

Script Gnuplot

set output "debian_relation_paquets_temps.png"

set xlabel 'Nombre de paquets'
set ylabel 'Délai de publication (en jours)'

g(x)=a*sqrt(x*b)+c
fit g(x) 'debstat1.dat' using 1:2 via a,b,c

h(x)=d*x+e
fit h(x) 'debstat2.dat' using 1:2 via d,e

plot "debstat1.dat" using 1:2 notitle, g(x) notitle, "debstat2.dat" using 1:2 notitle, h(x) notitle

Si certains sont intéressés par des informations supplémentaires sur les résultats de gnuplot (on ne sait jamais, il y a des malades partout) :

Pour la première fonction :
degrees of freedom (FIT_NDF) : 4
rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 135.908
variance of residuals (reduced chisquare) = WSSR/ndf : 18470.9

Final set of parameters Asymptotic Standard Error
======================= ==========================

a = 19.294 +/- 1.858e+13 (9.629e+13%)
b = 0.453438 +/- 8.735e+11 (1.926e+14%)
c = -113.345 +/- 184.2 (162.5%)

Pour la seconde fonction :
final sum of squares of residuals : 7.61151
rel. change during last iteration : -2.9989e-14

degrees of freedom (FIT_NDF) : 1
rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 2.7589
variance of residuals (reduced chisquare) = WSSR/ndf : 7.61151

Final set of parameters Asymptotic Standard Error
======================= ==========================

d = 0.00393525 +/- 0.0002866 (7.283%)
e = 610.317 +/- 6.041 (0.9899%)


05 April, 2012 10:44AM par ascendances

18 March 2012

Aurélien Jarno

10 years ago…

Date: Mon, 18 Mar 2002 18:22:10 +0000
From: James Troup <troup@samosa.debian.org>
To: “Aurelien Jarno” <aurelien@aurel32.net>
Cc: da-manager@debian.org
Subject: New Debian maintainer Aurelien Jarno

[ This is a long (automatically-generated) mail, but it contains
important information, please read it all carefully. ]

Dear Aurelien Jarno!

An account has been created for you on developer-accessible machines with username ‘aurel32′. The password for this account can be found encrypted with your PGP or GPG key and appended to this message. A list of machines available to Debian developers can be found at <URL:http://db.debian.org/machines.cgi>. Please take a minute now to familiarize yourself with the Debian Machine Usage Policy, available at <URL:http://www.debian.org/devel/dmup>

You have been subscribed to the debian-private mailing list as <aurel32@debian.org>. Please respect the privacy of that list and don’t forward mail from it elsewhere. E-mail to <aurel32@debian.org> will be forwarded to <aurelien@aurel32.net>. To change this, please see <URL:http://db.debian.org/forward.html> Also, please subscribe to debian-devel-announce, if you haven’t done so already.

We strongly suggest that you use your aurel32@debian.org address for the maintainer field in your packages, because that one will be valid as long as you are a Debian developer, even if you change jobs, leave university or change Internet Service providers. If you do so, please add that address to your PGP/GPG key(s) (using `gpg –edit-key “YOUR USER ID”‘) and send it to the keyring server at keyring.debian.org with `gpg –keyserver keyring.debian.org –send-keys “YOUR USER ID”‘.

You can find more information useful to developers at <URL:http://www.debian.org/devel/> (in particular, see the subsection titled “Debian Developer’s reference”).

We suggest that you subscribe to debian-mentors@lists.debian.org. This list is for new maintainers who seek help with initial packaging and other developer-related issues. Those who prefer one-on-one help can also post to the list, and an experienced developer may volunteer to help you. You can get online help on IRC, too, if you join the channel #debian-devel on irc.debian.org. Take a look at the support section on www.debian.org in order to find out more information.

You should have read these documents before working on your packages.

o The Debian Social Contract
<URL:http://www.debian.org/social_contract.html>

o The Debian Policy Manual
<URL:http://www.debian.org/doc/debian-policy/>

If you have some spare time and want to contribute it to Debian you may wish to take a look at the “Work-Needing and Prospective Packages for Debian GNU/Linux” also known as WNPP that can be found at <URL:http://www.debian.org/devel/wnpp/>

If you plan to make a Debian package from a not yet packaged piece of software you *must* announce your intention on the debian-devel mailing list to make sure nobody else is working on them.

The machine ftp-master.debian.org is our main archive server. Every uploaded package finds it’s way there (except for Packages covered by US crypto laws which go to non-us.debian.org) eventually. master.debian.org is the home of our bug tracking system. Project web pages and CVS archives are hosted on klecker.debian.org (aka cvs/www.debian.org), klecker is also our general shell server. Web pages should be placed in public_html on klecker and refered to by http://people.debian.org/~aurel32

You should use ssh to log into the machines instead of regular telnet or rlogin. Our LDAP directory is able to share ssh RSA keys among machines, please see <URL:http://db.debian.org/doc-mail.html> Otherwise when you first login a ~/.ssh directory will be created with the appropriate permissions. Please be aware of the security implications of using RSA authentication and ssh agents.

Finally, please take a minute to visit <URL:http://db.debian.org/>.
Login using the password information appended to this email, and update your personal information. The information is used to maintain your accounts on various Debian machines, and also to allow other developers and general users to find out more about you. Many of the fields are only visible to other registered Debian developers. This is also the only way to change your password. The passwd program does not yet work.

Welcome to the project!


The Debian New Maintainer Team

18 March, 2012 07:52PM par aurel32

Charles Plessy

L'installeur Debian dans un nuage.

Debian Med prépare un méta-paquet pour des images machines polyvalentes rassemblant tous les outils distribués par Debian pour la bio-informatique et utilisés en ligne de commande ou via des scripts, qui ne dépendent pas de systèmes graphiques trop lourds.

Je voudrais préparer une telle image pour le nuage Amazon, de la manière la plus sûre possible, et le plus simple est de la construire automatiquement de manière à ne rien avoir à nettoyer à la fin de l'opération. J'ai essayé pendant plusieurs mois de passer par l'installeur Debian, et me suis tapé longuement la tête contre les murs, car il était impossible de re-partitionner le disque depuis lequel l'installeur était démarré. Cela n'était finalement pas nécessaire.

Par exemple, on peut démarrer une image contenant l'installeur sur une micro-instance (-t t1.micro) avec un disque supplémentaire de un gibibyte (-b /dev/sdb=:1:false) pour y installer Debian, et pré-configurer l'installeur via les métadonnées passées à l'instance (-f preseed.txt) avec un fichier préparé à l'avance. À la fin de l'installation, l'instance se termine au lieu de s'arrêter (--instance-initiated-shutdown-behavior terminate) et ses volumes disparaissent, sauf celui où l'on a installé Debian (/dev/sdb=:1:false).

L'installeur de Debian Stable n'est pas souvent mis à jour, et sa taille est très réduite. On peut donc envisager de distribuer à peu de frais une image machine par zone et par architecture. Je viens de le faire pour Tôkyô (ap-northeast-1) sur amd64. Elle contient le noyau, son initrd, et un menu GRUB 1 pour pvgrub qui lui passe les options console=hvc0 auto=true priority=critical url=http://169.254.169.254/latest/user-data DEBIAN_FRONTEND=text.

Il manque au système ainsi produit deux éléments importants. Il faut que lors de l'installation du noyau et de ses mises à jours, le fichier de configuration GRUB 1 pour pvgrub soit rafraîchi. Ensuite, il faut que le système soit capable de télécharger une clé SSH publique via les métadonnées d'instance, afin que l'on s'y connecte sans mot de passe défini à l'avance. Ces deux fonctions sont disponibles dans le paquet cloud-init, disponible chez Ubuntu et Fedora. Je cherche des volontaires pour maintenir ou co-maintenir cloud-init dans Debian.

18 March, 2012 12:19PM

05 March 2012

Vincent Bernat

De la non asynchronicité du protocole AgentX dans Net-SNMP

Une des façons les plus commodes pour ajouter un support SNMP est d’utiliser le protocole AgentX : une application se comporte comme un sous-agent et traitera les requêtes déléguées par un agent maître via ce protocole. L’implémentation la plus courante est celle de Net-SNMP.

En bref : Une application exploitant l’implémentation AgentX de Net-SNMP de manière asynchrone peut se bloquer à de nombreuses occasions en raison principalement de l’indisponibilité temporaire de l’agent maître. Une contre-mesure assez efficace est d’utiliser comme agent maître un agent dédié à cette tâche et déléguer le traitement des MIB à un sous-agent.

Test de disponibilité de l’agent maître

Net-SNMP exploite un modèle de programmation événementielle. Il fournit également des fonctions synchrones classiques mais celles-ci sont construites à partir des versions asynchrones. Il exploite sa propre boucle d’événements. Son implémentation d’AgentX semble alors un choix naturel pour ajouter un support SNMP dans une application asynchrone comme Keepalived, une solution de haute disponibilité et de répartition de charge.

Malheureusement, un sous-agent doit vérifier régulièrement si l’agent maître est toujours disponible. Cette opération est effectuée automatiquement du moment que vous utilisez la fonction run_alarms() qui va à son tour faire appel à agentx_check_session() :

/*
 * check a session validity for connectivity to the master agent.  If
 * not functioning, close and start attempts to reopen the session 
 */
void
agentx_check_session(unsigned int clientreg, void *clientarg)
{
    /* [...] */
    DEBUGMSGTL(("agentx/subagent", "checking status of session %p\n", ss));

    if (!agentx_send_ping(ss)) {
        snmp_log(LOG_WARNING,
                 "AgentX master agent failed to respond to ping.  Attempting to re-register.\n");
        /*
         * master agent disappeared?  Try and re-register.
         * close first, just to be sure .
         */
        agentx_unregister_callbacks(ss);
        agentx_close_session(ss, AGENTX_CLOSE_TIMEOUT);
        /* [...] */
        if (main_session != NULL) {
            /* [...] */
            main_session = NULL;
            agentx_reopen_session(0, NULL);
        }
        else {
            snmp_close(main_session);
            main_session = NULL;
        }
    } else {
        DEBUGMSGTL(("agentx/subagent", "session %p responded to ping\n",
                    ss));
    }
}

Ce code appelle directement ou indirectement les fonctions suivantes1 qui font ensuite appel à agentx_synch_response() :

  • agentx_send_ping()
  • agentx_open_session()
  • agentx_reopen_session()
  • agentx_close_session()
  • agentx_register()
  • agentx_unregister()
  • agentx_register_index()
  • agentx_unregister_index()
  • agentx_add_agentcaps()
  • agentx_remove_agentcaps()

agentx_synch_response() va attendre de manière synchrone une réponse de l’agent maître. Votre programme asynchrone va donc rester bloqué à ne rien faire pendant ce laps de temps. Par exemple, keepalived sera incapable d’envoyer les paquets VRRP nécessaires au bon fonctionnement du cluster.

Les fonctions préfixées par agentx_ ne font pas partie de l’API de NetSNMP et pourraient donc être corrigées. Plus facile à dire qu’à faire. De plus, il existe d’autres points de blocage enfouis dans NetSNMP. Ainsi, la connexion de bas niveau (TCP ou socket Unix) avec l’agent maître utilise la fonction connect() de manière synchrone. Cet aspect a de nombreuses ramifications difficiles à évoluer.

Voici quelques contre-mesures (partielles) :

  • Appeler agentx_check_session() moins souvent. Par défaut, cette fonction est invoquée toutes les 15 secondes. La désactiver complètement ou utiliser une valeur très élevée est déconseillé car le sous-agent ne se reconnectera pas à l’agent maître en cas de redémarrage de ce dernier. Voici comme porter l’intervalle à 20 secondes :

    netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
                       NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL, 120);
    
  • Ne pas appeler agentx_check_session() si l’agent maître a donné des signes de vie récemment, notamment en envoyant une requête à traiter. J’ai écrit un patch mettant en place une telle contre-mesure. L’ABI reste inchangée et il n’y a donc besoin que de recompiler les bibliothèques de Net-SNMP.

  • Utiliser des valeurs plus faibles pour le délai d’attente et le nombre d’essais. Par défaut, le délai d’attente est de 1 seconde et le nombre d’essais est fixé à 5. En raison de l’utilisation de plusieurs fonctions synchrones à la suite, il est possible de rester bloqué jusqu’à 30 secondes. Voici comment2 désactiver les essais supplémentaires et diminuer fortement le délai d’attente :

    static int
    snmp_setup_session_cb(int majorID, int minorID,
                  void *serverarg, void *clientarg)
    {
        netsnmp_session *sess = serverarg;
        sess->timeout = ONE_SEC / 3;
        sess->retries = 0;
        return 0;
    }
    
    void some_init_function()
    {
        /* [...] */
        snmp_register_callback(SNMP_CALLBACK_LIBRARY,
           SNMP_CALLBACK_SESSION_INIT,
           snmp_setup_session_cb, NULL);
        /* [...] */
    }
    

Non réponse de l’agent maître

Pourquoi l’agent maître peut ne pas répondre aux requêtes ? snmpd utilise également la programmation événementielle et il va se bloquer à de nombreuses occassions. Voici deux exemples :

  • Les directives pass et pass_persist ne rendent pas la main avant que la commande à exécuter n’affiche une ligne complète.

    /* var_extensible_pass() in agent/mibgroup/ucd-snmp/pass.c */
    /*
     * valid call.  Exec and get output 
     */
    if ((fd = get_exec_output(passthru)) != -1) {
        file = fdopen(fd, "r");
        if (fgets(buf, sizeof(buf), file) == NULL) {
            fclose(file);
            wait_on_exec(passthru);
            /* [...] */
            continue;
        }
        /* [...] */
        fclose(file);
        wait_on_exec(passthru);
        /* [...] */
    }
    
  • L’implémentation de DISMAN-PING-MIB se bloque pendant le déroulement des pings vers l’hôte distant. Si ce dernier est inaccessible, snmpd peut se bloquer pendant de longues secondes. Un problème similaire existe pour DISMAN-TRACEROUTE-MIB.

Agent maître minimal

De plus en plus de code est exécuté par l’agent maître et donc la situation ne va pas aller en s’améliorant. Pour pallier à notre problème, nous allons intercaler un agent maître minimal. L’agent qui jouait jusqu’ici le rôle d’agent maître et servait un certain nombre de MIB va devenir un sous-agent. Les sous-agents existant se connecteront au nouvel agent maître.

Schema showing the use of a minimal master agent

Transformer snmpd en sous-agent est simple : il suffit d’utiliser le drapeau -X. Nous devons également désactiver certaines MIB selon le rôle de l’agent. Cela se fait avec le drapeau -I. L’agent minimal n’utilisera que les modules strictement nécessaires à son fonctionnement. Tous les autres modules3 seront servis par snmpd en tant que sous-agent.

$ MODS="snmp_mib,sysORTable,usmConf,usmStats,usmUser,vacm_conf,vacm_context,vacm_vars"
$ snmpd -Lsd -Lf /dev/null -u snmp -g snmp \
>   -C -c /etc/snmp/snmpd.master.conf \
>   -p /var/run/snmpd.master.pid \
>   -I $MODS
$ snmpd -Lsd -Lf /dev/null -u snmp -g snmp \
>   -p /var/run/snmpd.pid -X \
>   -I -$MODS

La configuration des accès et la directive master agentx doivent se trouver dans /etc/snmp/snmpd.master.conf. Les autres directives (telles que pass, pass_persist, load, sysname, …) doivent être dans /etc/snmp/snmpd.conf.

Il est désormais peu probable d’observer un bloquage de l’agent maître. Bien que le problème soit potentiellement toujours présent, sa surface est considérablement réduite. Il est possible d’étendre cette solution en saucissonnant snmpd en plusieurs sous-agents: l’un pour les directives comme pass et pass_persist, un autre pour la plupart des modules et un dernier pour les modules plus litigieux, tels que DISMAN-PING-MIB.


  1. agentx_reopen_session() appelle agentx_close_session() et agentx_open_session(). agentx_register() et les fonctions suivantes sont appelées par ces deux fonctions. 

  2. Les variables NETSNMP_DS_AGENT_AGENTX_TIMEOUT et NETSNMP_DS_AGENT_AGENTX_RETRIES ne sont utilisées que pour l’agent maître, pas pour un sous-agent. 

  3. La commande snmpd -Dmib_init -H permet d’obtenir la liste des modules. Le module smux, s’il est utilisé, doit être ajouté à l’agent maître. 

05 March, 2012 05:02PM par Vincent Bernat

29 February 2012

Roland Mas

Février

Ah oui, le mois est court, j'ai failli me faire avoir. Je serai donc bref pour résumer mes activités de ce mois-ci :

  • Vacances, soleil, neige, monoski. Tiens, y'a du monde aux remontées, serait-ce les vacances scolaires aussi ?
  • Suite à l'explosion en vol de ma précédente tentative, je me suis encore fait refuser par un groupe de rock, pour « manque d'expérience ». C'est marrant, ces groupes amateurs qui cherchent un batteur qui soit tout de suite aussi bien intégré que celui qui s'en va après plusieurs années. Et c'est dommage, parce que de ce que j'en vois, après plusieurs mois la place est souvent encore à prendre ; et plusieurs mois, ç'aurait été suffisant pour s'intégrer.
  • Conséquence : je me retrouve de nouveau à scruter les petites annonces.
  • Conséquence n°2 : j'en suis à deux doigts de monter mon groupe à moi tout seul. Apprendre à me servir des séquenceurs, mixeurs, arrangeurs etc. ça devrait aller. Il reste juste à apprendre le solfège…
  • La météo commence à sentir le printemps, par ici. Pas trop tôt.

Un autre mois ordinaire, donc.

29 February, 2012 10:45AM

17 February 2012

Stéphane Blondon

Comparatif grep, ack et grin

Sur le ring, grep dominait et le public l’acclamait. Mais deux petits nouveaux, ack et grin, avaient enfilé leurs plus belles tenues de super-stars du catch pour lui ravir sa ceinture de champion et le cœur des développeurs. Vont-ils y arriver ? C’est ce que vous saurez en lisant cet article !

Parfois, un programmeur veut connaître l’ensemble des occurrences d’un symbole dans un programme (une variable, une classe, etc.). La solution la plus évidente est d’utiliser grep mais, pour peu qu’il y ait d’autres fichiers dans le répertoire du projet, de nombreux faux positifs vont apparaître, rendant le travail d’analyse fastidieux. Par exemple, s’il existe des copies créées automatiquement par un éditeur de texte, les fichiers des dépôts (.svn, .hg, fichier binaire, etc.). À Yaal, nous utilisons Python. Avec virtualenv, les fichiers de dépôt, les fichiers .pyc produits automatiquement, la documentation, etc. les résultats de grep sont plus ou moins truffés de faux positifs.

Il est bien évidemment possible d’exclure ce genre de fichier en multipliant les commandes (| grep -v a_exclure). Mais l’augmentation des lignes à éliminer rend la commande toujours moins pratique. Pour contourner cela, la suite logique est de transformer la commande en un script shell. Cependant, d’autres programmes comme ack et grin visent déjà à résoudre ce problème. L’objectif de cet article est de montrer quelques spécificités de chaque outil.

Les différents outils

Voici une présentation succincte des trois adversaires :

  • grep : l’outil Unix classique qui servira de référence ;
  • ack : outil écrit en Perl visant à faire des recherches, orienté pour des développeurs. Ce logiciel est disponible dans Debian et dérivées par l’intermédiaire du paquet ack-grep. La commande est aussi ack-grep. Le changement de nom est dû au fait qu’il existait déjà un paquet du nom de ack. Dans la suite de l’article, on mentionnera simplement ack ;
  • grin : outil écrit en Python ayant le même but que ack. Il n’est pas disponible dans Debian. Étant donné qu’il est disponible dans Pypi (les dépôts de paquets Python, équivalant au CPAN de Perl), grin peut être installé avec pip install grin. Le paquet python-pip doit être préalablement installé. Puisqu’il n’y a pas de page de manuel, la documentation à utiliser est celle de grin --help et la page de documentation sur le dépôt Python.

Que le match commence !

Usage

Recherche dans un fichier

grep MOTIF FICHIER
ack-grep MOTIF FICHIER
grin MOTIF FICHIER

Dans chaque cas, MOTIF peut être une expression rationnelle (par exemple [fF]év vaut fév ou Fév).

Voici un exemple de résultats que l’on peut obtenir :

stephane@foehn:~/src/strdatetime$ grep [Ff]év translation.py
u"janv", u"févr", u"mars",
u"janvier", u"février", u"mars",
u"Janvier", u"Février", u"Mars",
stephane@foehn:~/src/strdatetime$ ack-grep [Ff]év translation.py
u"janv", u"févr", u"mars",
u"janvier", u"février", u"mars",
u"Janvier", u"Février", u"Mars",
stephane@foehn:~/src/strdatetime$ grin [Ff]év translation.py
translation.py:
   19 : u"janv", u"févr", u"mars",
   26 : u"janvier", u"février", u"mars",
   30 : u"Janvier", u"Février", u"Mars",

La sortie de grep et d’ack sont identiques, alors que grin fournit le nom du fichier et le numéro de lignes.

Recherche récursive

La plupart du temps, l’objectif est de chercher dans tout une arborescence de répertoire. C’est le fonctionnement par défaut pour ack et grin.

grep -r MOTIF . #ou rgrep
ack-grep MOTIF
grin MOTIF

La sortie produite par grep et ack évolue pour ajouter le nom du fichier et les lignes. grep met tout sur une ligne alors qu’ack a une sortie identique à celle de grin. grin produit une sortie toujours structurée de la même manière (cf. l’exemple du paragraphe précédent).

Alors que la différence de vitesse lors de l’analyse d’un seul fichier ne se sent pas, elle devient sensible lors d’une recherche récursive. Quelques tests rapides (et sans prétention d’exhaustivité ou de représentativité) donnent des résultats bien plus lents pour ack et grin.

grep : 0,3 s
ack-grep : 1,7 s
grin : 2,8 s

Cependant, ajouter des tubes pour exclure des résultats obtenus avec grep dans le but d’éliminer des résultats (et donc arriver à un résultat comparable avec ce qui est obtenu avec ack ou grin) augmentera le temps passé et donc réduira l’écart avec les deux autres outils.

Recherche insensible à la casse

grep -i MOTIF FICHIER
ack-grep -i MOTIF FICHIER
grin -i MOTIF FICHIER

Même syntaxe que dans les cas précédents, juste l’option -i en plus. Aucune surprise ici. Pas la peine d’en rajouter. Passez au paragraphe suivant. Faut-il vraiment que j’arrête d’écrire ce paragraphe pour vous arrêtiez de le lire ?!

Recherche en ignorant certains types de fichiers

Cette fonctionnalité est très utile pour ne pas chercher dans des fichiers sans intérêt :

grep -r --exclude=*.sh  --exclude=*.h "interpreted as " .
ack-grep --type=nohh --type=noshell  "interpreted as "
grin --skip-exts .h,.sh  "interpreted as "

Ici, on exclut les fichiers d’en-tête de code C (*.h) et les scripts shell (*.sh). grep et grin recherchent directement une correspondance de motif alors qu’ack permet des exclusions de types ou d’extension. Les types sont basés sur les noms d’extension de fichiers (avec la correspondance de motif). Par exemple, le type shell correspond à .sh, .bash, .csh, .tcsh, .ksh et .zsh. La définition d’un type de fichier est conçu pour être facilement extensible.

Par défaut, ack et grin exclut les répertoires et les fichiers sans intérêt. L’option d’exclusion permet d’en ajouter de nouveaux. La liste des fichiers exclus par défaut n’est pas identique entre ack et grin donc les résultats peuvent différer un peu. Par exemple, c’est le cas des fichiers .texi, exclus par ack, mais pas par grin.

Recherche en ignorant certains répertoires

grep -r --exclude-dir DIR1 --exclude-dir DIR2 MOTIF .
ack-grep --ignore-dir DIR1 --ignore-dir DIR2  MOTIF
grin --skip-dirs DIR1,DIR2 MOTIF

Ces commandes permettent d’exclure DIR1 et DIR2 de la recherche. grin ajoute les répertoires enlevés à la liste des répertoires qu’il exclut automatiquement.

Ajout des lignes de contexte

Les options sont toutes identiques et ont le même comportement.

-A, --after-context 
-B, --before-context
-C, --context  #avant et après

Comme à chaque fois, grin affichage systématiquement le numéro des lignes.

Affichage limité aux fichiers correspondants

grep -r -l MOTIF.
ack-grep -l MOTIF
grin -l MOTIF

C’est donc l’option -l ou --files-with-matches à chaque fois.

Affichage limité aux fichiers non correspondants

grep -r -L MOTIF .
ack-grep -L MOTIF  # = -l -v
#rien pour grin !

L’option -L (ou --files-without-matches) permet de n’afficher que les fichiers sans l’occurence MOTIF pour grep et ack. grin a bien une option de ce nom mais son comportement est complètement différent. L’aide de la commmande signale que ce paramètre permet d’afficher le nom du fichier avec la correspondance. Ce qui est le comportement par défaut. Je ne comprend pas l’intérêt de cette option, trompeuse de surcroît.

Inversion de la sélection

grep -v MOTIF FICHIER
ack-grep -v  MOTIF FICHIER
#rien pour grin !

Pas d’option équivalente à -v pour grin. Rien ! Nada ! Zéro ! Que dalle ! ∅ !

Intégration avec un éditeur

ack dispose d’un paramètre --column pour qu’un éditeur de texte se place directement sur la première occurence.

La documentation d’ack précise que l’outil est intégrable avec Vim, Emacs et TextMate. Je n’ai testé aucune de ces possibilités.

grin dispose d’un paramètre --emacs qui affiche le nom du fichier, le numéro de la ligne et son contenu sur la même ligne pour faciliter l’analyse « par exemple avec emacs » :

stephane@foehn:~/src/strdatetime$ grin Fév
./tests.py:
  122 :         d_fr = strdatetime.strdatetime(u"Févr", "%b", lang="fr")
  136 :         d_fr = strdatetime.strdate(u"Févr", "%b", lang="fr")
./translation.py:
   30 : u"Janvier", u"Février", u"Mars",
stephane@foehn:~/src/strdatetime$ grin --emacs Fév
./tests.py:122:         d_fr = strdatetime.strdatetime(u"Févr", "%b", lang="fr")
./tests.py:136:         d_fr = strdatetime.strdate(u"Févr", "%b", lang="fr")
./translation.py:30: u"Janvier", u"Février", u"Mars",

Je suis très dubitatif sur le choix de nommage des options dans grin mais cette option me semble vraiment intéressante.

Configuration

Il est possible d’enregistrer des préférences pour qu’elles soient utilisées à chaque fois.

grep est le plus limité. Si l’utilisateur enregistre un fichier FICHIER avec tous les motifs de noms de fichier (possibilité d’utiliser les caractères jokers de l’interprète de commande) qu’il veut exclure, il peut les faire prendre en compte en utilisant --exclude-from=FICHIER. C’est limité mais cette fonctionnalité reste probablement sous-exploitée.

ack prend en compte un fichier de configuration .ackrc dans lequel on peut ajouter les options à lancer systématiquement. Simple et efficace. Certains paramètres sont aussi accessibles grâce à des variables d’environnement.

grin utilise une variable d’environnement $GRIN_ARGS. Elle doit valoir une chaîne de caractère qui inclut les paramètres à ajouter par défaut. Fonctionnel mais moins élégant que le fichier de configuration d’ack.

Conclusion

Pour une utilisation dans le cadre de développement logiciel, ack me semble le plus adapté. Par contre, le fait qu’il n’affiche pas toutes les informations sur la même ligne empêche sa sortie d’être réutilisable facilement. grin me semble moins bon mais évite cet écueil (avec --emacs) et affiche toujours les lignes, ce qui peut s’avérer assez pratique.

grep est plus généraliste et possède plus d’options. Il reste donc indispensable et a l’avantage d’être toujours disponible sur le système, ce qui n’est pas le cas des deux autres.

Je n’ai fait qu’aborder les fonctionnalités qui me semblaient les plus courantes, chacun en possède d’autres et sont à portée de man. Explorez-les !

Versions utilisées :
grep (GNU grep) 2.10
ack-grep 1.92
grin 1.2.1


17 February, 2012 02:55PM par ascendances

24 January 2012

Charles Plessy

Étrange Megumi

Cela fait deux jours que tous mes courriels, @debian.org y compris, sont coincés entre leur envoyeur et mon MX, car mon serveur a cassé à un moment où je n'avais pas une seconde à moi (date butoir pour une de financement). C'est un OpenRD Ultimate avec un disque solide d'occasion. J'étais bien content d'avoir un système ARM sous la main, pour tester quelques paquets comme T-COFFEE, mais il semble que je vais devoir le remplacer.

On dirait que la machine redémarre en permanence. Aucune tentative d'accéder au port série USB n'a été fructueuse; il ne se passe pas 10 secondes sans que le port USB ne soit déconnecté / reconnecté. Les loupiotes des deux ports ethernet clignotent ensemble de manière synchrone avec les déconnections. Retirer le disque solide n'a rien changé.

Le disque lui-même se porte bien, et je n'ai rien trouvé dans les logs qui suggère un problème logiciel. Coïncidence étrange, le dernier fichier de log modifié est daemon.log, qui indique la visite de notre réseau sans fil, non protégé mais à ma connaissance jamais visité, d'un(e) certain(e) megumi-PC. Après, plus rien.

24 January, 2012 03:23PM

05 January 2012

Aurélien Jarno

Performances of open-source Radeon driver

I am the happy owner of a new netbook with an AMD Fusion E-450 APU, which includes a Radeon graphics card. I am using the open-source driver on it, that is a 3.2-rc7 kernel for KMS, and xserver-xorg-video-radeon package from sid. I have to say I am not really happy about the performances.

No I don’t speak about the graphical performances that are pretty good (especially compared to my Intel Atom N450 based previous netbook) but about the power consumption. With this setup and with the original battery I get 2h30 of autonomy. Switching to UMS and adding some power management options in xorg.conf improves it to 2h40, but breaks suspend to ram/disk (a pity for a netbook) and switch between VT. I then tried the non-free fglrx driver, it also suffers from the suspend to ram/disk issue, in addition to crashing xorg when playing videos… On the other hand I get an impressive 3h30 of autonomy, and additionally a silent netbook (contrary to the open-source driver, the fan doesn’t spin at idle).

I have tried plenty of options, ranging from adding some power management options to xorg.conf, to passing dynclks=1 to the radeon module, including setting /sys/class/drm/card0/device/power_method to dynpm. Right now I have worked around the issue by buying a bigger battery which brings me 5h30 of autonomy, but I would really appreciate any software way to improve it with the open-source driver.

05 January, 2012 11:27PM par aurel32

04 June 2011

Olivier Berger (pro)

Intervention au prochain séminaire IRILL : Bug tracking à grande échelle et interopérabilité des outils de développement dans l’écosystème FLOSS

Je suis intervenu au séminaire Logiciel Libre et Programmation de l’IRILL, le jeudi 09/06 à 15h45.

Titre de l’exposé : Bug tracking à grande échelle et interopérabilité des outils de développement dans l’écosystème FLOSS

Résumé :

L’écosystème du logiciel libre (FLOSS) est caractérisé par un développement extrèmement décentralisé, avec de multiples canaux de production et de distribution décorellés, et des processus d’assurance qualité qui doivent donc prendre en compte ces aspects.

Dans cet ensemble de processus d’Assurance Qualité, nous détailerons le volet du suivi des rapports de bugs, en présentant quelques pistes de standardisation et des mécanismes d’interopérabilité (comme le standard OSLC).

Il reste encore de nombreux efforts d’implémentation à conduire, mais avec un espoir concret à lé clé de permettre la réalisation de nouveaux outils, basés sur l’approche Linked Data, permettant un suivi des rapports de bugs à grande échelle.

Toutes les informations concernant ce séminaire sont sur : http://www.irill.org/activities/seminaries

Update : les transparents de l’intervention sont en ligne (PDF 4 Mo).

04 June, 2011 07:08AM par Olivier Berger

05 October 2010

Vincent Carmona

Adapter une bibliothèque C pour ruby (4)

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

Documentation

Commenter

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

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

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

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

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

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

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

Produire la documentation

 
rdoc --exclude extconf.rb 

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

Conclusion

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

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

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

04 October 2010

Vincent Carmona

Adapter une bibliothèque C pour ruby (3)

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

» Lire la suite!

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

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

18 August 2010

Grégory Colpart

Mon compte-rendu de DebConf 10 à New York

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

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

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

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

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

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

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

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

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

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

18 August, 2010 11:52AM par Gregory Colpart

24 January 2010

Grégory Colpart

Autres exemples de migration Etch->Lenny [1]

La fin du support officiel de Debian Etch approchant, il est grand temps de migrer vers Lenny pour les machines pas encore à jour. Après un premier exemple de migration Debian Etch->Lenny, je poursuis la série avec des informations tirées de plusieurs migrations récentes sur des serveurs en production.

Je ne rappellerais pas toutes les précautions nécessaires (tests préalables, sauvegardes, désactivations des services, etc.) ni la classique question  sur  “quand faut-il migrer ?”, vous trouverez tout cela dans mes exemples précédents. Je rappelle simplement l’idée de base : prendre les précieuses Release Notes, mettre à jour le fichier sources.list, puis exécuter les commandes aptitude update && aptitude upgradex, puis mettre-à-jour les services les plus critiques via aptitude install <PACKAGE>, et enfin aptitude dist-upgrade && aptitude dist-upgrade (répéter dist-upgrade est souvent nécessaire).

Passons désormais aux différentes remarques sur ces migrations :

- PostgreSQL : on passe de la version 8.1 à 8.3. Notez qu’il s’agit de paquets différents, il est donc possible de garder la version 8.1 en Etch, et d’installer en parallèle la version 8.3, afin de faciliter encore plus la migration. Pour migrer les données, on réalisera un dump avec pg_dumpall qui sera réinjecté dans la nouvelle base. On pourra ensuite adapter le port dans postgresql.conf pour passer la version 8.3 en production.

- phpPgAdmin : avec PostgreSQL 8.3, on ne peut plus se connecter à la table template1 : c’est le comportement par défaut de phpPgAdmin, qu’on devra donc modifier en mettant postgres à la place (pour la variable $conf['servers'][0]['defaultdb'] dans le fichier config.inc.php)

- Apache : la configuration de l’alias /icons/ est déplacé dans le fichier mods-available/alias.conf, il peut donc faire doublon avec la déclaration dans apache2.conf, ce qui sera signalé via le warning suivant : [warn] The Alias directive in /etc/apache2/apache2.conf at line 240 will probably never match because it overlaps an earlier Alias. Commenter les directives dans le fichier apache2.conf résoudra ce petit soucis.

- OpenLDAP : on passe d’une version 2.3 à 2.4, mais le plus marquant pour la migration est que cela force le processus à tourner avec un utilisateur/groupe dédié. Pour diverses raisons (dist-upgrade interrompu par exemple), on pourra rencontrer des soucis plus ou moins alarmants. Ainsi, j’ai pu rencontrer cette erreur :
bdb(dc=example,dc=com): PANIC: fatal region error detected; run recovery
bdb_db_open: database “dc=example,dc=com” cannot be opened, err -30978. Restore from backup!
backend_startup_one: bi_db_open failed! (-30978)
slap_startup failed
On veillera donc sur l’utilisateur/groupe propriétaire des fichiers dans le répertoire /var/lib/ldap et, au besoin, on ajustera : chown -R openldap:openldap /var/lib/ldap/
Mon conseil : mettre-à-jour le paquet slapd de façon spécifique avant le dist-upgrade

- Postfix : on passe de 2.3 à 2.5. On notera simplement la valeur par défaut de $smtp_line_length_limit characters qui passe à 990, ce qui coupe les lignes trop longues pour se conformer au standard SMTP. Si cela posait problème, on pourrait revenir à l’ancien comportement en positionnant smtp_line_length_limit=0

- SpamAssassin : l’utilisant en stockant la configuration des utilisateurs dans un annuaire LDAP, le daemon spamd s’est mis à râler : cannot use –ldap-config without -u
Le problème sera résolu en ajoutant l’option -u nobody, ce qui fera tourner spamd en tant que nobody (ce qui n’est pas une mauvaise chose, au contraire).

- Amavis : apparemment, lors de la détection d’un virus, le code retourné n’est plus 2.7.1 mais 2.7.0 : 2.7.0 Ok, discarded, id=13735-07 – VIRUS: Eicar-Test-Signature
Rien de bien grave, mais cela a nécessité d’adapter un plugin Nagios pour qu’il attende le bon code de retour.

- Courier-imapd-ssl : après une mise-à-jour gardant mon fichier /etc/courier/imapd-ssl actuel, j’obtenai des erreurs avec certains clients IMAP :
couriertls: accept: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
En regardant de plus près, certaines directives changent dans ce fichier de configuration, et il est donc conseillé de repartir du fichier proposé par Lenny, et d’y apporter ses modifications (souvent, cela se limite à préciser le certificat).

- Horde : si vous utilisez une base de données pour stocker les paramètres ou autres, la paquet php-db (déjà en Recommends: en Etch) est d’autant plus nécessaire, sous peine d’obtenir l’erreur : PHP Fatal error:  _init() [<a href='function.require'>function.require</a>]: Failed opening required ‘DB.php’ (include_path=’/usr/share/horde3/lib:.:/usr/share/php:/usr/share/pear’) in /usr/share/horde3/lib/Horde/DataTree/sql.php on line 1877

- Sympa : on attaque là le cauchemard de mes migrations. À chaque fois, tellement de soucis majeurs et mineurs, que j’ai l’impression d’être le seul à utiliser ce paquet. Voici en vrac tous les soucis rencontrés : les accents dans les descriptions ont sautés (une sorte de double encodage) et cela a nécessité des corrections manuelles, la table logs_table doit être créée à la main (j’utilise Sympa avec PostgreSQL), et enfin une typo surprenante un “GROUP BY” à la place d’un “ORDER BY” (j’ai ouvert le bug #566252 à ce sujet).

- Asterisk : on passe de la version 1.2 à la version 1.4. Lors de la migration, j’ai constaté un bug étrange, le fichier modules.conf qui charge les modules additionnels a disparu. Du coup, sans lui, Asterisk ne charge pas les modules nécessaires (SIP, etc.). Il a donc fallu le restaurer.

- udev : le meilleur ami des sysadmins (ou pas). Si les migrations douloureuses Sarge->Etch sont loin derrière nous, il reste néanmoins quelques blagues. La dernière en date a été un renommage des interfaces réseau : eth0->eth1 et eth1->eth2. Classique mais étonnant, ce genre d’humour est sensé être dépassé grâce aux “persistent rules” qui nomment les interfaces en fonction de l’adresse MAC. À rester vigilant sur ce point avant le redémarrage donc.

Voilà pour les remarques. Vous noterez que je n’ai pas abordé le noyau Linux. C’est parce que pour la majorité de nos serveurs, ils sont gérés de façons spécifiques (au lieu d’utiliser les noyaux officiels Debian). Ainsi, ils restent dans leur version actuelle (2.6.31 à cette heure) pendant la migration. Bien sûr, cela n’empêche pas d’effectuer un redémarrage de la machine suite à la mise-à-jour : cela permet de s’assurer que tout est bien en place et le sera toujours après un éventuel redémarrage d’urgence.

Rendez-vous pour de prochaines migrations !

24 January, 2010 06:05PM par Gregory Colpart

18 May 2008

Olivier Berger (perso)

Déclaration d'impôts sous Debian testing : difficultés mais contournement trouvé

J'ai essayé de télédéclarer mes impôts sur le revenu depuis ma Debian (testing) avec iceweazel (plugin Java Sun du paquet sun-java5-plugin).

Tou allait bien jusqu'à la phase finale de signature, où j'obtenais des erreurs de ce genre (dans la console Java) :

java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: local/.TaoUSign/libjsec.so
        at java.lang.Runtime.load0(Runtime.java:767)
        at java.lang.System.load(System.java:1005)
        at com.dictao.plfm.a.b(Unknown Source)
        at signview.b(Unknown Source)
        at signview.start(Unknown Source)
        at sun.applet.AppletPanel.run(AppletPanel.java:465)
        at java.lang.Thread.run(Thread.java:619)

Le problème apparemment, c'est que :

$ ldd ~/local/.TaoUSign/libjsec.so 
	linux-gate.so.1 =>  (0xffffe000)
	libnspr4.so => /usr/lib/libnspr4.so (0xb7f14000)
	libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7efc000)
	libnss3.so => not found
	libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7ef7000)
	libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7ed2000)
	libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7d84000)
	/lib/ld-linux.so.2 (0x80000000)

Mais j'ai trouvé le contournement suivant pour que ça passe (après avoir complètement quitté iceweasel) : lancer iceweasel depuis le répertoire contenant libnss3.so, avec LD_LIBRARY_PATH positionnée à "." :

$ cd /usr/lib/iceweasel/
$ LD_LIBRARY_PATH=. iceweasel

Et voilà, ça marche mieux.

18 May, 2008 07:55PM par olberger

15 October 2007

Olivier Berger (perso)

Encore un logo debian détourné ?

Mais d'où vient ce logo

REMOVED

Plus d'infos ou (en noir et blanc).

Update 20071016 : bon, ben, les camarades de la CGT ont réagi promptement et retiré le logo "contrefait". Reste les camarades de coca-cola ;)

15 October, 2007 05:01PM par olberger

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