Slides reveal.js pour formation Evolix

This commit is contained in:
Gregory Colpart 2017-06-19 11:03:13 +02:00
parent 919e08c531
commit 0c9aaf0237
7 changed files with 1545 additions and 0 deletions

85
reveal/httpd.html Normal file
View file

@ -0,0 +1,85 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Formation Evolix : Services HTTP</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="../css/theme/beige.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( ../print-pdf/gi ) ? '../css/print/pdf.css' : '../css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="../lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>Formation Evolix</h1>
<h3>Services HTTP</h3>
</section>
https://wiki.evolix.org/HowtoApache
</div>
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: '../lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: '../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: '../plugin/zoom-js/zoom.js', async: true },
{ src: '../plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>

View file

@ -0,0 +1,124 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Formation Evolix : intro Unix / Linux / Logiciels Libres</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="../css/theme/beige.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( ../print-pdf/gi ) ? '../css/print/pdf.css' : '../css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="../lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>Formation Evolix</h1>
<h3>intro Unix / Linux / Logiciels Libres</h3>
</section>
<section>
<h2>UNIX</h2>
<ul>
<li>UNICS (UNiplexed Information and Computing Service) : BELL, AT&T (1969)</li>
<li>Ken Thompson</li>
<li>Dennis Ritchie</li>
</ul>
<img src="" border="0">
<p>Aujourd'hui, on compte une grande quantité d'OS dérivés d'UNIX:
AIX, Solaris, HP-UX, ... et plus récement Mac OS X</p>
</section>
<section>
<h2>Le début des Logiciels Libres</h2>
</section>
<section>
<h2>Les licences</h2>
<img src="../category.fr.png" border="0">
</section>
<section>
<h2>Logiciels Libres : les 4 libertés</h2>
<ul>
<li>Exécuter le programme, pour tous les usages</li>
<li>Étudier et adapter à vos besoins un programme</li>
<li>Redistribuer des copies, “aider votre voisin”</li>
<li>Améliorer et publier vos améliorations, pour en faire profiter tout le monde</li>
</ul>
</section>
<section>
<h2>Open Source : les 10 libertés</h2>
</section>
<section>
<h2>open source VS Open Source</h2>
</section>
<section>
<h2></h2>
</section>
</div>
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: '../lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: '../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: '../plugin/zoom-js/zoom.js', async: true },
{ src: '../plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>

279
reveal/linux.html Normal file
View file

@ -0,0 +1,279 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Formation Evolix : Linux et distributions</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="../css/theme/beige.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( ../print-pdf/gi ) ? '../css/print/pdf.css' : '../css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="../lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>Formation Evolix</h1>
<h3>Linux et distributions</h3>
</section>
<section>
<h2>Historique</h2>
<ul>
<li>1991 : Lancement du projet Linux par Linus Torvalds, coordination par Internet</li>
<li>1993 : Fiabilité de Linux déjà à la hauteur des Unix commerciaux</li>
<li>1994 : Reconnaissance de Linux par les membres du projet GNU et entraide</li>
</ul>
<img src="" border="0">
</section>
<section>
<pre>
Newsgroups: comp.os.minix
Date: 25 Aug 91 20:57:08 GMT
Subject: What would you like to see most in minix?
Summary: small poll for my new operating system
Hello everybody out there using minix -
I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready. I'd like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things).
I've currently ported bash(1.08) and gcc(1.40), and things seem to work.
This implies that I'll get something practical within a few months, and
I'd like to know what features most people would want. Any suggestions
are welcome, but I won't promise I'll implement them :-)
Linus (torvalds@kruuna.helsinki.fi)
PS. Yes - it's free of any minix code, and it has a multi-threaded fs.
It is NOT protable (uses 386 task switching etc), and it probably never
will support anything other than AT-harddisks, as that's all I have :-(.
</pre>
</section>
<section>
<h2>Versions</h2>
<ul>
<li>mars 1994 : version 1.0</li>
<li>juillet 1996 : version 2.0</li>
<li>janvier 1999 : version 2.2</li>
<li>janvier 2001 : version 2.4</li>
<li>décembre 2003 : version 2.6</li>
<li>juillet 2011 : version 3.0</li>
<li>avril 2015 : version 4.0</li>
<li>aujourd'hui : 4.11</li>
</ul>
</section>
<section>
<h2>Linux, juste un noyau</h2>
interface de programmation pour utiliser le matériel (clavier, écran, disque)
multi-taches et multi-utilisateurs
gestion du CPU, pile réseau, filesystems
monolitique + modulaire VS micro-noyau (Mach, Hurd)
</section>
<section>
<h2>TP</h2>
wget https://git.kernel.org/torvalds/t/linux-4.12-rc5.tar.gz
tar xvf linux-4.12-rc5.tar.gz
cd linux-4.12-rc5
apt install libqt4-dev
make xconfig
</section>
<section>
<h2>Un noyau de système d'exploitation</h2>
ce ne sont pas des commandes
ce ne sont pas des fichiers
ça ne s'utilise pas tout seul
il faut ajouter des logiciels (outils, services, etc.)
ne fait pas partie de Linux : cron, passwd, login, tar, mount, libc, coreutils
</section>
<section>
<h2>GNU/Linux</h2>
<p>Outils GNU :</p>
<ul>
<li>GCC : compilateur</li>
<li>glibc : librairie C (printf,malloc,open,etc.)</li>
<li>Bash : shell</li>
<li>GRUB : boot loader</li>
<li>coreutils : ls, cat, chmod, du, su, etc.</li>
</ul>
<p>Autres outils : OpenSSH, sudo, Vim, systemd</p>
</section>
<section>
<h2></h2>
</section>
<section>
<h2>Distributions GNU/Linux</h2>
<ul>
<li>Red Hat</li>
<li>CentOS</li>
<li>Debian</li>
<li>Ubuntu</li>
</ul>
</section>
<section>
<h2>Organisation des fichiers</h2>
Norme FHS
</section>
<section>
<h2>Red Hat</h2>
- Entreprise fondée en 1993 :
- Siège social à Raleigh (USA)
- Cotée en bourse, CA de 2500 M$
- bureaux à travers le monde
- 10000 employés
- Quatre centres de support dans le monde :
Amerique, Europe, Asie, Pacifique
- Un des plus gros contributeurs à la communauté du Libre
</section>
<section>
<h2>Red Hat</h2>
- Équipe :
parmi les développeurs,
développeurs du noyau Linux
mainteneurs de GCC
développeurs d'Apache
- Les versions :
­ Redhat version 9, plus supportée
­ Red Hat Entreprise/Advanced Server, obsolète
­ Redhat Desktop
­ Redhat Entreprise Linux 7 (RHEL)
- Dérivés : Fedora et CentOS
- Ansible, OpenStack, JBOSS, etc.
</section>
<section>
<h2>Red Hat</h2>
Système de packages RPM :
­ installation facile et rapide (pas de compilation)
­ gestion des dépendances
­ notoriété et abondance de dépôts RPM
­ bénéficie d'améliorations constantes
Voir www.rpm.org
</section>
<section>
<h2>CentOS</h2>
Community enterprise Operating System
utilisation uniquement des sources de RH
donc binary compatible avec RH
CentOS 7
</section>
<section>
<h2>Debian</h2>
Spécificités :
- Lancement par Ian Murdock en août 1993
- Basé sur un contrat social
- DFSG - Debian Free Software Guidelines
- Plusieurs milliers de développeurs Debian
ldapsearch -x -h db.debian.org -b dc=debian,dc=org | grep ^uid: | wc -l
2080
- Des dizaines de milliers de paquets “sources”
grep-dctrl -P '' -c /var/lib/apt/lists/*jessie*Sources
21019
- Debian 7 : sortie en 2013, support jusqu'en 2016 (support LTS jusqu'en 2018)
- Debian 8 : sortie en 2015, support jusqu'en 2018 (support LTS jusqu'en 2020)
- Debian 9 : sortie en 2017, support jusqu'en 2020 (support LTS jusqu'en 2022)
</section>
<section>
<h2>Ubuntu</h2>
Créé par Mark Shuttleworth, ancien-développeur Debian,
multi-millionnaire après avoir revendu l'entreprise Thawte
Développé par l'entreprise Canonical crée en 2004
Basée sur Debian
Versions LTS publiées tous les 2 ans (support 5 ans)
Versions publiées tous les 6 mois avec support limité
- version 16.04 LTS (Xenial Xerus59) publiée en avril 2016
- version 17.04 (Zesty Zapus) publiée en avril 2017
</section>
<section>
<h2></h2>
<ul>
<li></li>
<li></li>
</ul>
<p></p>
<img src="" border="0">
</section>
</div>
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: '../lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: '../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: '../plugin/zoom-js/zoom.js', async: true },
{ src: '../plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>

404
reveal/linux_install.html Normal file
View file

@ -0,0 +1,404 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Formation Evolix : installation Linux</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="../css/theme/beige.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( ../print-pdf/gi ) ? '../css/print/pdf.css' : '../css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="../lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>Formation Evolix</h1>
<h3>installation Linux</h3>
</section>
<section>
<h2>Méthode d'installation</h2>
<li>par CD/ROM ou clé USB (machine physique ou virtuelle)</li>
<li>par le réseau, via boot PXE+DHCP+TFTP</li>
<li>Image préinstallée par un hébergeur</li>
<li>Conteneur minimal (LXC/Docker)</li>
</section>
<section>
<h2>Compatibilité du matériel</h2>
enjeu principal : carte réseau et controleur disque/RAID
test avec Live-CD
Compatibilité du matériel
lspci -n sur http://kmuto.jp/debian/hcl/ plus à jour :(
Listes de diffusion
Recherche Google avec “site:lists.debian.org/debian-boot”
</section>
<section>
<h2>Choix pour un serveur</h2>
carte réseau : 1G ou 10G ?
CPU Intel Xeon : fréquence ? nombre de cores ? https://www.cpubenchmark.net/
Quantité de mémoire
Importance du stockage :
local ou distant (NFS, iSCSI)
Type : SATA, SAS, SSD ?
Performance lecture/écriture : Mo/s, IOPS
Gestion du cache
</section>
<section>
<h2>Focus sur le RAID</h2>
RAID0
RAID1
RAID5
RAID6
RAID10
RAID hardware ou logiciel
</section>
<section>
<h2>Focus sur le stockage</h2>
parted
</section>
<section>
<h2>Partitionnement</h2>
Partitionnement DOS limité à 2,2 T
Partitionnement GPT
Outils : fdisk, cfdisk, sfdisk, parted
/boot / /var /usr /tmp 2xswap /srv /home
systèmes de fichiers : ext3/ext4, reiserfs, xfs, btrfs
</section>
<section>
<h2>Focus sur RAID logiciel</h2>
</section>
<section>
<h2>Focus sur LVM</h2>
</section>
<section>
<h2>Réseau</h2>
Fichiers de paramètres :
Fichiers spécifiques /etc/resolv.conf, /etc/hosts
Configuration dynamique DHCP
(Dynamic Host Configuration Protocol)
Paramètres réseau sont automatiquement mis en place.
Configuration statique
Configuration manuelle des fichiers
Outils réseaux
(ifconfig, ping, route, ip, netstat, traceroute...)
</section>
<section>
<h2>Installation de logiciels</h2>
- Méthode classique de compilation des sources.
- Utilisation du système de packages
Les packages sont des binaires précompilés qui sont prêts à être installés de façon simple et rapide. Les dépendances sont gérées, ainsi que la mise à jour et la suppression des packages déjà installés (varie selon les distributions).
</section>
<section>
<h2>TP : installation Debian GNU/Linux</h2>
</section>
<section>
<h2>Choix de la version</h2>
Debian GNU/Linux « Sid » : actuelle version unstable
Debian GNU/Linux 10 (« Buster ») : actuelle version testing
Debian GNU/Linux 9 (« Stretch ») : actuelle version stable
Debian GNU/Linux 8 (« Jessie ») : actuelle version oldstable
Debian GNU/Linux 7 (« Wheezy ») : actuelle version oldoldstable
Debian GNU/Linux 6 (« Squeeze »)
Debian GNU/Linux 5 (« Lenny »)
Debian GNU/Linux 4 (« Etch »)
Debian GNU/Linux 3.1 (« Sarge »)
Debian GNU/Linux 3.0 (« Woody »)
Debian GNU/Linux 2.2 (« Potato »)
Debian GNU/Linux 2.1 (« Slink »)
Debian GNU/Linux 2.0 (« Hamm »)
</section>
<section>
<h2></h2>
boot sur CD/DVD ou USB
choix de la langue : anglais (en_US.UTF8)
réglage du clavier
réseau
partitionnement
choix des miroirs
mot de passe
choix de packages
installation GRUB
</section>
<section>
<h2>console de debug à l'installation</h2>
lspci | grep Eth
ip addr show
dmesg | grep sd
cat /proc/cpuinfo
</section>
<section>
<h2>Focus sur Vim</h2>
# apt install vim
# select-editor
# vi /etc/vim/vimrc
let g:skip_defaults_vim = 1
# vi ~/.vimrc
"musthave
syntax on
set background=dark
set nocompatible
"dev
set expandtab
set shiftwidth=4
set softtabstop=4
set tabstop=4
</section>
<section>
<h2>Vim basics</h2>
Mode "commandes" <-> Mode "insertion"
[Échap] <-> i
Mode "commandes"
----------------
:w enregistrer
:wq enregistrer et quitter
:q! quitter sans enregistrer
gg aller tout en haut
G aller tout en bas
$ aller en fin de ligne
/foo chercher "foo"
dd supprimer (ou couper) la ligne actuelle
yy copie la ligne actuelle
x supprimer (ou couper) le caractère courant
p coller après le curseur
P coller avant le curseur
v mode visuel pour couper ou copier facilement
rX remplace le caractère courant par X
u annule la dernière commande
Ctrl+r restaure la dernière commande
Passer en mode insertion
------------------------
i passer en mode insert avant le curseur
a passer en mode insert après le curseur
I passer en mode insert au début de la ligne
A passer en mode insert à la fin de la ligne
o sauter une ligne et passer en mode insert
</section>
<section>
# apt install locales
$ LANG=fr_FR.UTF8 /usr/bin/vimtutor
</section>
<section>
<h2>Focus sur dpkg / APT</h2>
- Utilitaire principal : dpkg
dpkg -l
dpkg --unpack
dpkg --configure
dpkg -i
dpkg -r
dpkg -P
dpkg -L
dpkg -S
dpkg -s
dpkg-reconfigure
- Gestion avancée de paquets : APT
(Advanced Package Tool)
Dépendances, mises à jour, conflits [Packages.gz]
</section>
<section>
- Sources de paquets : /etc/apt/sources.list
netselect / apt-cdrom / apt-config
- Interface pour APT : apt, apt-cache, apt-get, aptitude
apt update
apt upgrade
apt install paquet
apt remove paquet
apt purge paquet
apt-cache show / search / -n search / depends / rdepends / policy
etc.
</section>
<section>
apt -s install
apt-file
apt-show-versions
apt-listchanges
apt clean/autoclean
apt upgrade/full-upgrade
apt changelog
rmadison
apt-get check
apt source
apt build-dep
debuild -us -uc
</section>
<section>
# vim /etc/apt/sources.list
deb http://mirror.evolix.org/debian/ stretch main
deb http://security.debian.org/ stretch/updates main
deb http://mirror.evolix.org/debian/ stretch-updates main
deb http://mirror.evolix.org/debian/ stretch main
</section>
<section>
# dpkg-reconfigure -plow debconf
# vim /etc/apt/apt.conf.d/99custom
APT::Install-Recommends "false";
APT::Install-Suggests "false";
DPkg::Pre-Invoke { "mount -oremount,exec /tmp && mount -oremount,rw /usr || true"; };"
DPkg::Post-Invoke { "mount -oremount /tmp && mount -oremount /usr || true"; };"
</section>
<section>
# vim /etc/fstab
/dev/sda2 / ext4 defaults,errors=remount-ro 0 1
/dev/sda1 /boot ext4 defaults 0 2
/dev/sda3 /var ext4 defaults 0 2
/dev/sda5 /usr ext4 defaults,ro 0 2
/dev/sda6 /tmp ext4 defaults,noexec,nosuid,nodev 0 2
/dev/sda7 none swap sw 0 0
/dev/sda8 none swap sw 0 0
/dev/sda9 /home ext4 defaults,noexec,nosuid,nodev 0 2
tmpfs /var/tmp tmpfs defaults,noexec,nosuid,nodev 0 2
</section>
<section>
On installe Postfix :
# apt install postfix
On renvoie tous les alias vers root :
# getent passwd | cut -d":" -f1 | sed "s/$/: root/" > /etc/aliases
# vim /etc/aliases
# newaliases
</section>
<section>
Installons les outils de base :
# apt install ssh less mailx sudo munin htop iotop iftop
</section>
<section>
Mesure des performances disque
# time dd if=/dev/zero of=/home/32gb bs=1024k count=32768
# time dd if=/home/32gb of=/dev/null bs=1024k count=32768
# time rm /home/32gb
# apt install postgresql-contrib
# /usr/lib/postgresql/9.6/bin/pg_test_fsync
</section>
<section>
Mesure des performances réseau
# apt install iperf mtr-tiny
$ ping -4 google.fr
$ mtr -4 google.fr
$ iperf -c debit.k-net.fr
</section>
<section>
<h2>Comment choisir sa version de Linux ?</h2>
<ul>
<li>Versions logiciels fixes : Apache / PHP / MySQL / etc.</li>
<li>Version nue / panel (cpanel, plesk)</li>
<li>apt-get / yum install</li>
</ul>
</section>
<section>
<h2>Récapitulatif</h2>
Choix matériel
Choix version de Linux
Premières optimisations
Validation des performances
</section>
</div>
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: '../lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: '../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: '../plugin/zoom-js/zoom.js', async: true },
{ src: '../plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>

83
reveal/postgresql.html Normal file
View file

@ -0,0 +1,83 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Formation Evolix : PostgreSQL</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="../css/theme/beige.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( ../print-pdf/gi ) ? '../css/print/pdf.css' : '../css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="../lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>Formation Evolix</h1>
<h3>PostgreSQL</h3>
</section>
https://wiki.evolix.org/HowtoPostgreSQL
</div>
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: '../lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: '../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: '../plugin/zoom-js/zoom.js', async: true },
{ src: '../plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>

170
reveal/shell.html Normal file
View file

@ -0,0 +1,170 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Formation Evolix : SHell</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="../css/theme/beige.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( ../print-pdf/gi ) ? '../css/print/pdf.css' : '../css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="../lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>Formation Evolix</h1>
<h3>SHell</h3>
</section>
<section>
<h2>SHell : infos versions</h2>
<ul>
<li>uname -a</li>
<li>cat /etc/debian_version OU cat /etc/redhat-release</li>
<li>dpkg -l OU rpm -qa</li>
</ul>
</section>
<section>
<h2>Shell : infos matériel</h2>
<ul>
<li>df -h</li>
<li>dmidecode</li>
<li>dmesg</li>
<li>free</li>
<li>top / htop / iotop</li>
<li>iftop / netstat / iptables</li>
<li>/proc/mdstat / vgs / drbdadm</li>
</ul>
</section>
<section>
ps, kill, pstree
fg, bg
diff, patch
tar, dd
gzip/gunzip, bzip2/bunzip2, xz/unxz
mount/umount, man
mkfs, fsck, tune2fs
</section>
<section>
<h2>Survivre dans un Shell</h2>
<ul>
<li>cd, cp, mv, rm, touch</li>
<li>touch, mkdir, mktemp, ln</li>
<li>sort, wc, uniq, tr</li>
<li>grep, find, for, while, xargs</li>
<li>echo, cat, head, tail, read</li>
<li>if, test, exit, seq, while, for, case</li>
</ul>
</section>
alias/unalias
~/.profile
<section>
Commandes avancées
/bin/dash zsh
sed / awk
xargs
</section>
<section>
script BASH
http://www.tuteurs.ens.fr/unix/shell/
variables
VAR=foo
VAR=$RANDOM
VAR=`pwd`
arguments
> : change la sortie standard de la commande pour la placer dans un fichier.
< : change l'entrée standard de la commande pour la prendre dans un fichier.
| : branche la sortie standard de la commande de gauche sur l'entrée standard de la commande de droite.
>> : change la sortie standard pour l'ajouter à la fin d'un fichier existant.
|| : exécuter la commande suivante si la première a échoué.
&& : n'exécuter la commande suivante que si la première a réussi.
1>
2>
2>&1
echo $((1+1))
${i.%ext}
${i#/home/}
</section>
<section>
apt install screen tmux
</section>
</div>
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: '../lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: '../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: '../plugin/zoom-js/zoom.js', async: true },
{ src: '../plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>

400
reveal/sysadmin.html Normal file
View file

@ -0,0 +1,400 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Formation Evolix : administration système et réseau</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="../css/theme/beige.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( ../print-pdf/gi ) ? '../css/print/pdf.css' : '../css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="../lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>Formation Evolix</h1>
<h3>Administration système & réseau & sécurité</h3>
</section>
<section>
crontab
https://wiki.evolix.org/HowtoCron
</section>
ntpd
https://wiki.evolix.org/HowtoNTP
systemd
https://wiki.evolix.org/HowtoSystemd
Postfix
https://wiki.evolix.org/HowtoPostfix
syslog
Les journaux systèmes sont gérés par syslog, un protocole qui permet de gérer les messages système de façon centralisé. syslog est précisé dans la RFC 3164Il est utilisé sous la forme d'un daemon syslogd chargé de rassembler les messages envoyés par diverses applications (messages kernel, user, daemon, mail, etc.) triés par une facility : LOG_KERN, LOG_CRON, LOG_DAEMON, LOG_MAIL, LOG_AUTH, etc. et un certain niveau de severity : LOG_EMERG, LOG_ALERT, LOG_ERR, LOG_WARNING, etc. Les messages reçus sont répartis dans différents fichiers situés dans le répertoire /var/log/ ou d'autres façons (serveur syslog distant, terminal, etc.).
C'est le paquet sysklogd qui assure ce rôle, en incluant le daemon syslogd (et klogd pour intercepter les message du noyau Linux). La répartition des journaux est spécifiée dans le fichier /etc/rsyslog.conf. Le script d'initialisation est rsyslog, on relancera donc le service syslog (suite à un changement dans le fichier de configuration par exemple) ainsi :
# /etc/init.d/rsyslog restart
Voici quelques exemples de journaux à surveiller étroitement :
- les journaux situés dans les fichiers /var/log/auth.log permettent de voir toutes les tentatives de login, (l'adresse IP d'où la tentative est lancée, l'heure exacte, et le résultat).
- les journaux situés dans les fichiers /var/log/kern.log permettent de voir toutes les messages générés par le noyau (pour repérer les erreurs éventuelles)
- les journaux situés dans les fichiers /var/log/cron.log donnent des informations sur les scripts exécutés par la crontab
Les journaux logiciels sont des fichiers remplis directement par les applications (dans le cas où l'application utilise syslog, se reporter ci-dessus). On citera par exemple Apache, Horde ou encore MySQL.
Rotation des journaux
Le logiciel logrotate permet de gérer les journaux système et logiciel de façon précise et ordonnée. De façon quotidienne ou hebdomadaire, les journaux sont compressés et datés, avec d'éventuelles actions nécessaires (relance du service, génération de statistiques, etc.). Pour le détail, c'est le paquet logrotate qui contient des scripts lancés par la crontab du système et qui utilisent les fichiers dans le répertoire /etc/logrotate.d/.
Les journaux sont des fichiers qui contiennent des informations d'activité datée. Ils sont essentiels pour un serveur pour de nombreuses raisons : vérifier des actions passées, générer des statistiques, déboguer un programme. La vérification des actions passées est notamment importante en cas de problème (piratage, service défectueux). La justice oblige également à conserver certains journaux pendant une certaine durée. Un flou concerne ce qu'il faut réellement conserver (apparemment seules les informations d'entêtes mais pas le contenu en lui-même) et la durée (cela varie entre 3 mois, 1 an et 3 ans si l'on se base sur les lois françaises ou européennes). Des décrets d'application devraient éclaircir ces points dans les prochains mois.\\
~\\
Sous Debian, les journaux se trouvent généralement dans le répertoire \textit{/var/log}. On va distinguer les journaux systèmes et les journaux applicatifs. Les journaux systèmes sont gérés par le démon SYSLOG\footnote{\url{ftp://ftp.rfc-editor.org/in-notes/rfc3164.txt}}. Sa configuration se trouve dans le fichier \textit{syslog.conf}. Voici quelques ligne extraites de ce fichier~:
\begin{verbatim}
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
*.=debug;auth,authpriv.none;news.none;mail.none -/var/log/debug
*.emerg *
*.*;auth,authpriv.none /dev/tty8
\end{verbatim}
Voici les fichiers pincipaux générés par SYSLOG : \\
~\\
\begin{itemize}
\item[\textbf{auth.log :}] authentification système (login, su, getty)
\item[\textbf{daemon.log :}] relatif aux daemons
\item[\textbf{mail.* :}] messages relatifs aux mails
\item[\textbf{kern.log :}] messages générés par le noyau
\item[\textbf{user.log :}] message généré par des programmes utilisateur
\item[\textbf{debug :}] messages de bogues
\item[\textbf{messages :}] messages d'info
\item[\textbf{syslog :}] tous les messages
\end{itemize}
~\\
~\\
Les journaux applicatifs sont générés par chaque application. Ils sont souvent dans un répertoire du nom de l'application situé dans \textit{/var/log}.\\
~\\
log2mail
Surveiller les journaux avec log2mail
Pour surveiller précisement un fichier journal et recevoir des alertes par mail si certains termes apparaissent dans ce fichier, vous pouvez utiliser le logiciel log2mail. Sa configuration se déroule dans le fichier /etc/log2mail/config/default. Par exemple, si vous voulez préciser que vous voulez recevoir un mail dès que le terme fatal apparaît dans le fichier /var/log/mail.log, ajoutez ces lignes :
file = /var/log/mail.log
pattern = "fatal"
mailto = maintenance@example.com
template = /etc/log2mail/template.mail-fatal
Dans ce cas, on devra avoir un fichier /etc/log2mail/template.mail-fatal qui définit la structure du mail qui sera envoyé. Voici un exemple simple :
From: %f
To: %t
Subject: [LOG2MAIL] Erreur fatale pour mail.log
Nous avons reconnu le terme "%m" dans "%F" %n fois : %l
logcheck
https://wiki.evolix.org/HowtoLogcheck
fail2ban
https://wiki.evolix.org/HowtoFail2Ban
logrotate
L'un des points essentiels est la rotation des journaux, c'est-à-dire l'action de fermer le journal actuel (et éventuellement le compresser) et d'en ouvrir un autre.
Le programme principal est logrotate
Logrotate est exécuté tous les jours (cron.daily)
https://wiki.evolix.org/HowtoLogrotate
Note : mentionner l'existence de savelog. L'option "-d" de savelog permet d'utiliser la date lors de la rotation des journaux et de ne pas les effacer. On pourra donc ajouter ses propres règles dans les scripts cron pour faire une sauvegarde distante des journaux (éventuellement dans une base de données). Pour des serveurs dédiés (applications clés), on peut augmenter la fréquence des rotations et des sauvegardes distantes, mais également utiliser des scripts afin de détecter toutes alertes ou anomalies et les envoyer par courrier électronique ou même SMS.
intro Git
HowtoGit
Monitoring
Il existe de nombreux programmes évolués permettant de générer des courbes et statistiques.
Citons Nagios, Munin, etc.
Le plus connu d'entre eux est certainement Nagios qui permet de surveiller de nombreux services (SMTP, POP3, HTTP, NNTP, PING, etc.) mais également les ressources (charge processeur, utilisation des disques, etc.).
La mise en place de Nagios (ou d'un équivalent) pour un nombre de serveurs dépassant la dizaine est fortement conseillée.
Sécurité
réseau / iptables
Couche physique : Ethernet
(adresses MAC)
Couche réseau : IPv4
(adressage, HostID, NetID, Masque,
Brodcast, protocole ARP, ICMP)
Couche transport : TCP, UDP
(notion de ports, mode connecté)
Couche application : HTTP, SMTP, DNS, etc.
intro ansible
ssh
sauvegardes
Gestion des droits
Sous les systèmes de type Unix ou Linux, il existe plusieurs types de fichiers: les fichiers, les répertoires, les liens symboliques, les fichiers-périphériques.
Un fichier appartient à un utilisateur (en fait un numéro d'utilisateur) et à un groupe (en fait un numéro de groupe).
Les 3 droits fondamentaux sont la lecture, l'écriture et l'éxecution.
Pour un fichier, ces 3 droits sont définis pour 3 catégories: l'utilisateur, le groupe et le "reste du monde". Pour chacune de ces catégories: on note les droits sous la forme rwx.
[s:sst] u:rwx g:rwx o:rwx
Commandes utiles/essentielles :
- ls -l, stat, chmod, chown, chgrp
- su, newgrp, login, who, w, w.procps
$ chmod <catégorie>+<nouveau_droit> fichier
$ chmod <nouveaux_droits> fichier
Droits pour un répertoire :
r = lister, x = traverser, w = écrire (et même effacer !!)
Droits spéciaux :
- Exécutables setuid ou setgid
- Répertoire setgid ou stickybit
Notation décimale :
777 = ?
700 = ?
600 = ?
644 = ?
755 = ?
775 = ?
701 = ?
umask :
- Pour gérer droit niveau utilisateurs : commande umask
Fixé dans le fichier profile ou bashrc (local ou général...)
NFS
DRBD
LVM
Virtualisation
Conteneur
evolinux
auth
Historiquement sous Unix, l'authentification est gérée par une liste des utilisateurs avec les mots de passe chiffrés accessible à tous, à savoir le fameux fichier /etc/passwd accessible en lecture et la commande passwd « set-uid root »
- Authentification shadow recommandé
Le mot de passe chiffré est dans le fichier /etc/shadow inaccessible en lecture. Commande pour activer/désactiver l'authentification shadow :
# shadowconfig on/off
- Groupes UNIX :
Les groupes d'un système sont dans le fichier /etc/group
Programmes de gestion des utilisateurs :
Utilitaires basiques : useradd, groupadd, userdel, groupdel, usermod, groupmod, chsh, chfn (paquet passwd sous Debian)
Utilitaires convivaux : adduser, addgroup, deluser et delgroup (paquet adduser sous Debian) avec valeurs par défaut dans le fichier /etc/adduser.conf :
« Profil » pour un utilisateur créé :
Il se trouve dans le répertoire /etc/skel/
Les utilisateurs sont identifiés par leur nom de compte et par leur appartenance à un groupe par défaut(informations dans /etc/passwd). En plus, les utilisateurs peuvent appartenir à d'autres groupes (informations /etc/group).
jdoe@serveur:~$ whoami
jdoe
jdoe@serveur:~$ groups
jdoe dialout cdrom floppy audio video plugdev
jdoe@serveur:~$ id
uid=1000(jdoe) gid=1000(jdoe) groupes=20(dialout),24(cdrom),25(floppy),29(audio),44(video),46(plugdev),1000(jdoe)
jdoe@serveur:~$
Restriction au niveau des procédures de login :
Fichier /etc/login.defs :
FAIL_DELAY 10 \ delai minimum entre deux tentatives de login
FAILLOG_ENAB yes \ journaliser les tentatives ratées
LOG_UNKFAIL_ENAB yes \ retenir les identifiants iconnus essayés
LOG_OK_LOGINS yes \ retenir les tentatives réussies
LOGIN_TIMEOUT 60 \ delai maximim pour authentification
CHFN_RESTRICT rwh \ restriction pour la commande chfn
Complété par... Linux-PAM (Pluggable Authentication Modules)
Le fichier /etc/shadow contient les informations sécurisées, notamment la plus sensible : le mot de passe, mais également des paramètres d'expiration. Voir la commande vipw -s
foo:$1$mYploS2J$uSouKZPBjUF6D094HPgGj/:13853:0:99999:7:::
· nom de connexion de l´utilisateur (« login »)
· mot de passe chiffré
· nombre de jours, comptés à partir du 1er janvier 1970,
depuis le dernier changement de mot de passe
· nombre de jours à attendre avant de pouvoir changer le mot de passe
· nombre de jours après lesquels le mot de passe doit être changé
· nombre de jours avant la fin de validité du mot de passe et pendant
lesquels l´utilisateur est averti
· nombre de jours après la fin de validité provoquant la désactivation du
compte
· nombre de jours, comptés à partir du 1er janvier 1970, depuis que le
compte est désactivé
· champ réservé
Politique de gestion des mots de passe
- Mot de passe aléatoire ou quasi-aléatoire
- Trace écrite bannie
- Empêcher mot de passe trop simple pour les utilisateurs: librairie cracklib
- Programme de génération de mot de passe:
otp, apg, makepasswd, pwgen
- Programme pour cracker les mots de passe:
John the Ripper
Qui est root ?
- UID=0
- su, su -, su -c
sudo
- Droits délégués (administration partagée, utilisation de scripts, etc.)
- Éditer les droits : commande visudo
- sudo -u, sudo sh -c,
# apt install sudo
# visudo
jdoe ALL = ALL
jdoe ALL = NOPASSWD: ALL
jdoe ALL = /usr/sbin/tcpdump
jdoe ALL = (foo) /bin/kill
jdoe ALL = (ALL) sudoedit /etc/hosts
sudo -l
- Le système de gestion des utilisateurs diffère du système d'authentification des utilisateurs
- Utilisation des UID, GID (pas de réelle nécessité d'avoir une entrée dans /etc/password !!)
- Correspondances UID<->login, GID<->group faites avec la bibliothèque libnss (Name Services Switch). C'est également le cas des noms de services, protocoles, machines (DNS). On peut d'ailleurs voir cela comme un DNS pour les UID/GID.
Voir le fichier /etc/nsswitch.conf :
passwd: compat
group: compat
shadow: compat
hosts: files dns
PAM
Mode de fonctionnement très modulaire rendant transparent à l'application l'utilisation de tel ou tel système d'authentification.
Des modules PAM existent pour NIS, LDAP, Kerberos, rendant ainsi les trois systèmes d'authentification interchangeables sans que cela nécessite une reconfiguration des logiciels en eux-même ou encore une recompilation des services.
- Répertoire des fichiers de configuration:
/etc/pam.d/
- Comportement par défaut:
/etc/pam.d/other.
- Syntaxe des fichiers
"type" "niveau" "module" "arguments"
- /etc/security/access.conf permet de gérer les permissions de login (si activé dans PAM)
- /etc/security/limits.conf permet d'imposer des limites diverses sur les groupes ou les identifiants
Syntaxe des fichiers
"type" "niveau" "module" "arguments"
"type" peut être :
auth : authentification
account : vérification des types de services autorisés
session : tâches à effectuer avant/après l'accès
password : mécanismes d'authentification
"niveau" peut être :
required : le succès à cette étape est nécessaire
requisite : le succès est nécessaire et l'accès est refusé en cas d'erreur
sufficient : le succès à cette étape suffit
optional : l'accès pourra etre refusé en fonction d'autres paramètres
Exemple /etc/pam.d/login :
# Authenticate the user
auth required pam_unix.so
# Ensure users account and password are still active
account required pam_unix.so
# Change the users password, but at first check the strength
# with pam_cracklib(8)
password required pam_cracklib.so retry=3 minlen=6 difok=3
password required pam_unix.so use_authtok nullok md5
session required pam_unix.so
ACL/QUOTA
TODO
</div>
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: '../lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: '../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: '../plugin/zoom-js/zoom.js', async: true },
{ src: '../plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>