\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.
Les scripts doivent être dans /usr/share/zephir/scripts/ et exécutables.

\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}

Il faut redémarrer z\_stats .

\end{document}