Compare commits

...

21 Commits

Author SHA1 Message Date
Benjamin Bohard 2d620e845d Mise à jour des coordonnées 2021-02-01 09:58:32 +01:00
Benjamin Bohard 0f63031575 Another command 2021-01-29 17:09:39 +01:00
Benjamin Bohard 14cbf47527 Créer les fragments pour le diaporama 2021-01-29 16:39:04 +01:00
Benjamin Bohard 983a8f3cf6 Le contenu du programme est toujours dérivé du fichier diaporama.tex 2021-01-29 16:26:03 +01:00
Benjamin Bohard 7edb5ee916 Keep slash in branch name 2021-01-29 15:18:33 +01:00
Benjamin Bohard 30a6389514 Unknown reference 2021-01-29 15:02:46 +01:00
Benjamin Bohard 7e0d5c15e5 Refactor merge 2020-09-10 15:26:49 +02:00
Benjamin Bohard 619b74c815 attempt to merge 2020-09-10 14:17:08 +02:00
Benjamin Bohard 231394b1cd Add client-side hook 2020-09-08 09:21:18 +02:00
Benjamin Bohard 70ad496b06 Attempt to rebase 2020-09-07 19:21:23 +02:00
Benjamin Bohard b6a5963a3e comment 2020-09-07 19:03:08 +02:00
Benjamin Bohard 99c62ebfce Prefix branch names 2020-09-07 19:03:01 +02:00
Benjamin Bohard d01c139026 comment 2020-09-07 18:40:21 +02:00
Benjamin Bohard 6345c3d081 Tester le checkout avant le commit 2020-09-07 18:40:07 +02:00
Benjamin Bohard d509550f69 Simplify getting identity 2020-09-07 18:30:56 +02:00
Benjamin Bohard 3c860a893b comment 2020-09-07 18:22:12 +02:00
Benjamin Bohard 8ad3dbba85 comment 2020-09-07 18:18:16 +02:00
Benjamin Bohard 72d42ec54c git integration 2020-09-07 18:18:00 +02:00
Benjamin Bohard 3563d18c0c éléments pour les exercices 2020-09-07 16:43:21 +02:00
Benjamin Bohard 3d9fb7b622 Homogénéisation de la procédure 2020-09-07 16:15:55 +02:00
Benjamin Bohard 95277a2891 Dépendance sur minted pour la classe article et corrections mineures 2020-09-07 09:08:44 +02:00
20 changed files with 930 additions and 38 deletions

View File

@ -0,0 +1,7 @@
\skbheading{Explorer la structure dun dictionnaire Creole}
Un dictionnaire Creole est une description de la configuration à laide du format de fichier \emph{xml}.
fichier content/modules\_EOLE\_envole/exercices/creole-dictionnaire-structure.tex à éditer
\inputminted[]{xml}{./content/modules_EOLE_envole/exercices/creole.dtd}

View File

@ -0,0 +1,237 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- ===================================================================== -->
<!-- Definition de la DTD du fichier creole -->
<!-- ===================================================================== -->
<!--
# Conception :
# Eole (http://eole.orion.education.fr)
# Copyright (C) 2005-2018
# distribue sous la licence GPL-2
# En attendant une traduction officielle de la GPL, la notice de
# copyright demeure en anglais.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Se reporter a la documentation envoyee avec le programme pour la notice.
-->
<!--================ -->
<!-- root element -->
<!-- =============== -->
<!ELEMENT creole (containers | files | family_action | variables | constraints | help)*>
<!-- ============== -->
<!-- files element -->
<!-- ============== -->
<!ELEMENT family_action (action)>
<!ATTLIST family_action name CDATA #REQUIRED>
<!ATTLIST family_action description CDATA #IMPLIED>
<!ATTLIST family_action color CDATA #IMPLIED>
<!ATTLIST family_action image CDATA #IMPLIED>
<!ELEMENT action ((input* | profile* | ewtapp* | tag* | saltaction*)*)>
<!ATTLIST action type (form|custom|external|reader|apache) "custom">
<!ATTLIST action title CDATA #REQUIRED>
<!ATTLIST action description CDATA #REQUIRED>
<!ATTLIST action rewrite CDATA #IMPLIED>
<!ATTLIST action image CDATA #IMPLIED>
<!ATTLIST action actionlist CDATA #IMPLIED>
<!-- for apache action -->
<!ATTLIST action apache_path CDATA #IMPLIED>
<!ATTLIST action apache_path_type (FilenameOption|SymLinkOption) "FilenameOption">
<!-- for external action -->
<!ATTLIST action url CDATA #IMPLIED>
<!ATTLIST action url_type (URLOption|SymLinkOption) "URLOption">
<!-- for form action -->
<!ATTLIST action save (True|False) "False">
<!ELEMENT files ((service* | service_access* | service_restriction* | package* | file*)*)>
<!ELEMENT containers ((container* | all*)*)>
<!ELEMENT container ((service* | service_access* | service_restriction* | interface* | package* | file* | disknod* | host* | fstab*)*) >
<!ATTLIST container name CDATA #REQUIRED >
<!ATTLIST container id CDATA #IMPLIED >
<!ATTLIST container group CDATA #IMPLIED >
<!ELEMENT all ((service* | interface* | package* | file* | disknod* | host* | fstab*)*) >
<!ELEMENT service (#PCDATA)>
<!ATTLIST service servicelist CDATA #IMPLIED >
<!ATTLIST service instance_mode (when_container|when_no_container|always) "always">
<!ATTLIST service method (systemd|upstart|apache|network|restartonly) "systemd">
<!ATTLIST service redefine (True|False) "False">
<!ELEMENT input (#PCDATA)>
<!ELEMENT profile (#PCDATA)>
<!ELEMENT ewtapp (#PCDATA)>
<!ELEMENT tag (#PCDATA)>
<!ELEMENT saltaction (#PCDATA)>
<!ELEMENT service_access ((port | tcpwrapper)*)>
<!ATTLIST service_access service CDATA #REQUIRED >
<!ELEMENT port (#PCDATA)> <!--port_type-->
<!ATTLIST port port_type (PortOption|SymLinkOption) "PortOption">
<!ATTLIST port service_accesslist CDATA #IMPLIED >
<!ATTLIST port protocol (tcp|udp) "tcp">
<!ELEMENT tcpwrapper (#PCDATA)> <!--tcpwrapper_type-->
<!ATTLIST tcpwrapper tcpwrapper_type (UnicodeOption|SymLinkOption) "UnicodeOption">
<!ATTLIST tcpwrapper service_accesslist CDATA #IMPLIED >
<!ELEMENT service_restriction (ip*)>
<!ATTLIST service_restriction service CDATA #REQUIRED >
<!ELEMENT ip (#PCDATA)> <!--ip_type-->
<!ATTLIST ip service_restrictionlist CDATA #IMPLIED >
<!ATTLIST ip ip_type (NetworkOption|SymLinkOption) "NetworkOption">
<!ATTLIST ip interface_type (UnicodeOption|SymLinkOption) "UnicodeOption">
<!ATTLIST ip interface CDATA #REQUIRED> <!--interface_type-->
<!ATTLIST ip netmask_type (NetmaskOption|SymLinkOption) "NetmaskOption">
<!ATTLIST ip netmask CDATA "255.255.255.255"> <!--netmask_type-->
<!ELEMENT interface (#PCDATA)>
<!ATTLIST interface interfacelist CDATA #IMPLIED >
<!ATTLIST interface linkto CDATA #REQUIRED >
<!ATTLIST interface ip CDATA #REQUIRED> <!--SymLinkOption-->
<!ATTLIST interface ip_type (SymLinkOption) "SymLinkOption">
<!ATTLIST interface mask CDATA #REQUIRED> <!--SymLinkOption-->
<!ATTLIST interface mask_type (SymLinkOption) "SymLinkOption">
<!ATTLIST interface bcast CDATA #IMPLIED> <!--SymLinkOption-->
<!ATTLIST interface bcast_type (SymLinkOption) "SymLinkOption">
<!ATTLIST interface gateway CDATA #IMPLIED> <!--SymLinkOption-->
<!ATTLIST interface gateway_type (SymLinkOption) "SymLinkOption">
<!ATTLIST interface method (bridge|macvlan) "macvlan" >
<!ATTLIST interface redefine (True|False) "False">
<!ELEMENT host EMPTY >
<!ATTLIST host hostlist CDATA #IMPLIED >
<!ATTLIST host name CDATA #REQUIRED > <!--SymLinkOption-->
<!ATTLIST host name_type (SymLinkOption) "SymLinkOption">
<!ATTLIST host ip CDATA #REQUIRED > <!--SymLinkOption-->
<!ATTLIST host ip_type (SymLinkOption) "SymLinkOption">
<!ATTLIST host crossed (True|False) "True" >
<!ATTLIST host instance_mode (when_container|when_no_container|always) "always">
<!ATTLIST host comment CDATA #IMPLIED >
<!ELEMENT fstab EMPTY >
<!ATTLIST fstab name CDATA #REQUIRED> <!--name_type-->
<!ATTLIST fstab name_type (FilenameOption|SymLinkOption) "FilenameOption">
<!ATTLIST fstab type (bind|normal) "bind">
<!ATTLIST fstab fstype (auto|ext3|ext4|nfs|smb) "auto">
<!ATTLIST fstab mount_point CDATA #IMPLIED> <!--mount_point_type-->
<!ATTLIST fstab mount_point_type (FilenameOption|SymLinkOption) "FilenameOption">
<!ATTLIST fstab options CDATA #IMPLIED>
<!ATTLIST fstab checks CDATA #IMPLIED>
<!ATTLIST fstab fstablist CDATA #IMPLIED>
<!ATTLIST fstab instance_mode (when_container|when_no_container|always) "when_container">
<!ELEMENT package (#PCDATA)>
<!ATTLIST package instance_mode (when_container|when_no_container|always) "always">
<!ELEMENT disknod (#PCDATA)>
<!ELEMENT file EMPTY>
<!ATTLIST file name CDATA #REQUIRED >
<!ATTLIST file name_type (UnicodeOption|SymLinkOption) "UnicodeOption">
<!ATTLIST file source CDATA #IMPLIED>
<!ATTLIST file mode CDATA #IMPLIED >
<!ATTLIST file owner CDATA #IMPLIED >
<!ATTLIST file group CDATA #IMPLIED >
<!ATTLIST file filelist CDATA #IMPLIED >
<!ATTLIST file mkdir (True|False) "False">
<!ATTLIST file instance_mode (when_container|when_no_container|always) "always">
<!ATTLIST file rm (True|False) "False">
<!ATTLIST file del_comment CDATA #IMPLIED >
<!ATTLIST file redefine (True|False) "False">
<!ELEMENT variables (family*, separators*)>
<!ELEMENT family (#PCDATA | variable)*>
<!ATTLIST family name CDATA #REQUIRED>
<!ATTLIST family description CDATA #IMPLIED>
<!ATTLIST family mode (basic|normal|expert) "basic">
<!ATTLIST family icon CDATA #IMPLIED>
<!ATTLIST family hidden (True|False) "False">
<!ATTLIST family dynamic CDATA #IMPLIED>
<!ELEMENT variable (#PCDATA | value)*>
<!ATTLIST variable name CDATA #REQUIRED>
<!ATTLIST variable type CDATA #IMPLIED>
<!ATTLIST variable description CDATA #IMPLIED>
<!ATTLIST variable hidden (True|False) "False">
<!ATTLIST variable disabled (True|False) "False">
<!ATTLIST variable multi (True|False) "False">
<!ATTLIST variable redefine (True|False) "False">
<!ATTLIST variable exists (True|False) "True">
<!ATTLIST variable mandatory (True|False) "False">
<!ATTLIST variable auto_freeze (True|False) "False">
<!ATTLIST variable auto_save (True|False) "False">
<!ATTLIST variable mode (basic|normal|expert) "normal">
<!ATTLIST variable remove_check (True|False) "False">
<!ATTLIST variable remove_condition (True|False) "False">
<!ELEMENT separators (separator*)>
<!ELEMENT separator (#PCDATA)>
<!ATTLIST separator name CDATA #REQUIRED>
<!ATTLIST separator never_hidden CDATA #IMPLIED>
<!ELEMENT value (#PCDATA)>
<!ELEMENT constraints ((fill* | check* | condition* | auto* | group*)*)>
<!ELEMENT fill (param*)>
<!ATTLIST fill name CDATA #REQUIRED>
<!ATTLIST fill target CDATA #REQUIRED>
<!ELEMENT check (param*)>
<!ATTLIST check name CDATA #REQUIRED>
<!ATTLIST check target CDATA #REQUIRED>
<!ATTLIST check level (error|warning) "error">
<!ELEMENT auto ((param)*)>
<!ATTLIST auto name CDATA #REQUIRED>
<!ATTLIST auto target CDATA #REQUIRED>
<!ELEMENT condition ((target | param)+ )>
<!ATTLIST condition name CDATA #REQUIRED>
<!ATTLIST condition source CDATA #REQUIRED>
<!ATTLIST condition fallback (True|False) "False">
<!ELEMENT group (slave+)>
<!ATTLIST group master CDATA #REQUIRED>
<!ATTLIST group description CDATA #IMPLIED>
<!ELEMENT param (#PCDATA)>
<!ATTLIST param type (string|eole|number|container|context|python) "string">
<!ATTLIST param name CDATA #IMPLIED>
<!ATTLIST param hidden (True|False) "True">
<!ATTLIST param optional (True|False) "False">
<!ELEMENT target (#PCDATA)>
<!ATTLIST target type (family|filelist|servicelist|interfacelist|variable|service_accesslist|service_restrictionlist|hostlist|fstablist|actionlist) "variable">
<!ATTLIST target optional (True|False) "False">
<!ELEMENT slave (#PCDATA)>
<!ELEMENT help ((variable* | family*)*)>

View File

@ -0,0 +1,2 @@
\skbheading{vnstat-activation.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-activation.tex à éditer

View File

@ -0,0 +1,2 @@
\skbheading{vnstat-contrainte.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-contrainte.tex à éditer

View File

@ -0,0 +1,2 @@
\skbheading{vnstat-documentation.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-documentation.tex à éditer

View File

@ -0,0 +1,2 @@
\skbheading{vnstat-gestion-reseau.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-gestion-reseau.tex à éditer

View File

@ -0,0 +1,2 @@
\skbheading{vnstat-gestion-service.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-gestion-service.tex à éditer

View File

@ -0,0 +1,2 @@
\skbheading{vnstat-template.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-template.tex à éditer

View File

@ -0,0 +1,16 @@
#!/bin/bash
#set -e
. /usr/lib/eole/diagnose.sh
EchoGras "*** Service de statistique réseau"
if [ "$(CreoleGet activer_vnstat)" = "oui" ]; then
TestPid vnStat vnstatd
echo
vnstat
else
Inactif vnStat
fi
echo
exit 0

View File

@ -0,0 +1,170 @@
# vnStat 1.18 config file
##
# default interface
%set %%interfaces = []
%for interface in %%vnstat_interface
%set %%zone = 'nom_zone_eth' + interface
%silent %%interfaces.append(%%getVar(%%zone))
%end for
Interface "%%custom_join(%%interfaces,'+']"
# location of the database directory
DatabaseDir "/var/lib/vnstat"
# locale (LC_ALL) ("-" = use system locale)
Locale "-"
# on which day should months change
MonthRotate 1
# date output formats for -d, -m, -t and -w
# see 'man date' for control codes
DayFormat "%x"
MonthFormat "%b '%y"
TopFormat "%x"
# characters used for visuals
RXCharacter "%"
TXCharacter ":"
RXHourCharacter "r"
TXHourCharacter "t"
# how units are prefixed when traffic is shown
# 0 = IEC standard prefixes (KiB/MiB/GiB/TiB)
# 1 = old style binary prefixes (KB/MB/GB/TB)
UnitMode 0
# how units are prefixed when traffic rate is shown
# 0 = IEC binary prefixes (Kibit/s...)
# 1 = SI decimal prefixes (kbit/s...)
RateUnitMode 1
# output style
# 0 = minimal & narrow, 1 = bar column visible
# 2 = same as 1 except rate in summary and weekly
# 3 = rate column visible
OutputStyle 3
# used rate unit (0 = bytes, 1 = bits)
RateUnit 1
# number of decimals to use in outputs
DefaultDecimals 2
HourlyDecimals 1
# spacer for separating hourly sections (0 = none, 1 = '|', 2 = '][', 3 = '[ ]')
HourlySectionStyle 2
# try to detect interface maximum bandwidth, 0 = disable feature
# MaxBandwidth will be used as fallback value when enabled
BandwidthDetection 1
# maximum bandwidth (Mbit) for all interfaces, 0 = disable feature
# (unless interface specific limit is given)
MaxBandwidth 1000
# interface specific limits
# example 8Mbit limit for eth0 (remove # to activate):
#MaxBWeth0 8
# how many seconds should sampling for -tr take by default
Sampletime 5
# default query mode
# 0 = normal, 1 = days, 2 = months, 3 = top10
# 4 = exportdb, 5 = short, 6 = weeks, 7 = hours
QueryMode 0
# filesystem disk space check (1 = enabled, 0 = disabled)
CheckDiskSpace 1
# database file locking (1 = enabled, 0 = disabled)
UseFileLocking 1
# how much the boot time can variate between updates (seconds)
BootVariation 15
# log days without traffic to daily list (1 = enabled, 0 = disabled)
TrafficlessDays 1
# vnstatd
##
# switch to given user when started as root (leave empty to disable)
DaemonUser "%%vnstat_user"
# switch to given user when started as root (leave empty to disable)
DaemonGroup "%%vnstat_group"
# how many minutes to wait during daemon startup for system clock to
# sync time if most recent database update appears to be in the future
TimeSyncWait 5
# how often (in seconds) interface data is updated
UpdateInterval 30
# how often (in seconds) interface status changes are checked
PollInterval 5
# how often (in minutes) data is saved to file
SaveInterval 5
# how often (in minutes) data is saved when all interface are offline
OfflineSaveInterval 30
# how often (in minutes) bandwidth detection is redone when
# BandwidthDetection is enabled (0 = disabled)
BandwidthDetectionInterval 5
# force data save when interface status changes (1 = enabled, 0 = disabled)
SaveOnStatusChange 1
# enable / disable logging (0 = disabled, 1 = logfile, 2 = syslog)
UseLogging 2
# create dirs if needed (1 = enabled, 0 = disabled)
CreateDirs 1
# update ownership of files if needed (1 = enabled, 0 = disabled)
UpdateFileOwner 1
# file used for logging if UseLogging is set to 1
LogFile "/var/log/vnstat/vnstat.log"
# file used as daemon pid / lock file
PidFile "/var/run/vnstat/vnstat.pid"
# vnstati
##
# title timestamp format
HeaderFormat "%x %H:%M"
# show hours with rate (1 = enabled, 0 = disabled)
HourlyRate 1
# show rate in summary (1 = enabled, 0 = disabled)
SummaryRate 1
# layout of summary (1 = with monthly, 0 = without monthly)
SummaryLayout 1
# transparent background (1 = enabled, 0 = disabled)
TransparentBg 0
# image colors
CBackground "FFFFFF"
CEdge "AEAEAE"
CHeader "606060"
CHeaderTitle "FFFFFF"
CHeaderDate "FFFFFF"
CText "000000"
CLine "B0B0B0"
CLineL "-"
CRx "92CF00"
CTx "606060"
CRxD "-"
CTxD "-"

View File

@ -46,6 +46,7 @@
\usepackage{graphicx}
\usepackage{pdfpages}
\usepackage{menukeys}
\usepackage{minted}
\makeindex
%

View File

@ -0,0 +1,203 @@
\usepackage{ifxetex}
\ifxetex
\usepackage{fontspec}
%\usepackage{microtype}
%\usepackage{xunicode}
\usepackage{polyglossia}
\usepackage{xltxtra}
\setdefaultlanguage{french}
\setotherlanguage{english}
\defaultfontfeatures{Mapping=tex-text} % To support LaTeX quoting style
%\setmainfont{Caviar Dreams}
\newfontfamily\headingfont[]{Caviar Dreams}
\usepackage{titlesec}
\defaultfontfeatures{Ligatures=TeX}
% Set sans serif font to Calibri
\setsansfont{LiberationSans}
% Set serifed font to Cambria
\setmainfont{LiberationSans}
\else
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsfonts}
\usepackage[english, francais]{babel}
\fi
\usepackage{pifont}
\usepackage{geometry}
\usepackage{fancybox}
\usepackage{verbatim}
\usepackage{eurosym}
%\usepackage{color}
\usepackage[svgnames,table]{xcolor}
\usepackage{listings}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{titlesec}
\usepackage{fancyhdr}
\usepackage{lastpage}
%\usepackage{enumitem}
\usepackage{makeidx}
\usepackage{tocbibind}
\usepackage[backend=biber,hyperref=true,backref=true]{biblatex}
\addbibresource{biblio.bib}
\usepackage{url}
\renewcommand{\baselinestretch}{1.3}
\addto\captionsfrench{\renewcommand{\contentsname}{Sommaire}}
\usepackage{graphicx}
\usepackage{pdfpages}
\makeindex
%
% Tableaux
%
\usepackage{array}
\usepackage{booktabs}
\usepackage{colortbl}
% Default
\newcolumntype{1}{l}
\newcolumntype{2}{l}
\newcolumntype{3}{l}
\newcolumntype{4}{l}
\newcolumntype{5}{l}
\newcolumntype{6}{l}
\newcolumntype{7}{l}
\newcolumntype{8}{l}
\newcommand*\heading{}
\newcommand*\beforeheading{}
\newcommand*\afterheading{}
\newcommand*\normalline{}
\newcommand*\lastline{}
%\renewcommand*\toprule{\arrayrulecolor{red}{\hline}}
% Nice looking rules, centered cells
\newcolumntype{1}{c}
\newcolumntype{2}{c}
\newcolumntype{3}{c}
\newcolumntype{4}{c}
\newcolumntype{5}{c}
\newcolumntype{6}{c}
\newcolumntype{7}{c}
\newcolumntype{8}{c}
\renewcommand*\heading[1]{\chapterfont\MakeUppercase{#1}}
\renewcommand*\beforeheading{\arrayrulecolor{CadolesBlue}\toprule}
\renewcommand*\afterheading{\midrule}
\renewcommand*\normalline{}
\renewcommand*\lastline{\bottomrule}
\definecolor{CadolesBlue}{rgb}{.16,.50,.69}
\definecolor{CadolesLightBlue}{rgb}{.31,.506,.741}
\newfontfamily\cadolesfont{Caviar Dreams}
\newfontfamily\chapterfont[Color=CadolesBlue]{Caviar Dreams}
\newfontfamily\sectionfont[Color=CadolesBlue]{Caviar Dreams}
\newfontfamily\subsectionfont[Color=CadolesLightBlue]{Caviar Dreams}
\newfontfamily\subsubsectionfont[Color=CadolesLightBlue]{Caviar Dreams}
\newcommand{\tickYes}{\color{Green}\checkmark}
\newcommand{\tickNo}{\color{red}{\hspace{1pt}\ding{55}}}
\newcommand{\wlink}[1]{\textcolor{CadolesBlue}{\underline{#1}}}
\newcommand{\classname}[1]{\texttt{\textbf{#1}}}
%\newcommand{\cadoles}{\chapterfont{Cadoles}}
\newcommand{\cadoles}{\cadolesfont\textcolor{black}{Cad}\textcolor{CadolesBlue}{ole}\textcolor{black}{s}}
\newcommand{\TitleRule}{\rule[0.5ex]{12cm}{0.5mm}}
\newcommand\espace{\vrule height 20pt width 0pt}
\newcommand{\titre}[1]{{\color{DarkBlue}\normalfont\LARGE\bfseries #1\smallskip\hrule height 1pt}\bigskip}
\renewcommand*\abstractname{Summary}
%\renewcommand{\FrenchLabelItem}{\color{DarkBlue}{\ding{68}}}
\let\oldfootnoterule\footnoterule
\renewcommand\footnoterule{\vspace*{-3pt}%
\noindent\rule{3in}{0.4pt}\vspace*{2.6pt}}% -3 + 0.4 + 2.6 = 0
%\pagestyle{headings}
\makeatletter
\renewcommand{\thesection}{}
\titleformat{\chapter}{\LARGE\chapterfont}{\thesection}{0ex}{}[\color{CadolesBlue}\hrule height 1pt]
\titleformat{\section}{\Large\sectionfont}{\thesection}{0ex}{}[\color{CadolesBlue}\hrule height 1pt]
\titleformat{\subsection}{\large\subsectionfont}{\thesection}{0ex}{}
\titleformat{\subsubsection}{\itshape\subsubsectionfont}{\thesection}{0ex}{}
\skbinput[from=rep]{style/00-entete-pied-de-page}
\def\maketitle{
\skbfigure[center]{logos/Cadoles}
\vspace{4.5cm}
\begin{flushleft}
\textbf{\Huge \cadolesfont\textcolor{CadolesBlue}{\@title}}
\end{flushleft}
\begin{center}
\color{CadolesBlue}\TitleRule
\end{center}
\begin{flushright}
\vspace{-1.5ex}
\textbf{\huge \cadolesfont\textcolor{DarkGrey}{\departement}}
\end{flushright}
\vspace{2.5cm}
\pagebreak
}
\def\origine{
\vspace{1.5cm}
\begin{flushleft}
\begin{minipage}[l]{8cm}
\skbinput[from=rep]{style/00-Coordonnees}
\end{minipage}
\end{flushleft}
}
%
% Itemize avec la petite cadoles
%
%\newenvironment{citemize}{\renewcommand{\labelitemi{$\odot$}}}
%\newenvironment{citemize}{\renewcommand{\labelitemi{\includegraphics[height=1.6ex]{inc/cadole.png}}}}
\newenvironment{citemize}{\renewcommand
\labelitemi{\includegraphics[height=1ex]{inc/cadole.png}}\begin{itemize}}{\end{itemize}}
%
% Box pour citations
%
\newsavebox{\fmbox}
\newenvironment{fmpage}[1]
{\begin{lrbox}{\fmbox}\begin{minipage}{#1}}
{\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}}
\hypersetup{
backref=true, % Permet d'ajouter des liens dans
pagebackref=true, % les bibliographies
hyperindex=true, % Ajoute des liens dans les index.
colorlinks=true, % Colorise les liens.
breaklinks=true, % Permet le retour à la ligne dans les liens trop longs.
urlcolor= CadolesBlue, % Couleur des hyperliens.
linkcolor= CadolesBlue, % Couleur des liens internes.
bookmarks=true, % Créé des signets pour Acrobat.
bookmarksopen=true, % Si les signets Acrobat sont créés,
% les afficher complètement.
pdftitle={\@title}, % Titre du document.
% Informations apparaissant dans
pdfauthor={Cadoles}, % dans les informations du document
pdfsubject={Proposition Commerciale} % sous Acrobat.
}
%\topmargin 0in
%\leftmargin 2.5cm
%\rightmargin 2.5cm
\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)

View File

@ -5,8 +5,10 @@ import argparse
import re
import random
import time
import subprocess
from os import path, makedirs, listdir
from jinja2 import Environment, FileSystemLoader
import pygit2
LICENSES = {'CC-by-sa-2.0': 'license-cc-by-sa-2.0',
}
@ -46,8 +48,120 @@ def escape_tex(value):
return newval
def normalize_branch(args):
if 'master' in args:
return path.join('xelatex', path.dirname(args.master))
elif 'directory' in args:
return path.join('xelatex', args.directory)
else:
raise Exception('No sufficient information to create branch')
def git_integration(func):
def commit_into_master(paths, repo, comment):
author = repo.default_signature
committer = author
repo.checkout('refs/heads/master')
index = repo.index
for fp in paths:
index.add(fp)
index.write()
tree = index.write_tree()
master_ref = repo.references['refs/heads/master']
parents = [master_ref.peel().hex]
master_head = repo.create_commit('refs/heads/master',
author,
committer,
comment,
tree,
parents)
return master_head
def commit_into_branch(paths, branch, repo, comment):
author = repo.default_signature
committer = author
repo.checkout(f'refs/heads/{branch}')
index = repo.index
for fp in paths:
index.add(fp)
index.write()
tree = index.write_tree()
branch_ref = repo.references[f'refs/heads/{branch}']
parents = [branch_ref.peel().hex]
branch_commit = repo.create_commit(f'refs/heads/{branch}',
author,
committer,
comment,
tree,
parents)
return branch_commit
def merge_master_into_branch(master_commit, branch, repo):
author = repo.default_signature
committer = author
repo.checkout(f'refs/heads/{branch}')
repo.merge(master_commit)
tree = repo.index.write_tree()
merge_commit = repo.create_commit('HEAD', author, committer, 'Merge master into xelatex/*', tree, [repo.head.target, master_commit])
def inner(args):
try:
repo = pygit2.Repository('./')
except:
repo = None
if repo:
branch_name = normalize_branch(args)
if not branch_name in repo.branches.local:
master_ref = repo.references['refs/heads/master']
commit = master_ref.peel()
repo.branches.local.create(branch_name, commit)
func(args)
if repo:
repo_status = repo.status()
to_add_status = [pygit2.GIT_STATUS_WT_NEW,
pygit2.GIT_STATUS_WT_MODIFIED]
branch_add_paths = [fp for fp in repo_status
if fp.startswith(f'presentations/') and repo_status[fp] in to_add_status]
master_add_paths = [fp for fp in repo_status
if (fp.startswith('content/') or fp.startswith('slides/')) and repo_status[fp] in to_add_status]
if func.__name__ == 'init':
comment = 'Initialisation de la formation'
elif func.__name__ == 'update':
comment = 'Construction de la formation'
elif func.__name__ == 'outline':
comment = 'Mise à jour du programme'
else:
comment = 'Travail sur la formation'
if repo.branches['master'].is_checked_out():
if master_add_paths:
master_head = commit_into_master(master_add_paths, repo, comment)
else:
master_head = repo.revparse_single('refs/heads/master')
if branch_add_paths:
commit_into_branch(branch_add_paths, branch_name, repo, comment)
elif repo.branches[branch_name].is_checked_out():
if branch_add_paths:
commit_into_branch(branch_add_paths, branch_name, repo, comment)
if master_add_paths:
master_head = commit_into_master(master_add_paths, repo, comment)
else:
master_head = repo.revparse_single('refs/heads/master')
branch_ref = repo.references[f'refs/heads/{branch_name}']
if master_head not in repo.walk(branch_ref.target):
merge_master_into_branch(master_head, branch_name, repo)
return inner
def main():
@git_integration
def init(args):
"""
init function
@ -69,33 +183,20 @@ def main():
root = '../'
if args.directory:
root = root + re.sub(r'[\w-]+/?', '../', args.directory)
else:
root = '../'
name = args.name
if name:
if path.splitext(name)[1] == '':
name = name + '.tex'
else:
name = get_unique_name('formation')
name = 'diaporama.tex'
title = args.title
if not title:
title = 'FIXME'
else:
title = title
author = args.author
if not author:
author = 'Cadoles'
else:
author = author
client = args.client
if not client:
client = 'FIXME'
else:
client = client
institutes = get_institutes_logos(args.institutes)
logos_count = len(institutes) + 1
@ -110,18 +211,20 @@ def main():
content = 'sli' if document_class == 'beamer' else 'rep'
env = {'root': root,
'class': document_class,
'content': content,
'title': title,
'author': author,
'client': client,
'license': license,
'institutes': institutes,
'logos_count': logos_count}
'class': document_class,
'content': content,
'title': title,
'author': author,
'client': client,
'license': license,
'institutes': institutes,
'logos_count': logos_count}
master = TEMPLATES[document_class]['master']
master_dir = path.join('presentations', directory)
programme_dir = path.join(master_dir, 'programme')
resources = [(path.join('presentations', directory), master),
resources = [(master_dir, master),
(master_dir, 'programme.tex'),
(master_dir, 'support.tex'),
(programme_dir, 'contenu.tex'),
(programme_dir, 'duree.tex'),
(programme_dir, 'evaluation.tex'),
@ -130,9 +233,6 @@ def main():
(programme_dir, 'prerequis.tex'),
(programme_dir, 'public.tex'),
]
#('slides', 'license-cc-by-sa-2.0.tex'),
#('slides', 'preambule.tex'),
#('slides', 'title.tex')]
for directory, template_file in resources:
template = jinja_env.get_template(template_file)
rendered_template = template.render(**env)
@ -142,11 +242,14 @@ def main():
with open(path.join(directory, template_dest_name), 'w') as rendered_file:
rendered_file.write(rendered_template)
@git_integration
def update(args):
"""
update function
"""
with open(args.master, 'r') as master:
master_file = path.join('presentations', args.directory, 'diaporama.tex')
with open(master_file, 'r') as master:
tex_master = master.read()
tex_class = DOCUMENTCLASS_RE.search(tex_master)
tex_skbconfig = SKBCONFIG_RE.search(tex_master)
@ -171,7 +274,14 @@ def main():
with open(dest, 'w') as rendered_file:
rendered_file.write(rendered_template)
def tex_compile(args):
master_files = [path.join('presentations', args.directory, tex_file)
for tex_file in ['diaporama.tex', 'programme.tex', 'support.tex']]
for master_file in master_files:
subprocess.call(['rubber', '--inplace', '-c shell_escape', '--unsafe', '--module=xelatex', master_file])
@git_integration
def outline(args):
"""
outline creation
@ -268,7 +378,8 @@ def main():
section_re = re.compile(r'\\section\{(?P<name>.*?)\}')
part_re = re.compile(r'\\part\{(?P<name>.*?)}')
subsection_re = re.compile(r'\\subsection\{(?P<name>.*?)\}')
with open(args.master, 'r') as master_tex:
master_file = path.join('presentations', args.directory, 'diaporama.tex')
with open(master_file, 'r') as master_tex:
master = master_tex.read()
skbconfig = SKBCONFIG_RE.search(master)
@ -279,10 +390,10 @@ def main():
includes = SKBINPUT_RE.finditer(master)
parts_list = [(part.start(), part_level, part.group('name')) for part in parts]
sections_list = [(section.start(), section_level, section.group('name')) for section in sections]
includes_list = [element for skbinput in includes for element in outline_from_include(file_path_from_skbinput(skbinput, args.master, skbconfig), skbinput.start(), document_class)]
includes_list = [element for skbinput in includes for element in outline_from_include(file_path_from_skbinput(skbinput, master_file, skbconfig), skbinput.start(), document_class)]
subsections_list = [(subsection.start(), subsection_level, subsection.group('name')) for subsection in subsections]
structured_outline = structure_outline(filter_outlines(reorder_lists(parts_list, sections_list, includes_list, subsections_list)))
content_file = path.join(path.dirname(path.abspath(args.master)), 'programme', 'contenu.tex')
content_file = path.join(path.dirname(path.abspath(master_file)), 'programme', 'contenu.tex')
with open(content_file, 'w') as content_fh:
content_fh.write(structured_outline.render())
@ -302,7 +413,6 @@ def main():
subparsers = parser.add_subparsers(help='Aide des sous-commandes')
parser_init = subparsers.add_parser('init', help='Initialisation du fichier maître')
parser_init.add_argument('-f', '--format', help="Format du document", required=True)
parser_init.add_argument('-n', '--name', help="Nom du fichier à créer", required=True)
parser_init.add_argument('-a', '--author', help="Auteur de la formation")
parser_init.add_argument('-c', '--client', help="Client")
parser_init.add_argument('-t', '--title', help="Titre de la formation")
@ -310,12 +420,20 @@ def main():
parser_init.add_argument('-d', '--directory', help="Sous-répertoires où créer le fichier", required=True)
parser_init.add_argument('-i', '--institutes', nargs='*', help="Instituts dont les logos sont requis")
parser_init.set_defaults(func=init)
parser_update = subparsers.add_parser('update', help='Mise à jour des fichiers inclus')
parser_update.add_argument('-m', '--master', help="Emplacement du fichier maître", required=True)
parser_update.add_argument('-d', '--directory', help="Sous-répertoires contenant le diaporama", required=True)
parser_update.set_defaults(func=update)
parser_outline = subparsers.add_parser('outline', help="Création du programme à partir du fichier maître")
parser_outline.add_argument('-m', '--master', help="Emplacement du fichier maître", required=True)
parser_outline.add_argument('-d', '--directory', help="Sous-répertoires contenant le diaporama", required=True)
parser_outline.set_defaults(func=outline)
if subprocess.check_output(['rubber', '--version']):
parser_compile = subparsers.add_parser('compile', help='Compiler les différents documents en faisant appel à rubber')
parser_compile.add_argument('-d', '--directory', help="Sous-répertoires contenant les documents", required=True)
parser_compile.set_defaults(func=tex_compile)
args = parser.parse_args()
args.func(args)

View File

@ -1,5 +1,5 @@
\begin{frame}
\frametitle {Amon}
\frametitle{Amon}
\begin{itemize}
\item Amon, la passerelle pare-feu :
\begin{itemize}

View File

@ -24,7 +24,6 @@
\begin{frame}
\frametitle{Pratique}
\begin{itemize}
\item Faire un Schedule qui stop IRCD avant la sauvegarde ;
\item faire un script qui démarre IRCD après la sauvegarde.
\item Faire un schedule qui extrait les données de vnStat en vue de leur sauvegarde,
\end{itemize}
\end{frame}

View File

@ -15,7 +15,7 @@
\skbinput[from=(((content)))]{style/preambule-(((class)))}
\newcommand{\departement}{Cadoles Formations}
\newcommand{\numeroversion}{0.1}
\newcommand{\adresse}{29 bis, rue de lArquebuse}
\newcommand{\adresse}{170, avenue Jean Jaurès}
\newcommand{\codepostal}{21000}
\newcommand{\ville}{Dijon}
\newcommand{\telephone}{03 73 27 02 86}

View File

@ -15,7 +15,7 @@
\skbinput[from=(((content)))]{style/preambule-(((class)))}
\newcommand{\departement}{Cadoles}
\newcommand{\numeroversion}{0.1}
\newcommand{\adresse}{29 bis, rue de lArquebuse}
\newcommand{\adresse}{170, avenue Jean Jaurès}
\newcommand{\codepostal}{21000}
\newcommand{\ville}{Dijon}
\newcommand{\telephone}{03 73 27 02 86}

56
templates/programme.tex Normal file
View File

@ -0,0 +1,56 @@
\documentclass[a4paper,11pt]{report}
\usepackage{skb}
\skbconfig[
root = (((root))),
rep = content,
pub = presentations,
fig = figures,
sli = slides,
acr = database/acr,
bib = database/bib
]{skblocal.tex}
\newcommand{\departement}{Cadoles Formations}
\newcommand{\numeroversion}{1.0}
\newcommand{\adresse}{170, avenue Jean Jaurès}
\newcommand{\codepostal}{21000}
\newcommand{\ville}{Dijon}
\newcommand{\telephone}{Tél : 03 73 27 02 86}
\newcommand{\fax}{Fax : 09 72 29 61 11}
\newcommand{\siteweb}{Site : http://www.cadoles.com/}
\newcommand{\formateur}{Emmanuel Garette}
\skbinput[from=rep]{style/preambule-programme}
% TITRE DU DOCUMENT !
\title{Programme de Formation}
\author{Emmanuel Garette}
%\date{}
\begin{document}
\maketitle
\newpage
\section{Public visé}
\input{./programme/public.tex}
\section{Conditions préalables}
\input{./programme/prerequis.tex}
\section{Objectifs de la formation}
\input{./programme/objectifs.tex}
\section{Durée de la formation}
\input{./programme/duree.tex}
\section{Évaluation des acquis}
\input{./programme/evaluation.tex}
\newpage
\section{Contenu de la formation}
\input{./programme/contenu.tex}
\IfFileExists{./programme/moyens.tex}{%
\section{Moyens pédagogiques, techniques et d'encadrement}
\input{./programme/moyens.tex}
\section{Évaluation des acquis}
}{}
\end{document}

42
templates/support.tex Normal file
View File

@ -0,0 +1,42 @@
\documentclass{article}
\usepackage{skb}
\skbconfig[
root = (((root))),
rep = content,
pub = presentations,
fig = figures,
sli = slides,
acr = database/acr,
bib = database/bib
]{skblocal.tex}
\skbinput[from=rep]{style/preambule-article}
\newcommand{\departement}{Cadoles Formations}
\newcommand{\numeroversion}{0.1}
\newcommand{\adresse}{170, avenue Jean Jaurès}
\newcommand{\codepostal}{21000}
\newcommand{\ville}{Dijon}
\newcommand{\telephone}{03 73 27 02 86}
\begin{document}
\title{(((title)))}
\author{(((author)))}
\date{{\small \today}}
\maketitle
\skbinput[from=rep]{style/title}
% Corps de la formation
%\skbinput[from=rep]{}
\skbinput[from=rep]{licences/(((license)))}
\end{document}

31
utils/hooks/pre-commit Executable file
View File

@ -0,0 +1,31 @@
#!/bin/sh
checkout_branch="$(git branch --show-current)"
presentations_indexed_files="$(git diff --cached --name-only -- presentations/ | wc -l)"
indexed_files="$(git diff --cached --name-only | wc -l)"
case "$checkout_branch" in
master)
if [ "${presentations_indexed_files}" -gt 0 ]
then
cat <<\EOF
Error: Attempt to add files in presentations folder in master branch.
Files in presentations folder are to be added in special branches xelatex/*.
EOF
exit 1
fi
;;
xelatex/*)
if [ $presentations_indexed_files -ne $indexed_files ]
then
cat <<\EOF
Error: Attempt to add files outside presentations folder in special branch xelatex/*.
This branch follows only files in presentations folder.
EOF
exit 1
fi
;;
*) exit 0;;
esac
exit 0