\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}