164 lines
4.7 KiB
TeX
164 lines
4.7 KiB
TeX
|
\documentclass[a4paper,11pt]{report}
|
||
|
\usepackage{ifxetex}
|
||
|
\ifxetex
|
||
|
%\usepackage{fontspec}
|
||
|
%\usepackage{xunicode}
|
||
|
\usepackage{xltxtra}
|
||
|
\defaultfontfeatures{Mapping=tex-text} % To support LaTeX quoting style
|
||
|
\setmainfont{Caviar Dreams}
|
||
|
\else
|
||
|
\usepackage[utf8]{inputenc}
|
||
|
\usepackage[T1]{fontenc}
|
||
|
\usepackage{amsfonts}
|
||
|
\fi
|
||
|
\usepackage{pifont}
|
||
|
\usepackage{geometry}
|
||
|
\usepackage{fancybox}
|
||
|
\usepackage{verbatim}
|
||
|
\usepackage{eurosym}
|
||
|
\usepackage[english, francais]{babel}
|
||
|
\usepackage{listings}
|
||
|
\usepackage{color}
|
||
|
\usepackage{graphicx}
|
||
|
\usepackage{hyperref}
|
||
|
\usepackage{titlesec}
|
||
|
\usepackage{fancyhdr}
|
||
|
\usepackage{lastpage}
|
||
|
\usepackage{minted}
|
||
|
|
||
|
\setlength{\hoffset}{-18pt}
|
||
|
\setlength{\oddsidemargin}{0pt} % Marge gauche sur pages impaires
|
||
|
\setlength{\evensidemargin}{9pt} % Marge gauche sur pages paires
|
||
|
\setlength{\marginparwidth}{54pt} % Largeur de note dans la marge
|
||
|
\setlength{\textwidth}{481pt} % Largeur de la zone de texte (17cm)
|
||
|
\setlength{\voffset}{-18pt} % Bon pour DOS
|
||
|
\setlength{\marginparsep}{7pt} % Séparation de la marge
|
||
|
\setlength{\topmargin}{0pt} % Pas de marge en haut
|
||
|
\setlength{\headheight}{13pt} % Haut de page
|
||
|
\setlength{\headsep}{10pt} % Entre le haut de page et le texte
|
||
|
\setlength{\footskip}{27pt} % Bas de page + séparation
|
||
|
\setlength{\textheight}{708pt} % Hauteur de la zone de texte (25cm)
|
||
|
\definecolor{bg}{rgb}{0.9,0.9,0.9}
|
||
|
|
||
|
% TITRE DU DOCUMENT !
|
||
|
\title{Corrigé des exercices : créer un script Zéphir}
|
||
|
|
||
|
%\date{}
|
||
|
|
||
|
\begin{document}
|
||
|
\maketitle
|
||
|
\normalsize
|
||
|
\vspace{2cm}
|
||
|
\textbf{Rédacteurs :}
|
||
|
\begin{itemize}
|
||
|
\item Emmanuel Garette (egarette@cadoles.com)
|
||
|
\item Vincent Febvre (vfebvre@cadoles.com) \newline
|
||
|
\end{itemize}
|
||
|
\vspace{2cm}
|
||
|
\textbf{Version} : 1.0 \newline
|
||
|
|
||
|
\chapter{Création d'un script Zéphir : un script python}
|
||
|
|
||
|
Un script Zéphir est un script python. Des fonctions de base se proposer pour faciliter l'écriture de ce script.
|
||
|
|
||
|
\begin{minted}{xml}
|
||
|
#!/usr/bin/env python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import sys
|
||
|
from zephir.lib_zephir import *
|
||
|
from creole import fonctionseole
|
||
|
\end{minted}
|
||
|
|
||
|
\chapter{Création d'un script Zéphir : vérification}
|
||
|
|
||
|
Avant il faut vérifier qu'aucun blocage ne soit mis en place pour éviter l'exécuter de l'action.
|
||
|
|
||
|
\begin{minted}{xml}
|
||
|
#!/usr/bin/env python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import sys
|
||
|
from zephir.lib_zephir import *
|
||
|
from creole import fonctionseole
|
||
|
|
||
|
\end{minted}
|
||
|
\begin{minted}[bgcolor=bg]{xml}
|
||
|
if fonctionseole.init_proc('PERSO') == False:
|
||
|
fonctionseole.zephir("ERR" , "procédure supprimer_fichier bloquée par zephir", "PERSO")
|
||
|
sys.exit(1)
|
||
|
\end{minted}
|
||
|
|
||
|
\chapter{Création d'un script Zéphir : début}
|
||
|
|
||
|
Avant d'exécuter le script, emettre un message sur le Zéphir.
|
||
|
|
||
|
\begin{minted}{xml}
|
||
|
#!/usr/bin/env python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import sys
|
||
|
from zephir.lib_zephir import *
|
||
|
from creole import fonctionseole
|
||
|
|
||
|
if fonctionseole.init_proc('PERSO') == False:
|
||
|
fonctionseole.zephir("ERR" , "procédure supprimer_fichier bloquée par zephir", "PERSO")
|
||
|
sys.exit(1)
|
||
|
|
||
|
\end{minted}
|
||
|
\begin{minted}[bgcolor=bg]{xml}
|
||
|
fonctionseole.zephir("INIT" , "script supprimer_fichier en cours d'execution", "PERSO")
|
||
|
\end{minted}
|
||
|
|
||
|
\chapter{Création d'un script Zéphir : lancement du script en root}
|
||
|
|
||
|
Le script principal est exécuter avec l'utilisateur "uucp". Il faut utiliser la fonction sudo\_script pour avoir les droits "root".
|
||
|
|
||
|
Si tout se passe bien, deux messages seront remontés :
|
||
|
|
||
|
\begin{itemize}
|
||
|
\item un message d'information avec le nom du fichier ;
|
||
|
\item un message annonçant que le fichier est correctement supprimer.
|
||
|
\end{itemize}
|
||
|
|
||
|
En cas d'erreur, un message d'erreur est remonté sur le Zéphir.
|
||
|
|
||
|
\begin{minted}{xml}
|
||
|
#!/usr/bin/env python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import sys
|
||
|
from zephir.lib_zephir import *
|
||
|
from creole import fonctionseole
|
||
|
|
||
|
if fonctionseole.init_proc('PERSO') == False:
|
||
|
fonctionseole.zephir("ERR" , "procédure supprimer_fichier bloquée par zephir", "PERSO")
|
||
|
sys.exit(1)
|
||
|
|
||
|
fonctionseole.zephir("INIT" , "script supprimer_fichier en cours d'execution", "PERSO")
|
||
|
|
||
|
\end{minted}
|
||
|
\begin{minted}[bgcolor=bg]{xml}
|
||
|
try:
|
||
|
filename = sys.argv[1]
|
||
|
fonctionseole.zephir("MSG" , "supprimer_fichier lancé avec l'argument {}".format(filename), "PERSO")
|
||
|
sudo_script('supprimer_fichier_sudo.zephir %s' % filename)
|
||
|
except Exception, err:
|
||
|
fonctionseole.zephir("ERR" , "supprimer_fichier a généré une erreur {}".format(err), "PERSO")
|
||
|
sys.exit(1)
|
||
|
|
||
|
fonctionseole.zephir("FIN" , "supprimer_fichier {}: OK".format(filename), "PERSO")
|
||
|
\end{minted}
|
||
|
|
||
|
\chapter{Création du script de suppression des fichiers}
|
||
|
|
||
|
Un second script bash est nécessaire. Ce script est utilisé pour supprimer effectivement le fichier sur le serveur.
|
||
|
|
||
|
\begin{minted}{bash}
|
||
|
#!/bin/bash
|
||
|
|
||
|
[ -f "$1" ] && rm -f "$1"
|
||
|
\end{minted}
|
||
|
|
||
|
\end{document}
|