Présentation

Pour augmenter ma capacité de stockage j’ai investi dans des disques dur de 3TB. Mais lorsque j’ai voulu les installer, j’ai rencontré quelques soucis. Le problème n’était pas au niveau du hardware, mais au niveau de la déclaration et de la configuration des disques.


parted et non fdisk

Fdisk ne permet pas de créer des partitions supérieures à 2TB. Pour ne pas avoir ce problème il faut utiliser GPT. Cette technologie a deux principaux avantages par rapport au partitionnement classique (MsDos) :
- Gestion des des disques de taille >2.2To
- Pas de limite dans le nombre de partitions primaires

Il faut utiliser l’utilitaire parted pour configurer les disques avec GPT.


Partitionnement

Lors de mes premières manipulations, que cela soit avec fdisk ou parted j’avais un message d’erreur indiquant un problème d’alignement de disque.


parted Warning: The resulting partition is not properly aligned for best performance.
 

Du coup, lors du partitionnement, j’ai aussi passé une commande pour ré-aligner les disques. Ainsi la partitionnement commence au secteur suivant.


parted -a optimal /dev/sdh
(parted) mktable gpt
(parted) mkpart primary ext3 1 -1
 

En vérifiant, j’ai bien une partition entière sur tout le disque.


(parted) p
Model: ATA WDC WD30EZRX-00A (scsi)
Disk /dev/sdh: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End          Size         File system  Name     Flags
 1      2048s  5860532223s  5860530176s               primary
 

Et je n’ai plus de problème d’alignement non plus.


(parted) align-check optimal 1
1 aligned
 

Comme c’est un disque qui fera essentiellement de stockage de données et de sauvegarde, je n’ai pas besoin de conserver un espace réservé à root, qui est par défaut à 5% de l’espace total du disque.


tune2fs -m0 /dev/sdh1
 


Présentation

Comme j’avais galéré lors de précédentes tentatives pour créer un RAID sur mon serveur, cette fois, j’ai bien pris note pas à pas des opérations effectuées, pour me faire un mémo. Cela me permet aussi de ne pas à avoir à chercher partout des infos si je dois recommencer.

Pour gérer mon raid, que cela soit sur DEBIAN ou sur UBUNTU, j’utilise mdadm.


Procédure

Après les avoir installé physiquement, la première étape consiste à bien identifier que les disques sont présents. Il suffit d’utiliser fdisk qui va pouvoir lister tous les disques et partitions du système.

fdisk -l

S’il s’agit d’identifier les disques, avec un grep, cela devient un peu plus lisible.


fdisk -l | grep dev

Attention : identifiant de table de partitions GPT (GUID) détecté sur « /dev/sdc » ! L'utilitaire sfdisk ne prend pas GPT en charge. Utilisez GNU Parted.

Attention : identifiant de table de partitions GPT (GUID) détecté sur « /dev/sdh » ! L'utilitaire sfdisk ne prend pas GPT en charge. Utilisez GNU Parted.

Le disque /dev/md_d0 ne contient pas une table de partitions valable
Disque /dev/sda : 250.1 Go, 250059350016 octets
/dev/sda1   *        2048    39999487    19998720   83  Linux
/dev/sda2        40001534   488396799   224197633    5  Étendue
/dev/sda5        40001536    79998975    19998720   83  Linux
/dev/sda6       480397312   488396799     3999744   82  partition d'échange Linux / Solaris
/dev/sda7        80001024   480391167   200195072   83  Linux
Disque /dev/sdb : 320.1 Go, 320072933376 octets
/dev/sdb1              63   625137344   312568641    c  W95 FAT32 (LBA)
Disque /dev/sdc : 3000.6 Go, 3000592982016 octets
/dev/sdc1               1  4294967295  2147483647+  ee  GPT
Disque /dev/sdh : 3000.6 Go, 3000592982016 octets
/dev/sdh1               1  4294967295  2147483647+  ee  GPT

Utilisant des disques de grandes capacités avec un formatage non pris en charge par fdisk, j’ai quelques messages d’avertissements. Mais rien d’anormal. C’est d’ailleurs avec ces deux disques que je vais monter mon raid.
Il sont identifiés comme /dev/sdh et /dev/sdc.

Il suffit de lancer la commande suivante pour initier la création du raid.


mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdh1

Avec la commande suivante, on visualise ensuite l’avancement de la synchronisation du raid :


cat /proc/mdstat

Personalities : [raid1]
md0 : active raid1 sdh1[1] sdc1[0]
      2930133824 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.0% (956672/2930133824) finish=612.3min speed=79722K/sec

unused devices: 

Là, le système m’indique qu’il y en a pour près de 10heures pour la synchro. Bah je repasserai plus tard.

Le lendemain, je vérifie que la synchronisation s’est bien faite et s’est bien terminée.


 mdadm --detail /dev/md_d0 

/dev/md_d0:
        Version : 1.2
  Creation Time : Wed Sep 11 00:13:08 2013
     Raid Level : raid1
     Array Size : 2930133824 (2794.39 GiB 3000.46 GB)
  Used Dev Size : 2930133824 (2794.39 GiB 3000.46 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Wed Sep 11 21:22:34 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : SERVER:0  (local to host SERVER)
           UUID : 8ede2d8c:d693e1dc:a085988a:8f0754cf
         Events : 19

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8      113        1      active sync   /dev/sdh1


cat /proc/mdstat
Personalities : [raid1]
md_d0 : active raid1 sdc1[0] sdh1[1]
      2930133824 blocks super 1.2 [2/2] [UU]

unused devices: 

Tout semble OK. Le raid est bien actif.

Je partitionne le RAID en ext3


mkfs.ext3 /dev/md_d0
mke2fs 1.42.5 (29-Jul-2012)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
183140352 i-noeuds, 732533456 blocs
36626672 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=4294967296
22356 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8192 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
	102400000, 214990848, 512000000, 550731776, 644972544

Allocation des tables de groupe : complété
Écriture des tables d'i-noeuds : complété
Création du journal (32768 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Je limite la taille de l’espace alloué à root


tune2fs -m0 /dev/md_d0
tune2fs 1.42.5 (29-Jul-2012)

Je créé un point de montage et monte le RAID sur ce point de mountage.


mkdir  /mnt/BIG
mount /dev/md_d0 /mnt/BIG

Je vérifie que le point de montage est bien là


df -h | grep BIG
/dev/md_d0                                               2,7T  202M  2,6T   1% /mnt/BIG

Tout va bien.

Il me reste plus qu’à finaliser la configuration mdadm pour que le RAID soit bien lancé au démarrage. Je récupère la configuration chargée par mdadm et je la copie dans le fichier de configuration de mdadm pour qu’elle soit bien lancée au démarrage.


mdadm  --examine  --scan
ARRAY /dev/md/0 metadata=1.2 UUID=8ede2d8c:d693e1dc:a085988a:8f0754cf name=SERVER:0
 

J’édite le fichier /etc/mdadm/mdadm.conf et j’ajoute le résultat de la commande précédente, pour forcer le raid à utiliser ces deux disques.


vi /etc/mdadm/mdadm.conf 

ARRAY /dev/md/0 metadata=1.2 UUID=8ede2d8c:d693e1dc:a085988a:8f0754cf name=SERVER:0

Enfin, je déclare le montage dans /etc/fstab pour que le RAID soit bien monté au reboot du serveur. J’ai voulu déclarer le montage en utilisant l’UUID du raid, mais cela n’a pas fonctionné. J’ai donc fait une déclaration plus classique. J’édite le fichier /etc/fstab pour déclarer le montage avec les options qui vont bien.


vi /etc/fstab

# Montage du RAID 3 TB
#UUID=UUID=7c54cd31-a66c-4770-851d-4777904815a3 /DATA2 ext3 defaults 0 1
/dev/md_d0 /DATA2 ext3 defaults 0 1

Pour finir, un reboot, quelques vérifications avec mount, df et mdadm pour contrôler que le RAID est bien actif et opérationnel.


Raid HS

Panique a bord, mon serveur ne redémarre pas !!! Juste après le boot, le message « le lecteur de disque n’est pas encore prêt ou n’est pas présent » est affiché. Il m’est proposé d’attendre (ce qui ne change rien) de passer ou tenter une récup manuelle.

Apparemment le raid est HS. J’ai passé pas mal de temps à comprendre la source du problème et trouvé la solution. J’en profite pour faire ce petit mémo afin de garder trace si cela se reproduit. Cela pourra toujours servir aussi à quelqu’un d’autre.


Analyse

Puisque c’est que le serveur me propose, je passe et je reprend la main sur la machine. Je checke les logs, mais je ne relève rien d’anormal… Je vérifie si mes disques sont bien détectées :

Bob@Linux:/$ sudo dmesg 

Je ne vois pas d’anomalies. Les disques ont pourtant bien montés au démarrage.

Bob@Linux:/$  sudo lshw -class disk
*-disk:1

       description: ATA Disk
       product: ST31000340NS
       vendor: Seagate
       physical id: 1
       bus info: scsi@4:0.0.0
       logical name: /dev/sdb
       version: SN06
       serial: 9QJ6NKGG
       size: 931GiB (1TB)
       capabilities: partitioned partitioned:dos
       configuration: ansiversion=5 signature=a4f32874

  *-disk:2
       description: ATA Disk
       product: ST31000524AS
       vendor: Seagate
       physical id: 0.0.0
       bus info: scsi@5:0.0.0
       logical name: /dev/sdc
       version: JC45
       serial: 6VPCATCP
       size: 931GiB (1TB)
       capabilities: partitioned partitioned:dos
       configuration: ansiversion=5 signature=55454ee8

Les disques sont bien présents et bien détectés par le système…

Je vérifie si le Raid est bien monté

Bob@Linux:/$ sudo mdadm --detail --scan --verbose

mdadm: md device /dev/md/d0 does not appear to be active.

Cela me confirme que le Raid n’est pas monté… OK. Les disques sont la, mais le Raid n’est pas monté… J’avance…

Bob@Linux:/$  ps ax | grep mda
 1262 ?        Ss     0:00 /sbin/mdadm --monitor --pid-file /var/run/mdadm/monitor.pid --daemonise --scan --syslog

Pourtant le daemon mdadm qui gère le Raid tourne…

Bob@Linux:/$ cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : inactive sdc1[1](S)
      976759936 blocks
unused devices

Là, si je comprend bien, ca me dit qu’il n’y a qu’un seul disque qui est dans le Raid…

Je relance donc le raid voir ce que ca donne.

Bob@Linux:/$ sudo mdadm --manage /dev/md/d0 --run

mdadm: started /dev/md/d0

Cette fois j’ai bien des infos qui sont remontées !! Je suis sur la bonne voie. :)

Bob@Linux:/$  sudo mdadm --detail /dev/md_d0

/dev/md_d0:
       Version : 00.90
       Creation Time : Sun Oct 30 02:14:52 2011
       Raid Level : raid1
       Array Size : 976759936 (931.51 GiB 1000.20 GB)
       Used Dev Size : 976759936 (931.51 GiB 1000.20 GB)
       Raid Devices : 2
       Total Devices : 1
       Preferred Minor : 0
       Persistence : Superblock is persistent
       Update Time : Sun Oct 30 10:53:19 2011
       State : clean, degraded
       Active Devices : 1
       Working Devices : 1
       Failed Devices : 0
       Spare Devices : 0

       UUID : 2ed56e17:30a5e840:c109596b:d7e29b7e (local to host linux)
       Events : 0.36
       Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       33        1      active sync   /dev/sdc1

Mais si je comprends bien, il n’y a qu’un seul disque déclaré dans le Raid… Quand je revérifie à nouveau le statut du raid, ca me confirme bien que le raid est actif.

Bob@Linux:/$  cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : active raid1 sdc1[1]
      976759936 blocks [2/1] [_U]
     unused devices:
 

Dans le doute, je vérifie les partitions en me disant qu’un disque est peut-etre tout moisi :

Bob@Linux:/$  sudo fdisk -l 

Disque /dev/sdb: 1000.2 Go, 1000204886016 octets
255 têtes, 63 secteurs/piste, 121601 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0xa4f32874
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdb1               1      121601   976760001   fd  Linux raid autodetect

Disque /dev/sdc: 1000.2 Go, 1000204886016 octets
255 têtes, 63 secteurs/piste, 121601 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x55454ee8
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdc1               1      121601   976760001   fd  Linux raid autodetect
 

Mais je vois que les disques sont bien présents, et il n’y a pas d’anomalies remontées… Cela me remonte bien la présence des deux disques du RAID.

A tout hasard, je tenter de monter la partition du Raid

$ sudo mount /mnt/raid1/
 

Et ca marche ! Je retrouve mes datas. Mais mon raid est toujours bancal…

Bob@Linux:/$  cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : active raid1 sdb1[0]
      976759936 blocks [2/1] [U_]
      unused devices:
 


Résolution

Je rechecke l’état de mon Raid

Bob@Linux:/$ sudo mdadm --detail /dev/md_d0

/dev/md_d0:
        Version : 00.90
        Creation Time : Sun Oct 30 02:14:52 2011
        Raid Level : raid1
        Array Size : 976759936 (931.51 GiB 1000.20 GB)
        Used Dev Size : 976759936 (931.51 GiB 1000.20 GB)
        Raid Devices : 2
        Total Devices : 1
        Preferred Minor : 0
        Persistence : Superblock is persistent
        Update Time : Thu Nov 10 21:33:05 2011
        State : clean, degraded

Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

UUID : 2ed56e17:30a5e840:c109596b:d7e29b7e (local to host mediaserver)
Events : 0.136748
Number   Major   Minor   RaidDevice State

       0       8       17        0      active sync   /dev/sdb1
       1       0        0        1      removed
 

Ça en devient vraiment agaçant…

Je suis très hésitant car j’ai peur de perdre toutes mes données avec une action incosidérée. Apparemment le probleme c’est que le second disque, pour une raison ou pour une autre, n’est plus intérgée dans le raid. Je tente donc un nouvel ajout…

Bob@Linux:/$ sudo mdadm /dev/md_d0 -a /dev/sdc1

mdadm: re-added /dev/sdc1
 

Et ca marche !!!!

Bob@Linux:/$ sudo mdadm --detail /dev/md_d0

/dev/md_d0:
        Version : 00.90
        Creation Time : Sun Oct 30 02:14:52 2011
        Raid Level : raid1
        Array Size : 976759936 (931.51 GiB 1000.20 GB)
        Used Dev Size : 976759936 (931.51 GiB 1000.20 GB)
        Raid Devices : 2
        Total Devices : 2

Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Thu Nov 10 21:39:26 2011
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Rebuild Status : 0% complete

UUID : 2ed56e17:30a5e840:c109596b:d7e29b7e (local to host mediaserver)
Events : 0.136756

Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       2       8       33        1      spare rebuilding   /dev/sdc1
 

Je retrouve un Raid complet. Mais en pleine reconstruction !!

Bob@Linux:/$  cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : active raid1 sdc1[2] sdb1[0]
      976759936 blocks [2/1] [U_]
      [>....................]  recovery =  1.8% (18362112/976759936) finish=266.2min speed=59998K/sec
unused devices:
 

Bon bah mainteannt, il n’y a plus qu’a attendre quelques heures que la reconstruction se termine !

Bob@Linux:/$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : active raid1 sdc1[1] sdb1[0]
      976759936 blocks [2/2] [UU]

unused devices: 
 


Résolution, la vraie

Mais quand je redémarre le serveur, j’ai exactement le même message… En fait, rien n’est résolu… Je rechecke l’état de mon Raid, et je vois que si, finalement y a du mieux. Si je passe, et que je tente de monter le Raid ensuite, cela ne pose aucune difficulté, et le raid est bien actif.

Bob@Linux:/$  sudo mdadm  --examine  --scan

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=2ed56e17:30a5e840:c109596b:d7e29b7e
 

Le Raid semble bien configuré avec les deux disques. Mais le montage ne s’est pas fait… J’ai édité le fichier /etc/mdadm/mdadm.conf et j’ai ajouté le résultat de la commande précédente, pour forcer le raid à utiliser ces deux disques.

Bob@Linux:/$  sudo vi /etc/mdadm/mdadm.conf 

ARRAY /dev/md/d0 level=raid1 num-devices=2 UUID=2ed56e17:30a5e840:c109596b:d7e29b7e

Je retente le démarrage, et j’ai exactement le même message d’erreur.

Quand je checke la configuration du fichier de configuration /etc/fstab, je ne vois rien d’anormal… Et puis, j’ai un doute sur la déclaration du « File System ». Je modifie l’entrée de « /dev/md/d0  » en « /dev/md0  » . La seconde entrée est celle déclarée lors de la création du Raid. Ensuite, mdadm change la valeur en « /md/d0  » .

Bob@Linux:/$  sudo vi /etc/fstab 

# Montage de la partition du RAID de 1 To
#/dev/md/d0 /mnt/raid1 ext3 defaults 0 1
/dev/md0 /mnt/raid1 ext3 defaults 0 1

Et cette fois, c’est la bonne. le raid est bien chargé au démarrage et il est ensuite bien monté comme il faut.


Présentation

De temps à autre, j’ai mon ordinateur qui freeze un peu. Je me doutais qu’il s’agissait d’un problème au niveau du NFS. J’ai fini par comprendre que lorsque je faisais un peu tout et n’importe quoi avec mon serveur ca pouvait parfois coincer avec les partages NFS actifs sur mon PC.


Résolution

Et puis impossible de démonter les partages sur mon PC. Je recevais des messages pas sympas, comme quoi le services NFS étaient busy. Et mon file manager qui ne répondait plus.

Je ne pouvais plus démonter un partage qui n’existait plus. Et lorsque j’ai voulu monter un nouveau partage, mon système m’a déclaré :

mount.nfs: Stale NFS file handle

Ce problème survient si des modifications ont été effectuées sur le serveur hôte et que le client considère toujours des fichiers ou une arborescence comme actifs sur le serveur.

Bob@Linux:/$sudo umount -f /mnt/local

Source : http://www.cyberciti.biz/tips/nfs-stale-file-handle-error-and-solution.html


Présentation

Mon lecteur multimédia a la capacité d’accéder à des partages NFS. J’ai donc voulu donner accès à mon serveur personnel. Il n’y a pas la possibilité de changer sur le lecteur Tvix l’arborescence à laquelle il veut accéder. Et sur mon serveur cela ne m’arrangeait pas de créer une nouvelle arbrecence car mes fichiers se trouvent sur un autre disque.

J’ai décidé de créer le dossier racine pour le partage NFS, mais de le lier au dossier existant sur l’autre disque. Plutôt qu’utiliser des liens symboliques (ou physiques), j’ai préféré utiliser l’option bind de mount, qui me parait plus élégante. C’est juste une ligne à activer ou désactiver dans un fichier de conf. Elle permet de monter l’intégralité du contenu, ou un répertoire seulement, d’un disque ou d’un dossier dans un autre répertoire. Il est ensuite possible de gérer les droits d’accès au niveau du répertoire lié, par exemple pour un accès FTP.


Configuration serveur : Bind de deux dossiers

Il faut d’abord créer le dossier pour le partage NFS.

Bob@Linux:/$ sudo mkdir -p /tvixhd4

La configuration se fait ensuite dans le fichier /etc/exports, où sont déclarés tous les partages NFS.

Bob@Linux:/$ sudo vi /etc/exports 

Le montage est déclaré de la façon suivante : ‘/media/disque/répertoire /PATH/répertoire-lié none bind 0 0′

Pour déclarer un partage pour mon serveur multimedia j’ai déclaré le montage suivant :

/mnt/raid1/share/ /tvixhd4 none bind 0 0

Il reste à recharger la conf à l’aide de la commande suivante :

Bob@Linux:/$ sudo mount -a 

Il est possible de créer un montage temporaire. Si le dossier existe déjà, une seule commande suffit :

Bob@Linux:/$ sudo mount --bind '/media/disque/répertoire /PATH/répertoire-lié 


Configuration Tvix : déclaration du partage NFS

Sur le serveur Tvix, il faut aller dans le menu pour accéder à la configuration des partages pour déclarer l’adresse du serveur. Dans mon cas, j’ai dponc saisi l’adresse IP de mons erveur sur le partage tvixhd4. Après avoir sauvegardé, j’ai bien accès à mes photos sur le partage.


Présentation

Ça a mis un peu de temps à rentrer, mais ca commence. :)

Il y a deux configurations. Sur le serveur hébergeant les ressources à partager, il faut déclarer quelles ressources sont à partager. Et avec qui. Sur le client, qui veux accéder aux ressources, il faut déclarer quelles ressources et sur quel serveur auxquelles on veut accéder.


Partie Serveur

Sur le serveur il faut éditer le fichier /etc/exports où seront déclarés tous les partages NFS.

ramon@mediaserver:/$ sudo vi /etc/exports 

Dans le fichier on saisi les partages et les adresses des clients, puis quelques paramètres de configuration. :

/mnt/raid1 192.168.0.10(rw,all_squash,anonuid=1000,anongid=1000,sync)

On recharge la configuration avec la commande suivante :

root@mediaserver:~$ sudo exportfs -a


Partie Client

Il faut déjà créer le dossier qui sera le point de montage.

Bob@Linux:/$ sudo mkdir -p /mnt/mediaserver2

Et on va ensuite déclarer le nouveau montage NFS

Bob@Linux:/$sudo vi /etc/fstab

Dans le fichier il faut déclarer le path de la ressource distante puis le point de montage local ou sera montée le partage NFS.

192.168.0.1:/mnt/raid1/ /mnt/mediaserver2 nfs user,noauto,rw    0       0

On recharge le fichier de configuration et on peut ensuite monter le partage.

Bob@Linux:/$sudo sudo mount -a
Bob@Linux:/$sudo sudo mount /mnt/mediaserver2/


Présentation

Je crois bien que l’une des commande que je tape le plus souvent est la consultation des logs.

Bob@Linux:/$tail -f /var/log/syslog

Et pour me faciliter la vie, j’ai voulu me faire un petit raccourci pour lancer cette commande. Et du coup, en profiter pour mettre en place la colorisation des logs.


Résolution

J’ai installé les paquets suivants

Bob@Linux:/$sudo aptitude install ccze syslog-ng

Le paquet syslog-ng n’est pas forcément nécessaire, mais comme j’ai pris l’habitude de l’installer et de l’utiliser, surtout dans la gestion d’un syslog centralisé, je le mets maintenant systématiquement.
Le paquet ccze est le paquet qui colorise les logs (et pas que les logs d’ailleurs).

ll ne reste plus qu’à éditer le fichier de personnalisation du bash

Bob@Linux:/$sudo  vi /home/bob/.bashrc 

Et à ajouter les lignes suivantes :

# Colorisation des logs
logtail() { tail -f $1 | ccze -A; }
alias logt='logtail'
alias logsys='logtail /var/log/syslog'
 

La première ligne permet de déclarer la nouvelle commande « logtail » qui exécutera automatiquement une colorisation des logs sur un tail. En paramètre il suffit d’indiquer le fichier de logs à exploiter. La commande logt est un alias de logtail (c’est toujours 3 lettres de moins à saisir).

Et comme la consultation du syslog est la principale consultation que je fais, j’ai rajouté un nouvel alias où je spécifie exactement le log à exploiter.


Objectif

Après avoir mis en place l’affichage de fortunes, j’ai voulu avoir la possibilité de personnaliser un peu plus le démarrage de mes sessions SSH.

Le plus simple pour cela est d’utiliser les scripts MOTD qui sont très personnalisables.


Personnalisation

Dans le répertoire /etc/update-motd.d/ se trouvent plusieurs scripts qui servent à construire le MOTD qui sera affiché à l’ouverture d’une session SSH.


media:/etc/update-motd.d$ ls -lah
total 48k
drwxr-xr-x    2 root     root         4.0k Jun  2 21:09 .
drwxr-xr-x  162 root     root          12k Jun  2 12:37 ..
-rwxr-xr-x    1 root     root         1.2k Jun  2 19:54 00-header
-rwxr-xr-x    1 root     root         1.1k Jun  2 19:55 10-help-text
-rwxr-xr-x    1 root     root          149 Jan 25 11:32 90-updates-available
-rwxr-xr-x    1 root     root          129 Apr 19 09:23 91-release-upgrade
-rwxr-xr-x    1 root     root          142 Jan 25 11:32 98-fsck-at-reboot
-rwxr-xr-x    1 root     root          144 Jan 25 11:32 98-reboot-required
-rwxr-xr-x    1 root     root         1.1k Oct 21  2010 99-footer

Pour faire afficher les informations de son choix, il suffit de rajouter un script numéroté.

Pour connaitre les sessions SSH ouvertes sur le serveur, j’ai créé le script suivant


cd /etc/update-motd.d
sudo touch 11-custom
sudo chmod 755 11-custom

Voici le contenu du script, qui va m’afficher la date, l’uptime et le load average du serveur et le détail des connexions ouvertes.


#!/bin/sh
date
echo ""
uptime
echo ""
echo "Connexions en cours"
who -H
echo

A chaque connexion SSH, j’ai maintenant ça qui est affiché :


Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-8-generic i686)
Thu Jun  2 21:42:14 CEST 2011

 21:42:14 up  9:06,  5 users,  load average: 0.01, 0.05, 0.06

Connexions en cours
NAME     LINE         TIME         COMMENT
ramon    tty7         Jun  2 12:36 (:0)
ramon    pts/0        Jun  2 12:38 (grey-linux.local)
ramon    pts/1        Jun  2 12:42 (grey-linux.local)
ramon    pts/2        Jun  2 12:44 (grey-linux.local)
ramon    pts/3        Jun  2 12:53 (grey-linux.local)

Last login: Thu Jun  2 21:10:55 2011 from grey-linux.local


Activation de la bannière Login SSH

Il est possible d’afficher un message d’information au moment la connexion SSH, lorsque le système demande le mot de passe.

Pour cela, il y a un paramètre a activer dans le fichier de configuration SSH /etc/ssh/sshd_config, puis à saisir le message qui sera affiché dans le fichier idoine.


sudo vi /etc/sshd_config

Dans le ficher sshd_config il faut dé-commenter la ligne suivante :


Banner /etc/issue.net

Il faut ensuite éditer le fichier /etc/issue.net pour y saisir le message qu’on souhaite voir afficher :


*********************************************************************
****  Avertissement ! Accès aux seules personnes autorisées !   ****
****  Vos activités au cours de cette session sont susceptibles  ****
****  d' être enregistrées. Toute activité illicite fera l'objet ****
****  d'un recours en justice !                                  ****
*********************************************************************

Objectif

A la maison, ou au bureau, je me connecte régulièrement sur mes équipements en SSH. Et j’ai eu envie de personnaliser un peu les connexions, en affichant une citation à l’ouverture de la session. Il y a de nombreuses fortunes disponibles sur le net, et j’ai mis la main sur une qui cite les « Chuck Norris facts ».

Rapidement téléchargé, puis installé, j’ai maintenant le plaisir de découvrir de nouveaux facts à chaque connexion. :D

Afin de pouvoir installer cette fortune sur plusieurs machines rapidement, j’ai fait un petit script.


Téléchargement des facts

On télécharge le fichier. Pour ma part, j’ai créé une arborescnece pour dépposer les fortunes.


mkdir /usr/hsare/fortunes
cd /usr/share/fortunes
wget http://chucknorrisfacts.fr/fortunes/fortunes.txt

Sur ubuntu, il faut exécuter toutes les commande en super utilisateur (sudo).

On converti le fichier avec l’encodage UTF8 pour la prise en charge des accents et caractères spéciaux et on le renomme.


iconv -f iso-8859-1 -t utf8 fortunes.txt --output chuck

Puis on génère le fichier fortune


strfile -s -r chuck chuck.dat

On peut tester que l’appel à cette fortune fonctionne :


media:~$ fortune /usr/share/fortunes/chuck
Chuck Norris n'a pas de sang sur les mains, ses ennemis nettoient avant de mourir.

Il ne reste plus qu’à éditer le fichier ~/.bashrc et copier la ligne suivante


fortune /usr/share/fortunes/chuck


Script

Pour gagner du temps, j’ai fait un petit script.


#!/bin/bash

# Script d'installation des fortunes
# Creation : 2011/06/02
# Derniere modification : 2011/06/02
# Licence : GPL
#
# Syntaxe Ubuntu : # sudo ./FortunesInstall.sh

# Verification des droits utilisateurs pour l execution du script

if [ $EUID -ne 0 ]; then
   echo "Le script doit etre lance en root : # sudo $0 Arg OPT" 1>&2
   exit 1
fi

# Creation du dossier des fortunes
#mkdir /usr/share/fortunes

cd /usr/share/fortunes

# telechargement des "Chuck Norris Facts"
wget http://chucknorrisfacts.fr/fortunes/fortunes.txt

# Conversion et renommage du fichier
iconv -f iso-8859-1 -t utf8 /usr/share/fortunes/fortunes.txt --output /usr/share/fortunes/chuck

# Generation de la fortune
strfile -s -r /usr/share/fortunes/chuck /usr/share/fortunes/chuck.dat

# Configuration du bash pour afficher les fortunes
echo "fortune /usr/share/fortunes/chuck" >> ~/.bashrc


Autres fortunes

Si les facts de Chuck Norris ne vous convienennt pas, voici d’autres fortunes à télécharger et installer.
- http://www.fortunes-fr.org/data/litterature_francaise
- http://www.fortunes-fr.org/data/personnalites
- http://www.fortunes-fr.org/data/proverbes
- http://www.fortunes-fr.org/data/philosophie
- http://www.fortunes-fr.org/data/sciences

Le principe est le même, il faut télécharger le fichier puis le convertir à l’aide de la commande « strfile ».


 wget http://www.fortunes-fr.org/data/philosophie
 strfile philosophie philosophie.dat


Et avoir une vache qui parle

Il est possible d’avoir une vache (et d’autres animaux) qui cite les fortunes installées.


media:~$ fortune /usr/share/fortunes/chuck | cowsay -f $(ls /usr/share/cowsay/cows/ | shuf | head -n1)
 ______________________________________
/ Jupiter est né de la cuisse de Chuck \
\ Norris                               /
 --------------------------------------
       \ (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~

Il suffit pour cela d’installer le paquet cowsay


aptitude install cowsay

Dans le fichier .bashrc, il faut ajouter la ligne suivante :


fortune /usr/share/fortunes/chuck | cowsay -f $(ls /usr/share/cowsay/cows/ | shuf | head -n1)

Problème récurrent

Régulièrement, et notamment en exécutant aptitude, un message d’erreur, annonçant un problème de configuration de locales s’affichait sur la console.


perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = "fr_FR"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Ce message d’erreur est apparu suite à une installation groupée de plusieurs paquets et applications. Du coup, je me suis retrouvé incapable de savoir quelle installation avait généré ce problème.

Lorsque je vérifie les locales, je constate qu’il y a effectivement un défaut.


server:~$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=fr_FR
LANGUAGE=
LC_CTYPE="fr_FR"
LC_NUMERIC="fr_FR"
LC_TIME="fr_FR"
LC_COLLATE="fr_FR"
LC_MONETARY="fr_FR"
LC_MESSAGES="fr_FR"
LC_PAPER="fr_FR"
LC_NAME="fr_FR"
LC_ADDRESS="fr_FR"
LC_TELEPHONE="fr_FR"
LC_MEASUREMENT="fr_FR"
LC_IDENTIFICATION="fr_FR"
LC_ALL=

La reconfiguration des locales ne m’as pas permis de régler le problème.


server:~/Bureau/Post Install/V228$ sudo dpkg-reconfigure locales
Generating locales...
  en_AG.UTF-8... up-to-date
  en_AU.UTF-8... up-to-date
  en_BW.UTF-8... up-to-date
  en_CA.UTF-8... up-to-date
  en_DK.UTF-8... up-to-date
  en_GB.UTF-8... up-to-date
  en_HK.UTF-8... up-to-date
  en_IE.UTF-8... up-to-date
  en_IN.UTF-8... up-to-date
  en_NG.UTF-8... up-to-date
  en_NZ.UTF-8... up-to-date
  en_PH.UTF-8... up-to-date
  en_SG.UTF-8... up-to-date
  en_US.UTF-8... up-to-date
  en_ZA.UTF-8... up-to-date
  en_ZW.UTF-8... up-to-date
  fr_BE.UTF-8... up-to-date
  fr_CA.UTF-8... up-to-date
  fr_CH.UTF-8... up-to-date
  fr_FR.UTF-8... up-to-date
  fr_LU.UTF-8... up-to-date
Generation complete.

Résolution temporaire

Dans un premier temps, la commande suivante a permis de régler le problème :


export LC_ALL=fr_FR.UTF-8

Jusqu’à ce que je me rende compte qu’au redémarrage de l’ordinateur, j’avais à nouveau le même problème… Rageant…


Nouvelle résolution

J’ai tenté la réinstallation du pack de langage Français.


sudo apt-get install --reinstall language-pack-fr

Il m’avait semblé que cette fois c’était la bonne. Et au redémarrage de l’ordinateur, j’avais toujours ce problème de locales !!! Doublement rageant !


Résolution permanente

C’est sur un forum anglophone dédié à Debian que j’ai trouvé ce qui semble être la bonne méthode.


Server:/usr/lib/locale$ sudo locale-gen fr_FR
Generating locales...
  fr_FR.ISO-8859-1... done
Generation complete.

Et cette fois la commande locale m’affiche une configuration correcte, toujours présente au reboot de l’ordinateur.


server:/usr/lib/locale$ locale
LANG=fr_FR
LANGUAGE=
LC_CTYPE="fr_FR"
LC_NUMERIC="fr_FR"
LC_TIME="fr_FR"
LC_COLLATE="fr_FR"
LC_MONETARY="fr_FR"
LC_MESSAGES="fr_FR"
LC_PAPER="fr_FR"
LC_NAME="fr_FR"
LC_ADDRESS="fr_FR"
LC_TELEPHONE="fr_FR"
LC_MEASUREMENT="fr_FR"
LC_IDENTIFICATION="fr_FR"
LC_ALL=

J’ai indiqué sur l’article les principales opérations que j’avais testé, car cela pourra toujours servir à quelqu’un d’autre et résoudre de façon définitive son problème.