tutorial.pdf: update to the latest template

This commit is contained in:
nemunaire 2019-03-10 21:58:40 +01:00
parent 23451ed479
commit 2788600d4f
10 changed files with 183 additions and 160 deletions

View file

@ -1,16 +1,6 @@
include ../pandoc-opts.mk
SOURCES = tutorial.md setup.md what.md ansible.md deploiement-svc.md rendu.md SOURCES = tutorial.md setup.md what.md ansible.md deploiement-svc.md rendu.md
PANDOCOPTS = --latex-engine=xelatex \
--standalone \
--normalize \
--number-sections \
--smart \
-M lang=fr-FR \
-M fontsize=12pt \
-M papersize=a4paper \
-M mainfont="Linux Libertine O" \
-M monofont="FantasqueSansMono-Regular" \
-M sansfont="Linux Biolinum O" \
--include-in-header=../header.tex
all: tutorial.pdf all: tutorial.pdf

View file

@ -87,11 +87,11 @@ Lancez ensuite la commande suivante :
<div lang="en-US"> <div lang="en-US">
``` ```
42sh$ ansible --inventory-file hosts all --module-name ping --user root --ask-pass 42sh$ ansible --inventory-file hosts all --module-name ping --user root --ask-pass
192.168.0.106 | SUCCESS => { 192.168.0.106 | SUCCESS => {
"changed": false, "changed": false,
"ping": "pong" "ping": "pong"
} }
``` ```
</div> </div>
@ -115,8 +115,8 @@ Et ajoutez les options `--become` et `--ask-become-pass` (utilisez `--sudo` et
`--ask-sudo-pass` pour les vieilles versions) : `--ask-sudo-pass` pour les vieilles versions) :
<div lang="en-US"> <div lang="en-US">
``` ```bash
ansible --inventory-file hosts all -m ping -u bruce --become --ask-become-pass ansible --inventory-file hosts all -m ping -u bruce --become --ask-become-pass
``` ```
</div> </div>
@ -147,8 +147,8 @@ Parmi les modules de base, le module `setup` permet de récupérer un grand
nombre de caractéristiques de la machine distance, voyez plutôt : nombre de caractéristiques de la machine distance, voyez plutôt :
<div lang="en-US"> <div lang="en-US">
``` ```bash
ansible -i hosts all -m setup ansible -i hosts all -m setup
``` ```
</div> </div>
@ -205,8 +205,8 @@ Placer le contenu dans un fichier YAML, par exemple `playbook.yml`, non loin du
fichier `hosts` créé à la section précédentes, puis lancez : fichier `hosts` créé à la section précédentes, puis lancez :
<div lang="en-US"> <div lang="en-US">
``` ```bash
ansible-playbook -i hosts playbook.yml ansible-playbook -i hosts playbook.yml
``` ```
</div> </div>
@ -256,10 +256,10 @@ Pour se faire, il faut ajouter un élément `notify` à sa tâche :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
- name: template configuration file - name: template configuration file
template: src=template.j2 dest=/etc/httpd.conf template: src=template.j2 dest=/etc/httpd.conf
notify: notify:
- restart cherokee - restart cherokee
``` ```
</div> </div>
@ -267,9 +267,9 @@ Puis, au même niveau que les *tasks*, on déclare nos *handlers* :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
handlers: handlers:
- name: restart cherokee - name: restart cherokee
service: name=cherokee state=restarted service: name=cherokee state=restarted
``` ```
</div> </div>
@ -305,11 +305,11 @@ récupérée par un module (comme le module `setup`).
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
all: all:
hosts: hosts:
192.168.0.106 192.168.0.106
vars: vars:
ntp_server: ntp.epitech.eu ntp_server: ntp.epitech.eu
``` ```
</div> </div>
@ -327,9 +327,9 @@ variables dans une recette :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
- hosts: webservers - hosts: webservers
vars: vars:
http_port: 80 http_port: 80
``` ```
</div> </div>
@ -337,9 +337,9 @@ Ces variables peuvent être placées dans un fichier, pour plus de lisibilité :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
- hosts: webservers - hosts: webservers
vars_files: vars_files:
- /vars/webservers_common.yml - /vars/webservers_common.yml
``` ```
</div> </div>
@ -347,8 +347,8 @@ Le format correspond au sous arbre que l'on pourrait trouver sous `vars` :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
http_port: 80 http_port: 80
https_port: 443 https_port: 443
``` ```
</div> </div>
@ -363,8 +363,8 @@ template, un format très courant dans le milieu du développement Python.
<div lang="en-US"> <div lang="en-US">
``` ```
I'm running {{ ansible_system }} {{ ansible_os_family }} on {{ ansible_system_vendor }}, I'm running {{ ansible_system }} {{ ansible_os_family }} on {{ ansible_system_vendor }},
with {{ ansible_memory_mb.swap.free }} MB Swap available. with {{ ansible_memory_mb.swap.free }} MB Swap available.
``` ```
</div> </div>
@ -374,17 +374,21 @@ table de hash/dictionnaire, on utilise le caractère `.` ;
Les crochets `[x]` sont utilisés principalement pour accéder aux éléments des Les crochets `[x]` sont utilisés principalement pour accéder aux éléments des
tableaux : tableaux :
<div lang="en-US">
``` ```
My first nameserver is: {{ ansible_dns.nameservers[0] }}. My first nameserver is: {{ ansible_dns.nameservers[0] }}.
``` ```
</div>
ou d'un dictionnaire lorsque la clef doit être récupérée d'une variable : ou d'un dictionnaire lorsque la clef doit être récupérée d'une variable :
<div lang="en-US">
``` ```
My disks are: {% for disk in ansible_device_links.uuids %} My disks are: {% for disk in ansible_device_links.uuids %}
- {{ disk }}: {{ ansible_device_links.uuids[disk] }}, {{ ansible_device_links.ids[disk]|join(', ') }} - {{ disk }}: {{ ansible_device_links.uuids[disk] }}, {{ ansible_device_links.ids[disk]|join(', ') }}
{% endfor %} {% endfor %}
``` ```
</div>
Notez dans ce dernier exemple l'utilisation d'un filtre `join` permettant Notez dans ce dernier exemple l'utilisation d'un filtre `join` permettant
d'aplatir la liste retournée. d'aplatir la liste retournée.
@ -396,10 +400,10 @@ Jinja2 :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
- hosts: webservers - hosts: webservers
vars_files: vars_files:
- /vars/webservers_common.yml - /vars/webservers_common.yml
- /vars/webservers_{{ ansible_os_family }}.yml - /vars/webservers_{{ ansible_os_family }}.yml
``` ```
</div> </div>
@ -414,13 +418,13 @@ tâches. Par exemple :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
tasks: tasks:
- name: "pkg setup (Debian)" - name: "pkg setup (Debian)"
apt: name=chrony state=present apt: name=chrony state=present
when: ansible_os_family == "Debian" when: ansible_os_family == "Debian"
- name: "pkg setup (CentOS)" - name: "pkg setup (CentOS)"
yum: name=chrony state=present yum: name=chrony state=present
when: ansible_os_family == "CentOS" when: ansible_os_family == "CentOS"
``` ```
</div> </div>

View file

@ -25,11 +25,11 @@ en fonction de votre organisation ou de vos choix) :
<div lang="en-US"> <div lang="en-US">
``` ```
login_x-TP2/ttrss.yml login_x-TP2/ttrss.yml
login_x-TP2/vars/ttrss-config.yml login_x-TP2/vars/ttrss-config.yml
login_x-TP2/pgdump.sh login_x-TP2/pgdump.sh
login_x-TP2/config.php.j2 login_x-TP2/config.php.j2
login_x-TP2/ttrss.nginx.conf login_x-TP2/ttrss.nginx.conf
... ...
``` ```
</div> </div>
@ -72,12 +72,12 @@ Si vous recevez un rapport avec l'erreur suivante :
<div lang="en-US"> <div lang="en-US">
``` ```
[FAIL] Bad signature. Here is the gnupg output: [FAIL] Bad signature. Here is the gnupg output:
gpg: Signature made Tue Jan 01 16:42:23 2014 CET gpg: Signature made Tue Jan 01 16:42:23 2014 CET
gpg: using RSA key 842807A84573CC96 gpg: using RSA key 842807A84573CC96
gpg: requesting key E2CCD99DD37BD32E from hkp server pool.sks-keyservers.net gpg: requesting key E2CCD99DD37BD32E from hkp server pool.sks-keyservers.net
gpg: Can't check signature: No public key gpg: Can't check signature: No public key
``` ```
</div> </div>
@ -94,7 +94,7 @@ Si vous recevez un rapport avec l'erreur suivante :
<div lang="en-US"> <div lang="en-US">
``` ```
[FAIL] The username of your key is not explicit, I can't find you. [FAIL] The username of your key is not explicit, I can't find you.
``` ```
</div> </div>
@ -109,7 +109,7 @@ Si vous recevez un rapport concluant ainsi :
<div lang="en-US"> <div lang="en-US">
``` ```
After analyzing your e-mail, I've decided to SKIP it. After analyzing your e-mail, I've decided to SKIP it.
``` ```
</div> </div>

View file

@ -20,8 +20,8 @@ apprendre le plus de choses !) est sans doute *qemu*, sous Linux ; vous pouvez
le lancer avec la commande : le lancer avec la commande :
<div lang="en-US"> <div lang="en-US">
``` ```bash
qemu-system-x86_64 qemu-system-x86_64
``` ```
</div> </div>
@ -75,8 +75,8 @@ par exemple pour une carte `enp0s3`) ; avant de l'assigner à notre machine
virtuelle : virtuelle :
<div lang="en-US"> <div lang="en-US">
``` ```bash
qemu-system-x86_64 -device pci-assign,host=03:00.0 qemu-system-x86_64 -device pci-assign,host=03:00.0
``` ```
</div> </div>
@ -97,8 +97,8 @@ Pour attacher une carte réseau à notre machine virtuelle et créer l'interface
correspondante sur l'hôte, ce sera grâce à la commande : correspondante sur l'hôte, ce sera grâce à la commande :
<div lang="en-US"> <div lang="en-US">
``` ```bash
qemu-system-x86_64 -net nic,model=e1000 -net tap,ifname=tap0,script=no,downscript=no qemu-system-x86_64 -net nic,model=e1000 -net tap,ifname=tap0,script=no,downscript=no
``` ```
</div> </div>
@ -137,8 +137,8 @@ interfaces (qu'elles soient physiques ou virtuelles).
Pour créer un nouveau pont, on utilise la commande `ip` comme suit : Pour créer un nouveau pont, on utilise la commande `ip` comme suit :
<div lang="en-US"> <div lang="en-US">
``` ```bash
ip link add name br0 type bridge ip link add name br0 type bridge
``` ```
</div> </div>
@ -148,8 +148,8 @@ où `br0` est le nom que l'on souhaite attribuer à l'interface.
Pour assigner à un pont une interface, on utilise la commande suivante : Pour assigner à un pont une interface, on utilise la commande suivante :
<div lang="en-US"> <div lang="en-US">
``` ```bash
ip link set veth0 master br0 ip link set veth0 master br0
``` ```
</div> </div>
@ -160,8 +160,8 @@ où `veth0` est le nom de l'interface que l'on souhaite inclure dans le pont
Pour consulter la liste des interfaces concentrées par le pont `br0` : Pour consulter la liste des interfaces concentrées par le pont `br0` :
<div lang="en-US"> <div lang="en-US">
``` ```bash
ip link show master br0 ip link show master br0
``` ```
</div> </div>
@ -182,8 +182,8 @@ Lorsque le pont existe, `qemu` peut créer l'interface virtuelle et l'assigner
un pont directement, avec la commande : un pont directement, avec la commande :
<div lang="en-US"> <div lang="en-US">
``` ```bash
qemu-system-x86_64 -net bridge,br=br0 qemu-system-x86_64 -net bridge,br=br0
``` ```
</div> </div>
@ -203,8 +203,8 @@ lancé sur l'hôte et pourront donc communiquer entre-elles et avec l'hôte, sur
un réseau privé. un réseau privé.
<div lang="en-US"> <div lang="en-US">
``` ```bash
dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254 dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254
``` ```
</div> </div>
@ -220,16 +220,16 @@ Démarrer la machine virtuelle
Pour réaliser ce TP, nous aurons besoin d'un disque vierge : Pour réaliser ce TP, nous aurons besoin d'un disque vierge :
<div lang="en-US"> <div lang="en-US">
``` ```bash
qemu-img create -f qcow2 /tmp/disk.qcow2 4G qemu-img create -f qcow2 /tmp/disk.qcow2 4G
``` ```
</div> </div>
Ce disque sera à attacher à notre machine virtuelle de cette manière : Ce disque sera à attacher à notre machine virtuelle de cette manière :
<div lang="en-US"> <div lang="en-US">
``` ```bash
qemu-system-x86_64 -drive file=/tmp/disk.qcow2 qemu-system-x86_64 -drive file=/tmp/disk.qcow2
``` ```
</div> </div>
@ -240,8 +240,8 @@ Tout comme le disque, nous utilisons ici le paramètre `-drive` pour donner un
ISO de CD : ISO de CD :
<div lang="en-US"> <div lang="en-US">
``` ```bash
qemu-system-x86_64 -boot d -drive format=raw,media=cdrom,readonly,file=tuto2.iso qemu-system-x86_64 -boot d -drive format=raw,media=cdrom,readonly,file=tuto2.iso
``` ```
</div> </div>
@ -284,8 +284,8 @@ pouvoir émettre un paquet sur le réseau.
<div lang="en-US"> <div lang="en-US">
``` ```
42sh$ ip link 42sh$ ip link
1: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 1: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
^^^^^^^^^^ ^^^^^^^^^^
``` ```
</div> </div>
@ -293,8 +293,8 @@ pouvoir émettre un paquet sur le réseau.
Manuellement, l'état d'un lien se change avec la commande : Manuellement, l'état d'un lien se change avec la commande :
<div lang="en-US"> <div lang="en-US">
``` ```bash
ip link set enp3s0 up ip link set enp3s0 up
``` ```
</div> </div>
@ -305,8 +305,8 @@ Après avoir reçu la validation (paquet `DHCPACK`) du serveur DHCP, l'IP est
définie sur l'interface, via une méthode similaire à la commande : définie sur l'interface, via une méthode similaire à la commande :
<div lang="en-US"> <div lang="en-US">
``` ```bash
ip address add 192.168.0.42/24 dev enp3s0 ip address add 192.168.0.42/24 dev enp3s0
``` ```
</div> </div>
@ -319,9 +319,9 @@ réseau : le routeur conduisant généralement à Internet.
<div lang="en-US"> <div lang="en-US">
``` ```
42sh$ ip route 42sh$ ip route
default via 192.168.0.254 dev enp3s0 default via 192.168.0.254 dev enp3s0
192.168.0.0/24 dev enp3s0 proto kernel scope link src 192.168.0.42 192.168.0.0/24 dev enp3s0 proto kernel scope link src 192.168.0.42
``` ```
</div> </div>
@ -333,8 +333,8 @@ paquet détaillant ses routes.
Manuellement, on ajoute une route par défaut avec la commande : Manuellement, on ajoute une route par défaut avec la commande :
<div lang="en-US"> <div lang="en-US">
``` ```bash
ip route add default via 192.168.0.254 ip route add default via 192.168.0.254
``` ```
</div> </div>
@ -352,7 +352,7 @@ fichier `/etc/resolv.conf` :
<div lang="en-US"> <div lang="en-US">
``` ```
nameserver 9.9.9.9 nameserver 9.9.9.9
``` ```
</div> </div>

View file

@ -1,22 +1,22 @@
--- ---
title: Administration Linux avancée -- TP n^o^ 2 title: Administration Linux avancée -- TP n^o^ 2
subtitle: subtitle: fixit_f to the rescue
author: Pierre-Olivier *nemunaire* Mercier author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
institute: EPITA institute: EPITA
date: Mercredi 7 mars 2018 date: Jeudi 14 mars 2019
abstract: |
Durant ce deuxième TP, nous allons apprendre à déployer des services sur un
serveur, de manière industrielle !
\vspace{1em}
La partie 4 de ce TP est un projet à rendre à <adlin@nemunai.re> au plus tard
le **vendredi 29 mars 2019 à 00 h 42 du matin**. Consultez la dernière
section de chaque partie pour plus d'information sur les éléments à rendre.
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
[me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96)
faire signer votre clef et n'hésitez pas à [faire signer votre
clef](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
... ...
Durant ce deuxième TP, nous allons apprendre à déployer des services sur un
serveur, de manière industrielle !
La partie 4 de ce TP est un projet à rendre à <adlin@nemunai.re> au plus tard
le **mercredi 21 mars 2018 à 00 h 42 du matin**. Consultez la dernière section
de chaque partie pour plus d'information sur les éléments à rendre.
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
[me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96) faire
signer votre clef et n'hésitez pas à
[faire signer votre clef](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
\tableofcontents

View file

@ -57,9 +57,11 @@ Pour éditer (ou créer ...) la table de partitions d'un disque, vous pouvez
utiliser les utilitaires `fdisk`, `cfdisk`, `sfdisk`, `parted`, `gdisk`. Chacun utiliser les utilitaires `fdisk`, `cfdisk`, `sfdisk`, `parted`, `gdisk`. Chacun
de ses programmes prend en argument le disque à modifier : de ses programmes prend en argument le disque à modifier :
<div lang="en-US">
``` ```
cfdisk /dev/sda cfdisk /dev/sda
``` ```
</div>
Le TP ne se concentrant pas sur la phase de démarrage, vous pouvez ignorer les Le TP ne se concentrant pas sur la phase de démarrage, vous pouvez ignorer les
choix de type de tables, de partitions, leurs drapeaux, les étiquettes, etc. choix de type de tables, de partitions, leurs drapeaux, les étiquettes, etc.
@ -123,12 +125,14 @@ il va falloir indiquer dans le fichier `/etc/fstab` l'emplacement dans
l'arborescence où attacher la partition ainsi que quelques autres l'arborescence où attacher la partition ainsi que quelques autres
caractéristiques. caractéristiques.
<div lang="en-US">
``` ```
# <fs> <mountpoint> <type> <opts> <dump/pass> # <fs> <mountpoint> <type> <opts> <dump/pass>
/dev/sda1 / ext4 defaults 0 1 /dev/sda1 / ext4 defaults 0 1
/dev/sda2 none swap swap 0 0 /dev/sda2 none swap swap 0 0
none /tmp tmpfs defaults,nosuid,nodev,noexec 0 0 none /tmp tmpfs defaults,nosuid,nodev,noexec 0 0
``` ```
</div>
Notons que le montage des partitions est effectué par le système Notons que le montage des partitions est effectué par le système
d'initialisation (un simple appel à la commande `mount -a` ou équivalent). À d'initialisation (un simple appel à la commande `mount -a` ou équivalent). À
@ -232,9 +236,11 @@ distributions). Vous pouvez également définir des conditions plus précise en
**Super astuce !** votre terminal rit encore de vous, affichant `Permission **Super astuce !** votre terminal rit encore de vous, affichant `Permission
Denied` car vous avez oublié de préfixer votre commande par `sudo` ? essayez : Denied` car vous avez oublié de préfixer votre commande par `sudo` ? essayez :
<div lang="en-US">
``` ```
sudo !! sudo !!
``` ```
</div>
### Top confort dans son coquillage ### Top confort dans son coquillage

View file

@ -1,6 +1,24 @@
% Decent marging...
\usepackage[cm]{fullpage} \usepackage[cm]{fullpage}
\addto\captionsfrench{ % Indentation for all paragraph (even the first one) + ventilate
\renewcommand{\contentsname} \usepackage{indentfirst}
{Sommaire} \setlength{\parskip}{6pt plus 2pt minus 1pt}
}
% Avoid vertical space before/after itemize
\usepackage{enumitem}
\setlist{nosep}
% Use sans-serif font for section' titles
\usepackage{sectsty}
\allsectionsfont{\sffamily \bfseries}
% Use sans-serif font for title page
\usepackage{titling}
\renewcommand{\maketitlehooka}{\sffamily}
% Use monospaced font for URLs
\urlstyle{tt}
% In french, list item starts with dash, not bullet
\renewcommand\labelitemi{---}

View file

@ -1,16 +1,6 @@
include ../pandoc-opts.mk
SOURCES = tutorial.md what.md netfilter.md wks.md rendu.md SOURCES = tutorial.md what.md netfilter.md wks.md rendu.md
PANDOCOPTS = --latex-engine=xelatex \
--standalone \
--normalize \
--number-sections \
--smart \
-M lang=fr-FR \
-M fontsize=12pt \
-M papersize=a4paper \
-M mainfont="Linux Libertine O" \
-M monofont="FantasqueSansMono-Regular" \
-M sansfont="Linux Biolinum O" \
--include-in-header=../header.tex
all: tutorial.pdf all: tutorial.pdf

View file

@ -1,23 +1,22 @@
--- ---
title: Administration Linux avancée -- TP n^o^ 3 title: Administration Linux avancée -- TP n^o^ 3
subtitle: subtitle:
author: Pierre-Olivier *Nemunaire* Mercier author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
institute: EPITA institute: EPITA
date: Lundi 19 mars 2018 date: Vendredi 29 mars 2019
abstract: |
Durant ce troisième TP, nous allons faire un peu plus de réseau !
\vspace{1em}
Tous les éléments de ce TP (exercices et projet) sont à rendre à
<adlin@nemunai.re> au plus tard le dimanche 14 avril 2019 à 23
h 42. Consultez la dernière section de chaque partie pour plus d'information
sur les éléments à rendre.
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
[me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96)
faire signer votre clef et n'hésitez pas à [faire signer votre
clef](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
... ...
Durant ce troisième TP, nous allons faire un peu de réseau !
Tous les éléments de ce TP (exercices et projet) sont à rendre à
<adlin@nemunai.re> au plus tard le samedi 31 mars 2018 à 23 h 42. Consultez
la dernière section de chaque partie pour plus d'information sur les éléments à
rendre.
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
[me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96) faire
signer votre clef et n'hésitez pas à
[faire signer votre clef](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
\hypersetup{linkcolor=black}
\tableofcontents

16
tutorial/pandoc-opts.mk Normal file
View file

@ -0,0 +1,16 @@
PANDOCOPTS = --pdf-engine=xelatex \
--standalone \
--number-sections \
--toc \
-f markdown+smart \
-M fontsize=12pt \
-M papersize=a4paper \
-M mainfont="Linux Libertine O" \
-M monofont="FantasqueSansMono-Regular" \
-M sansfont="Linux Biolinum O" \
-M colorlinks=true \
-M linkcolor="black" \
-M urlcolor="ForestGreen" \
-M indent=true \
-V toc-title="Sommaire" \
--include-in-header=../../tutorial/header.tex