Mot-clé - Tips

Fil des billets

lundi 22 décembre 2014

Upgrade sans filet !

logo openSUSE

Dans ce billet, je vais vous expliquer la procédure, que j'ai suivi pour mettre à jour (rapidement, et donc sans sauvegarde) mon système Linux (openSUSE).

Ceci a été décidé sur un coup de tête. Après un n-ième ras-le-bol suite à une mise à jour de sécurité, m'obligeant à démarrer uniquement en mode « dégradé » [1].

Note

[1] La mise à jour de sécurité n'a pourtant pas impacté la gestion de la carte graphique.

Lire la suite...

dimanche 30 novembre 2014

Corriger les messages, dead-... is undefined sous emacs

Depuis quelques versions sous emacs, je n'arrive plus à écrire certains accents (^ et ¨).

Quand je tape par exemple ë, emacs m'affiche ce message, dead-diaeresis is undefined [1]

J'ai remarqué, que cela arrivé uniquement lorsque mes locales étaient configurées pour l'ISO.

Au détours d'un lien, je suis tombé sur la solution, il suffit de rajouter cette ligne dans son fichier de configuration.

[...]

(load-library "iso-transl")

[...]

Note

[1] Ou, ê, dead-circumflex is undefined.

samedi 16 mars 2013

Le pattern-matching dans Bash

En faisant la mise à jour de Dotclear, via les patches, j'ai oublié de préciser qu'il fallait omettre le dossier parent. Je me suis donc retrouvé avec des fichier portant l'extension .rej.

assoavignu@pastis $ for file in `find . -type f -name '*.rej'`; do echo ${file}; done
./blogs.php.rej
./blog_theme.php.rej
./comment.php.rej
./categories.php.rej
./category.php.rej
./comments_actions.php.rej
./comments.php.rej
./blog_pref.php.rej

Pour retrouver leurs extensions d'origine (.php), une simple boucle suffit :

assoavignu@pastis $ for file in `find . -type f -name '*.rej'`; do mv ${file} ${file%.*}; done

Je ne suis pas certain que la « syntaxe » ${variable%.*} fonctionne avec tous les shells.

mercredi 13 février 2013

Transformer des dates avec le module python-dateutil

Récemment, j'ai eu besoin de transformer des dates écrites dans ce format : Wed, 13 Feb 2013 05:34:15 +0100 en quelque chose de plus « normé », ISO 8601.

Lire la suite...

lundi 3 décembre 2012

« Node remains in conflict » avec SVN

J'ai eu ce message lorsque j'ai voulu mettre à jour l'arbre des ports (FreeBSD) sur une machine de test. Il faut dire que j'utilise mes propres ports, ceux en provenance du dépôt MarcusCom, ainsi que l'arbre officiel.

Déjà je ne me souvenais plus du miroir que j'avais choisi.

judas c'est svn0.us-west.FreeBSD.org

Donc pour résoudre ce problème il faut exécuter la commande suivante sur un dossier ou fichier (c'est précisé dans le log).

Par exemple si le dossier x11/ est « corrompu ».

root@judas:/usr/ports # svn resolved x11/

Suivi de la mise à jour

root@judas:/usr/ports # svn checkout svn://svn0.us-west.freebsd.org/ports/head .

Oui je suis la brance principale, celle constamment mise à jour.

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.

mercredi 14 mars 2012

Installation d'une Debian (powerpc) à partir de debootstrap

Logo Debian

Dans cet article, nous allons voir comment installer la distribution Debian à partir de l'utilitaire debootstrap. Pour corser le tout, le partitionnement se fera en LVM.

Les prérequis

  • Un live CD, j'ai choisi Finnix [1]
  • Un ordinateur, (pour cet exercice, ça sera un iBook G4)

Note

[1] C'est beaucoup plus souple, que l'installateur de Debian.

Lire la suite...

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.

lundi 21 novembre 2011

Upgrade openSUSE

logo openSUSE

La dernière version de openSUSE est sortie le 16 novembre. C'est la distribution Linux que j'utilise actuellement sur mon ordinateur principal. J'ai profité de ce week-end pour faire la mise à jour.

Je suis reparti complètement de zéro car :

  • le partitionnement ne me convenait plus
  • j'étais sous GNOME2 (2.32)

Désormais, j'utilise KDE4, et je vais pouvoir me consacrer un peu plus à la création de paquets RPM.

Dans ce billet, je vais présenter, les principales modifications que j'ai apporté, afin d'avoir un système qui me convienne.

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...

- page 1 de 2