Archives pour la catégorie ‘FreeBSD’

FreeBSD : activer le support SSH depuis l’installation en mode ‘fixit’

Le mode ‘Fixit’ présent sur le CD / DVD d’installation de FreeBSD 8 est utile pour dépanner votre système ou encore effectuer une installation custom (ZFS et cie).

Pour améliorer votre confort, un vrai terminal est préférable, encore faut-il que le support SSH soit activé. Pour ce faire, on commence par l’initialisation réseau :

Fixit# ifconfig em0 192.168.1.166
Fixit# route add default 192.168.1.254
Fixit# echo 'nameserver 192.168.100.254' > /etc/resolv.conf

Ensuite, la configuration du serveur SSH :

Fixit# mkdir /etc/ssh
Fixit# cp /dist/etc/ssh/sshd_config /etc/ssh
Fixit# echo PermitRootLogin yes >> /etc/ssh/sshd_config
Fixit# ssh-keygen -t rsa1 -b 1024 -f /etc/ssh/ssh_host_key -N ''
Fixit# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
Fixit# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''

Et la configuration d’un environnement minimal pour l’utilisateur root (qui n’aura d’ailleurs aucun mot de passe) :

Fixit# mkdir /root
Fixit# ln -s /mnt2/bin/csh /bin/csh
Fixit# echo "setenv PATH ‘/bin:/sbin:/usr/bin:/usr/sbin:/stand:/mnt2/stand:/mnt2/bin:/mnt2/sbin:/mnt2/usr/bin:/mnt2/usr/sbin’" > /root/.cshrc
Fixit# echo “setenv EDITOR ‘/mnt2/usr/bin/ee’” >> /root/.cshrc
Fixit# echo "setenv GEOM_LIBRARY_PATH=/mnt2/lib/geom:/lib/geom" >> /root/.cshrc
Fixit# echo “set prompt=’Fixit# ‘” >> /root/.cshrc
Fixit# /mnt2/usr/sbin/sshd

Et c’est parti, on peut maintenant agir à distance :

$ ssh root@192.168.1.166
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
	The Regents of the University of California.  All rights reserved.

Fixit#


FreeBSD : RAID1 hotswap avec gestion AHCI

FreeBSD 8 gère par défaut vos disques par le driver ATA. Celui ne gère pas le hotswap disque. Si atacontrol permet bien de désactiver et débrancher un disque à chaud, la détection n’est effective qu’au prochain reboot. Pour permettre une détection à chaud, il est nécessaire d’utiliser le driver expérimental AHCI, tout en s’assurant que la gestion AHCI des disques est supportée et activée dans le BIOS.

La gestion AHCI s’appuie sur la couche CAM (déjà utilisée pour les périphériques SCSI et USB), ce qui implique un changement  de noms des disques durs. Ainsi /dev/ad0 devient /dev/ada0. La fstab est à modifier avant de redémarrer, d’autant qu’un LiveCD est nécessaire en cas d’erreur ou pour réactiver la gestion ATA. Pour éviter ces désagréments, GEOM propose comme solution les labels qui permettent de bénéficier de noms fixes pour les disques (quelque soit le mode en cours). Pour récupérer les labels de vos partitions UFS, activez l’option suivante :

# sysctl kern.geom.label.debug=1

Les labels seront alors listés au prochain boot, lesquels seront à récupérer et à placer dans la fstab. Pour la partition de swap, le label doit être créer par glabel :

# glabel label swap /dev/ad0s1b

Dans le cas d’un système déjà configuré en RAID par GEOM, les labels sont déjà configurés : GEOM les utilise implicitement. Ainsi, l’activation / désactivation de l’AHCI est transparente et un simple reboot permet de bénéficier de la gestion AHCI.

Pour rappel, voici la méthode de création d’un RAID1 sous GEOM :

# sysctl kern.geom.debugflags=16
# gmirror label -v -b round-robin gm0 /dev/ad8
# cat geom_mirror_load="YES" >> /boot/loader.conf
# ee /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/mirror/gm0s1b      none            swap    sw              0       0
/dev/mirror/gm0s1a      /               ufs     rw              1       1
/dev/mirror/gm0s1f      /home           ufs     rw              2       2
/dev/mirror/gm0s1d      /usr            ufs     rw              2       2
/dev/mirror/gm0s1e      /var            ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0
# shutdown -r now
# gmirror insert gm0 /dev/ad10
# gmirror status
 Name    Status  Components
mirror/gm0  DEGRADED  ada0
                      ada1 (48%)

A présent, la gestion des AHCI peut être activée :

# cat ahci_load="YES" >> /boot/loader.conf
# shutdown -r now
# camcontrol devlist
<WDC WD2502ABYS-02B7A0 02.03B03>   at scbus2 target 0 lun 0 (ada1,pass2)
<WDC WD2502ABYS-02B7A0 02.03B03>   at scbus3 target 0 lun 0 (pass0,ada0)
<Slimtype DVD A  DS8A2S 6P5D>      at scbus5 target 0 lun 0 (cd0,pass1)

Je débranche le second disque, la pile RAID se dégrade :

(ada1:ahcich3:0:0:0): lost device
(ada1:ahcich3:0:0:0): Invalidating pack
GEOM_MIRROR: Cannot write metadata on ada1 (device=gm0, error=6).
GEOM_MIRROR: Cannot update metadata on disk ada1 (error=6).
GEOM_MIRROR: Device gm0: provider ada1 disconnected.

Une fois le disque rebranché, une détection des périphériques de masse est nécessaire (ce n’est pas automatisé) :

# camcontrol devlist
<WDC WD2502ABYS-02B7A0 02.03B03>   at scbus2 target 0 lun 0 (pass0,ada0)
<Slimtype DVD A  DS8A2S 6P5D>      at scbus5 target 0 lun 0 (cd0,pass1)
# camcontrol rescan all
Re-scan of bus 0 was successful
Re-scan of bus 1 was successful
Re-scan of bus 2 was successful
Re-scan of bus 3 was successful
Re-scan of bus 4 was successful
Re-scan of bus 5 was successful
# camcontrol devlist
<WDC WD2502ABYS-02B7A0 02.03B03>   at scbus2 target 0 lun 0 (pass0,ada0)
<WDC WD2502ABYS-02B7A0 02.03B03>   at scbus3 target 0 lun 0 (ada1,pass2)
<Slimtype DVD A  DS8A2S 6P5D>      at scbus5 target 0 lun 0 (cd0,pass1)

Le disque est à présent reconnu mais le RAID lui aussi ne se reconstruit pas automatiquement :

(ada1:ahcich3:0:0:0): Synchronize cache failed
(ada1:ahcich3:0:0:0): removing device entry
(aprobe0:ahcich3:0:0:0): SIGNATURE: 0000
ada1 at ahcich3 bus 0 target 0 lun 0
ada1: <WDC WD2502ABYS-02B7A0 02.03B03> ATA/ATAPI-8 SATA 2.x device
ada1: 300.000MB/s transfers
ada1: 239429MB (490350672 512 byte sectors: 16H 63S/T 16383C)
ada1: Native Command Queueing enabled
GEOM_MIRROR: Component ada1 (device gm0) broken, skipping.
GEOM_MIRROR: Cannot add disk ada1 to gm0 (error=22).
GEOM_MIRROR: Device gm0: rebuilding provider ada1.

Ce qui est entrepris de suite :

# gmirror forget gm0 /dev/ada1
gmirror: No such device: /dev/ada1.
# gmirror insert gm0 /dev/ada1
# gmirror status
 Name    Status  Components
mirror/gm0  DEGRADED  ada0
                      ada1 (1%)

La reconstruction RAID au final ne nécessite plus aucun redémarrage. Le driver AHCI apporte également d’autres fonctionnalités comme le support du NCQ, ce qui permet d’augmenter le débit en cas de forte charge. Pour le vérifier et obtenir des informations détaillées sur un disque, camcontrol est de rigueur :

# camcontrol identify ada0
pass0: <WDC WD2502ABYS-02B7A0 02.03B03> ATA/ATAPI-8 SATA 2.x device

protocol              ATA/ATAPI-8 SATA 2.x
device model          WDC WD2502ABYS-02B7A0
serial number         WD-WCAT1E308323
firmware revision     02.03B03
cylinders             16383
heads                 16
sectors/track         63
LBA supported         268435455 sectors
LBA48 supported       490350672 sectors
PIO supported         PIO4
DMA supported         WDMA2 UDMA6
overlap not supported

Feature                      Support  Enable    Value           Vendor
write cache                    yes    yes
read ahead                     yes    yes
Native Command Queuing (NCQ)   yes        31/0x1F
Tagged Command Queuing (TCQ)   no    no    31/0x1F
SMART                          yes    yes
microcode download             yes    yes
security                       yes    no
power management               yes    yes
advanced power management      no    no    0/0x00
automatic acoustic management  yes    yes    254/0xFE    128/0x80

FreeBSD : coloriser la sortie de ls

Ajoutez dans votre fichier shell rc (~/.shrc ou autre) :

CLICOLOR="YES"
export CLICOLOR

Si vous souhaitez coloriser la sortie comme sous Linux, rajoutez celles-ci :

LSCOLORS="ExGxFxdxCxDxDxhbadExEx"
export LSCOLORS

FreeBSD : un MTA pratique pour les jails

Pour chaque jail, il est nécessaire de recevoir les mails (cron, periodic, etc…). Afin de préserver au mieux les ressources et éviter le recours à un vrai relais SMTP (sendmail, postfix ou autre), un MTA idéal est ssmtp (Simple SMTP Agent). Il permet de relayer tous les mails vers un SMTP, ceci par un contournement de la commande sendmail. Donc pas de démon et c’est tant mieux.

Pour l’installer :

# cd /usr/ports/mail/ssmtp
# make install
# make replace

La dernière commande va remplacer la commande sendmail par celle de ssmtp.

Au niveau de la configuration, il y a deux fichiers :

# mv /usr/local/etc/ssmtp/ssmtp.conf.sample /usr/local/etc/ssmtp/ssmtp.conf
# mv /usr/local/etc/ssmtp/revaliases.sample /usr/local/etc/ssmtp/revaliases

Pour ssmtp.conf, il faut veiller aux options suivantes :

mailhub=172.16.0.3:25
rewriteDomain=hbis.fr

La première permet d’indiquer le serveur SMTP vers qui relayer les envois de mail. Dans mon cas, c’est l’IP de ma jail SMTP. Un serveur SMTP externe peut bien sûr être utilisé  La seconde option permet de spécifier le domaine des adresses d’envoi s’il n’est pas présent,  ce qui est le cas des comptes systèmes, sous peine d’avoir un refus d’envoi.

Le second fichier revaliases permet de convertir les adresses d’envoi, bref configurer des alias, mais aussi préciser le SMTP de destination pour un mail sender donné.

Pour désactiver le démon sendmail de votre jail, n’oubliez pas de corriger votre fichier /etc/rc.conf :

sendmail_enable="NONE"

Et pour virer le nom d’utilisateur Charlie des mails envoyés par le compte root :

# pw user mod root -c ''

FreeBSD : jail PostgreSQL

Pour pouvoir exécuter un serveur PostgreSQL sous une jail FreeBSD, il est nécessaire d’autoriser le support de la mémoire partagée (SHM). Il convient d’activer le flag dans /etc/rc.conf :

jail_sysvipc_allow="YES"

Si cela n’est pas fait, l’initialisation de l’espace de stockage échoue de cette façon :

sql# /usr/local/etc/rc.d/postgresql oneinitdb
The files belonging to this database system will be owned by user "pgsql".
This user must also own the server process.</p>
The database cluster will be initialized with locale C.
The default text search configuration will be set to "english".
creating directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 10
selecting default shared_buffers ... 400kB
creating configuration files ... ok
creating template1 database in /usr/local/pgsql/data/base/1 ... FATAL:  could not create shared memory segment: Function not implemented
DETAIL:  Failed system call was shmget(key=1, size=1622016, 03600).
child process exited with exit code 1
initdb: removing data directory "/usr/local/pgsql/data"

NetBSD : configuration RAID1 avec RAIDframe

Je vais vous guider dans la configuration d’un RAID1 logiciel avec RAIDFrame sous NetBSD. Cette procédure fonctionne également sous OpenBSD (votre noyau devant intégrer le support RAIDframe) ou encore FreeBSD 4/5. Le RAID peut être créé à chaud sans LiveCD et à distance, mais il est recommandé d’avoir un accès au BIOS setup. Si vous ne faites pas d’erreur de calcul ou de frappe, tout se passera bien sinon pensez d’emblée à faire une backup !

La procédure consiste à créer le RAID1 initialement sur le second disque, à y recopier le système et les données « live » du premier disque. Suite à cela, un redémarrage activera le RAID du second disque, auquel le premier disque sera ajouté.

Etape 1 : installation du système

Je débute par l’installation d’un système NetBSD 5.0.1/amd64. Le système est installé sur le premier disque dur SCSI (/dev/sd0) d’une capacité de 8 Go (l’exemple est ici réalisé sous VMware), dont l’ensemble est affecté au slice de NetBSD (partition DOS 0). Au niveau des partitions BSD, je crée le strict minimum par souci de simplification du présent guide : /, swap et  /home.

netbsd# grep sd0 dmesg.boot
sd0 at scsibus0 target 0 lun 0: <VMware,, VMware Virtual S, 1.0>
 disk fixed
sd0: 8192 MB, 1044 cyl, 255 head, 63 sec, 512 bytes/sect x 16777216
 sectors
netbsd# grep sd1 dmesg.boot
sd1 at scsibus0 target 1 lun 0: <VMware,, VMware Virtual S, 1.0>
 disk fixed
sd1: 8192 MB, 1044 cyl, 255 head, 63 sec, 512 bytes/sect x 16777216
 sectors

netbsd# fdisk /dev/sd0
Partition table:
0: NetBSD (sysid 169)
 start 63, size 16777153 (8192 MB, Cyls 0-1044/85/1), Active

netbsd# disklabel -r sd0
# /dev/rsd0d:
total sectors: 16777216

16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:   8401995        63     4.2BSD   2048 16384     0
 b:    273105   8402058       swap
 c:  16777153        63     unused      0     0
 d:  16777216         0     unused      0     0
 e:   8102053   8675163     4.2BSD   2048 16384     0

La partition d est reservée et correspond au disque dur (la taille de 16777153 correspond bien à la taille du slice NetBSD). La partition c est aussi réservée et correspond au slice NetBSD, englobant toutes les partitions définies par l’utilisateur : a (point de montage /), b (swap) et e (/home). Comme j’utilise tout l’espace disque, la taille de c correspond à celle du disque moins les 63 blocs réservés par l’ID de slice. Ceci se matérialise au niveau de l’offset de c par rapport à d et également de a, qui débute fatalement au  63ème bloc.

A retenir :

  • total sectors = size d
  • size c = size d – 63
  • offset c = offset a = 63

Etape 2 : partitionnement du 2ème disque dur (/dev/sd1)

Le slice NetBSD doit être reproduit à l’identique sur le second disque. Si  les disques ont des tailles différentes, il faut jouer avec fdisk pour créer un slice de la taille de celui du premier disque. Parfois, il est utile d’effacer la table des slices, si le disque a déjà été partitionné :

netbsd# dd if=/dev/zero of=/dev/rsd1d bs=8k count=1

netbsd# fdisk -0ua /dev/rsd1d
Partition table:
0: NetBSD (sysid 169)
 start 63, size 16777153 (8192 MB, Cyls 0-1044/85/1), Active
 PBR is not bootable: All bytes are identical (0x00)

Au niveau des partitions, c’est différent : une unique partition dédiée au RAID est créée. Cette partition va devenir le pseudo-périphérique disque RAID. C’est sur celui-ci que nos partitions /, swap et /home seront créées. RAIDframe impose cette limitation de ne fonctionner que sur une seule partition par disque.

Sur /dev/sd1, on édite la table des partitions et on créé la partition a avec comme type RAID, de taille égale à l’espace disque total moins les 63 blocs d’identification. Pour faire simple, il suffit de dupliquer la ligne de la partition c pour le slice a et y changer le type.

netbsd# disklabel -r -e -I sd1
total sectors: 16777216

4 partitions:
#        size    offset%C
Haut de page