\documentclass{beamer}

\usetheme{Frankfurt}
%\usetheme{Darmstadt}
% preferred themes: Darmstadt Frankfurt Warsaw
% themes: Darmstadt Warsaw Ilmenau JuanLesPins Luebeck Madrid Malmoe Marburg Pittsburgh Rochester Singapore
% \usefonttheme[onlylarge]{structuresmallcapsserif}
\usefonttheme[onlylarge]{structurebold}

\useoutertheme{smoothbars}
% outer themes: default infolines miniframes shadow sidebar smoothbars smoothtree split 

\setbeamerfont*{frametitle}{size=\normalsize,series=\bfseries}
\setbeamertemplate{navigation symbols}{}
\usecolortheme{orchid}
% \usecolortheme{crane}
% colorthemes: crane wolverine albatross orchid rose beaver dolphin dove seahorse

% \usepackage{beamerthemesplit}
\usepackage[english]{babel}
% \usepackage{graphics}
\usepackage{graphicx}
% \usepackage[rflt]{floatflt}
\usepackage{picinpar}
\usepackage{wrapfig}
\usepackage{hyperref}

% \usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage{CJKutf8}
\usepackage[T1]{fontenc}
\usepackage{verbatim}

% we want the Unicode font for normal text also
\DeclareFontFamily{T1}{song}{}
\DeclareFontShape{T1}{song}{m}{n}{<-> cyberbit00}{}
\renewcommand\rmdefault{song}

\usepackage{tikz}
\usetikzlibrary{arrows}
\tikzstyle{block}=[draw opacity=0.7,line width=1.4cm]

\title{Using cobbler in a not-so-small environment}
\author{Christian Horn / \texttt{chorn@fluxcoil.net}}

% \date{\today}
\date{}

\begin{document}

\frame{
  \titlepage 
  \begin{center}
  \includegraphics[width=0.5\linewidth]{pics/Logo_OSDC2010_500x122.eps}
  \end{center}

%  \centering
%  \tiny{ 
%    This file is licensed under the Creative Commons Attribution-ShareAlike License\\
%    To view a copy of this license, visit \url{http://creativecommons.org/licenses/by-sa/3.0}
%  }
  \begin{flushright}\tiny{v1.77}\end{flushright} 
}
\frame{
	\frametitle{Outline}
	\tableofcontents[hideallsubsections]
}

% todo maybe
% - For whom does cobbler make sense? For whom not? rhel/centos sles debian windows
% - picture: code reuse w/ snippets used from multiple templates

%\usebackgroundtemplate{
%  \includegraphics[width=\paperwidth,height=\paperheight]{tokyo_imperial_palace_1024x768_white3.eps}
%}

\begin{CJK}{UTF8}{song}
% \logo{\includegraphics[width=2.5cm]{pics/Logo_OSDC2010_500x122.eps}}
\logo{\includegraphics[width=3cm]{pics/Logo_OSDC2010_500x122.eps}}

%\section{whoami}
%\subsection{whoami}
\begin{frame}
  \frametitle{...Christian Horn?}
  \begin{itemize}
    \item OpenSource enthusiast, Linux Engineer, Sysadmin
%    \item current main topics cobbler, kerberos, ldap, kvm
%    \item Japanese learning, cycling, reading
    \item 日本語を習う, cycling, reading
    \item first computer was a KC85/3 build in my hometown Muehlhausen
    \item RHCE in 2002, RHCA in 2009
    \item playing with all bsd/linux, mostly redhat/suse at work, debian on private boxes
  \end{itemize}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{cobbler-basics}
\subsection{What is cobbler?}
\begin{frame}
  \frametitle{Basic steps of networkbased linuxinstallation}
  \centering
  \vspace{2cm}
  \includegraphics[width=\linewidth]{pics/basics_networkdeployment.eps}
\end{frame}
\begin{frame}
  \frametitle{Whats sysadmins usual workflow for this?}
  \begin{itemize}
    \item find out new servers mac, edit /etc/dhcpd.conf
    \item create new file in pxeboot-dir for new box
    \item copy some template to new ks.cfg
    \item customize ks.cfg, config hostname/packages etc.
    \item restart dhcpd, restart new server
    \item (find out the errors you made above)
    \item watch new box installing linux
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Whats cobbler anyway?}
  \begin{exampleblock}{Cobbler is..}
    A tool to simplify all aspects around deployment of operating
    systems.
  \end{exampleblock}
  \begin{exampleblock}{Our new workflow using cobbler:}
    \begin{itemize}
      \item find out new servers mac
      \item tell cobbler about new server, ip/hostname/whatever
      \item (have cobbler taking care of syntaxchecking your input,
        pxeboot file, customizing ks.cfg, restarting dhcpd etc. )
      \item watch new box installing linux
    \end{itemize}
  \end{exampleblock}
\end{frame}
\begin{frame}[fragile]
  \frametitle{Most important cobbler commands..}
  \begin{exampleblock}{Introducing the system to cobbler *}
    \begin{verbatim}
     # telling cobbler about the system
     cobbler system add \
        --name=sakura \     
        --profile=rhel5u5-x86_64 \ 
        --mac=00:0c:29:fd:b2:e8 \  
        --ip=10.0.22.13 \          
        --hostname=sakura.dom.ain
     # restarting dhcpd etc.
     cobbler sync
    \end{verbatim}
  \end{exampleblock}
  * webgui also exists
\end{frame}
\subsection{cobbler terms}
\begin{frame}
  \frametitle{cobbler glossary}
  \begin{exampleblock}{the cobbler distro}
    Describes a linux-distro, where the kernel is located and http-url for deployment.
  \end{exampleblock}
  \begin{exampleblock}{the cobbler profile}
    Contains basic descriptions how to deploy a system, which kickstart-template to use etc.
  \end{exampleblock}
  \begin{exampleblock}{the cobbler system}
    Describes everything specific to the system, ip/mac etc.
  \end{exampleblock}
\end{frame}
\subsection{How these terms play together..}
\begin{frame}
  \frametitle{How these terms play together..}
  \centering
  \includegraphics[width=9cm]{pics/basics_distro_profile_system.eps}
\end{frame}
\subsection{Cookbook for the deployment instructions}
\begin{frame}
  \frametitle{What cobbler does under the hood..}
  \begin{enumerate}
    \item take a template ks.cfg
    \item '\#include' other codeparts, snippets in cobbler speak
    \item have cheetah parse it: exchange the variables there with values from the
      distro/profile/system objects
    \item result is handed over to to-be-deployed-box
    \item watch deployment of the new box
  \end{enumerate}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{details of our setup}
\subsection{Why we started to looking for something new..}
\begin{frame}
  \frametitle{Why we started looking for something new..}
  \begin{itemize}
    \item increasing number of linux-deployments
    \item several adminteams doing their own deployments, making own experiences
      => lets implement reasonable defaults
    \item skills of admins span a wide range
    \item increasing number of rules for deployment, this asks for standardization
    \item engineering-team providing support wants to have defined environments
      when asked for advise, i.e. debugtools installed
  \end{itemize}
\end{frame}
\subsection{the choices}
\begin{frame}
  \frametitle{Possible solutions}
  \begin{itemize}
    \item colds - internal scripts originating from autoyast
    \item rh satellite - focused on updating/maintaining servers
    \item cobbler - open project targeting linux deployments
    \item fai - next good thing after cobbler, implementing for debian
      what kickstart/autoyast already provide
    \item writing something new - we do not suffer from NIH (mostly)
  \end{itemize}
\end{frame}
\subsection{comparison of relevant criteria}
\begin{frame}
  \frametitle{comparison}
  \begin{center}
  \begin{tabular}{ l | c | c | c | c }
                        & colds & satellite & cobbler & fai \\ \hline
    initial costs       &       &   -- --   &         &     \\ \hline
    commercial support  &  --   &    ++     &         &  +  \\ \hline
    community support   & -- -- &    +      &   ++    &  ++ \\ \hline
    sles deployments    &   +   &           &         &     \\ \hline
    rhel deployments    &   +   &    ++     &   ++    &     \\
  \end{tabular}
  \end{center}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{requirement: work reliably and in many places}
\begin{frame}
  \frametitle{requirement: wide area focus}
  \begin{itemize}
    \item perform linux-deployments in locations all over the company -
      keeping wan-traffic and time for a deployment down
    \item PXE-boot usually restricted to single datacenters,
      work around this
    \item deployments should be done in easy and generic way; servers on
      datacenter as well as virtual machines on the laptop for testging
      are desired
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{solution: multiple servers}
  \centering
  \includegraphics[width=\linewidth]{pics/oursetup_masterslave.eps}
\end{frame}
\begin{frame}
  \frametitle{protocols used for master<->slave datatransfer}
  \begin{itemize}
    \item cobbler-sync not used: its all-or-nothing
    \item transfer of distros (rhel5, sles11, fedora13 etc.):\\
      cobbler-slaves pull via rsync from master what they need
    \item transfer of snippets: low volume, high changerate,
      distinguish stable vs. head => subversion in use for this
    \item possible room for improvement: git. Could enable simple
      pulling of sysadmins additions from slaves to the master; could
      also enable clients to directly pull data from slaves
  \end{itemize}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
  \frametitle{requirement: Still deploy if PXE not possible}
  \begin{itemize}
    \item 'cobbler buildiso' creates a cd.iso the cobbler-client can boot from.
      Kernel boots, starts kickstart, continues as with pure PXE-install
    \item alternative: iso booted, real kernel fetched via http and
      started via kexec
    \item iso-boot via remote-control-board or optical drive of server
    \item upcoming: NICs with gpxe appearing
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Whats running on the cobbler-slaves?}
  \begin{itemize}
    \item RedHat rhel5/Centos
    \item basic services: httpd, dhcp, tftpd via xinetd
    \item cobblerd
    \item named delivering the local zone managed by cobbler
    \item virtualization for easy testing of deployments in VMs
      (KVM on some workplaces, vmware-server on the other cobbler-slaves)
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Whats cobbler doing for us?}
  \begin{itemize}
    \item dhcp/pxe management, preparing instructions for deployments of
      rhel/suse sles/fedora
    \item maintain dns-zones
    \item configure network-interfaces of cobbler-clients
    \item deployment \& configuration of software: backup, monitoring clients etc.
    \item hookup of the cobbler-client to ldap for authentication/authorization
    \item strip services down, do hardening
  \end{itemize}
\end{frame}
\begin{frame}[fragile]
  \frametitle{Challenging areas: SuSE \& cobbler}
  \begin{itemize}
    \item cobbler/cheetah handle autoyast xml-files fine
    \item detailed network-configuration via autoyast doesnt work as of sles11
    \item code should be shared among rhel \& sles deployments but simple
      including of snippets in autoyast.xml doesnt work because xmlish
      header/footer required
  \end{itemize}
  \begin{exampleblock}{our solution}
    \begin{verbatim}
#set global $wrappedscript = 'post_config_ntpd'
$SNIPPET('sles/post_sles_scriptwrapper')
    \end{verbatim}
  \end{exampleblock}
  \centering
      This and our other sles-snippets are on the net.
\end{frame}
\begin{frame}[fragile]
  \frametitle{more realistic host-adding..}
%  \begin{exampleblock}{Introducing the system to cobbler}
  \footnotesize
    \begin{verbatim}
cobbler system add --name=chhorn_rhel5 \
  --profile=rhel5u5_serv-x86_64 \
  --mac=00:0c:29:fd:b2:e8 \
  --ip=10.0.22.13 --subnet=255.255.255.0 --static=1 \
  --hostname=rhel5.dom.ain \
  --dns-name=rhel5.isos3.cobbler \
  --ksmeta='cProxyPW=asdfgh IDNumber=ID1234 noprelink \
    defaultServerList=12.32.34.4#10.2.3.11 \
    defaultSearchBase=dc=as,dc=lx,dc=stu,dc=com \
    BootGateway=10.0.22.1 MonitorSystemID=S0123 \
    backup=hibacknetbackup avmon=nagios packagesel=tiny'
    \end{verbatim}
%  \end{exampleblock}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{infrastructure}
\subsection{surrounding infrastructure}
\begin{frame}
  \frametitle{surrounding infrastructure: docs}
  \vspace{-3cm}
  \begin{wrapfigure}{r}{5cm}
    \includegraphics[width=4.5cm]{pics/infra_dokuwiki_small0.eps}
  \end{wrapfigure}
  \vspace{2cm}
  documentation: 
       \begin{itemize}
        \item how to setup new cobbler-slaves, how to do deployments
        \item done with dokuwiki/php/apache
        \item and more static docs in a repo with html/pdf generator
      \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{infrastructure: availability monitoring}
  \vspace{-3cm}
  \begin{wrapfigure}{r}{5cm}
    \includegraphics[width=6cm]{pics/infra_nagvis2.eps}
  \end{wrapfigure}
  \vspace{2cm}
  monitoring:
      \begin{itemize}
        \item we want to detect full disk, dying raid, killed httpd etc.
        \item ldap containing data of the cobbler-slaves
        \item snmpd running on cobbler-slaves
        \item icinga/nagvis polling the slaves, icinga-configfiles
          generated from the ldap-db
      \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{infrastructure: performance monitoring}
  \vspace{-3cm}
  \begin{wrapfigure}{r}{5cm}
    \includegraphics[width=4cm]{pics/infra_permon3.eps}
  \end{wrapfigure}
  \vspace{2cm}
  performance:
      \begin{itemize}
        \item to see stressed slaves
        \item collected with some perl/net::snmp/rrdtool 
        \item delivered as cgi by apache
      \end{itemize}
  issue tracker:
      \begin{itemize}
        \item handle requests for enhancements
          and bugs
        \item a trac does this currently
      \end{itemize}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{community}
\subsection{interacting}
\begin{frame}
  \frametitle{community interaction}
  \begin{itemize}
    \item great community around cobbler, RedHat paying coders (got bit
      quiet on ML thou since Michael DeHaan left)
    \item since we were among first to deploy SLES related snippets 
      were published
    \item cobbler is part of satellite as of 5.3
    \item part of spacewalk => community grows
  \end{itemize}
\end{frame}
\section{cobblers/our future}
\subsection{upcoming cobbler topics}
\begin{frame}
  \frametitle{upcoming cobbler topics}
  \begin{itemize}
    \item improving deployment of virtual systems
    \item improvement of !rh-distros like debian and suse
    \item remote-management of cobbler-servers via an api
    \item cobbler doing all of the server-touching like resetting via RSB etc.
    \item deployments of Mac (!PXE but different booting)
    \item already doing image-based deployments, improving also scripted win-deployments
  \end{itemize}
\end{frame}
\subsection{our todo}
\begin{frame}
  \frametitle{todolist}
  \begin{exampleblock}{constantly going on}
    \begin{itemize}
      \item training sysadmins
      \item fixing bugs, scripting new features
      \item preparing new distros
    \end{itemize}
  \end{exampleblock}
  \begin{exampleblock}{our todolist}
    \begin{itemize}
      \item getting each system first into ldap, filling cobbler from there
      \item this as base to use puppet
      \item maybe: profile 'cobbler-slave'
      \item maybe: script openvpn tunnelendpoint -- allows install via
        layer2-transport over layer3
    \end{itemize}
  \end{exampleblock}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{end}
\subsection{closing words}
\begin{frame}
  \begin{center}
  \begin{Huge}
    Questions? \\
  \end{Huge}
    \vspace{15px}
%    \includegraphics[width=5cm]{pics/arigatou_gozaimasu.eps} \\
    \vspace{20px}
  \url{http://fluxcoil.net} \\
  \vspace{30px}
%  chorn@fluxcoil.net \\
  \begin{center}
  \includegraphics[width=0.7\linewidth]{pics/OSDC_Logo_newversion.eps}
  \end{center}

  \end{center}
%  \vspace{30px}
%  [1] Thank you.
\end{frame}

\end{CJK}
\end{document}
