summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2013-01-31 16:41:14 +0100
committerManuel Traut <manut@mecka.net>2013-01-31 16:41:14 +0100
commit9f98d118df9c26e0508e452b3533b63021dd9512 (patch)
tree40d0315a5c4cd281ab57ce456db2ee4a58b3f7e0
parentcbc5342614b26482a9336ed35693d0a3cd42276c (diff)
add last frames to elbe-devel
Signed-off-by: Manuel Traut <manut@mecka.net>
-rw-r--r--distribution/elbe-devel/pres_elbe-devel_en.tex258
1 files changed, 198 insertions, 60 deletions
diff --git a/distribution/elbe-devel/pres_elbe-devel_en.tex b/distribution/elbe-devel/pres_elbe-devel_en.tex
index 7e3977c..c145d9d 100644
--- a/distribution/elbe-devel/pres_elbe-devel_en.tex
+++ b/distribution/elbe-devel/pres_elbe-devel_en.tex
@@ -1,8 +1,11 @@
\input{configpres}
+\lstset{language=bash}
+
\title{ELBE internals}
\maketitle
+
\subsection{source repository}
\begin{frame}[fragile]
@@ -38,9 +41,15 @@ git clone git://github.com/Linutronix/elbe.git
\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
+\item the 'elbe create' command is implemented
+
+at elbepack/create.py
+\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}
@@ -52,43 +61,69 @@ git clone git://github.com/Linutronix/elbe.git
\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
+\item elbepack/validate.py can be also called directly:
+
+'elbe validate examples/amd64-example.xml'
+\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 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}
+\frametitle{the debian-installer (d-i)}
\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:
+\item the d-i needs a running linux system
+\item the debian project distributes the d-i in different packages:
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
+\item all packages include at least
+\begin{itemize}
+\item one Linux kernel binary
+\item and an initial ramdisk with a minimal rfs and the d-i application
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{d-i common use}
+\begin{itemize}
+\item d-i is started on the system debian should be installed on
+\item d-i does
+\begin{itemize}
+\item disk detection / partitioning
+\item sw installation
+\item system configuration
+\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}[fragile]
-\frametitle{debian-installer package}
+\frametitle{elbe kinitrd packages}
\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 elbe project has packaged the d-i used by elbe as binary debian packages
+\begin{lstlisting}
+testrd_0.6_armel
+|- opt
+| +-elbe
+| +-initrd
+| +-initrd-cdrom.gz
+| +-initrd.gz
+| +-vmlinuz
+\end{lstlisting}
\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
+\item current packages are called testrd and are available at the debian
repository:
\begin{lstlisting}
deb http://debian.linutronix.de/elbe squeeze main
@@ -97,14 +132,22 @@ deb http://debian.linutronix.de/elbe squeeze main
\end{frame}
\begin{frame}
-\frametitle{retrieve debian-installer package}
+\frametitle{retrieve kinitrd}
\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
+\item elbepack/pkgutils.py:copy\_kinitrd()
+
+is called by elbepack/create.py
+\item the pkgutils module uses python virtapt
+
+to retrieve the kinitrd package
+
+from a mirror or cdrom specified in the xml file
+\item virtapt takes care on using
+
+the correct debian architecture and suite
+\item the kinitrd package will be extracted
+
+and copied to the build directory
\end{itemize}
\end{frame}
@@ -127,15 +170,6 @@ http://www.makotemplates.org/
\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"),
@@ -143,13 +177,21 @@ d = {"opt": opt,
"pkgs": xml.node("/target/pkg-list"),
"fine": xml.node("/finetuning"),
"preseed": get_preseed(xml) }
+...
+mako.Template(filename=fname).render(**d)
\end{lstlisting}
+to insert several values from the XML file into scripts and configfiles.
+\begin{description}
+\item[fname] the function is called for each *.mako file in elbepack/mako
+\item[d] refers to several lxml.etree XML nodes
+\item[xml] is a etree initialized with the ELBE XML file
+\end{description}
\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):
+$\langle$pkg-list$\rangle$ tag can be created by (pkg-list.mako):
\begin{lstlisting}
% for n in pkgs:
% if n.tag == "pkg":
@@ -169,8 +211,11 @@ the installation is running.
\begin{frame}
\frametitle{preseeding}
-Many pre-seeding rules are generated from the XML file with mako:
-./elbepack/mako/commmon.cfg.mako
+Many pre-seeding rules are generated
+
+from the XML file with mako:
+
+./elbepack/mako/common.cfg.mako
\end{frame}
\begin{frame}[fragile]
@@ -187,9 +232,12 @@ These rules are then included by ./elbepack/mako/custom-preseed.cfg.mako
\begin{itemize}
\item a directory tmp-tree is created
\item all files and scripts needed inside the installer
- are copied to the tmp-tree
+
+are copied to the tmp-tree
\item ungzip the original initrd.gz
-\item use cpio to append all files of tmp-tree to the unzipped initrd image
+\item use cpio to append all files of tmp-tree
+
+to the unzipped initrd image
\item gzip the new initrd image and remove the tmp-tree
\end{itemize}
\end{frame}
@@ -199,10 +247,15 @@ These rules are then included by ./elbepack/mako/custom-preseed.cfg.mako
\begin{itemize}
\item qemu-img is used to create a buildenv.img file. This file will be used as
harddisk of the emulated virtual machine.
-\item The debian-installer will install a full featured debian on this image.
-\item After the debian-installer was active, this image can be used as a virtual
-build-environment.
-\item The target rootfilesystem is normally just a subset of this image.
+\item The debian-installer will install
+
+a full featured debian on this image.
+\item After the debian-installer was active,
+
+this image can be used as a virtual build-environment.
+\item The target rootfilesystem is normally
+
+just a subset of this image.
\end{itemize}
\end{frame}
@@ -239,12 +292,18 @@ in the XML file:
runs inside the virtual machine:
\begin{itemize}
\item the buildenv.img will be partitionated and formated
-\item the root partition will be mounted at /target of the debian-installer rfs
+\item the root partition will be mounted at
+
+/target inside the debian-installer rfs
\item a minimal rootfilesystem will be installed to /target
\item a chroot /target will be executed
\item all packages will be installed and configured
\item the /target chroot will be left
-\item the hook d-i preseed/late\_command string /post-inst.sh will be executed
+\item the preseed hook
+
+d-i preseed/late\_command string /post-inst.sh
+
+will be executed
\end{itemize}
\end{frame}
@@ -267,7 +326,7 @@ and cdrom (/opt/elbe/mkcdrom.sh) generation.
\end{frame}
\begin{frame}
-\frametitle{target generation}
+\frametitle{target generation (overview)}
\begin{itemize}
\item generate file and pkg lists
\item create /target tree
@@ -280,7 +339,7 @@ and cdrom (/opt/elbe/mkcdrom.sh) generation.
\item modify /target tree with finetuning.sh
\end{itemize}
\item generate licence information file
-\item call part-target.sh to copy /target tree to (different) images
+\item call part-target.sh to generate images from /target tree
\item (optional) generate cpio images and tarballs
\end{itemize}
\end{frame}
@@ -289,13 +348,15 @@ and cdrom (/opt/elbe/mkcdrom.sh) generation.
\begin{frame}[fragile]
\frametitle{create /target tree}
\begin{itemize}
-\item depending on the elbe mode, a filelist is generated. e.g. in normal mode:
+\item depending on the ELBE mode, the filelist is generated.
+
+E.g. in normal mode:
\begin{lstlisting}
ls -A1 / | \
grep -v target | grep -v proc | grep -v sys | \
xargs find >> /opt/elbe/filelist
\end{lstlisting}
-\item then all files specified to be stored on the target rfs are copied:
+\item all files specified to be stored on the target rfs are copied:
\begin{lstlisting}
rsync -a --files-from=/opt/elbe/filelist / /target
\end{lstlisting}
@@ -356,7 +417,9 @@ rsync -a --files-from=/opt/elbe/filelist / /target
\begin{frame}[fragile]
\frametitle{dump.py - write fullpkglist to source.xml}
\begin{itemize}
-\item all used packages are mentioned in this list (including version and md5sum):
+\item all used packages are listed in the source.xml file
+
+(including version and md5sum):
\begin{lstlisting}
paktree = xml.ensure_child( 'fullpkgs' )
paktree.clear()
@@ -375,7 +438,7 @@ rsync -a --files-from=/opt/elbe/filelist / /target
\begin{frame}
\frametitle{dump.py - modify /target tree with finetuning.sh}
\begin{itemize}
-\item the script is executed while cwd is /target.
+\item the script is executed from /target.
So files can be copied
@@ -393,9 +456,10 @@ rsync -a --files-from=/opt/elbe/filelist / /target
elbe-report.txt includes a filelist that indicates each file in the target rfs
and its origin
\begin{itemize}
-\item a time stamp is recorded before and after finetuning. Files that show up
- with a modification time in that period show up as modified/created by
- finetuning.sh
+\item a time stamp is recorded before and after finetuning.
+\item files that show up with a modification time in that period
+
+can be identified as modified/created by finetuning.sh
\end{itemize}
\end{frame}
@@ -422,10 +486,16 @@ of libparted and loopback mounts.
\begin{frame}[fragile]
\frametitle{build ubifs images}
\begin{itemize}
-\item mkfs.ubifs -r is used to generate a ubifs image from a subdirectory
-\item the name of the images is defined by the label in the fstab tag.
+\item mkfs.ubifs -r is used to generate a ubifs image
+
+from a subdirectory
+\item the name of the images is defined
+
+by the label in the fstab tag
\item the image defined first in the fstab is created first
-\item the files copied to an image are moved temporarily away from /target:
+\item the files copied to an image
+
+are moved temporarily away from /target:
\begin{lstlisting}
/mountA/mountB # mountA shouldn't include files like mountB/test
\end{lstlisting}
@@ -450,14 +520,82 @@ find . -print | cpio -ov -H newc >/opt/elbe/target.cpio
\begin{frame}
-\frametitle{cdrom generation}
+\frametitle{binary cdrom generation}
+An ISO CD image will be created:
+\begin{itemize}
+\item CD should contain all packages
+
+needed to reproduce the current ELBE run
+\item the kinitrd package is installed into the buildenv
+
+to get it added to the cdrom like all other packages
+\item CD needs to be in a debian repository format
+
+otherwise it won't be accepted by d-i
+\item reprepo and genisoimage is used to create the CD
+\end{itemize}
\end{frame}
-\subsection{Makefile (post-install)}
+\begin{frame}[fragile]
+\frametitle{source cdrom generation}
+upon request (by 'elbe create --build-source')
+
+an ISO image containing all debian source packages is created:
+\begin{lstlisting}
+% if opt.buildsources:
+ mkdir -p /opt/elbe/source
+ dpkg --get-selections | awk '{print $1}' > /opt/elbe/pkg-list.actual
+ cd /opt/elbe/source
+ awk '{print "apt-get -d source "$1}' /opt/elbe/pkg-list.actual | sh
+ cd /opt/elbe
+ dpkg-scansources source /dev/null | gzip -9c > source/Sources.gz
+ genisoimage -o /opt/elbe/source.iso -J -R source
+% endif
+\end{lstlisting}
+\end{frame}
+
\begin{frame}
+\frametitle{kinitrd package details}
+\begin{itemize}
+\item in xml the cdrom tag can be used instead of a mirror
+\item then d-i needs to load components (udeb) from cdrom instead of web
+\item this is the reason for kinitrd including two versions of the initrd:
+\begin{itemize}
+\item one with the d-i configured to load udebs from a web source
+\item a second with d-i configured to load udebs from a cdrom source
+\end{itemize}
+\item there is a switch in the 'elbe create' path to select the right initrd for
+ the project
+\end{itemize}
+\end{frame}
+
+
+\subsection{Makefile (post-install)}
+
+\begin{frame}[fragile]
\frametitle{copy files to host}
+\begin{itemize}
+\item all files produced by elbe are stored inside buildenv.img:/opt/elbe
+\item they should be transfered into the build dir on the Host PC
+\item the emulator is shutdown,
+
+then e2cp can be used to retrive the files:
+\begin{lstlisting}
+e2cp buildenv.img?offset=32768:/opt/elbe/licence.txt .
+\end{lstlisting}
+\item this is done for all files by the Makefile, e.g:
+\begin{lstlisting}
+% if tgt.has("images"):
+% for mtd in tgt.node("images"):
+% if mtd.has("partitions"):
+ e2cp buildenv.img?offset=${loop_offset}:/opt/elbe/${mtd.text("name")} .
+% endif
+% if mtd.has("binary"):
+ e2cp buildenv.img?offset=${loop_offset}:${mtd.text("binary")} ${mtd.text("name")}
+\end{lstlisting}
+\end{itemize}
\end{frame}