[Atom] [Mail] [Twitter]
Liens : git · hacks · divers · cabale · buzz! · à propos +
Au menu
\/

Not dead yet: xmltools, long after the summer

#. Par rz0. Publié le 06.04 2010 à 19:29. Un commentaire.
netbsd parsing xmlgrep xmlsed xmltools

Soon, it will be the Summer (of Code) again, and this year, too, NetBSD will be participating.α At around the same time, last year, I was busy writing technical proposals for what would become xmltools, one of the accepted NetBSD SoC projects of 2009. Well, most of you have probably forgotten about that small project; some may even think it was a useless attempt and a waste of time and money, which could have been better spent elsewhere… Err, in fact, I’m writing this to say that my xmltools are not dead! And I still intend to contribute the code to the NetBSD tree sometime in the (near) future.

α : And if you’re a student who’s into systems and stuff, looking for a cool organization to join, with a broad selection of projects, why not give NetBSD a try? :)

That being said, if you take a look at the Git repo, you’ll surely notice that nothing has moved for months… If you fool around a bit more, though, you may notice another project on the same Git host: regxml. Yep, this is a rewrite of my xmltools!

Why a rewrite, you ask? Well, basically because the old implementation was flawed by design, in addition to having become a mess.

The little boring story

And here’s the long answer, for those who care. Feel free to skip this section if it bores you.

During the second part of last year’s SoC, as I was trying to work on xmlsed, I realized my design was flawed. The main problem was that I had based all my efforts around a concept that was, for our purpose, completely inappropriate: node sets.

So what’s a node set? A node set is simply that: a set of nodes. Now, that’s great if you are extracting data from an XML document, as did xmlgrep, but it sucks if you’re going to operate further on that. In particular, removing arbitrary nodes from an XML tree doesn’t yield a tree, and replacing a node set made no sense at all. (How would you replace two far away nodes with one big chunk of XML? There are many ways to go about it… but they’re all wrong IMO.)

So what emerged at the end of the summer was that… I needed a new design, and as my original algorithm had become crippled with dubious ad hoc attempts to support operations that it never could, I needed a new algorithm too. (Besides, there was a deficiency in my algorithm that made it perform in super-polynomial time with some patterns and data sets, which was bad.)

It took me something like one month (since I wasn’t full-time on it) to jot down the new concepts and a (hopefully) good algorithm on paper. Then, for months, I’d try to implement it, but each time, something would feel really wrong, and I’d trash my new implementation. Well, that was till some days ago, when somehow, I got it right, and so the new xmltools were born!

XML intervals

So all this boils down to the following fundamental change: XML node sets have been replaced by XML intervals, as the core objects the xmltools operate on. An XML interval is really just that: a bunch of adjacent siblings and all their children. You should read the included xmltools(7) manual page for more information, from a user’s point of view.

From a more theoretical viewpoint, intervals have two important advantages over sets:

  1. Inserting or removing an XML interval in an XML tree keeps it a tree. In other words, XML trees are stable by insertion and deletion of arbitrary XML intervals. (It may not have any meaning anymore, but remember xmltools are about syntax, not semantics.)

  2. XML intervals map (injectively) to byte intervals in the XML file, hence all editing operations on XML intervals (sequences of insertions and deletions) can be expressed as operations on sequences of bytes in the file itself.

The first property is what I am convinced will make xmlsed possible. Previously, with node sets, it was a nightmare to give proper semantics to the various operations. But now, we have simple objects that still retain a great deal of expressivity but can be manipulated easily, with simple rules.

Although I do not use the second property yet, I’m definitely thinking about introducing an API for that sometime in the (not quite near) future.

The idea is that you run the XML matcher on a file mapped in memory (mapping new chunks as needed), and get a program script consisting of byte operations, that you can then run very efficiently on the memory-mapped file! Instead of printing an interval, you’d just copy over the entire memory region. Instead of deleting an interval, you’d just ignore that chunk. You get the idea. It could be used for efficient processing of massive data with complex transformation rules, but we’re not quite there, yet. :)

xmltools and NetBSD

As I’ve discussed with David (<dyoung>), I intend to import my core library, as well as xmlgrep into base sometime in the near future (once it has undergone more thorough testing). It depends on Expat for XML parsing, so I’ll need to import that too.

After much thinking, I think I’ll settle with a subdirectory in src/external/bsd, though I use the NetBSD build system, as I want to keep my development model using Git, and the ability to easily make packages of all my tools for non-NetBSD platforms.

The new code base uses (Net)BSD idioms more extensively than the old one (because I’ve got the time to read more NetBSD code since I started in May of last year). (E.g. I’ve followed David’s suggestion that I should make use of sys/queue.h.) Quite surprisingly, it compiles almost as is on GNU/Linux, with three additional defines and two trivial functions. I do provide a simple GNU makefile in addition to the default NetBSD build system makefiles, for GNU/Linux builds. Of course, you’re welcome to try to build it on other systems I don’t have access to!

What the future holds

Well, what’ll come next depends on a lot of factors, some of which are completely outside of my control. But there is one thing you can do: please download, compile, read the man pages, and test xmlgrep and give me some feedback, so I can fix bugs!

$ git clone git://git.huoc.org/regxml.git

Or through Git-Web: http://git.huoc.org/?p=regxml.git;a=summary

As far as the xmltools project is concerned, I’m now going to concentrate on xmlsed. I already have an idea of the implementation, and I think it’s not going to be too hard… hopefully, I’m not wrong. :)

P.S.: Oh, I forgot to talk about the new algorithm. Well, to get the idea, it’s basically an automaton backed by a backtracking memoizing work-queue-based interpreter, which roams the XML tree and try to match intervals. You should read the xmltools(7) man page for a high-level overview of the technique. Maybe I’ll write something more consistent on the subject later…

[ tag:blog.huoc.org,2009:posts/48 ]
Voir les commentaires · Commenter

/\ \/

Premiers pas vers un environnement de test NetBSD/Xen

#. Par rz0. Publié le 20.12 2009 à 15:50. 4 commentaires.
débutants ensimag netbsd xen

Loin des préoccupations über-théoriques de bluestorm, ces temps-ci, moi, j’ai essayé de bosser un peu, pour la Junior Entreprise locale. Autant dire que ça ne se passe pas tellement bien : on manque de main d’œuvre compétente et sérieuse, et honnêtement, ça m’irrite au plus haut point que le client soit perpétuellement déçu de notre travail ; c’est comme si je faisais du mauvais travail, mais franchement, si je savais que je me taperais autant de glands à gérer et autant de boulot pour lequel je n’ai pas signé, je n’aurais jamais accepté ce job. Bref, paraît qu’il y a des années avec et des années sans, bah là c’est clairement une année sans.

Tout ceci me mène à une petite anecdote : au cours de mon travail, je suis amené à tester le produit que je développe (la nature duquel est un secret…) dans une perspective de déploiement sur serveur. Récemment, je me suis heurté à des bugs que je n’arrive pas à reproduire sur ma machine de développement, pour une raison ou pour une autre (je n’ai pas encore réglé le souci), qui semble être liée au déploiement lui-même, du moins la configuration employée. Du coup, pour bien faire, je me suis dit que j’allais monter un petit serveur de test… un petit serveur virtuel !

Et ça tombe bien, j’ai toujours trouvé que Xen, ça avait l’air sympa ! Et en plus, chez NetBSD, on semble accorder une certaine importance au support Xen, ce qui est plutôt cool. Je me suis donc mis en tête de configurer un joli petit environnement NetBSD+Xen, le but étant d’avoir un serveur virtuel tournant sur une NetBSD vanilla, avec le minimum de paquetages nécessaires au déploiement de mon application. Bref, un truc propre.α

α : Le véritable serveur tourne sous Linux, mais pour du test rapide, il est beaucoup plus simple pour moi de virtualiser du NetBSD ; j’écrirai peut-être un autre billet, si je me fais un test Linux+Xen.

Xen pour les innocents

Pour me la jouer à la blueblue, je vais dire deux mots pour ceux qui ne connaîtraient pas le principe. Ahem, donc pour ceux qui ne connaîtraient pas, Xen est une solution de virtualisation,β comme VirtualBox… mais pas tellement en fait.

β : … principalement destinée aux serveurs, mais hey !

Avec VirtualBox, vous avez votre système normal et par-dessus, un petit logiciel qui fait tourner en son sein un autre système d’exploitation.

Xen est un peu différent. Vous ne pouvez pas simplement lancer Xen depuis votre système préféré, comme vous lanceriez un programme quelconque… c’est en fait plutôt l’inverse : Xen est une espèce de méta-système (un hyperviseur) qui va se charger de lancer vos systèmes d’exploitation un à un ! Si donc avant vous aviez, disons une Ubuntu avec une NetBSD dans votre VirtualBox, vous auriez maintenant l’hyperviseur Xen, et deux domaines (c’est comme ça que ça s’appelle dans Xen) : votre Ubuntu, et votre NetBSD.γ

γ : Pour tout vous dire, ce n’est probablement pas le meilleur choix… Ubuntu ne semble pas intégrer, dans sa ligne de développement centrale le support de Xen. Voyez la documentation communautaire d'Ubuntu sur Xen pour plus de détails.

Tous les domaines ne sont pas égaux pour autant : il y a toujours un système principal, appelé dom0 (domaine 0) ; les autres sont les domaines U (domU). Le dom0, c’est un peu le root de tous vos domaines : il a tous les pouvoirs, tandis que les autres ont des droits restreints, notamment concernant l’accès au réseau et au matériel. Au démarrage, Xen lance le dom0, qui a à sa charge de créer les domU qu’il désire (ou plutôt d’ordonner à Xen de les créer). Dans notre exemple, Ubuntu est le dom0, et NetBSD, le seul domU.

La dernière chose à savoir est que pour pouvoir être géré par Xen, il faut que le noyau soit conçu pour dialoguer avec l’hyperviseur, qui fait office d’abstraction entre la machine et le système. Il y a des noyaux dom0 et des noyaux domU. NetBSD propose dans sa distribution officielle des noyaux dom0 et domU ; sous Gentoo, compiler un noyau Xen est juste une histoire de changer de paquetage sources ; je ne sais pas trop ce qu’il en est des autres distributions Linux…

Bref, si vous ne connaissiez pas Xen, voilà qui est réglé. Il est temps de passer aux choses sérieuses…

Notes d’installation

Peut-être parce que c’est destiné à des mecs un peu underground, des sysadmins et tout, il n’y a pas beaucoup de tutos sur Xen… du moins, il y en a, mais beaucoup ne sont plus à jour et offrent des informations périmées. Notamment, le howto officiel de NetBSD/xen est, en l’état, incorrect.δ C’est fort dommage car mettre en place un environnement Xen avec NetBSD est en réalité très simple… pour peu que l’on sache comment s’y prendre.

J’offre ici mes humbles notes d’installation. Sait-on jamais, peut-être mon expérience servira-t-elle à quelqu’un.

δ : Si je mets la main sur ces permissions de commit un jour, je devrais ptet y faire quelque chose… Normalement, je fais signer ma clef GPG ce lundi !

  1. Si NetBSD est livré avec tout ce qu’il faut pour le faire tourner comme domaine Xen, Xen lui-même (l’hyperviseur et les outils pour le contrôler depuis le dom0) est à installer via pkgsrc. Il y a un jeu de paquetages par version majeure de Xen. Dans mon cas, j’ai pris la 3 :

    # cd /usr/pkgsrc/xenkernel3 && make install
    # cd /usr/pkgsrc/xentools3 && make install
    

    Le noyau Xen s’installe très logiquement dans la hiérarchie /usr/pkg. À l’heure où j’écris ces lignes, le fichier en question est /usr/pkg/xen3-kernel/xen.gz.

    On aura aussi besoin de scripts de démarrage pour les démons Xen xend et xenbackendd. J’ai simplement recopié ceux fournis à l’endroit habituel :

    # ln -s /usr/pkg/share/examples/rc.d/xend /etc/rc.d/
    # ln -s /usr/pkg/share/examples/rc.d/xenbackendd /etc/rc.d/
    

    Pour l’instant, ces démons ne font rien ; ils ne peuvent même être lancés (mais on peut déjà les ajouter dans le rc.conf, histoire de ne pas oublier). Il nous manque un dom0…

  2. Concernant le dom0, la bonne nouvelle, c’est que seul le noyau a besoin d’être modifié : juste en changeant de noyau au démarrage, on peut décider d’utiliser Xen ou pas, tout ça avec le même jeu de programmes, les mêmes disques et systèmes de fichiers, etc.

    Pour se faire un noyau dom0, rien de plus simple : un noyau dom0 est fourni avec NetBSD (XEN3_DOM0) ; en partant de sa configuration, j’ai simplement modifié le fichier à ma convenance (comme j’ai fait pour le noyau GENERIC, pour obtenir ma configuration non Xen), puis config et make ont fait le reste, comme d’habitude :

    # cd /usr/src/sys/arch/conf/
    # cp XEN3_DOM0 ELHAYM_DOM0
    # emacs ELHAYM_DOM0
    # config ELHAYM_DOM0
    # cd ../compile/ELHAYM_DOM0
    # make depend && make
    # cp netbsd /netbsd-dom0
    

    Pour avoir testé, il est sensiblement plus difficile de partir de la configuraiton personnalisée (dérivée de GENERIC) pour la rendre compatible avec Xen, que de partir de la configuration Xen pour l’adapter à la machine…

    Quelques défauts remarquables du noyau compatible Xen par rapport à un noyau NetBSD normal :
    • pas de SMP ;
    • pas de changement de fréquence SpeedStep du processeur (corrigé dans NetBSD-current, il me semble) ;
    • l’ACPI a quelques soucis chez moi (le poweroff ne fonctionne pas et la machine s’arrête simplement, sans s’éteindre)…
  3. Une fois le nouveau noyau fraîchement compilé, il suffit d’ajouter la ligne correspondante dans le boot.cfg. Autrefois, il fallait passer par Grub, à la place du bootloader NetBSD ; ce n’est plus le cas aujourd’hui, et tant mieux ! Les manips sont d’autant plus simple.

    À noter que la ligne à ajouter ne lance pas le nouveau noyau directement ; elle doit lancer l’hyperviseur, en lui indiquant le chemin du dom0. Quelque chose comme ceci (dans boot.cfg, il faut placer les instructions sur une seule ligne en les séparant par des points-virgules, bien sûr) :

    load /netbsd-dom0 console=pc
    multiboot /usr/pkg/xen3-kernel/xen.gz dom0_mem=max:1536M
    

    Limiter la mémoire pouvant être allouée au dom0 permet d’être sûr de pouvoir créer les domU quand on en a besoin. Je n’ai pas trouvé d’autre moyen de réduire la mémoire consommée par un domaine.

  4. Vient ensuite le domU, la configuration duquel est contrôlée par un fichier, que j’ai, pour ma part, simplement emprunté aux exemples fournis avec le paquetage :

    # cp /usr/pkg/share/examples/xen/netbsd1 /usr/pkg/etc/xen/test
    

    Le fichier est commenté, et c’est plutôt explicite. Cependant, quand on débute dans ce vaste monde, comme moi, ce n’est pas forcément évident pour autant…

    1. Tout d’abord, ça paraît stupide, mais domU, au départ, correspond à une machine vierge, sans système d’exploitation. Cela ne sert donc pas à grand chose de charger un noyau domU (par exemple le noyau XEN3_DOMU standard de NetBSD) vu qu’il ne trouvera rien sur le disque… Il faut en fait charger un noyau d’installation (INSTALL_XEN3_DOMU), qui contient un ramdisk avec sysinst.

      #kernel = '/netbsd-domu'
      kernel = '/netbsd-install-domu'
      
    2. La seconde variable d’intérêt s’appelle disk. Elle décrit les disques virtuels disponibles à l’intérieur du domU. Créer un disque virtuel vivant dans un fichier est le plus simple :

      vif = ['file:/var/xen/images/test.img,0x01,w']
      

      Pour l’installation du domU (avec le noyau d’installation), il ne faut pas non plus oublier de configurer le disque virtuel correspondant au CD-ROM contenant les sets d’installation NetBSD (les gros fichiers .tgz contenant l’userland précompilé) :

      vif = ['file:/var/xen/images/test.img,0x01,w',
             'file:/var/xen/images/install.iso,0x02,r']
      

      L’ISO se télécharge simplement sur un miroir NetBSD, dans le dossier iso/ (séparé des autres dossiers de fichiers d’installation).

      Ces disques apparaîtront dans le domU NetBSD sous la forme de périphériques xbd (le premier étant xbd0, le second xbd1, etc.). D’autres systèmes interprètent cela différemment.ε

      ε : Sous Linux, le second paramètre de la description du disque virtuel spécifie le périphérique à créer dans le domU.

      Le seul point délicat sur lequel je suis tombé est que pour utiliser un fichier en guise de disque virtuel (file:), il faut absolument que ce fichier ne soit pas creux (sparse), sans quoi vnd(4), le périphérique virtuel permettant de monter un fichier comme un disque, est incapable de fonctionner correctement.

      En pratique, cela signifie utiliser dd count=N plutôt que dd seek=N pour créer le fichier.

    3. Enfin, la configuration du réseau mérite un point à elle toute seule. Le principe est que Xen expose deux interfaces réseau (type Ethernet) connectées : une du côté domU (qui s’appelle xennet sous NetBSD) et une du côté dom0 (xvif sous NetBSD).

      Ce qui est fait de ces interfaces est laissé libre à l’administrateur, et est typiquement contrôlé par des scripts. Il y a deux scripts fournis avec le paquetage, vif-bridge et vif-ip, permettant respectivement d’obtenir un pont (bridge(4)) ou une simple IP statique privée associée au domU.ζ

      Pour ma part, j’ai choisi la seconde solution, car elle me convient mieux. Je n’ai pas besoin d’accéder à Internet depuis mon domU, et si cela devait se présenter, je pense que j’essaierai de mettre en place de la redirection, et du NAT. Pour utiliser par défaut vif-ip, il suffit de modifier le fichier de configuration de xend (/usr/pkg/etc/xen/xend-config.sxp, syntaxe s-exp, d’où le nom) :

      (vif-script vif-ip)
      

      Avec une telle configuration, la ligne de configuration du vif ressemble à :

      vif = ['ip=192.168.127.2 netmask 255.255.255.0']
      

      La valeur du sous-paramètre ip est simplement passée à ifconfig(8) pour configurer l’interface xvif (côté dom0). Le script ajoute automatiquement le sous-réseau mentionné (ici 192.168.127/24) dans la table de routage afin de diriger le trafic en direction de celui-ci à travers la bonne interface xvif. Cela signifie, en bref, qu’il suffit de donner une adresse IP appartenant au même sous-réseau à l’interface xennet, du côté du domU, et tout marche comme si les deux domaines étaient sur un même réseau !

      ζ : Le script proposé dans le howto NetBSD/xen est périmé. Celui fourni avec le paquetage semble très bien marcher.

    Une fois le fichier de configuration écrit, il suffit de faire appel à xm create, et tak.

  5. L’installation se passe comme une installation classique, par CD-ROM (à part que le périphérique CD est ici xbd1). Une fois terminée, il suffit de changer de noyau (dans le fichier de configuration du domU), et hop ! Une fois les briques de base en place, on peut passer à l’installation des paquetages que l’on veut.

    Pour ça, j’ai utilisé la solution cheap : un chroot(8) dans le vnd(4), en réutilisant les paquetages précompilés par pkgsrc pour ma NetBSD principale (avec un petit mount_union(8)).

    # vnconfig vnd0 /var/xen/images/test.img
    # mount /dev/vnd0a /mnt/
    # mkdir /mnt/usr/pkgsrc/
    # mount -t union -o -b /usr/pkgsrc/ /mnt/usr/pkgsrc/
    # chroot /mnt/ /bin/sh
    # export PKG_PATH=/usr/pkgsrc/packages/All/
    # pkg_add ...
    

    Et voilà ! Un joli environnement de test. :)

Impressions

Avec tout ça, j’ai un truc qui tourne. Je peux même tout simplement copier le disque en l’état, pour produire des environnements de test en masse.

Ceci dit, même si je considère Xen comme une technologie « cool », tout n’est pas rose. Au-delà des défauts que possède la version dom0 de NetBSD (principalement l’absence de SMP), j’ai eu du mal à trouver de la doc pertinente, et c’est un gros problème pour l’adoption de Xen par un public moins gurutique, à mon avis.

Cela mis à part, comme dit plus haut, je trouve, à titre personnel, que Xen avec NetBSD, c’est plutôt facile à mettre en place une fois que l’on a compris le truc ; et même si la doc comporte quelques erreurs, à l’heure actuelle, cela donne une bonne base sur laquelle partir.

Je ne sais pas ce qu’il en est des distributions Linux. J’entends souvent les gens opposer KVM à Xen. Je ne connais pas KVM donc je ne saurais pas trop dire ce qu’il en est. Mais du coup, il semblerait que l’adoption de Xen dans le monde Linux soit moindre… dommage ? Je ne saurais pas dire.

[ tag:blog.huoc.org,2009:posts/35 ]
Voir les commentaires · Commenter

/\ \/

Le Wifi du CROUS : guide de survie

#. Par rz0. Mis à jour le 20.02 2010 à 10:02. Aucun commentaire.
crous ensimag linux netbsd wifi

Arrivé sur Grenoble, j’étais tout content de découvrir que le CROUS m’offrait gratuitement l’accès à Internet par le biais de Renater et d’installations Wifi. J’ai vite déchanté en voyant la qualité de la connexion. Autant le débit est tout à fait acceptable pour une connexion partagée (il va de soi qu’en téléchargement montant vous n’avez rien ou presque, ceci dit), autant la stabilité de la connexion laisse tout à fait à désirer.

Ce petit guide sans prétention vous fait part de mon expérience avec ce réseau capricieux ainsi que mes petites astuces sur comment y survivre malgré tout.

Cet article ne s’adresse évidemment pas aux gens qui utilisent Windows, n’ayant pas Windows moi-même, sur mon portable, je ne saurais les conseiller.

Avant d’entrer dans le vif du sujet

Je tiens à préciser que ceci n’est pas un guide de configuration (mais plutôt de dépannage), parce que j’estime qu’il y en a déjà suffisamment sur la Toile, mais surtout parce que j’ai la flemme !

Afin de vous donner quelques pistes de recherche, toutefois, voici les programmes dont vous aurez besoin pour faire tourner la machine. Mieux vaut les avoir préparés avant d’atterrir sur le campus !

  • Un noyau qui supporte votre carte Wifi, c’est bête mais…

  • wpa_supplicant, pour établir la connexion avec les points d’accès du CROUS. En vérité, celle-ci s’opère sans authentification (déléguée au VPN), mais wpa_supplicant, malgré son nom, gère également les réseaux en WEP, ou sans sécurité aucune. Entre autres, il permet de gérer plusieurs réseaux alternatifs, ce qui permet de faire cohabiter votre réseau à la maison familiale, pour quand vous rentrez chez vous, avec celui de votre école (p.ex. l’Ensimag a son propre réseau), et celui du CROUS, par exemple.

    Vous pourriez être tenté d’utiliser quelque chose comme NetworkManager. Si tel est le cas, sachez que ce guide ne vous sera pas d’une grande utilité, car ce logiciel a tendance à masquer toutes les manipulations que je présente ici, et je ne saurais dire si les commandes que je donne auront les effets escomptés en présence de NetworkManager.

  • dhclient (ou un autre client DHCP), sans quoi vous aurez une connexion sans avoir d’IP…

  • vpnc, le client libre compatible avec les réseaux VPN de Cisco. Le client officiel, sous licence propriétaire, est à la fois instable et indisponible sous BSD.

  • OpenSSH, si vous souhaitez utiliser des tunnels (et si vous avez un serveur pour les héberger, celui de votre école peut faire l’affaire). Si votre utilisation d’Internet ne se limite pas au Web, vous en aurez sans doute besoin.

Le VPN (Very Private Network)

Il y a beaucoup de gens qui appréhendent l’usage de cette chose qu’est le VPN, alors qu’en vérité, les problèmes commencent après. L’usage du VPN est simple, il suffit de suivre les divers guides (disponibles pour Linux et Unix !) mis à votre disposition, ou de demander à quelqu’un du service informatique de votre école. Ou encore, plus simplement, il vous suffit d’installer vpnc (p.ex. via le gestionnaire de paquets de votre distribution Linux), et de récupérer les paramètres du réseau VPN, voire un fichier de configuration déjà fait (ne pas oublier de le convertir, s’il est au format Cisco VPN, avec pcf2vpnc).

La seule chose à laquelle il faut faire attention est, si vous utilisez un noyau compilé par vos soin : il faut activer le support du tunnel générique (TUN/TAP).

Limitations explicites du réseau

Officiellement, vous êtes encouragé à vous limiter à des activités purement scolaires au sein du réseau ; certains manuels sont plus indulgents et parlent de trafic personnel raisonnable. Il va de soi que je ne vous conseille pas de faire de gros téléchargements depuis le réseau du campus ; ce serait une perte de temps pour vous et un dérangement pour les autres.

Cependant, la tentative de contrôle imposée par l’administration du réseau, consistant à bloquer certains ports en sortie, peut être très gênante pour un nombre de choses utiles, notamment vous connecter en SSH à votre serveur à votre domicile familial, par exemple pour faire une sauvegarde de vos données importantes (on n’est jamais trop prudent). Le FTP ne marche d’ailleurs pas mieux.

13 juin 2009. Depuis quelques jours, j’ai remarqué que le port CVS est ouvert en sortie ; il est donc possible, par exemple, de mettre à jour son arbre de ports ou sa dernière version d’Emacs… Cela paraît d’autant plus aberrant que le port FTP est demeuré fermé.

Sessions et tunnels SSH

Si votre école vous offre un environnement moins restrictif (et c’est mon cas, avec l’Ensimag),α vous pouvez vous connecter en SSH là-bas pour ensuite faire vos petites manipulations. Ou vous pouvez créer un tunnel SSH. Si vous ne connaissez pas, il s’agit de l’option -L de la ligne de commande ou LocalForward du fichier de configuration.

Par exemple :

$ ssh -L 2806:chez.moi:22 telesun

α : 20 février 2010. Depuis fin janvier, l’Ensimag filtre également agressivement sur les ports en sortie. Entre autre, on ne peut plus utiliser ni FTP, ni CVS, ce qui s’avère très gênant pour la mise à jour de ma NetBSD… m’enfin, on se débrouille toujours.

sshd sur un autre port

Si vous avez un peu de contrôle sur votre réseau à votre domicile et que le port 80 n’est utilisé par rien d’autre, simplement faire écouter sshd sur celui-ci marche bien et le réseau du campus ne bronche pas quand vous parlez SSH sur le canal normalement réservé au HTTP.

Vous pouvez également utiliser le port 443, celui d’HTTPS, qui est également ouvert, sur le réseau du campus, si cela vous convient mieux. C’est ce que je fais.

Améliorations : clés SSH et ssh-agent

Honnêtement, si vous prévoyez d’utiliser massivement SSH, pour rediriger votre trafic sur une machine qui vous permet d’accéder à des services indirectement, je vous conseille vivement de vous créer une paire de clés publique/privée et un compte dédié sur votre serveur, acceptant ces clés, dénué de tout droit et servant uniquement à la mise en place du tunnel.

Une alternative, si l’idée d’un tel compte vous semble inacceptable, est d’utiliser ssh-agent, pour n’avoir à taper votre passphrase qu’une seule fois.

Vous pouvez même pousser le vice plus loin en ajoutant le module d’authentification PAM pam_ssh à la configuration de votre gestionnaire de connexion (si bien sûr il utilise PAM). Il s’agit d’inclure une ligne de ce genre au début du fichier du service PAM concerné :

auth	sufficient	pam_ssh.so	no_warn try_first_pass

pam_ssh vous permet de taper votre passphrase en guise de mot de passe de connexion et se charge de lancer ssh-agent pour vous. Que demander de plus ?

Problèmes avec le Wifi

Des problèmes avec le Wifi, j’en ai rencontré un certain nombre : les deux plus agaçants étant, en grand numéro 1, les fréquentes déconnexions, suivi, de très loin par le débit qui décroît parfois assez violemment.

Régulièrement, le VPN ou le Wifi, ou les deux, va périr. Pour diagnostiquer la panne, plusieurs méthodes. Aucune n’est 100% fiable, mais elles donnent toutes des informations utiles, selon le cas.

  1. Le premier réflexe est de regarder la liste des processus. Si certains manquent, vous savez d’où vient le problème…

  2. Un autre moyen de dépister le problème (dans le cas du Wifi, ça ne marche évidemment pas pour le VPN), et qui est peut-être meilleur (entendez par là qu’il s’agit peut-être du problème le plus courant), est d’utiliser wpa_cli status. Regardez par exemple la ligne wpa_state.

  3. Si cela ne résout pas le problème, la netstat -r peut vous aider à y voir plus clair : ils permettent d’identifier les chemins (littéralement « itinéraires », routes en anglais) empruntés par les paquets du réseau.

    En temps normal, vous devriez voir une interface tun (le tunnel VPN) et une interface correspondant à votre carte Wifi (p.ex. wlan sous Linux, ou wpi pour ma carte Intel sous NetBSD).

    En cas de problème, certains chemins au réseau peuvent disparaître. Si l’interface tun n’est plus présente, c’est vpnc qui est mort. Si c’est l’interface de votre carte Wifi, c’est le Wifi qui est en cause.

    Un autre problème assez courant est que certains chemins demeurent alors même que la connexion est morte ou a changé. Les symptômes sont typiquement : vous êtes connecté et wpa_cli status vous retourne des informations crédibles mais vous ne pouvez accéder à aucun autre hôte du réseau, même pas votre passerelle ou vos serveurs DNS. Dans ce cas, il faut supprimer les chemins erronés avec route del (Linux) ou route delete (NetBSD) (généralement la passerelle par défaut, default, suffit) et rétablir la connexion.

  4. Enfin, un simple ping sur TCP (ICMP est bloqué, vous pouvez utiliser par exemple echoping) peut également vous être utile pour apprécier l’état général de la connexion.

Solutions

Si c’est vpnc, il suffit de le relancer, en revanche, si c’est le Wifi (et il m’a fallu pas mal de temps pour m’en rendre compte), c’est probablement que vous avez été déconnecté et qu’en même temps, votre liste de points d’accès s’est vidée ! La solution ? Rescanner la liste des points d’accès, avec par exemple :

# wpa_cli scan

Quelques fois, wpa_cli status vous indiquera un état valide (ASSOCIATED) mais vous n’aurez aucune IP attribuée : relancer le client DHCP peut être nécessaire. La plupart du temps, il s’agit de dhclient, mais selon le système, cette démarche peut être couplée avec le redémarrage du service réseau tout entier : par exemple, /etc/init.d/net.wlan0 restart sous Gentoo mais simplement /etc/rc.d/dhclient restart sous NetBSD.

Quant au problème de débit misérable, si iwconfig (sous Linux) ou autre wlanctl (sous NetBSD) vous indique un [Bit] rate minable, vous pouvez sans doute y remédier avec un wpa_client reassociate.

Automatiser le processus

Toute cette surveillance est fastidieuse et l’on est vite tenté de vouloir l’automatiser. Cela peut se faire par exemple avec un script tournant en fond qui échantillonne périodiquement l’état de la connexion et tente de remédier aux problèmes.

Ce n’est pas une tâche aisée, cependant, car le diagnostic peut être délicat. Un petit script peut toutefois du moins vous épargner de retaper les trois ou quatre commandes servant à relancer l’ensemble des services nécessaires.

Je vous mets à disposition mes deux petits scripts pour NetBSD, qui sont très loin d’être parfaits (je me retrouve de temps en temps à devoir faire sudo do_wifi all à la main), mais qui peuvent servir de point de départ ou de source d’inspiration pour élaborer les vôtres. :)

do_wifi
Le script principal.
do_sshtunnel
Trois lignes de shell qui démarrent mon tunnel SSH.

Fin

Bah voilà, c’est fini et c’est la vie, mais avec ça et un peu de documentation, vous devriez avoir une connexion Internet correcte sur le campus, si ce n’était pas déjà fait, mais cette fois, aux frais du CROUS.

[ tag:blog.huoc.org,2009:posts/41 ]
Aucun commentaire · Commenter

/\ \/

NetBSD, le bilan, deux mois après

#. Par rz0. Publié le 01.07 2009 à 15:54. 4 commentaires.
gentoo netbsd pkgsrc portage

Cela fait deux mois, tout juste, que je suis passé à NetBSD. Il est temps de faire un petit bilan.

Pour rappel, j’avais migré depuis Gentoo, que j’ai utilisée exclusivement pendant plus de quatre ans (et qui demeure sur mon poste fixe, qui héberge notamment ce site). Mon expérience est donc intimement liée à la comparaison entre Gentoo et NetBSD.

Les versions données sont à titre indicatif et correspondent à l’état des choses lorsque j’ai quitté Gentoo.

Matériel

Question compatibilité matérielle, NetBSD ne s’en sort pas aussi bien que Linux, mais le système est tout à fait utilisable. Quelques pièces importantes :

  Gentoo NetBSD
Intel GM965 xf86-video-intel (2.6.x) Mauvais xf86-video-intel (2.4.x) OK, pas de DRI
Intel HDA / Sigmatel STAC9228X snd-hda-intel OK azalia + patchα OK
Intel Wifi 3945ABG iwlwifi OK wpi OK
Marvell Yukon FE+ E8040 sky2 OK msk non fonctionnel
Touchpad Synaptics xf86-input-synaptics OK xf86-input-mouse + wsmouse Médiocre
Lecteur de cartes sdhci OK Non fonctionnel

α : La sélection du codec était incorrecte, je n’ai fait que changer une ligne de code du pilote ; les messages de debug spécifiques au pilote, à activer dans le noyau ont beaucoup aidé.

Applications

Niveau applicatif, mis à part Valgrind dont les auteurs préfèrent se soucier d’OS X plutôt que de BSD pour des questions de part de marché, errr, je devrais dire de nombre d’utilisateurs potentiels, j’ai retrouvé mes logiciels favoris :

  Gentoo Portage NetBSD pkgsrc
Emacs emacs-cvs (23.x) emacs-{snapshot,current} (23.x)
Wanderlust wanderlust (2.14.x) + patchβ wl (2.14.x) + patchβ
Firefox firefox (3.0.x) firefox (3.0.x)
Ratpoison ratpoison ratpoison
mplayer mplayer + codecs mplayer + codecs
xpdf xpdf (+ lesstif) Médiocre xpdf (+ lesstif) Médiocre
gqview gqview gqview + patchγ
Git git scmgit

β : Il s’agit en fait d’un patch pour FLIM qui désactive les encodages internes incompatibles avec Emacs-23 et utilise mimencode(1) à la place.

γ : Ce patch n’est pas nécessaire mais ajoute une fonctionnalité qui m’est agréable (le défilement avec la barre d’espace qui continue sur l’image suivante si l’on est en bas). Il n’était pas présent sur ma Gentoo pour la simple raison que je ne l’avais pas encore écrit.

Gestion des logiciels

Gentoo a Portage et NetBSD a pkgsrc. Clairement, du point de vue de l’utilisateur, Portage est plus agréable. Et pkgsrc nécessite un certain nombre d’outils, au choix (pkg_rolling-replace et pkg_chk, pour ma part), pour être tout à fait efficace. Les deux gestionnaires ont sûrement de grandes qualités qui dépassent mon utilisation ; je me contenterai ici de comparer quelques fonctionnalités utiles au quotidien.

Il est à noter que pkgsrc laisse le choix de la méthode, la plupart du temps, aussi, j’expose ici mes solutions ; celles-ci n’engagent que moi.

  Gentoo Portage NetBSD pkgsrc
Mise à jour (arbre) emerge --sync cvs up -dP
Mise à jour (sécurité) emerge --sync pkg_admin fetch-pkg-vulnerabilities
Mise à jour (logiciels) emerge -uDN pkg_rolling-replace -u
Installation emerge make install
Suppression emerge -C make deinstall
Examen des mises à jour emerge -pvuDN pkg_chk -uq
Examen des options emerge -pv make show-options
Examen des dépendances emerge -pv make sid ou make show-needs-updateδ
Recherche eix pkgsrc.se ou grep, find, etc.
Rapports de sécurité glsa-check pkg_admin audit
Modif. locales (arbre) overlay Git
Modif. locales (logiciels) overlay + patches LOCALPATCHES
Bidouille bash, python BSD make

δ : Visiblement, la cible show-needs-update est dépréciée mais je ne lui connais aucun remplaçant adéquat.

Configuration

Le dernier point que j’aborderai est la configuration. Si déjà sous Gentoo, on peut dire que j’écrivais la plupart de mes configurations manuellement, avec Emacs ou vi, mon passage à NetBSD a poussé le concept un peu plus loin. En effet, contrairement à portage, pkgsrc n’effectue guère de maintenance des fichiers du système tels que les pages info ou les polices installées. Tout cela doit être géré par l’administrateur. De même, comme je l’ai expliqué dans un billet précédent, NetBSD en lui-même n’offre aucune option de configuration UTF-8 globale ; celle-ci se fait séparément pour chaque composant qui en a besoin.

Au final, seuls quelques scripts (dont les scripts de démarrage) sont fournis par le système, et les quelques configurations propres à NetBSD sont transparentes (il s’agit, la plupart du temps, de décider quels arguments passer à différentes commandes d’administration).

Personnellement, j’apprécie cette simplicité, et ce « retour aux sources » m’a permis d’en apprendre un peu plus sur certains points d’administration que j’avais eu tendance à oublier, dans ma paresse, me laissant aller à confier certaines choses à Gentoo, conforté par le fait que cela fonctionnait sans interventions de ma part.

[ tag:blog.huoc.org,2009:posts/13 ]
Voir les commentaires · Commenter

/\

UTF-8 sous NetBSD

#. Par rz0. Publié le 08.06 2009 à 01:31. Aucun commentaire.
netbsd utf8 x11

Depuis quelques temps, voilà que j’ai migré de Gentoo à NetBSD. Pour rappel, le passage à X.org 1.5 et xf86-video-intel 2.6 avait tout cassé. Quitte à tout downgrader, j’ai pensé que c’était le bon moment de (re)tenter l’aventure NetBSD !

La transition ne fut pas sans problèmes et l’une des contrariétés majeures était l’impossibilité de passer totalement en locale UTF-8 (pour LC_CTYPE du moins). Dans n’importe quelle locale UTF-8, une partie des programmes graphiques refusait de fonctionner correctement : problèmes de polices ou de méthode de saisie (input method), xterm avait du mal et certains gestionnaires de fenêtrage (twm, ratpoison) refusaient carrément de se lancer !

Hier, en fin d’après-midi, j’ai enfin résolu les divers problèmes (qui provenaient en réalité d’une unique source), et réussi à passer tout mon système graphique en UTF-8 !

Le problème provenait de la configuration par défaut de la locale UTF-8 (car il n’y en a en réalité qu’une seule, en_US.UTF-8, pour presque toutes les langues, les autres n’étant que des synonymes) au sein du framework XI18N, visiblement emprunté à Sun, et qui en a gardé les traces… les modules utilisés par en_US.UTF-8 étaient des modules spécifiques à Xsun, non fournis par X.org. Un simple changement du fichier /usr/X11R7/lib/X11/locale/en_US.UTF-8/XI18N_OBJS (recopie de quelques lignes d’autres locales) a suffit. Le support de l’Unicode n’est sans doute pas génial avec les modules par défaut, sans doute moins adaptés que ceux de Sun, mais ceux-ci ont le mérite d’exister !

Pour mémoire, voici le patch que j’ai appliqué :

--- a/XI18N_OBJS	2008-07-30 04:43:01.000000000 +0200
+++ b/XI18N_OBJS	2009-06-06 19:09:30.000000000 +0200
@@ -3,6 +3,8 @@
 #      XI18N objects table for euro locales
 #
 XLC    common/xlcUTF8Load      _XlcUtf8Loader          # XLC_open
-XOM    common/xomLTRTTB        _XomGenericOpenOM       # XOM_open
-XIM    common/xiiimp           _SwitchOpenIM           # XIM_open
-XIM    common/xiiimp           _XimpLocalOpenIM        # XIM_open
+#XOM   common/xomLTRTTB        _XomGenericOpenOM       # XOM_open
+XOM    common/xomGeneric       _XomGenericOpenOM       # XOM_open
+#XIM   common/xiiimp           _SwitchOpenIM           # XIM_open
+#XIM   common/xiiimp           _XimpLocalOpenIM        # XIM_open
+XIM    common/ximcp            _XimOpenIM _XimRegisterIMInstantiateCallback  _XimUnRegisterIMInstantiateCallback       # XIM_open      XIM_register XIM_unregister

Avec tout ça, tout marche parfaitement (du moins aussi bien que sous ma Gentoo) et j’ai maintenant dans mon .profile :

export LC_CTYPE=fr_FR.UTF-8

Un effet secondaire sympathique de toutes ces manipulations est le retour dans Emacs des touches mortes dans toute leur splendeur ; j’avais dû recourir à iso-transl, lorsque je tournais en locale C. Mais à présent, le serveur X gère à nouveau les compositions comme un grand, et Emacs est content, sans avoir besoin d’aucune extension !

[ tag:blog.huoc.org,2009:posts/2 ]
Aucun commentaire · Commenter