Christophe Jacquet — Carnet — Mot-clé : Unix

Déplacer le disque dur principal d'une machine Debian, facile ?

C'est ce que je croyais...

On a dû changer de bus et/ou d'emplacement le disque root d'un serveur ? Qu'à cela ne tienne, on modifie le disque de boot dans le BIOS, on édite les options de grub au démarrage, puis une fois le système booté on va dans /boot/grub/menu.lst pour rendre les changements définitifs. Il y a alors deux lignes par noyau à changer, du type :

root            (hd0,0)
kernel          /boot/vmlinuz-2.6.18-6-486 root=/dev/hda1 ro

À chaque fois, il convient de mettre la bonne partition : ici hd0,0 ou /dev/hda1, selon la convention choisie.

Bien, bien. On reboote la machine, pour valider la chose. Elle boote comme un charme, pas de problème. On va donc la remettre à son emplacement de « production », au hasard au fond d'un placard, sans clavier ni écran bien entendu. Encore un boot, tout se passe bien, on en profite pour appliquer les dernières mises à jour, puis la machine vit sa vie.

Un jour, la machine reboote pour une raison quelconque, et là, perte de contact réseau ! Bien qu'elle soit headless, on se rend vite compte que Debian n'a pas booté. On l'extrait de son placard, on la connecte à un écran et un clavier, et là stupeur, on constate que grub cherche à booter sur l'ancien emplacement de la partition racine... À se taper la tête contre les murs.

Explication

Parmi les mises à jour effectuées, il y avait eu une mise à jour du noyau. Or lors des mises à jour du noyau, les sections par défaut de menu.lst (celles qui sont repérées par les BEGIN/END AUTOMAGIC KERNELS LIST) sont écrasées par un script qui s'appelle update-grub. Les modifications faites à la main sont donc perdues. Il ne faut donc pas faire comme expliqué ci-dessus sous Debian, mais au contraire, modifier directement les paramètres qui sont utilisés par update-grub. Ces paramètres sont donnés directement dans le fichier menu.lst, sous forme de commentaires spéciaux. Il y en a deux qui nous intéressent :

# kopt=root=/dev/hda1 ro 
# groot=(hd0,0)

Ce sont donc ces deux lignes qu'il faut modifier, puis pour appliquer les modifications aux lignes « réelles » du fichier de configuration, il suffit d'appeler update-grub.

Forwarding X11 dans SSH

Normalement, avoir la ligne

X11Forwarding yes

dans son /etc/ssh/sshd_config suffit pour que le forwarding de X11 dans SSH fonctionne.

Si cela ne fonctionne pas (variable DISPLAY non définie après le login), vérifier que vous avez installé le package xbase-clients (sous Debian en tout cas) car il est nécessaire (notamment pour xauth).

Flags et attributs étendus MacOS X

Outre les attributs classiques Unix, MacOS X possède des flags et attributs étendus qui peuvent faire perdre leur latin aux Unixiens... Exemple : il vous est impossible de supprimer un fichier. Pourtant, un ls -la vous confirme que le fichier et le répertoire vous appartiennent, et que vous avez dessus les droits en écriture. Vous ne comprenez pas. Vous essayez de passer root pour forcer les choses et... root ne peut pas non plus supprimer le fichier ! Que se passe-t-il ?

Flags

Des drapeaux peuvent être positionnés sur les fichiers. Notamment, il existe un drapeau uchg qui explique le problème ci-dessus. Le drapeau uchg verrouille complètement un fichier. Dans le GUI, il correspond à la case « Verrouiller » de la boîte d'infos du fichier. Pour pouvoir supprimer le fichier dans l'exemple ci-dessus, il faut d'abord retirer le flag uchg.

Pour afficher les flags des fichiers, les options de ls sont :

ls -lO

La modification de ces flags se fait avec la commande chflags, suivie du nom d'un drapeau pour l'ajout, ou du nom préfixé de no pour la suppression. Exemple (-R pour récursif) :

chflags -R nouchg répertoire

Attributs étendus HFS+

Les fichiers peuvent également posséder des attributs étendus. Par exemple, l'attribut com.apple.quarantine signale les fichiers récemment téléchargés. On peut afficher les attributs étendus par la commande :

ls -l@

La commande xattr permet de lister, ajouter et modifier les attributs. Par exemple, pour afficher les attributs et leurs valeurs, on peut utiliser :

xattr -l fichier

Article d'Ars Technica sur les attributs étendus.

ACL

Les ACL permettent de régler finement les permissions, au niveau de chaque utilisateur ou groupe. On peut afficher les permissions étendues avec :

ls -le

La modification se fait avec chmod +a.

Article d'Ars Technica sur les ACL.

GNU Readline

GNU Readline est une bibliothèque peu connue de l'utilisateur lambda, mais à laquelle il est utile de s'intéresser. En effet, c'est grâce à elle que de nombreux outils de type « ligne de commande » dialoguent avec l'utilisateur. Readline permet à l'utilisateur de taper des lignes de texte, de les modifier, et de naviguer dans un historique. Par exemple, c'est Readline qui gère l'édition de la ligne de commande sous GNU Bash, et gère son historique.

Principales combinaisons de touches

Il existe de très nombreuses commandes sous Readline, mais les quelques-unes présentées ci-dessous sont d'usage courant : il est vraiment utile de les connaître. Pour les autres, on peut se référer au manuel utilisateur.

CombinaisonAction
←, →Déplace le curseur dans la ligne
C-a, C-eSaute en début ou fin de ligne
C-l (« L »)Efface l'écran
C-wEfface le mot précédent ou en cours (vers la gauche)
ESC-dEfface le mot suivant ou en cours (vers la droite)
C-kEfface la fin de la ligne
C-_Annule la dernière modification
↑, ↓Navigue dans l'historique : plus ancien, plus récent
C-r (C-s, C-g)Recherche un texte dans une commande précédente, puis encore C-r passe à l'occurrence précédente, C-s à l'occurrence suivante. C-g annule la recherche
C-vInsère le caractère qui suit, sans l'interpréter. C'est très utile pour taper tels quels des caractères de contrôle. Par exemple, pour insérer ^A il faut taper C-v, C-a

Personnalisation

Les combinaisons ci-dessus constituent les choix par défaut. En réalité, tout est personnalisable via le fichier ~/.inputrc. Sous Bash, on obtient la liste des bindings en cours avec la commande bind -p.

Envoyer des e-mails sans installer de MTA

Soit un serveur Unix (disons Linux Debian), depuis lequel on désire envoyer des e-mails, par exemple depuis PHP, ou depuis des cronjobs de maintenance. Mais on n'a pas envie d'installer un MTA, genre Sendmail, Postfix ou Exim, pour diverses raisons (ne pas ouvrir de brèche de sécurité potentielle, ne pas charger la machine « pour rien »).

Il existe quelques solutions de clients SMTP, chargés d'envoyer des e-mails de façon ponctuelle via un relais SMTP, sans pour autant être des MTA en bonne et due forme (donc pas de serveur, pas de file d'attente asynchrone, mais plutôt un envoi synchrone de messages au coup par coup). Parmi eux, msmtp possède un paquet Debian. Voici comment procéder...

Lire la suite...

Update to VTPlayer driver

I never had the opportunity to test my VTPlayer driver on an architecture other than IA-32. As I have just got hands on a SunBlade 100, which now runs Ubuntu Linux, I tried to compile and test the driver. There were no compile error nor crashes, but the driver mysteriously failed when probing the device. As usual, this was caused by an indianness mess: everything in the USB protocol is little-endian, so if you test on little-endian machines only, you are prone to making mistakes like this one:

if ((udev->descriptor.idVendor != VTP_VENDOR_ID) || 
    (udev->descriptor.idProduct != VTP_PRODUCT_ID)) { ...

The comparisons depend on the computer's endianness, which is not portable (although it seems fine on IA-32). One has to use le16_to_cpu before comparing:

if ((le16_to_cpu(udev->descriptor.idVendor) != VTP_VENDOR_ID) ||
    (le16_to_cpu(udev->descriptor.idProduct) != VTP_PRODUCT_ID)) { ...

The latest version of the driver, labelled 0.4.1, now works fine on IA-32 and SPARC architectures, and should be OK on other architectures as well. It is compatible with the latest Linux kernels (2.6.22.9). It is available for download at SourceForge.net.

Ubuntu sur une SunBlade 100

J'ai récupéré une station SunBlade 100, qui pourrait venir remplacer mon Ultra 10... J'ai essayé d'y installer une Ubuntu Gutsy. Ce billet présente quelques points à retenir :

  • voir aussi le billet écrit lors de mes manips initiales sur l'Ultra 10 ;
  • la SunBlade 100 était équipée d'une carte graphique 3D sur bus PCI (en plus de la carte graphique intégrée sur la carte mère), que j'ai retirée pour éviter les soucis (de toute manière, pour en faire un serveur...)
  • si Solaris est déjà installé sur la machine, ne pas interrompre le boot de Solaris avec Stop-A puis essayer de booter le CD avec boot cdrom (ce qui paraîtrait logique). Cela se termine par un « Illegal Instruction » ou « Memory Address not Aligned » lors du chargement du noyau... Il faut booter sur le CD directement. Pour ma part, j'ai donc fait un petit setenv boot-device cdrom disk net, puis power-off, puis j'ai rallumé la machine (voir ce thread) ;
  • si un petit écran LCD est connecté (et pas un moniteur Sun multisync), charger le noyau avec une option du type video=atyfb:1024x768@60 ;
  • ne pas choisir de clavier « Sun », mais simplement un clavier US standard ;
  • le driver réseau attribue à l'unique carte réseau l'interface eth1, malgré des messages qui parlent d'eth0... ;
  • pour le moment, la machine ne sait pas s'éteindre proprement : le disque s'arrête, mais la machine reste sous tension.

PATH sous csh

Vous ajoutez un répertoire au PATH, ou bien un exécutable à l'un des chemins du PATH. Cependant, cela ne fonctionne pas et, habitué de Bash, vous vous arrachez les cheveux !

Solution : csh possède un hash des exécutables accessibles. Il faut donc bien penser à lancer la commande rehash après avoir ajouté une commande au PATH...

Je voudrais le 22 à Asnières-sur-Mac...

Les mystères de l'informatique : lorsque mon Mac essaie de se connecter en SSH sur mon serveur domestique (une UltraSPARC sous Ubuntu Linux), il se fait jeter comme un malpropre : « connection closed », sans message de debug explicite, que ce soit sur le client ou le serveur. Ceci alors qu'un autre client (Cygwin) n'a aucun souci pour se connecter...

Après quelques recherches sur des forums, j'ai fini par découvrir que d'autres utilisateurs de Mac avaient le même problème, et qu'il suffisait de rajouter les IP des clients à problèmes dans le fichier /etc/hosts du serveur. Ça marche, mais vous conviendrez que c'est pour le moins troublant.

D'autant plus que tout fonctionnait jusqu'à ce que j'installe Netatalk (serveur AFP) et Avahi (protocole Bonjour) sur l'UltraSPARC... Je suppose que cela m'a conduit à installer un module d'authentification qui trouble les connexions... Cette hypothèse est d'autant plus plausible que j'observe le même genre de comportements sur mon serveur IMAP.

Des explications ?

Cygwin/X en Français

J'utilisais depuis des lustres un Cygwin/X en tant client XDMCP avec une ligne de commande du type :

XWin -xkblayout fr-latin9 -xkbmodel pc104 -query ...

Après une mise à jour de Cygwin, le clavier a brusquement refusé de passer en layout français. Pour ceux qui auraient la même mésaventure, les « bonnes » options semblent être :

XWin -xkblayout fr -xkbmodel pc105

Pour information, la ligne de commande complète est :

XWin -xkblayout fr -xkbmodel pc105 -query mon_serveur -fullscreen -depth 16

Ça me permet d'avoir un affichage plein écran, et des couleurs sur 16 bits, ce qui me semble être un bon compromis entre qualité de rendu et débit réseau.


D'un point de vue plus personnel, les posts ont été rares ce mois-ci, et j'ai du retard dans mes e-mails : c'est que j'ai été bien occupé, avec notamment la fourniture de mon mémoire de thèse à mes rapporteurs. Hé oui ça progresse !

Graphique de circulation

Soit le problème « ferroviaire » suivant :

Ce billet explique comment y arriver simplement, à l'aide d'un petit script en Ruby et de Gnuplot.

Lire la suite...

Carte de test PIC18F/USB sous Linux

J'ai eu un peu de temps pour faire fonctionner ma carte de test PIC18F/USB sous Linux. Cela fonctionne très bien, à condition d'utiliser le bon pilote. Il s'agit de cdc_acm (CONFIG_USB_ACM), disponible sous le nom « USB Modem (CDC ACM) Support ». Une fois le driver chargé, la carte est reconnue automatiquement lors de la connexion. Cela crée un périphérique (/dev/ttyACM0[1]) avec lequel Minicom[2] (par exemple) permet de dialoguer.

Dans le log système, on retrouve des messages du type :

usb 2-1: new full speed USB device using uhci_hcd and address 5
drivers/usb/class/cdc-acm.c: This device cannot do calls on its own. It is no modem.
cdc_acm 2-1:1.0: ttyACM0: USB ACM device

Il est à noter qu'Ubuntu (Dapper Drake) possède par défaut le driver, donc ça fonctionne out-of-the-box (on branche et zou ! Minicom !). Je ne comprends pas comment ça se fait qu'il faille un fichier .inf à Windows, parce que visiblement, ce périphérique se déclare comme étant de la bonne classe...

Notes

[1] à créer éventuellement avec mknod /dev/ttyACM0 c 166 0

[2] Je recommande de lancer Minicom par minicom -o pour éviter d'envoyer à la carte des séquences AT d'initialisation de modem...

Transplantation de Cyrus+Sieve+Fetchmail

J'ai changé de serveur à la maison : je suis passé d'un vieux x86 (Celeron à 533 MHz) à une vieille sparc64 (UltraSparc II à 440 MHz). J'ai donc dû transplanter mon serveur IMAP Cyrus. Ce billet donne des détails sur l'opération. Il s'agit avant tout d'une référence personnelle (l'installation de Cyrus est toujours un peu délicate), mais cela doit pouvoir profiter à d'autres, à condition d'adapter les chemins. La distribution utilisée est une Ubuntu Dapper.

Lire la suite...

Vitesse de Linux

Je déplorais récemment la lenteur (au moins, la lenteur ressentie) de Linux. On m'a donné, et j'ai découvert, quelques pistes d'amélioration :

  • des alternatives à init sont en développement : pinit (mais les commits sur le CVS semblent vieux de 3 ans) et InitNG (qui semble beaucoup plus actif). Elles devraient permettre le lancement en parallèle de plusieurs services, d'où, on peut l'espérer, un démarrage bien plus rapide ;
  • Frederico Mena-Quintero du projet Gnome travaille à des améliorations de la rapidité de Gnome. Les résultats sont déjà visibles dans Gnome 2.14, et d'après les benchmarks, certains composants ont été grandement améliorés ! Voir aussi les transparents « Making Gnome Fast ».

Sun4u

J'ai fait quelques essais avec une station Sun Ultra 10 que j'ai récupérée. Comme ce n'est pas forcément évident lorsqu'on arrive du monde PC, voici quelques petites notes qui permettent de commencer...

Sur une Sun, le programme de démarrage s'appelle OpenBoot. Il énumère et teste le matériel, et passe la main au chargeur de l'OS. Au démarrage, OpenBoot ne se manifeste généralement pas. Il faut faire Stop-A pour rentrer dans OpenBoot, et pouvoir, en particulier, choisir le boot device et régler des paramètres de configuration de base. Attention, ça peut se transformer en Stop-Q, dans des conditions bizarres, sur clavier AZERTY.

Si la Sun met un temps fou à démarrer, avec les LED du clavier qui clignotent lentement, il est possible qu'elle soit configurée pour faire un long test matériel (appelé POST). Sous OpenBoot, vérifier alors la valeur de test-switch? (printenv test-switch?), et la modifier éventuellement avec setenv.

Par défaut, la Sun utilise une résolution d'écran élevée pour sa console (adaptée aux beaux moniteurs de chez Sun !). Pour une utilisation sur un petit écran LCD : setenv output-device screen:r1024x768x60. Sous Linux, on peut de même ajouter un paramètre video=atyfb:1024x768@60 lors du chargement du noyau.

Quelques liens :

- page 1 de 2

Valid XHTML 1.0 Strict © Christophe Jacquet.
Propulsé par DotClear.