Mot-clé - sysadmin

Fil des entrées - Fil des commentaires

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

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

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.

vendredi 7 octobre 2011

Attaque juridique sur la tz database et ses conséquences pour le monde entier

Qu’est-ce qui s’est passé ?

Ce 30 septembre 2011 s’est produit un événement rare, d’une ampleur catastrophique pour le monde entier. Et personne ne l’a su, en dehors d’informaticiens spécialisés (administrateurs systèmes, gestionnaires de distribution de logiciels, etc.) et compétents[1].

La législation sur la propriété intellectuelle a failli déstructurer non seulement internet, mais aussi la quasi totalité des ordinateurs du monde entier. Je n’ai pas l’habitude des exagérations inutiles, donc moi-même je me surprend à écrire des choses pareilles. Et pourtant, c’est vrai.

La société américaine Astrolabe qui publie des ouvrages d'astrologie et des atlas a abusé utilisé le droit américain sur la propriété intellectuelle pour mettre hors-ligne et faire cesser l’activité autour de la tz database. Cela ne vous parle absolument pas, et c’est normal : il s’agit d’une partie de l’informatique très précise qui ne concerne pas directement les utilisateurs finaux.

La tz database ?

La tz database est un ensemble d'informations techniques sur les fuseaux horaires dans le monde. Ces informations sont utilisées partout en informatique : Détail d'horloge murale

  • Chaque fois que vous indiquez la ville où vous vous trouvez, par exemple, Europe/Paris, vous utilisez la tz database.
  • Chaque fois qu'un de vos appareils se met à l'heure automatiquement, par exemple votre magnétoscope, vous utilisez la tz database.
  • Chaque fois que vous consultez un site web votre ordinateur et celui en face se réfèrent à la tz database.
  • Chaque fois que vous notez un rendez-vous dans votre agenda électronique, vous utilisez la tz database.
  • Chaque fois que vous dépendez d'un appareil médical qui permet de vous maintenir en vie, vous pouvez être sur qu'il utilise la tz database.
  • Chaque fois que vous téléphonez, vous utilisez la tz database.
  • Chaque fois que vous prenez l'avion, vous utilisez la tz database.
  • Chaque fois que vous allumez la lumière dans une pièce, vous pouvez être sur que c'est grâce à des ordinateurs qui utilisent la tz database.

La tz database a été mise en place par Arthur Olson en 1986, pour permettre de disposer en un seul d'endroit des informations nécessaires pour gérer la data et l'heure sur les dispositifs informatiques. Avoir une seule source d'information permit à l'époque de factoriser de nombreux efforts éparpillés et de résoudre les problèmes de synchronisation. Ce projet s'est révélé être tellement pratique qu'il a été ensuite utilisé par l'ensemble des équipements qui utilisent de l'informatique; et qui donc s'appuient sur la notion de temps. De nos jours, on retrouve l'utilisation de la tz database dans la quasi totalité des équipements informatiques.

La tz database est gérée dans la grande tradition du libre : ouverture et transparence totale. N'importe qui peut rejoindre le projet, discuter de la structuration des données, participer au travail de collecte et de vérification des informations, réfléchir sur l'évolution de la gestion du temps (année bissextile, ajout et retrait de seconde pour compenser la rotation de la Terre, etc). Il est donc aisé pour n'importe quelle personne de contrôler la qualité du travail accompli et de le réutiliser.

Par une de ces bizarreries dont l'histoire a le secret, la tz database est hébergée par le NIH, ce qui convient très bien. De plus, elle est libre de toute contrainte politique et ne dépend d'aucun organisme. Ce qui correspond parfaitement aux besoins [2].

La bonne gestion de la tz database est importante car chaque année plusieurs dizaines de modifications y sont apportées : des pays sont créés et supprimés, des décisions politiques sont mises en œuvre pour limiter la consommation d'énergie (horaire été/hiver), des zones géographiques sont réaménagées, des tremblements de terre affectent la rotation de la planète, etc.

Conséquences de l'attaque juridique sur la tz database

La tz database est alimentée par des informations publiques : des lois sont votées, des arrêtés sont pris, des calculs scientifiques sont publiés… Son contenu n'est donc pas soumis à de quelconques règles d'exclusivité. En fait, c'est même l'inverse : ces informations doivent absolument être diffusées. Et au niveau international, la question politique du temps est plutôt bien gérée. Bref, rien à signaler.

Tout le monde (ou presque) dépend des informations de cette base de données. L'armée, la police, les secours aux personnes, la médecine, les transports, les entreprises, les particuliers… il n'y a aucun domaine couvert par l'informatique qui ne soit pas concerné. Et donc, la législation sur la propriété intellectuelle a failli supprimer et bloquer tout usage ultérieur de ces informations. Vous réalisez maintenant ce qui a affolé les informaticiens ?

kilo-étalon

Supprimer cette base de données équivaut à supprimer le kilo-étalon du Bureau international des poids et mesures et à interdire l'usage de sa dimension. Il n'y aurait alors plus de référence pour calibrer les machines-outils, et les conséquences seraient aussi dramatiques qu'immédiates dans tous les secteurs. Il se passe actuellement une chose similaire au niveau du temps : sa référence (ou plus précisément la grille qui permet de l'interpréter) est supprimée.

Naturellement, les informaticiens ont mis en place des procédures temporaires pour préserver le temps[3] et réfléchissent à une réorganisation de la gestion du projet pour que cela ne soit pas reproductible. Mais le problème initial demeure, à savoir que de plus en plus des actes juridiques aberrants attentent non seulement aux libertés fondamentales, mais mettent aussi en danger notre vie quotidienne.

Que des avocats agissant au nom d'une société aient pu mettre à genoux le temps, simplement en ayant une mauvaise connaissance du sujet qu'ils traitent et en abusant d'une législation créé pour protéger la rente culturelle des grands groupes internationaux, est inacceptable.

Solution(s)

Une solution serait de faire avancer les réformes sur le droit d'auteur, la protection des œuvres, et de poursuivre la législation sur les droits et devoir des hébergeurs internet afin que cette situation ne puisse pas se reproduire. C'est le but des lois DADVSI, HADOPI et LCEN. Malheureusement cette approche est vouée à l'échec, de part la nature de la technique du numérique et de celle du travail législatif. Il va vraiment falloir que le législateur accepte le fait qu'il ne peut pas simplement « réguler internet ».

Plus prosaïquement, une solution pratique serait de supprimer la propriété intellectuelle sur les œuvres de l'esprit, les logiciels, et les brevets. Pan. Ah oui, c'est vrai : cela ne plairait pas à Vivendi Universal. Donc à la place on préfère conserver une loi qui permet de casser tous les appareils informatiques avec une simple lettre de 5 pages envoyée de l'autre côté de l'océan par une personne sur laquelle on n'a aucun contrôle.

Notes

[1] Si vous êtes directement concerné et que vous n'êtes pas au courant de cette histoire, posez-vous sérieusement la question de votre qualification… vraiment.

[2] Imaginez que vos dispositifs informatiques dépendent du bon vouloir politique d'un pays tiers ; vous apprécieriez ? Je ne pense pas ; donc c'est très bien que la politique reste en dehors du projet.

[3] Ah, l'informaticien, ce héros des temps modernes. Il passe sa vie à Sauver le Monde, et le grand public ne le sait jamais.

mercredi 17 juin 2009

Collection d'extensions pour Firefox ayant pour but de renforcer sa vie privée sur le web

La fondation Mozilla propose désormais aux utilisateurs de créer, partager et de collaborer sur des « collections ». Une collection est un ensemble d'extensions, de thèmes et de greffons qui étendent les fonctionnalités d'un logiciel; dans notre cas, il s'agit du navigateur web Firefox mais cela concerne également Thunderbird.

Pour utiliser les collections, il est au préalable nécessaire d'équiper Firefox de l'extension Add-on Collector.

La collection « Protection Vie Privée »

J'ai créé une collection dédiée à la protection de la vie privée sur le web, qui contient les extensions suivantes :

  1. Get jetable mail : Permet de générer à la volée des alias mail qui expirent automatiquement.
  2. CustomizeGoogle : Permet de filtrer les publicités et cookies de Google.
  3. Torbutton : Permet de basculer simplement sur TOR+privoxy durant la navigation web. Aide à la configuration de Firefox pour une navigation protégée.
  4. BetterPrivacy : Permet la gestion des cookies de Flash, autrement inaccessibles.
  5. Adblock Plus : Permet de filtrer les publicités, soit directement, soit en s'abonnant à des listes de règles prédéfinies.
  6. Adblock Plus: Element Hiding Helper : Permet d'ajouter simplement des filtres à la liste d'Adblock Plus, en créant des règles optimisées.
  7. BugMeNot : Permet la navigation anonyme sur des sites demandant une identification.
  8. FoxyProxy : Permet de passer automatiquement par des proxies prédéfinis par listes ou motifs lors de la navigation web.
  9. User Agent Switcher : Permet de changer à la volée l'identification de votre navigateur web.

Le but de cette collection « Protection Vie Privée » est d'apporter à l'utilisateur un ensemble cohérent d'outils, simples à utiliser, qui lui permettrons de protéger sa vie privée durant son utilisation du web : filtrage des cookies insidieux, des publicités envahissantes (et traçant les profils), gestion automatique des proxies, email jetable contre le SPAM, etc.

Un avantage secondaire des collections est la simplicité pour déployer des configurations standards: en installant une collection contenant les extensions à utiliser, on diminue le nombre de manipulations à faire, et la mise à jour de chaque élément est automatisée via l'administrateur de la collection qui décide quelle version employer.

Je discute avec des utilisateurs a priori avancés dans l'utilisation du web sur les forums Ubuntu-fr afin d'obtenir des retours sur cette collection orientée grand public.

Retours sur la collection « Protection Vie Privée »

La principale remarque est l'absence de l'extension NoScript.

C'est une remarque intéressante, qui s'inscrit dans un contexte plus large. Il y a plusieurs discussions sérieuses sur la pertinence ou non de mettre l'utilisateur grand public sur un Firefox avec NoScript. Cela va plus loin que le simple fait de « bloquer la publicité » ou de « protéger l'utilisateur ». J'expose ici simplement les 4 arguments majeurs qui soutiennent que NoScript n'est pas adapté au grand public :

  1. Impact d'usage. L'extension a un impact très fort sur le web. Énormément de sites populaires s'appuient sur des scripts pour construire leurs interfaces dynamiques. Bloquer ces scripts revient alors à fortement dégrader l'expérience de l'utilisateur sur ce genre de site;
  2. Utilisation contraignante. Il faut identifier puis catégoriser les sites web et les scripts qu'ils comportent. C'est un processus long, complexe et agaçant pour l'utilisateur qui est engagé dans une simple démarche d'utilisation;
  3. Efficacité contestée. Le renforcement de la sécurité est fortement contestable, car sans démarche active il est difficile de proposer une couverture fiable des techniques d'attaque. À moins de désactiver entièrement les scripts, mais là on retombe sur le point 1;
  4. Fonctionnalités déjà disponibles. Adblock Plus permet le blocage des scripts externes (et aussi internes, mais moins facilement) aux pages. Via les listes d'inscription, un filtrage des scripts publicitaires est déjà mis en place pour l'utilisateur.

Bonus : la collection « Utilisation courante du web »

J'ai également créé une collection Utilisation courante du web qui apporte un ensemble d'extensions utiles au quotidien pour la navigation web. On peut considérer cette collection comme un « kit de base » permettant une utilisation confortable du web.

vendredi 15 mai 2009

Résoudre les problèmes de son sur Ubuntu, version Jaunty Jackalope

Très simplement, les mêmes causes produisant les mêmes effets, la version Jaunty Jackalope d'Ubuntu souffre de problèmes de son. Comme avec Intreprid Ibex, des logiciels tels que Flash ou Skype restent muets et sourd.

La solution est simple : il suffit d'appliquer la même méthode que pour Intrepid Ibex, à savoir supprimer PulseAudio.

jeudi 19 mars 2009

Le grand pare-feu d'Australie prend l'eau

Le grand pare-feu d'Australie, déjà mort-né, vient de succomber une deuxième fois après la publication des mécanismes de filtrages mis en œuvre. Le contenu ciblé est sans surprise la pornographie, mais également des ressources politiques, médicales ou culturelles.

Beaucoup de personnes et d'organisations font l'analyse politique et technique d'un tel dispositif, je relèverais juste ici quelques détails qui m'ont amusé.

Par exemple, au moment de sa publication la liste contenait des références déjà obsolètes : noms de domaines inutilisés, adresses IP changées, etc. Pour être efficace, une filtrage doit être réactif. Dans l'approche du chat et de la souris retenue (les autorités australiennes identifient une nouvel élément, puis l'ajoutent à la liste noire), l'avantage est à l'« attaquant » (personne publiant des informations) car ce dernier dispose de l'initiative en choisissant où, quand et comment publier; le « défenseur » (le gouvernement australien) ne pouvant que répondre à l'attaque en bloquant. Le délais entre l'attaque et la défense devant être le plus court possible, cela impose au défenseur un effort important qui fini par le faire renoncer.

Également, du point de vue technologique les approches retenues sont bien trop naïves, avec des identifications partielles. Les URI sont incomplètes : la liste noire comporte ainsi www.water-melon.jp/shop/img/1008_1.jpg sans préciser le protocole utilisé pour accéder à la ressource. Est-ce http, https, ftp, gopher, wais, bittorrent, GNUtella, autre chose ? Sans identification complète de la ressource, la liste noire désigne paradoxalement à la fois trop largement des éléments, ce qui bloque des publications légales, et ne parvient pas à cibler précisément le contenu à censurer.

Mais aussi, bien sur, un filtrage simple sur un nom de domaine est inefficace car il suffit d'en créer un nouveau; les moteurs de recherche et le bouche à oreille suffisant pour maintenir le référencement auprès des utilisateurs.

Il faut aussi mentionner le chiffrement des connexions rendant inapplicable ce genre de filtrage, ainsi que les effets de différents aspects du routage (NAT, proxies, réécriture d'adresse, cache, etc) qui rendent compliqué ou impossible l'identification de la source et de la destination d'une transaction informatique.

Ce qu'il faut juste retenir est que le filtrage d'internet est actuellement impossible, du point de vue technique. Qu'on se félicite ou non d'un tel état n'a guère d'importance, ce qui compte est de l'accepter afin de pouvoir avancer. Si on part du principe qu'on ne résout pas un problème humain avec un outil technique, il faut alors mettre l'effort ailleurs si « on » souhaite « protéger » les citoyens d'une exposition à des publications estimées dangereuses. Par exemple, en investissant dans l'enseignement et l'éducation au lieu de faire des dépenses dans la répression. Mais au final, il s'agit bel et bien d'un choix de société qui doit impliquer la concertation entre le législateur et le peuple, pour aboutir sur un consensus explicite.

Au final, quelque soit la solution retenue, le résultat sera toujours le même : les utilisateurs faisant un effort minimal pour se protéger ne seront pas affecté par le filtrage, et la très grosse majorité des personnes inquiétées juridiquement ne seront pas représentatives de la cible originale du dispositif de filtrage. Tiens, curieusement cela me rappelle l'histoire des DRM. Ces mesures techniques de protection auront vécu deux années en France pour ensuite disparaître; et si on gagnait du temps en renonçant dès à présent chez-nous à un filtrage similaire ?

Références

vendredi 13 février 2009

Mise à jour de MacOS X Serveur en ligne de commande

Il est possible de mettre à jour MacOS par la ligne de commande, de façon à, par exemple, intervenir à distance sur une machine par SSH. On utilise pour cela la commande softwareupdate depuis un compte ayant les droits d'administration.

L'outil de mise à jour : softwareupdate

Si on les compare à d'autres outils comme apt de Debian, les possibilités de softwareupdate sont fortement limitées. Mais en compensation, il ne faut pas oublier qu'Apple prend en charge via des scripts les différents changements à apporter au système, donc le travail de l'administrateur système est simplifié.

D'ailleurs, softwareupdate ne permet de réaliser que des mises à jour du système, et rien d'autre : pas d'ajout ou de suppression de logiciels, de choix de version, etc. Pour ce genre de chose, on se tournera plutôt vers l'outil installer (man 8 installer)

La commande softwareupdate fonctionne de la façon suivante :

$ sudo softwareupdate --help
usage: softwareupdate <mode> [<args> ...]

        -l | --list             List all appropriate updates
        -d | --download         Download Only
        -i | --install          Install
                <label> ...     specific updates
                -a | --all              all appropriate updates
                -r | --recommended      only recommended updates

        Per-user preferences:
        --ignore <label> ...    Ignore specific updates
        --reset-ignored         Clear all ignored updates
        --schedule (on | off)   Set automatic checking

        -h | --help     Print this help

Le manuel (man 8 softwareupdate) contient également des précisions, avec des exemples simplifiés d'utilisation de la commande.

On constate donc que les possibilités se résument à lister les mises à jour disponibles, et à les installer individuellement ou collectivement. Simple, mais fonctionnel.

Exemple d'utilisation

Pour illustrer l'utilisation de softwareupdate, nous réaliserons la mise à jour de MacOS X Serveur, le vendredi 13 février 2009.

$ sudo softwareupdate -l
Software Update Tool
Copyright 2002-2007 Apple

Software Update found the following new or updated software:
   * JavaForMacOSX10.5Update3-1.0
        Java Update 3 pour Mac OS X 10.5 (1.0), 2959K [recommended]
   * SecUpdSrvr2009-001-1.0
        Security Update 2009-001 (1.0), 48400K [recommended] [restart]

Nous demandons l'installation (-i) de toutes les mises à jour disponibles (-a).

$ sudo softwareupdate -i -a
Software Update Tool
Copyright 2002-2007 Apple


Downloading Java Update 3 pour Mac OS X 10.5    0..20..40..60..80..100
Verifying Java Update 3 pour Mac OS X 10.5
waiting Java Update 3 pour Mac OS X 10.5
Downloading Security Update 2009-001    0.
Verifying Security Update 2009-001
Downloading Security Update 2009-001    0..20..40..60..80..100
Verifying Security Update 2009-001
waiting Security Update 2009-001
Installing Java Update 3 pour Mac OS X 10.5     0..20..40..60..80..100
Done Java Update 3 pour Mac OS X 10.5
Installing Security Update 2009-001     0..20..40..60..80..100
Done Security Update 2009-001
Done.

You have installed one or more updates that requires that you restart your
computer.  Please restart immediately.

il ne reste plus qu'à relancer les services utilisant les composants mis à jour (si on les connaît...), ou redémarrer le serveur (qui est souvent ennuyeux pour un serveur). Apple doit donc apporter des améliorations sur cet aspect.

vendredi 6 février 2009

Utiliser le thème GlassyBleu du portable HP Mini 1000 Mi Edition dans Ubuntu, version Intrepid Ibex

Le portable HP Mini 1000 Mi Edition est vendu avec Ubuntu. Le thème par défaut, noir, est splendide au point de vouloir l'utiliser sur son propre ordinateur.

Utiliser le thème GlassyBleu est très simple sur les systèmes à base de Debian qui ont GNOME comme interface. Le principe est de récupérer les paquets contenant les éléments du thème (fond d'écran, définition des éléments du thème, icones, etc), de les installer puis de les activer dans le compte courant. Cette opération peut être réalisée par un simple script.

#!/bin/bash

tmp=`mktemp -d` || exit 1
cd $tmp

# récupération des archives du thème
wget http://hpmini.archive.canonical.com/mie/dists/hardy-hpmini/universe/binary-lpia/glassy-bleu-browser-skin_0.5_all.deb
wget http://hpmini.archive.canonical.com/mie/dists/hardy-hpmini/universe/binary-lpia/glassy-bleu-theme_21_all.deb
wget http://hpmini.archive.canonical.com/mie/dists/hardy-hpmini/universe/binary-lpia/gnome-backgrounds-hp_0.4_all.deb
wget http://hpmini.archive.canonical.com/mie/dists/hardy-hpmini/restricted/binary-lpia/hp-tbird-theme_0.5_all.deb

# on s'assure que l'interface d'OpenOffice.org sera correcte
sudo apt-get install openoffice.org-style-*

# installation globale des paquets du thème
sudo dpkg -i ./*.deb

# suppression des altérations de thème GTK
gconftool --unset /desktop/gnome/interface/gtk_color_scheme

# définition du fond d'écran
gconftool --type string --set /desktop/gnome/background/picture_filename "/usr/share/pixmaps/backgrounds/gnome/hp/default_background_solid.png"
gconftool --type string --set /desktop/gnome/background/picture_options "stretched"

# définition du thème
gconftool --type string --set /desktop/gnome/interface/gtk_theme "GlassyBleu"

# définition du thème des icones
gconftool --type string --set /desktop/gnome/interface/icon_theme "GlassyBleu"

# définition du thème de metacity
gconftool --type string --set /apps/metacity/general/theme "GlassyBleu"

rm -Rf $tmp

Ce script va définir un style personnalisé dans le tableau de bord « Apparence » d'Ubuntu, et l'activer; également, un thème pour firefox et thunderbird sera disponible pour pousser l'intégration. Il est important de noter que le script n'a besoin d'être effectué qu'une seule fois, et que les paquets installés ne seront jamais mis à jour par la suite. Le thème ainsi défini peut donc être personnalisé à volonté.

jeudi 15 janvier 2009

Résoudre les problèmes de son sur Ubuntu, version Intrepid Ibex

Historiquement, la gestion du son avec GNU/linux a souvent été une bataille pour l'utilisateur. Même si Ubuntu prend soin d'éviter de retomber dans les guerres de tranchées historiques, il n'en reste pas moins que les problèmes continuent d'exister.

Ubuntu a fait le choix de s'appuyer sur PulseAudio pour présenter à l'utilisateur la gestion du son. Pour faire simple, même si PulseAudio peut travailler de façon autonome le plus souvent il se comporte comme une surcouche à ALSA et à OSS, avec quelques fonctionnalités spécifiques supplémentaires.

Pour l'utilisateur, la principale différence avec OSS et ALSA est l'intégration de PulseAudio dans l'environnement du bureau : applet de gestion, vuemètres des entrées-sorties, panneau de préférences accessibles, etc. Rien de bien indispensable, mais qui donne une vision simple et pratique du réglage et de l'utilisation du son sur l'ordinateur.

Mais le problème est que PulseAudio ne peut pas être utilisé directement par les logiciels audio, ils doivent être programmés en conséquence. Et c'est alors que se pose le problème du point de vue technique, car de nombreux outils et services, anciens et répandus, travaillent différemment sur les niveaux de la pile des services audio. Des passerelles existent pour faire cohabiter et communiquer les logiciels entre-eux, mais le résultat n'est pas satisfaisant pour l'utilisateur final qui doit jongler entre plusieurs technologies.

Quelles sont pour l'utilisateur grand public les conséquences de l'utilisation de PulseAudio ? Principalement, il n'est pas assuré de parvenir à faire fonctionner un logiciel. Ainsi, Skype est réputé pour ses problèmes d'utilisation dans Ubuntu à cause des mixeurs; FlashPlayer nécessite l'installation de bibliothèques particulières pour accéder à PulseAudio; et c'est sans parler des logiciels comme RecordMyDesktop qui réalisent des captures de session.

Une solution simple à ces problèmes est de supprimer PulseAudio du système, afin de basculer complètement sur ALSA. Cela implique de quitter les technologies préconisées par Ubuntu pour s'occuper nous-mêmes de la chaîne audio. Il s'agit naturellement d'une manipulation entièrement réversible.

La première étape consiste à supprimer les paquets de PulseAudio :

apt-get --purge remove pulseaudio* libpulse*

On constate que la dépendance sur le paquet ubuntu-desktop va intervenir et nous obliger à retirer ce paquet. Aucun souci ici, il suffira de le remettre en place avant la prochaine mise à jour du système vers Jaunty Jackalope. Ensuite, nous installons des outils pour gérer ALSA, qui vont nous amener également par le jeu des dépendances les bibliothèques nécessaires (qui sont normalement déjà présentes sur le système) :

apt-get install alsa-utils gstreamer0.10-alsa

Il ne reste qu'à redémarrer la machine pour nettoyer les services. Le résultat est que Skype, FlashPlayer et d'une façon générales toutes les applications utilisant l'audio fonctionnent correctement, sans réglage particulier. Mais on a perdu au passage les jolis vuemètres de PulseAudio.

On pourra affiner le réglage des entrées-sorties audio par les outils alsamixer et gnome-sound-properties.

lundi 8 septembre 2008

Manipuler les images disques de MacOS en ligne de commande

Avant-propos

Pour les utilisateurs venant du monde UNIX, il est indispensable de savoir manipuler en ligne de commande les images disques d'Apple. Il en existe de deux sortes : les traditionnelles (avec leur variations : chiffrées, compressées, etc) et les grossissantes.

Les images disques grossissantes sont des images disques ayant une taille maximale définie à la création. Toutefois, uniquement l'espace utilisé est écrit sur le disque, ce qui permet de limiter l'espace occupé.

Concrètement, une telle image se présente sous la forme d'un répertoire IMAGE.sparsebundle contenant une collection de bandes, un index des données et un fichier de métadonnées sur l'image. Il va de soit qu'il est extrêmement déconseillé d'aller trifouiller au petit bonheur la chance à l'intérieur de ces fichiers.

Il est important de se pencher sur la façon dont les volumes et disques sont attachés sous MacOS. Sans entrer dans les détails, on admettra que les disques physiques sont directement (c'est à dire, sans tampon ou couche tierce) accessibles par les nœuds /dev/rdisk*; ils ont leur contrepartie logique sous la forme /dev/disk*.

Une image disque, étant un volume logique, sera attachée sous la forme /dev/diskXsY, comme si elle était un disque dur. X est alors un identifiant du disque, et chaque partition est associée à un identifiant Y. Chaque partition du disque logique peut alors être montée; le point de montage par défaut étant /Volumes/. Il est bien sur possible d'attacher une image disque sans la monter, afin d'utiliser par exemple des outils travaillant sur les blocs.

Également, MacOS associe à chaque image disque une somme de contrôle permettant de tester son intégrité. Par défaut, des tests (parfois longs) sont effectués. À vous de décider si vous voulez les valider ou bien les ignorer.

La syntaxe des exemples suivants est valable pour MacOS Léopard, et peut-être des versions ultérieures (Jaguar, Panthère et Tigre ont connu des évolutions dans la gestion des images disques; sans parler de Puma et Guépard).

Attacher une image disque

Attache le disque en un nœud /dev/disk* et monte le volume dans /Volumes/. Il est possible d'attacher une image disque sans monter son volume en utilisant l'option -nomount. D'autres options comme -nobrowse ou -private marqueront le volume comme n'étant pas utilisable par les applications (ainsi, le Finder ne l'affichera pas) ou ne notifieront pas le système de l'ajout du disque (pas d'indexation SpotLight).

hdiutil attach IMAGE

Démonter une image disque

Démonte un système de fichiers d'une image disque sans libérer ce dernier. Le nœud /dev/disk* est toujours présent mais le système de fichiers n'est plus monté.

hdiutil umount /Volumes/IMAGE

Démonter et détacher une image disque

Démonter le système de fichiers; le nœud du disque logique est supprimé de /dev/disk*,

hdiutil detach /Volumes/IMAGE

Créer une image disque grossissante

Créer une image disque de taille maximale 500 Go, avec un système de fichier en HFS+ journalisé et sensible à la casse :

  • -size 500G : taille maximale de l'image
  • -fs HFSX : système de fichiers HFS+ sensible à la casse
  • -J : utilisation d'un journal pour le système de fichiers
  • -type SPARSEBUNDLE : le type d'image disque
  • -volname "Sauvegardes" : le nom du volume de l'image disque; il sera utilisé comme nom de point de montage par défaut dans /Volumes/
hdiutil create -size 500G -fs HFSX -fsargs -J -type SPARSEBUNDLE -volname "Sauvegardes" Sauvegardes.sparsebundle

Optimiser la taille de l'image disque

Pour une image disque grossissante, il est possible de demander la récupération de l'espace non-utilisé dans les bandes, pour faire ramener sa taille à celle du volume des données qu'elle contient.

hdiutil compact IMAGE

Formater un volume en HFS

Il est tout à fait possible de formater un volume d'une image disque existante. Il suffit d'attacher l'image disque, et de travailler sur les partitions. On peut utiliser les options suivantes :

  • -J : utilisation d'un journal pour le système de fichiers
  • -s : le système de fichier sera sensible à la casse
  • -v Données" : le nom du volume
newfs_hfs -J -s -v "Données" /dev/diskXXXXX

Connaître les opérations possibles sur les images disques

La commande hdiutil ne se limite pas aux simples opérations de montage et démontage de volumes. Elle permet également de convertir, graver, segmenter et d'une façon générale d'effectuer toutes les opérations possibles sur les images disques. La commande en elle-même intègre une documentation extensive, et son manuel contient des exemples concrets.

hdiutil help et plus précisément hdiutil help COMMAND.

Références

mercredi 3 septembre 2008

Problème d'encodage avec Java sous MacOS X Léopard

Sous Léopard, la machine virtuelle java (JVM) d'Apple se lance par défaut avec l'encodage MacRoman. Si choix est compréhensible au vu de l'histoire des technologies d'Apple, il est toutefois de nos jours rendu obsolète avec le passage à l'unicode. Pire, les développeurs et administrateurs systèmes s'attendent désormais à des outils fonctionnant en UTF-8, ce qui pose donc des problèmes d'intégration.

Pour les systèmes GNU/linux, les différentes JVM travaillent avec l'encodage du système qui est désormais l'UTF-8. Mais la JVM d'Apple se comporte différemment, avec un réglage défini en interne.

Faisons quelques essais avec ce jeu de test.

Commençons avec GNU/linux :

$ uname -a
Linux liristpq.Univ-Lyon1.fr 2.6.27-2-generic #1 SMP Thu Aug 28 17:18:43 UTC 2008 x86_64 GNU/linux

$ java GetEncoding 
Random bytes
encoding: UTF8

$ LC_ALL=ASCII java GetEncoding 
Random bytes
encoding: ASCII

Comme on peut le constater, l'utilisation de l'encodage est dynamique, avec par défaut celui du système.

Regardons maintenant ce que cela donne sur Léopard. Nous commençons par lancer la même commande que pour GNU/Linux, et ensuite nous affinerons manuellement l'encodage UTF-8 avec l'option -Dfile.encoding=UTF-8 :

$ uname -a
Darwin arda.local 9.4.0 Darwin Kernel Version 9.4.0: Mon Jun  9 19:30:53 PDT 2008; root:xnu-1228.5.20~1/RELEASE_I386 i386 i386 iMac6,1 Darwin

$ java GetEncoding
Random bytes
encoding: MacRoman

$ java -Dfile.encoding=UTF-8 GetEncoding
Random bytes
encoding: UTF8

$ LC_ALL=ASCII java GetEncoding
Random bytes
encoding: MacRoman

La différence est flagrante. La JVM d'Apple sous Léopard utilise par défaut l'encodage MacRoman et ne supporte pas la sélection par les locales, ce qui pose de réels problèmes d'interopérabilité.

Une solution simple est d'appeler systématiquement la JVM en spécifiant l'encodage UTF-8, mais elle n'est pas idéal.

samedi 12 février 2005

Tutoriel pour update-alternatives

On désire proposer de façon générique un éditeur via la commande éditeur. Cette commande aura pour but de choisir un éditeur parmi une liste définie, et de le lancer. Pour se faire, nous allons utiliser les alternatives. L'intérêt de cette méthode est de rendre transparent la sélection de clones pour un programme et de simplifier leur administration. Par exemple, on pourrait souhaiter de rassembler derrière la commande browser les logiciels mozilla, firefox, galeon, dillo, etc.

L'ensemble des commandes à gérer est rassemblé dans un groupe, que nous appellerons ici éditeur. De plus, on associe une priorité à chaque alternative du groupe. Lorsque le groupe est administré en mode auto, l'alternative employée est celle possédant la plus haute priorité.

Dans notre cas, nous avons les 3 éditeurs suivants que nous souhaiterions gérer derrière notre commande générique /bin/éditeur. Cette commande sera en fait un lien dynamique pointant vers l'un des 3 logiciels suivants :

  • /usr/bin/vi
  • /usr/bin/vim
  • /usr/bin/nvi

La première étape consiste à créer notre groupe éditeur.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vim 9
$ update-alternatives --display éditeur 
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
Current `best' version is /usr/bin/vim.

D'ailleurs, il est facile de le vérifier.

$ /bin/éditeur --version
VIM - Vi IMproved 6.3 (2004 June 7, compiled Jan 19 2005 08:10:19)

Continuons, et rajoutons nvi à notre groupe. Nous lui mettrons la priorité 2.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/nvi 2
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
Current `best' version is /usr/bin/vim.

Continuons encore, et rajoutons vi à notre groupe. Nous lui mettrons la priorité 1, c'est à dire la plus faible.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vi 1
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
/usr/bin/vi - priority 1
Current `best' version is /usr/bin/vim.

Notre groupe est désormais prêt. La commande éditeur est opérationnelle.

Imaginons maintenant que suite à une mauvaise mise à jour, vim soit inutilisable. Notre commande générique éditeur devient donc inexploitable. Nous allons corriger la chose en la faisant pointer vers un autre clone de vi : nvi.

$ update-alternatives --config éditeur

There are 3 alternatives which provide `éditeur'.

Selection Alternative
-----------------------------------------------
*+    1        /usr/bin/vim
      2        /usr/bin/nvi
      3        /usr/bin/vi

Press enter to keep the default[*], or type selection number:

Rentrons 2 pour choisir nvi.

Using `/usr/bin/nvi' to provide `éditeur'.
$ update-alternatives --display éditeur
éditeur - status is manual.
link currently points to /usr/bin/nvi
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
/usr/bin/vi - priority 1
Current `best' version is /usr/bin/vim.

On découvre ici que vim est bien notre logiciel appelé, et que la gestion du groupe est passée en manual. Ce qui veut dire que l'on n'utilise pas nécessairement l'alternative ayant la plus haute priorité (qui reviendrait dans notre cas à utiliser vim, ce que nous refusons de faire car celui-ci étant indisponible).

Pour revenir à vim, on repasse par l'option --config.

$ update-alternatives --config éditeur

There are 3 alternatives which provide `éditeur'.

Selection Alternative
-----------------------------------------------
 +    1        /usr/bin/vim
*     2        /usr/bin/nvi
      3        /usr/bin/vi

Press enter to keep the default[*], or type selection number:

Répondons 1 et constatons :

Using `/usr/bin/vim' to provide `éditeur'.

Il est temps de reconfier au système la gestion automatique des alternatives du groupe et de voir en quoi cela est une Bonne Idée.

$ update-alternatives --auto éditeur

Il est bien sur possible de retirer une redirection si un logiciel vient à être désinstallé. Examinons cette possibilité pour vi.

$ update-alternatives --remove éditeur /usr/bin/vi
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
Current `best' version is /usr/bin/vim.

Notre commande éditeur fait toujours appel à vim, et vi ne fait plus partie du groupe. De la même façon, si nous retirons l'alternative active, le système prendra automatiquement (d'où l'intérêt du mode auto :) l'alternative restante ayant la plus grande priorité.

$ update-alternatives --remove éditeur /usr/bin/vim
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/nvi
/usr/bin/nvi - priority 2
Current `best' version is /usr/bin/nvi.

Finalement, comme nous sommes des gens très propres, nous allons supprimer le groupe, remettant tout en l'état.

$ update-alternatives --remove-all éditeur
$ update-alternatives --display éditeur
No alternatives for éditeur.

Durant toutes ces manipulations, il est possible de corriger une entrée précédente en l'écrasant par la nouvelle. Pratique pour changer le chemin d'accès d'un fichier déplacé. Bien entendu, si la mauvaise manipulation a été à l'origine de la création d'un nouveau groupe, la solution qui s'impose est de détruire complètement ce groupe.

La seule méthode actuelle permettant de connaître la liste des alternatives mises en place est de lister le répertoire les contenant. Notez au passage que c'est une très mauvaise idée que d'effectuer directement des modifications dans le contenu de ce répertoire.

$ ls /etc/alternatives/

Pour aller plus loin, il est possible de créer des sous-groupes au sein d'un groupe. Par exemple, pour lier des logiciels à leurs manuels. Ce qui reviendrait à fournir dynamiquement le bon manuel à l'utilisateur en cas d'appel.

Ainsi, nous aurions les couples suivants :

  • usr/bin/vim et /usr/share/man/man1/vim.1.gz
  • /usr/bin/nvi et /usr/share/man/man1/nvi.1.gz
  • /usr/bin/vi et /usr/share/man/man1/vi.1.gz

Pour se faire, on rajoutera l'option --slave lors de la définition de l'alternative. La syntaxe suit celle de l'option --install.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vim 9 \
	--slave /usr/share/man/man1/éditeur.1.gz éditeur.1.gz /usr/share/man/man1/vim.1.gz
$ update-alternatives --install /bin/éditeur éditeur /usr/bin/nvi 2 \
	--slave /usr/share/man/man1/éditeur.1.gz éditeur.1.gz /usr/share/man/man1/nvi.1.gz
$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vi 1 \
	--slave /usr/share/man/man1/éditeur.1.gz éditeur.1.gz /usr/share/man/man1/vi.1.gz

Le résultat correspond à notre attente. En changeant d'alternative, on modifie non seulement le logiciel appelé, mais également son manuel. Un vrai bonheur.

$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vi - priority 1
 slave éditeur.1.gz: /usr/share/man/man1/vi.1.gz
/usr/bin/nvi - priority 2
 slave éditeur.1.gz: /usr/share/man/man1/nvi.1.gz
/usr/bin/vim - priority 9
 slave éditeur.1.gz: /usr/share/man/man1/vim.1.gz
Current `best' version is /usr/bin/vim.

La commande update-alternatives fourni encore d'autres possibilités, mais cela dépasse le cadre de cette simple documentation. Voir donc le manuel pour de plus amples informations: update-alternatives(8)

Références