Compare commits
21 Commits
eb6ee9c947
...
2d620e845d
Author | SHA1 | Date | |
---|---|---|---|
2d620e845d | |||
0f63031575 | |||
14cbf47527 | |||
983a8f3cf6 | |||
7edb5ee916 | |||
30a6389514 | |||
7e0d5c15e5 | |||
619b74c815 | |||
231394b1cd | |||
70ad496b06 | |||
b6a5963a3e | |||
99c62ebfce | |||
d01c139026 | |||
6345c3d081 | |||
d509550f69 | |||
3c860a893b | |||
8ad3dbba85 | |||
72d42ec54c | |||
3563d18c0c | |||
3d9fb7b622 | |||
95277a2891 |
@ -0,0 +1,7 @@
|
|||||||
|
\skbheading{Explorer la structure d’un dictionnaire Creole}
|
||||||
|
|
||||||
|
Un dictionnaire Creole est une description de la configuration à l’aide 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}
|
237
content/modules_EOLE_envole/exercices/creole.dtd
Normal file
237
content/modules_EOLE_envole/exercices/creole.dtd
Normal 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*)*)>
|
||||||
|
|
@ -0,0 +1,2 @@
|
|||||||
|
\skbheading{vnstat-activation.tex}
|
||||||
|
fichier content/modules\_EOLE\_envole/exercices/vnstat-activation.tex à éditer
|
@ -0,0 +1,2 @@
|
|||||||
|
\skbheading{vnstat-contrainte.tex}
|
||||||
|
fichier content/modules\_EOLE\_envole/exercices/vnstat-contrainte.tex à éditer
|
@ -0,0 +1,2 @@
|
|||||||
|
\skbheading{vnstat-documentation.tex}
|
||||||
|
fichier content/modules\_EOLE\_envole/exercices/vnstat-documentation.tex à éditer
|
@ -0,0 +1,2 @@
|
|||||||
|
\skbheading{vnstat-gestion-reseau.tex}
|
||||||
|
fichier content/modules\_EOLE\_envole/exercices/vnstat-gestion-reseau.tex à éditer
|
@ -0,0 +1,2 @@
|
|||||||
|
\skbheading{vnstat-gestion-service.tex}
|
||||||
|
fichier content/modules\_EOLE\_envole/exercices/vnstat-gestion-service.tex à éditer
|
@ -0,0 +1,2 @@
|
|||||||
|
\skbheading{vnstat-template.tex}
|
||||||
|
fichier content/modules\_EOLE\_envole/exercices/vnstat-template.tex à éditer
|
16
content/modules_eole_envole/ressources/vnstat/90-vnstat
Executable file
16
content/modules_eole_envole/ressources/vnstat/90-vnstat
Executable 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
|
170
content/modules_eole_envole/ressources/vnstat/vnstat.conf
Normal file
170
content/modules_eole_envole/ressources/vnstat/vnstat.conf
Normal 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 "-"
|
@ -46,6 +46,7 @@
|
|||||||
\usepackage{graphicx}
|
\usepackage{graphicx}
|
||||||
\usepackage{pdfpages}
|
\usepackage{pdfpages}
|
||||||
\usepackage{menukeys}
|
\usepackage{menukeys}
|
||||||
|
\usepackage{minted}
|
||||||
\makeindex
|
\makeindex
|
||||||
|
|
||||||
%
|
%
|
||||||
|
203
content/style/preambule-programme.tex
Normal file
203
content/style/preambule-programme.tex
Normal 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)
|
||||||
|
|
||||||
|
|
@ -5,8 +5,10 @@ import argparse
|
|||||||
import re
|
import re
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
|
import subprocess
|
||||||
from os import path, makedirs, listdir
|
from os import path, makedirs, listdir
|
||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
|
import pygit2
|
||||||
|
|
||||||
LICENSES = {'CC-by-sa-2.0': 'license-cc-by-sa-2.0',
|
LICENSES = {'CC-by-sa-2.0': 'license-cc-by-sa-2.0',
|
||||||
}
|
}
|
||||||
@ -46,8 +48,120 @@ def escape_tex(value):
|
|||||||
return newval
|
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():
|
def main():
|
||||||
|
|
||||||
|
@git_integration
|
||||||
def init(args):
|
def init(args):
|
||||||
"""
|
"""
|
||||||
init function
|
init function
|
||||||
@ -69,33 +183,20 @@ def main():
|
|||||||
root = '../'
|
root = '../'
|
||||||
if args.directory:
|
if args.directory:
|
||||||
root = root + re.sub(r'[\w-]+/?', '../', args.directory)
|
root = root + re.sub(r'[\w-]+/?', '../', args.directory)
|
||||||
else:
|
|
||||||
root = '../'
|
|
||||||
|
|
||||||
name = args.name
|
name = 'diaporama.tex'
|
||||||
if name:
|
|
||||||
if path.splitext(name)[1] == '':
|
|
||||||
name = name + '.tex'
|
|
||||||
else:
|
|
||||||
name = get_unique_name('formation')
|
|
||||||
|
|
||||||
title = args.title
|
title = args.title
|
||||||
if not title:
|
if not title:
|
||||||
title = 'FIXME'
|
title = 'FIXME'
|
||||||
else:
|
|
||||||
title = title
|
|
||||||
|
|
||||||
author = args.author
|
author = args.author
|
||||||
if not author:
|
if not author:
|
||||||
author = 'Cadoles'
|
author = 'Cadoles'
|
||||||
else:
|
|
||||||
author = author
|
|
||||||
|
|
||||||
client = args.client
|
client = args.client
|
||||||
if not client:
|
if not client:
|
||||||
client = 'FIXME'
|
client = 'FIXME'
|
||||||
else:
|
|
||||||
client = client
|
|
||||||
|
|
||||||
institutes = get_institutes_logos(args.institutes)
|
institutes = get_institutes_logos(args.institutes)
|
||||||
logos_count = len(institutes) + 1
|
logos_count = len(institutes) + 1
|
||||||
@ -121,7 +222,9 @@ def main():
|
|||||||
master = TEMPLATES[document_class]['master']
|
master = TEMPLATES[document_class]['master']
|
||||||
master_dir = path.join('presentations', directory)
|
master_dir = path.join('presentations', directory)
|
||||||
programme_dir = path.join(master_dir, 'programme')
|
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, 'contenu.tex'),
|
||||||
(programme_dir, 'duree.tex'),
|
(programme_dir, 'duree.tex'),
|
||||||
(programme_dir, 'evaluation.tex'),
|
(programme_dir, 'evaluation.tex'),
|
||||||
@ -130,9 +233,6 @@ def main():
|
|||||||
(programme_dir, 'prerequis.tex'),
|
(programme_dir, 'prerequis.tex'),
|
||||||
(programme_dir, 'public.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:
|
for directory, template_file in resources:
|
||||||
template = jinja_env.get_template(template_file)
|
template = jinja_env.get_template(template_file)
|
||||||
rendered_template = template.render(**env)
|
rendered_template = template.render(**env)
|
||||||
@ -142,11 +242,14 @@ def main():
|
|||||||
with open(path.join(directory, template_dest_name), 'w') as rendered_file:
|
with open(path.join(directory, template_dest_name), 'w') as rendered_file:
|
||||||
rendered_file.write(rendered_template)
|
rendered_file.write(rendered_template)
|
||||||
|
|
||||||
|
@git_integration
|
||||||
def update(args):
|
def update(args):
|
||||||
"""
|
"""
|
||||||
update function
|
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_master = master.read()
|
||||||
tex_class = DOCUMENTCLASS_RE.search(tex_master)
|
tex_class = DOCUMENTCLASS_RE.search(tex_master)
|
||||||
tex_skbconfig = SKBCONFIG_RE.search(tex_master)
|
tex_skbconfig = SKBCONFIG_RE.search(tex_master)
|
||||||
@ -171,7 +274,14 @@ def main():
|
|||||||
with open(dest, 'w') as rendered_file:
|
with open(dest, 'w') as rendered_file:
|
||||||
rendered_file.write(rendered_template)
|
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):
|
def outline(args):
|
||||||
"""
|
"""
|
||||||
outline creation
|
outline creation
|
||||||
@ -268,7 +378,8 @@ def main():
|
|||||||
section_re = re.compile(r'\\section\{(?P<name>.*?)\}')
|
section_re = re.compile(r'\\section\{(?P<name>.*?)\}')
|
||||||
part_re = re.compile(r'\\part\{(?P<name>.*?)}')
|
part_re = re.compile(r'\\part\{(?P<name>.*?)}')
|
||||||
subsection_re = re.compile(r'\\subsection\{(?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()
|
master = master_tex.read()
|
||||||
skbconfig = SKBCONFIG_RE.search(master)
|
skbconfig = SKBCONFIG_RE.search(master)
|
||||||
|
|
||||||
@ -279,10 +390,10 @@ def main():
|
|||||||
includes = SKBINPUT_RE.finditer(master)
|
includes = SKBINPUT_RE.finditer(master)
|
||||||
parts_list = [(part.start(), part_level, part.group('name')) for part in parts]
|
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]
|
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]
|
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)))
|
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:
|
with open(content_file, 'w') as content_fh:
|
||||||
content_fh.write(structured_outline.render())
|
content_fh.write(structured_outline.render())
|
||||||
|
|
||||||
@ -302,7 +413,6 @@ def main():
|
|||||||
subparsers = parser.add_subparsers(help='Aide des sous-commandes')
|
subparsers = parser.add_subparsers(help='Aide des sous-commandes')
|
||||||
parser_init = subparsers.add_parser('init', help='Initialisation du fichier maître')
|
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('-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('-a', '--author', help="Auteur de la formation")
|
||||||
parser_init.add_argument('-c', '--client', help="Client")
|
parser_init.add_argument('-c', '--client', help="Client")
|
||||||
parser_init.add_argument('-t', '--title', help="Titre de la formation")
|
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('-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.add_argument('-i', '--institutes', nargs='*', help="Instituts dont les logos sont requis")
|
||||||
parser_init.set_defaults(func=init)
|
parser_init.set_defaults(func=init)
|
||||||
|
|
||||||
parser_update = subparsers.add_parser('update', help='Mise à jour des fichiers inclus')
|
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_update.set_defaults(func=update)
|
||||||
|
|
||||||
parser_outline = subparsers.add_parser('outline', help="Création du programme à partir du fichier maître")
|
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)
|
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 = parser.parse_args()
|
||||||
args.func(args)
|
args.func(args)
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle {Amon}
|
\frametitle{Amon}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Amon, la passerelle pare-feu :
|
\item Amon, la passerelle pare-feu :
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Pratique}
|
\frametitle{Pratique}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Faire un Schedule qui stop IRCD avant la sauvegarde ;
|
\item Faire un schedule qui extrait les données de vnStat en vue de leur sauvegarde,
|
||||||
\item faire un script qui démarre IRCD après la sauvegarde.
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
\skbinput[from=(((content)))]{style/preambule-(((class)))}
|
\skbinput[from=(((content)))]{style/preambule-(((class)))}
|
||||||
\newcommand{\departement}{Cadoles Formations}
|
\newcommand{\departement}{Cadoles Formations}
|
||||||
\newcommand{\numeroversion}{0.1}
|
\newcommand{\numeroversion}{0.1}
|
||||||
\newcommand{\adresse}{29 bis, rue de l’Arquebuse}
|
\newcommand{\adresse}{170, avenue Jean Jaurès}
|
||||||
\newcommand{\codepostal}{21000}
|
\newcommand{\codepostal}{21000}
|
||||||
\newcommand{\ville}{Dijon}
|
\newcommand{\ville}{Dijon}
|
||||||
\newcommand{\telephone}{03 73 27 02 86}
|
\newcommand{\telephone}{03 73 27 02 86}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
\skbinput[from=(((content)))]{style/preambule-(((class)))}
|
\skbinput[from=(((content)))]{style/preambule-(((class)))}
|
||||||
\newcommand{\departement}{Cadoles}
|
\newcommand{\departement}{Cadoles}
|
||||||
\newcommand{\numeroversion}{0.1}
|
\newcommand{\numeroversion}{0.1}
|
||||||
\newcommand{\adresse}{29 bis, rue de l’Arquebuse}
|
\newcommand{\adresse}{170, avenue Jean Jaurès}
|
||||||
\newcommand{\codepostal}{21000}
|
\newcommand{\codepostal}{21000}
|
||||||
\newcommand{\ville}{Dijon}
|
\newcommand{\ville}{Dijon}
|
||||||
\newcommand{\telephone}{03 73 27 02 86}
|
\newcommand{\telephone}{03 73 27 02 86}
|
||||||
|
56
templates/programme.tex
Normal file
56
templates/programme.tex
Normal 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
42
templates/support.tex
Normal 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
31
utils/hooks/pre-commit
Executable 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
|
Loading…
x
Reference in New Issue
Block a user