\section{Présentation de rpms}

\frame{
\frametitle{Historique}
\vfill
\begin{block}{Origine}
Originellement: \textit{Redhat Package Manager}

\href{http://rpm.org/}{http://rpm.org/}
\end{block}
\vfill
\begin{block}{Le fork}
2005: Patatra: fork de Jeff Johnson: \textit{RPM Package Manager}
\href{http://rpm5.org/}{http://rpm5.org/}

Il y a donc deux rpms respectivement en version 4.6.0 et 4.5.2. (au \today{})
\end{block}
\vfill
}

\frame{
\frametitle{Roles de rpms}
\begin{block}{Gestion des logiciels installés}
    \begin{itemize}
    \item installation
    \item désinstallation
    \item mise à jour
    \end{itemize}
\end{block}

\begin{block}{Controle de l'état du système}
    \begin{itemize}
    \item Intégrité du système
    \item Repérage des fichiers modifiés
    \end{itemize}
\end{block}
}

\frame{
\frametitle{Rpm ?}
\begin{block}{Le terme rpm désigne}
\begin{itemize}
\item un logiciel
\item une série de commandes
\item une format de fichier
\end{itemize}
\end{block}
}

\section{Utilisation}

\subsection{Fonctionnement}

\begin{frame}[fragile]
\frametitle{Information de base d'un rpm}
\begin{block}{Version d'un rpm}
\begin{itemize}
\item le nom: deux rpm de même nom se remplacent
\item la version: identifie la version du logiciel
\item la release: la version du rpm pour la version de ce logiciel
\item l'epoch: permet de forcer l'ordre entre deux versions
\end{itemize}
\end{block}
\pause
\vfill
\begin{block}{l'Architecture}
\begin{itemize}
\item assure que le logiciel fonctionne sur la machine
\item \verb+noarch+ indique que le rpm fonctionne "partout"
\item ont des priorités (i586 est mieux que i386)
\end{itemize}
\end{block}
\pause
\vfill
\begin{exampleblock}{}
foo-2.1-1.i586 mets à jour foo-2.0-1.i586
\end{exampleblock}
\end{frame}

\begin{frame}[fragile]
\frametitle{Dépendances}
\vfill
\begin{block}{}
\begin{itemize}
\item Contraintes au niveau de l'installation (ou de la construction) des rpms.
\item Elles s'expriment en terme de mot clef avec éventuellement
une version (\verb+<=> VERSION+).
\end{itemize}
\end{block}
\pause
\vfill
\begin{block}{Les types de dépendances}
{\scriptsize
\begin{tabular}{|c|l|l|}
\hline
Type&Installation&Construction\\
\hline
\hline
Provides&Fourni&N/A\\
\hline
\hline
Requires&A besoin de&A besoin de\\
\hline
Conflicts&Ne peut pas être installer avec&Ne peut être construit avec\\
\hline
Obsoletes&Remplace (discrètement)&N/A\\
\hline
Trigger&Déclancher une action si \ldots est installé&N/A\\
\hline
\end{tabular}
}
\end{block}
\pause
\vfill
\begin{alertblock}{Relations:}
Toutes les contraintes s'appliquent sur les \verb+provides+ dans
\verb+obsoletes+ qui s'appliquent sur le nom du rpm.
\end{alertblock}
\vfill
\end{frame}

\begin{frame}[fragile]
\frametitle{Les fichiers}
\begin{block}{Les règles}
\begin{itemize}
\item on installe pas deux fois un fichier (sauf si contenu identique)
\item rpm créer les répertoires parents si necessaire
\item rpm restaure les propriétaires, permissions et dates
\end{itemize}
\end{block}
\vfill
\pause
\begin{block}{Les types de fichiers}
\begin{itemize}
\item documentation (avec locale)
\pause
\item configuration (noreplace):
\pause
\begin{itemize}
\item pas de modification: remplacement
\item \verb+.rpmnew+ nouveau fichier, originale non touché
\item \verb+.rpmsave+ sauvgarde du fichier remplacé
\end{itemize}
\end{itemize}
\end{block}
\end{frame}

\subsection{Les .rpm}

\frame{
\frametitle{Contenu d'un fichier rpm}
\begin{block}{le Lead}
Quasi inutilisé désormais
\end{block}
\begin{block}{Le Header}
Contient la description du fichier rpm, sous de tags
\end{block}
\begin{block}{L'Archive CPIO}
Les fichiers à installer sous format d'un cpio généralement compréssés
\end{block}
}

\frame{
\frametitle{Le Header}
\begin{block}{Format}
\begin{itemize}
\item à ce jour, format binaire
\item liste de Tags
\end{itemize}
\end{block}
\vfill
\begin{block}{Les tags}
\begin{itemize}
\item chaque tag a un nom
\item plusieurs type: numérique, chaine, binaire
\item valeurs multiple possible pour certains
\end{itemize}
\end{block}
\vfill
\begin{exampleblock}{Exemple de tag}
\begin{tabular}{|c|l|}
\hline
NAME&Nom du rpms\\
\hline
PACKAGER&Celui qui a fait le rpm\\
\hline

\end{tabular}
\end{exampleblock}
}

\begin{frame}[fragile]
\frametitle{Convention de nommage}
\begin{exampleblock}{}
\alert<2>{vlc}-\alert<3>{1.0.3}-\alert<4>{2mdv2010.1}.\alert<5>{x86\_64}.rpm
\alert<2>{\%\{NAME\}}-\alert<3>{\%\{VERSION\}}-\alert<4>{\%\{RELEASE\}}.\alert<5>{\%\{ARCH\}}.rpm
\end{exampleblock}
\vfill
\pause
\begin{block}{}
\begin{itemize}
\item le nom (NAME)
\pause
\item la version
\pause
\item la release
\pause
\item l'arch
    \begin{itemize}
    \item \verb+src+: un rpm source
    \item \ldots: un rpm binaire
    \end{itemize}
\end{itemize}
\end{block}
\end{frame}

\subsection{Configuration}

\begin{frame}[fragile]
\frametitle{La configuration}
\begin{block}{}
Toute la configuration se fait via des macros,
système de variable à évaluation tardive.
\end{block}
\vfill
\begin{block}{Fichiers de configuration}
\begin{itemize}
\item \verb+/usr/lib/rpm/macros+ (système)
\item \verb+~/.rpmmacros+ (utilisateur)
\end{itemize}
\end{block}
\vfill
\begin{exampleblock}{}
{\scriptsize
\begin{verbatim}
%__dbi_htconfig_current     %{__dbi_htconfig}
%__dbi_htconfig_rebuild     %{__dbi_htconfig} %{__dbi_rebuild}

%_dbi_htconfig      \
  %{?_rpmdb_rebuild:%{__dbi_htconfig_rebuild}}\
  %{!?_rpmdb_rebuild:%{__dbi_htconfig_current}}\
%{nil}
\end{verbatim}
}
\end{exampleblock}
\vfill
\end{frame}

\subsection{Les commandes}

\frame{
\frametitle{Les modes de rpm}
\vfill
\begin{block}{Installation}
\begin{center}
\begin{tabular}{|c|c|l|}
\hline
Binaire&options&Fonction\\
\hline
\hline
rpm&-i&Installation\\
\hline
rpm&-U&Upgrade (ou installe)\\
\hline
rpm&-F&Upgrade (les rpms déjà installé)\\
\hline
rpm&-e&Désinstallation\\
\hline
\end{tabular}
\end{center}
\end{block}
\vfill
\pause
\begin{block}{Autres}
\begin{center}
\begin{tabular}{|c|c|l|}
\hline
Binaire&options&Fonction\\
\hline
\hline
rpm&-q&Interrogation (base rpm)\\
\hline
rpm&-qp&Interrogation (fichier rpm)\\
\hline
rpm&-V&Vérification\\
\hline
rpmbuild&&Construction de rpm\\
\hline
\end{tabular}
\end{center}
\end{block}
\vfill
}

\begin{frame}[fragile]
\frametitle{Les librairies}
\vfill
\begin{block}{}
Située dans \verb+/usr/lib(64)+
\begin{center}
\begin{tabular}{|c|l|}
\hline
Librairies&Rôle\\
\hline
\hline
librpm&Lecture des fichiers rpm\\
&Résolution des dépendances\\
\hline
librpmbuild&Construction de rpm\\
\hline
librpmdb&Accès à la rpm db\\
\hline
librpmio&Abstraction générique des entrées/sorties\\
&Evaluation des macros\\
\hline
\end{tabular}
\end{center}
\end{block}
\vfill
\end{frame}


