diff options
| author | Manuel Traut <manut@mecka.net> | 2013-01-25 17:39:46 +0100 |
|---|---|---|
| committer | Manuel Traut <manut@mecka.net> | 2013-01-25 17:39:46 +0100 |
| commit | ad59b25e403b9dd9fbee29f44fd01f8655fa6479 (patch) | |
| tree | a94bf87e78554a829c5a54a625294e5fa3410909 | |
| parent | f0c173214d2f37fa56a5dbad403e4b3827b9ddde (diff) | |
fist work on elbe internals
Signed-off-by: Manuel Traut <manut@mecka.net>
| -rw-r--r-- | distribution/elbe-devel/pres_elbe-devel_en.tex | 202 |
1 files changed, 199 insertions, 3 deletions
diff --git a/distribution/elbe-devel/pres_elbe-devel_en.tex b/distribution/elbe-devel/pres_elbe-devel_en.tex index ecfdf34..44e29bb 100644 --- a/distribution/elbe-devel/pres_elbe-devel_en.tex +++ b/distribution/elbe-devel/pres_elbe-devel_en.tex @@ -1,12 +1,208 @@ \input{configpres} -\title{ELBE - Advanced usage and internals} +\title{ELBE internals} \maketitle -\subsection{ELBE internals} +\subsection{source repository} + +\begin{frame}[fragile] +\frametitle{source tree} + +ELBE development is hosted on github: +\begin{lstlisting} +https://github.com/Linutronix/elbe +\end{lstlisting} + +Use git to retrieve the source: +\begin{lstlisting} +git clone git://github.com/Linutronix/elbe.git +\end{lstlisting} + +\begin{lstlisting} +. +|-- debian/ # debian packaging +|-- docs/ # man pages, dia files, overview +|-- elbe # python script calling several scripts from ./elbepack +|-- elbepack/ # implementation of elbe subcommands like 'create' +| |-- mako/ # script and config file templates for the buildenv +|-- examples/ # example XML files +|-- Makefile # calls dpkg-buildpackage to generate a debian package +|-- README # short introduction to ELBE ++-- setup.py # python typical setup script +\end{lstlisting} + +\end{frame} + +\subsection{elbepack/create.py} + +\begin{frame} +\frametitle{create an elbe project} +\begin{itemize} +\item the 'elbe create' command calls the elbepack/elbe.py script +\item create.py has one mandotary parameter: path and name of an elbe xml file +\item create.py accepts optional parameters that are parsed by OptionParser +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{xml validation} +\begin{itemize} +\item verifies given xml file against elbepack/dbsfed.xsd +\item we try to do as much checks as posible with the schema +\item normaly there are no further checks inside the python code +\item validation can be skipped by --skip-validation parameter +\item elbepack/validate.py is used to verify the schema +\item elbepack/validate.py can be also called directly: 'elbe validate' +\item elbepack/validate.py uses etree from lxml to verify the schema +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{create build directory} +\begin{itemize} +\item creates a directory named 'build' at the current working directory +\item name can be overridden by --directory parameter +\item the buildenvironment will be created inside this directory +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{the debian-installer} +\begin{itemize} +\item the debian-installer is a Linux kernel and a initial ramdisk. +\item the initial ramdisk includes a minimal rootfilesystem and the d-i + application +\item the debian project distributes the installer in different formats: + e.g. as a bootable cd or for use with pxeboot +\item normally the debian-installer is booted on the system debian should + be installed on +\item the debian-installer does disk detection / partitioning, sw installation + and system configuration +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{debian-installer package} +\begin{itemize} +\item the elbe project has packaged the debian-installer as debian package +\item this was done to be able to verify the version of the installer +\item the name of the debian package is specified by the 'kinitrd' tag inside the + xml file +\item current packages are called testrd and are available on the debian +repository: +\begin{lstlisting} +deb http://debian.linutronix.de/elbe squeeze main +\end{lstlisting} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{retrieve debian-installer package} +\begin{itemize} +\item elbepack/pkgutils.py:copy\_kinitrd() is called by create.py +\item the pkgutils module uses python virtapt to retrieve the debian package + from a mirror or cdrom specified in the xml file +\item virtapt takes care on using the correct architecture and debian suite +\item then the package contents are extracted and copied to the build + directory +\end{itemize} +\end{frame} + + +\begin{frame}[fragile] +\frametitle{mako} +Mako is a template library written in Python. + +It can be used to generate files from templates. + +It is normally used to generate webpages. + +Documentation and more informations can be found on +\begin{lstlisting} +http://www.makotemplates.org/ +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{create Makefile, scripts and config files} +ELBE uses +\begin{lstlisting} +mako.Template(filename=fname).render(**d) +\end{lstlisting} +to insert several values from the XML file into the scripts and configfiles +used in the buildenv. It is called several times, for each *.mako file in +elbepack/mako (fname). + +d refers to several lxml.etree XML nodes. etree was initialized with the +ELBE XML file before. +\begin{lstlisting} +d = {"opt": opt, + "xml": xml, + "prj": xml.node("/project"), + "tgt": xml.node("/target"), + "pkgs": xml.node("/target/pkg-list"), + "fine": xml.node("/finetuning"), + "preseed": get_preseed(xml) } +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{create Makefile, scripts and config files} +For example a simple txt file including all package names defined in the +<pkg-list> tag can be created by (pkg-list.mako): +\begin{lstlisting} +% for n in pkgs: +% if n.tag == "pkg": +${n.et.text} +% endif +% endfor +\end{lstlisting} +\end{frame} + + +\begin{frame} +\frametitle{preseeding} +\end{frame} + +\subsection{Makefile (pre-install)} + +\begin{frame} +\frametitle{initrd.gz modification} +\end{frame} + +\begin{frame} +\frametitle{create buildenv.img} +\end{frame} + +\begin{frame} +\frametitle{start emulator} +\end{frame} + +\subsection{debian-installer in emulator} + +\begin{frame} +\frametitle{preseeding} +\end{frame} + +\begin{frame} +\frametitle{post install} +cp-scipts-into-buildenv.sh +changeroot-into-buildenv.sh +\end{frame} \begin{frame} -\frametitle{How ELBE works} +\frametitle{target generation} \end{frame} +\begin{frame} +\frametitle{cdrom generation} +\end{frame} + +\subsection{Makefile (post-install)} + +\begin{frame} +\frametitle{copy files to host} +\end{frame} + + \input{tailpres} |
