freebsd
01/12/2009
amd64 a tué mon serveur...
...Mais je l'ai bien cherché.
FreeBSD 8.0-RELEASE est sorti vendredi dernier. Contrairement à mon habitude, je ne me suis pas empressé de l'installer. Non. J'ai voulu tenter une nouvelle expérience : passer mon serveur de i386 à amd64 (passer de 32 à 64 bits quoi), sans tout réinstaller.
Pour cela, j'ai trouvé un message dans la liste de diffusion freebsd-stable qui explique qu'il faut en fait installer un FreeBSD amd64 tout neuf sur un disque à part, recompiler kernel et base, et les installer sur le disque à migrer en montant les partitions sur /mnt (par exemple).
Je ne mets pas les détails de la procédure, parce que... ça semble marcher mais non !
Oui, le système est réinstallé avec des binaires amd64. Oui, le système démarre comme il faut. Oui, les ports marchent plus ou moins bien selon leur dépendance aux bibliothèques. Mais NON, les ports ne se réinstallent pas gentiment !
Entre les ports qui s'étaient liés à des bibliothèques i386 (maintenant incompatibles avec les binaires système), et ceux qui utilisent des dépendances et/ou des options incompatibles, irrelevantes ou indisponibles en amd64, j'ai passé environ 4 heures à essayer de dépatouiller le merdier avant de craquer et de supprimer TOUS les ports et les réinstaller un par un.
Au final j'aurais mieux fait de réinstaller un système amd64 neuf, réinstaller les ports, et restaurer mes données, ça m'aurait au pire pris le même temps...
30/10/2009
Faut vraiment que je mette des labels...
Une nouvelle aventure de foirage de mise à jour FreeBSD...
FreeBSD 8.0 est près de sortir, et j'ai voulu essayer la mise à jour par freebsd-update avec la RC2.
J'ai trouvé un descriptif de la méthode sur l'annonce de la disponibilité de FreeBSD 8.0-RC2. J'ai tenté cette méthode un peu pour le fun, et beaucoup parce que la mise à jour par sources que j'utilise d'habitude a raté avec une erreur (que j'ai pas cherché à démerder).
J'avais tenté freebsd-update la première fois que c'est sorti, avec FreeBSD 7.0, je crois. A l'époque, c'était pas encore tout à fait au point, et il fallait renseigner plein de choses dans un fichier de configuration inexistant. Ma tentative s'était conclue par un message d'erreur qui disait qu'il pouvait pas mettre à jour mon système... Donc j'avais laissé tomber.
Mais maintenant, c'est devenu beaucoup plus facile. Le système détecte les paquets installés, télécharge les patchs et binaires nécessaires, installe les mises à jour, et enlève même les anciens fichiers inutiles. La fête quoi.
Il a même vu que j'avais un noyau personnalisé, et m'a indiqué qu'il fallait que je le mette à jour à la main.
Mais voilà, ça a merdé pendant la mise à jour. En fait ça a l'air d'être une correction de bug des versions 7.x. La fois où j'ai installé FreeBSD 7.0, mon serveur n'est pas revenu du redémarrage, parce que le nom du disque a changé (il est passé de ad12 à ad10).
Là, mon disque est revenu en ad12... Et patatras la même histoire... Il faut respécifier la racine à la main (ufs:/dev/ad12s1a), remonter /usr à la main (mount /dev/ad12s1f /usr), galérer une heure durant se demandant pourquoi / est en lecture seule alors que les options du loader sont correctes (parce que j'ai pas dit mount -u /...). Et tout ça en clavier qwerty.
Une fois que j'ai mis à jour /etc/fstab, tout est revenu dans l'ordre. J'ai pu finir ma mise à jour, et mon serveur est reparti gaiement.
A part pour Plone, la nouvelle installation par buildout installant un Python indépendant du Python système, mais quand même lié aux bibliothèques système. Les anciennes, de FreeBSD 7.2, qui ont sauté quand freebsd-update a nettoyé les binaires obsolètes. J'ai dû relancer une installation (en effaçant les binaires Python du répertoire de l'instance Plone), et c'est reparti aussi.
Mais au final, ce qu'il faut que je fasse, c'est coller des labels sur mes partitions. Ça consiste à nommer une partition avec un nom indépendant et persistant, de façon à ce qu'il soit correctement identifié même s'il n'est pas reconnecté au même endroit (ou que le driver le nomme différemment). C'est une méthode destinée aux média amovibles, qui est applicable à mon cas sur les partitions du disque dur principal... Et tout est expliqué dans cette page du handbook !
Seul inconvéniant, il faut redémarrer en mode single user. Comme mon serveur n'est pas équipé d'ordinaire d'écran ou de clavier, c'est une opération plutôt fastidieuse. Mais je pense le faire à la sortie de FreeBSD 8.0-RELEASE, où j'en profiterai pour également passer de i386 en amd64. 64 bits rulez.
06/01/2009
FreeBSD 7.1-RELEASE
La nouvelle fournée est là. :)
L'annonce a été faite hier, FreeBSD 7.1-RELEASE est sorti.
J'ai bien entendu fait la mise à jour, et contrairement à la dernière fois, je n'ai pas eu de problèmes.
Je recompile les ports pour faire propre, et je verrai s'il y a des problèmes particuliers. Faut aussi que je regarde DTrace, maintenant que c'est implémenté, ça a l'air intéressant.
28/02/2008
FreeBSD 7.0-RELEASE est arrivé, et j'ai eu chaud
Il y a eu pas mal de changements dans cette nouvelle version. (avertissement : si vous ne comprenez rien à cet article, c'est généralement normal ;))
L'annonce est ici, les notes de mises à jour là, et les instructions de mise à jour ici.
La mise à jour de mon serveur ne s'est pas passée sans problèmes... Du moins ça allait jusqu'à compiler les nouveaux binaires et le nouveau noyau, mais au redémarrage, le serveur n'est pas revenu en ligne... Je me suis demandé si c'était pas parce que j'avais changé le driver de la carte réseau de nve(4) à nfe(4), vu que dans le nouveau fichier de configuration du noyau GENERIC, nve est commenté.
Mais non. nfe reconnaît bien ma carte réseau :
nfe0: <NVIDIA nForce 430 MCP13 Networking Adapter> port 0xb080-0xb087 mem 0xdfdd3000-0xdfdd3fff irq 23 at device 20.0 on pci0
C'est "juste" que le nouveau driver du contrôleur de disque a décidé de donner le nom ad10 à mon disque dur, qui portait jusque-là le nom de ad12... Du coup mon fichier /etc/fstab, qui liste les partitions et les points de montage respectifs était erroné... J'ai donc du corriger les entrées à la main, découvrant au passage que le vi de /rescue était buggé, il demande des fichiers de /usr, qui contient un vi complet...
Au final j'ai monté /usr à la main, et réussi à modifier fstab correctement. La machine a redémarré sans problèmes avec le nouveau noyau, j'ai pu finir la mise à jour.
Et ce matin, je suis un peu empêtré dans la recompilation des ports. Heureusement, j'ai trouvé (enfin, retrouvé) le document de Colin Percival décrivant la mise à jour de FreeBSD par freebsd-update. Je n'utilise pas moi-même ce logiciel (mais je vais l'essayer au boulot), mais il donne une astuce pour recompiler les ports sans que portupgrade déconne au milieu parce qu'il a mis à jour ses propres dépendances :
# portupgrade -f ruby ... # rm /var/db/pkg/pkgdb.db # portupgrade -f ruby18-bdb ... # rm /var/db/pkg/pkgdb.db /usr/ports/INDEX-*.db # portupgrade -af
Dans quelques heures ma machine sera à nouveau pleinement opérationnelle et récente à fond.
04/06/2007
How-to déménager FreeBSD d'une machine à une autre
Le making-of de Annis to Britig !
J'ai donc changé mon serveur. Vu que j'ai changé toute la machine, disque y compris, j'ai dû répliquer mon FreeBSD. Et j'ai employé une méthode lazy : j'ai copié le système sur le nouveau disque, en changeant la taille et le type des partitions (de UFS à UFS2).
Je n'ai pas changé l'architecture de i386 à amd64, bien que le nouveau processeur le supporte. J'ai eu peur que certains drivers ou certains ports soient incompatibles avec l'architecture amd64. Mais je pense que je tenterai la prochaine fois, après tout, amd64 est une architecture Tier 1.
Comme Ghost ne permet pas ce genre de chose, je me suis inspiré d'une très bonne doc sur le net, de chez FreeBSD Cheat Sheets, que j'ai complétée et mis en ligne.
Enjoy!
Migrer FreeBSD sur un autre disque
Pour des raisons comme le manque de place ou un changement de matériel, on peut être amené à changer le disque de son installation FreeBSD. J'ai survécu à la manœuvre, voici comment.
Tout d'abord, je refais de la pub pour l'excellent FreeBSD Cheat Sheets, et bien sûr le FreeBSD Handbook. Ces deux docs donnent à peu près toutes les bases pour le système.
Pour l'opération qui nous concerne, je me suis servi de Moving to a Larger Hard Drive de FreeBSD Cheat Sheets. Mais je me suis rendu compte que la "recette" n'est pas tout à fait complète. Je la reprends donc ici, traduite en français, et annotée d'après mon expérience (en italiques dans le texte).
Cet article décrit la méthode pour migrer votre système FreeBSD vers un autre disque dur. Cette procédure suppose que vous utilisez des disques ATA ou SATA (le cas des disques SCSI serait similaire toutefois), et que FreeBSD est le seul système sur le disque dur.
Éteignez la machine et installez le nouveau disque dans l'ordinateur. Dans mon cas, j'ai plutôt installé l'ancien disque dans la nouvelle machine, car je changeais la machine, et le nouveau disque étant de connectique SATA, je n'aurais pas pu le connecter sur l'ancienne machine. J'ai donc compilé un noyau
GENERIC(comment compiler un noyau chez FreeBSD Cheat Sheets et dans le Handbook) avant d'installer le disque dans la nouvelle machine. Installer le nouveau disque en maître sur le canal ATA secondaire vous donnera la plus grande bande passante pour le transfert de données, mais vous pouvez installer le nouveau disque en esclave sur le contrôleur ATA primaire. Assurez-vous de paramétrer les cavaliers sur le nouveau disque et le disque existant de façon adéquate. Ces conseils sont inutiles dans le cas des disques SATA, et les nouveaux disques et contrôleurs ne perdent plus tellement de performances lorsqu'ils sont connectés à la même chaîne ATA.Démarrez en mode single user. Si vous utilisez FreeBSD 5.x ou 6.x, choisissez l'option Boot FreeBSD in single user mode dans le menu de démarrage. Sinon, pendant le décompte du bootloader, appuyez sur une touche quelconque autre que la touche Entrée, et à l'invite de démarrage, entrez la commande :
ok boot -s
Acceptez le shell par défaut (
/bin/sh), et à l'invite du shell, entrez les commandes suivantes :# fsck -p # mount -u / # mount -a -t ufs # swapon -a
Lancez
sysinstall:# /usr/sbin/sysinstall (Sur FreeBSD 4.x, c'est/stand/sysinstall)Choisissez Configure, puis Fdisk sur le menu, et sélectionnez votre nouveau disque (pour les disques ATA, le nouveau disque sera
ad1si c'est l'esclave primaire, ouad2si c'est le maître secondaire ; pour un disque SATA sur le canal 4, ça seraad8). Pour la suite de ce document, nous supposerons que le nouveau disque estad2(Dans mon cas, c'était en faitad12).Dans FDISK Partition Editor, appuyez sur A pour utiliser le disque entier (attention au clavier, QWERTY par défaut, A c'est pour utiliser tout le disque, Q c'est pour quitter !). Appuyez sur W pour écrire les modifications sur disque, confirmez votre choix sur l'avertissement qui vous dit que ce que vous faites ne devrait être fait que sur un système déjà installé où vous ajoutez un disque. Appuyez sur Q pour continuer.
À l'invite Install Boot Manager, choisissez le gestionnaire de démarrage approprié. Ce document suppose que FreeBSD est le seul système installé, donc choisissez le gestionnaire Standard.
De retour au menu sysinstall, choisissez Label.
Dans le Disklabel Editor, créez les partitions suivantes :
ad2s1a /mnt 512 Mo en UFS2 ad2s1b swap 4 Go en swap (4x la RAM du système) ad2s1d /mnt/var 8 Go en UFS2 + Softupdates ad2s1e /mnt/tmp 4 Go en UFS2 + Softupdates ad2s1f /mnt/usr le reste en UFS2 + Softupdates
Ce schéma suppose que votre système de fichiers existant est défini comme l'organisation par défaut de FreeBSD. Si votre schéma est différent, reproduisez-le. De plus, je liste ici les tailles de partitions por mon disque de 160 Go, agrandies par rapport aux valeurs par défaut en adéquation avec mes besoins, adaptez à votre situation.
Le plus simple pour partitionner est de laisser faire Disklabel Editor. Appuyez sur A pour peupler le disque avec les partitions standard avec les tailles préconisées. Vous pourrez par la suite supprimer celles dont vous voulez changer la taille et les recréer avec vos paramètres.
Notez que si vous supprimez la première partition (a), la partition que vous créerez aura le nom d au lieu de a (donc
ad2s1ddans notre exemple), à moins que vous ne spécifiez que le point de montage est/. Changez ensuite le point de montage en/mnten utilisant l'option M.Écrivez les changements sur le disque par W (confirmez), vous aurez probablement un message d'erreur sur l'impossibilité d'ajouter
ad2s1ben partition de swap, mais c'est normal, vous en avez déjà une ! Vous pouvez donc ignorer le message. Appuyez sur Q pour continuer.Quittez sysinstall.
Les nouvelles partitions devraient êtres montées sur /mnt. Sinon montez-les :
# mount /dev/ad2s1a /mnt # mount /dev/ad2s1d /mnt/var # mount /dev/ad2s1f /mnt/usr
/mnt/tmp n'est pas indispensable, ce sont des fichiers temporaires.
Copiez les partitions existantes :
# tar cf - --one-file-system -C / --exclude='mnt/*' . | tar xpvf - -C /mnt # tar cf - --one-file-system -C /var . | tar xpvf - -C /mnt/var # tar cf - --one-file-system -C /usr . | tar xpvf - -C /mnt/usr
Éteignez la machine et enlevez l'ancien disque. Déplacez le nouveau disque à l'emplacement logique de l'ancien (même canal ATA, même position maître/esclave). Assurez-vous d'avoir replacé les cavaliers de manière adéquate. Si vous passez d'un disque ATA à un disque SATA, changez les entrées du fichier /boot/fstab pour refléter le changement du nom du disque.
Avant :
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1e /tmp ufs rw 2 2
/dev/ad0s1f /usr ufs rw 2 2
/dev/ad0s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
Après :
# Device Mountpoint FStype Options Dump Pass#
/dev/ad2s1b none swap sw 0 0
/dev/ad2s1a / ufs rw 1 1
/dev/ad2s1e /tmp ufs rw 2 2
/dev/ad2s1f /usr ufs rw 2 2
/dev/ad2s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
Attention à ne pas changer la définition du CD-ROM.
Démarrez en mode single user comme indiqué précedemment.
À l'invite du shell, montez les partitions :
# fsck -p # mount -u / # mount -a -t ufs # swapon -a
Vérifiez que toutes les partitions sont correctement montées :
# mount
Vous devriez obtenir quelque chose comme :
/dev/ad0s1a on / (ufs, local) devfs on /dev (devfs, local) /dev/ad0s1e on /tmp (ufs, local, soft-updates) /dev/ad0s1f on /usr (ufs, local, soft-updates) /dev/ad0s1d on /var (ufs, local, soft-updates)
Dans le cas d'un disque SATA, le nom du disque devrait être différent et conforme à la modification du /etc/fstab.
Redémarrez et lisez les messages du boot pour vous assurer que le système fonctionne correctement.
02/06/2007
Britig
J'ai changé mon serveur.
J'ai revu mon choix de barebone, le Asus Value était un peu trop grand pour caser dans l'emplacement de l'ancien serveur. En plus je reste dans la continuité des Asus Terminator, c'est sympa. Mais bon, je préférais le design du T2...

Asus T3
Récapitulatif :
"Annis" (l'ancien serveur) |
"Britig" (ce serveur) |
|
| Modèle barebone | Asus Terminator K7 | Asus T3-M2NC51PV |
| Taille | 181,2 (L) x 275,0 (P) x 300,6 (H) mm | 175,0 (L) x 360,0 (P) x 290,0 (H) mm |
| Processeur | AMD Duron 1,2 GHz | AMD Athlon 64 X2 3800+ (2 GHz) |
| Mémoire | 512 Mo DDR-SDRAM PC2700 | 1 Go DDR2-SDRAM PC5300 |
| Disque | Seagate Barracuda 7200.7 40 Go (7200 rpm) PATA | Hitachi Deskstar 7K160 160 Go (7200 rpm) SATA2 |
| Lecteur optique | LG GSA-4160B DVD-RW | LG GSA-H42N DVD-RW |
| Vidéo | Via KL133A (S3 Savage intégré) | nVidia nForce4 (GeForce6 intégré) |
| Sortie vidéo | VGA | VGA et DVI |
| Connecteurs | 2 x USB 2.0 | 6 x USB 2.0 (2 avant, 4 arrière) ; 2 Firewire 400 (1 avant - 4 broches, 1 arrière - 6 broches) |
| Réseau | Realtek RTL8139 10/100 Mbps | nVidia MCP51 10/100/1000 Mbps |
| Son | AC'97 | HDA |
| OS | FreeBSD (6.2-RELEASE) | FreeBSD (6.2-RELEASE) |
| Prix | 340 € (mai 2003) | 340 € (juin 2007) |
Ça montre l'évolution de la technologie et des prix en 4 ans... Techniquement, Annis coûtait plus cher en 2003, je l'ai achetée avec 256 Mo de RAM...
Le T3 est une machine impressionnante. Le Terminator était une machine de base peu évolutive, alors que le T3 est doté d'un port PCI-Express 16x, d'un port PCI, de 4 slots de DDR2, et de deux emplacements 3,5" internes, en plus d'avoir des ports Firewire, une sortie DVI et un lecteur de cartes mémoire Memory Stick, SD et Compact Flash. Le T3 serait presque utilisable en remplacement d'une de nos machines de bureau !
Le serveur a donc été migré, et l'augmentation de vitesse devrait être perceptible même en dehors du réseau local. En tous cas, je le sens, ici.
Avec 2 fois plus de RAM, 8 fois plus de swap, et 2 processeurs 2 fois plus rapides, faut bien !
Il me reste toutefois à résoudre certains problèmes. D'abord, le monitoring par mbmon ne marche plus, le bus de monitoring système du nForce 4 n'est pas reconnu. Je vais donc devoir lire les sysctls de FreeBSD, et faut que j'apprenne... Ensuite, l'allumage du PC lorsqu'il est branché au courant n'a pas l'air de marcher. Il faut que je fasse des tests. Enfin, problème mineur, la carte son intégrée ne marche pas. Je m'en fous un peu, vu que je ne me sers pas du son, mais j'aimerais bien que ça soit reconnu, pour le fun. J'avais désactivé la puce son d'Annis, et je n'avais pas eu l'occasion de me documenter sur cette partie du système. Là j'en aurai l'occasion.
Je reparlerai surement de tout ça dans les jours à venir.
[Ajout de dernière minute] Bah si finalement la reprise sur coupure de courant marche.
01/06/2007
Annis to Britig
J'envisage de changer de serveur.
Ces pages sont servies de chez moi, d'un mini PC que j'ai acheté il y a 4 ans, je crois. Et bien qu'elle ait bénéficié de mises à jour logicielles régulières et de mises à jour matérielles ponctuelles, je pense qu'elle commence à montrer des signes de faiblesse.
Je pense donc profiter du bas prix des mémoires en ce moment pour changer. Voici un comparatif du avant-après :
"Annis" (ce serveur) |
"Britig" (projet en cours) |
|
| Modèle barebone | Asus Terminator K7 | Asus Value V3-M2V890 |
| Taille | 181,2 (L) x 275,0 (P) x 300,6 (H) mm | 168,0 (L) x 354,0 (P) x 380,0 (H) mm |
| Processeur | AMD Duron 1,2 GHz | AMD Athlon 64 X2 3800+ (2 GHz) |
| Mémoire | 512 Mo DDR-SDRAM PC2700 | 1 Go DDR2-SDRAM PC5300 |
| Disque | Seagate Barracuda 7200.7 40 Go (7200 rpm) PATA | Hitachi Deskstar 7K160 160 Go (7200 rpm) SATA2 |
| Lecteur optique | LG GSA-4160B DVD-RW | LG GSA-H42N DVD-RW |
| Vidéo | Via KL133A (S3 Savage intégré) | Via K8M890 (vidéo intégrée) |
| Sortie vidéo | VGA | VGA |
| Connecteurs | 2 x USB 2.0 | 6 x USB 2.0 (2 avant, 4 arrière) |
| Réseau | Realtek RTL8139 10/100 Mbps | Realtek (?) 10/100/1000 Mbps |
| Son | AC'97 | AC'97 |
| OS | FreeBSD (6.2-RELEASE) | FreeBSD (6.2-RELEASE) |
| Prix | 340 € (mai 2003) | 270 € (juin 2007) |
J'ai eu cette pulsion la première fois quand j'ai vu tourner FreeBSD sur les serveurs dual-core du boulot. Les compilations se font tellement vite, et le temps de réponse est tellement court que j'ai été réellement surpris.
Britig, la nouvelle machine, ne sera pas un foudre de guerre, soyons réalistes, mais sera au moins deux fois plus performante qu'Annis (estimation Pifométric©). On double presque la fréquence d'horloge, on double le processeur, on double la RAM, on accélère les accès disques, et on augmente la bande passante de l'interface réseau. Tout est mieux.
Normalement j'aurais été assez surpris de voir qu'on peut monter une telle machine avec si peu d'argent, mais après avoir vu la Corée et son marché informatique, plus rien ne m'étonne (je regrette juste que je n'aie pu ramener une petite machine comme celle-ci de là-bas). Et en tapant ça, je me dis que j'aurais pu la monter là-bas et l'expédier par bateau facilement. Trop bête.
Je vais faire du shopping ce soir. 
08/02/2007
Sauvegarder c'est bien, vérifier les sauvegardes, c'est mieux
A trop me reposer sur des solutions automatisées, je risque la catastrophe.
L'autre jour, après avoir mis à jour le FreeBSD de mon serveur, j'ai aussi mis à jour les ports. Dont ProFTPd.
Je ne sais pas bien ce qui a pu se passer, mais le script d'installation a écrasé mon fichier de configuration par le fichier de conf par défaut. Il n'aurait pas dû, mais cela s'est fait. Soit.
Peut importe, me dis-je, je vais le récupérer de ma sauvegarde hebdomadaire. Sauf qu'en relisant le DVD de sauvegarde, je me rends compte qu'il est... Vide.
Je regarde l'autre disque (rotation de 2 disques), et pareil, vide...
Je regarde alors dans les fichiers temporaires de sauvegarde, et je me rends compte que le fichier de sauvegarde a grossi à... 6 Go.
Donc il ne rentre pas dans le DVD. Mais le script ne m'a rien dit, car les programmes qu'utilise mon script n'ont rien dit !
Et tout ça parce qu'il y a un peu de latence dans le développement du driver de lecture des formats de disque optiques dans FreeBSD... En effet, il y a un moment, le fichier de sauvegarde gravé sur DVD a franchi la barrière des 2 Go. Du coup, la machine peut graver le fichier, mais pas le relire. Heureusement, Mac OS X ou Windows le relisent très bien (donc la restauration aurait été laborieuse mais possible).
Et à cause de ça, j'avais laissé tomber la vérification de l'intégrité de la sauvegarde (par hash SHA256). Grave erreur.
Aujourd'hui, j'ai revu le script de sauvegarde, et ça devrait marcher correctement. J'ai aussi raffiné la liste des fichiers à sauvegarder, allégeant d'autant le volume de données à graver. La sauvegarde s'effectuera automatiquement dans la nuit de samedi. En attendant mon serveur et moi on est sitting ducks...
Moralité : sauvegardez, et vérifiez ces sauvegardes que diable !
03/07/2006
Postgray avec Postfix
Le graylisting facile.
Cet article (lâchement repompé en partie sur HowtoForge), montre comment on peut implémenter un système de graylisting en moins de 5 min sous FreeBSD, à l'aide de Postgrey (à condition que Postfix soit déjà installé).
Pour ceux qui n'ont pas encore Postfix d'installé, je les renvoie vers Postfix SMTP AUTH (and TLS) HOWTO, c'est le maître Jedi qui m'a tout appris. C'est un tutoriel pour Linux, mais c'est trivial d'adapter à FreeBSD.
Petite explication du graylisting, avant de commencer. Le graylisting, c'est une méthode de filtrage de spams. Mais contrairement aux white et blacklists, qui sont des listes figées et à entretien manuel, la graylist est adaptative. Pour cela, elle utilise une fonction du protocole SMTP qui permet de signaler au serveur de courrier expéditeur qu'on ne peut pas recevoir de courrier pour l'instant. Et comme indiqué dans le protocole, le serveur de courrier reviendra peu après pour réessayer la remise. Notre serveur n'acceptera de courrier de celui-ci que si un certain délai (par défaut 5 minutes) s'est écoulé depuis la première tentative.
Or les spammeurs n'utilisent pas de vrais serveurs de courrier, et ne réessaient pas l'envoi de leurs spams. Du coup, ces derniers n'arrivent jamais dans les boîtes des utilisateurs ! Simple et efficace.
Le problème de ce système est que ça introduit un délai supplémentaire dans la remise du courrier électronique, du temps d'attente avant acceptation du mail. On peu réduire le temps d'attente du graylist, mais cela pourrait réduire l'efficacité du système, si jamais un spammeur bombarde le serveur pendant plusieurs minutes (la probabilité est faible, cependant).
Autre inconvéniant, l'expéditeur du mail peut recevoir un message d'erreur comme quoi le serveur destinataire a refusé le message, alors qu'il a bien été transmis, avec seulement un peu de retard.
Passons à l'installation de Postgray et l'intégration à Postfix :
D'abord, installer Postgray par les ports :
$ portinstall postgray
Si tout se passe bien, Postgray est installé.
Sinon, il faut observer les messages pendant l'installation et résoudre en conséquence.
Maintenant, il faut le configurer pour qu'il démarre avec le système, on va l'activer dans /etc/rc.conf :
$ echo postgray_enable="YES" >> /etc/rc.conf
Lançons Postgray :
$ /usr/local/etc/rc.d/postgray.sh start
S'il n'y a pas d'erreurs rapportées, c'est bon, ça roule.
Sinon faut aller regarder dans les logs pour voir ce qui cloche.
Postgray est maintenant installé et lancé, mais il ne sert à rien pour l'instant, Postfix ne l'utilise pas. Configurons-le. Il faut éditer le fichier /usr/local/etc/postfix/main.cf. Dans ce fichier, il y a une section qui ressemble à ça :
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_invalid_hostname,
reject_rbl_client cbl.abuseat.org,
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
C'est la section qui dit à Postfix ce que doit respecter les expéditeurs pour accepter du courrier. Je vais pas expliciter les paramètres ici (ceux de mon serveur), je vous renvoie au document cité plus haut qui concerne l'installation de Postfix.
Modifions la section comme suit :
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_invalid_hostname,
reject_rbl_client cbl.abuseat.org,
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:10023
On a donc ajouté la ligne check_policy_service inet:127.0.0.1:10023. Le nom du paramètre est assez explicite, on dit à Postfix de vérifier la politique de service, qui est disponible à l'adresse 127.0.0.1 (sur la machine locale), sur le port 10023 (port utilisé par défaut sous FreeBSD - peut-être défaut partout).
N'oubliez pas de mettre une virgule au paramètre d'avant, sinon ça marche pas.
Il reste à relancer Postfix :
$ postfix reload
Et voilà, en regardant les logs du service de courrier, vous devriez trouver des lignes comme celles-ci, maintenant :
Jul 3 11:41:49 annis postfix/smtpd[759]: NOQUEUE: reject: RCPT from mon-relai.mail.com[xxx.xxx.xxx.xxx]: 450 <toto@oo.com>: Recipient address rejected: Greylisted for 300 seconds (see http://isg.ee.ethz.ch/tools/postgrey/help/oo.com.html); from=<bozo@boo.com> to=<toto@oo.com> proto=ESMTP helo=<mon-relai.mail.com>
Le serveur mon-relai.mail.com a été placé en graylist pendant 5 minutes. Au bout de 5 minutes, la remise se fera normalement, et toto@oo.com recevra le mail de bozo@boo.com.
Et voilà, moins de spams en quelques minutes, c'est cool !
15/05/2006
FreeBSD 6.1-RELEASE
Le FreeBSD nouveau est arrivé !
07/11/2005
On the edge again
J'ai mis à jour mon serveur, j'ai installé FreeBSD 6.0-RELEASE.
Le FreeBSD Project a sorti FreeBSD 6.0-RELEASE vendredi dernier. Je me suis précipité pour mettre à jour mon serveur. Les échos de la liste de diffusion freebsd-stable étaient porteurs de bonne nouvelle en ce qui concerne la stabilité et les performances du système.
J'ai utilisé les instructions du Handbook pour la mise à jour, qui s'est bien passée, sans problèmes. Mais j'avais quand même un peu peur, comme à chaque fois, au cas où le système foire...
Ensuite, j'ai mis à jour les ports, les programmes applicatifs de tierce partie, tel Apache, ou Python. Et ça a pris beaucoup de temps. Tout ça parce que la version des ports d'openssl, que beaucoup de ports utilisent, ne compile pas la version 6 de libcrypto, et donc que libcrypto.so.6 n'existe pas dans /usr/local/lib. Du coup tous les ports qui ont besoin de cette bibliothèque recompilent openssl pour installer la bibliothèque. et la réinstallation d'openssl rate, parce qu'il est déjà installé. Et comme un prérequis est manquant, l'installation du port rate. Rate et perd du temps à recompiler un openssl complet...
Je me rappelle qu'il y un moyen de définir si les programmes doivent utiliser l'openssl de base du système ou se servir de la version des ports. Et j'ai dû prendre celui des ports. Mais je me rappelle plus comment on change ça...
Et j'ai dû mal chercher, j'ai pas retrouvé... (j'ai pas trop cherché non plus
)
Au final j'ai juste fait un symlink du libcrypto.so.6 de l'openssl de base (situé dans /lib), dans /usr/local/lib, et hop ça marche.
Je sens que je vais au devant de moult problèmes à l'avenir, quand le openssl des ports va effectivement fournir cette bibliothèque et que les versions des openssl de base et des ports vont changer... Mais bon, si je le sais, je peux le réparer. Je recompilerai les ports dépendant d'openssl quand il sera mis à jour. Puis on change pas de version d'openssl tous les jours.
Du coup mon serveur est complètement frais et à jour, base et ports. Ça a mis dans les 15 h (4 h pour le système, cvsup et mergemaster inclus, et 11 h de compilation de ports). Mais beaucoup de temps a été perdu dans les recompilations inutiles d'openssl. Maintenant je vais attendre de voir les réactions sur la liste freebsd-stable, et le comportement de mon serveur avant de m'attaquer aux machines du boulot. On a des machines multi-processeurs qui pourraient profiter des nouvelles optimisations du noyau.
Quand je vois mon enthousiasme pour les évolutions de FreeBSD, je comprends l'engouement de mon chef pour suivre l'actualité de Plone, et sa volonté d'avoir les dernières versions en production sur les sites du boulot. Je n'approuve pas forcément, parce que les développeurs de Plone ont tendance à tout remettre à plat toutes les deux versions, et à casser plein de dépendances et de compatibilité, sans forcément documenter les changements, contrairement à FreeBSD qui évolue plus en douceur, et qui documente sérieusement quand des modifications majeures sont faites. Mais je comprends. C'est l'appel du bleeding edge, on ne peut pas y résister...
13/01/2005
Mini serveur ?
Apple a sorti le Mac mini, une petite machine toute mimi qui bat la XBox sur ma liste de serveurs web à bas prix et design.
Mardi dernier, Apple a sorti le Mac mini. C'est un Mac tout petit, grand comme 5 boîtiers de CD empilés (un peu plus large, en fait), avec un processeur G4 et des composants de portable dedans, sans écran, sans clavier, sans souris ! Il est presque aussi bien que mon Powerbook (ça veut pas dire que mon Powerbook est cul-de-jatte, hein ?
).

Mac mini
Et je dois avouer que je suis un Mac fanatique, des fois. J'ai été tenté d'acheter le Mac mini sans me poser de questions. Parce que je me laisse emporter par les élans incontrôlés des sites Mac, qui crient au génie pour tout ce que fait Apple.
Parce qu'en fait, le Mac mini est petit et mignon, mais il est complètement fermé. La machine ne devrait être ouverte que par un technicien apple qualifié. Même pour ajouter de la RAM. Ce qui est dans ce cas remplacer la seule barette de RAM par une autre. La carte Airport et le module Bluetooth encore pire, il a un kit fourni aux centres Apple qui contient la carte, le module, une baie et les antennes. No user serviceable components inside. C'est pas super, ça.
Néanmoins, le Mac mini est tentant en tant que serveur. Comparons-le à ma bonne vieille Annis :
"Annis" (ce serveur) |
"Cutie" (Mac mini) |
|
| Taille | 181,2 (L) x 275,0 (P) x 300,6 (H) mm | 165,1 (L) x 165,1 (P) x 50,8 (H) mm |
| Processeur | AMD Duron 1,2 GHz | Motorola PowerPC G4 1,25 GHz |
| Mémoire | 512 Mo DDR-SDRAM PC2700 | 256 Mo DDR-SDRAM PC2700 |
| Disque | Seagate Barracuda 7200.7 40 Go (7200 rpm) | Seagate Momentus 40 Go (5400 rpm) |
| Lecteur optique | Yamaha CRW-F1 CD-RW | Matshita CW-8123 DVD/CD-RW combo |
| Vidéo | Via KL133A (S3 Savage intégré) | Ati Radeon 9200 32 Mo |
| Sortie vidéo | VGA | DVI (adapteur VGA fourni) |
| Connecteurs | 2 x USB 2.0 | 2 x USB 2.0, 1 x Firewire 400 |
| Réseau | Realtek RTL8139 10/100 Mbps | Broadcom BCM5231 10/100 Mbps |
| Son | AC'97 | Sortie stéréo |
| OS | FreeBSD (5.3-STABLE) | Mac OS X (10.3.7 Panther) |
| Prix | 320 € | 499 € |
"Cutie", c'est le nom que je donnerais au Mac mini si j'en avais un.
Le prix d'Annis, c'est une approximation à partir des prix du moment, mais ça a peu varié, sur ce genre de composants bas de gamme.
Annis coûte un tiers moins cher que le Mac mini. Mais le Mac mini a pour lui un connecteur Firewire, un lecteur combo, sa taille et Mac OS X. En même temps, il a contre lui son boîtier complètement fermé, la quantité de RAM ridicule (mais ça c'est typique d'Apple, ils gagnent de l'argent sur la vente de machines et RAM) et... Mac OS X.
Parce qu'on a beau dire, Mac OS X est un système payant et fermé (tout ce qui est intéressant dans Mac OS X est fermé, Darwin c'est les miettes). Et en tant que serveur, je n'ai pas grand-chose à reprocher à FreeBSD, qui est gratuit, lui.
Ce qui veut dire que je n'ai pas à débourser 150 € chaque année pour avoir l'OS à jour, ce qui est appréciable.
Bon faut dire que mon comparatif ne sert pas à grand-chose.
J'avais déjà regardé les solutions de petite machine à pas cher lorsque j'ai monté ce serveur. A l'époque, j'avais le choix entre une machine récupérée au boulot (une poubelle), une machine à pas cher neuve, et une XBox. La XBox, parce qu'il y a des gens qui ont hacké la console pour faire tourner un Linux dessus, comme montré ici.
L'avantage de la solution XBox, c'est que c'est un PC complet, de puissance raisonnable, vendu à un prix imbattable (moins de 150 € de nos jours). Et en plus, elle est pas vilaine.
Mais bon, c'est un Linux, quoi...
Donc en définitive, je n'achèterai pas de Mac mini, du moins pas pour faire serveur, ni pour changer ma machine. Je ne crois même pas pour changer la machine de Séverine, les performances sont à peu près équivalentes entre sa machine actuelle et le Mac mini, et je ne trouve pas un avantage décisif à l'une ou l'autre plateforme, en machine de bureau, pour justifier le changement. Mais qui sait, s'ils continuent à développer cette machine à l'avenir, et qu'elle devienne moins fermée, il se pourrait qu'on en achète une.
10/12/2004
Multi-écrans sous X sur FreeBSD
X Window peut faire du multi-écran, voici comment (youhou mon premier howto réellement intéressant !). - étendu 25 janvier 2005
Oui, X Window peut faire du multi-écran, et oui X.org peut le faire. Mais c'est pas super documenté sur le net (ou je cherche comme un pied, ce qui est aussi une possibilité
).
Le pire, c'est que c'est pas très compliqué. Mais Xorg ne configure pas automatiquement la prise en charge multi-écrans, même s'il détecte plusieurs cartes ! Il détecte bien les cartes et moniteurs, mais en lançant un gestionnaire de fenêtres, on se retrouve avec un seul écran fonctionnel, alors que le test marche bien... Pire encore, si on a une carte multi-affichages, on n'a qu'une seule carte et un seul moniteur !
Lisez mon papier sur xorg.conf si ce n'est déjà fait, j'y explique les bases à connaître sur le fichier de configuration de X.org, et je vais me baser dessus pour l'étendre à la prise en charge multi-écrans.
Les prérequis pour une configuration multi-écrans, c'est déjà plusieurs écrans
, et plusieurs cartes graphiques, ou un carte graphique pouvant gérer plusieurs écrans. De plus en plus de cartes ont cette fonction, il est probable que vous ayez une telle carte sans même le savoir. A fortiori si vous avez un ordinateur portable (assez) récent, la puce graphique intégrée en est capable.
Si vous n'avez pas tout ça, faut se faire une raison, il n'y aura pas de multi-affichage (je le précise, des fois on me pose des questions farfelues comme "peut-on lire une clé USB qui n'est pas reliée à l'ordinateur ?").
Si par bonheur (et abondance de place sur le bureau) vous avez deux écrans ou plus et des puces graphiques pouvant supporter vos écrans, on peut se tenter le coup de frime.
Première étape, avoir une configuration Xorg qui marche, sur un écran (voir là sinon). Si vous avez deux cartes vidéo, Xorg les aura trouvées (sinon voir plus bas pour une tentative de solution), et elles apparaîtront dans des sections Device séparées. Dans mon cas, j'ai une puce Intel Extreme Graphics 2 intégrée sur AGP et une Matrox Millenium PCI :
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
### [arg]: arg optional
#Option "NoAccel" # [<bool>]
#Option "SWcursor" # [<bool>]
#Option "ColorKey" # <i>
#Option "CacheLines" # <i>
#Option "Dac6Bit" # [<bool>]
#Option "DRI" # [<bool>]
#Option "NoDDC" # [<bool>]
#Option "ShowCache" # [<bool>]
#Option "XvMCSurfaces" # <i>
#Option "PageFlip" # [<bool>]
Identifier "Card0"
Driver "i810"
VendorName "Intel Corp."
BoardName "82865G Integrated Graphics Device"
BusID "PCI:0:2:0"
EndSection
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
### [arg]: arg optional
#Option "SWcursor" # [<bool>]
#Option "HWcursor" # [<bool>]
#Option "PciRetry" # [<bool>]
#Option "SyncOnGreen" # [<bool>]
#Option "NoAccel" # [<bool>]
#Option "ShowCache" # [<bool>]
#Option "Overlay" # [<str>]
#Option "MGASDRAM" # [<bool>]
#Option "ShadowFB" # [<bool>]
#Option "UseFBDev" # [<bool>]
#Option "ColorKey" # <i>
#Option "SetMclk" # <freq>
#Option "OverclockMem" # [<bool>]
#Option "VideoKey" # <i>
#Option "Rotate" # [<str>]
#Option "TexturedVideo" # [<bool>]
#Option "Crtc2Half" # [<bool>]
#Option "Crtc2Ram" # <i>
#Option "Int10" # [<bool>]
#Option "AGPMode" # <i>
#Option "AGPSize" # <i>
#Option "DigitalScreen1" # [<bool>]
#Option "DigitalScreen2" # [<bool>]
#Option "TV" # [<bool>]
#Option "TVStandard" # [<str>]
#Option "CableType" # [<str>]
#Option "NoHal" # [<bool>]
#Option "SwappedHead" # [<bool>]
#Option "DRI" # [<bool>]
#Option "MergedFB" # [<bool>]
#Option "Monitor2HSync" # [<str>]
#Option "Monitor2VRefresh" # [<str>]
#Option "Monitor2Position" # [<str>]
#Option "MetaModes" # [<str>]
Identifier "Card1"
Driver "mga"
VendorName "Matrox Graphics, Inc."
BoardName "MGA 2064W [Millennium]"
BusID "PCI:1:7:0"
EndSection
Le pilote mga comporte beaucoup d'options, dont des références à un 2ème moniteur ("Monitor2Position"), mais la plupart sont destinées aux Milleniums récentes, dans la série G, pas mon ancêtre.
Les cartes sont correctement identifiées en tant que "Card0" et "Card1". On va pouvoir s'en servir directement.
Si vous avez une carte intégrée, c'est différent, vous n'avez qu'un seul Device, comme ceci :
Section "Device"
Identifier "Card0"
Driver "radeon"
VendorName "ATI"
BoardName "ATI Radeon Mobility M6"
Option "AGPMode" "4"
#VideoRam 32768
# NOTE: Enabling VideoRam produces strange errors,
# no problem, it detects 32MB anyway.
BusID "PCI:1:0:0"
EndSection
L'astuce, c'est qu'on sait que cette carte peut gérer deux moniteurs. On va donc la dupliquer :
Section "Device"
Identifier "Card0"
Driver "radeon"
VendorName "ATI"
BoardName "ATI Radeon Mobility M6"
Option "AGPMode" "4"
#VideoRam 32768
# NOTE: Enabling VideoRam produces strange errors,
# no problem, it detects 32MB anyway.
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "Card1"
Driver "radeon"
VendorName "ATI"
BoardName "ATI Radeon Mobility M6"
Option "AGPMode" "4"
#VideoRam 32768
# NOTE: Enabling VideoRam produces strange errors,
# no problem, it detects 32MB anyway.
BusID "PCI:1:0:0"
EndSection
On recopie tout pareil, sauf qu'on change le nom de la carte, en "Card1" sur la "deuxième" carte !
Notez que votre XFree86 ou X.org peut ne pas présenter tous ces paramètres. Par exemple, sous Ubuntu, et XFree86 4 (je connais pas la version exacte, désolé), on a ce genre de chose :
Section "Device" Identifier "ATI Technologies, Inc. Radeon Mobility 9000 M9 (R250 Lf)" Driver "ati" BusID "PCI:1:0:0" EndSection
Ils omettent les infos VendorName et BoardName, mais Identifier est très explicite. Ce qui n'est pas forcément pratique pour relire le fichier. Mais en même temps, Ubuntu n'est pas vraiment fait pour les geeks qui éditent les fichiers de conf X à la main.
Enfin, ajouter une option pour indiquer au driver de la carte quels affichages matériels dépendent de cette carte, avec la directive Screen (qui n'est pas la section Screen !) :
Section "Device"
Identifier "Card0"
Driver "radeon"
VendorName "ATI"
BoardName "ATI Radeon Mobility M6"
Option "AGPMode" "4"
#VideoRam 32768
# NOTE: Enabling VideoRam produces strange errors,
# no problem, it detects 32MB anyway.
BusID "PCI:1:0:0"
Screen 0
EndSection
Section "Device"
Identifier "Card1"
Driver "radeon"
VendorName "ATI"
BoardName "ATI Radeon Mobility M6"
Option "AGPMode" "4"
#VideoRam 32768
# NOTE: Enabling VideoRam produces strange errors,
# no problem, it detects 32MB anyway.
BusID "PCI:1:0:0"
Screen 1
EndSection
Voilà, on a maintenant deux cartes prêtes à l'emploi.
Si vous avez d'autres cartes ou si votre carte gère plus de deux affichages, continuez à copier-coller.
J'ai également deux déclarations Monitor, et deux Screen, dans ce xorg.conf :
Section "Monitor" #DisplaySize 300 230 # mm ### Uncomment if you don't want to default to DDC: # HorizSync 842150464.0 - 0.0 # VertRefresh 809972032.0 - 0.0 Identifier "Monitor0" VendorName "VSC" ModelName "VE510s" Option "DPMS" EndSection Section "Monitor" #DisplaySize 300 230 # mm ### Uncomment if you don't want to default to DDC: # HorizSync 1429222016.0 - 0.0 # HorizSync 30.0 - 70.0 # VertRefresh 1430467328.0 - 0.0 Identifier "Monitor1" VendorName "DEL" ModelName "DELL E771p" Option "DPMS" EndSection
Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 1 EndSubSection SubSection "Display" Viewport 0 0 Depth 4 EndSubSection SubSection "Display" Viewport 0 0 Depth 8 EndSubSection SubSection "Display" Viewport 0 0 Depth 15 EndSubSection SubSection "Display" Viewport 0 0 Depth 16 EndSubSection SubSection "Display" Viewport 0 0 Depth 24 EndSubSection EndSection Section "Screen" Identifier "Screen1" Device "Card1" Monitor "Monitor1" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 1 EndSubSection SubSection "Display" Viewport 0 0 Depth 4 EndSubSection SubSection "Display" Viewport 0 0 Depth 8 EndSubSection SubSection "Display" Viewport 0 0 Depth 15 EndSubSection SubSection "Display" Viewport 0 0 Depth 16 EndSubSection SubSection "Display" Viewport 0 0 Depth 24 EndSubSection EndSection
Le "Screen0" utilise la carte "Card0" et le moniteur "Monitor0", de même que "Screen1" utilise les "1". Si vous avez une carte multi-affichages, dupliquez les sections Monitor et Screen que vous avez, et éditez-les.
Pour Monitor, comme Xorg ne le détecte pas tout seul, il faut le fabriquer à la main. Mettez "Monitor1" comme Identifier, à peu près ce que vous voulez en VendorName et ModelName. Pour les taux de rafraîchissement, il faudra vous référer au manuel ou au site du constructeur, ou une autre ressource sur le net pour les trouver. Et faites attention à ne pas mettre n'importe quoi, sinon le moniteur risque de brûler...
Pour Screen, faites juste attention à associer les bonnes cartes et les bon écrans, et à le nommer correctement (si vous gardez cette nomenclature de "0", "1","2", etc, ça ne devrait pas être trop difficile
). Reportez-vous au manuel pour connaître les différents modes d'affichage (profondeur de couleur, résolution) pour les reporter dans les SubSecton "Display". Les profondeurs de couleurs devraient suffire, pour FreeBSD.
J'ai vu qu'il existait des variantes (toujours chez Ubuntu) :
Section "Monitor" Identifier "Ecran générique" HorizSync 30-67 VertRefresh 50-75 Option "DPMS" EndSection Section "Screen" Identifier "Default Screen" Device "ATI Technologies, Inc. Radeon Mobility 9000 M9 (R250 Lf)" Monitor "Ecran générique" DefaultDepth 24 SubSection "Display" Depth 1 Modes "1400x1050" EndSubSection SubSection "Display" Depth 4 Modes "1400x1050" EndSubSection SubSection "Display" Depth 8 Modes "1400x1050" EndSubSection SubSection "Display" Depth 15 Modes "1400x1050" EndSubSection SubSection "Display" Depth 16 Modes "1400x1050" EndSubSection SubSection "Display" Depth 24 Modes "1400x1050" EndSubSection EndSection
La section Monitor a les fréquences de rafraîchissement de l'écran renseignés, alors que sur la même section de X.org de FreeBSD, elles sont auto-détectées par défaut. Donc dans le doute, suivez les préférences de votre serveur X, et pour ajouter une section, renseignez les valeurs qu'il mentionne dans les sections existantes (je sais pas si je suis clair, là
.
De même, les sous-sections Display de la section Screen sont légèrement différentes. X.org de FreeBSD décrit une variable Viewport, alors que XFree86 de Ubuntu décrit une variable Modes. Je ne suis malheureusement pas expert en serveurs X pour dire si c'est une différence entre XFree86 et X.org ou si c'est une différence d'implémentation entre FreeBSD et Ubuntu... Donc c'est ce que je disais, renseignez les infos conformément à ce qui existe dans votre fichier quand vous spécifiez des écrans et cartes supplémentaires.
Enfin, passons au ServerLayout. Il y a juste deux options à vérifier. Mon xorg.conf par défaut me disait ça :
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 Screen 1 "Screen1" RightOf "Screen0" InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection
Notez les paramètres de Screen 1. Il donne le nom de l'affichage à utiliser, et une position relative par rapport à l'écran principal, "Screen0". Par défaut, l'écran secondaire est sensé être placé à droite de l'écran principal, donc RightOf. Or mon écran secondaire est place à gauche du principal. Je vais donc remplacer cette option par LeftOf :
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 Screen 1 "Screen1" LeftOf "Screen0" InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection
Le test (X -xfconfig /<emplacement>/xorg.conf) me donnera bien la bonne position d'écran, et si je déplace le curseur à gauche, il partira bien sur l'écran secondaire. Mais le bureau du gestionnaire de fenêtres sera toujours confiné à un seul écran !
Le truc, c'est une option jamais définie par défaut dans le xorg.conf : "Xinerama". Elle permet d'utiliser les différents écrans en bureau étendu :
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 Screen 1 "Screen1" LeftOf "Screen0" InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" Option "Xinerama" "true" EndSection
Et voilà, vous avez un affichage multi-écrans fonctionnel sous X !
J'avais promis de dire un mot sur les cartes non reconnues, et je le fais ici. Il peut y avoir plusieurs raisons à la non-détection de la carte vidéo. Première raison, elle n'est pas supportée par la version de X que vous avez. Là, pas de miracles, il faut se récupérer le bon driver, le recompiler au besoin et retenter la détection. Si vous savez qu'elle est supportée et que pour une raison obscure elle n'est pas détectée, regardez dans le dmesg pour voir si elle apparaît dans les périphériques détectés par le noyau. Moi, la Matrox Millenium donne ça :
pci1: <display, VGA> at device 7.0 (no driver attached)
Le noyau sait que c'est une carte vidéo, mais n'a pas de pilote spécifique à y affecter. Notez que la carte est présente sur le bus pci1, périphérique 7.0. C'est ce nombre que vous devrez fournir à xorg.conf pour forcer l'utilisation de cette carte. Rappelez-vous ma section "Device" :
Section "Device" Identifier "Card1" Driver "mga" VendorName "Matrox Graphics, Inc." BoardName "MGA 2064W [Millennium]" BusID "PCI:1:7:0" EndSection
L'option BusID permet de désigner la carte utilisée. Il faut aussi déterminer le driver à utiliser pour la carte. Pour ça, je ne sais pas.
Mais en creusant sur le net, ça doit pouvoir se trouver...
Voilà, j'espère que ça a pu vous aider ! Merci de m'avoir lu.
09/12/2004
Administrer FreeBSD avec Webmin
Je ne suis pas un Dieu des fichiers de conf, donc j'utilise des logiciels qui m'aident. :)
Et Webmin le fait admirablement bien ! Il est disponible par les ports : portinstall webmin.
Une fois installé, il faut le configurer : /usr/local/lib/webmin/setup.sh, et l'activer dans /etc/rc.conf, et enfin lancer Webmin par son script de démarrage : /usr/local/etc/rc.d/webmin.sh start (enfin bon, portinstall vous dit tout ça à la fin de l'installation, hein ?).
Pour la configuration, acceptez tout par défaut, c'est très bien, prenez l'encryption SSL, et mettez un mot de passe non trivial. Ah, s'il vous demande le type et la version de votre système d'exploitation, c'est bien sûr FreeBSD (choix 42 pour Webmin 1.170) et 5.3 (choix 23 pour Webmin 1.170), pour ceux qui suivent mes howtos simplistes.
Et une fois lancé, Webmin est accessible par l'adresse https://localhost:10000, ou https://<nom d'hôte>:10000, ou encore https://<ip de la machine>:10000.
Webmin vous demande de vous identifier, mettez le nom d'utilisateur et le mot de passe créés lors de la configuration. Vous vous retrouvez alors dans l'interface principale de Webmin. Je ne vais pas faire un manuel d'utilisation de Webmin, il y en a déjà de très bien là.
Je vais plutôt présenter les modules que j'utilise souvent et/ou qui sont réellement utiles (et sous leur noms en anglais, je trouve que la traduction française est médiocre).
Upgrade Webmin
Section Webmin, Webmin Configuration, Upgrade Webmin.
C'est là que se trouvent les utilitaires de mise à jour de Webmin. Le développement de Webmin est très actif, et Webmin et les modules sont régulièrement mis à jour. C'est la première chose à faire à l'installation d'un Webmin, vérifier l'existance d'une nouvelle version, et l'installer au besoin. Le cadre Upgrade Webmin permet cela. Sélectionnez Latest version from www.webmin.com, cochez Delete old version's directory after upgrade? et appuyez sur Upgrade Webmin. Effacer le répertoire de l'ancienne version est plus propre, car les préférences et modules de tierce-partie sont copiés vers la nouvelle version. Mais si vous avez un doute sur la compatibilité ou la stabilité d'une nouvelle version, gardez l'ancien répertoire au cas où.
Le cadre Update modules now permet de mettre à jour les modules. Il marche de façon similaire à Upgrade Webmin.
Le cadre Update modules on schedule permet de maintenir les modules de Webmin à jour, en lançant une recherche de mises à jour régulièrement. Par défaut, la mise à jour automatique est désactivée. Activez-la en ochant la case Scheduled updating currently enabled. Par défaut, la mise à jour se lance tous les jours à 3 h, mais vous pouvez la lancer à l'heure que vous voulez, avec l'intervalle de votre choix. Vous avez aussi le choix de recevoir par mail les rapports de mise à jour (normalement seulement si un ou plusieurs modules ont été mis à jour). Ces mails sont utilies, car ils signalent aussi les nouvelles versions de Webmin. Webmin lui-même n'est pas mis à jour automatiquement.
Running Processes
Section System, Running Processes.
C'est à la fois un ps et un top. Ça vous donne la liste des processus actifs, que vous pouvez ordonner par PID, par utilisateur, par occupation mémoire, par utilisation CPU. Vous pouvez également rechercher un processus par propriétaire, par nom, ou par occupation processeur. Il est également possible de lancer une commande.
Scheduled Cron Jobs
Section System, Scheduled Cron Jobs.
Ce module permet d'éditer les tables cron du système. Il y a des formulaires très user friendly pour créer, modifier et supprimer des tâches planifiées.
Software Packages
Section System, Software Packages.
C'est une interface vers les ports. Je ne l'utilise personnellement pas pour installer des ports, mais pour voir les packages installés et les désinstaller au besoin. Il y a un bouton Package Tree qui donne la liste complète des ports installés, avec nom et version. En cliquant sur un port, vous pouvez lister les fichiers du logiciel en appuyant sur le bouton List Files, ou le déinstaller avec le bouton Uninstall. Si vous décidez de désinstaller un port, Webmin vous demandera confirmation, et si le port est une dépendance d'autres logiciels, il vous le signalera et refusera de le désinstaller.
System Logs
Section System, System Logs.
Comme le nom l'indique, c'est là que vous pouvez consulter les journaux du système. Vous pouvez en outre ajouter d'autres fichiers à la liste. C'est pratique pour regarder un journal rapidement, sans ouvrir un shell ou un éditeur.
Section Servers
Cette section comporte de nombreux modules pour administrer les divers serveurs éventuellement installés sur la machine. Je reviendrai sur ces modules dans le document traitant de tel ou tel serveur.
Network Interfaces
Section Networking, Network Configuration, Network Interfaces.
C'est là que vous pouvez configurer les diverses interfaces réseau. Similaire à Sysinstall.
Routing and Gateway
Section Networking, Network Configuration, Routing and Gateway.
Sélection de la passerelle réseau par défaut, activation du mode routeur.
DNS Client
Section Networking, Network Configuration, DNS Client.
Nom d'hôte, paramètres DNS, ordre de recherche, domaine.
Host Addresses
Section Networking, Network Configuration, Host Addresses.
Permet d'éditer le fichier /etc/hosts.
System Time
Section Hardware, System Time.
Permet de régler l'heure et le fuseau horaire de la machine, et de programmer la synchronisation avec un serveur de temps NTP.
Command Shell
Section Others, Command Shell.
C'est une ligne de commande, mais non interactive. On peut lancer des commandes et voir le résultat, mais on ne peut répondre aux questions posées par les scripts et programmes. Ça peut dépanner si on n'a pas de serveur SSH, ou s'il n'est pas joignable. Le module se rappelle des dernière commandes, et peut les relancer ou permet d'éditer d'anciennes commandes avant de les lancer.
Custom Commands
Section Others, Custom Commands.
Cette section permet de créer des boutons qui lancent une commande, avec des options (utilisateur, répertoire d'exécution, variables d'environnement) personnalisées. Utile si on a besoin de lancer une commande souvent, sans pour autant lancer un SSH.
File Manager
Section Other, File Manager.
C'est un vrai gestionnaire de fichiers en Java. Il tourne sur la machine cliente (dans le navigateur). Il est possible d'effectuer toutes les opérations standard (copier, coller, couper, renommer, supprimer, etc...), à l'exception de la gestion de permissions. Il est possible en outre de télécharger et d'envoyer des fichiers sur la machine. Il est assez lent au démarrage, mais a des performances honnêtes (pour un programme en Java) une fois lancé.
SSH/Telnet Login
Section Others, SSH/Telnet Login.
Un client SSH/Telnet en Java. Ce module est uniquement un client, pour un accès SSH ou Telnet, il faut un vrai serveur lancé sur la machine. Et suivant l'implémentation de la machine virtuelle Java, l'autocomplétion par la touche Tab peut ou peut ne pas marcher. Je vous conseille d'utiliser le Separate window mode dans Module Config, ça ouvrira une fenêtre à part pour le client SSH.
System and Server Status
Section Others, System and Server Status
Ce module surveille l'état du système et des services qui tournent dessus. Le bouton Scheduled Monitoring permet d'activer le suivi des services, le planning du suivi, quand envoyer une alerte en mail, à qui envoyer le mail, etc.
Upload and Download
Section Others, Upload and Download
Ce module permet d'envoyer des fichiers sur la machine soit à partir d'une URL, soit à partir d'un fichier sur la machine locale. Il est possible de spécifier la destination, le propriétaire du fichier à l'arrivée, s'il faut extraire les archives. Le téléchargement d'une URL peut être programmé à une heure déterminée, par exemple la nuit, pour ne pas réduire la bande passante le jour.



