vendredi 2 novembre 2012

Installation d'un micro-serveur, part 3: SPACE (the final frontier...)

Bon... un micro-server avec seulement 250Go de stockage, c'est assez peu...
Du coup, un petit passage chez Amazon, et deux jours plus tard, me voilà avec 2 beaux disque durs Seagate Barracuda de 3To chacun !
De quoi voir venir question stockage, même si j'arrive à trouver le temps de numériser mes Laserdiscs !

Bon, mais les disques, il faut aussi les installer !

Comme j'aime bien que les choses soient bien rangées, on va créer une partition par type de fichier, c'est-à-dire :
- musiques
- vidéos
- photos
- documents (ceux de la famille !)
- doc_lydie et doc_tigrosaure (les documents un peu plus "perso")
- web (pour le stockage des pages du site qui sera hébergé sur le serveur)

J'ai beau avoir une petite idée de l'espace de stockage nécessaire à chacune de partitions... rien de mieux qu'un peu de souplesse ! On va donc créer une partition LVM (Logical Volume Manager).
Pour le moment, pas de RAID... je me contenterais d'un petit script qui effectuera une synchronisation automatique (Faut que je confirme cela... mais je n'aime pas trop l'idée du RAID, car, si le serveur tombe en panne... on a beau avoir deux disques redondés... on ne sait plus trop comment les exploiter !)

Aller, c'est parti !



Installation et partitionnement des disque


Installation physique

L'installation physique des disques est on ne peut plus simple :

  • Extraction du rack amovible du micro-serveur
  • Fixation du disque avec les disques fournies, insérées, avec la clé qui va bien, dans la porte du micro-serveur
  • Ré-insertion des racks disques.
Attention : Le micro-serveur ne gère pas le "hot-plug"... alors, penser à l'éteindre avant cette opération !

Une fois le serveur re-démarré, vérification que les disques sont bien détectés avec fdisk -l

Après la liste des partitions déjà configurées/formatées/utilisées précédemment, on doit voir les lignes suivantes pour chacun des nouveaux disques (avec des nom de "device" et des tailles différentes si les disques sont différents, bien sûr) :

Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdc doesn't contain a valid partition table


Partitionnement des disques
(Merci au site TCPdump pour son excellent tutoriel sur LVM)

On va donc créer une partition de type 8E (Linux LVM) sur chacun de ces disques (/dev/sdb et /dev/sdc dans mon cas) .

Problème: fdisk ou cfdisk ne gère pas les partitions d'une taille supérieure à 2To :(
On va donc installer GPT fdisk: aptitude intall gdisk

On peut alors créer les partitions voulue en lançant gdisk /dev/sdb puis gdisk /dev/sdc.
Les commandes principales de gdisk:

  • p: print, liste les partitions disponbiles
  • n: new, créé une partition (par défaut qui prend l'ensemble du disque. Dans notre cas, pour le type de partition, il faudra choisir 8e00 (GTP / Linux LVM)
  • o: reset the GPT partition table. Ceci reset également le sector alignement à la valeur par défaut de 2048.
  • w: write, permet d'enregistrer les modification effectuée
  • q: quit, quitte gdisk.

Donc, une seule partition, de type Linux LVM, non bootable, est créé sur l'ensemble du disque.
Nous avons maintenant une partition sur chaque disque, comme nous l'indique fdisk :


WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.

Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes
256 heads, 63 sectors/track, 363376 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      266306  2147483647+  ee  GPT
Partition 1 does not start on physical sector boundary.

Fdisk nous averti qu'il n'est pas en mesure de gérer les disques utilisant GPT, mais on peut malgré tout constater que la partition est bien créée :)



Création du LVM


Installation et configuration de lvm2

On installe le package LVM : aptitude install lvm2
On vérifie que le type des métadonnées est format = "lvm2" dans /etc/lvm/lvm.conf et on redémarre le démon /etc/init.d/lvm2 restart


Création des Physical Volume

On va créer un seul Physical Volume par disque (et donc par partition, puisqu'on n'a qu'une seule partition sur chaque disque).

pvcreate /dev/sdb1
puis
pvcreate /dev/sdc1

On vérifie que les PV sont bien créés avec pvdisplay

Pour chaque disque on obtient ceci :

  "/dev/sdb1" is a new physical volume of "2.73 TiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               2.73 TiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               2u0EeQ-Ps3d-nTSh-moOC-3Yat-SOlW-mXmCh1


Création des Volume Group

On va créer un seul Volume Group sur chaque Physical Volume. Le premier aura comme nom "vgDataMain", le second "vgDataMirror".
Comme on utilise le noyau Linux 2.6 sur une machine 64bits, on garde la taille par défaut des Physical Extent de 4Mo.

vgcreate vgDataMain /dev/sdb1
puis
vgcreate vgDataMirror /dev/sdc1

On vérifie que les VG sont bien créés avec vgdisplay

Pour chaque disque on obtient ceci:


 --- Volume group ---
  VG Name               vgDataMain
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               2.73 TiB
  PE Size               4.00 MiB
  Total PE              715396
  Alloc PE / Size       0 / 0   
  Free  PE / Size       715396 / 2.73 TiB
  VG UUID               oa288G-788k-dQvX-njPy-IMa1-RoVA-mI5fLZ

On vérifie que les Physical Extent font 4Mo (PE Size) que le Volume Group fait bien (approximativement...) 3To (VG Size) et l'on voit le nombre total de PE (Total PE) et le nombre libres (Free PE / Size) et alloués (Alloc PE / Size).


Création des Logical Volume

Maintenant que le Volume Group est créé, on peut créé les Logical Volume, sur lesquels nous créerons les partitions "standard" à formater pour pouvoir enfin y stocker des données :)

 On va créer 4 Logical Volume pour stocker les 4 types de données du serveur :

  • lvMusique, pour la musique, taille 750Go
  • lvPhotos, pour les photos, taille 750Go
  • lvVideos, pour les vidéos, taille 1To
  • lvDocuments, pour les documents, taille 500Go (un peu moins en fait... ce sera le reste :))
L'avantage de LVM, c'est que si l'on s'aperçoit que la répartition de ces données ne suit pas ce que l'on a imaginé (moins de vidéo et plus de musique par exemple), on pourra re-dimensionner ces Logical Volume pour s'adapter à la réalité :)

lvcreate -L 750GB -n lvMusique vgDataMain
lvcreate -L 750GB -n lvPhotos vgDataMain
lvcreate -L 1TB -n lvVideos vgDataMain

On peut alors déterminer combien de PE restent disponibles et les allouer au dernier Logical Volume:
vgdisplay (et on cherche la ligne "Free PE / Size") puis
lvcreate -l 69252 -n lvMusique vgDataMain

Si on refait un vgdisplay, on constate que l'intégralité du Volume Group a bien été utilisé :)


Formatage des partitions

Les Logical Volume étant créés, on peut maintenant les formater.
On choisi le format ext4.

mke2fs -t ext4 /dev/vgDataMain/lvMusique
mke2fs -t ext4 /dev/vgDataMain/lvPhotos
mke2fs -t ext4 /dev/vgDataMain/lvVideos
mke2fs -t ext4 /dev/vgDataMain/lvDocuments


Montage des partitions

Avant de pouvoir utiliser les partitions, nous devons encore les monter ;)
Pour cela, nous créons pour commencer un créer le répertoire par lequel nous souhaitons pouvoir accéder à ces partitions.
Pour ma part ce sera :
/mnt/musique pour /dev/vgDataMain/lvMusique
/mnt/photos pour /dev/vgDataMain/lvPhotos
/mnt/videos pour /dev/vgDataMain/lvVideos
/mnt/documents pour /dev/vgDataMain/lvDocuments
et

/mnt/_backup/musique pour /dev/vgDataMirror/lvMusique
/mnt/_backup/photos pour /dev/vgDataMirror/lvPhotos
/mnt/_backup/videos pour /dev/vgDataMirror/lvVideos
/mnt/_backup/documents pour /dev/vgDataMirror/lvDocuments

Donc :
mkdir /mnt/musique /mnt/photos /mnt/videos /mnt/documents
mkdir /mnt/_backup/musique /mnt/_backup/photos /mnt/_backup/videos /mnt/_backup/documents

Si on ne veut pas que ces dossiers ne restent accesibles QUE à l'utilisateur ROOT... il faut alors penser à changer leur propriétaire, avec un petit coup de "chown owner:group /mnt/dossier" :)

Et maintenant le montage des partitions:
mount /dev/vgDataMain/lvMusique /mnt/musique
mount /dev/vgDataMain/lvPhotos /mnt/photos 
mount /dev/vgDataMain/lvVideos /mnt/videos
mount /dev/vgDataMain/lvDocuments /mnt/documents
et

mount /dev/vgDataMirror/lvMusique /mnt/_backup/musique
mount /dev/vgDataMirror/lvPhotos /mnt/_backup/photos 
mount /dev/vgDataMirror/lvVideos /mnt/_backup/videos
mount /dev/vgDataMirror/lvDocuments /mnt/_backup/documents

On peut vérifier que tout est monté correctement en listant les file-system à l'aide de df


Ajout dans fstab

C'est bien gentil de monter les partitions... mais on ne va pas le faire "à la main" à chaque re-démarrage !
Alors pour s'éviter du travail, on va ajouter ces partitions dans le fstab qui permet de monter automatiquement ces partitions au démarrage !

On va donc ajouter la ligne suivante pour chacune des partitions à monter dans le fichier /etc/fstab :
/dev/mapper/vgDataMain-lvMusique /mnt/musique ext4 defaults,nofail 0 0

L'option "nofail" permet de ne pas bloquer le démarrage du serveur si par malheur l'un des disque de Data venait à ne plus fonctionner.

Une fois les modifications effectuées, on peut vérifier qu'il n'y a pas d'erreur de syntaxe en démontant manuellement les partition et en les remontant à l'aide de ce fichier :
umount /mnt/musique
umount /mnt/photos
umount /mnt/videos
umount /mnt/documents
umount /mnt/_backup/musique
umount /mnt/_backup/photos
umount /mnt/_backup/videos
umount /mnt/_backup/documents
puis
mount -a
et enfin 
df -h
pour vérifer que toutes les partitions sont à nouveau là :)


Et voilà, elle est pas belle la vie ?
 :)

Installation d'un micro-serveur, part 1: BASICS


Hello amis lecteurs,

Il y a quelques temps, je me suis fait plaisir, j'ai investi dans un micro-serveur Hewlett Packard ProLiant N40L.

  • Pas trop gros
  • Suffisamment puissant pour mes besoins (enfin, j'espère !) [Architecturé autour d'un AMD Turion II]
  • Equipé d'origine avec 2Go de mémoire (extensible à 4Go ECC)
  • Et, bonne surprise au déballage, d'un disque dur de 250Go ! (je pensais qu'il n'y en avait pas...)
  • Il me reste donc 3 emplacement 3,5" disponible, en sus de l'emplacement 5,25" ;)

Mais ce charmant petit serveur est livré "nu"... et c'est d'ailleurs ce qui m'a attiré, car je vais ainsi pouvoir m'amuser à y installer un vrai petit système "fait main" avec tout mon amour pour Linux :)

Voici donc les étapes de son installation !



Installation du système Debian de base
(Librement inspiré de l'article "Install et conf de base d'une Debian" de l'ami Guillaume Vaillant :))
Création de la clé USB bootable
  • Téléchargement de l'image ISO amd64 du CD1 sur debian.org
  • [Linux] Installer l'image ISO sur une clé USB (1Go minimum) à l'aide de la commande dd if= of= bs=4M; sync, avec le nom de l'image ISO à copier (CD1.iso), le nom du device où copier (/dev/sdX), bs=4M permet de lire/écrire des blocs de 4 Mo et améliore les performances, et sync permet de finaliser les opérations d'écriture avant la fin de la commande.
  • [Windows] Installer l'image ISO sur une clé USB (1Go minimum) à l'aide de UNetbootin

Installation et paramètres de base
  • Brancher un clavier, insérer la clé USB Debian, et démarrer le serveur :)
  • Suivre les étapes de l'installeur en mode texte :)
  • Installation en anglais
  • Clavier configuré en AZERTY
  • Langue et locale configurées en "en_US.UTF-8"

Partitionnement
  • montage: /boot, taille: 200Mo, type: ext3, options: nodev, nosuid, noexec, label: /boot, bootable flag: oui
  • montage: none, taille: 4000Mo, type: swap, label: swap
  • montage: /, taille: 20Go, type: ext4, options: relatime, label: /
  • montage: /tmp, taille: 10Go, type: ext4, options: relatime, nodev, nosuid, noexec, label: /tmp
  • montage: /var, taille: 10Go, type: ext4, options: relatime, nodev, label: /var
  • montage: /home, taille: 10Go, type: ext4, options: relatime, nodev, nosuid, label: /home
  • montage: /data, taille: le reste (180Go), type: ext4, options: relatime, nodev, nosuid, label: /data

Configuration du gestionnaire de packages
  • Editer le fichier /etc/apt/sources.list pour qu'il contienne:
deb http://ftp2.fr.debian.org/debian/ squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb http://ftp2.fr.debian.org/debian/ squeeze-updates main contrib non-free
deb http://backports.debian.org/debian-backports squeeze-backports main

deb-src http://ftp2.fr.debian.org/debian/ squeeze main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://ftp2.fr.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://backports.debian.org/debian-backports squeeze-backports main
  • Mettre à jour le gestionnaire: aptitude update
  • Mettre à jour le système: aptitude safe-upgrade

Installation des packages de base

Installation des packages suivants, avec "aptitude install xxx" (on peut lister tous les packages les uns à la suite des autres, séparés par des espaces)
  • atop: moniteur de ressources système et d'activité de processus (voir aussi htop)
  • bind9-host: Version de "host" intégrée avec BIND 9.x (pour le serveur DNS il faut ajouter aussi Bind9...)
  • bridge-utils: Utilitaires destinés à configurer le pont Ethernet sous Linux
  • bsd-mailx: Agent de courriel(MUA)  utilisateur simple (à priori, avec Exim4 installé par défaut en tant que MTA)
  • cron-apt: Automatic update of packages using apt-get
  • dmidecode: Extraction des données Desktop Management Interface
  • dnsutils: Clients fournis avec Bind
  • ethtool: Affiche ou change les paramètres des périphériques Ethernet
  • geoip-database: IP lookup command line tools that use the GeoIP library (country database)
  • hdparm: Optimisation des paramètres des disques durs
  • htop: moniteur de ressources système et d'activité de processus (voir aussi atop)
  • ifenslave: Attach and detach slave interfaces to a bonding device
  • inetutils-telnet: Telnet client (pas sûr que ça serve sur ce serveur :)
  • inotify-tools: Programmes en ligne de commande fournissant une interface simple à inotify
  • iptraf: Moniteur IP LAN interactif et coloré
  • less: Programme de pagination similaire à more
  • logrotate: Utilitaire de rotation de fichier journal
  • lshw: Informations sur la configuration matérielle
  • lsof: Liste des fichiers ouverts
  • minicom: Programme de communication série piloté par menus conviviaux
  • mlocate: Trouver rapidement des fichiers sur le système de fichiers d'après leur nom
  • mtr: Outil traceroute X11 et ncurses plein écran
  • multitail: View multiple logfiles windowed on console
  • nfs-common: Fichiers de support NFS communs au client et au serveur
  • nmap: Cartographe de réseau
  • ntpdate: Client pour définir l'horloge système à partir de serveurs NTP
  • parted: Programme de redimensionnement de partitions GNU Parted
  • pciutils: Utilitaires PCI Linux
  • psmisc: Utilitaires qui utilisent le système de fichiers proc
  • python: Langage interactif de haut niveau orienté objet
  • resolvconf: Name server information handler
  • rsync: Programme de copie de fichiers à distance rapide
  • screen: Multiplexeur d'écran avec émulation de terminal VT100/ANSI
  • smartmontools: Contrôle et surveillance de système de stockage utilisant S.M.A.R.T.
  • snmp: SNMP applications
  • snmpd: SNMP agents
  • ssmtp: Extremely simple MTA to get mail off the system to a mail hub (à voir si je garde ou pas...)
  • sudo: Fournit des privilèges super-utilisateurs à des clients spécifiques
  • tcpdump: Outil puissant pour la surveillance de réseau et l'acquisition de données
  • unzip: Extraction d'archives ZIP
  • vim-nox: Vim sans serveur X
  • vlan: User mode programs to enable VLANs on your ethernet devices
  • whois: Client whois intelligent
Configuration de base

Editeurs de texte
  • Editeur par défaut: update-alternatives --set editor /usr/bin/vim.nox
  • Pager par défaut: update-alternatives --set pager /bin/less
  • Configuration de Vim : Créer un fichier /etc/vim/vimrc.local avec le contenu suivant:
syntax on
set hls
set showmatch
set laststatus=2
set statusline=%t\ %y%r%{&ff}%m%=[%c%V,%1,%P]
set modeline
set modelines=1
set titlestring=%{expand($USER) }@%{hostname()}:vim\ %F%m%r
set title

Configuration de SSH et SSHd
  • Modifier le fichier /etc/ssh/sshd_config pour qu'il contienne:
Host *
ForwardAgent no
ForwardX11 no
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
BatchMode no
CheckHostIP yes
StrictHostKeyChecking ask
IdentityFile ~/.ssh/identity
Port 22
Protocol 2
Cipher blowfish
EscapeChar ~
FallBackToRsh no
UseRsh no
  • Modifier le fichier /etc/ssh/sshd_config pour qu'il contienne:
Port 22
# ListenAddress 0.0.0.0 # si on veut binder le service sur une seul interface
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no # On n'accepte pas que le Root se logue
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes # Authentication par mot de passe acceptée
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding no # On désactive le X11 forwarding (environnement graphique)
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
# Déconnexion si pas de réponse pendant 3x300s = 30min.
ClientAliveInterval 300
ClientAliveCountMax 3
UseDNS no

Configuration du logrotate

  • Modifier le fichier /etc/logrotate.con pour qu'il contienne:
daily
rotate 31
create
include /etc/logrotate.d

/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}


Et voilà ! Nous avons maintenant un Microserveur avec un système Debian assez minimaliste auquel on peut accéder de façon sécurisée par SSH et qui ne demande plus qu'à évoluer vers quelque chose d'un peu plus "utile" :)

A bientôt pour la suite :)

Installation d'un micro-serveur, part 2: FANCY

Hello tout le monde,

Bon, ce n'est sans doute pas la partie le plus cruciale de ce microserveur... mais quand on est Geek, on l'est aussi pour se faire plaisir :)

Alors, voici comment se faire un beau message d'accueil lors de la connexion au serveur (en SSH par exemple).


Trouver un beau logo :)

(Merci à Michauko pour le court, mais sympathique article sur linuxlogo :))
Pour rester dans l'esprit "Geek", un bon moyen de trouver un logo d'ouverture de session, est d'utiliser le package linuxlogo qui permet de générer dans un terminal la plupart des logos des distributions usuelles.

  • aptitude install linuxlogo pour installer le package
  • linuxlogo -L list pour lister l'ensemble des logos disponibles
  • linuxlogo -L xx, avec xx le numéro ou le nom du logo pour l'afficher
  • Une fois le logo choisi, on peut "figer" la configuration en éditant le fichier /etc/linux_logo.conf
  • Pour afficher le logo, il suffit alors d'exécuter linux_logo dans la ligne de commande.
  • Si on voulait l'afficher à chaque connexion, il suffirait de rajouter la ligne linux_logo à la fin du fichier /etc/profile.

Transférer ce logo dans le MOTD

MOTD, c'est le "Message of the Day".
Ce message est défini par le fichier /etc/motd.
Pour copier le logo précédent dans le motd, il suffit de faire linux_logo > /etc/motd pour copie la sortie écran de linux_logo dans le fichier /etc/motd.


Rendre le logo dynamique

(Merci à Parker Samp pour l'astuce !)

Ce logo est bien sympathique... mais les informations qu'il affiche n'étaient valable que lors du moment où il a été généré. L'uptime notamment, ne sera vraisemblablement pas correct la prochaine fois que vous vous loggerez.

Création d'un script

Première étape pour rendre ce logo dynamique, créer le script suivant, par exemple dans /usr/local/bin/ :

#!/bin/bash

echo -e "

-> Insérer ici le contenu du fichier /etc/motd

"

Pensez à rendre le script exécutable en faisant un chmod a+x nom_du_script

Insertion des variables

Seconde étape, remplacer les textes qui étaient "figés" dans le fichier /etc/motd par des variables dont le contenu sera calculé lors de l'exécution du script.

En ce qui me concerne, je "calcule" les variables suivantes lors de l'exécution du script:


# Version de Linux installée
VERSION=`cat /proc/version | sed 's/\([azAZ09\.]*\)(.*) .*/\1/'`
# Date de compilation du Linux
COMPILE=`cat /proc/version | sed 's/.*\((.*)\) \(.*\)/\2/'`
# Nombre de processeurs
CPU_NB=`grep -c processor /proc/cpuinfo`
# Type de processeur
CPU_TYPE=`cat /proc/cpuinfo | grep "model name" | awk -F ":" {'print $2'} | head -n 1`
# Fréquence des processeurs
CPU_FREQ=`cat /proc/cpuinfo | grep "cpu MHz" | awk -F ":" {'print $2'} | head -n 1`
# Mémoire totale du serveur
TOTALMEM=`cat /proc/meminfo | grep MemTotal | awk {'print $2'}`
TOTALMEM=`expr $TOTALMEM / 1024`
# Mémoire disponible
FREEMEM=`cat /proc/meminfo | grep MemFree | awk {'print $2'}`
FREEMEM=`expr $FREEMEM / 1024`
# Charge processeur pour les 1, 5 et 15 dernières minutes
LOAD=`uptime | sed 's/.*average: \(.*\)/\1/'`
# Uptime
UPTIME=`uptime | sed 's/.*up \([^,]*\), .*/\1/'`
# Hostname
HOSTNAME=`hostname`

Exécution du script à chaque connexion au serveur

Avant tout chose, il faut désactiver l'affichage du MOTD:
  • Dans /etc/ssh/sshd_config, configurer le paramètre PrintMotd sur no
  • Redémarrer le démon SSH
  • Désactiver l'affichage du MOTD dans PAM en mettant en commentaire la ligne sesssion optional  pam_motd.so du fichier /etc/pam.d/login.
Ajouter l'exécution du script à la fin du fichier /etc/profile en ajoutant la ligne /usr/local/bin/dynmotd.sh (en remplaçant par le nom de votre script bien entendu :))

Et en ce qui concerne le PROMPT?

Le minimum syndical...

Pour le minimum syndical, on va juste activer la coloration syntaxique et diminuer les risques d'erreurs pour les sessions ROOT.

Pour ça, on édite le fichier bashrc : nano /root/.bashrc et on décommente les lignes

export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
et
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'



Et voilà, désormais à chaque connexion, vous aurez un beau login, toujours à jours ! ;)
Elle est pas belle la vie de Geek ?