From: Michael Tremer Date: Fri, 27 Apr 2012 10:00:00 +0000 (+0200) Subject: 2012 - Introduction of the Pakfire Build Service X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=408c91904918ff6d247c63ef1e2589256d4ae87e;p=people%2Fms%2Ftalks.git 2012 - Introduction of the Pakfire Build Service --- 408c91904918ff6d247c63ef1e2589256d4ae87e diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fded31e --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +/*/main.pdf +/*.pdf +*.aux +*.log +*.nav +*.out +*.snm +*.toc diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/main.tex b/2012_-_Introduction_to_the_Pakfire_Build_Service/main.tex new file mode 100644 index 0000000..92a3a8c --- /dev/null +++ b/2012_-_Introduction_to_the_Pakfire_Build_Service/main.tex @@ -0,0 +1,696 @@ + +\documentclass[serif,mathserif]{beamer} + +\usepackage{beamerthemesplit} + +\usetheme{default} +\useoutertheme{default} + +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{color} +\usepackage{epsfig} +\usepackage{marvosym} +\usepackage{texnansi} +\usepackage{verbatim} +\usepackage{xspace} + +% Make this a 16:9 presentation +%\setlength{\paperwidth}{171 mm} +%\setlength{\paperheight}{96 mm} +%\setlength{\textwidth}{151 mm} +%\setlength{\textheight}{86 mm} + +% Set sans-serif font. +\renewcommand\sfdefault{phv} +\renewcommand\familydefault{\sfdefault} + +% Define some colours. +\definecolor{myred}{rgb}{0.53,0.01,0} +\definecolor{mygrey}{rgb}{0.4,0.4,0.4} + +% Make a nice gradient as background. +\setbeamertemplate{background canvas}[vertical shading] +[bottom=black, middle=myred, top=myred] + +% Highlight elements in some sort of grey. +\setbeamercolor{structure}{fg=mygrey} +\setbeamercolor{normal text}{bg=black, fg=white} + +% Use round bullets in lists. +\setbeamertemplate{items}[circle] + +% Use bigger fonts for titles. +\setbeamerfont{title}{size=\Huge} +\setbeamerfont{frametitle}{size=\large} +\setbeamertemplate{frametitle}[default] + +% Don't clutter the pages with useless navigations. +\setbeamertemplate{navigation symbols}{} + +% Author information. +\author[Michael Tremer]{Michael Tremer} +\institute{IPFire Project} + +% The title of the presentation. +\title{Introduction to the\\ Pakfire Build Service} +\subtitle{The new IPFire build system} + +\date{April 28, 2012} + +\newcommand{\spacer}{\vspace{4 mm}} + +\newcommand{\screenshot}[1]{\centerline{% + \includegraphics[width=\textwidth]{#1}}} + +\begin{document} + \maketitle + + %\section*{Outline} + %\frame{\tableofcontents} + + \section{Introduction} + \subsection{What is the Pakfire Build Service?} + \frame{ + \begin{center} + The Pakfire Build Service is the central build system + of the IPFire firewall distribution. + \end{center} + } + \frame{ + \begin{center} + It automates the whole process from source code to a binary package + that can be easily installed on any IPFire system. + \end{center} + } + + \subsection{First things first\dots Terminology} + \frame{ + \frametitle{What is a package?} + + In general, a package is a collection of files and their metadata. + \spacer \pause + + It is a single file and hence can easily be sent around for further + development or distribution. File Extension: pfm. + \spacer \pause + + There are two different types of packages\dots + \pause + + \begin{itemize} + \item<4-> Source packages + \item<5-> Binary packages + \end{itemize} + } + + \subsubsection{Source packages} + \frame{ + \frametitle{Source packages} + + \begin{itemize} + \item<2-> A source package contains source code and + build instructions to compile the sources. + + \item<3-> Source code is considered to be the release tarball + of an upstream project and a number of patches. + + \item<4-> The result after putting a source package into a build + is one or more binary packages. + \end{itemize} + } + %\frame{ + % \frametitle{Source packages: Makefiles} + % + % The heart of a source package is the \emph{Makefile} which is always + % called \emph{package-name.nm}. + % \spacer + %} + + \subsubsection{Binary packages} + \frame{ + \frametitle{Binary packages} + + Binary packages are ready for installation on target systems. + \spacer + + It's easy: + \begin{center} + \emph{pakfire install htop-1.0.1-1.ip3.x86\_64.pfm} + \end{center} + } + \frame{ + \frametitle{Binary packages: Example} + + \emph{audit - User space tools for 2.6 kernel auditing} + + \begin{itemize} + \item audit-2.2-2.ip3.src.pfm + \end{itemize} + \spacer \pause + + The source package produces a whole set of binary packages: + \begin{itemize} + \item audit-2.2-2.ip3.x86\_64.pfm + \item audit-debuginfo-2.2-2.ip3.x86\_64.pfm + \item audit-devel-2.2-2.ip3.x86\_64.pfm + \item audit-libs-2.2-2.ip3.ip3.x86\_64.pfm + \end{itemize} + } + + \subsubsection{Packages have got dependencies} + \frame{ + \frametitle{Packages have got dependencies} + + Packages have different kinds of \emph{dependencies} + which define relationships to each other. + \spacer \pause + + A dependency can be defined as: + \spacer + + \begin{itemize} + \item<3-> An other package by name (\emph{openssl, beep or zlib-devel}). + \item<4-> An other package by name and version (\emph{glibc >= 2.15 or udev < 182}). + \item<5-> A filename like \emph{/usr/bin/bash}. + \item<6-> A string that is provided by any package (e.g. \emph{bootloader}). + You should not use this. + \end{itemize} + } + \frame{ + \frametitle{Packages have got dependencies} + + A given package \emph{X} may have the following dependencies: + \spacer \pause + + \begin{itemize} + \item<2-> \emph{Requires}: The installation of package \emph{X} + requires the availability of everything in this list. + \item<3-> \emph{Provides}: The package in hand comes with the + features in this list. + \item<4-> \emph{Conflicts}: Package X cannot be installed if + any of these dependencies is provided by an other package. + \item<5-> \emph{Obsoletes}: If package X is installed, there is + no need for anything in this list. + \end{itemize} + } + \frame{ + \frametitle{Benefits of the package division} + + For users: + \begin{itemize} + \item<2-> Install only what you need. + \begin{itemize} + \item Keeps the system small and fast. + \end{itemize} + + \item<3-> Better updates: + \begin{itemize} + \item Update only what you want (e.g. only security updates). + \item Faster distribution of hotfixes. + \item Rollback bad updates. + \end{itemize} + + \item<4-> Use other package sources. + \begin{itemize} + \item Third party repositories for closed source stuff. + \item Packages we don't want to have in IPFire. + \item Whatever you might think of... + \end{itemize} + \end{itemize} + } + \frame{ + \frametitle{Benefits of the package division} + + For developers: + \begin{itemize} + \item<2-> Each developer gets a small chunk to maintain. + \item<3-> One broken package does not break the whole distribution. + \item<4-> Faster builds: + \begin{itemize} + \item Just rebuild one package. + \item Never the whole distribution. + \end{itemize} + + \item<5-> Send unstable updates to each other. Test them. + + \item<6-> Push out updates earlier: + \begin{itemize} + \item No release planning for core updates. + \item Don't bother with issues that have already been fixed. + \end{itemize} + \end{itemize} + } + + \subsection{Conclusion} + \frame{ + \frametitle{Conclusion} + + Packages have a lot of advantages. + \spacer \pause + + But the management of more than 1250 packages per architecture + is a tough job. + \spacer \pause + + We need a management tool for that! + \spacer + } + + \section{The Pakfire Build Service} + \frame{ + \frametitle{The Pakfire Build Service (PBS)} + + \only<1>{ + \begin{figure} + \screenshot{res/pbs-homepage.png} + \end{figure} + } + + \begin{itemize} + \item<2-> It has been developed by developers of the IPFire project to + achieve a very high level of quality in the build process in + conjunction with the community. + \item<3-> Written in pure Python. + \item<4-> Comes with a web user interface and an XMLRPC management + interface. + \item<5-> Heavily based on the Pakfire package management system. + \end{itemize} + } + + \subsection{Excursion: pakfire} + \frame{ + \frametitle{Excursion: pakfire} + + The Pakfire package management system manages installations, updates, + removes and more of packages on an IPFire system. + \spacer + + \begin{itemize} + \item<2-> Written in Python with performance critical code in C. + \item<3-> Fast and most robust dependency solving algorithm in the world. + \item<4-> Very tiny. Runs on embedded systems. + \item<5-> Built-in build system. + \end{itemize} + \spacer + } + + \subsection{More definitions} + \frame{ + \frametitle{More definitions} + + \begin{block}{Package} + Primarily, the term \emph{package} describes a source package. + It also can rarely mean the actual package file. + \end{block} + \pause + + \begin{block}{Build} + A build is an ordering unit which contains a source package + and multiple \emph{build jobs}. There is also some meta information + about the reason of the build (commit message, associated bugs).\par + A build is what we are managing here. We don't bother about + a single package file. + \end{block} + \pause + + \begin{block}{Build job or just: job} + A build contains several jobs. One for each architecture the + build is built for. + \end{block} + \pause + } + + \subsection{A package} + \frame{ + \frametitle{PBS by example: A package} + + \begin{columns}[c] + \column{.5\textwidth} + \begin{figure} + \screenshot{res/pbs-package-kernel.png} + \end{figure} + + \column{.5\textwidth} + This is the kernel package. + \spacer + + The page contains some general information about the package + and in the row below a list of all known builds. + \spacer + + At the bottom: Open bugs, some statistics. + \end{columns} + } + + \subsection{A build} + \frame{ + \frametitle{PBS by example: A build} + + A build can be created in two ways and thus they + distinguish themselves in two categories. + \spacer + + \begin{itemize} + \item<2-> Release builds. + \item<3-> Scratch builds. + \end{itemize} + } + + \subsubsection{A release build} + \frame{ + \frametitle{A release build} + + A release build is created out of a commit in + a git repository. + \spacer + + \begin{itemize} + \item<2-> It is automatically created from source. + \item<3-> Always linked to a distribution. + \item<4-> Goes its way through all repositories of the distribution + (i.e. from testing to stable). + \end{itemize} + } + + \subsubsection{A scratch build} + \frame{ + \frametitle{A scratch build} + + In contrast to the release builds, a scratch build + is created by an individual. + \spacer + + \begin{center} + Command: \emph{ pakfire-client build beep/beep.nm} + \end{center} + + \begin{itemize} + \item<2-> Used to test if a packages does build on all architectures. + \item<3-> Used to distribute experimental packages. + \end{itemize} + \spacer \pause \pause \pause + + We will learn what exciting things we can + do with them in a minute\dots + } + + \section{Learning by example} + + \subsection{Step by step} + \frame{ + \frametitle{Step by step} + + \begin{center} + Going step by step through the web user interface of the Pakfire + Build Service, you will get an impression about what it can do... + \end{center} + } + + \subsection{A package} + \frame{ + \frametitle{A package} + + \begin{figure} + \screenshot{res/pbs-package-gcc.png} + \end{figure} + } + \frame{ + \frametitle{A package} + + \begin{figure} + \screenshot{res/pbs-package-gcc-top.png} + \end{figure} + + At the top of the page, you will find the most important metadata of + the package \pause which is:\par name and a short sentence what the package + does (headline)\pause, a longer description\pause, the home of the + package (we call this upstream)\pause, license\pause, + and the maintainer within the IPFire project. + } + \frame{ + \frametitle{A package} + + \begin{figure} + \screenshot{res/pbs-package-gcc-btm.png} + \end{figure} + + At the bottom you will find a list of all builds for this package. + \spacer + + That are two release builds for this example, one in testing, + the other already in stable state. + \spacer + + Let's have a closer look at them... + } + + \subsection{A build} + \frame{ + \frametitle{A build} + + \begin{figure} + \screenshot{res/pbs-build-gcc.png} + \end{figure} + } + \frame{ + \frametitle{A build} + + \begin{figure} + \screenshot{res/pbs-build-gcc-top.png} + \end{figure} + + The same metadata as we already know from the package page. + \spacer + + Additionally tagged as a release build or scratch build in the top + right corner. + } + \frame{ + \frametitle{A build} + + Further down, there is a block that shows us more information about + the reason for this build and the current state. + \spacer + + \begin{figure} + \screenshot{res/pbs-build-gcc-mdl.png} + \end{figure} + \pause + + This build for example was created by commit \emph{c6952ba} and + is in the testing repository. + } + \frame{ + \frametitle{A build} + + At the bottom of a package is a short summary of the build jobs. + + You get an overview about how the build of the package goes. + \spacer + + \begin{figure} + \screenshot{res/pbs-build-gcc-jobs.png} + \end{figure} + } + \frame{ + \frametitle{A build} + + By clicking on the \emph{Properties} tab, you can see a couple + of more meta information about this build. + \spacer + + \begin{figure} + \screenshot{res/pbs-build-gcc-properties.png} + \end{figure} + } + \frame{ + \frametitle{A build: Comments \& score} + + One major design goal of the PBS was the involvement of the community + of testers into the development process. + \spacer \pause + + We achieved that by giving our users the opportunity to comment on + builds and rate them like in this example: + \spacer + + \begin{figure} + \screenshot{res/pbs-build-gcc-log.png} + \end{figure} + } + \frame{ + We gain the following advantages: + + \begin{itemize} + \item<2-> Users get go and grab a newer package if they are experiencing + an issue with the current version. + \item<3-> If the package fixes their bug, they only need to type a few + lines into the comment box and rate the build. + \item<4-> The developer gets immediate feedback about what he has + created. This has been difficult in the past. + \item<5-> If things don't go that well, it's the same game. + \end{itemize} + \pause \pause \pause \pause \pause + + At the end of the day, it is much easier for the developer to decide if + a package is broken or if the update is working well and worth being + \emph{pushed}. + } + \frame{ + \begin{columns}[c] + \column{.5\textwidth} + Who is allowed to comment and vote? + \spacer + + Every registered user is allowed to comment builds. + \spacer + + At the current point in time, it is necessary to be enabled + by an admin to vote to assure a certain quality. + \spacer + + \column{.5\textwidth} + \begin{figure} + \screenshot{res/pbs-build-kernel-comment.png} + \end{figure} + \end{columns} + } + + \subsection{A job} + \frame{ + \frametitle{A job} + + \begin{figure} + \screenshot{res/pbs-job-gcc-top.png} + \end{figure} + + On a job page, you will find a lot of information about the state + and progress of a build job for a certain architecture. + \spacer + + \begin{center} + \small NOTE: The interface may still change a bit. + \end{center} + } + \frame{ + You have access to the build log files which contain the whole + build process and are very useful for debugging. + \spacer + + \begin{figure} + \screenshot{res/pbs-job-gcc-logfiles.png} + \end{figure} + + They are easy to download or can be directly viewed in the web browser. + } + \frame{ + Another very important feature is the so called \emph{buildroot}. + \spacer \pause + + If there is a package with a serious bug which affected other packages + that have been built with that package, we need to know which + packages are infected. + \spacer \pause + + The buildroot gives us a list of all packages that were extracted to + the buildroot at this build job. + \spacer \pause + + Another application: If a build fails, we are able to create the + \underline{exactly} same buildroot and reproduce the complete build + process. + } + \frame{ + \begin{figure} + \screenshot{res/pbs-job-gcc-buildroot.png} + \end{figure} + } + \frame{ + A build job also owns the package files that came out of the build process. + + \begin{figure} + \screenshot{res/pbs-job-gcc-files.png} + \end{figure} + } + \frame{ + \begin{center} + Let's click on one of these... + \end{center} + } + + \subsection{A package file} + \frame{ + \frametitle{A package file} + + Again, we have a lot of meta information which explains itself. + + \begin{figure} + \screenshot{res/pbs-package-libgcc-top.png} + \end{figure} + } + \frame{ + \begin{columns}[c] + \column{.5\textwidth} + You may view the dependencies of a package online\dots + + \column{.5\textwidth} + \begin{figure} + \screenshot{res/pbs-package-libgcc-deps.png} + \end{figure} + \end{columns} + } + \frame{ + \dots as well as the list of files in the package (with permissions + and user) which is both very useful for debugging. + + \begin{figure} + \screenshot{res/pbs-package-libgcc-files.png} + \end{figure} + } + + \section{The end} + \subsection{Conclusion} + \frame{ + \frametitle{Conclusion} + + In conclusion, the Pakfire Build Service has increased our productivity + enormously, because it is so much faster in bringing out package updates. + \spacer \pause + + Bugs get fixed very fast and do not stop you working on something. + \spacer \pause + + Developers are able to test each others changes very easily and + provide feedback at a central place. So are users. + \spacer \pause + + The integration with the bugtracker (Bugzilla) closes bugs + and makes sure that the reporter of a bug is informed about a fix + and encouraged to test it. + \spacer + } + \frame{ + Altogether, we are very proud of what we have done. + \spacer \pause + + The Pakfire Build Service makes development fun. It helps to achieve + higher goals. + \spacer \pause + + We don't consider the service fully done, because we have so many + ideas on our minds\dots + } + + \frame{ + \begin{center} + \Huge{THE END} + \spacer + \end{center} + + \begin{center} + Now go out and show what you have learned today at + \spacer \url{https://pakfire.ipfire.org} + \end{center} + } +\end{document} diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-jobs.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-jobs.png new file mode 100644 index 0000000..52448ef Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-jobs.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-log.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-log.png new file mode 100644 index 0000000..6d88a5a Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-log.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-mdl.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-mdl.png new file mode 100644 index 0000000..7070b66 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-mdl.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-properties.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-properties.png new file mode 100644 index 0000000..cf6afd6 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-properties.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-social.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-social.png new file mode 100644 index 0000000..e547fc0 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-social.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-top.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-top.png new file mode 100644 index 0000000..77a2efb Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc-top.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc.png new file mode 100644 index 0000000..b93755b Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-gcc.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-kernel-comment.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-kernel-comment.png new file mode 100644 index 0000000..7e16745 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-build-kernel-comment.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-homepage.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-homepage.png new file mode 100644 index 0000000..39fb7ec Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-homepage.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-buildroot.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-buildroot.png new file mode 100644 index 0000000..1c59bb7 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-buildroot.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-files.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-files.png new file mode 100644 index 0000000..7735294 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-files.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-logfiles.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-logfiles.png new file mode 100644 index 0000000..94d12e6 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-logfiles.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-top.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-top.png new file mode 100644 index 0000000..a5177f3 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-job-gcc-top.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-gcc-btm.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-gcc-btm.png new file mode 100644 index 0000000..d0c6351 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-gcc-btm.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-gcc-top.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-gcc-top.png new file mode 100644 index 0000000..e0e5bfe Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-gcc-top.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-gcc.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-gcc.png new file mode 100644 index 0000000..4977696 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-gcc.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-kernel.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-kernel.png new file mode 100644 index 0000000..2ccb40c Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-kernel.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-libgcc-deps.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-libgcc-deps.png new file mode 100644 index 0000000..3c9bf27 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-libgcc-deps.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-libgcc-files.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-libgcc-files.png new file mode 100644 index 0000000..eef688d Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-libgcc-files.png differ diff --git a/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-libgcc-top.png b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-libgcc-top.png new file mode 100644 index 0000000..54c8d74 Binary files /dev/null and b/2012_-_Introduction_to_the_Pakfire_Build_Service/res/pbs-package-libgcc-top.png differ diff --git a/render.sh b/render.sh new file mode 100755 index 0000000..8b2b3fa --- /dev/null +++ b/render.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +PDFLATEX="pdflatex" + +TALKS="2012_-_Introduction_to_the_Pakfire_Build_Service" + +for talk in ${TALKS}; do + ( + pushd "${talk}" + if ${PDFLATEX} main < /dev/null; then + cat "main.pdf" > "../${talk}.pdf" + fi + popd + ) +done