summaryrefslogtreecommitdiff
path: root/distribution/elbe-adk
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2015-07-01 16:12:36 +0200
committerManuel Traut <manut@linutronix.de>2015-07-01 16:12:36 +0200
commit1d13e674d7be4bf9aa69139deac6737bf60af17b (patch)
tree5cacf42d37efa861d2487efa4585e4eb3b99d7ae /distribution/elbe-adk
parent6723cb895ae583ed95724a5d3d7acab756340263 (diff)
rework elbe training stuff to match current elbe
also delete presentations that are completely outdated and rename presentations to better identify their content Signed-off-by: Manuel Traut <manut@linutronix.de>
Diffstat (limited to 'distribution/elbe-adk')
-rw-r--r--distribution/elbe-adk/Kconfig5
-rw-r--r--distribution/elbe-adk/Makefile1
-rw-r--r--distribution/elbe-adk/mini.xml27
-rw-r--r--distribution/elbe-adk/myapp/AUTHORS0
-rw-r--r--distribution/elbe-adk/myapp/ChangeLog0
-rw-r--r--distribution/elbe-adk/myapp/Makefile.am5
-rw-r--r--distribution/elbe-adk/myapp/NEWS0
-rw-r--r--distribution/elbe-adk/myapp/README0
-rwxr-xr-xdistribution/elbe-adk/myapp/autogen.sh2
-rw-r--r--distribution/elbe-adk/myapp/configure.ac23
-rw-r--r--distribution/elbe-adk/myapp/myapp.c12
-rw-r--r--distribution/elbe-adk/myrepo/conf/distributions12
-rw-r--r--distribution/elbe-adk/myrepo/conf/updates6
-rw-r--r--distribution/elbe-adk/pres_elbe-adk_en.tex540
14 files changed, 633 insertions, 0 deletions
diff --git a/distribution/elbe-adk/Kconfig b/distribution/elbe-adk/Kconfig
new file mode 100644
index 0000000..e44a76b
--- /dev/null
+++ b/distribution/elbe-adk/Kconfig
@@ -0,0 +1,5 @@
+config ELBE_ADK
+ bool "ELBE ADK"
+ default y
+ help
+ Example how to use the elbe adk
diff --git a/distribution/elbe-adk/Makefile b/distribution/elbe-adk/Makefile
new file mode 100644
index 0000000..f768656
--- /dev/null
+++ b/distribution/elbe-adk/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_ELBE_ADK) += pres_elbe-adk_en.pdf
diff --git a/distribution/elbe-adk/mini.xml b/distribution/elbe-adk/mini.xml
new file mode 100644
index 0000000..956ffc9
--- /dev/null
+++ b/distribution/elbe-adk/mini.xml
@@ -0,0 +1,27 @@
+<ns0:RootFileSystem xmlns:ns0="https://www.linutronix.de/projects/Elbe"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" created="2009-05-20T08:50:56" revision="6" xsi:schemaLocation="https://www.linutronix.de/projects/Elbe dbsfed.xsd">
+ <project>
+ <name>mini xml</name>
+ <version>1</version>
+ <description>
+ optimal to use as buildenv
+ </description>
+ <buildtype>armhf</buildtype>
+ <mirror>
+ <primary_host>ftp.debian.org</primary_host>
+ <primary_path>/debian</primary_path>
+ <primary_proto>http</primary_proto>
+ </mirror>
+ <suite>wheezy</suite>
+ </project>
+ <target>
+ <hostname>mini</hostname>
+ <domain>linutronix</domain>
+ <passwd>foo</passwd>
+ <finetuning>
+ </finetuning>
+ <pkg-list>
+ <pkg>bash</pkg>
+ </pkg-list>
+ </target>
+</ns0:RootFileSystem>
diff --git a/distribution/elbe-adk/myapp/AUTHORS b/distribution/elbe-adk/myapp/AUTHORS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/distribution/elbe-adk/myapp/AUTHORS
diff --git a/distribution/elbe-adk/myapp/ChangeLog b/distribution/elbe-adk/myapp/ChangeLog
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/distribution/elbe-adk/myapp/ChangeLog
diff --git a/distribution/elbe-adk/myapp/Makefile.am b/distribution/elbe-adk/myapp/Makefile.am
new file mode 100644
index 0000000..73ff4e8
--- /dev/null
+++ b/distribution/elbe-adk/myapp/Makefile.am
@@ -0,0 +1,5 @@
+bin_PROGRAMS = myapp
+myapp_SOURCES = myapp.c
+
+EXTRA_DIST = debian/changelog debian/compat debian/control debian/rules \
+ debian/source/format
diff --git a/distribution/elbe-adk/myapp/NEWS b/distribution/elbe-adk/myapp/NEWS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/distribution/elbe-adk/myapp/NEWS
diff --git a/distribution/elbe-adk/myapp/README b/distribution/elbe-adk/myapp/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/distribution/elbe-adk/myapp/README
diff --git a/distribution/elbe-adk/myapp/autogen.sh b/distribution/elbe-adk/myapp/autogen.sh
new file mode 100755
index 0000000..9088512
--- /dev/null
+++ b/distribution/elbe-adk/myapp/autogen.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+autoreconf -sif
diff --git a/distribution/elbe-adk/myapp/configure.ac b/distribution/elbe-adk/myapp/configure.ac
new file mode 100644
index 0000000..109e8ea
--- /dev/null
+++ b/distribution/elbe-adk/myapp/configure.ac
@@ -0,0 +1,23 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.69])
+AC_INIT([myapp], [1.0], [manut@linutronix.de])
+AM_INIT_AUTOMAKE([-Wall -Werror])
+AC_CONFIG_SRCDIR([myapp.c])
+AC_CONFIG_HEADERS([config.h])
+
+# Checks for programs.
+AC_PROG_CC
+
+# Checks for libraries.
+
+# Checks for header files.
+
+# Checks for typedefs, structures, and compiler characteristics.
+
+# Checks for library functions.
+
+AC_CONFIG_FILES([Makefile])
+
+AC_OUTPUT
diff --git a/distribution/elbe-adk/myapp/myapp.c b/distribution/elbe-adk/myapp/myapp.c
new file mode 100644
index 0000000..4e39438
--- /dev/null
+++ b/distribution/elbe-adk/myapp/myapp.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+#include <time.h>
+
+int main (int argc, char **argv)
+{
+ while (1) {
+ printf ("Hello ELBE\n");
+ sleep (1);
+ }
+
+ return 0;
+}
diff --git a/distribution/elbe-adk/myrepo/conf/distributions b/distribution/elbe-adk/myrepo/conf/distributions
new file mode 100644
index 0000000..9cd8d3b
--- /dev/null
+++ b/distribution/elbe-adk/myrepo/conf/distributions
@@ -0,0 +1,12 @@
+Origin: myrepo
+Label: myrepo
+Suite: stable
+Codename: wheezy
+Update: - myremoterepo
+Version:
+Architectures: i386 amd64 armel source
+Components: main
+Description: my debian packages
+DebIndices: Packages Release . .gz .bz2
+UDebIndices: Packages . .gz .bz2
+DscIndices: Sources Release .gz .bz2
diff --git a/distribution/elbe-adk/myrepo/conf/updates b/distribution/elbe-adk/myrepo/conf/updates
new file mode 100644
index 0000000..e8df2b1
--- /dev/null
+++ b/distribution/elbe-adk/myrepo/conf/updates
@@ -0,0 +1,6 @@
+Name: myremoterepo
+Method: http://localhost/myrepo
+Components: main
+Architectures: i386 amd64 source
+VerifyRelease: blindtrust
+IgnoreRelease: yes
diff --git a/distribution/elbe-adk/pres_elbe-adk_en.tex b/distribution/elbe-adk/pres_elbe-adk_en.tex
new file mode 100644
index 0000000..4e9fc1a
--- /dev/null
+++ b/distribution/elbe-adk/pres_elbe-adk_en.tex
@@ -0,0 +1,540 @@
+\input{configpres}
+
+\title{ELBE ADK example}
+\maketitle
+
+\subsection{What will be done?}
+
+\begin{frame}
+\frametitle{Goal}
+\begin{itemize}
+\item generate an ELBE buildenv
+\item generate a software component and manage it with debian tools
+\item build own software component inside the ELBE buildenv
+\item include own application in target RFS
+\item define a stripped target RFS
+\item setup a local debian mirror
+\end{itemize}
+\end{frame}
+
+\subsection{generate a buildenv}
+
+\begin{frame}[fragile]
+\frametitle{use elbe-init.xml}
+\begin{lstlisting}
+$ cp /usr/share/doc/elbe-doc/examples/elbe-init.xml .
+$ elbe init --directory=./initvm elbe-init.xml
+$ cd initvm
+$ make
+$ make run-con
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{mini.xml}
+ \begin{lstlisting}
+ <project>
+ <name>mini xml</name>
+ <version>1</version>
+ <description>
+ optimal to use as buildenv
+ </description>
+ <buildtype>armhf</buildtype>
+ <mirror>
+ <primary_host>ftp.debian.org</primary_host>
+ <primary_path>/debian</primary_path>
+ <primary_proto>http</primary_proto>
+ </mirror>
+ <suite>wheezy</suite>
+ </project>
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{mini.xml}
+ \begin{lstlisting}
+ <target>
+ <hostname>mini</hostname>
+ <domain>linutronix</domain>
+ <passwd>foo</passwd>
+ <finetuning>
+ </finetuning>
+ <pkg-list>
+ <pkg>bash</pkg>
+ </pkg-list>
+ </target>
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{build mini.xml}
+\begin{lstlisting}
+$ elbe control create_project mini.xml
+$ elbe control list_projects
+$ elbe build /var/cache/elbe/...
+\end{lstlisting}
+\end{frame}
+
+\subsection{build an own application}
+
+\begin{frame}[fragile]
+\frametitle{myapp.c}
+\begin{lstlisting}
+$ mkdir myapp
+$ cd myapp
+$ $EDITOR myapp.c
+\end{lstlisting}
+\begin{lstlisting}
+#include <stdio.h>
+#include <time.h>
+
+int main (int argc, char **argv)
+{
+ while (1) {
+ printf ("Hello ELBE\n");
+ sleep (1);
+ }
+
+ return 0;
+}
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{use autotools}
+\begin{lstlisting}
+$ $EDITOR Makefile.am
+\end{lstlisting}
+\begin{lstlisting}
+bin_PROGRAMS = myapp
+myapp_SOURCES = myapp.c
+\end{lstlisting}
+\begin{lstlisting}
+$ autoscan
+$ mv configure.scan configure.ac
+$ rm autoscan.log
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle {use autotools}
+\begin{lstlisting}
+$ $EDITOR configure.ac
+\end{lstlisting}
+\begin{verbatim}
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.69])
+AC_INIT([myapp], [1.0], [manut@linutronix.de])
+AM_INIT_AUTOMAKE([-Wall -Werror])
+AC_CONFIG_SRCDIR([myapp.c])
+AC_CONFIG_HEADERS([config.h])
+
+# Checks for programs.
+AC_PROG_CC
+
+# Checks for libraries.
+
+# Checks for header files.
+
+# Checks for typedefs, structures, and compiler characteristics.
+
+# Checks for library functions.
+
+AC_CONFIG_FILES([Makefile])
+
+AC_OUTPUT
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{use autotools}
+\begin{lstlisting}
+$ touch NEWS README AUTHORS ChangeLog
+$ $EDITOR autogen.sh
+\end{lstlisting}
+\begin{lstlisting}
+#!/bin/bash
+automake --add-missing
+autoreconf -sif
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{use autotools}
+\begin{lstlisting}
+$ chmod +x autogen.sh
+$ ls -lh
+insgesamt 12K
+-rw-r--r-- 1 local local 0 Jan 7 09:45 AUTHORS
+-rwxr-xr-x 1 local local 28 Jan 7 09:24 autogen.sh
+-rw-r--r-- 1 local local 0 Jan 7 09:45 ChangeLog
+-rw-r--r-- 1 local local 496 Jan 7 09:20 configure.ac
+-rw-r--r-- 1 local local 35 Jan 7 09:35 Makefile.am
+-rw-r--r-- 1 local local 143 Jan 7 09:18 myapp.c
+-rw-r--r-- 1 local local 0 Jan 7 09:45 NEWS
+-rw-r--r-- 1 local local 0 Jan 7 09:45 README
+# these files may be added to your vcs
+$ ./autogen.sh
+$ ./configure
+$ make
+$ ./myapp
+Hello ELBE
+Hello ELBE
+^C
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{debianize myapp}
+\begin{lstlisting}
+$ dh_make -n -p myapp_1.0 -e manut@linutronix.de
+$ cd debian
+$ rm *.ex *.EX docs README* copyright
+$ $EDITOR changelog
+\end{lstlisting}
+\begin{lstlisting}
+myapp (1.0) stable; urgency=low
+
+ * Initial Release.
+
+ -- Manuel Traut <manut@linutronix.de> Tue, 07 Jan 2014 10:20:20 +0100
+\end{lstlisting}
+\begin{lstlisting}
+$ ls -lh
+insgesamt 16K
+-rw-r--r-- 1 local local 122 Jan 7 10:20 changelog
+-rw-r--r-- 1 local local 2 Jan 7 10:20 compat
+-rw-r--r-- 1 local local 517 Jan 7 10:20 control
+-rwxr-xr-x 1 local local 135 Jan 7 10:20 rules
+drwxr-xr-x 2 local local 19 Jan 7 10:20 source
+# these files may be added to your vcs
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{debianize myapp}
+\begin{lstlisting}
+$ cd ..
+$ $EDITOR Makefile.am
+\end{lstlisting}
+\begin{lstlisting}
+bin_PROGRAMS = myapp
+myapp_SOURCES = myapp.c
+
+EXTRA_DIST = debian/changelog debian/compat debian/control debian/rules \
+ debian/source/format
+\end{lstlisting}
+\begin{lstlisting}
+$ dpkg-buildpackage
+$ ls ..
+myapp myapp_1.0_i386.deb
+myapp_1.0.dsc myapp_1.0.tar.gz
+myapp_1.0_i386.changes
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{host myapp source in a debian repository}
+\begin{lstlisting}
+$ cd ..
+$ mkdir -p myrepo/conf
+$ cd myrepo
+$ $EDITOR conf/distributions
+\end{lstlisting}
+\begin{verbatim}
+Origin: myrepo
+Label: myrepo
+Suite: stable
+Codename: wheezy
+Update: - myremoterepo
+Version:
+Architectures: armhf source
+Components: main
+Description: my debian packages
+\end{verbatim}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{host myapp source in a debian repository}
+\begin{lstlisting}
+$ reprepro includedsc wheezy ../myapp_1.0.dsc
+$ sudo mkdir /var/www/
+$ sudo rsync -av --exclude=db --exclude=conf * \
+/var/www/myrepo/
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{build debian package inside the buildenv}
+\begin{lstlisting}
+# login to elbe-initvm
+$ elbe initvm attach (login: root, password: root)
+\end{lstlisting}
+change into buildenv and configure apt to use myrepo
+\begin{lstlisting}
+$ elbe chroot /var/cache/elbe/...
+$ echo 'deb-src http://10.0.2.2/myrepo wheezy main' >> /etc/apt/sources.list
+$ apt-get update
+\end{lstlisting}
+retrive myapp source package and build armhf binary package
+\begin{lstlisting}
+$ apt-get source myapp
+$ cd myapp-1.0
+$ ./autogen.sh
+$ dpkg-buildpackage -b
+\end{lstlisting}
+copy the package to the host PC and install it into the buildenv
+\begin{lstlisting}
+$ scp ../myapp*.changes ../myapp*.deb 10.0.2.2:/tmp
+$ dpkg -i ../myapp*.deb
+$ myapp
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{add myapp armhf package to the repo}
+\begin{lstlisting}
+$ cd ../myrepo
+$ reprepro include wheezy /tmp/myapp_1.0_armhf.changes
+$ sudo rsync -av --exclude=db --exclude=conf * \
+/var/www/myrepo/
+\end{lstlisting}
+\end{frame}
+
+
+\subsection{include app in target RFS}
+
+\begin{frame}[fragile]
+\frametitle{add repo including myapp}
+\begin{lstlisting}
+$ cd ..
+$ $EDIT mini.xml
+\end{lstlisting}
+\begin{verbatim}
+...
+ <mirror>
+ <primary_host>ftp.debian.org</primary_host>
+ <primary_path>/debian</primary_path>
+ <primary_proto>http</primary_proto>
+ <url-list>
+ <url>
+ <binary>http://LOCALMACHINE/myrepo wheezy main</binary>
+ <source>http://LOCALMACHINE/myrepo wheezy main</source>
+ </url>
+ </url-list>
+ </mirror>
+ <noauth/>
+...
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{add myapp}
+\begin{verbatim}
+...
+ <target>
+ <hostname>mini</hostname>
+ <domain>linutronix</domain>
+ <passwd>foo</passwd>
+ <finetuning>
+ <rm>var/cache/apt/archives/*.deb</rm>
+ </finetuning>
+ <pkg-list>
+ <pkg>bash</pkg>
+ <pkg>myapp</pkg>
+ </pkg-list>
+ </target>
+</ns0:RootFileSystem>
+\end{verbatim}
+\end{frame}
+
+\subsection{define a striped target RFS}
+\begin{frame}[fragile]
+\frametitle{define sdcard image}
+\begin{verbatim}
+...
+ <target>
+ <hostname>mini</hostname>
+ <domain>linutronix</domain>
+ <passwd>foo</passwd>
+ <console>ttyAMA0,115200</console>
+ <package>
+ <tar>
+ <name>rootfs.tar.gz</name>
+ </tar>
+ </package>
+ <images>
+ <msdoshd>
+ <name>my.img</name>
+ <size>64MiB</size>
+ <partition>
+ <size>remain</size>
+ <label>rfs</label>
+ </partition>
+ </msdoshd>
+ </images>
+...
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{create fstab and set elbe mode}
+\begin{verbatim}
+...
+ </images>
+ <fstab>
+ <bylabel>
+ <label>rfs</label>
+ <mountpoint>/</mountpoint>
+ <fs>
+ <type>ext2</type>
+ <tune2fs>-i 0</tune2fs>
+ </fs>
+ </bylabel>
+ </fstab>
+ <diet />
+ <norecommend />
+ <finetuning>
+...
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{build and extract target as nfsroot}
+\begin{lstlisting}
+$ elbe control set_xml /var/cache/elbe/.. mini.xml
+$ elbe control build /var/cache/elbe/..
+$ elbe list_files /var/cache/elbe/..
+$ elbe get_file /var/cache/elbe/.. elbe-report.txt
+$ elbe get_file /var/cache/elbe/.. rootfs.tar.gz
+\end{lstlisting}
+hint: it is possible to generate a html page from the elbe-report.txt:
+\begin{lstlisting}
+$ asciidoc elbe-report.txt
+\end{lstlisting}
+host the nfs root filesystem
+\begin{lstlisting}
+$ sudo mkdir -p /nfs/elbe-armhf
+$ sudo tar xzf rootfs.tar.gz -C /nfs/elbe-armhf
+$ su -c \
+'echo "/nfs *(rw,sync,no_subtree_check,insecure) \
+>> /etc/exports"'
+$ sudo /etc/init.d/nfs-kernel-server restart
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{build current kernel for qemu armhf boot}
+\begin{verbatim}
+$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux
+$ cd linux
+$ mkdir ../linux-qemu-arm
+$ ARCH=arm CROSS_COMPILE=arm-none-eabi- make O=../linux-qemu-arm versatile_defconfig
+$ # enable Kernel Features / Use the ARM EABI to compile the kernel
+$ # Allow old ABI binaries to run with this kernel
+$ # Networking support / Networking options / TCP/IP networking /
+$ # IP: kernel level autoconfiguration / IP: DHCP Support
+$ ARCH=arm CROSS_COMPILE=arm-none-eabi- make O=../linux-qemu-arm menuconfig
+$ ARCH=arm CROSS_COMPILE=arm-none-eabi- make O=../linux-qemu-arm -j5
+$ cd ..
+\end{verbatim}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{boot nfsroot with qemu}
+\begin{lstlisting}
+qemu-system-arm -M versatilepb -no-reboot \
+ -m 256 -usb \
+ -kernel linux-qemu-arm/arch/arm/boot/zImage \
+ -append 'root=/dev/nfs nfsroot=10.0.2.2:/nfs/elbe-armhf
+ ip=dhcp init=/usr/bin/myapp'
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{strip the nfsroot}
+\begin{verbatim}
+$ sudo rm -rf /nfs/elbe-armhf/etc
+$ sudo rm -rf /nfs/elbe-armhf/sbin
+$ sudo rm -rf /nfs/elbe-armhf/var
+$ sudo rm -rf /nfs/elbe-armhf/usr/share
+$ sudo rm -rf /nfs/elbe-armhf/usr/lib
+$ sudo rm -rf /nfs/elbe-armhf/usr/sbin
+$ sudo cp /nfs/elbe-armhf/usr/bin/myapp .
+$ sudo rm -rf /nfs/elbe-armhf/usr/bin/*
+$ sudo mv myapp /nfs/elbe-armhf/usr/bin/
+$ sudo cp -a /nfs/elbe-armhf/lib/arm-linux-gnueabi/ld-* .
+$ sudo cp -a /nfs/elbe-armhf/lib/arm-linux-gnueabi/libc-2.13.so .
+$ sudo cp -a /nfs/elbe-armhf/lib/arm-linux-gnueabi/libc.so.6 .
+$ sudo rm /nfs/elbe-armhf/lib/arm-linux-gnueabi/*
+$ sudo mv libc-2.13.so /nfs/elbe-armhf/lib/arm-linux-gnueabi/
+$ sudo mv libc.so.6 /nfs/elbe-armhf/lib/arm-linux-gnueabi/
+$ sudo mv ld-* /nfs/elbe-armhf/lib/arm-linux-gnueabi/
+\end{verbatim}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{update the ELBE XML file}
+\begin{verbatim}
+$ sudo mkdir /nfs/elbe-armhf-orig
+$ sudo tar xzf rootfs.tar.gz -C /nfs/elbe-armhf-orig/
+$ elbe pkgdiff
+$ sudo elbe diff /nfs/elbe-armhf-orig /nfs/elbe-armhf > diff.txt
+$ cd ..
+\end{verbatim}
+\begin{verbatim}
+$ vim mini.xml
+$ # place cursor in finetuning section
+$ <ESC>:read target/diff.txt<RETURN>
+$ # remove everything until 'suggesting:'
+$ <ESC>:x<RETURN>
+\end{verbatim}
+\begin{verbatim}
+$ elbe create --directory=target-stripped mini.xml
+$ cd target-stripped
+$ make
+$ # get debian kernel and initrd from the buildenv:
+$ make .elbe-vm/vmkernel .elbe-vm/vminitrd
+$ # boot the image
+$ qemu-system-arm -M versatilepb \
+-kernel .elbe-vm/vmkernel -initrd .elbe-vm/vminitrd \
+-append 'root=/dev/sda1 init=/usr/bin/myapp' my.img
+\end{verbatim}
+\end{frame}
+
+\subsection{setup own debian mirror}
+
+\begin{frame}[fragile]
+\frametitle{partial clone a remote debian mirror}
+\begin{lstlisting}
+$ mkdir -p /mirrors/debian
+$ cd debian
+$ debmirror -p -d wheezy, -a i386,amd64,armhf \
+ --di-dist=wheezy \
+ --method=http --no-check-gpg \
+ -h ftp.de.debian.org .
+$ cd /var/www/html
+$ ln -s /mirrors/debian
+\end{lstlisting}
+\end{frame}
+
+\subsection{Conclusion}
+\begin{frame}
+\begin{itemize}
+\item generate an ELBE buildenv with a minimal XML file
+\item manage software components with autotools, dpkg and reprepro
+\item build own software component inside the ELBE buildenv
+\item include own debian packages in the target RFS
+\item edit a running rootfs and make it reproducable
+\item setup a partial, local debian mirror
+\end{itemize}
+\end{frame}
+
+\input{tailpres}