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.

Webmin

Webmin permet d’administrer plus simplement, par une interface Web unique, une machine. Je suis en train de préparer une machine, sur laquelle j’ai installé Ubuntu 11.04 à la maison, pour centraliser plusieurs besoins et ressources. Et c’est donc naturellement que j’ai envisagé d’installer Webmin.


Déclaration des nouvelles sources

Pour ajouter un nouveau dépôt, il faut éditer le fichier sources.list.


sudo vi /etc/apt/sources.list

Puis ajouter les URL des dépots Webmin en copiant les lignes suivantes dans le fichier.


# Repository Webmin
deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib

Après avoir sauvegardé les modifications apportées sur le fichier, il faut ensuite importer la clé GPG associée. Pour cela, on se place dans un répertoire temporaire pour télécharger la clé, avant de l’importer.


Srv:~# cd /usr/src/
Srv:/usr/src# wget http://www.webmin.com/jcameron-key.asc
Srv:/usr/src# sudo apt-key add jcameron-key.asc


Installation de Webmin

Les dépôt ayant été configurés, il faut mettre à jour les dépôts, et il sera ensuite possible d’installer la dernière version stable de webmin.


Srv:~# sudo apt-get update
Srv:~# sudo apt-get install webmin


Accès à Webmin

La connexion à Webmin se fait normalement avec le compte root, qui est désactivé sous Ubuntu. Il reste donc une dernière opération pour pouvoir accéder à Webmin.


Srv:~# sudo /usr/share/webmin/changepass.pl /etc/webmin root Mot_De_Passe

L’accès à l’interface web de webmin en utilisant l’URL suivante :

https://IP_SERVEUR:10000/

Ensuite on pourra se connecter avec ce compte Webmin à l’adresse. Il sera ensuite possible de créer un nouveau compte pour accéder à Webmin. Il fadura choisir la méthode “Unix authentication” pour utiliser le password local du compte créé