Skip to content

Entries from February 2010.

Vole libellule, vole !

J’ai enfin pu m’installer un BSD utilisable sur mon desktop ! Ça faisait longtemps que je le voulais, mais le problème venait de la carte wifi, sans drivers sous BSD (elle passait sous FreeBSD avec ndisgen, mais je préfère éviter ça). J’ai donc fait l’acquisition d’une nouvelle carte wifi censée être supportée par rum(4), et à part quelques problèmes, désormais résolus, ça fonctionne à merveille.

J’ai d’abord regardé du côté de NetBSD, qui fonctionnait plutôt bien excepté pour le wifi. J’obtenais par moment 50% voire 75% de paquets perdus lors d’un ping(8). Je me suis alors tourné vers DragonFly BSD, ceux qui ajouté le driver bwi(4) qui a ensuite été repris par OpenBSD (en 4.3), puis par FreeBSD (en 8.0) et il est toujours en -current chez NetBSD et devrait être inclut dans NetBSD 6.0.

USB

Après l’installation, l’USB n’était pas détecté par l’OS à cause du support Plug And Play du BIOS, il suffit donc le désactiver cette option ainsi que le support USB (sinon on se retrouve avec énormément d’interruptions, ce qui rends le système peu utilisable).

On peut se rendre compte de la non-détection des périphériques USB via usbdevs(8):

# avec le support PnP et USB activés dans le bios:
$ usbdevs -v
usbdevs: no USB controllers found

Par contre, en désactivant le support de l’USB dans le BIOS, on perd la possibilitée d’utiliser un clavier USB avec GRUB et avec le bootloader de DragonFly BSD.

Wifi

J’ai donc acheté une carte wifi USB pour pouvoir me passer de mes cartes Broadcom (BCM3418 sur le desktop et BCM4312 sur le netbook), même si la BCM4318 est supportée par bwi(4) (le driver fonctionne, mais est inutilisable, les vitesses de téléchargement sont de l’ordre du bit par seconde). La nouvelle carte est une TP-Link TL-WN321G, du chipset rum(4), et est détectée directement (à partir du moment où l’USB fonctionne). Un petit coup d’ifconfig(8) et de route(8), et hop, on est connecté. Le driver à l’air de fonctionner assez bien la plupart du temps, même si il lui arrive d’avoir un comportement bizarre (le débit tombe parfois aux alentours des 20kB/s, sans raison apparente)

Configuration

Je vais indiquer ici les étapes de la configuration qui ne sont pas mentionnées dans la documentation de DragonFly BSD. Lors d’une première installation, le handbook est très pratique mais il faut savoir chercher par soi même car il n’est pas totalement à jour (par exemple, depuis la version 2.4 DragonFly utilise un /dev dynamique, ce qui n’est mentionné nulle part dans le handbook où ils utilisent le vieux /dev/MAKEDEV pour créer les devices).

Bépo

Au niveau du bépo dans la console, le driver [pour FreeBSD] ne fonctionne pas. Je n’ai pas encore pris le temps de chercher plus loin de ce côté car dès que le réseau était fonctionnel, j’ai tout configuré via ssh depuis un autre ordinateur pourvu du bépo.

Pour ce qui est du driver dans X, il n’est pas à jour et il faut donc le mettre à jour soi-même (une fois X installé, bien sûr):

# cd /usr/pkg/share/X11/xkb/symbols
# mv fr fr.bak
# fetch -o fr http://www.clavier-dvorak.org/donnees/xkb/fr-bepo.1.0-rc1-hardy 

On ajoute ensuite ceci dans /etc/X11/xorg.conf, à la section InputDevice du clavier:

Option          "XkbRules"      "xorg"
Option          "XkbModel"      "pc105"
Option          "XkbLayout"     "fr"
Option          "XkbVariant"    "bepo"

La souris en tty

Ce n’est certainement pas la chose la plus utile, mais ça permet de voir si la souris fonctionne bien avant d’avoir installé X. On regarde d’abord sur quel device se trouve la souris (si elle est détectée):

$ grep Mouse /var/log/messages
Jan 31 17:46:51 newton kernel: ums0: <Logitech USB-PS/2 Optical Mouse, class 0/0, rev 2.00/20.00, addr 2> on uhub0

On ajoute ensuite ceci au rc.conf:

moused_enable="YES"
moused_port="/dev/ums0"

Et on peut démarrer moused:

rcstart moused

Mise en veille

Pour la mise en veille, il faut charger le module acpi.ko s’il n’est pas chargé par défaut:

# kldload acpi.ko

Ensuite, on utilise acpiconf(8) pour mettre l’ordinateur en veille, par exemple pour faire l’équivalent d’un s2ram:

# acpiconf -s 3

Hélas, le seul mode d’hibernation qui fonctionne sur mon ordinateur est le 1 (qui arrête juste l’horloge du CPU).

UTF–8

Pour avoir l’UTF–8, il suffit de rajouter ceci de modifier le /etc/login.conf pour que la fin de la section default: ressemble à ceci:

    :ignoretime@:\
    :umask=022:\
    :charset=UTF-8:\
    :lang=en_US.UTF-8:

Le changement sera donc fait pour tout le système et cela nous évite d’avoir à modifier nous-même les variables LC_* et LANG, ce qui peut varier selons les shells utilisés.

Désactiver le beep système

On peut désactiver ce beep à deux niveaux: dans le tty ou dans X:

# dans le tty
kbdcontrol -b off
# dans X
xset -b

La première commande est à placer dans /etc/profile et la seconde dans ~/.xinitrc si vous utilisez startx.

Moins de tty

Je n’ai jamais vraiment compris l’utilité d’avoir 7 ou 8 (TODO) ttys activés par défaut alors qu’un suffit. On va donc tous les désactiver sauf les deux premiers (au cas où on oublie de lancer tmux ou screen avant une commande qui met du temps à s’éxécuter). Pour cela, il suffit de commenter TODO dans le fichier /etc/tty.

Désactiver les messages du kernel (silent boot)

C’est très désagréables de se faire déranger par les messages du kernel quand on travaille en tty. Ça se désactive facilement en mettant l’option kern.consmute de sysctl(8) à 1. Cela peut se faire au niveau de /etc/sysctl.conf, qui est chargé après le chargement du kernel, donc vous verrez toujours les messages pendant le boot. Pour avoir un silent boot, c’est-à-dire un boot sans messages du kernel, il suffit simplement de changer cette option au niveau du fichier /boot/loader.conf.

La ligne à ajouter dans les deux cas est:

kern.consmute="1"

Carte son

Ma carte son étant une ATI IXP, il a suffit de charger le module snd_atiixp.ko et de l’ajouter au rc.conf:

# kldload snd_atiixp.ko
# echo 'snd_atiixp_load="YES"' >> /etc/rc.conf

Et pour tester le son, rien de tel qu’un petit

# cat /dev/urandom > /dev/audio

Logiciels utilisés

Pour finir, voici les principaux logiciels que j’utilise et le nom de leur pkgsrc:

UtilitéLogicielPort
Window Managerwmiiwm/wmii
Terminalrxvt-unicodex11/rxvt-unicode
Multiplexeur de terminauxtmuxmisc/tmux
Éditeur de texteVim, GNU Emacs1editors/vim, editors/emacs-snapshot
Navigateurfirefox2www/firefox
Lecteur audiompd et mpcaudio/musicpd et audio/mpc
Pagermostmisc/most
Shellmkshshells/mksh
Lecteur PDFxpdf3print/xpdf
Visionneur d’imagesxvgraphics/xv

To be continued…

Il reste encore beaucoup de choses à regarder de plus près (monter de l’ext4 et du reiserfs, le bépo dans la console, …), dont certaines propres à DragonFly BSD (hammer, vkernel). Cela fera peut-être l’objet de futurs billets.

J’aimerais aussi me pencher sur la création de pkgsrc, notamment pour installer proprement mupdf et pouvoir me passer de xpdf.


  1. Vim pour configurer et Emacs pour programmer.

  2. Avec le plugin vimperator.

  3. Regardez du côté de mupdf pour un autre lecteur intéressant (mais pas (encore) dans pkgsrc).

Bépo et DragonFly BSD

La disposition de clavier bépo est disponible pour FreeBSD, mais elle n'est pas compatible avec DragonFly BSD, bien que cette dernière soit dérivée de FreeBSD. C'est en fait dû à kbdcontrol(1) qui n'est pas compatible à 100% entre FreeBSD et DragonFly. Les développeurs de FreeBSD ont continués à ajouter des nouvelles fonctionnalitées après le fork de DragonFly, qui n'ont pas été reprises chez DragonFly.

Néanmoins il reste possible de « convertir » le pilote bépo de FreeBSD dans quelque chose de compatible avec le kbdcontrol de DragonFly BSD. La seule incompatibilitée utilisée dans le driver bépo est l'utilisation de l'action paste, qui a été ajoutée dans FreeBSD 5.0. Un petit coup de sed pour réparer ça, et on peut installer et charger le driver:

wget http://download.tuxfamily.org/dvorak/devel/fr-dvorak-bepo-kbdmap-1.0rc2.tgz
tar xzvf fr-dvorak-bepo-kbdmap-1.0rc2.tgz
cd fr-dvorak-bepo-bkdmap-1.0rc2
sed -i -e 's/paste/nop/g' fr-dvorak-bepo.kbd
cp fr-dvorak-bepo.kbd /usr/share/syscons/keymaps/

On peut maintenant switcher au bépo:

kbdcontrol -l fr-dvorak-bepo.kbd

On modifie ensuite /etc/rc.conf pour avoir le bépo au démarrage:

keymap="fr-dvorak-bepo"

Par contre, même remarque que sur le wiki bépo, la console de FreeBSD ne supporte pas l'UTF-8, c'est donc aussi le cas de DragonFly BSD.

FreeBSD ports on steroids -- part 1

Voici le premier billet d'une série sur les ports FreeBSD. Au sommaire aujourd'hui: l'amélioration des performances des ports avec fastest_sites, ccache et cpuflags.

fastest_sites: améliorer le téléchargement des fichiers

fastest_sites est un petit script python qui trie les MASTER_SITEs en fonction de leur temps de réponse, ce qui permet de redéfinir l'ordre d'utilisation des mirroirs pour utiliser les plus rapides en priorité. Comme il doit se connecter à chaque mirroir, son éxécution prend un certain temps, n'hésitez pas à continuer la lecture de cet article pendant ce temps.

cd /usr/ports/ports-mgmt/fastest_sites
make install clean
fastest_sites > /usr/local/etc/ports_sites.conf
echo '.include "/usr/locale/etc/ports_sites.conf"' >> /etc/make.conf

ccache: améliorer la compilation des ports

ccache, comme son nom l'indique, garde en cache les compilations de programmes C ou C++, et permet donc de ne pas recompiler quelque chose qui a déjà été compilé auparavant ce qui améliore grandement le temps de compilation.

Il est disponible dans le port devel/ccache. Une fois installé, on lit le fichier /usr/local/share/doc/ccache/ccache-howto-freebsd.txt comme indiqué. Dans mon cas, il faut donc ajouter ceci à /etc/make.conf:

.if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*)) && !defined(NOCCACHE)
  CC=/usr/local/libexec/ccache/world-cc
  CXX=/usr/local/libexec/ccache/world-c++
.endif

ainsi que ceci dans le /etc/profile (attention, j'utilise mksh comme shell root mais le shell par défaut pour est un csh, à adapter donc):

export PATH=/usr/local/libexec/ccache:$PATH
export CCACHE_PATH=/usr/bin:/usr/local/bin

On peut aussi adapter CCACHE_DIR qui contient le dossier où ccache stockera ses données (/root/.ccache/ par défaut), et CCACHE_LOGFILE qui contient le chemin vers le fichier de log. On peut finalement adapter la taille maximale du cache via l'option -M:

# ccache -M 5G
Set cache size limit to 5242880k

cpuflags: améliorer l'éxécution des ports

cpuflags est un script shell qui vous donne les CFLAGS adaptés à votre processeur. Cepandant il n'est pas encore disponible dans les ports FreeBSD, bien qu'il soit compatible avec FreeBSD. Néanmoins, il est disponible dans pkgsrc, voici donc une démarche plus ou moins propre pour l'installer via les ports.

Tout d'abord, on récupère les fichiers le concernant depuis le cvs de pkgsrc:

export CVSROOT=anoncvs@anoncvs.de.netbsd.org:/cvsroot
export CVS_RSH=ssh
cvs checkout -PA pkgsrc/devel/cpuflags

Il faut ensuite convertir ce pkgsrc en un port, pour pouvoir l'installer via les ports:

cd pkgsrc/devel/cpuflags
mv PLIST pkg-plist
mv DESCR pkg-descr
wget http://awesom.eu/~acieroid/files/ports/cpuflags/Makefile.diff
patch -p1 Makefile < Makefile.diff
rm Makefile.diff
make install clean

Il suffit ensuite d'ajouter ce que nous sort cpuflags aux CFLAGS, dans le make.conf:

echo "CFLAGS+=`cpuflags`" >> /etc/make.conf