SYSX



Solutions des examens de juin 2009

(tgz complets qui produisent un répertoire comme à l'examen, mais avec un fichier solution)

sysx09a_solution.tgz matin

sysx09c_solution.tgz après midi



cs.test1 solution correspondant à l'énoncé 'enonce.cs.test'

cs.test4 solution correspondant à la partie 1 de l'énoncé 'enonce.cs.s'

cs.test6 une 2° solution, plus élégante pour la partie 1 de l'énoncé 'enonce.cs.s' (mais qui ne convient malheureusement pas pour la partie 2 de la question)

Remarque : pour ceux qui les auraient vues : les versions "cs.test2" et "cs.test3" n'étaient pas correctes

cs.test7 solution complète de l'énoncé 'enonce.cs.s'

cs.test8 solution complète de l'énoncé 'enonce.cs.s' (version correspondant à cs47-8)

testtime10 solution correspondant à l'énoncé 'enonce.testtime'


enonce.cs.s énoncé de l'exercice à effectuer en partant d'un fichier 'cs non-root',
pour ajouter une nouvelle option 's'

links.tgz tgz contenant un répertoire contenant des fichiers (vides) avec numéros de version, et des liens symboliques (sans numéros de version) qui pointent dessus.

Pour tester un 'cs non-root' avec la nouvelle option 's', tel que spécifié par enonce.cs.s


exa.eval Texte reprenant les criètes que j'utilise pour corriger les examens, et quelques conseils pour corriger les erreurs de syntaxe

enonce.cs.test énoncé de l'exercice à effectuer en partant du fichier 'cs'

enonce.testtime énoncé de l'exercice à effectuer en partant du fichier 'testtime7+'


testtime7 script comparant le temps de 'syncronisation de fichier' par 'wget' et par 'rsync' : 'rsync' prend en fait plus de temps

testtime7+ version comportant quelque corrections


Exercice : en vous inspirant/partant de testtime7 faire un script qui compare les temps d'exécution pour obtenir le contenu de 'cs.version.server' à partir du serveur '192.168.30.130' par 'udpget' (tel que demandé dans l'énoncé ci-dessous, et réalisé dans 'csv.test2') et par 'curl'


enonce.csv.test énoncé de l'exercice a effectuer en partant du fichier

indication complémentaire : j'ai utilisé la commande 'curl' dans le script 'nv' (version 7) , à la ligne 204

csv.test1 qui est un 'csv' sipmlifié et adapté pour qu'il ne soit exécutable que si on n'est PAS 'root', et qui écrit dans le répertoire courant


Solution partielle (implémentation des questions 2 et 5) :

csv.test2 qui fait appel à un 'udpget' modifié :

udpget6 version simplifiée, qui ne donne que la réponse

csv.test3 Solution


Scripts départ initiaux :

udpget2 script transférant le contenu d'un (petit) fichier à partir d'un serveur par un datagramme 'udp'

testtime3 script mesurant le temps d'exécution d'un autre script


Scripts 'solution' (adaptés pour pouvoir être utilisés en dehors du local 30):

udpget script transférant le contenu d'un (petit) fichier à partir d'un serveur par un datagramme 'udp'

testtime script mesurant le temps d'exécution d'un autre script

udped script créant un serveur 'udp', (pour pouvoir utiliser les scripts en dehors du local 30)

Pour les utiliser, les mettre dans ~/bin, et les rendre exécutables,

D'abord lancer le serveur 'udp' local, par 'udped'

L'exécution de la nouvelle version peut alors se faire par 'testtime l' , (un 'L' minuscule, pas un '1')

ou bien avec un argument comportant un timeout en virgule flottante, par ex. : 'testtime l0.05'

(le 'l' dans l'argument fait que la demande se fait au serveur 'udp' sur votre ordinateur,
au lieu du serveur 'udp' du local 30)



http://sunsite.dk/info/guides/rsync/rsyncd.conf.html :

page 'man' pour le fichier de configuration d'un serveur 'rsync'


Pour mettre en place un serveur 'rsync' simple :

créer un fichier /etc/rsyncd.conf contenant 3 lignes :

['titre']
        path = /home/'vous'/'répertoire'
        comment = 'description de ce qui correspond au titre'
remplacer ce que j'ai mis entre "'" par des valeurs, sans "'"

créer le répertoire /home/'vous'/'répertoire'

mettre un ou plusieurs fichiers dans ce répertoire

démarrer le serveur par la commande (en étant 'root') :

  rsync --daemon

Pour tester, en tant que client :

sur le même ordinateur :

créer un autre répertoire 'répertoire2'

exécuter la commande (en N'étant PAS 'root') :

  rsync -a localhost::'titre'/ 'répertoire2'

cela copiera le contenu de /home/'vous'/'répertoire' dans 'répertoire2'

Ensuite, si vous modifiez ou ajoutez des fichiers dans /home/'vous'/'répertoire'

et que vous réexécutez la même commande,

'répertoire2' contiendra la même chose que /home/'vous'/'répertoire' :

ils seront 'synchronisés'

si on ajoute l'option '--delete' :

  rsync -a --delete localhost::'titre'/ 'répertoire2'
la suppression de fichiers sera également répercutée


Pour une copie à distance (sur un autre ordinateur) :

remplacez localhost par l'adresse du serveur

  rsync -a --delete 'adresse du serveur'::'titre'/ 'répertoire2'

Pour tester avec un 'testtime' modifié, ou un futur 'csv' :

transfert d'un seul fichier ( 'cs47-4' dans ce cas-ci ) dans le répertyoire courant ('.')

(le premier 'cs' "::cs/" désigne le 'titre')

  rsync 192.168.30.130::cs/cs47-4 .


apachetest : script de test (Gaetan) : serveur apache local actif ?

httpdtest : script de test (Serkan) : serveur http actif ?



Premiers_pas_sous_Linux.html



Introduction historique aux Systèmes d'Opérations (version provisoire)


http://sunsite.dk/info/guides/rsync/rsyncd.conf.html

http://casteyde.christian.free.fr/system/linux/guide/online/book1.html Guide d'installation Linux


http://neosmart.net/dl.php?id=1 site pour le programme EasyBCD,
qui automatise l'incorporation d'une nouvelle rubrique dans le "loader" de Windows Vista

http://neosmart.net/wiki/display/EBCD/Linux Mode d'emploi de EasyBCD pour Linux :
Vous n'avez besoin que du début Vista before Linux qui est très simple.
La suite est pour le cas (bizarre) ou vous installez Linux avant Vista

Pour des explications générales (anciennes) sur le "loader" NTLDR de Windows, voir dans les notes "Guide d'installation ... de Linux" pages 53 et 54




http://casteyde.christian.free.fr/system/linux/guide/online/book1.html Guide d'installation Linux

Install mandriva 2009 on USB



BASH
http://www.trustonme.net/didactels/148.html Initiation à Bash

http://www.tldp.org/LDP/abs/html/ Advanced Bash-Scripting Guide
An in-depth exploration of the art of shell scripting


adal script (en BASH) ajoutant un alias (au fichier de configuration /etc/profile.d/alias.sh)

rab4 script (en BASH) créant un autre script (en BASH) évitant de devoir ajouter un '&' après une commande pour ne pas perdre l'usage d'un terminal

redhcp script en bash relançant la configuration de la carte réseau


PERL
tutoriel perl

introduction aux expressions régulières en perl


scripts illustratifs de PERL
shift petit script illustrant l'utilisation de 'shift'

alpha+1 string alpabétique + 1

alpha+2 string alpabétique + 2

regex Illustration des expressions régulières et de l'opérateur s///;

split petit script illustrant l'utilisation de 'split'

split+ petit script illustrant l'utilisation de 'split'
(version montrant la raison de l'utilisation de "$_ = $string;" à la ligne 22 de "split")

sortie_erreur3 script expliquant le pourquoi et comment de "2>&1" et "2>/dev/null"

pppp petit script illustrant l'utilisation de de la syntaxe "$var = << LABEL;"

alphanum1 "nombres en ordre alphabétique"

alphanum4 "nombres en ordre alphabétique"


scripts utilisés pour la configuration "standard" dans le local 30
adaf script ajoutant des alias (au fichier de configuration /etc/profile.d/alias.sh), avec suppression des doublons (et des commentaires en doublon)

alias_liste liste d'alias 'standard' à utiliser avec adaf

adaf.test script ajoutant des alias (version permettant un mode 'test' sans être 'root', et sans danger)

alias_liste2 liste d'alias 'standard' à utiliser avec adaf avec 'commentaires'
(à utiliser pour tester votre "adaf.test" modifié pour en tenir compte)

raf script créant des scripts (en BASH) évitant de devoir ajouter un '&' après une commande pour ne pas perdre l'usage d'un terminal, utilisant une liste (dans un fichier)

raf_liste liste à utiliser avec raf

cs script global de configuration standard


serverdate script perl, uniquement sur le serveur 192.168.30.130


test_rclocal script test pour la procédure exec_at_boot


mt2 version du script 'mt' qui teste si la partition demandée est de type 'swap'
et, dans ce cas, n'essaye pas de la monter (et affiche un message d'erreur)


eth130 script mettant une même adresse réseau IP fixe pour les interfaces de eth0 à eth19

ethxyz script mettant une même adresse réseau IP fixe (dernier byte donné en paramètre) pour les interfaces de eth0 à eth19


scripts analisant des fichiers
occurences1 script affichant les nombres d'occurences des mots d'un fichier texte

occurences2 script affichant les nombres d'occurences des mots d'un fichier texte, corrigé pour les Majuscules et les parenthèses

allais.utf8 texte littéraire (à utiliser comme argument pour les scripts occurences1 et occurences2)

variables1 script affichant les nombres d'occurences des variables d'un fichier perl

variables2c script affichant les nombres d'occurences des variables d'un fichier perl, version avec structure 'vide' pour l'affichage en 3 catégories

: script incomplet qui est un fichier de départ pour un exercice, dont la solution est

variables4cscript affichant les nombres d'occurences des variables d'un fichier perl, affichage en 3 catégories et mots des commentaires


g2c41 script qui détecte les modifications de fichiers de configuration induits par l'utilisation d'un outil de configuration GUI
version avec installation automatique de fileschanged si nécessaire

filelength explicitation du fonctionnement de la fonction 'filelength' des scrits g2c

fileschanged-0.6.5-0.i386.rpm


lsr1 premier jet de script pour détecter création/suppression de fichier

lsr3 script pour détecter création/suppression de fichier : récupération du numéro de ligne et du nom de fichier

lsr4 script pour détecter création/suppression de fichier : récupération du numéro de ligne et du nom de fichier
et le chemin absolu du fichier créé/supprimé

lsr7 script pour détecter création/suppression de fichier : idem, mais avec vérification de l'argument et commentaires (et corrigé par rapport au lsr6)

lsr8 script pour détecter création/suppression de fichier : idem, mais avec prise en compte de fichiers multiples dans un répertoire

lsr9+ script pour détecter création/suppression de fichier : idem, mais avec prise en compte de fichiers multiples dans un répertoire
et début de prise en compte de répertoires multiples (version corrigée)

lsr10 script pour détecter création/suppression de fichier : idem, mais avec prise en compte de fichiers multiples dans un répertoire
et prise en compte de répertoires multiples, version complète et corrigée
(mais ne prenant pas en compte la création de répertoires)

lsr11 script pour détecter création/suppression de fichier :
version plus simple, avec prise en compte de fichiers multiples dans un répertoire
et prise en compte la création de répertoires


notes de Maud Le Gal sur les exercices

sysex_20080320

sysex_20080410.odt

sysex_20080429.odt

sysex_20080506.odt

sysex_20080515.odt


cs40 cs avec kickerrc modifié remplçant Kmail par Konsole pour nouvel utilisateur

kickerrc le kickerrc modifié

cs41 cs avec kickerrc modifié remplçant Kmail par Konsole pour nouvel utilisateur,
idem mais par kickerrc.diff

kickerrc.diff le kickerrc.diff

cs42 comme cs40, avec en plus la modification de la page par défaut de firefox,
avec la détection automatique de la version dans le nom d'un répertoire.
(solution générique, avec utilisation de '*' pour indiquer la partie variable du nom du répertoire)
(mais limitée à un répertoire, le premier trouvé)
(la partie modifiée est aux lignes 95 et de 229 à 263)

browserconfig.properties le fichier modifié
(de manière à ce que http://192.168.30.130/index.html soit la page par défaut)

atpasswdch script (partiel) qui réagit à une création d'utilisateur

new_user Explication des modifications introduites par cs40.4

new_user2 Explication des modifications introduites par cs40.4/cs40.6

atfirstlogins2 version modifiée de atfirstlogins
(qui supprime son appel dans '~/.bash_profile' après le 1° login graphique)


Ecrire un script qui, à partir des fichiers contenus dans 'addmodff.2.tgz' , ajoute les modules 'AdblockPlus' et 'NoScript' à Firefox.

Schéma du script :
terminer l'exécution de 'Firefox' (si il est en cours d'exécution)
trouver le répertoire contenant les fichiers de configuration de 'Firefox'
décompresser 'addmodff.2.tgz' (par 'tar xzvf' , car les alias n'existent pas pour l'exécution d'un script)
ajouter le contenu des 'diffs' (sans les '<' ou '>') à leurs fichiers respectifs (extensions.rdf et extensions.cache)
décompresser 'tmp.xpi' (contenu dans 'addmodff.2.tgz') dans le répertoire 'extensions'
lancer l'exécution de 'Firefox'


Pour trouver le répertoire contenant les fichiers de configuration de 'Firefox' :
Il est dans '~/.mozilla/firefox/
et se termine par '.default'
on peut donc l'obtenir par :
ls -d ~/.mozilla/firefox/*.default

(l'option '-d' est nécessaire, car sinon 'ls' affiche le contenu du répertoire, au lieu de son nom)


addmodff.2.tgz fichier compressé contenant les fichiers nécessaires pour ajouter les modules 'AdblockPlus' à Firefox
(décompresser par 'xtz addmodff.2.tgz' , si vous avez mes alias installés,
par 'tar xzvf addmodff.2.tgz' sinon)


(Quand j'aurai écrit le script, je donnerai peut-être des indications complémentaires, s'il y a des opérations un peu plus difficiles qui seraient nécessaires)
addffmods4 ébauche de script
affm7 2° ébauche de script
affm8 3° ébauche de script (mode test, ajout des diffs)
affm11 4° ébauche de script (2 stage), a utiliser avec :
affm12 affm11 corrigé (aux lignes 80 et 83), a utiliser avec :
afm2.2.tgz fichier compressé contenant les fichiers nécessaires pour ajouter les modules 'AdblockPlus' à Firefox
affm15 version 'nettoyée' : suppression du mode 'test'
et changement de noms de fichiers, pour être intégré dans le système 'cs'
cleanrdf2 script 'nettoyant' le fichier de configuration 'extensions.rdf' de 'firefox'
cleanrdf3 script 'nettoyant' le fichier de configuration 'extensions.rdf' de 'firefox' (version permettant de traiter un 'extensions.rdf' 'déplacé')

On the State of Linux File Systems

On File Systems


Les solutions des examens de juin 2008 (et des indications pour septembre)



prefs.js à copier dans /usr/local/etc
sex11.html Développement historique des systèmes d'exploitation

(version provisoire)


env_fj.32.tgz fichier compressé contenant un script installant un environnement du même type que celui installé par 'cs'

http://www.winimage.com/bootpart.htm site pour le programme bootpart, qui automatise l'incorporation d'une nouvelle rubrique dans le "loader" NTLDR de Windows, expliquée dans les notes "Guide d'installation ... de Linux" pages 53 et 54