Le but du projet est de configurer les postes d’un réseau de machines afin de mettre en place
une gestion centralisée des données et des comptes utilisateurs.
Un des postes du réseau tient le rôle de serveur :
Il stocke et diffuse les répertoires de travail des utilisateurs et les applications partagées.
Il stocke et diffuse les informations (login, mot de passe, groupe)
relatives aux utilisateurs référencés qui le droit d’accéder aux postes du réseau.
Les utilisateurs peuvent se connecter indistinctement sur n’importe quel poste (poste serveur compris),
et y retrouve leur environnement de travail.
On considère que tous les postes sont identiques du point de vue matériel et système d’exploitation.
Configuration
Les répertoires de travail des comptes utilisateurs sont enregistrés sur le serveur dans le répertoire /export/home.
Ils sont accessibles dans le réseau sur le point de montage /home/serveur.
Les comptes locaux d’une machine restent accessible dans le répertoire /home.
Les applications partagées sont enregistrées sur le serveur dans le répertoire /export/opt.
Ils sont accessibles dans le réseau sur le point de montage /opt.
Le répertoire /opt est accessible en lecture seulement.
On utilisera NFS pour implanter les accès distants aux répertoires.
On utilisera NIS pour implanter l’annuaire des comptes utilisateurs.
Les adresses IP des machines sont choisies dans le sous-réseau 192.168.56.0/24.
Le domaine internet des machines est ubo.local
Paramètres de configuration :
Un fichier param contiendra les paramètres de configuration du système, définis sous la forme de variables shell.
Un fichier machines contiendra la liste des noms de machines et leur adresse IP associée.
Un dernier fichier files contiendra la liste des fichiers (définis par leur chemin absolu) qui sont modifiés par les scripts de configuration.
La configuration des postes sera réalisée par l'intermédiaire de script bash.
On souhaite ainsi pouvoir automatiser l'installation des machines.
Si un script est exécuté plusieurs fois, le résultat devra être le même que celui obtenu à l'issue de la première exécution.
Livrables
Un fichier .zip nommé [Nom1]_[Nom2]_ASE2022.zip contient :
Scripts de configuration (param, machine, functions, set_*, get_*)
Bien indenté
Lisible
Commenté
Compte-rendu
Un seul fichier pdf.
Noms des étudiants doivent apparaître sur la première page
Un résumé des fonctionnalités de votre serveur
Section 1 : manuel d'utilisation des scripts (set_*/get_*) + explication détaillé
Section 2 : réponses aux questions de TP
TP1 : Préparation
Télécharger le fichier pdf du CM1. Lire attentivement les slides de 17 à 40.
Avec Oracle Virtual Box, créer une nouvelle machine virtuelle et attacher le disque dur virtuel ubuntu18_m1aseV3.vdi à la machine.
Vous pouvez récupérer ce fichier :
ATTENTION : il faut sauvegarder le fichier dans sur partition locale de votre PC (ne pas le sauvegarder dans votre dossier "Downloads/Téléchargement", ce dossier est sur le serveur vadorfs)
Nom de la machine : server (plus tard, on importe une autre machine - client01).
Nom de l'utilisateur : m1ase, mots de passe : m1ase.
Ouvrir un terminal : (1) Shortcut Ctrl + Alt + T ou (2) clicker sur "Activities", rechercher le mot "terminal".
Lorsque le terminal démarre, par défaut vous êtes dans le dossier : /home/m1ase.
Créer un répertoire : ase20 avec la commande $ mkdir ase20.
Vous utilisez ce dossier pour vos scripts !
Pour simplifier le partage de fichiers, on crée un dossier partagé entre votre PC et la VM.
Ce dossier sera utilisé uniquement pour partager des fichiers entre la VM et le PC.
PC - étape 1 : Éteindre votre VM
PC - étape 2 : VirtualBox -> Votre VM (clic droit) -> Configuration -> Shared Folder -> Add
PC - étape 3 : Créer un dossier partagé : vmshare
PC - étape 4 : Créer et placer un fichier texte share.txt dans ce dossier (le nom du fichier n'est pas important)
Ne pas modifier un script sous windows et l'exécuter sous Linux (risque de script corrompu)
Ne pas prendre trop de temps pour configure votre VM selon votre préférence.
Travailler efficacement en utilisant un éditeur de text que vous maîtrisez bien. (en cas de doute... utiliser gedit...)
Rédiger le compte rendu au fur et à mesure.
Les questions concernant le projet seront posées dans le sujet d'examen !!!
TP1 : Fonctions bash
Afin de facilité l’écriture des scripts, on développe au préalable un ensemble de fonctions shells
qui seront rassemblées dans le fichier functions.
Dans le dossier ase20, créer les fichiers suivants (clicker sur le nom de fichier pour voir le contenu):
function hello() {
echo 'Hello World'
}
function hello_name() {
echo $1
}
#!/bin/bash
. functions
hello
hello_name Toto
hello
bonjour
test
test
test
toto
titi
Tester les scripts.
$ chmod u+x test.sh
$ ./test.sh
Ensuite, vous devez implanter les fonctions suivantes.
Pour chaque fonction, merci de bien lire les consignes données.
exist() : affiche 0 si une chaine de caractères existe dans un fichier, 1 sinon.
Faites attention que cette chaîne puisse contenir des caractères spéciaux.
Consignes :
- exist arg1 arg2
arg1 : nom du fichier
arg2 : texte à chercher
- Commandes à utiliser : grep, if, echo
- Modifier le fichier functions. Créer une fonction exist(). Mettre le script suivant dans la fonction.
Ensuite, faire un appel à la fonction exist() dans le fichier test.sh
Les fichiers mis à jour devraient ressembler aux exemples ci-dessous :
function hello() {
echo 'Hello World'
}
function hello_name() {
echo $1
}
function exist() {
value=$( grep -ic "test" text.txt )
echo $value
}
#!/bin/bash
. functions
hello
hello_name Toto
exist
- Question 1 : Quelle la valeur retournée par la commande grep -ic "test" text.txt. Expliquer les deux options -i et -c.
- Question 2 : Implanter une solution pour vérifier le resultat de la commande grep avec la
condition if ... then en utilisant la variable
$valeur. Afficher 0 si la chaine de caractères "test" dans "text.txt", 1 sinon.
- Question 3 : Modifier la fonction (et également le test) afin de prendre en comptes les deux paramètres d'entrée arg1 et arg2.
add_line() : ajoute une ligne passée en argument en fin de fichier et affiche 0.
Une copie du fichier avant traitement sera réalisée.
Consignes :
- add_line arg1 arg2
arg1 : nom du fichier
arg2 : texte à insérer
- Commandes à utiliser : cp, echo avec ">>"
- Le double chevron ">>"" sert à rediriger un output à la fin d'un fichier
- Tester le script suivant :
show
echo 'Hello' >> test.txt
replace_line() : remplace les lignes reconnues par une chaine de caractères par une nouvelle ligne fournie en argument.
La fonction affiche 0 si au moins un remplacement a eu lieu, 1 sinon. Une copie du fichier avant traitement sera réalisée.
Consignes :
- replace_line arg1 arg2 arg3
arg1 : nom du fichier
arg2 : texte à chercher
arg2 : texte à remplacer
- Commandes à utiliser : cp, grep, sed, if, echo
- Tester la commande ci-dessous avec un fichier text et répondre aux questions suivantes.
sed '/TEXTE_À_CHERCHER/c\TEXTE_À_REMPLACER' FICHIER
Observation : c'est un example de l'utisation de sed en mode script.
/TEXTE_À_CHERCHER/ : chercher les lignes contenant le TEXTE_À_CHERCHER
c\TEXTE_À_REMPLACER : remplacer les lignes sélectionnées par le TEXTE_À_REMPLACER
Faire attention, ici, on veut remplacer tout la ligne !
- Question 1 : Est-ce que le fichier texte est modifié apres avoir exécuté la commande sed ?
- Question 2 : Quelle est l'option qui permet la modification directe d'un fichier (c'est -[quelque chose], à chercher dans le manuel)
avec la commande sed ?
- Question 3 : Comment on peut prendre en compte les paramètres d'entrée ($1, $2, ...) ?
Identifier le problème avec ' '.
remove_line() : supprime les lignes reconnues par une chaine de caractères.
La fonction affiche 0 si au moins un remplacement a eu lieu, 1 sinon.
Une copie du fichier avant traitement sera réalisée.
Consignes :
- remove_line arg1 arg2
arg1 : nom du fichier
arg2 : texte à chercher
- Commandes à utiliser : cp, grep, sed, if, echo
save_files() : copie, dans un répertoire de sauvegarde, les fichiers dont les noms (chemins absolus)
sont eux-mêmes énumérés dans un fichier.
Consignes :
- save_files arg1
arg1 : le fichier contient une liste (des chemins) des fichiers à sauvegarder, par example :
/home/user/config.txt
/home/document/info.md
...
- Commandes à utiliser : mkdir, for, cat, if, echo, cp
- Le répertoire de sauvegarde est : /home/m1ase/ase20/original_files.
- Tester le script suivant :
show
for f in `cat test.txt`
do
echo $f
done
- `...`: Les commandes placées à l'intérieur de ces antiquotes génèrent du texte.
- Question 1 : Il faut créer le dossier s'il n'existe pas en utilisant la commande mkdir dans votre script.
- Question 2 : Rechercher une option pour ne pas afficher l'erreur avec mkdir si le dossier existait.
restore_files() : restaure les fichiers sauvegardés par la fonction save_files()
Consignes :
- restore_files arg1
arg1 : le fichier avec une liste des fichiers à restaurer