mercredi 4 septembre 2019

Personnaliser l’écran de connexion d’un serveur Linux

Quand un serveur Linux démarre, on aime savoir qui il est et comment s’y connecter. C’est surtout vrai dans le cas de mise en réseau par DHCP ainsi que pour les machines virtuelles dans le cloud. Le désespoir est grand on voit la console afficher « Debian GNU/Linux buster/stable Clauzel.eu tty1 » mais qu’on a aucune idée d’où se connecter par ssh.

La solution est d’enrichir le fichier /etc/issue pour demander l’affichage d’informations supplémentaires. Ainsi, la configuration

Nom d’hôte : \n.\o
IPv6 : \6
IPv4 : \4
Système : \S{PRETTY_NAME} \s \m \r

produira l’affichage

Nom d’hôte : Clauzel.eu
IPv6 : 2a01:4f8:1c17:4608::42
IPv4 : 88.99.35.242
Système : Debian GNU/Linux 10 (buster) Linux x86_64 4.19.0-5-amd64

Remarques :

  • ici la balise \6 affichera uniquement la première adresse IPv6 de la première interface. C’est ennuyeux puisque l’IPv6 permet justement de disposer de nombreuses adresses ;
  • il est possible de choisir quelle interface on souhaite afficher, avec \6{eth0}, mais là encore on ne récupère que la première adresse ;
  • il est fort possible que cette solution ne fonctionne pas correctement avec systemd ; mais en même temps, qui utilise systemd sur ses serveurs ?

Documentation : man 8 getty

mardi 5 février 2019

Utiliser Steam sur un Chromebook

Manipulation réalisé le 2019-02-05 sur un ordinateur Acer Chromebook Spin 11 R751T-C8D8.

Le prérequis est naturellement d'avoir un appareil compatible.

Dans les préférences de ChromeOS, activer les application Linux. Puis lancer le terminal pour installer le client Steam :

sudo apt update
sudo apt install wget
wget https://steamcdn-a.akamaihd.net/client/installer/steam.deb
sudo apt update
sudo dpkg -i ./steam.deb
sudo apt -f install
rm -f steam.deb
steam

Une nouvelle fenêtre de terminal va alors s'ouvrir, avec dedans l'installation de nouveaux paquets. Accepter l'installation.

Note : sur certains Chromebooks, il peut être nécessaire de positionner la variable d'environnement CPU_MHZ="2300.000" avant de lancer le client Steam :

CPU_MHZ="2300.000" /usr/bin/steam

mercredi 20 septembre 2017

Déployer un nœud YaCy sur une adresse IPv6 et avec un accès https

Il est possible de mettre en place un nœud YaCy participant à la fédération globale, avec une connectivité IPv6 et HTTPS.

Qu’est-ce que YaCy ? Facile.

YaCy est un moteur de recherche que chacun peut installer pour indexer le web (pages publiques accessibles par internet), pour indexer un intranet ou pour parcourir d'autres données avec une fonction moteur de recherche. YaCy peut être utilisé de façon autonome, mais sa principale force est de pouvoir fonctionner en réseau peer-to-peer, ce qui fait que sa puissance s’accroît avec le nombre d'utilisateurs, qu'il est entièrement acentré (tous les "peers" sont égaux et il n'y a pas un organisme administratif central) et qu'il n'est pas censurable et ne stocke pas le comportement des utilisateurs.

La liberté de l'information ainsi obtenue par le biais des logiciels libres et d'un moteur de recherche distribué est également un des objectifs du projet.

Prérequis

  • avoir une connexion IPv6 opérationnelle avec une adresse publique (nous utilisons ici 2001:41d0:12a:4d00:dcdc::46)
  • disposer d’un nom de domaine (nous créerons ici le champ AAAA YaCy.Clauzel.eu)
  • utiliser Debian/stretch sans systemd
  • avoir apache2 en place (nous ajouterons 2 vhosts)
  • avoir un certbot récent, celui de Debian/stretch est trop ancien et ne gère pas les demandes pour un hôte uniquement en IPv6 :
apt-get install certbot apt-get install certbot
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

Mise en place du nom de domaine

  • Créer l’enregistrement DNS pour le nœud; ici YaCy.Clauzel.eu pointe sur 2001:41d0:12a:4d00:dcdc::46

Installer YaCy

Mise en place initiale :

  • Lire et appliquer la documentation de YaCy ; nous utilisons ici la version 1.92 pour linux. YaCy est installé pour l’utilisateur dédié yacy:yacy dans le répertoire /home/yacy
  • Dans l’interface web de YaCy Mode d'utilisation et compte>avec SSL, activer le HTTPS sur le port 8443
  • Dans l’interface web de YaCy Administration du système>Paramètres d'accès au serveur>staticIP, définissez l’adresse publique du nœud comme étant YaCy.Clauzel.eu

Indiquer à java que nous donnons la préférence à l’IPv6 :

service yacy stop

Dans /etc/init.d/yacy, modifier JAVA_ARGS="-server -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsolr.directoryFactory=solr.MMapDirectoryFactory -Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Stack=true"

service yacy start

À ce moment, YaCy doit tourner en mode Senior et être publiquement joignable à l’adresse http://YaCy.Clauzel.eu:8090

Créer le certificat TLS

Un simple certificat TLS suffit, mais vous pouvez vous faire plaisir avec les options :

service apache2 stop
certbot-auto certonly --standalone -d YaCy.Clauzel.eu --renew-by-default --must-staple --staple-ocsp --agree-tos --uir --hsts
service apache2 start

Préparation du certificat pour java

Les applications java ont ceci de casse-pied particulier qu’elles n’utilisent pas les certificats TLS au format PEM : il nous faut convertir notre certificat.

openssl pkcs12 -export -in /etc/letsencrypt/live/yacy.clauzel.eu/fullchain.pem -inkey /etc/letsencrypt/live/yacy.clauzel.eu/privkey.pem -out /etc/letsencrypt/live/yacy.clauzel.eu/yacy.clauzel.eu.p12 -CAfile /etc/letsencrypt/live/yacy.clauzel.eu/chain.pem -caname root -password pass:JeSuisUnMotDePasse -name yacy.clauzel.eu
keytool -importkeystore -srcstorepass JeSuisUnMotDePasse -deststorepass JeSuisUnMotDePasse -destkeypass JeSuisUnMotDePasse -srckeystore /etc/letsencrypt/live/yacy.clauzel.eu/yacy.clauzel.eu.p12 -alias yacy.clauzel.eu -srcstoretype PKCS12 -destkeystore /etc/letsencrypt/live/yacy.clauzel.eu/yacy.clauzel.eu.key

Mettre en place le certificat

Nous pouvons alors placer notre joli certificat dans l’arborescence de l’application.

service yacy stop
 cp /etc/letsencrypt/live/yacy.clauzel.eu/yacy.clauzel.eu.key DATA/SETTINGS/
 chown yacy:yacy DATA/SETTINGS/yacy.clauzel.eu.key
 chmod 400 DATA/SETTINGS/yacy.clauzel.eu.key

Configurer l’utilisation du certificat

Il reste maintenant à informer l’application de l’existence de ce certificat. Il faut vérifier/définir dans le fichier DATA/SETTINGS/yacy.conf :

port.ssl=8443
keyStore=DATA/SETTINGS/yacy.clauzel.eu.key
keyStorePassword=JeSuisUnMotDePasse
server.https=true
staticIP=YaCy.Clauzel.eu

Puis démarrer YaCy :

service yacy start

À ce moment, YaCy doit être publiquement joignable à l’adresse https://YaCy.Clauzel.eu:8443

Définir des redirections dans apache

Nous ajoutons alors des redirections web, qui permettrons d’accéder directement au nœud sans devoir spécifier le port.

Créer la directive /etc/apache2/sites-available/00-YaCy.conf :

<VirtualHost *:80>
    Define INSTANCE yacy.clauzel.eu
    ServerName ${INSTANCE}
    RewriteEngine On
    RewriteRule ^(.*)$ https://${INSTANCE}:8443 [redirect=301]
</VirtualHost>

<VirtualHost *:443>
    Define INSTANCE yacy.clauzel.eu
    ServerName ${INSTANCE}
    RewriteEngine On
    RewriteRule ^(.*)$ https://${INSTANCE}:8443 [redirect=301]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/${INSTANCE}/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/${INSTANCE}/privkey.pem
</VirtualHost>

Activons cette configuration :

a2ensite 00-YaCy.conf
service apache2 restart

YaCy est désormais accessible à l’adresse https://YaCy.Clauzel.eu, et http://YaCy.Clauzel.eu redirige le visiteur vers l’accès sécurisé

Bonne chance à tous, comme on dit « chez-moi ça marche ».

dimanche 4 septembre 2016

Utiliser Steam sur MacOS en 2016 avec un système de fichiers sensible à la casse

En 2016 , le client Steam sur Mac a beaucoup changé par rapport à ce qu’il était en 2010. Enfin, pas tant que ça… Il est toujours en 32 bits, exige toujours un système de fichiers non sensible à la casse, son overlay est toujours aussi problématique, et sa gestion des manettes de jeu toujours aussi erratique.

Bref, il convient d’adapter la procédure que nous avions mis en place en 2010. Le principe reste le même : on mets tous les éléments dans une image disque, et on crée des liens.

Ouvrir un terminal

Nous allons travailler principalement en ligne de commande. Eh, jouer se mérite un peu ;) On pourrait faire la même chose en utilisant des outils graphiques, mais cela serait plus long à expliquer.

Créer l’image disque qui accueillera Steam

L’image disque peut être rangée n’importe où : /Applications, $HOME, etc. Nous la mettrons dans $HOME/Applications/Jeux

mkdir -p ~/Applications/Jeux
cd ~/Applications/Jeux
hdiutil create -size 50g -type SPARSEBUNDLE -fs HFS+J -volname Steam Steam
created: /Users/USER/Applications/Jeux/Steam.sparsebundle

Pour d’informations, on se tournera vers le billet sur la manipulation des images disques.

Mettre en place l’application Steam

Ouvrir notre image disque pour Steam et y copier l’application Steam fournie par Valve.

hdiutil attach Steam.sparsebundle
/dev/disk4          	GUID_partition_scheme          	
/dev/disk4s1        	EFI                            	
/dev/disk4s2        	Apple_HFS                      	/Volumes/Steam

On constate ici que notre image disque a été montée dans /Volumes/Steam; elle apparait d’ailleurs sur le bureau. Il suffit maintenant d’y copier l’application Steam de Valve directement depuis l’image d’installation.

Adapter le compte utilisateur pour faire fonctionner Steam

Le principe est de stocker dans notre image disque tout ce qui a trait à Steam, et d’utiliser des liens pour maintenir les chemins d’accès.

mkdir -p /Volumes/Steam/Library
# copiez dans /Volumes/Steam/Library votre dossier applicatif « Steam » existant; ou vous pouvez simplement laisser Steam le recréer… et retélécharger tous vos jeux.
ln -s /Volumes/Steam/Library/Steam ~/Library/Application\ Support/Steam

Il ne reste plus qu’à synchroniser le tout et à refermer.

sync
hdiutil detach /Volumes/Steam
"disk4" unmounted.
"disk4" ejected.

Jouer !

Pour utiliser Steam, il suffit de monter l'image disque (en double cliquant dessus, par exemple), puis de lancer l'application.

mardi 5 juillet 2016

Personnaliser les en-têtes de courriels envoyés par Mail.app

Pour des besoins précis, on a souvent besoin de personnaliser les en-têtes des courriels que l’on envoie. Que ce soit pour y glisser des métadonnées de chiffrement, de transport, de filtrage, d’identité, ou encore de classification, c'est une pratique courante et transparente.

Sous MacOS, le logiciel Mail.app utilise la clé de configuration UserHeaders pour définir les en-têtes utilisateur. Ainsi, dans mon cas j’ajoute les deux en-têtes suivants :

  • OpenPGP : l’empreinte de ma clé PGP, et l’URI de son emplacement ;
  • X-FOAF : l’URI de mon identité pour le web sémantique.

Ces deux champs sont positionné via le terminal :

defaults write com.apple.mail UserHeaders "{ \
    OpenPGP = 'id=322B 89F1 FA51 3211 40F3  B358 5E88 C01E BAFD 1998; preference=signencrypt; url=https://Damien.Clauzel.eu/public/Cles_publiques/GnuPG/Damien_Clauzel.eu_publique.asc'; \
    X-Foaf = 'https://Damien.Clauzel.eu/Damien_CLAUZEL-FoaF.rdf'; \
}"

On constate désormais la présence des nouveaux en-têtes dans les courriels envoyés :

Return-Path: 
Received: from ?IPv6:2a01:e34:ec15:6030:b91e:f8a8:1579:acba? ([2a01:e34:ec15:6030:b91e:f8a8:1579:acba])
        by smtp.gmail.com with ESMTPSA id ue1sm3813420wjc.44.2016.07.01.09.55.57
        for 
        (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128);
        Fri, 01 Jul 2016 09:55:57 -0700 (PDT)
From: Damien Clauzel 
X-Google-Original-From: Damien Clauzel 
Subject: XXXXX
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
Content-Type: multipart/signed; boundary="Apple-Mail=_C578A8CA-4F46-4294-83B1-893306A67B44"; protocol="application/pgp-signature"; micalg=pgp-sha512
X-Pgp-Agent: GPGMail 2.6b2
X-Foaf: https://Damien.Clauzel.eu/Damien_CLAUZEL-FoaF.rdf
OpenPGP: id=322B 89F1 FA51 3211 40F3  B358 5E88 C01E BAFD 1998; preference=signencrypt; url=https://Damien.Clauzel.eu/public/Cles_publiques/GnuPG/Damien_Clauzel.eu_publique.asc
In-Reply-To: 
Date: Fri, 1 Jul 2016 18:55:56 +0200
Message-Id: 
References:  
To: Example 
X-Mailer: Apple Mail (2.3124)

jeudi 23 juin 2016

Monter un volume TimeMachine sous linux

Si sous MacOS il est immédiat de manipuler les images disques en ligne de commande, le faire sous un autre système POSIX demande un peu d’attention. Nous allons voir ici comment le faire, et plus spécialement pour accéder aux contenus des archives de TimeMachine.

Les archives TimeMachine

Une archive TimeMachine est une image sparsebundle contenant deux volumes :

  • un volume EFI permettant le démarrage d'un Mac sur disque externe ;
  • un volume HFSX (HFS+ sensible à la casse) contenant les fichiers de l'utilisateur.

Nous ne discuterons pas ici des (faibles) qualités intrinsèques du format de volume HFS+, ni de ses nombreux problèmes (telle la fragilité).

La technique

Sous linux, deux outils sont nécessaire pour ouvrir une archive TimeMachine et présenter correctement son contenu :

  • sparsebundlefs : agrège les bandes de l'image sparsebundle afin de présenter une image disque consolidée, exploitable par les outils habituels, tel mount ;
  • tmfs : présente efficacement le contenu d'une image disque contenant une sauvegarde TimeMachine. Cet outil n'est pas strictement indispensable pour accéder aux fichiers, mais la reconstruction de l'arborescence facilite grandement la lisibilité.

GitHub : sparsebundlefs

FUSE filesystem for reading Mac OS sparse-bundle disk images.

Mac OS X v10.5 (Leopard) introduced the concept of sparse-bundle disk images, where the data is stored as a collection of small, fixed-size band-files instead of as a single monolithic file. This allows for more efficient backups of the disk image, as only the changed bands need to be stored.

One common source of sparse-bundles is Mac OS' backup utility, Time Machine, which stores the backup data within a sparse-bundle image on the chosen backup volume.

This software package implements a FUSE virtual filesystem for read-only access to the sparse-bundle, as if it was a single monolithic image.

Debian : tmfs

Description-en: Apple Time Machine FUSE mount

Time Machine File System is a read-only virtual filesystem which helps you to read your Apple Time Machine Backup by reconstructing the hard-linked directories from the HFS+ metadata directory.

You can browse the tmfs mounted Time Machine normally and easily recover data from any backup point contained within.

Exemple

On crée les différents points de montage qui seront utilisés :

  • TimeMachine-DiskImage : l’« ouverture » de l’image sparsebundle présentant une vue manipulable par la commande mount ;
  • TimeMachine-Archive : l’image disque contenant l’archive TimeMachine ;
  • TimeMachine-Ouvert : la vue facilement exploitable de l’archive TimeMachine.
mkdir ~/mnt
mkdir ~/mnt/TimeMachine-DiskImage
mkdir ~/mnt/TimeMachine-Archive
mkdir ~/mnt/TimeMachine-Ouvert

Comme on manipule des points de montage, il faut passer root pour presque toutes les opérations. Remarque : peut suivre le détail de l’ouverture du volume avec les options -s -f -D.

sparsebundlefs \
        -o allow_root,ro,uid=$(id -u $USER),gid=$(id -g $USER),default_permissions,kernel_cache \
        MesSauvegardes.sparsebundle \
        ~/mnt/TimeMachine-DiskImage/

Un disque TimeMachine est bootable et contient donc en fait 2 volumes: celui de démarrage, et un volume contenant les données. Il nous faut donc désormais récupérer l’emplacement du volume contenant les données qui nous intéressent.

parted ~/mnt/TimeMachine-DiskImage/sparsebundle.dmg unit B print

# Disque /home/moi/mnt/TimeMachine-DiskImage/sparsebundle.dmg : 536870912000B
# Taille des secteurs (logiques/physiques): 512B/512B
# Table de partitions : gpt
# Disk Flags: 
# 
# Numéro  Début       Fin            Taille         Système de fichiers  Nom                   Fanions
#  1      20480B      209735679B     209715200B     fat32                EFI System Partition  démarrage, esp
#  2      209735680B  536736673791B  536526938112B  hfsx                 disk image

On prend le début du volume comme offset, et sa taille comme taille, pour faire pointer dessus un point d’entrée. L’ID de la boucle (ici /dev/loop0) est récupéré avec --show.

sudo losetup -f ~moi/mnt/TimeMachine-DiskImage/sparsebundle.dmg --offset 209735680 --sizelimit 536526938112 --show

On monte alors le volume ciblé de l’archive, qui contient notre archive TimeMachine.

sudo mount -t hfsplus -o ro,uid=$(id -u $USER),gid=$(id -g $USER) /dev/loop0 ~moi/mnt/TimeMachine-Archive/

Reste maintenant à ouvrir l’archive TimeMachine.

sudo tmfs \
        ~moi/mnt/TimeMachine-Archive/ \
        ~moi/mnt/TimeMachine-Ouvert/ \
        -o allow_other,ro,uid=$(id -u $USER),gid=$(id -g $USER),default_permissions,kernel_cache

On peut alors accéder — en lecture seule — aux fichiers de l’archive TimeMachine dans le répertoire ~/mnt/TimeMachine-Ouvert.

Ouf ! Ce fut laborieux, mais en posant les choses à plat on comprend la logique : il faut aller chercher en profondeur la bonne partition dans une image disque, et la manipuler avec un outil capable de traiter ses structures de données.

Une fois terminé de travailler, on referme proprement.

sudo fusermount -u ~moi/mnt/TimeMachine-Ouvert
sudo fusermount -u ~moi/mnt/TimeMachine-Archive
sudo losetup --detach /dev/loop0
sudo fusermount -u ~moi/mnt/TimeMachine-DiskImage

vendredi 13 septembre 2013

Travailler avec les volumes chiffrés de TrueCrypt sur Debian

TrueCrypt est un outil de chiffrement de volumes qui souffre de deux défauts majeurs : il n'a pas d'activité récente, et pour des raisons de licence n'est pas inclus dans Debian. Son alternative libre est tcplay, disponible dans les dépôts.

Package: tcplay

Maintainer: Laszlo Boszormenyi (GCS) <gcs@debian.org>

Description-en: Free and simple TrueCrypt Implementation based on dm-crypt tcplay is a free (BSD-licensed), pretty much fully featured (including multiple keyfiles, cipher cascades, etc) and stable TrueCrypt implementation.

This implementation supports mapping (opening) both system and normal TrueCrypt volumes, as well as opening hidden volumes and opening an outer volume while protecting a hidden volume. There is also support to create volumes, including hidden volumes, etc.

Since tcplay uses dm-crypt it makes full use of any available hardware encryption/decryption support once the volume has been mapped.

Homepage: https://github.com/bwalex/tc-play

L'approche utilisée ici est d'utiliser un disque dur entier dédié au stockage sécurisé. Nous mettrons en place un volume normal qui contiendra des données de leurre, ainsi qu'un volume caché dédié au travail réel.

Notes techniques :

  • le disque dur utilisé dans cet exemple est accessible via /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853[1]. Il contiendra uniquement un volume normal; pas même une table des partitions ;
  • les volumes sont successivement montés dans le répertoire courant ./tc ;
  • on utilise /dev/mapper/truecrypt pour le mappage des volumes  ;
  • on utilise des méthodes de chiffrement différentes pour le volume normal et le volume chiffré. Si une méthode est cassée, ça serait dommage que tous les volumes soient affectés.

Mise en place des volumes de leurre et caché

Opérations réalisées ici :

  1. créer les volumes ;
  2. remplir le volume de leurre, ainsi que le volume caché ;
  3. fermer les volumes et nettoyer le système.

Sur le disque entier, créer un volume normal avec un volume caché dedans

sudo tcplay --create --device /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853 \
  --cipher TWOFISH-256-XTS,AES-256-XTS \
  --pbkdf-prf=whirlpoe-erase \
  --hidden --cipher-hidden AES-256-XTS,SERPENT-256-XTS \
  --pbkdf-prf-hidden RIPEMD160

Ouvrir le volume normal, en protégeant le volume caché. Le volume normal est mappé sur /dev/mapper/truecrypt

sudo tcplay --map=truecrypt \
  --device /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853 \
  --protect-hidden

Formater le volume normal

sudo mkfs.xfs /dev/mapper/truecrypt

Monter le volume normal

sudo mount /dev/mapper/truecrypt ./tc/

Remplir le volume normal avec des données de leurre. Par exemple des clés privées ssh, des données bancaires, des reçus des impôts… Le but est de justifier l'usage d'un volume chiffré.

sudo cp ~/.ssh/id_ecdsa ./tc/

Démonter le volume normal

sudo umount ./tc

Supprimer le mappage du volume normal

sudo dmsetup remove /dev/mapper/truecrypt

Ouvrir le volume caché Le volume caché est lié à /dev/mapper/truecrypt

sudo tcplay --map=truecrypt --device /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853

Formater le volume caché

sudo mkfs.xfs /dev/mapper/truecrypt

Monter le volume caché

sudo mount /dev/mapper/truecrypt ./tc/

Remplir le volume caché avec des données sensibles. Par exemple, des clés privées PGP, des photos personnelles, votre plan de conquête du monde, etc.

sudo cp ~/.gnupg/secring.gpg ./tc/

Démonter le volume caché

sudo umount ./tc

Supprimer le mappage du volume caché

sudo dmsetup remove /dev/mapper/truecrypt

Travailler dans les volumes de leurre et caché

Actualiser les données du volume normal :

  1. ouvrir le volume caché : sudo tcplay --map=truecrypt --device /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853
  2. monter le volume caché : sudo mount /dev/mapper/truecrypt ./tc/
  3. travailler
  4. démonter le volume caché : sudo umount ./tc
  5. supprimer le mappage du volume caché : sudo dmsetup remove /dev/mapper/truecrypt

Actualiser les données du volume normal :

  1. ouvrir le volume normal, en protégeant le volume caché : sudo tcplay --map=truecrypt --device /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853 --protect-hidden
  2. monter le volume normal : sudo mount /dev/mapper/truecrypt ./tc/
  3. actualiser les données de leurre
  4. démonter le volume normal : sudo umount ./tc
  5. supprimer le mappage du volume normal : sudo dmsetup remove /dev/mapper/truecrypt

Note

[1] Disque dur Quantum Fireball TM1280A provenant de mon vénérable PowerMac 4400 (processeur PPC 603ev, 96Mo de RAM) datant 1996. Ce disque de 1,2Go présente toujours zéro secteur défectueux et tourne comme un charme. Pas comme les saloperies de disques durs actuels qui meurent au bout de 3 ans, alors qu'ils bossent à peine

mercredi 19 juin 2013

Passer les torrents à Transmission depuis elinks

Quand on travaille à distance sur des machines, on a parfois besoin d'utiliser des torrents pour distribuer en masse des données sans surcharger un serveur unique — par exemple, pour diffuser des mises à jour dans un parc informatique.

Le problème se pose quand il faut récupérer ces torrents sur un serveur web nécessitant une authentification : il faut alors gérer des cookies de session, parfois utiliser des formulaires, etc. Bref, quand une simple requête curl n'est humainement plus envisageable, il faut sortir le navigateur web.

Pour les torrents, j'utilise Transmission en mode serveur, naturellement; l'outil transmission-remote permet de le piloter. Mon navigateur web en mode texte de prédilection est elinks.

La technique consiste donc à plonger directement dans le site web — en utilisant les cookies d'authentification mémorisés par elinks — pour obtenir le lien de téléchargement du torrent, afin de le passer à transmission-remote qui dira quoi faire à transmission-daemon. Non, ce n'est pas aussi tordu que ça en a l'air, et ça répond parfaitement à bon nombre de situations du quotidien.

Elinks se configure très facilement via ~/.elinks/elinks.conf.

# déclaration du type mime des torrents
set mime.extension.torrent="application/x-bittorrent"

# on nomme un gestionnaire pour ce type mime; ici, tout simplement « bittorrent »
set mime.type.application.x-bittorrent = "bittorrent"

# elinks demandera confirmation avant de télécharger le torrent, et donc de le passer à transmission
set mime.handler.bittorrent.unix.ask = 1 
set mime.handler.bittorrent.unix-xwin.ask = 1 

# le téléchargement sera fait d'une façon non-bloquante dans elinks, car on a autre chose à faire.
# en même temps, un torrent est très petit, ça va vite à transférer
set mime.handler.bittorrent.unix.block = 0 
set mime.handler.bittorrent.unix-xwin.block = 0 

# on associe une commande externe au gestionnaire précédemment défini 
set mime.handler.bittorrent.unix.program = "transmission-remote --add %"
set mime.handler.bittorrent.unix-xwin.program = "transmission-remote --add %"

Les liens magnets seront gérés d'une même façon, excepté qu'on ne cible pas un type mime mais un protocole.

mardi 14 mai 2013

Trouve-moi un Vélo'v et autres développements autour des données ouvertes à Lyon

Avec plusieurs personnes d'OpenData69, je travaille autour des données publiques ou ouvertes dans le Rhône, et plus particulièrement à Lyon. Dans nos réalisations techniques, nous proposons — entre autre — différents démonstrateurs utilisant plusieurs jeux de données, dont ceux du Grand Lyon et des Vélo'v lyonnais de JCDecaux.

Ainsi, Emmanuel Scotto a réalisé un démonstrateur utilisant les données ouvertes du Grand Lyon ; sources.

Personnellement, je m'intéresse surtout aux vélos en libre service (en attendant les données des TCL…) avec un démonstrateur utilisant les données des Vélo'v de JCDecaux[1] ; sources.

Accueil démonstrateur vélov

Résultat démonstrateur vélov

Pour la suite, nous avons en tête différents outils pour permettre aux lyonnais de mieux utiliser leurs vélo'v :

  • des statistiques d'utilisations des stations : quelles sont les stations les moins/plus utilisées, à quelles périodes, etc. ;
  • des études sur les déplacements urbains : variation de l'utilisation des vélos selon la date (weekend, jour férié, vacances), la météo, les événements (rencontres sportives, concerts, etc.) ;
  • des prédictions de disponibilité/remplissage des stations : détection de motifs d'usages, et projections.

Ces travaux dépendent naturellement des API sur lesquelles nous pouvons nous appuyer, et donc de la volonté d'ouverture des administrations, des collectivités territoriales, et des entreprises.

Note

[1] sur IPv6, naturellement :)

mardi 11 septembre 2012

La rédaction moderne : utiliser XeLaTeX et biblatex ensemble

Le problème

LaTeX a pu évoluer pour supporter des fonctionnalités « modernes » comme UTF-8, les polices TrueType, etc., mais a désormais atteint ses limites. Pour bénéficier des nouvelles technologies de la composition informatique, il faut passer à un autre système, comme XeLaTeX.

Pour la bibliographie, on se tourne vers biblatex qui prend la suite de bibtex ; avec là encore un support de l'UTF-8, des nouveaux attributs, etc.

Biblatex: Bibliographies in LaTeX using BibTeX for sorting only. Biblatex is a complete reimplementation of the bibliographic facilities provided by LaTeX in conjunction with BibTeX. It redesigns the way in which LaTeX interacts with BibTeX at a fairly fundamental level.

With biblatex, BibTeX is only used (if it is used at all) to sort the bibliography and to generate labels. Formatting of the bibliography is entirely controlled by TeX macros (the BibTeX-based mechanism embeds some parts of formatting in the BibTeX style file. Good working knowledge in LaTeX should be sufficient to design new bibliography and citation styles; nothing related to BibTeX's language is needed. In fact, users need not remain bound to BibTeX for use with biblatex: an alternative bibliography processor biblatex- biber is available.

Development of biblatex and biblatex-biber is closely coupled; the present release of biblatex is designed to work with biblatex-biber version 0.9.6. The package needs e-TeX, and uses the author's etoolbox and logreq packages. For users of biblatex-biber, version 0.9 is required (at least; refer to the notes for the version of biblatex-biber that you are using). Apart from the features unique to biblatex, the package also incorporates core features of the following packages: babelbib, bibtopic, bibunits, chapterbib, cite, inlinebib, mcite and mciteplus, mlbib, multibib, splitbib. Biblatex supports split bibliographies and multiple bibliographies within one document, and separate lists of bibliographic shorthands. Bibliographies may be subdivided into parts (by chapter, by section, etc.) and/or segmented by topics (by type, by keyword, etc.). Biblatex is fully localized and can interface with the babel.

Biber: A BibTeX replacement for users of biblatex. Biber is a BibTeX replacement for users of biblatex. Biber supports full UTF-8, can (re)-encode input and output, supports highly configurable sorting, dynamic bibliography sets and many other features.

The CTAN distribution offers a compressed tar archive of the sources, etc., together with "binary" distributions for a variety of platforms. Note: on SourceForge biber is formally named "biblatex-biber", to distinguish it from an earlier (now apparently moribund) project called "biber".

L'objectif n'est pas ici de faire une présentation de ces différents outils ni de comment les utiliser, mais de montrer comment faire travailler ensemble ces deux éléments. Pour ce faire, nous allons considérer 3 ECM.

Utiliser XeLaTeX et biblatex ensemble

Prérequis :

  1. avoir installé — et testé — une distribution de XeLaTeX[1]
  2. avoir installé le paquet biblatex et ses suppléments de styles
  3. avoir installé le paquet biber

Les documentations se trouvent dans l'arborescence de Tex Live :

  • biblatex : $TEXLIVE/2012/texmf-dist/doc/latex/biblatex/
  • biber : $TEXLIVE/2012/texmf-dist/doc/bibtex/biber

En pratique on n'aura besoin que de celle de biblatex afin d'ajuster le style de rendu des citations.

Nos exemples :

  • ecm.tex : notre exemple complet minimal, qui sera développé. Il permet de s'assurer que XeLaTeX fonctionne correctement pour nos besoins
  • ecm_biblatex.tex : notre exemple complet minimal pour biblatex, qui sera développé. Il permet de s'assurer que biblatex fonctionne correctement pour nos besoins
  • ecm_biblatex_mieux.tex : notre exemple riche d'utilisation de biblatex avec XeLaTeX, avec une personnalisation du rendu
  • MaBiblioPerso.bib : bibliographie pour la démonstration

La partie qui nous intéresse principalement est dans le préambule du document :

\usepackage[
  backend=biber,         % choix de l'outil de traitement
  babel=hyphen,          % environnement linguistique dédié aux entrées en langues alternatives (utilise l'attribut « hyphenation »)
  backref=true,          % liens dans la bibliographie pour remonter dans le texte
  backrefstyle=none,     % afficher toutes les utilisations de la référence
  bibstyle=alphabetic,   % style pour les clés des références dans la bibliographie : [initialesAnnée]
  citestyle=alphabetic,  % style pour les clés des références dans le texte : [initialesAnnée]
  sorting=none,          % bibliographie triée par ordre d'utilisation des références
]{biblatex}                  % support des bibliographies
\bibliography{MaBiblioPerso} % appel à la bibliographie externe

Pour compiler les exemples, on utilise la séquence suivante :

  1. xelatex ecm+biblatex+mieux # calcule le rendu partiel du document
  2. biber ecm+biblatex+mieux # prépare la bibliographie
  3. xelatex ecm+biblatex+mieux # fini le rendu du document, avec bibliographie, hyperliens, numéros de pages, etc.

XeLaTeX utilise la classe biblatex, appelée dans les sources du document. Dans une approche similaire Biber est utilisé en place de bibtex sans options particulières.

Aller plus loin, avec des exemples d'utilisations de styles personnalisés :

Note

[1] TeX Live est actuellement ce qui se fait de mieux ; nous nous appuierons dessus pour les exemples

- page 1 de 3