\documentclass[french]{beamer}

\usepackage[french]{babel}     %% on parle français
\usepackage[utf8]{inputenc}    %% en utf 8
\usetheme{Warsaw}              %% un thème de transparent

%% les méta-données de la présentation :
\title{OpenVZ sur Debian GNU/Linux 5.0 (Lenny)}
\author{}
\institute{Agence universitaire de la Francophonie}
\date{\today}

%% et on commence !

\begin{document}

\begin{frame}
  \titlepage   %% le premier transparent (frame) est la page de titre
\end{frame}

\begin{frame}
  \frametitle{Plan}
  \tableofcontents   %% second frame : la table des matières, qui présente les sections
\end{frame}

\section{Installation de l'hôte}   %% une première partie (section)
\frame{\tableofcontents[current]}

\begin{frame} 
  \frametitle{Partitionnement : LVM is your friend}
  \begin{block}{Proposition de partitionnement}
    \begin{itemize}
      \item \texttt{/} 1Go sur partition "classique"
      \item \textit{swap} sur partition "classique"
      \item \texttt{/var} 2Go sur volume logique (LVM)
      \item \texttt{/var/lib/vz} 5Go sur volume logique (LVM)
     \end{itemize}
     Ce n'est qu'une proposition... Il n'y a jamais de partitionnement "à tous les coups on gagne"
\end{block}
\end{frame}

\begin{frame}
  \frametitle{Sources} 
  \begin{block}{Classiques}
	\texttt{deb http://miroir.proche/debian lenny main} \\
	\texttt{deb http://security.debian.org/ lenny/updates main} \\
	\texttt{deb http://volatile.debian.org/debian-volatile lenny/volatile main}
  \end{block}
  \begin{block}{Spécifique pour un "vzctl" plus moderne (CT et bridge)}
	\texttt{deb http://debian.systs.org/debian lenny openvz} \\
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{Et c'est parti !}
  \begin{block}{Installation noyau patché et outils userland}
    \begin{itemize}
      \item \texttt{aptitude install linux-image-openvz-686}
      \item -686 : quelque soit le processeur (Intel, AMD, etc...)
      \item installe également \texttt{vzctl} par dépendance, depuis \textit{debian.systs.org}\footnote{la version vzctl proposée par \textit{systs} utilise le vocable "CT" (au lieu de l'ancien VE) et intègre la gestion des bridges, entre autres améliorations}
     \end{itemize}
  \end{block}
  \begin{block}{... et on passe en VZ !}
	\texttt{reboot} ... au démarrage, on vérifie que le choix du noyau openvz est bien premier listé sur le menu du démarreur \textit{grub}
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{Recherche de templates}
  \begin{block}{Les templates}
    \begin{itemize}
      \item fichiers \texttt{.tar.gz} à placer dans \texttt{/var/lib/vz/templates/cache}
      \item source : \url{http://download.openvz.org/template/}
      \item mais pour créer un modèle Debian, \texttt{debootstrap} est très simple à utiliser
    \end{itemize}
  \end{block}
\end{frame}

\section{«LVMisation»}
\frame{\tableofcontents[current]}

\begin{frame}
  \frametitle{LVMisation}
  \texttt{vzctl create} ne sait pas créer une machine dans un répertoire existant : on va créer la machine puis la déplacer dans une partition
  \begin{block}{LVMisation d'un CT}
    \begin{itemize}
      \item \texttt{vzctl create \textit{nnn} --ostemplate ...}
      \item \texttt{cd /var/lib/vz/private/ ; mv \textit{nnn} \textit{nnn}.orig}
      \item \texttt{lvcreate -L 2G -n machine-root vg0} \\
            \texttt{mkfs.ext3 /dev/vg0/machine-root}
      \item ajout dans le fstab pour montage sur \texttt{/var/lib/vz/private/\textit{nnn}}
      \item \texttt{mkdir /var/lib/vz/private/\textit{nnn} ; mount -a}
      \item \texttt{cd /var/lib/vz/private/ ; mv \textit{nnn}.orig/* \textit{nnn}/}
    \end{itemize}
  \end{block}
  Ouf... 
\end{frame}

\begin{frame}
  \frametitle{Sous-partitions en LVM (1/2)}
  \begin{block}{Sous-partitions LVM : exemple d'un \texttt{/var}}
    \begin{itemize}
      \item {\small préliminaire : CT stoppé}
      \item \texttt{lvcreate -L 5G -n machine-var vg0} \\
      \texttt{mkfs.ext3 /dev/vg0/machine-var}
      \item puis déplacement des données vers cette partition
    \begin{itemize}
      \item \texttt{mount /dev/vg0/machine-var /mnt}
      \item \texttt{mv private/\textit{nnn}/var/* /mnt}
      \item \texttt{umount /mnt}
    \end{itemize}
      \item très utile : ajout dans le fstab pour check au démarrage (point de montage \textit{none}, options \textit{noauto}, pass 2)
    \end{itemize}
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{Sous-partitions (2/2) : script de mount}
 \begin{block}{Script \texttt{/etc/vz/conf/\textit{nnn}.mount}}{\small
	\texttt{\#!/bin/sh} \\
	\texttt{mount -n /dev/vg0/machine-var /var/lib/vz/root/nnn/var}
}\footnote{Attention à ne pas oublier l'option \texttt{-n} du mount, elle a son importance pour éviter des soucis de démontage (\textit{umount}) lorsqu'on arrête le container}
 \end{block}
 %% le script umount n'est pas nécessaire avec des mount -n ! youpi !
 % \begin{block}{Script \texttt{/etc/vz/conf/\textit{nnn}.umount}}{\small
%	\texttt{\#!/bin/sh} \\
%	\texttt{umount /dev/vg0/machine-var || /bin/true}\footnote{l'ajout de \texttt{|| /bin/true} est nécessaire pour que le script ne puisse jamais faire échouer l'arrêt du CT}
%}\footnote{l'option \texttt{-n} de mount dans le script \texttt{\textit{nnn}.mount} permettrer d'éviter un script \texttt{\textit{nnn}.umount}. A valider.}
% \end{block}
 Et ne pas oublier de rendre le script exécutable : \\ \texttt{chmod +x \textit{nnn}.mount}
\end{frame}

\section{Réseautique}  
\frame{\tableofcontents[current]}

\begin{frame} 
  \frametitle{Réseautique classique}
  \begin{block}{Réseautique «classique»}
      \texttt{vzctl set \textit{nnn} --ipadd ...} : donne une adresse IP au container \textit{nnn}
  \end{block}
  \begin{block}{Conséquence sur l'hôte}
    \begin{itemize}
      \item l'hôte est une passerelle
      \item il a une adresse IP vers «Internet»
      \item permettre le \textit{forward} IP : \\ \texttt{echo 1 > /proc/sys/net/ipv4/ip\_forward} \\
        et/ou \texttt{net.ipv4.ip\_forward=1} dans \texttt{/etc/sysctl.conf} (Debian)
      \item si nécessaire, SNAT (voire MASQUERADE) via \textit{netfilter}
      \item dans l'autre sens : DNAT si les CT doivent offrir des services «directement»
    \end{itemize}
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{Réseau en bridge (1/2)}
  \begin{block}{Activation de la gestion bridge (\texttt{vzctl >= 3.0.23})}
	Création d'un fichier \texttt{/etc/vz/vznet.conf} avec cette seule ligne : \\
	\texttt{  EXTERNAL\_SCRIPT=/usr/sbin/vznetaddbr}
  \end{block}
  \begin{block}{Création d'un bridge sur l'hôte}
	\texttt{\# dans /etc/network/interface sur l'hôte} \\
	\texttt{auto vz0} \\
	\texttt{  iface vz0 inet manual} \\
	\texttt{  bridge\_ports eth0}
  \end{block}
  Note : pour avoir une IP sur l'hôte, il faut l'attribuer à l'interface bridge (\texttt{vz0} dans l'exemple)
\end{frame}

\begin{frame}
  \frametitle{Réseau en bridge (2/2)}
  \begin{block}{Configuration d'un CT}{\small
      \texttt{vzctl set 101 --netif\_add} \\ 
      \texttt{ "eth0,00\string:E1\string:00\string:00\string:10\string:1A,veth101.1,00\string:E1\string:00\string:00\string:10\string:1B,vz0"} \\
      \texttt{ --save}\footnote{je préfère faire l'opération sur un CT arrêté, et vérifier le fichier \texttt{/etc/vz/conf/\textit{nnn}.conf} créé avant de faire un start}
  }\end{block}

  Une fois le CT démarré, il dispose d'une interface \textit{eth0} classique, connectée au même réseau Ethernet que l'interface de l'hôte reliée au bridge.
\end{frame}


\end{document}

