Mot-clé - BSD

Fil des billets

mardi 22 mai 2012

Migration vers FreeBSD 9 enfin terminée

logo FreeBSD

Ce week-end, j'ai décidé de migrer sous la branche releng/9.0 [1] mon laptop. Il fonctionnait auparavant sur la branche releng/8.2 [2].

Il faut dire, que ça me titiller depuis un moment, car je n'étais pas satisfait du partitionnement actuel (absence de répertoire /tmp en RAM), locales toutes en latin9 (je migre de plus en plus vers l'UTF-8). J'en ai profité pour repartir complètement de zéro.

Le partitionnement a bien changé depuis ma dernière installation (à partir d'un CD), qui remonte à la version 6.0. Résultat, au redémarrage l'ordinateur est dans les choux. Je reboote avec le disque d'installation, et recommence l'installation, là l'installateur me sort une erreur, m'indiquant que la partition /dev/ada0p2 est introuvable !!! C'est ma partition racine.

Le lendemain, je recommence, avec cette fois-ci la dernière version de la branche RELENG_7 (7.4). Aucun soucis, car il s'agit de l'ancien installeur (sysinstall). Je migre ensuite vers releng/8.3, je redémarre, l'ordinateur est « planté », j'ai un prompt pour m'aider à booter sur la bonne partition. C'est encore une fois un nouvel échec.

Aujourd'hui, j'ai décidé de prendre le taureau par les cornes, et de tenter une nouvelle installation, et apprivoiser bsdinstall, le nouvel assistant du CD d'installation.

Après avoir sélectionné la bonne disposition du clavier, je suis ensuite passé par le shell, afin de voir l'état du disque dur, avec la commande gpart show (j'ai qu'un seul disque, donc ce n'est pas nécessaire de le mentionner).

En voulant supprimer les précédentes partitions, j'ai obtenu le message d'erreur suivant :

# gpart delete -i 4 ada0
gpart: table 'ada0' is corrupt: Operation not permitted

Après quelques recherches, il faut exécuter le mode recover.

# gpart recover ada0
ada0 recovered

Maintenant la suppression des partitions ne pose plus de problème

[...]
# gpart delete -i 3 ada0
ada0p3 deleted
[...]

J'ai également supprimé la table des partitions MBR. J'ai décidé de migrer sous GPT.

# gpart destroy ada0
ada0 destroyed

# gpart create -s GPT ada0

Une vérification que tout s'est bien passé.

# gpart show
=>       34  195371501  ada0  GPT  (93G)
    	 34  195371501        - free -  (93G)

Création de la partition de boot pour l'entête GPT.

# gpart add -t freebsd-boot -l gpboot -s 512K ada0
ada0p1 added

On installe le bootcode.

# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0
bootcode written to ada0

Ensuite on passe à la création des partitions.

# gpart add -t freebsd-ufs -l root -s 5G ada0
ada0p2 added
# gpart add -t freebsd-swap -l swap -s 1G ada0
ada0p3 added
# gpart add -t freebsd-ufs -l var -s 3G ada0
ada0p4 added
# gpart add -t freebsd-ufs -l usr -s 62G ada0
ada0p5 added
# gpart add -t freebsd-ufs -l home ada0
ada0p6 added

Au final cela donne ça :

# gpart show
=>       34  195371501  ada0  GPT  (93G)
         34       1024     1  freebsd-boot  (512k)
       1058   10485760     2  freebsd-ufs  (5.0G)
   10486818    2097152     3  freebsd-swap  (1.0G)
   12583970    6291456     4  freebsd-ufs  (3.0G)
   18875426  130023424     5  freebsd-ufs  (62G)
  148898850   46472685     6  freebsd-ufs  (22G)

En quittant le shell on retrouve l'assistant pour continuer l'installation.

À la fin, je suis retourné sous le shell (on est directement dans le chroot de notre nouveau système) pour modifier le fichier /etc/fstab et /etc/rc.conf.

Notes

[1] Afin de pouvoir utiliser la dernière version Xorg.

[2] La fin du support des mises à jour de sécurité approchant à grand pas.

samedi 21 avril 2012

ACPI et FreeBSD

logo du système d'exploitation, FreeBSD

En ce moment, je travaille sur l'intégration de la prochaine version stable (4.10) de Xfce sous FreeBSD.

Un des composants, xfce4-session gère l'hibernation et le suspend to RAM (mise en veille). J'ai donc voulu voir, comment cela été pris en charge par FreeBSD.

L'essais a été effectué sur :

olivier@bornem:~ $ uname -rsp                                   
FreeBSD 8.2-RELEASE-p3 i386
olivier@bornem:~ $ 

État des lieux

Il faut savoir, que par défaut l'ACPI est déjà activé [1]. Cependant on doit rechercher les informations concernant les différentes méthodes de mise en veille.

olivier@bornem:~ $ sysctl -a | grep acpi.supported                  
hw.acpi.supported_sleep_state: S3 S4 S5
olivier@bornem:~ $ 

Sur cet ordinateur, on peut voir que trois états (sleep states) sont « pris en charge » par le système.

On peut également voir, si le BIOS est capable de le gérer.

olivier@bornem:~ $ sysctl -a | grep acpi.s4bios                     
hw.acpi.s4bios: 0
olivier@bornem:~ $ 

Dans mon cas, la valeur est à zéro, donc mon BIOS n'a pas ce support.

On peut tester les différents états (il faut être root) avec l'utilitaire acpiconf.

root@bornem:~ # acpiconf -s 3 

L'état S4 (correspondant à l'hibernation) est équivalent à S5, j'en déduis donc que je ne pourrais pas utiliser cette fonctionnalité.

L'état S3 (suspend to RAM) est pleinement fonctionnel.

Intégration avec le gestionnaire de bureau

xfce4-session possède une dépendance, UPower [2], responsable de la gestion de la consommation (en autre).

Pour pouvoir l'employer, il faut autoriser certaines opérations, grâce notamment à polkit.

On va tout d'abord rechercher les actions possibles concernant UPower.

olivier@bornem:~ $ pkaction | grep upower                           
org.freedesktop.upower.hibernate
org.freedesktop.upower.qos.cancel-request
org.freedesktop.upower.qos.request-latency
org.freedesktop.upower.qos.request-latency-persistent
org.freedesktop.upower.qos.set-minimum-latency
org.freedesktop.upower.suspend
olivier@bornem:~ $ 

J'ai uniquement besoin du support de suspend, j'en profite donc pour créer un fichier .pkla (l'extension est primordiale) situé dans /usr/local/etc/polkit-1/localauthority/50-local.d/.

Voici son contenu :

root@bornem:~ # cat /usr/local/etc/polkit-1/localauthority/50-local.d/org.freedesktop.upower.pkla 
[Suspend]
Identity=unix-group:users
Action=org.freedesktop.upower.suspend
ResultAny=yes
ResultInactive=yes
ResultActive=yes
root@bornem:~ # 

Tous les utilisateurs appartenant au groupe users sont autorisés à mettre en veille (en RAM) le système.

Notes

[1] Si l'on démarre avec les paramètres prédéfinis.

[2] Cette bibliothèque n'est pas fonctionnelle sous tous les BSD

mardi 31 janvier 2012

Comment exclure un module avec setuptools ?

Pour ceux ou celles, qui maintiennent (ou on l'intention de créer) des paquets Python pour leur distribution favorite, je vous livre une astuce si vous voulez exclure un, ou plusieurs modules.

Dans mon cas, je ne voulais pas installer le dossier tests/ (il dépend bien souvent de la bibliothèque nose), lors de la création de mon package.

Nous allons utiliser la fonction find_packages() du module setuptools.

Voici ce que nous dit la docstring :

[...]

FUNCTIONS

find_packages(where='.', exclude=()) Return a list all Python packages found within directory 'where'

'where' should be supplied as a "cross-platform" (i.e. URL-style) path; it will be converted to the appropriate local path syntax. 'exclude' is a sequence of package names to exclude; '*' can be used as a wildcard in the names, such that 'foo.*' will exclude all subpackages of 'foo' (but not 'foo' itself).

[...]

La documentation :

[...]

find_packages() takes a source directory, and a list of package names or patterns to exclude. If omitted, the source directory defaults to the same directory as the setup script.

Exclusion patterns are package names, optionally including wildcards.

[...]

Un exemple va nous aider à bien comprendre (on se place dans les « mêmes conditions », qu'au moment de la création d'un paquet) :

olivier@bornem:~ $ tar -xzf /usr/ports/distfiles/waitress-0.8.tar.gz
olivier@bornem:~ $ cd waitress-0.8/
olivier@bornem:~/waitress-0.8 $ python
Python 2.7.2 (default, Jul  4 2011, 20:20:01) 
[GCC 4.2.1 20070719  [FreeBSD]] on freebsd8
Type "help", "copyright", "credits" or "license" for more information.
>>> from setuptools import find_packages
>>> l = find_packages(where='.')
>>> l
['waitress', 'waitress.tests', 'waitress.tests.fixtureapps']
>>> 

on obient une liste, de tous les dossiers contenant un fichier __init__.py.

Si l'on ne souhaite pas installer le répertoire waitress/tests, il faut le mentionner :

>>> l = find_packages(where='.', exclude=['waitress.tests'])
>>> l
['waitress', 'waitress.tests.fixtureapps']
>>> 

waitress/tests/fixtureapps/ est toujours présent (la compilation échouera, car le module tests sera absent). Il faut également le préciser tous les sous-dossiers

>>> l = find_packages(where='.', exclude=['waitress.tests', 'waitress.tests.fixtureapps'])
>>> l
['waitress']
>>> 

On peut utiliser un joker (ou wildcard).

>>> l = find_packages(where='.', exclude=['waitress.test*'])
>>> l
['waitress']
>>> 

Le plus gros du travail est fait, il ne reste plus qu'à rechercher un fichier MANIFEST.in, ou SOURCES.txt, et de supprimer les lignes correspondantes à ce module (on crée alors un patch).

Une dernière chose, la fonction find_packages() se trouve dans le fichier setup.py, on va également le patcher.

vendredi 13 janvier 2012

FreeBSD 9.0 est là

logo du système d'exploitation, FreeBSD

Depuis le 12 janvier 2012, la branche 9 est considérée comme stable. D'où l'annonce d'une nouvelle version, il s'agit de la 9.0, (elle débute le cycle de la branche 9-STABLE).

Mise à jour

Si vous possédez une architecture dite, Tier 1 (i386, et amd64), vous pouvez effectuer la mise à jour avec l'utilitaire freebsd-update(8) (pensez à modifier le fichier de configuration /etc/freebsd-update.conf).

Si vous ne l'avez jamais utilisé, c'est le moment, profitez-en !

Cependant si vous ne suivez pas régulièrement les correctifs, vous devez effectuer une manipulation au préalable.

En root copiez ce bout de code :

sed -i '' -e 's/=_/=%@_/' /usr/sbin/freebsd-update

Ou bien, utilisez freebsd-update :

root@bornem:~ # freebsd-update fetch
[...]
root@bornem:~ # freebsd-update install

La mise à jour se fait de la manière suivante (suivez les indications mentionnées) :

root@bornem:~ # freebsd-update upgrade -r 9.0-RELEASE

Maintenant, vous pouvez ré-installer les logiciels supplémentaires que vous avez installé sur votre machine.

Il n'est pas obligatoire de passer à cette version, si vous suivez la branche 8-STABLE, comme moi, une nouvelle version est prévue courant mars 2012. Cependant pour savoir si vous avez besoin de faire une mise à jour, vous pouvez toujours consulter la Release note.

samedi 26 novembre 2011

Installation pas à pas, du système d'exploitation FreeBSD

logo FreeBSD

Dans ce billet nous allons voir les principales étapes pour installer un système d'exploitation de type Unix, à savoir FreeBSD.

L'architecture est un système 32 bits, i386.

Le seul prérequis, c'est d'avoir le handbook [1] à porter de main.

Note

[1] Tout y ai expliqué.

Lire la suite...

samedi 5 novembre 2011

Mercurial en tant qu'application WSGI

Logo Mercurial

Aujourd'hui, j'ai soumis un PR (pour FreeBSD), concernant une mise à jour majeur, du gestionnaire de version, Mercurial.

J'en ai profité pour le tester un peu plus en profondeur, notamment, je me suis intéressé au module, hgweb. Il permet d'afficher via une page Web, un dépôt Mercurial.

Lire la suite...

samedi 15 octobre 2011

[FreeBSD] checking for ZLIB... no

logo FreeBSD

Sous FreeBSD, quelques fois on est un peu « à la ramasse » niveau fraîcheur des paquets. C'est pourquoi, j'utilise le système de ports.

Ce matin j'ai décidé de mettre à jour WebKitGTK+, je maintiens ma propre branche, car j'ai toujours une erreur avec GObject-Introspection (c'est activé dans le port officiel) [1], je modifie donc légèrement le Makefile et je lance la commande suivante pour générer le fichier distinfo (il contient la somme des contrôles, permettant de vérifier que le fichier téléchargé est complet) :

root@bornem:/usr/ports/www/webkit-gtk2 # make makesum

Ensuite je lance la compilation, et je précise le dossier dans lequel, je souhaite installer cette bibliothèque. Je fais toujours ça, car cela me permet de corriger le fichier pkg-plist, et de relancer la compilation autant de fois que nécessaire afin de ne plus obtenir d'erreurs.

Pour cela je rajoute une variable dans le Makefile

[...]
NO_MTREE=       yes

.include <bsd.port.pre.mk>

[...]
root@bornem:/usr/ports/www/webkit-gtk2 # mkdir /tmp/webkit-gtk2
root@bornem:/usr/ports/www/webkit-gtk2 # make install PREFIX=/tmp/webkit-gtk2

L'étape de configuration, celle qui permet de vérifier que toutes les dépendances sont installées, s'est arrêtée de manière prématurée.

[...]
checking for icu-config... /usr/local/bin/icu-config
checking for ZLIB... no
configure: error: Package requirements (zlib) were not met:

gnome-config: not found
No package 'zlib' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables ZLIB_CFLAGS
and ZLIB_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
===>  Script "configure" failed unexpectedly.
Please run the gnomelogalyzer, available from
"http://www.freebsd.org/gnome/gnomelogalyzer.sh", which will diagnose the
problem and suggest a solution. If - and only if - the gnomelogalyzer cannot
solve the problem, report the build failure to the FreeBSD GNOME team at
gnome@FreeBSD.org, and attach (a)
"/usr/ports/www/webkit-gtk2/work/webkit-1.6.1/config.log", (b) the output of
the failed make command, and (c) the gnomelogalyzer output. Also, it might
be a good idea to provide an overview of all packages installed on your system
(i.e. an `ls /var/db/pkg`). Put your attachment up on any website,
copy-and-paste into http://freebsd-gnome.pastebin.com, or use send-pr(1) with
the attachment. Try to avoid sending any attachments to the mailing list
(gnome@FreeBSD.org), because attachments sent to FreeBSD mailing lists are
usually discarded by the mailing list software.
*** Error code 1

Stop in /usr/ports/www/webkit-gtk2.
*** Error code 1

Stop in /usr/ports/www/webkit-gtk2.

Ce message indique, qu'il ne trouve pas la bibliothèque zlib pour la compression des données.

Je suis resté perplexe, car zlib est présent dans le base system de FreeBSD.

En effet, le script configure recherche le fichier pkgconfig/zlib.pc, or ce dernier est absent. Heureusement que l'on peut surcharger certaines variables d'environnement, notamment ZLIB_CFLAGS et ZLIB_LIBS, évitant ainsi d'avoir recours à l'utilitaire, pkg-config, et de rechercher dans /usr/local/lib.

  ZLIB_CFLAGS C compiler flags for ZLIB, overriding pkg-config
  ZLIB_LIBS   linker flags for ZLIB, overriding pkg-config

Je modifie donc le Makefile

[...]
CONFIGURE_ENV=  ac_cv_path_FLEX="${LOCALBASE}/bin/flex" \
                ac_cv_path_DOLT_BASH="" \
               ZLIB_CFLAGS="-I/usr/include" \
               ZLIB_LIBS="-L/usr/lib -lz"

J'ai pu enfin mettre à jour www/webkit-gtk2.

WebKitGTK étant maintenu par gnome@, je suis allé vérifier, si, sur le dépôt MarcusCom, kwm@, ou mezz@ avaient rencontré ce problème. La révision n° 1.81 est quasiment identique à la mienne.

Notes

[1] Actuellement la version présente dans les ports est la 1.4.3.

Dimanche 21 mars 2010

FreeBSD 7.3 dans les starting-blocks

La prochaine version stable de la série 7.x va certainement sortir le 23 mars 2010 [1].

En effet, d'après le log du fichier UPDATING, on peut lire ce commentaire pour la révision 205405.

Copy releng/7.3 to release/7.3.0 to mark 7.3-RELEASE.

Quand une branche est « taguée » RELEASE, c'est quelle est considérée comme suffisamment stable.

C'est une excellente nouvelle :).

Vous pouvez d'ores et dèjà faire chauffer le fantastique utilitaire, développé par Colin Percival, freebsd-update [2].

Notes

[1] Lire le fichier UPDATING

[2] Fonctionne uniquement pour les architectures dites, Tier-1.

page 2 de 2 -