Documentation

Fil des billets

Mis à niveau vers Fedora 32

Ce billet est consacré à la migration de mon poste principal vers la dernière version (32) de Fedora. Cet ordinateur est un peu particulier car j'utilise mes propres .specs pour le gestionnaire de bureau Xfce [1].

Note

[1] Recettes pour produire des paquets RPM.

Lire la suite...

Pas d'admin sous Dotclear

Ces derniers temps l'accès à la partie "admin" de Dotclear semble inacessible. Cela vient du fait, que lorsque l'on se connecte il y a une requête qui est faite vers http://download.dotclear.org/versions.xml. Or en ce moment le serveur semble avoir des soucis. et par conséquent on ne peut plus se connecter [1], et faire la manipulation expliquée dans ce billet [2].

Je suis donc parti sur l'interface de phpMyAdmin chez TuxFamily pour régler ce problème.

Tout d'abord j'ai recherché tous les utilisateurs sur ce blog :

SELECT user_id, pref_value FROM `dc_pref` WHERE pref_id = "dcnews"

Ensuite j'ai changé la valeur, c'est un booléen (0 ou 1).

UPDATE `dc_pref` SET pref_value = 0 WHERE user_id = "USER" AND pref_id = "dcnews"

En remplaçant USER par votre identifiant. Normalement tout devrait refonctionner.

Notes

[1] Chez TuxFamily, on obtient une erreur 504 (Gateway Time-out), le temps d’attente de la réponse du serveur a écoulé.

[2] La manipulation dans le fichier inc/config.php ne résoud rien.

Installation de Dotclear sous openSUSE (bis)

Il y a quelques années, j'avais écrit un billet sur l'installation de Dotclear en local.

Nous allons donc revoir la procédure de A à Z, en changeant cette fois-ci de serveur Web, et de système de base de données.

Les prérequis sont :

  • Un serveur HTTP
  • Une base de données
  • PHP >= 5.2

Lire la suite...

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.

Qarte - Linux Mint 17

Bonjour,

Certain d'entre nous ont eu des soucis avec l'utilisation de Qarte lors du passage sous Linux Mint 17.

Une solution applicable issue du "launchpad" (https://launchpad.net/qarte) est la suivante :

  • Ouvrir un Terminal et taper :
sudo apt-get install qt4-qtconfig
  • Ensuite, rendez-vous dans :
Menu
Préférences
Paramètres Qt 4
Select GUI style : Desktop settings (default)

Normalement, ça devrait aller mieux ! ;-)

Multiboot avec GRUB2

Dans ce billet, nous allons voir comment mettre en place rapidement un dual boot à partir de FreeBSD.

Lire la suite...

Comment mettre à jour DokuWiki

Ce billet, va vous expliquer la procédure, que je suis, pour mettre à jour notre wiki (DokuWiki).

Avant de faire une mise à jour, pensez à faire une sauvegarde de vos données.

Lire la suite...

Connaître les dimensions d'une image vectorielle

ImageMagick fournit un utilitaire (identify) qui nous permet de connaître les dimensions (hauteur et largeur) d'une image.

Son utilisation est très simple :

$ identify -format "%G" midori.svg
60x60

On a donc une image avec comme dimension :

  • hauteur : 60px
  • largeur : 60px

Vous le savez sans doute, mais un fichier .svg est tout simplement un fichier XML avec son propre espace de nom [1].

Bien souvent les dimensions sont mentionnées, il suffit de savoir les rechercher.

Si la bibliothèque libxml2 est installée sur votre système, vous pouvez utiliser l'utilitaire xmllin, qui va avec.

$ xmllint --noout --xpath "string(@width)" midori.svg
48

Dans cet exemple je recherche uniquement la largeur.

En comparant les deux méthodes, c'est la première fois que je tombe sur des résultats différents. Généralement ImageMagick donne de meilleur résultat [2].

Notes

[1] http://www.w3.org/TR/SVG11/

[2] L'attribut width n'est pas présent à chaque fois dans un fichier SVG.

Suppression dans une arborescence avec find(1)

J'utilise régulièrement la commande find(1), pour un peu tout et n'importe quoi.

Voici quelques exemples.

Les fichiers

Pour supprimer récursivement plusieurs fichiers situés dans une multitude de dossiers, on peut utiliser la commande suivante.

(Je souhaite supprimer tous les fichiers Thumbs.db)

$ find . -type f -name 'Thumbs.db' -exec rm -f {} \;

Les dossiers

(Je souhaite supprimer tous les dossiers thumbs/)

$ find . -type d -name 'thumbs' -exec rm -Rf {} \;

find(1) va renvoyer une erreur, mais pourtant les répertoires seront supprimés.

Pour éviter ce désagrément, il faut utiliser la commande xargs(1).

$ find . -type d -name 'thumbs' | xargs -exec rm -Rf

Faites attention avec find(1), car on peut rapidement faire des bêtises avec.

État des lieux de la documentation sur le wiki au mois de mai 2013

Montage, documentation sur le wiki au mois de mai

Voici un récapitulatif des dernières contributions sur le wiki.

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

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

Exécuter une application WSGI avec systemd sous openSUSE

Ce billet est une « mise à jour » du précédent, concernant le déploiement de Mercurial, sous forme d'application WSGI.

Le fait de passer par le script /etc/init.d/after.local, pour lancer une telle application, ne m'a pas entièrement satisfait. C'est pourquoi j'ai décidé de me repencher sur ce point.

À la fin de l'article, j'évoqué, Gunicorn, comme serveur WSGI, en proposant même un exemple de fichier .service. Je me suis donc inspiré de celui-ci pour en créer un.

Le but c'est de pouvoir exécuter le script, hgweb.wsgi au démarrage.

Je vous propose donc, wsgi-hg.service. Il permet de lancer (ou d'arrêter) notre script WSGI. Il n'y a rien de particulier, à part la condition ConditionPathExistsGlob, qui me sert à tester si un fichier .wsgi (en réalité hgweb.wsgi) est présent sur le serveur, si c'est le cas, le service pourra être lancé.

Il faut bien sur, avoir correctement configuré son serveur Web. Par exemple pour Nginx :

[...]

    # Subdomain settings
    #
    # Mercurial
    #
    server {
	listen 80;
	server_name hg.errements.net;

	access_log /var/log/nginx/access-hg.log;

	location / {
		root /srv/www/htdocs/vhosts/hg;
		autoindex	off;

		proxy_path	http://127.0.0.1:8500;
		proxy_set_header	Host	$host;
	}
    }

[...]

Mais on peut aller encore plus loin, actuellement dans notre script wsgi, le socket réseau (le port, et l'adresse IP) sont codés en « dur ». On pourrait les passer en paramètre. Il faut pour cela utiliser le module argparse.

olivier@bornem:~ $ python hgweb-opts.wsgi -h                                 
usage: hgweb-opts.wsgi [-h] host port

positional arguments:
  host        Add IP address
  port        Add port number

optional arguments:
  -h, --help  show this help message and exit
olivier@bornem:~ $ 

On peut voir que deux paramètres sont obligatoires, l'ordre à une importance.

  • host, par exemple 127.0.0.1
  • port, par exemple 8500
olivier@bornem:~ $ python hgweb-opts.wsgi 127.0.0.1 8500                     
serving on http://127.0.0.1:8500

On peut maintenant adapter le fichier wsgi-hg.service, pour pouvoir passer ces paramètres à la ligne ExecStart.

Voici la ligne à copier.

[...]
ExecStart=/usr/bin/python2.7 /srv/www/htdocs/vhosts/hg/hgweb-opts.wsgi 127.0.0.1 8500
[...]

Pour lancer le service, on place ce fichier dans /etc/systemd/system/default.target.wants/ (ou /lib/systemd/system/).

root@bornem:~ # systemctl start wsgi-hg.service
root@bornem:~ # systemctl status wsgi-hg.service
wsgi-hg.service - Starts WSGI script (mercurial)
	  Loaded: loaded (/lib/systemd/system/wsgi-hg.service; disabled)
	  Active: active (running) since Sun, 29 Jan 2012 21:26:45 +0100; 38s ago
	 Process: 17745 ExecStartPre=/bin/echo Starting WSGI script for mercurial  (code=exited, status=0/SUCCESS)
	Main PID: 17747 (python2.7)
	  CGroup: name=systemd:/system/wsgi-hg.service
		  └ 17747 /usr/bin/python2.7 /srv/www/htdocs/vhosts/hg/hgweb...
root@bornem:~ # 

Déployer Mercurial (hg) « derrière » un serveur Web (Nginx) sous openSUSE

Logos

Dans un précédent billet, j'avais montré comment l'on pouvait exécuter une application Web écrite dans le langage Python sans faire intervenir de serveurs Web.

Aujourd'hui, nous allons voir le cas, où un serveur (en l'occurence Nginx) est déjà en place.

En fait, le but inavoué de cet article est de comprendre le système d'init, systemd utilisé par openSUSE en autre.

Lire la suite...

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

Configuration de « Music Player Daemon » sous FreeBSD

Ayant vu passer l'annonce d'une mise à jour du client Xfce pour mpd, (Xfmpc), je me suis empressé de le mettre à jour. Or je n'ai jamais utilisé ce démon.

Cette page est donc plus un pense-bête qu'autre chose.

Tout d'abord, on va installer les dépendances nécessaires à Xfmpc :

  • GTK+2
  • Glib2
  • libxfce4ui (sous FreeBSD, ce composant s'appelle libxfce4menu, on le trouve dans l'arborescence à x11/libxfce4menu)
  • libxfce4util
  • libmpd

On peut activer le mode maintainer, il faut pour cela lang/vala.

Sur mon système la dernière bibliothèque (libmpd) est absente, donc je l'installe de cette manière :

root@bornem:/usr/ports/audio/libmpd # make install clean

Cependant il manque le « démon », que l'on devrait trouver dans /usr/local/etc/rc.d/. Il faut pour cela installer audio/musicpd.

root@bornem:/usr/ports/audio/libmpd # cd ../musicpd
root@bornem:/usr/ports/audio/musicpd # make config
root@bornem:/usr/ports/audio/musicpd # make install clean

La commande make config permet d'activer (ou désactiver) certaines options durant la compilation.

Je ne souhaite pas que ce service soit lancé automatiquement au démarrage, donc je ne rajoute rien dans le fichier /etc/rc.conf. Cependant, pour utiliser Xfmpc, il faut le démarrer, nous allons donc copier le fichier de configuration générale (situé dans /usr/local/etc/musicpd.conf) dans le $HOME d'un utilisateur de la machine.

olivier@bornem:~ $ cp /usr/local/etc/musicpd.conf ~/.mpd.conf
olivier@bornem:~ $ ln -sf .mpd.conf .mpdconf

On peut maintenant éditer le fichier de configuration (.mpd.conf). Voici mes modifications :

music_directory   "~/Musique"
playlist_directory    "~/.mpd/playlists"
db_file     "~/.mpd/mpd.db"
log_file      "~/.mpd/mpd.log"
state_file      "~/.mpd/state"
sticker_file      "~/.mpd/sticker.sql"

user        "olivier"

port        "6600"

#
# An example of an OSS output:
# 
audio_output {
  type    "oss"
  name    "ATI IXP 400"
  device    "/dev/dsp"  # optional
##  format    "44100:16:2"  # optional
##  mixer_type      "hardware"  # optional
  mixer_device  "/dev/mixer"  # optional
##  mixer_control "PCM"   # optional
}

La dernière partie correspond à ma carte son, sur cet ordinateur.

On peut maintenant le lancer :

olivier@bornem:~ $ musicpd &

Lorsque l'on lance Xfmpc, il faut sélectionner dans la liste déroulante Base de données (cela correspond aux morceaux situés dans music_directory). Puis cliquer sur l'en deux pour l'ajouter à la liste de lecture.

La lecture se fait en sélectionnant Liste de lecture.

Xfmpc en action

Installation de Dotclear en local, sous openSUSE

logo openSUSE logo de Dotclear

Pour célébrer les huit ans de Dotclear, j'en profite donc pour présenter une méthode pour installer ce fabuleux système de blog sur son ordinateur en « local ».

Pré-requis

  • Un serveur Web, Lighttpd
  • PHP5 avec le module FastCGI (indispensable) ou PHP-FPM
  • SQLite [1] (installez bien le module PHP pour cette base de données)

Tous ces composants ont été installés via zypper (vous pouvez très bien passer par Yast2).

Régler le daemon

Comme il s'agit de mon ordinateur de bureau, je n'ai pas l'intention de le lancer à chaque démarrage, il sera utilisé ponctuellement.

# chkconfig --list | grep lighttpd
lighttpd                  0:off  1:off  2:off  3:on   4:off  5:on   6:off

On constate qu'il est activé lorsque le système est en mode multi-users (numéros 3 et 5).

Nous allons donc désactiver ce service

# chkconfig --del lighttpd
# chkconfig --list | grep lighttpd
lighttpd                  0:off  1:off  2:off  3:off   4:off  5:off   6:off

Désormais, on le lancera de cette manière :

# /etc/init.d/lighttpd start

Configuration du serveur

Dans cette partie, nous allons modifier (légèrement) le comportement par défaut de Lighttpd.

Le fichier principale s'appelle lighttpd.conf, il est situé dans /etc/lighttpd.

J'ai modifié la valeur des variables server_root , server.use-ipv6 et server.bind.

[...]
var.server_root = "/usr/www"

[...]
##
## Use IPv6?
##
server.use-ipv6 = "disable"

##
## bind to a specific IP
##
server.bind = "127.0.0.1"

[...]

Il reste à créer les répertoires /usr/www/htdocs :

# mkdir -p /usr/www/htdocs
# cd /usr/www ; chown -R lighttpd:lighttpd .

Ensuite, on va autoriser le listing des répertoires situés dans server_root, il faut modifier le fichier /etc/lighttpd/conf.d/dirlisting.conf

[...]
##
## Enabled Directory listing
##
dir-listing.activate      = "enable"
 
##
## Hide dot files from the listing?
## By default they are listed.
##
dir-listing.hide-dotfiles = "enable"

Pour une question de facilité, on va activer le module userdir, il faut décommenter la ligne correspondante dans le fichier /etc/lighttpd/modules.conf :

[...]

##
## mod_userdir
##
include "conf.d/userdir.conf"

[...]

Vous pouvez activer la variable userdir.exclude-user dans le fichier /etc/lighttpd/conf.d/userdir.conf

[...]
userdir.exclude-user = ( "root" )

[...]

Il nous reste plus qu'à créer le dossier public_html/ pour chaque utilisateur.

% mkdir ~/public_html

Vous pouvez maintenant tester le serveur.

PHP

Nous allons utilisé PHP avec le module FastCGI.

On va rechercher le nom exacte de ce binaire :

% ls /usr/bin/php* | grep cgi
/usr/bin/php-cgi   **
/usr/bin/php-cgi5

** : Il s'agit d'un lien symbolique vers /etc/alternatives/php-cgi, donc on l'oublie (vérifiez tout de même avec ls -l /usr/bin/php-cgi*).

On va rajouter ce module au démarrage du serveur, grâce au fichier /etc/lighttpd/modules.conf

[...]
##
## FastCGI (mod_fastcgi)
##
include "conf.d/fastcgi.conf"

[...]

Il ne nous reste plus qu'à rajouter une directive dans le fichier /etc/lighttpd/conf.d/fastcgi.conf :

[...]

fastcgi.server = ( ".php" =>
     ( "localhost" =>
         (
         "socket" => socket_dir + "/php-fastcgi-0.socket",
         "bin-path" => "/usr/bin/php-cgi5",
         "max-procs" => 1,
         "check-local" => "disable"
         )
     )
)

[...]

On peut relancer notre serveur.

Ici on utilise un socket UNIX, mais on peut très bien utiliser un socket utilisant la pile TCP/IP.

Installation de Dotclear

1. Téléchargez et installez le dans le dossier public_html/.

2. Il faut rendre accessible en écriture le répertoire cache/ :

% chmod a+w dotclear/cache

3. On va créer le « fichier » de la base de données (uniquement pour SQLite)

% touch db/database.db ; chmod a+w db/database.db
% chmod a+w db/

Vous pouvez donner un autre nom, ceci est un exemple.

4. On copie le fichier inc/config.php.in en inc/config.php et on l'édite. Les variables à modifier sont :

  • DC_DBDRIVER
  • DC_DBNAME (mettre le chemin complet depuis la racine du fichier du §3)
  • DC_MASTER_KEY

On termine l'installation en faisant pointer notre navigateur vers http://127.0.0.1/dotclear/admin/install/

Finaliser la configuration du serveur

On va empêcher le listing de la base de données, dans le fichier /etc/lighttpd/conf.d/dirlisting.conf on va rajouter une expression régulière à la variable dir-listing.exclude :

[...]

##
## list of regular expressions. Files that match any of the specified
## regular expressions will be excluded from directory listings.
##
dir-listing.exclude       = ( "~$", ".+\.db$" )

[...]

On va également interdir l'accès (depuis un navigateur) aux répertoires dotclear/db/ et dotclear/admin/install/. Pour cela il faut activer le module, mod_access (via le fichier /etc/lighttpd/modules.conf).

Dans le fichier /etc/lighttpd/lighttpd.conf on rajoute ces lignes :

[...]

##
## deny access to dotclear/db/ and dotclear/admin/install/
$HTTP["url"] =~ "(/db/|/install/)" {
     url.access-deny = ( "" )
}

On va empêcher le listing du répertoire public/, où sont stockés les médias tels que les images, les vidéos, etc. Dans le fichier /etc/lighttpd/conf.d/dirlisting.conf on rajoute ces lignes :

[...]

##
## Disable listin into public/ directory
$HTTP["url"] =~ "/public/" {
     dir-listing.activate = "disable"
}

[...]

Maintenant vous pouvez passer des heures à configurer votre blog.

Notes

[1] Je n'avais pas envie de passer du temps à configurer MySQL ou PostgreSQL.

Ne pas oublier les fondamentaux !!!

Pour le prochain billet, j'étais à la recherche d'un outil permettant de convertir des PDF en image (si possible en PNG). J'étais donc à la recherche d'un « pdf2png », et au détour d'un lien je tombe sur le logiciel ImageMagick. Cela tombe bien, sur chacune de mes machines, je le rajoute quand, il n'est pas présent.

Il s'agit d'un logiciel (s'utilisant en ligne de commande) extrêmement puissant dans la manipulation d'images. Il est tellemenent efficace, qu'on l'utilise généralement à seulement 2% de ces capacités.

Donc pour convertir un PDF en une image PNG, par exemple, il faut utiliser la commande convert.

convert Install_party_2010_VillesSA.pdf install-party.png

Le seul inconvénient, c'est que l'image obtenue fait la même taille (en pixels) que le PDF, or j'aimerais plutôt avoir une vignette. Il faut rajouter l'option -resize à notre précédente commande.

convert Install_party_2010_VillesSA.pdf -quality 90 -resize 55% install-party.png

Remarque : Plus la valeur du pourcentage est petit, plus l'image sera petite.

Apprivoiser Debian

Ce week end, j'ai décidé de rangé le tas de feuilles, qui commencé à s'accumuler sur mon bureau. Du coup je me suis dit, pourquoi ne pas tout mettre sur le wiki.

Toutes ces notes concernent le système d'exploitation, Debian. Système que je connais très peu, donc je m'excuse auprès des aficionados si certains termes ou commandes peuvent être faux.

L'ensemble est accessible à cette adresse.

J'en ai profité pour rajouter mes notes concernant le configuration d'une Debian PowerPC.

capture d'écran d'une Debian powerpc

N'hésitez pas à partager vos astuces.