summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2014-03-16 20:25:02 +0100
committerManuel Traut <manut@mecka.net>2014-03-16 20:25:02 +0100
commit6f4862dba013c38bfba0109ba9363195b5171c7b (patch)
treefe366d5a7ccc01860b047c551bda12324c7029ad
parent5761d1eb8a47437375c4f61bb54d09e60b67c816 (diff)
parent2f46ad6a6f7393dc7898672a7ea3337395bafae9 (diff)
Merge ../projects/schulung
-rw-r--r--application-devel/embedded-devel/pres_embedded-devel_de.tex4
-rw-r--r--configpres.tex10
-rw-r--r--distribution/debian/Makefile (renamed from distribution/elbe-devel/Makefile)0
-rw-r--r--distribution/debian/debian.pngbin0 -> 35981 bytes
-rw-r--r--distribution/debian/dsa.pngbin0 -> 77319 bytes
-rw-r--r--distribution/debian/pres_debian.tex136
-rw-r--r--distribution/debian/qa.pngbin0 -> 238015 bytes
-rw-r--r--distribution/debian/x11-bugs.pngbin0 -> 94506 bytes
-rw-r--r--distribution/debian/x11-buildd.pngbin0 -> 111081 bytes
-rw-r--r--distribution/debian/x11-git.pngbin0 -> 115865 bytes
-rw-r--r--distribution/debian/x11-pkg.pngbin0 -> 114298 bytes
-rw-r--r--distribution/elbe-example/Makefile9
-rw-r--r--distribution/elbe-example/mini-incl-target-stripped.xml934
-rw-r--r--distribution/elbe-example/mini-incl-target.xml78
-rw-r--r--distribution/elbe-example/mini.xml42
-rw-r--r--distribution/elbe-example/myapp/AUTHORS0
-rw-r--r--distribution/elbe-example/myapp/ChangeLog0
-rw-r--r--distribution/elbe-example/myapp/Makefile.am5
-rw-r--r--distribution/elbe-example/myapp/NEWS0
-rw-r--r--distribution/elbe-example/myapp/README0
-rwxr-xr-xdistribution/elbe-example/myapp/autogen.sh2
-rw-r--r--distribution/elbe-example/myapp/configure.ac23
-rw-r--r--distribution/elbe-example/myapp/myapp.c12
-rw-r--r--distribution/elbe-example/myrepo/conf/distributions9
-rw-r--r--distribution/elbe-example/myrepo/conf/updates6
-rw-r--r--distribution/elbe-example/pres_elbe-example_en.tex556
-rw-r--r--distribution/elbe-internals/Makefile9
-rw-r--r--distribution/elbe-internals/pres_elbe-devel_en.tex (renamed from distribution/elbe-devel/pres_elbe-devel_en.tex)6
-rw-r--r--distribution/elbe-usage/pres_elbe-usage_en.tex405
-rw-r--r--distribution/elbe/Makefile9
-rw-r--r--distribution/elbe/elbe-logo.pngbin0 -> 9018 bytes
-rw-r--r--distribution/elbe/pres_elbe.tex106
-rw-r--r--distribution/section.tex2
-rw-r--r--frameworks/middleware/examples/celery/README3
-rw-r--r--frameworks/middleware/examples/celery/exec_task.py15
-rwxr-xr-xframeworks/middleware/examples/celery/test.py36
-rwxr-xr-xframeworks/middleware/examples/celery/worker.sh2
-rw-r--r--frameworks/middleware/examples/corba/AUTHORS0
-rw-r--r--frameworks/middleware/examples/corba/ChangeLog0
-rw-r--r--frameworks/middleware/examples/corba/Makefile.am29
-rw-r--r--frameworks/middleware/examples/corba/NEWS0
-rw-r--r--frameworks/middleware/examples/corba/README12
-rwxr-xr-xframeworks/middleware/examples/corba/autogen.sh3
-rw-r--r--frameworks/middleware/examples/corba/configure.ac28
-rw-r--r--frameworks/middleware/examples/corba/ping_I.cpp1
-rw-r--r--frameworks/middleware/examples/dbus/AUTHORS0
-rw-r--r--frameworks/middleware/examples/dbus/ChangeLog0
-rw-r--r--frameworks/middleware/examples/dbus/Makefile.am8
-rw-r--r--frameworks/middleware/examples/dbus/NEWS0
-rw-r--r--frameworks/middleware/examples/dbus/README0
-rwxr-xr-xframeworks/middleware/examples/dbus/autogen.sh3
-rwxr-xr-xframeworks/middleware/examples/dbus/compile.sh3
-rw-r--r--frameworks/middleware/examples/dbus/configure.ac24
-rw-r--r--frameworks/middleware/examples/dbus/ping-client.c24
-rw-r--r--frameworks/middleware/examples/dbus/ping-server.c2
-rwxr-xr-xframeworks/middleware/examples/soap/client.py11
-rwxr-xr-xframeworks/middleware/examples/soap/server.py18
-rwxr-xr-xframeworks/middleware/examples/xmlrpc/client.py14
-rwxr-xr-xframeworks/middleware/examples/xmlrpc/server.py21
-rw-r--r--frameworks/middleware/examples/xmpp/README28
-rw-r--r--frameworks/middleware/examples/xmpp/client.cpp24
-rw-r--r--frameworks/middleware/examples/xmpp/myclient.cpp32
-rw-r--r--frameworks/middleware/examples/xmpp/myclient.h17
-rw-r--r--frameworks/middleware/examples/xmpp/xmpp.pro15
-rw-r--r--frameworks/middleware/pres_middleware.tex707
-rw-r--r--images/714px-Middleware_Schema.pngbin0 -> 14057 bytes
-rw-r--r--images/BigTreeClassicRCU.pngbin0 -> 10872 bytes
-rw-r--r--images/GracePeriodGood.pngbin0 -> 15850 bytes
-rw-r--r--images/asource.pngbin0 -> 126760 bytes
-rw-r--r--images/emu-process.pngbin11200 -> 20008 bytes
-rw-r--r--images/kdirsource.pngbin0 -> 57774 bytes
-rw-r--r--images/ksource.pngbin0 -> 74272 bytes
-rw-r--r--images/overview.pngbin0 -> 14793 bytes
-rw-r--r--images/pinh.pngbin0 -> 12157 bytes
-rw-r--r--images/pinv.pngbin0 -> 15551 bytes
-rw-r--r--images/pthread_kernelshark.pngbin0 -> 8857 bytes
-rw-r--r--images/rtarch.pngbin0 -> 95563 bytes
-rw-r--r--images/rtkernel.pngbin0 -> 41315 bytes
-rw-r--r--images/rtsource.pngbin0 -> 51157 bytes
-rw-r--r--images/rwlockRCUupdate.jpgbin0 -> 44965 bytes
-rw-r--r--images/trace_overview.diabin0 -> 2201 bytes
-rw-r--r--images/trace_overview.pngbin0 -> 21041 bytes
-rw-r--r--kernel-devel/kernel-debugging/pres_kernel-debugging_en.tex86
-rw-r--r--kernel-devel/kernel-perf/Makefile9
-rw-r--r--kernel-devel/kernel-perf/pres_kernel-perf_en.tex135
-rw-r--r--kernel-devel/kernel-tracing/pres_kernel-tracing_en.tex445
-rw-r--r--kernel-devel/kexec-and-crash-kernel/Makefile9
-rw-r--r--kernel-devel/kexec-and-crash-kernel/crashkernel_patches/crashkernel.diff65
-rw-r--r--kernel-devel/kexec-and-crash-kernel/crashkernel_patches/kexec_fix_arm_braindamage.diff28
-rw-r--r--kernel-devel/kexec-and-crash-kernel/crashkernel_patches/zreladdr.diff13
-rw-r--r--kernel-devel/kexec-and-crash-kernel/pres_kexec_and_crashkernel_en.tex70
-rw-r--r--linux-basics/filesystems/pres_filesystems_en.tex17
-rw-r--r--realtime/rt-internals/Makefile9
-rw-r--r--realtime/rt-internals/pres_rt-internals_en.tex511
-rw-r--r--realtime/rt-specialties/pres_rt-specialties_de.tex5
95 files changed, 4584 insertions, 261 deletions
diff --git a/application-devel/embedded-devel/pres_embedded-devel_de.tex b/application-devel/embedded-devel/pres_embedded-devel_de.tex
index 22e0d8d..e8f2e87 100644
--- a/application-devel/embedded-devel/pres_embedded-devel_de.tex
+++ b/application-devel/embedded-devel/pres_embedded-devel_de.tex
@@ -344,7 +344,7 @@ libhello.so.1 -> libhello.so.1.0.2
# New minor version
libhello.so.1 -> libhello.so.1.0.3
# New Major version
-libhello.so.2 -> libhello.so.1.0.1
+libhello.so.2 -> libhello.so.2.0.1
\end{verbatim}
SONAME beeinhaltet die Majornumber. Der Symbolic Link mit
der Majornumber(SONAME) zeigt normalerweise auf die Bibliotheksversion
@@ -392,7 +392,7 @@ GNU make kontrolliert und automatisiert Buildprozesse.
\begin{frame}[containsverbatim]
\frametitle{Einfaches Beispiel}
\begin{lstlisting}[language=make,showtabs=true,tabsize=4,tab=\rightarrowfill]
-% Makefile
+# Makefile
hello: hello.o
gcc -o $@ $<
diff --git a/configpres.tex b/configpres.tex
index c2189cd..0c4ab4d 100644
--- a/configpres.tex
+++ b/configpres.tex
@@ -18,12 +18,11 @@
numbers=left,
stepnumber=1,
numbersep=5pt,
- numberstyle=\tiny,
breaklines=true,
breakautoindent=true,
postbreak=\space,
tabsize=2,
- basicstyle=\ttfamily\tiny,
+ basicstyle=\ttfamily\small,
showspaces=false,
showstringspaces=false,
extendedchars=true,
@@ -35,11 +34,4 @@
\begin{document}
-\AtBeginSubsection[]
-{
-\begin{frame}{Outline}
-\tableofcontents[currentsection,currentsubsection]
-\end{frame}
-}
-
\input{section}
diff --git a/distribution/elbe-devel/Makefile b/distribution/debian/Makefile
index d641258..d641258 100644
--- a/distribution/elbe-devel/Makefile
+++ b/distribution/debian/Makefile
diff --git a/distribution/debian/debian.png b/distribution/debian/debian.png
new file mode 100644
index 0000000..e23ddfb
--- /dev/null
+++ b/distribution/debian/debian.png
Binary files differ
diff --git a/distribution/debian/dsa.png b/distribution/debian/dsa.png
new file mode 100644
index 0000000..85d9e26
--- /dev/null
+++ b/distribution/debian/dsa.png
Binary files differ
diff --git a/distribution/debian/pres_debian.tex b/distribution/debian/pres_debian.tex
new file mode 100644
index 0000000..5736c4e
--- /dev/null
+++ b/distribution/debian/pres_debian.tex
@@ -0,0 +1,136 @@
+\input{configpres}
+
+\begin{frame}
+\begin{figure}[ht]
+\includegraphics[width=1.0\textwidth]{debian.png}
+\end{figure}
+Manuel Traut, Linutronix GmbH
+\end{frame}
+
+\subsection{Agenda}
+\begin{frame}
+Debian is a community driven distribution,
+
+well-known for
+
+its high quality standard
+
+and a clear focus on Security.
+
+We also have a look at the open-source infrastructure of Debian.
+\end{frame}
+
+\subsection{community driven distribution}
+\begin{frame}
+The Debian Project is
+\begin{itemize}
+\item a worldwide group of volunteers
+\item an operating system distribution
+\item composed entirely of free software
+\end{itemize}
+\end{frame}
+
+
+\subsection{well-known for}
+\begin{frame}
+its huge number of supported architectures
+\begin{itemize}
+\item 32-Bit PC/Intel IA-32 (i386)
+\item 64-Bit PC/Intel EM64T/x86-64 (amd64)
+\item ARM EABI (armel and armhf for devices with FPU)
+\item MIPS (mips - Big-Endian and mipsel - Little-Endian)
+\item Motorola/IBM PowerPC (powerpc)
+\item Sun/Oracle SPARC (sparc)
+\item Intel Itanium (ia64)
+\item IBM S/390 (31 Bit s390 und 64 Bit s390x)
+\end{itemize}
+
+\dots and its huge number of packages (about 35.000 per arch)
+\end{frame}
+
+
+\subsection{its high quality standard}
+\begin{frame}
+There is an extensive set of policies and procedures for packaging and
+delivering software.
+
+These standards are backed up by
+\begin{itemize}
+\item tools (dh\_make, lintian, debuild, reprepro)
+\item automation (wanna\_build, version tracking)
+\item documentation (http://debian.org/doc/):
+\begin{itemize}
+ \item New Maintainer Guide
+ \item Debian Policies
+ \item Porting Guide
+ \item Developer Reference
+ \item Securing Debian
+\end{itemize}
+\end{itemize}
+All of Debian's key elements are open and visible.
+\end{frame}
+
+
+\subsection{and a clear focus on security.}
+\begin{frame}
+\begin{itemize}
+\item Security issues are discussed openly on the debian-security mailing list
+\item When a security problem arises, the security update is prepared and
+ distributed as fast as possible.
+\item There is a 'secure by default' policy for service installations
+ which could impose restrictions on their normal use.
+\item Debian Security Advisories (DSAs) are sent to public mailing lists,
+ are published on http://www.debian.org/security/\#DSAS
+\end{itemize}
+\end{frame}
+
+\subsection{Debian Security Advisory}
+\begin{frame}
+\includegraphics[height=1.0\textheight]{dsa.png}
+\end{frame}
+
+\subsection{Debian Infrastructure}
+\begin{frame}
+Debian has a great infrastructure which is also available as open-source.
+
+The following slides show a few components of the infrastructure.
+\end{frame}
+
+\subsection{Debian Package Tracking System}
+\begin{frame}
+\includegraphics[width=1.0\textwidth]{qa.png}
+\end{frame}
+
+\subsection{Source Repo of a Debian Package}
+\begin{frame}
+\includegraphics[width=1.0\textwidth]{x11-git.png}
+\end{frame}
+
+\subsection{Debian Package Build}
+\begin{frame}
+\includegraphics[height=1.0\textheight]{x11-buildd.png}
+\end{frame}
+
+\subsection{Debian Bugtracker}
+\begin{frame}
+\includegraphics[height=1.0\textheight]{x11-bugs.png}
+\end{frame}
+
+\subsection{Debian Package Informations}
+\begin{frame}
+\includegraphics[height=1.0\textheight]{x11-pkg.png}
+\end{frame}
+
+\subsection{Conclusion}
+\begin{frame}
+Debian stands for
+\begin{itemize}
+\item a huge number of packages and supported architectures
+\item development is transparent and community driven
+\item a focus on security
+\item a strict licence compliance
+\item good documentation in different languages
+\end{itemize}
+\end{frame}
+
+\input{tailpres}
diff --git a/distribution/debian/qa.png b/distribution/debian/qa.png
new file mode 100644
index 0000000..1895399
--- /dev/null
+++ b/distribution/debian/qa.png
Binary files differ
diff --git a/distribution/debian/x11-bugs.png b/distribution/debian/x11-bugs.png
new file mode 100644
index 0000000..5213ce9
--- /dev/null
+++ b/distribution/debian/x11-bugs.png
Binary files differ
diff --git a/distribution/debian/x11-buildd.png b/distribution/debian/x11-buildd.png
new file mode 100644
index 0000000..75d4da8
--- /dev/null
+++ b/distribution/debian/x11-buildd.png
Binary files differ
diff --git a/distribution/debian/x11-git.png b/distribution/debian/x11-git.png
new file mode 100644
index 0000000..514ab1b
--- /dev/null
+++ b/distribution/debian/x11-git.png
Binary files differ
diff --git a/distribution/debian/x11-pkg.png b/distribution/debian/x11-pkg.png
new file mode 100644
index 0000000..9542fae
--- /dev/null
+++ b/distribution/debian/x11-pkg.png
Binary files differ
diff --git a/distribution/elbe-example/Makefile b/distribution/elbe-example/Makefile
new file mode 100644
index 0000000..d641258
--- /dev/null
+++ b/distribution/elbe-example/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/distribution/elbe-example/mini-incl-target-stripped.xml b/distribution/elbe-example/mini-incl-target-stripped.xml
new file mode 100644
index 0000000..30f8f48
--- /dev/null
+++ b/distribution/elbe-example/mini-incl-target-stripped.xml
@@ -0,0 +1,934 @@
+<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>
+ minimal target rfs including a simple app
+ buildenv to build the simple app
+ </description>
+ <buildtype>armel</buildtype>
+ <mirror>
+ <primary_host>ftp.debian.org</primary_host>
+ <primary_path>/debian</primary_path>
+ <primary_proto>http</primary_proto>
+ <url-list>
+ <url>
+ <binary>http://debian.linutronix.de/elbe wheezy main</binary>
+ </url>
+ <url>
+ <binary>http://LOCALMACHINE/myrepo wheezy main</binary>
+ <source>http://LOCALMACHINE/myrepo wheezy main</source>
+ </url>
+ </url-list>
+ </mirror>
+ <noauth/>
+ <suite>wheezy</suite>
+ <buildimage>
+ <kinitrd>elbe-bootstrap</kinitrd>
+ <pkg-list>
+ <pkg>build-essential</pkg>
+ <pkg>debhelper</pkg>
+ <pkg>devscripts</pkg>
+ <pkg>autotools-dev</pkg>
+ <pkg>automake</pkg>
+ </pkg-list>
+ </buildimage>
+ </project>
+ <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>200MiB</size>
+ <partition>
+ <size>remain</size>
+ <label>rfs</label>
+ </partition>
+ </msdoshd>
+ </images>
+ <fstab>
+ <bylabel>
+ <label>rfs</label>
+ <mountpoint>/</mountpoint>
+ <fs>
+ <type>ext2</type>
+ <tune2fs>-i 0</tune2fs>
+ </fs>
+ </bylabel>
+ </fstab>
+ <diet />
+ <norecommend />
+ <finetuning>
+ <rm>var/cache/apt/archives/*.deb</rm>
+ <command>echo "T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100" &gt;&gt; etc/inittab</command>
+ <rm>/var/backups</rm>
+ <rm>/var/tmp</rm>
+ <rm>/var/log</rm>
+ <rm>/var/lib/dpkg/updates</rm>
+ <rm>/var/lib/dpkg/parts</rm>
+ <rm>/var/lib/dpkg/info</rm>
+ <rm>/var/lib/dpkg/alternatives</rm>
+ <rm>/var/lib/misc</rm>
+ <rm>/var/spool</rm>
+ <rm>/var/local</rm>
+ <rm>/usr/share</rm>
+ <rm>/usr/share/debianutils/shells</rm>
+ <rm>/usr/share/dict</rm>
+ <rm>/usr/share/libc-bin/nsswitch.conf</rm>
+ <rm>/usr/share/dpkg/archtable</rm>
+ <rm>/usr/share/dpkg/abitable</rm>
+ <rm>/usr/share/dpkg/ostable</rm>
+ <rm>/usr/share/dpkg/triplettable</rm>
+ <rm>/usr/share/dpkg/cputable</rm>
+ <rm>/usr/share/locale</rm>
+ <rm>/usr/share/locale/ja</rm>
+ <rm>/usr/share/locale/ja/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/ja/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/ja/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/mr</rm>
+ <rm>/usr/share/locale/mr/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/tr</rm>
+ <rm>/usr/share/locale/tr/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/tr/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/pa</rm>
+ <rm>/usr/share/locale/pa/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/pt_BR</rm>
+ <rm>/usr/share/locale/pt_BR/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/pt_BR/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/pt_BR/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/nn</rm>
+ <rm>/usr/share/locale/nn/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/dz</rm>
+ <rm>/usr/share/locale/dz/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/zh_TW</rm>
+ <rm>/usr/share/locale/zh_TW/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/zh_TW/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/zh_TW/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/en@boldquot</rm>
+ <rm>/usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/de</rm>
+ <rm>/usr/share/locale/de/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/de/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/de/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/vi</rm>
+ <rm>/usr/share/locale/vi/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/vi/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/vi/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/fr</rm>
+ <rm>/usr/share/locale/fr/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/fr/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/fr/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/ro</rm>
+ <rm>/usr/share/locale/ro/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/ro/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/ro/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/et</rm>
+ <rm>/usr/share/locale/et/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/et/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/et/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/es</rm>
+ <rm>/usr/share/locale/es/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/es/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/es/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/ga</rm>
+ <rm>/usr/share/locale/ga/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/ga/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/sv</rm>
+ <rm>/usr/share/locale/sv/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/sv/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/sv/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/eo</rm>
+ <rm>/usr/share/locale/eo/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/eo/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/lt</rm>
+ <rm>/usr/share/locale/lt/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/lt/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/id</rm>
+ <rm>/usr/share/locale/id/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/id/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/id/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/nl</rm>
+ <rm>/usr/share/locale/nl/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/nl/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/nl/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/bg</rm>
+ <rm>/usr/share/locale/bg/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/bg/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/bs</rm>
+ <rm>/usr/share/locale/bs/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/cs</rm>
+ <rm>/usr/share/locale/cs/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/cs/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/cs/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/it</rm>
+ <rm>/usr/share/locale/it/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/it/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/hu</rm>
+ <rm>/usr/share/locale/hu/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/hu/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/hu/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/hr</rm>
+ <rm>/usr/share/locale/hr/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/th</rm>
+ <rm>/usr/share/locale/th/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/zh_CN</rm>
+ <rm>/usr/share/locale/zh_CN/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/zh_CN/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/zh_CN/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/da</rm>
+ <rm>/usr/share/locale/da/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/da/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/pl</rm>
+ <rm>/usr/share/locale/pl/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/pl/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/pl/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/pt</rm>
+ <rm>/usr/share/locale/pt/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/pt/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/el</rm>
+ <rm>/usr/share/locale/el/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/el/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/ku</rm>
+ <rm>/usr/share/locale/ku/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/af</rm>
+ <rm>/usr/share/locale/af/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/fi</rm>
+ <rm>/usr/share/locale/fi/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/fi/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/ko</rm>
+ <rm>/usr/share/locale/ko/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/ko/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/en@quot</rm>
+ <rm>/usr/share/locale/en@quot/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/gl</rm>
+ <rm>/usr/share/locale/gl/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/gl/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/ne</rm>
+ <rm>/usr/share/locale/ne/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/ast</rm>
+ <rm>/usr/share/locale/ast/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/sl</rm>
+ <rm>/usr/share/locale/sl/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/ca</rm>
+ <rm>/usr/share/locale/ca/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/ca/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/ca/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/uk</rm>
+ <rm>/usr/share/locale/uk/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/uk/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/eu</rm>
+ <rm>/usr/share/locale/eu/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/eu/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/ms</rm>
+ <rm>/usr/share/locale/ms/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/nb</rm>
+ <rm>/usr/share/locale/nb/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/nb/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/sk</rm>
+ <rm>/usr/share/locale/sk/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/sk/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/sk/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/ru</rm>
+ <rm>/usr/share/locale/ru/LC_MESSAGES/bash.mo</rm>
+ <rm>/usr/share/locale/ru/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/ru/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/km</rm>
+ <rm>/usr/share/locale/km/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/locale/ky</rm>
+ <rm>/usr/share/locale/ky/LC_MESSAGES/tar.mo</rm>
+ <rm>/usr/share/locale/tl</rm>
+ <rm>/usr/share/locale/tl/LC_MESSAGES/dpkg.mo</rm>
+ <rm>/usr/share/doc</rm>
+ <rm>/usr/share/doc/libbz2-1.0/changelog.gz</rm>
+ <rm>/usr/share/doc/libbz2-1.0/copyright</rm>
+ <rm>/usr/share/doc/libbz2-1.0/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/libc6/README.hesiod.gz</rm>
+ <rm>/usr/share/doc/libc6/changelog.gz</rm>
+ <rm>/usr/share/doc/libc6/NEWS.Debian.gz</rm>
+ <rm>/usr/share/doc/libc6/FAQ.gz</rm>
+ <rm>/usr/share/doc/libc6/test-results-arm-linux-gnueabi-libc</rm>
+ <rm>/usr/share/doc/libc6/copyright</rm>
+ <rm>/usr/share/doc/libc6/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/libc6/NEWS.gz</rm>
+ <rm>/usr/share/doc/libc6/BUGS</rm>
+ <rm>/usr/share/doc/libc6/README.Debian.gz</rm>
+ <rm>/usr/share/doc/libselinux1/changelog.gz</rm>
+ <rm>/usr/share/doc/libselinux1/copyright</rm>
+ <rm>/usr/share/doc/libselinux1/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/debianutils/changelog.gz</rm>
+ <rm>/usr/share/doc/debianutils/copyright</rm>
+ <rm>/usr/share/doc/debianutils/README.shells.gz</rm>
+ <rm>/usr/share/doc/zlib1g/changelog.gz</rm>
+ <rm>/usr/share/doc/zlib1g/copyright</rm>
+ <rm>/usr/share/doc/zlib1g/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/sensible-utils/changelog.gz</rm>
+ <rm>/usr/share/doc/sensible-utils/copyright</rm>
+ <rm>/usr/share/doc/tar/AUTHORS</rm>
+ <rm>/usr/share/doc/tar/changelog.1.gz</rm>
+ <rm>/usr/share/doc/tar/changelog.gz</rm>
+ <rm>/usr/share/doc/tar/NEWS.Debian.gz</rm>
+ <rm>/usr/share/doc/tar/THANKS.gz</rm>
+ <rm>/usr/share/doc/tar/copyright</rm>
+ <rm>/usr/share/doc/tar/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/tar/README.Debian</rm>
+ <rm>/usr/share/doc/tar/NEWS.gz</rm>
+ <rm>/usr/share/doc/bash/POSIX.gz</rm>
+ <rm>/usr/share/doc/bash/COMPAT.gz</rm>
+ <rm>/usr/share/doc/bash/FAQ</rm>
+ <rm>/usr/share/doc/bash/inputrc.arrows</rm>
+ <rm>/usr/share/doc/bash/CHANGES.gz</rm>
+ <rm>/usr/share/doc/bash/copyright</rm>
+ <rm>/usr/share/doc/bash/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/bash/INTRO.gz</rm>
+ <rm>/usr/share/doc/bash/README.commands.gz</rm>
+ <rm>/usr/share/doc/bash/README.abs-guide</rm>
+ <rm>/usr/share/doc/bash/NEWS.gz</rm>
+ <rm>/usr/share/doc/bash/README.Debian.gz</rm>
+ <rm>/usr/share/doc/libc-bin/changelog.gz</rm>
+ <rm>/usr/share/doc/libc-bin/TODO.Debian</rm>
+ <rm>/usr/share/doc/libc-bin/copyright</rm>
+ <rm>/usr/share/doc/libc-bin/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/liblzma5/AUTHORS</rm>
+ <rm>/usr/share/doc/liblzma5/changelog.gz</rm>
+ <rm>/usr/share/doc/liblzma5/THANKS</rm>
+ <rm>/usr/share/doc/liblzma5/copyright</rm>
+ <rm>/usr/share/doc/liblzma5/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/liblzma5/NEWS.gz</rm>
+ <rm>/usr/share/doc/dpkg/AUTHORS</rm>
+ <rm>/usr/share/doc/dpkg/changelog.gz</rm>
+ <rm>/usr/share/doc/dpkg/usertags.gz</rm>
+ <rm>/usr/share/doc/dpkg/README.feature-removal-schedule.gz</rm>
+ <rm>/usr/share/doc/dpkg/THANKS.gz</rm>
+ <rm>/usr/share/doc/dpkg/copyright</rm>
+ <rm>/usr/share/doc/dpkg/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/multiarch-support/changelog.gz</rm>
+ <rm>/usr/share/doc/multiarch-support/copyright</rm>
+ <rm>/usr/share/doc/multiarch-support/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/gcc-4.7-base/TODO.Debian</rm>
+ <rm>/usr/share/doc/gcc-4.7-base/README.Debian.armel.gz</rm>
+ <rm>/usr/share/doc/gcc-4.7-base/copyright</rm>
+ <rm>/usr/share/doc/gcc-4.7-base/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/base-files/README</rm>
+ <rm>/usr/share/doc/base-files/changelog.gz</rm>
+ <rm>/usr/share/doc/base-files/README.FHS</rm>
+ <rm>/usr/share/doc/base-files/FAQ</rm>
+ <rm>/usr/share/doc/base-files/copyright</rm>
+ <rm>/usr/share/doc/libtinfo5/changelog.gz</rm>
+ <rm>/usr/share/doc/libtinfo5/TODO.Debian</rm>
+ <rm>/usr/share/doc/libtinfo5/copyright</rm>
+ <rm>/usr/share/doc/libtinfo5/changelog.Debian.gz</rm>
+ <rm>/usr/share/doc/myapp/changelog.gz</rm>
+ <rm>/usr/share/doc/dash/changelog.gz</rm>
+ <rm>/usr/share/doc/dash/NEWS.Debian.gz</rm>
+ <rm>/usr/share/doc/dash/README.source</rm>
+ <rm>/usr/share/doc/dash/README.Debian.diet</rm>
+ <rm>/usr/share/doc/dash/copyright</rm>
+ <rm>/usr/share/doc/dash/changelog.Debian.gz</rm>
+ <rm>/usr/share/menu/bash</rm>
+ <rm>/usr/share/menu/dash</rm>
+ <rm>/usr/share/base-files/nsswitch.conf</rm>
+ <rm>/usr/share/base-files/info.dir</rm>
+ <rm>/usr/share/base-files/dot.bashrc</rm>
+ <rm>/usr/share/base-files/profile</rm>
+ <rm>/usr/share/base-files/dot.profile</rm>
+ <rm>/usr/share/base-files/motd</rm>
+ <rm>/usr/share/base-files/profile.md5sums</rm>
+ <rm>/usr/share/base-files/staff-group-for-usr-local</rm>
+ <rm>/usr/share/misc</rm>
+ <rm>/usr/share/lintian</rm>
+ <rm>/usr/share/lintian/overrides/libc6</rm>
+ <rm>/usr/share/lintian/overrides/libselinux1</rm>
+ <rm>/usr/share/lintian/overrides/libgcc1</rm>
+ <rm>/usr/share/lintian/overrides/bash</rm>
+ <rm>/usr/share/lintian/overrides/libc-bin</rm>
+ <rm>/usr/share/lintian/overrides/dpkg</rm>
+ <rm>/usr/share/lintian/overrides/base-files</rm>
+ <rm>/usr/share/man</rm>
+ <rm>/usr/share/man/ja</rm>
+ <rm>/usr/share/man/ja/man8/update-alternatives.8.gz</rm>
+ <rm>/usr/share/man/ja/man8/start-stop-daemon.8.gz</rm>
+ <rm>/usr/share/man/ja/man8/dpkg-statoverride.8.gz</rm>
+ <rm>/usr/share/man/ja/man8/dpkg-divert.8.gz</rm>
+ <rm>/usr/share/man/ja/man1/sensible-pager.1.gz</rm>
+ <rm>/usr/share/man/ja/man1/dpkg-maintscript-helper.1.gz</rm>
+ <rm>/usr/share/man/ja/man1/dpkg-deb.1.gz</rm>
+ <rm>/usr/share/man/ja/man1/sensible-editor.1.gz</rm>
+ <rm>/usr/share/man/ja/man1/dpkg.1.gz</rm>
+ <rm>/usr/share/man/ja/man1/sensible-browser.1.gz</rm>
+ <rm>/usr/share/man/ja/man1/dpkg-split.1.gz</rm>
+ <rm>/usr/share/man/ja/man1/dpkg-trigger.1.gz</rm>
+ <rm>/usr/share/man/ja/man1/dpkg-query.1.gz</rm>
+ <rm>/usr/share/man/ja/man5/dpkg.cfg.5.gz</rm>
+ <rm>/usr/share/man/man8/zic.8.gz</rm>
+ <rm>/usr/share/man/man8/update-alternatives.8.gz</rm>
+ <rm>/usr/share/man/man8/ld.so.8.gz</rm>
+ <rm>/usr/share/man/man8/start-stop-daemon.8.gz</rm>
+ <rm>/usr/share/man/man8/add-shell.8.gz</rm>
+ <rm>/usr/share/man/man8/remove-shell.8.gz</rm>
+ <rm>/usr/share/man/man8/rpcinfo.8.gz</rm>
+ <rm>/usr/share/man/man8/dpkg-statoverride.8.gz</rm>
+ <rm>/usr/share/man/man8/installkernel.8.gz</rm>
+ <rm>/usr/share/man/man8/rmt-tar.8.gz</rm>
+ <rm>/usr/share/man/man8/run-parts.8.gz</rm>
+ <rm>/usr/share/man/man8/ldconfig.8.gz</rm>
+ <rm>/usr/share/man/man8/iconvconfig.8.gz</rm>
+ <rm>/usr/share/man/man8/savelog.8.gz</rm>
+ <rm>/usr/share/man/man8/dpkg-divert.8.gz</rm>
+ <rm>/usr/share/man/de</rm>
+ <rm>/usr/share/man/de/man8/update-alternatives.8.gz</rm>
+ <rm>/usr/share/man/de/man8/start-stop-daemon.8.gz</rm>
+ <rm>/usr/share/man/de/man8/add-shell.8.gz</rm>
+ <rm>/usr/share/man/de/man8/remove-shell.8.gz</rm>
+ <rm>/usr/share/man/de/man8/dpkg-statoverride.8.gz</rm>
+ <rm>/usr/share/man/de/man8/installkernel.8.gz</rm>
+ <rm>/usr/share/man/de/man8/run-parts.8.gz</rm>
+ <rm>/usr/share/man/de/man8/savelog.8.gz</rm>
+ <rm>/usr/share/man/de/man8/dpkg-divert.8.gz</rm>
+ <rm>/usr/share/man/de/man1/sensible-pager.1.gz</rm>
+ <rm>/usr/share/man/de/man1/dpkg-maintscript-helper.1.gz</rm>
+ <rm>/usr/share/man/de/man1/dpkg-deb.1.gz</rm>
+ <rm>/usr/share/man/de/man1/which.1.gz</rm>
+ <rm>/usr/share/man/de/man1/sensible-editor.1.gz</rm>
+ <rm>/usr/share/man/de/man1/dpkg.1.gz</rm>
+ <rm>/usr/share/man/de/man1/sensible-browser.1.gz</rm>
+ <rm>/usr/share/man/de/man1/dpkg-split.1.gz</rm>
+ <rm>/usr/share/man/de/man1/dpkg-trigger.1.gz</rm>
+ <rm>/usr/share/man/de/man1/tempfile.1.gz</rm>
+ <rm>/usr/share/man/de/man1/dpkg-query.1.gz</rm>
+ <rm>/usr/share/man/de/man5/dpkg.cfg.5.gz</rm>
+ <rm>/usr/share/man/fr</rm>
+ <rm>/usr/share/man/fr/man8/update-alternatives.8.gz</rm>
+ <rm>/usr/share/man/fr/man8/start-stop-daemon.8.gz</rm>
+ <rm>/usr/share/man/fr/man8/add-shell.8.gz</rm>
+ <rm>/usr/share/man/fr/man8/remove-shell.8.gz</rm>
+ <rm>/usr/share/man/fr/man8/dpkg-statoverride.8.gz</rm>
+ <rm>/usr/share/man/fr/man8/installkernel.8.gz</rm>
+ <rm>/usr/share/man/fr/man8/run-parts.8.gz</rm>
+ <rm>/usr/share/man/fr/man8/savelog.8.gz</rm>
+ <rm>/usr/share/man/fr/man8/dpkg-divert.8.gz</rm>
+ <rm>/usr/share/man/fr/man1/sensible-pager.1.gz</rm>
+ <rm>/usr/share/man/fr/man1/dpkg-maintscript-helper.1.gz</rm>
+ <rm>/usr/share/man/fr/man1/dpkg-deb.1.gz</rm>
+ <rm>/usr/share/man/fr/man1/which.1.gz</rm>
+ <rm>/usr/share/man/fr/man1/sensible-editor.1.gz</rm>
+ <rm>/usr/share/man/fr/man1/dpkg.1.gz</rm>
+ <rm>/usr/share/man/fr/man1/sensible-browser.1.gz</rm>
+ <rm>/usr/share/man/fr/man1/dpkg-split.1.gz</rm>
+ <rm>/usr/share/man/fr/man1/dpkg-trigger.1.gz</rm>
+ <rm>/usr/share/man/fr/man1/tempfile.1.gz</rm>
+ <rm>/usr/share/man/fr/man1/dpkg-query.1.gz</rm>
+ <rm>/usr/share/man/fr/man5/dpkg.cfg.5.gz</rm>
+ <rm>/usr/share/man/man1/sh.1.gz</rm>
+ <rm>/usr/share/man/man1/bash.1.gz</rm>
+ <rm>/usr/share/man/man1/dash.1.gz</rm>
+ <rm>/usr/share/man/man1/tar.1.gz</rm>
+ <rm>/usr/share/man/man1/getconf.1.gz</rm>
+ <rm>/usr/share/man/man1/sensible-pager.1.gz</rm>
+ <rm>/usr/share/man/man1/bashbug.1.gz</rm>
+ <rm>/usr/share/man/man1/dpkg-maintscript-helper.1.gz</rm>
+ <rm>/usr/share/man/man1/dpkg-deb.1.gz</rm>
+ <rm>/usr/share/man/man1/which.1.gz</rm>
+ <rm>/usr/share/man/man1/locale.1.gz</rm>
+ <rm>/usr/share/man/man1/ischroot.1.gz</rm>
+ <rm>/usr/share/man/man1/sensible-editor.1.gz</rm>
+ <rm>/usr/share/man/man1/dpkg.1.gz</rm>
+ <rm>/usr/share/man/man1/ldd.1.gz</rm>
+ <rm>/usr/share/man/man1/catchsegv.1.gz</rm>
+ <rm>/usr/share/man/man1/sensible-browser.1.gz</rm>
+ <rm>/usr/share/man/man1/dpkg-split.1.gz</rm>
+ <rm>/usr/share/man/man1/dpkg-trigger.1.gz</rm>
+ <rm>/usr/share/man/man1/zdump.1.gz</rm>
+ <rm>/usr/share/man/man1/tempfile.1.gz</rm>
+ <rm>/usr/share/man/man1/rbash.1.gz</rm>
+ <rm>/usr/share/man/man1/clear_console.1.gz</rm>
+ <rm>/usr/share/man/man1/tzselect.1.gz</rm>
+ <rm>/usr/share/man/man1/iconv.1.gz</rm>
+ <rm>/usr/share/man/man1/localedef.1.gz</rm>
+ <rm>/usr/share/man/man1/dpkg-query.1.gz</rm>
+ <rm>/usr/share/man/es</rm>
+ <rm>/usr/share/man/es/man8/update-alternatives.8.gz</rm>
+ <rm>/usr/share/man/es/man8/start-stop-daemon.8.gz</rm>
+ <rm>/usr/share/man/es/man8/add-shell.8.gz</rm>
+ <rm>/usr/share/man/es/man8/remove-shell.8.gz</rm>
+ <rm>/usr/share/man/es/man8/dpkg-statoverride.8.gz</rm>
+ <rm>/usr/share/man/es/man8/installkernel.8.gz</rm>
+ <rm>/usr/share/man/es/man8/run-parts.8.gz</rm>
+ <rm>/usr/share/man/es/man8/savelog.8.gz</rm>
+ <rm>/usr/share/man/es/man8/dpkg-divert.8.gz</rm>
+ <rm>/usr/share/man/es/man1/sensible-pager.1.gz</rm>
+ <rm>/usr/share/man/es/man1/dpkg-maintscript-helper.1.gz</rm>
+ <rm>/usr/share/man/es/man1/dpkg-deb.1.gz</rm>
+ <rm>/usr/share/man/es/man1/which.1.gz</rm>
+ <rm>/usr/share/man/es/man1/sensible-editor.1.gz</rm>
+ <rm>/usr/share/man/es/man1/dpkg.1.gz</rm>
+ <rm>/usr/share/man/es/man1/sensible-browser.1.gz</rm>
+ <rm>/usr/share/man/es/man1/dpkg-split.1.gz</rm>
+ <rm>/usr/share/man/es/man1/dpkg-trigger.1.gz</rm>
+ <rm>/usr/share/man/es/man1/tempfile.1.gz</rm>
+ <rm>/usr/share/man/es/man1/dpkg-query.1.gz</rm>
+ <rm>/usr/share/man/es/man5/dpkg.cfg.5.gz</rm>
+ <rm>/usr/share/man/man7/bash-builtins.7.gz</rm>
+ <rm>/usr/share/man/sv</rm>
+ <rm>/usr/share/man/sv/man8/update-alternatives.8.gz</rm>
+ <rm>/usr/share/man/sv/man8/start-stop-daemon.8.gz</rm>
+ <rm>/usr/share/man/sv/man8/dpkg-statoverride.8.gz</rm>
+ <rm>/usr/share/man/sv/man8/dpkg-divert.8.gz</rm>
+ <rm>/usr/share/man/sv/man1/dpkg-maintscript-helper.1.gz</rm>
+ <rm>/usr/share/man/sv/man1/dpkg-deb.1.gz</rm>
+ <rm>/usr/share/man/sv/man1/dpkg.1.gz</rm>
+ <rm>/usr/share/man/sv/man1/dpkg-split.1.gz</rm>
+ <rm>/usr/share/man/sv/man1/dpkg-trigger.1.gz</rm>
+ <rm>/usr/share/man/sv/man1/dpkg-query.1.gz</rm>
+ <rm>/usr/share/man/sv/man5/dpkg.cfg.5.gz</rm>
+ <rm>/usr/share/man/it</rm>
+ <rm>/usr/share/man/it/man8/update-alternatives.8.gz</rm>
+ <rm>/usr/share/man/it/man8/start-stop-daemon.8.gz</rm>
+ <rm>/usr/share/man/it/man1/sensible-pager.1.gz</rm>
+ <rm>/usr/share/man/it/man1/dpkg-deb.1.gz</rm>
+ <rm>/usr/share/man/it/man1/sensible-editor.1.gz</rm>
+ <rm>/usr/share/man/it/man1/dpkg.1.gz</rm>
+ <rm>/usr/share/man/it/man1/sensible-browser.1.gz</rm>
+ <rm>/usr/share/man/it/man1/dpkg-split.1.gz</rm>
+ <rm>/usr/share/man/it/man1/dpkg-query.1.gz</rm>
+ <rm>/usr/share/man/it/man5/dpkg.cfg.5.gz</rm>
+ <rm>/usr/share/man/hu</rm>
+ <rm>/usr/share/man/hu/man5/dpkg.cfg.5.gz</rm>
+ <rm>/usr/share/man/pl</rm>
+ <rm>/usr/share/man/pl/man8/update-alternatives.8.gz</rm>
+ <rm>/usr/share/man/pl/man8/start-stop-daemon.8.gz</rm>
+ <rm>/usr/share/man/pl/man8/dpkg-statoverride.8.gz</rm>
+ <rm>/usr/share/man/pl/man8/dpkg-divert.8.gz</rm>
+ <rm>/usr/share/man/pl/man1/sensible-pager.1.gz</rm>
+ <rm>/usr/share/man/pl/man1/dpkg-maintscript-helper.1.gz</rm>
+ <rm>/usr/share/man/pl/man1/dpkg-deb.1.gz</rm>
+ <rm>/usr/share/man/pl/man1/sensible-editor.1.gz</rm>
+ <rm>/usr/share/man/pl/man1/dpkg.1.gz</rm>
+ <rm>/usr/share/man/pl/man1/sensible-browser.1.gz</rm>
+ <rm>/usr/share/man/pl/man1/dpkg-split.1.gz</rm>
+ <rm>/usr/share/man/pl/man1/dpkg-trigger.1.gz</rm>
+ <rm>/usr/share/man/pl/man1/dpkg-query.1.gz</rm>
+ <rm>/usr/share/man/pl/man5/dpkg.cfg.5.gz</rm>
+ <rm>/usr/share/man/man5/gai.conf.5.gz</rm>
+ <rm>/usr/share/man/man5/dpkg.cfg.5.gz</rm>
+ <rm>/usr/share/man/sl</rm>
+ <rm>/usr/share/man/sl/man8/add-shell.8.gz</rm>
+ <rm>/usr/share/man/sl/man8/remove-shell.8.gz</rm>
+ <rm>/usr/share/man/sl/man8/installkernel.8.gz</rm>
+ <rm>/usr/share/man/sl/man8/run-parts.8.gz</rm>
+ <rm>/usr/share/man/sl/man8/savelog.8.gz</rm>
+ <rm>/usr/share/man/sl/man1/which.1.gz</rm>
+ <rm>/usr/share/man/sl/man1/tempfile.1.gz</rm>
+ <rm>/usr/share/info</rm>
+ <rm>/usr/share/common-licenses/GPL-3</rm>
+ <rm>/usr/share/common-licenses/LGPL-2.1</rm>
+ <rm>/usr/share/common-licenses/BSD</rm>
+ <rm>/usr/share/common-licenses/LGPL</rm>
+ <rm>/usr/share/common-licenses/GPL-2</rm>
+ <rm>/usr/share/common-licenses/Apache-2.0</rm>
+ <rm>/usr/share/common-licenses/Artistic</rm>
+ <rm>/usr/share/common-licenses/GFDL-1.3</rm>
+ <rm>/usr/share/common-licenses/LGPL-2</rm>
+ <rm>/usr/share/common-licenses/GFDL-1.2</rm>
+ <rm>/usr/share/common-licenses/GPL-1</rm>
+ <rm>/usr/share/common-licenses/LGPL-3</rm>
+ <rm>/usr/share/common-licenses/GFDL</rm>
+ <rm>/usr/share/common-licenses/GPL</rm>
+ <rm>/usr/bin/bashbug</rm>
+ <rm>/usr/bin/ischroot</rm>
+ <rm>/usr/bin/zdump</rm>
+ <rm>/usr/bin/ldd</rm>
+ <rm>/usr/bin/dpkg-query</rm>
+ <rm>/usr/bin/localedef</rm>
+ <rm>/usr/bin/sensible-pager</rm>
+ <rm>/usr/bin/rpcinfo</rm>
+ <rm>/usr/bin/getent</rm>
+ <rm>/usr/bin/dpkg-maintscript-helper</rm>
+ <rm>/usr/bin/savelog</rm>
+ <rm>/usr/bin/dpkg-trigger</rm>
+ <rm>/usr/bin/sensible-editor</rm>
+ <rm>/usr/bin/tzselect</rm>
+ <rm>/usr/bin/catchsegv</rm>
+ <rm>/usr/bin/dpkg-split</rm>
+ <rm>/usr/bin/dpkg-statoverride</rm>
+ <rm>/usr/bin/update-alternatives</rm>
+ <rm>/usr/bin/dpkg-deb</rm>
+ <rm>/usr/bin/dpkg</rm>
+ <rm>/usr/bin/locale</rm>
+ <rm>/usr/bin/iconv</rm>
+ <rm>/usr/bin/which</rm>
+ <rm>/usr/bin/clear_console</rm>
+ <rm>/usr/bin/dpkg-divert</rm>
+ <rm>/usr/bin/getconf</rm>
+ <rm>/usr/bin/sensible-browser</rm>
+ <rm>/usr/sbin/remove-shell</rm>
+ <rm>/usr/sbin/rmt-tar</rm>
+ <rm>/usr/sbin/add-shell</rm>
+ <rm>/usr/sbin/dpkg-statoverride</rm>
+ <rm>/usr/sbin/update-alternatives</rm>
+ <rm>/usr/sbin/dpkg-divert</rm>
+ <rm>/usr/sbin/install-info</rm>
+ <rm>/usr/sbin/zic</rm>
+ <rm>/usr/sbin/iconvconfig</rm>
+ <rm>/usr/lib/pt_chown</rm>
+ <rm>/usr/lib/mime</rm>
+ <rm>/usr/lib/mime/packages/sensible-utils</rm>
+ <rm>/usr/lib/mime/packages/tar</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/libtic.so.5.9</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/libtic.so.5</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1008.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-9E.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM904.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM852.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM284.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-DK-NO-A.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/INIS-CYRILLIC.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/BIG5.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO_6937-2.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/libGB.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CSN_369103.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1149.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP932.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-2.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EUC-KR.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM5347.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM933.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/DEC-MCS.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/VISCII.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM285.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM855.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/MIK.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/GBGBK.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM875.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP1125.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO_5427.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1004.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO-2022-KR.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM037.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM9066.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1130.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM864.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-9.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM4899.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-4.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM275.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM868.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EUC-TW.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM862.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM4909.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM861.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-15.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP1258.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/MAC-SAMI.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM4971.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM278.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/HP-ROMAN9.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ARMSCII-8.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/MACINTOSH.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP1257.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM866NAV.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/libKSC.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM856.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-14.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/libISOIR165.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/BIG5HKSCS.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO-2022-JP-3.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1160.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/GOST_19768-74.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1156.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/gconv-modules.cache</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/UTF-16.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-ES.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/GBBIG5.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-10.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/BRF.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM9030.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO-IR-209.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-1.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/UTF-7.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP775.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1157.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM420.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM437.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/TIS-620.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/UNICODE.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1166.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM905.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ECMA-CYRILLIC.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1144.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM277.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM423.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM274.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1025.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-AT-DE.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/RK1048.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM871.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EUC-JP-MS.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-FI-SE-A.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM424.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/gconv-modules</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/NATS-DANO.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM866.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-FR.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1146.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/SHIFT_JISX0213.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/PT154.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1147.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1145.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-ES-S.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/libCNS.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-7.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-US.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM297.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1141.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM803.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1163.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/libJIS.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1158.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM860.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-IS-FRISS.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM891.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/TSCII.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM038.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM874.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM930.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM939.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1137.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-ES-A.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-5.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1154.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/KOI8-RU.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/KOI8-R.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP1250.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM256.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM937.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1026.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/LATIN-GREEK.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1164.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM851.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1167.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-IT.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/NATS-SEFI.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1399.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP1256.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1047.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1390.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-DK-NO.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/MAC-CENTRALEUROPE.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1148.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/GBK.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP1255.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-8.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1388.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-11.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/HP-TURKISH8.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-16.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/T.61.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CWI.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/KOI8-T.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM943.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM932.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM850.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM4517.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO-2022-CN-EXT.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/libJISX0213.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/TCVN5712-1.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-3.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO-2022-JP.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM857.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/GREEK7-OLD.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM9448.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1132.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO-IR-197.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-13.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-AT-DE-A.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM865.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO_10367-BOX.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EUC-JISX0213.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1008_420.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM902.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/LATIN-GREEK-1.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/SJIS.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/HP-GREEK8.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM918.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO-2022-CN.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO_2033.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-PT.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1162.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM12712.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1123.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/GEORGIAN-ACADEMY.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM290.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-FI-SE.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/GB18030.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM500.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/UHC.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISIRI-3342.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ASMO_449.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1142.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM273.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM16804.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1112.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1122.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-UK.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/HP-ROMAN8.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM869.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EUC-CN.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/GREEK7.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM922.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP1252.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM280.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1140.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/INIS.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/KOI-8.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/SAMI-WS2.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/GEORGIAN-PS.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/MAC-IS.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1364.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP737.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO_11548-1.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IEC_P27-1.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO_5427-EXT.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1143.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1161.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM281.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1155.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1129.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO_6937.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM880.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/MAC-UK.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1097.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO8859-6.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM870.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP1254.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/KOI8-U.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/GREEK-CCITT.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1046.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM901.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM903.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/INIS-8.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO_5428.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM863.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1153.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/UTF-32.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM935.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP10007.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP1253.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/CP1251.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ANSI_X3.110.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/JOHAB.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1133.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EUC-JP.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/ISO646.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1124.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/EBCDIC-CA-FR.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM1371.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/HP-THAI8.so</rm>
+ <rm>/usr/lib/arm-linux-gnueabi/gconv/IBM921.so</rm>
+ <rm>/usr/lib/locale</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_IDENTIFICATION</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_NAME</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_MONETARY</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_TELEPHONE</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_ADDRESS</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_CTYPE</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_PAPER</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_TIME</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_COLLATE</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_MEASUREMENT</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_NUMERIC</rm>
+ <rm>/usr/lib/locale/C.UTF-8/LC_MESSAGES/SYS_LC_MESSAGES</rm>
+ <rm>/usr/lib/gcc</rm>
+ <rm>/usr/lib/gcc/arm-linux-gnueabi</rm>
+ <rm>/usr/lib/gcc/arm-linux-gnueabi/4.7</rm>
+ <rm>/sbin/start-stop-daemon</rm>
+ <rm>/sbin/ldconfig</rm>
+ <rm>/sbin/installkernel</rm>
+ <rm>/etc/os-release</rm>
+ <rm>/etc/bash.bashrc</rm>
+ <rm>/etc/debian_version</rm>
+ <rm>/etc/issue</rm>
+ <rm>/etc/rmt</rm>
+ <rm>/etc/fstab</rm>
+ <rm>/etc/host.conf</rm>
+ <rm>/etc/issue.net</rm>
+ <rm>/etc/inittab</rm>
+ <rm>/etc/bindresvport.blacklist</rm>
+ <rm>/etc/gai.conf</rm>
+ <rm>/etc/default/nss</rm>
+ <rm>/etc/profile.d</rm>
+ <rm>/etc/skel/.profile</rm>
+ <rm>/etc/skel/.bash_logout</rm>
+ <rm>/etc/skel/.bashrc</rm>
+ <rm>/etc/ld.so.conf.d/libc.conf</rm>
+ <rm>/etc/ld.so.conf.d/arm-linux-gnueabi.conf</rm>
+ <rm>/etc/dpkg/dpkg.cfg</rm>
+ <rm>/etc/dpkg/dpkg.cfg.d</rm>
+ <rm>/etc/dpkg/origins/debian</rm>
+ <rm>/etc/cron.daily/dpkg</rm>
+ <rm>/etc/logrotate.d/dpkg</rm>
+ <rm>/etc/alternatives/README</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_hesiod.so.2</rm>
+ <rm>/lib/arm-linux-gnueabi/libbz2.so.1.0.4</rm>
+ <rm>/lib/arm-linux-gnueabi/libz.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libresolv.so.2</rm>
+ <rm>/lib/arm-linux-gnueabi/liblzma.so.5.0.0</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_files-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libdl-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libtinfo.so.5.9</rm>
+ <rm>/lib/arm-linux-gnueabi/libselinux.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libthread_db.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_hesiod-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libz.so.1.2.7</rm>
+ <rm>/lib/arm-linux-gnueabi/libdl.so.2</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_compat-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libbz2.so.1.0</rm>
+ <rm>/lib/arm-linux-gnueabi/libbz2.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libmemusage.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libnsl-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libcidn.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/librt-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_nisplus.so.2</rm>
+ <rm>/lib/arm-linux-gnueabi/libm.so.6</rm>
+ <rm>/lib/arm-linux-gnueabi/librt.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_compat.so.2</rm>
+ <rm>/lib/arm-linux-gnueabi/libutil-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libm-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libanl-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_nis-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libthread_db-1.0.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libnsl.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libcrypt.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libpthread-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_files.so.2</rm>
+ <rm>/lib/arm-linux-gnueabi/libcidn-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_dns.so.2</rm>
+ <rm>/lib/arm-linux-gnueabi/libgcc_s.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libpcprofile.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_nisplus-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_nis.so.2</rm>
+ <rm>/lib/arm-linux-gnueabi/libSegFault.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libanl.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libcrypt-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libnss_dns-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libutil.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libBrokenLocale.so.1</rm>
+ <rm>/lib/arm-linux-gnueabi/libresolv-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/libtinfo.so.5</rm>
+ <rm>/lib/arm-linux-gnueabi/libpthread.so.0</rm>
+ <rm>/lib/arm-linux-gnueabi/libBrokenLocale-2.13.so</rm>
+ <rm>/lib/arm-linux-gnueabi/liblzma.so.5</rm>
+ </finetuning>
+ <pkg-list>
+ <pkg>bash</pkg>
+ <pkg>myapp</pkg>
+ </pkg-list>
+ </target>
+</ns0:RootFileSystem>
diff --git a/distribution/elbe-example/mini-incl-target.xml b/distribution/elbe-example/mini-incl-target.xml
new file mode 100644
index 0000000..c660969
--- /dev/null
+++ b/distribution/elbe-example/mini-incl-target.xml
@@ -0,0 +1,78 @@
+<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>
+ minimal target rfs including a simple app
+ buildenv to build the simple app
+ </description>
+ <buildtype>armel</buildtype>
+ <mirror>
+ <primary_host>ftp.debian.org</primary_host>
+ <primary_path>/debian</primary_path>
+ <primary_proto>http</primary_proto>
+ <url-list>
+ <url>
+ <binary>http://debian.linutronix.de/elbe wheezy main</binary>
+ </url>
+ <url>
+ <binary>http://LOCALMACHINE/myrepo wheezy main</binary>
+ <source>http://LOCALMACHINE/myrepo wheezy main</source>
+ </url>
+ </url-list>
+ </mirror>
+ <noauth/>
+ <suite>wheezy</suite>
+ <buildimage>
+ <kinitrd>elbe-bootstrap</kinitrd>
+ <pkg-list>
+ <pkg>build-essential</pkg>
+ <pkg>debhelper</pkg>
+ <pkg>devscripts</pkg>
+ <pkg>autotools-dev</pkg>
+ <pkg>automake</pkg>
+ </pkg-list>
+ </buildimage>
+ </project>
+ <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>16MiB</size>
+ <partition>
+ <size>remain</size>
+ <label>rfs</label>
+ </partition>
+ </msdoshd>
+ </images>
+ <fstab>
+ <bylabel>
+ <label>rfs</label>
+ <mountpoint>/</mountpoint>
+ <fs>
+ <type>ext2</type>
+ <tune2fs>-i 0</tune2fs>
+ </fs>
+ </bylabel>
+ </fstab>
+ <diet />
+ <norecommend />
+ <finetuning>
+ <rm>var/cache/apt/archives/*.deb</rm>
+ <command>echo "T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100" &gt;&gt; etc/inittab</command>
+ </finetuning>
+ <pkg-list>
+ <pkg>bash</pkg>
+ <pkg>myapp</pkg>
+ </pkg-list>
+ </target>
+</ns0:RootFileSystem>
diff --git a/distribution/elbe-example/mini.xml b/distribution/elbe-example/mini.xml
new file mode 100644
index 0000000..fe1d65f
--- /dev/null
+++ b/distribution/elbe-example/mini.xml
@@ -0,0 +1,42 @@
+<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>armel</buildtype>
+ <mirror>
+ <primary_host>ftp.debian.org</primary_host>
+ <primary_path>/debian</primary_path>
+ <primary_proto>http</primary_proto>
+ <url-list>
+ <url>
+ <binary>http://debian.linutronix.de/elbe wheezy main</binary>
+ </url>
+ </url-list>
+ </mirror>
+ <suite>wheezy</suite>
+ <buildimage>
+ <kinitrd>elbe-bootstrap</kinitrd>
+ <pkg-list>
+ <pkg>build-essential</pkg>
+ <pkg>debhelper</pkg>
+ <pkg>devscripts</pkg>
+ <pkg>autotools-dev</pkg>
+ <pkg>automake</pkg>
+ </pkg-list>
+ </buildimage>
+ </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-example/myapp/AUTHORS b/distribution/elbe-example/myapp/AUTHORS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/distribution/elbe-example/myapp/AUTHORS
diff --git a/distribution/elbe-example/myapp/ChangeLog b/distribution/elbe-example/myapp/ChangeLog
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/distribution/elbe-example/myapp/ChangeLog
diff --git a/distribution/elbe-example/myapp/Makefile.am b/distribution/elbe-example/myapp/Makefile.am
new file mode 100644
index 0000000..73ff4e8
--- /dev/null
+++ b/distribution/elbe-example/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-example/myapp/NEWS b/distribution/elbe-example/myapp/NEWS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/distribution/elbe-example/myapp/NEWS
diff --git a/distribution/elbe-example/myapp/README b/distribution/elbe-example/myapp/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/distribution/elbe-example/myapp/README
diff --git a/distribution/elbe-example/myapp/autogen.sh b/distribution/elbe-example/myapp/autogen.sh
new file mode 100755
index 0000000..9088512
--- /dev/null
+++ b/distribution/elbe-example/myapp/autogen.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+autoreconf -sif
diff --git a/distribution/elbe-example/myapp/configure.ac b/distribution/elbe-example/myapp/configure.ac
new file mode 100644
index 0000000..109e8ea
--- /dev/null
+++ b/distribution/elbe-example/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-example/myapp/myapp.c b/distribution/elbe-example/myapp/myapp.c
new file mode 100644
index 0000000..4e39438
--- /dev/null
+++ b/distribution/elbe-example/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-example/myrepo/conf/distributions b/distribution/elbe-example/myrepo/conf/distributions
new file mode 100644
index 0000000..f6cb43a
--- /dev/null
+++ b/distribution/elbe-example/myrepo/conf/distributions
@@ -0,0 +1,9 @@
+Origin: myrepo
+Label: myrepo
+Suite: stable
+Codename: wheezy
+Update: - myremoterepo
+Version:
+Architectures: i386 amd64 armel source
+Components: main
+Description: my debian packages
diff --git a/distribution/elbe-example/myrepo/conf/updates b/distribution/elbe-example/myrepo/conf/updates
new file mode 100644
index 0000000..e8df2b1
--- /dev/null
+++ b/distribution/elbe-example/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-example/pres_elbe-example_en.tex b/distribution/elbe-example/pres_elbe-example_en.tex
new file mode 100644
index 0000000..db8c2d7
--- /dev/null
+++ b/distribution/elbe-example/pres_elbe-example_en.tex
@@ -0,0 +1,556 @@
+\input{configpres}
+
+\title{ELBE 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}
+
+\lstset{language=xml}
+\begin{frame}[fragile]
+\frametitle{minimal XML file}
+\begin{lstlisting}
+<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>armel</buildtype>
+ <mirror>
+ <primary_host>ftp.debian.org</primary_host>
+ <primary_path>/debian</primary_path>
+ <primary_proto>http</primary_proto>
+ <url-list>
+ <url>
+ <binary>http://debian.linutronix.de/elbe wheezy main</binary>
+ </url>
+ </url-list>
+ </mirror>
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{minimal XML file}
+\begin{lstlisting}
+ <suite>wheezy</suite>
+ <buildimage>
+ <kinitrd>elbe-bootstrap</kinitrd>
+ <pkg-list>
+ <pkg>build-essential</pkg>
+ <pkg>debhelper</pkg>
+ <pkg>devscripts</pkg>
+ <pkg>autotools-dev</pkg>
+ <pkg>automake</pkg>
+ </pkg-list>
+ </buildimage>
+ </project>
+ <target>
+ <hostname>mini</hostname>
+ <domain>linutronix</domain>
+ <passwd>foo</passwd>
+ <finetuning>
+ </finetuning>
+ <pkg-list>
+ <pkg>bash</pkg>
+ </pkg-list>
+ </target>
+</ns0:RootFileSystem>
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{create and build mini.xml}
+\begin{lstlisting}
+$ elbe create --directory=./buildenv mini.xml
+$ cd buildenv
+$ make
+\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{lstlisting}
+# -*- 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{lstlisting}
+\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
+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 in a debian repository}
+\begin{lstlisting}
+$ cd ..
+$ mkdir -p myrepo/conf
+$ cd myrepo
+$ $EDITOR conf/distributions
+\end{lstlisting}
+\begin{lstlisting}
+Origin: myrepo
+Label: myrepo
+Suite: stable
+Codename: wheezy
+Update: - myremoterepo
+Version:
+Architectures: i386 amd64 source
+Components: main
+Description: my debian packages
+\end{lstlisting}
+\begin{lstlisting}
+$ $EDITOR conf/updates
+\end{lstlisting}
+\begin{lstlisting}
+Name: myremoterepo
+Method: http://localhost/myrepo
+Components: main
+Architectures: i386 amd64 armel source
+VerifyRelease: blindtrust
+IgnoreRelease: yes
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{host myapp in a debian repository}
+\begin{lstlisting}
+$ reprepro include wheezy ../myapp_1.0_i386.changes
+$ 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}
+$ cd ../buildenv
+$ make run-con
+\end{lstlisting}
+login into buildenv and configure apt to use myrepo
+\begin{lstlisting}
+$ 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 armel 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 armel package to the repo}
+\begin{lstlisting}
+$ cd ../myrepo
+$ reprepro include wheezy /tmp/myapp_1.0_armel.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{lstlisting}
+...
+ <mirror>
+ <primary_host>ftp.debian.org</primary_host>
+ <primary_path>/debian</primary_path>
+ <primary_proto>http</primary_proto>
+ <url-list>
+ <url>
+ <binary>http://debian.linutronix.de/elbe wheezy main</binary>
+ </url>
+ <url>
+ <binary>http://LOCALMACHINE/myrepo wheezy main</binary>
+ <source>http://LOCALMACHINE/myrepo wheezy main</source>
+ </url>
+ </url-list>
+ </mirror>
+ <noauth/>
+...
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{add myapp}
+\begin{lstlisting}
+...
+ <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{lstlisting}
+\end{frame}
+
+\subsection{define a striped target RFS}
+\begin{frame}[fragile]
+\frametitle{define sdcard image}
+\begin{lstlisting}
+...
+ <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{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{create fstab and set elbe mode}
+\begin{lstlisting}
+...
+ </images>
+ <fstab>
+ <bylabel>
+ <label>rfs</label>
+ <mountpoint>/</mountpoint>
+ <fs>
+ <type>ext2</type>
+ <tune2fs>-i 0</tune2fs>
+ </fs>
+ </bylabel>
+ </fstab>
+ <diet />
+ <norecommend />
+ <finetuning>
+...
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{build and extract target as nfsroot}
+\begin{lstlisting}
+$ elbe create mini.xml --directory=./target
+$ cd target
+$ make
+\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-armel
+$ sudo tar xzf rootfs.tar.gz -C /nfs/elbe-armel
+$ 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 armel boot}
+\begin{lstlisting}
+$ 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{lstlisting}
+\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-armel ip=dhcp init=/usr/bin/myapp'
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{strip the nfsroot}
+\begin{lstlisting}
+$ sudo rm -rf /nfs/elbe-armel/etc
+$ sudo rm -rf /nfs/elbe-armel/sbin
+$ sudo rm -rf /nfs/elbe-armel/var
+$ sudo rm -rf /nfs/elbe-armel/usr/share
+$ sudo rm -rf /nfs/elbe-armel/usr/lib
+$ sudo rm -rf /nfs/elbe-armel/usr/sbin
+$ sudo cp /nfs/elbe-armel/usr/bin/myapp .
+$ sudo rm -rf /nfs/elbe-armel/usr/bin/*
+$ sudo mv myapp /nfs/elbe-armel/usr/bin/
+$ sudo cp -a /nfs/elbe-armel/lib/arm-linux-gnueabi/ld-* .
+$ sudo cp -a /nfs/elbe-armel/lib/arm-linux-gnueabi/libc-2.13.so .
+$ sudo cp -a /nfs/elbe-armel/lib/arm-linux-gnueabi/libc.so.6 .
+$ sudo rm /nfs/elbe-armel/lib/arm-linux-gnueabi/*
+$ sudo mv libc-2.13.so /nfs/elbe-armel/lib/arm-linux-gnueabi/
+$ sudo mv libc.so.6 /nfs/elbe-armel/lib/arm-linux-gnueabi/
+$ sudo mv ld-* /nfs/elbe-armel/lib/arm-linux-gnueabi/
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{update the ELBE XML file}
+\begin{lstlisting}
+$ sudo mkdir /nfs/elbe-armel-orig
+$ sudo tar xzf rootfs.tar.gz -C /nfs/elbe-armel-orig/
+$ elbe pkgdiff
+$ sudo elbe diff /nfs/elbe-armel-orig /nfs/elbe-armel > diff.txt
+$ cd ..
+\end{lstlisting}
+\begin{lstlisting}
+$ vim mini.xml
+$ # place cursor in finetuning section
+$ <ESC>:read target/diff.txt<RETURN>
+$ # remove everything until 'suggesting:'
+$ <ESC>:x<RETURN>
+\end{lstlisting}
+\begin{lstlisting}
+$ 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{lstlisting}
+\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,armel,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}
diff --git a/distribution/elbe-internals/Makefile b/distribution/elbe-internals/Makefile
new file mode 100644
index 0000000..d641258
--- /dev/null
+++ b/distribution/elbe-internals/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/distribution/elbe-devel/pres_elbe-devel_en.tex b/distribution/elbe-internals/pres_elbe-devel_en.tex
index c145d9d..c57ad47 100644
--- a/distribution/elbe-devel/pres_elbe-devel_en.tex
+++ b/distribution/elbe-internals/pres_elbe-devel_en.tex
@@ -113,7 +113,7 @@ at the current working directory
\begin{itemize}
\item the elbe project has packaged the d-i used by elbe as binary debian packages
\begin{lstlisting}
-testrd_0.6_armel
+elbe-bootstrap_0.1_armel
|- opt
| +-elbe
| +-initrd
@@ -123,10 +123,10 @@ testrd_0.6_armel
\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 at the debian
+\item current packages are called elbe-bootstrap and are available at the debian
repository:
\begin{lstlisting}
-deb http://debian.linutronix.de/elbe squeeze main
+deb http://debian.linutronix.de/elbe wheezy main
\end{lstlisting}
\end{itemize}
\end{frame}
diff --git a/distribution/elbe-usage/pres_elbe-usage_en.tex b/distribution/elbe-usage/pres_elbe-usage_en.tex
index be63d54..452d678 100644
--- a/distribution/elbe-usage/pres_elbe-usage_en.tex
+++ b/distribution/elbe-usage/pres_elbe-usage_en.tex
@@ -15,7 +15,7 @@ ELBE is a Debian based system to generate root-filesystems for embedded devices
\begin{verbatim}
# On a Debian based system
$ echo 'deb http://debian.linutronix.de/elbe \
-squeeze main' >> /etc/apt/sources.list
+wheezy main' >> /etc/apt/sources.list
$ aptitude install elbe
\end{verbatim}
Or get the latest source from github:
@@ -25,7 +25,7 @@ git clone https://github.com/Linutronix/elbe.git
\end{frame}
\begin{frame}
-\frametitle{ELBE: Overview}
+\frametitle{Overview}
\begin{itemize}
\item The Elbe system consists of the program elbe which is implemented in Python
\item Similar to git, it can be called with several sub commands
@@ -34,10 +34,11 @@ git clone https://github.com/Linutronix/elbe.git
\end{frame}
\begin{frame}
-\frametitle{ELBE: Documentation}
+\frametitle{Documentation}
\begin{itemize}
\item Have a look at /usr/share/doc/elbe/
\item Please read /usr/share/doc/elbe/elbeoverview-en.html
+\item There are man pages e.g. 'man elbe', 'man elbe-create', \dots
\end{itemize}
\end{frame}
@@ -60,50 +61,151 @@ git clone https://github.com/Linutronix/elbe.git
\begin{frame}
\frametitle{The ELBE workflow}
\begin{enumerate}
-\item Create an XML file
+\item Create a XML file
\item Create a project based on that XML file
\item Change to the project directory an run make
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
-\frametitle{ELBE: command overview}
+\frametitle{command overview}
Create a new project:
\begin{verbatim}
-elbe create \
+$ elbe create \
--directory /home/user/example example.xml
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
-\frametitle{ELBE: start build}
+\frametitle{start build}
\begin{verbatim}
-cd /home/user/example
-# Note: the next step might take a while
-make
+$ cd /home/user/example
+$ ls -a
+. .. .elbe-in Makefile
+$ make
\end{verbatim}
+.elbe-in contains the files needed inside the virtual build machine
\end{frame}
\begin{frame}[fragile]
-\frametitle{ELBE: Using the VM}
+\frametitle{generated files}
\begin{verbatim}
-cd /home/user/example
-make run
-# or (without graphics)
-make run-con
+$ ls -a
+. elbe-report.txt sdcard.img
+.. install.iso source.xml
+buildenv.img licence.txt .stamps
+.elbe-gen Makefile validation.txt
+.elbe-in rootfs.tar.gz
\end{verbatim}
\end{frame}
+\begin{frame}
+\frametitle{buildenv.img}
+\begin{itemize}
+\item Qemu HD image containing a complete Debian system
+\item was used to generate the RFS for the target
+\item can be used as build environment for own applications
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{.elbe-gen}
+\begin{itemize}
+\item files generated by the Makefile
+\item including the modified initrd that contains the debian-installer
+\item and a list containing the files that are copied from the buildenv to the
+host PC
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{elbe-report.txt}
+\begin{itemize}
+\item logfile of the build process in asciidoc format
+\item 'asciidoc elbe-report.txt' generates a html file
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{install.iso}
+\begin{itemize}
+\item ISO image that contains all used packages
+\item the --skip-cds parameter of 'elbe create' can be used to skip the
+ generation of the image
+\item the --build-source parameter of 'elbe create' can be used to also generate
+ a cdrom image that contains all Debian source packages
+\item All mirrors configured in an elbe XML file can be replaced by an ISO image
+ using the command 'elbe setcdrom'
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{licence.txt}
+\begin{itemize}
+\item contains the licence text of all used debian packages
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{rootfs.tar.gz, sdcard.img}
+\begin{itemize}
+\item Images or archives containing the target RFS
+\item The 'target' section in the XML file describes which image and archive
+ files are created; the 'fstab' section describes their content.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{source.xml}
+\begin{itemize}
+\item based on the XML file given to 'elbe create'
+\item added a 'fullpkgs' section containing informations about all installed
+ packages and their version
+\item added a 'sources\_list' section that contains the used mirrors
+\item added a 'apt\_prefs' section that contains the pinning settings
+\item added a 'elbe\_version' section that contains the version number of
+ the elbe tool that generated the file
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{.stamps}
+\begin{itemize}
+\item status information used by the Makefile
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{validation.txt}
+\begin{itemize}
+\item if elbe create was called with a XML file containing a 'fullpkgs' section
+ the file contains informations if a package version differs
+\item if a package in the 'pkg-list' was not found on one of the mirrors this
+ will be logged in this file
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Using the VM}
+\begin{verbatim}
+$ make run
+\end{verbatim}
+A Qemu with the buildenv.img will be started.
+\end{frame}
+
\begin{frame}[fragile]
\frametitle{The ELBE XML format}
-/usr/share/doc/elbe/examples/ contains a couple of examples:
+/usr/share/doc/elbe/examples/ contains a couple of examples that can be used
+as templates for an own project:
\begin{verbatim}
-$ ls -1 /usr/share/doc/elbe/examples/
-amd64-example.xml
-arm-complex-example.xml.gz
-arm-example.xml
-i386-example.xml
+$ ls /usr/share/doc/elbe/examples/
+amd64-example.xml beaglebone.xml
+arm-complex-example.xml i386-example.xml
+arm-example.xml ppc-example.xml
+arm-wheezy-example.xml x86-example.xml
\end{verbatim}
+Take a look at the different modes and finetuning sections. Also various
+iamge generation methods are used.
\end{frame}
\begin{frame}[fragile]
@@ -114,7 +216,12 @@ i386-example.xml
<project>
<name>ARMexample</name>
<version>08.15</version>
-...
+ <description>
+ creates an UBI based target system without debian package management
+ tools for version control and package build are added to the buildimage
+ </description>
+ <buildtype>armel</buildtype>
+ ...
</project>
\end{lstlisting}
\end{scriptsize}
@@ -128,30 +235,17 @@ i386-example.xml
<project>
...
<mirror>
- <primary_host>debian.tu-bs.de</primary_host>
+ <primary_host>ftp.de.debian.org</primary_host>
<primary_path>/debian</primary_path>
<primary_proto>http</primary_proto>
<url-list>
<url>
- <binary>http://debian.linutronix.de/elbe squeeze main</binary>
+ <binary>http://debian.linutronix.de/elbe wheezy main</binary>
+ <source>http://debian.linutronix.de/elbe wheezy main</source>
</url>
</url-list>
</mirror>
-...
-</project>
-\end{lstlisting}
-\end{scriptsize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{The ELBE XML format: Project setup}
-\lstset{language=XML}
-\begin{scriptsize}
-\begin{lstlisting}
-<project>
-...
<noauth />
- <suite>squeeze</suite>
...
</project>
\end{lstlisting}
@@ -165,29 +259,15 @@ i386-example.xml
\begin{lstlisting}
<project>
...
+ <suite>wheezy</suite>
<buildimage>
- <arch>armel</arch>
- <size>20G</size>
- <mem>256</mem>
- <interpreter>qemu-system-arm</interpreter>
- <kinitrd>testrd</kinitrd>
- <console>ttyAMA0,115200n1</console>
- <machine>versatilepb</machine>
- <NIC>
- <model>smc91c111</model>
- <MAC>de:ad:be:ef:be:05</MAC>
- </NIC>
- <portforwarding>
- <forward>
- <proto>tcp</proto>
- <buildenv>22</buildenv>
- <host>5022</host>
- </forward>
- </portforwarding>
+ <kinitrd>elbe-bootstrap</kinitrd>
<pkg-list>
+ <pkg>build-essential</pkg>
+ <pkg>debhelper</pkg>
+ <pkg>git</pkg>
</pkg-list>
</buildimage>
-...
</project>
\end{lstlisting}
\end{scriptsize}
@@ -209,62 +289,30 @@ i386-example.xml
</tar>
</package>
<finetuning>
+ <rm>usr/share/doc</rm> <!-- remove from target -->
+ <rm>/usr/share/doc</rm> <!-- remove from buildenv -->
</finetuning>
<pkg-list>
- <pkg>build-essential</pkg>
<pkg>bash</pkg>
- <pkg>less</pkg>
- <pkg>git</pkg>
- <pkg>debhelper</pkg>
- <pkg>nfs-common</pkg>
- <pkg>openssh-server</pkg>
</pkg-list>
</target>
\end{lstlisting}
\end{scriptsize}
\end{frame}
-\begin{frame}[fragile]
-\frametitle{The ELBE XML format: finetuning}
-\lstset{language=XML}
-\begin{scriptsize}
-\begin{lstlisting}
-<target>
-...
- <finetuning>
- <rm>/usr/share/doc</rm>
- <mv path="/var">/var_ro</mv>
- <cp path=/copy/me>/my/name/on/target</mv>
- </finetuning>
-...
-</target>
-\end{lstlisting}
-\end{scriptsize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{The ELBE XML format: finetuning}
-\lstset{language=XML}
-\begin{scriptsize}
-\begin{lstlisting}
-<target>
-...
- <finetuning>
- <command>cp /etc/passwd etc/ </command>
- </finetuning>
-...
-</target>
-\end{lstlisting}
-\end{scriptsize}
-\end{frame}
\begin{frame}
\frametitle{ELBE modes}
\begin{itemize}
-\item default
-\item norecommend (can be combined with any of the other modes): Don't install recommended packages
-\item setsel: The resulting image will just contain dpkg. This mode offers a finegrained control on which packages should be installed
-\item diet: Only copy files referenced in the package management. Only use this for small and simple root filesystems!
+\item norecommend (can be combined with any of the other modes):
+ Don't install recommended packages
+\item default: target is a copy of the buildenv
+\item diet: Only copy files referenced in the package management.
+ Only use this for small and simple root filesystems!
+\item setsel: The resulting image will just contain dpkg.
+ This mode offers a finegrained control on which packages should be installed
+\item tighten: ignore dependencies, this is useful for very minimalistic busybox
+ based systems. Normally setsel mode should be used.
\end{itemize}
\end{frame}
@@ -277,7 +325,6 @@ i386-example.xml
...
<diet />
<norecommend />
-
<pkg-list>
<pkg>bash</pkg>
</pkg-list>
@@ -288,15 +335,21 @@ i386-example.xml
\end{frame}
\begin{frame}[fragile]
-\frametitle{ELBE command overview: elbe-setsel}
+\frametitle{elbe-setsel usage}
\begin{enumerate}
\item Create package list:
\begin{verbatim}
-dpkg --get-selections > selections.list
+hostpc$ make run-con
+# remove all pkgs not wanted on the target
+target$ dpkg --purge vim-nox libxml2-dev
+# export installed package list
+target$ dpkg --get-selections > selections.list
+# copy list to hostpc
+target$ scp selections.list 10.0.2.2:/tmp
\end{verbatim}
\item Import the package list to your xml file:
\begin{verbatim}
-elbe setsel <xmlfile> selections.list
+hostpc$ elbe setsel rfs.xml /tmp/selections.list
\end{verbatim}
\end{enumerate}
\end{frame}
@@ -304,55 +357,57 @@ elbe setsel <xmlfile> selections.list
\begin{frame}[fragile]
\frametitle{Using a CDROM}
\begin{itemize}
-\item Each ELBE build will create a CD-ROM image with the package (which have been used for the installation): install.iso
-\item You can use this ISO image for future builds:
-\begin{verbatim}
-<mirror>
-<cdrom>/home/user/elbe-exmpl/install.iso</cdrom>
-</mirror>
-\end{verbatim}
-\item You can also use the elbe-setcdrom command
+\item Each ELBE build will create a CD-ROM image with the packages
+ needed for an elbe image build.
+\item this ISO image can be used for future builds:
\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{ELBE command overview: elbe-setcdrom}
\begin{verbatim}
-$ elbe setcdrom mysqueeze.xml elbe-cd.iso
+$ elbe setcdrom rfs.xml \
+/home/user/elbe-test/install.iso
\end{verbatim}
-This command removes all configured mirrors and additional urls from the XML file and sets the given ISO image as the only mirror.
+This command removes all configured mirrors and additional urls from the XML
+file and sets the given ISO image as the only mirror.
\end{frame}
\begin{frame}[fragile]
-\frametitle{ELBE command overview: elbe-chg\_archive}
-It is possible to include an archive into the xml file, that is unpacked into the target root-filesystem after the finetuning step:
+\frametitle{elbe-chg\_archive}
+It is possible to include an archive into the xml file, that is unpacked into
+the target RFS before and after the finetuning step:
\begin{verbatim}
-elbe chg_archive <xmlfile> archive.tar.bz2
+$ mkdir archive/testd
+$ cd archive
+$ echo 'port = 1234' > archive/testd/myconfig
+$ tar cjf ../archive.tar.bz2 *
+$ cd ..
+$ elbe chg_archive <xmlfile> archive.tar.bz2
\end{verbatim}
NOTE: The file must be a bzip2 compressed tar (.tar.bz2)
\end{frame}
\begin{frame}[fragile]
-\frametitle{ELBE command overview: elbe-get\_archive}
+\frametitle{elbe-get\_archive}
It is also possible to extract an archive from an XML file:
\begin{verbatim}
-elbe get_archive <xmlfile> <archive>
+$ elbe get_archive <xmlfile> <archive>
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
-\frametitle{ELBE command overview: elbe-show}
-The elbe show command prints out some textual information about an ELBE xml file:
+\frametitle{elbe-show}
+The elbe show command prints out some textual information about an
+ELBE xml file:
\begin{verbatim}
-$ elbe show arm-example.xml
+$ elbe show --verbose arm-example.xml
== arm-example.xml: ARMexample - version 08.15 ==
-Debian suite: squeeze/armel
+Debian suite: wheezy/armel
[...]
\end{verbatim}
+The '--verbose' parameter shows more informations, like the complete package
+list.
\end{frame}
\begin{frame}[fragile]
-\frametitle{ELBE command overview: elbe-xsdtoasciidoc}
+\frametitle{elbe-xsdtoasciidoc}
Create an asciidoc documentation from an annotated XML Schema file
\begin{verbatim}
# Create asciidoc format
@@ -360,9 +415,75 @@ $ elbe xsdtoasciidoc --output=myasciidoc dbsfed.xsd
# Create HTML doc
$ asciidoc myasciidoc
\end{verbatim}
+This is used to create the documentation of the ELBE XML schema.
\end{frame}
\begin{frame}[fragile]
+\frametitle{elbe-checkupdates}
+Use a source.xml file to check if there are updates available for an existing
+image:
+\begin{verbatim}
+$ elbe check_updates source.xml
+checking /home/user/rfs/build-release/source.xml
+armel
+Reading package lists... Done
+Building dependency tree... Done
+Reading package lists... Done
+Building dependency tree... Done
+adduser 3.113+nmu1 != 3.113+nmu3
+1 updates required
+\end{verbatim}
+This can be used e.g. as cronjob to get notifications if updates are availabe.
+
+Than the person responsible for updates can decide what needs to be done.
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{elbe-diff}
+compares to RFS trees and suggests commands to update the archive tar and a
+'finetuning' section:
+\begin{verbatim}
+$ sudo elbe diff rfs rfs-modified
+suggesting:
+
+<rm>/etc/init.d/mountall-bootclean.sh</rm>
+<rm>/etc/init.d/bootmisc.sh</rm>
+tar rf archive.tar -C build/rfs /sbin/dhclient-script
+tar rf archive.tar -C build/rfs /etc/init.d/mountfstab.sh
+\end{verbatim}
+This can be used if a (nfsroot) filesystem was modified and these modifications
+should be included in an ELBE XML file.
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{elbe-pkgdiff}
+compares to RFS trees and displays the difference of the installed packages
+\begin{verbatim}
+$ sudo elbe pkgdiff `pwd`/rfs `pwd`/rfs-modified
+-<pkg>firmware-ivtv</pkg>
+-<pkg>firmware-ipw2x00</pkg>
+\end{verbatim}
+This can be used if a (nfsroot) filesystem was modified and these modifications
+should be included in an ELBE XML file.
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{elbe-validate}
+validates the xmlfile provided, and prints out errors:
+\begin{verbatim}
+$ elbe validate rfs.xml
+rfs.xml:101 error Element 'type': [facet 'enumeration'] The value 'ext5' is
+not an element of the set {'ext2', 'ext3', 'ext4', 'xfs', 'ubifs', 'tmpfs',
+'debugfs', 'configfs', 'proc', 'sysfs', 'vfat'}.
+rfs.xml:101 error Element 'type': 'ext5' is not a valid value of the atomic
+type '{https://www.linutronix.de/projects/Elbe}fs_type'.
+validation failed
+\end{verbatim}
+\dots there is an typo in the XML file line 105: ext5 instead of ext4
+\end{frame}
+
+
+\begin{frame}[fragile]
\frametitle{Creating UBI images}
\lstset{language=XML}
\begin{scriptsize}
@@ -404,32 +525,26 @@ $ asciidoc myasciidoc
\begin{lstlisting}
<fstab>
<bylabel>
- <label>data</label>
- <mountpoint>/opt</mountpoint>
- <fs>
- <type>ubifs</type>
- <mkfs>-x lzo</mkfs>
- </fs>
- <options>rw</options>
- </bylabel>
- <bylabel>
<label>rfs</label>
<mountpoint>/</mountpoint>
<fs>
<type>ubifs</type>
<mkfs>-x lzo</mkfs>
</fs>
- <options>ro</options>
</bylabel>
- <bydev>
- <source>proc</source>
- <mountpoint>/proc</mountpoint>
- <fs>
- <type>proc</type>
- </fs>
- </bydev>
</fstab>
\end{lstlisting}
\end{scriptsize}
\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Future? elbe buildchroot}
+Something like this may be used in the future:
+\begin{lstlisting}
+sudo elbe buildchroot -t build-chroot -o buildchroot.log -n myrfs \
+--skip-validation --skip-cdrom --debug --buildtype=armel
+\end{lstlisting}
+Testing and feedback is welcome!
+\end{frame}
+
\input{tailpres}
diff --git a/distribution/elbe/Makefile b/distribution/elbe/Makefile
new file mode 100644
index 0000000..d641258
--- /dev/null
+++ b/distribution/elbe/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/distribution/elbe/elbe-logo.png b/distribution/elbe/elbe-logo.png
new file mode 100644
index 0000000..1d3c745
--- /dev/null
+++ b/distribution/elbe/elbe-logo.png
Binary files differ
diff --git a/distribution/elbe/pres_elbe.tex b/distribution/elbe/pres_elbe.tex
new file mode 100644
index 0000000..8c66cb3
--- /dev/null
+++ b/distribution/elbe/pres_elbe.tex
@@ -0,0 +1,106 @@
+\input{configpres}
+
+\begin{frame}
+\begin{figure}[ht]
+\includegraphics[width=0.7\textwidth]{elbe-logo.png}
+\end{figure}
+\centerline{\large Embedded Linux Build Environment}
+\vskip20pt
+Manuel Traut, Linutronix GmbH
+\end{frame}
+
+\subsection{Agenda}
+\begin{frame}
+\begin{itemize}
+\item What is elbe?
+\item elbe Target Architectures
+\item elbe Workflow
+\item elbe Features
+\end{itemize}
+\end{frame}
+
+\subsection{What is elbe?}
+\begin{frame}
+\begin{itemize}
+\item elbe is a tool based on selected components of the Debian infrastructure
+\item it is NOT another embedded Linux distribution
+\item it uses the well maintained Debian binary packages
+\item own application is compiled natively in a virtual machine
+\item no more cross-compiling!
+\end{itemize}
+
+
+The goal of the elbe project is to
+
+make embedded Linux development easier and reproducable
+\end{frame}
+
+\subsection{elbe Target Architectures}
+\begin{frame}
+It currently supports the following Target architectures:
+\begin{itemize}
+\item x86 (32 and 64 bit)
+\item powerpc
+\item arm and armhf
+\end{itemize}
+\end{frame}
+
+\subsection{elbe Workflow}
+\begin{frame}
+\begin{itemize}
+\item use an example XML file and customize it
+\item generate a Buildenvironment
+\item build Debian Binary Package(s) from your own Application
+\item add the custom Packages to the XML file
+\item build the Target Image
+\end{itemize}
+\end{frame}
+
+\subsection{elbe Features / elbe Output}
+\begin{frame}
+\begin{itemize}
+\item Buildenvironment for native development
+
+ inside a qemu virtual machine
+\item ready to use Target Image
+
+(tar.gz, cpio, UBI, HD/SDcard)
+\item Licence Informations for all used packages
+\item Source and Binary Packages as ISO Image,
+
+usable for regeneration builds
+\end{itemize}
+\end{frame}
+
+\subsection{elbe Features}
+\begin{frame}
+\begin{itemize}
+\item different modes for Target Image generation
+\item finetuning rules in XML
+\item archive.tar.bz2 for config files embedded in XML
+\item Update checker
+\item Emdebian (grip) Packages can be used
+\end{itemize}
+\end{frame}
+
+\subsection{References}
+\begin{frame}
+\begin{description}
+\item[elbe website] http://elbe-rfs.org
+\item[elbe source] http://github.com/linutronix/elbe
+\item[Debian website] http://debian.org
+\end{description}
+\end{frame}
+
+\subsection{Conclusion}
+\begin{frame}
+\begin{itemize}
+\item focus on your application
+\item reuse the power of Debian, don't build everything again
+\item reproduce your Target Image even in 10 years ore more
+\item it's possible to build full featured Debian Images
+\item and optimized Images without dpkg/apt functionality
+\end{itemize}
+\end{frame}
+
+\input{tailpres}
diff --git a/distribution/section.tex b/distribution/section.tex
index 41fa146..da6249a 100644
--- a/distribution/section.tex
+++ b/distribution/section.tex
@@ -1 +1 @@
-\section{ELBE}
+\section{Distributions}
diff --git a/frameworks/middleware/examples/celery/README b/frameworks/middleware/examples/celery/README
new file mode 100644
index 0000000..9045901
--- /dev/null
+++ b/frameworks/middleware/examples/celery/README
@@ -0,0 +1,3 @@
+apt-get install python-celery
+./worker.sh
+./test.py
diff --git a/frameworks/middleware/examples/celery/exec_task.py b/frameworks/middleware/examples/celery/exec_task.py
new file mode 100644
index 0000000..9169250
--- /dev/null
+++ b/frameworks/middleware/examples/celery/exec_task.py
@@ -0,0 +1,15 @@
+import os
+
+from celery import Celery
+
+app = Celery ('tasks', broker='sqla+sqlite:///celerydb.sqlite',
+ backend='db+sqlite:///results.sqlite')
+
+@app.task
+def execute (command):
+ return os.system (command)
+
+@app.task
+def execute2 (command):
+ if os.system (command):
+ raise Exception ("command not found")
diff --git a/frameworks/middleware/examples/celery/test.py b/frameworks/middleware/examples/celery/test.py
new file mode 100755
index 0000000..7d79c8e
--- /dev/null
+++ b/frameworks/middleware/examples/celery/test.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+
+import sys
+import traceback
+
+from exec_task import execute, execute2
+
+execute.delay ("echo hello world")
+
+print "\n\n"
+
+result = execute.delay ("sleep 2")
+print "result ready?", result.ready ()
+print "wait for result..."
+ret = result.get (timeout=10)
+print "task done", ret
+
+print "\n\n"
+
+result = execute.delay ("/bin/false")
+print "/bin/false:", result.get (timeout=10)
+
+print "\n\n"
+
+result = execute2.delay ("/bin/treu")
+try:
+ print "/bin/treu:", result.get (timeout=10)
+except:
+ print "exception occured; backtrace:"
+ print result.traceback
+
+print "\n\n"
+
+result = execute2.delay ("/bin/true")
+print "/bin/true:", result.get (timeout=10)
+
diff --git a/frameworks/middleware/examples/celery/worker.sh b/frameworks/middleware/examples/celery/worker.sh
new file mode 100755
index 0000000..1705198
--- /dev/null
+++ b/frameworks/middleware/examples/celery/worker.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+celery -A exec_task worker --loglevel=info
diff --git a/frameworks/middleware/examples/corba/AUTHORS b/frameworks/middleware/examples/corba/AUTHORS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/frameworks/middleware/examples/corba/AUTHORS
diff --git a/frameworks/middleware/examples/corba/ChangeLog b/frameworks/middleware/examples/corba/ChangeLog
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/frameworks/middleware/examples/corba/ChangeLog
diff --git a/frameworks/middleware/examples/corba/Makefile.am b/frameworks/middleware/examples/corba/Makefile.am
new file mode 100644
index 0000000..72a6a67
--- /dev/null
+++ b/frameworks/middleware/examples/corba/Makefile.am
@@ -0,0 +1,29 @@
+IDL_COMPILER=tao_idl
+IDL_COMPILER_OPT=-GI
+
+IDL_GEN_H_SRV = pingI.h pingS.h
+IDL_GEN_S_SRV = pingS.cpp
+IDL_GEN_H_CLT = pingC.h pingC.inl
+IDL_GEN_S_CLT = pingC.cpp
+
+pingI.h: ping.idl
+ $(IDL_COMPILER) $(IDL_COMPILER_OPT) ping.idl
+
+noinst_HEADERS = $(IDL_GEN_H_SRV) $(IDL_GEN_H_CLT)
+
+CLEANFILES = $(IDL_GEN_H_SRV) $(IDL_GEN_S_SRV) \
+ $(IDL_GEN_H_CLT) $(IDL_GEN_S_CLT) pingI.cpp
+
+CORBA_CFLAGS = $(TAO_CFLAGS) $(TAO_CosNaming_CFLAGS) \
+ $(TAO_PortableServer_CFLAGS) $(TAO_RTCORBA_CFLAGS)
+CORBA_LIBS = $(TAO_LIBS) $(TAO_CosNaming_LIBS) $(TAO_PortableServer_LIBS) \
+ $(TAO_RTCORBA_LIBS)
+
+bin_PROGRAMS = receiver supplier
+receiver_SOURCES = ping_I.cpp $(IDL_GEN_S_SRV) $(IDL_GEN_S_CLT) Receiver.cpp
+receiver_CFLAGS = $(CORBA_CFLAGS)
+receiver_LDADD = $(CORBA_LIBS)
+
+supplier_SOURCES = Supplier.cpp $(IDL_GEN_S_CLT)
+supplier_CFLAGS = $(CORBA_CFLAGS)
+supplier_LDADD = $(CORBA_LIBS)
diff --git a/frameworks/middleware/examples/corba/NEWS b/frameworks/middleware/examples/corba/NEWS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/frameworks/middleware/examples/corba/NEWS
diff --git a/frameworks/middleware/examples/corba/README b/frameworks/middleware/examples/corba/README
new file mode 100644
index 0000000..5d71b99
--- /dev/null
+++ b/frameworks/middleware/examples/corba/README
@@ -0,0 +1,12 @@
+apt-get install -t experimental libtao-dev mpc-ace libtao-orbsvcs-dev \
+tao-cosnaming tao-idl tao-utils
+
+./autogen.sh
+./configure
+make
+
+Naming_Service -ORBEndpoint iiop://localhost:55555
+
+
+./receiver -ORBInitRef NameService=corbaloc:iiop:localhost:55555/NameService
+./supplier test -ORBInitRef NameService=corbaloc:iiop:localhost:55555/NameService
diff --git a/frameworks/middleware/examples/corba/autogen.sh b/frameworks/middleware/examples/corba/autogen.sh
new file mode 100755
index 0000000..58c0175
--- /dev/null
+++ b/frameworks/middleware/examples/corba/autogen.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+automake --add-missing
+autoreconf -sif
diff --git a/frameworks/middleware/examples/corba/configure.ac b/frameworks/middleware/examples/corba/configure.ac
new file mode 100644
index 0000000..6127c33
--- /dev/null
+++ b/frameworks/middleware/examples/corba/configure.ac
@@ -0,0 +1,28 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.69])
+AC_INIT([corba-example], [1.0], [manut@linutronix.de])
+AC_CONFIG_SRCDIR([Receiver.cpp])
+AM_INIT_AUTOMAKE([dist-bzip2])
+AC_CONFIG_HEADERS([config.h])
+
+# Checks for programs.
+AC_PROG_CXX
+
+# Checks for libraries.
+PKG_CHECK_MODULES([TAO], [TAO])
+PKG_CHECK_MODULES([TAO_CosNaming], [TAO_CosNaming])
+PKG_CHECK_MODULES([TAO_PortableServer], [TAO_PortableServer])
+PKG_CHECK_MODULES([TAO_RTCORBA], [TAO_RTCORBA])
+
+# Checks for header files.
+
+# Checks for typedefs, structures, and compiler characteristics.
+
+# Checks for library functions.
+AC_CHECK_FUNCS([clock_gettime])
+
+AC_CONFIG_FILES([Makefile])
+
+AC_OUTPUT
diff --git a/frameworks/middleware/examples/corba/ping_I.cpp b/frameworks/middleware/examples/corba/ping_I.cpp
index 309d1e8..e02924f 100644
--- a/frameworks/middleware/examples/corba/ping_I.cpp
+++ b/frameworks/middleware/examples/corba/ping_I.cpp
@@ -21,4 +21,3 @@ void Linutronix_Ping_i::send (
clock_gettime(CLOCK_MONOTONIC, &time_rx);
std::cout<<time_rx.tv_sec<<":"<<time_rx.tv_nsec/1000<<": "<<payload<<"\n";
}
-
diff --git a/frameworks/middleware/examples/dbus/AUTHORS b/frameworks/middleware/examples/dbus/AUTHORS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/frameworks/middleware/examples/dbus/AUTHORS
diff --git a/frameworks/middleware/examples/dbus/ChangeLog b/frameworks/middleware/examples/dbus/ChangeLog
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/frameworks/middleware/examples/dbus/ChangeLog
diff --git a/frameworks/middleware/examples/dbus/Makefile.am b/frameworks/middleware/examples/dbus/Makefile.am
new file mode 100644
index 0000000..830a98e
--- /dev/null
+++ b/frameworks/middleware/examples/dbus/Makefile.am
@@ -0,0 +1,8 @@
+bin_PROGRAMS = pingserver pingclient
+pingserver_SOURCES = ping-server.c
+pingserver_CFLAGS = $(DBUS_CFLAGS)
+pingserver_LDADD = $(DBUS_LIBS)
+
+pingclient_SOURCES = ping-client.c
+pingclient_CFLAGS = $(DBUS_CFLAGS)
+pingclient_LDADD = $(DBUS_LIBS)
diff --git a/frameworks/middleware/examples/dbus/NEWS b/frameworks/middleware/examples/dbus/NEWS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/frameworks/middleware/examples/dbus/NEWS
diff --git a/frameworks/middleware/examples/dbus/README b/frameworks/middleware/examples/dbus/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/frameworks/middleware/examples/dbus/README
diff --git a/frameworks/middleware/examples/dbus/autogen.sh b/frameworks/middleware/examples/dbus/autogen.sh
new file mode 100755
index 0000000..58c0175
--- /dev/null
+++ b/frameworks/middleware/examples/dbus/autogen.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+automake --add-missing
+autoreconf -sif
diff --git a/frameworks/middleware/examples/dbus/compile.sh b/frameworks/middleware/examples/dbus/compile.sh
deleted file mode 100755
index d2b2822..0000000
--- a/frameworks/middleware/examples/dbus/compile.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-gcc -o server -lrt -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -ldbus-glib-1 -ldbus-1 -lgobject-2.0 -lglib-2.0 ping-server.c
-gcc -o client -lrt -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -ldbus-glib-1 -ldbus-1 -lgobject-2.0 -lglib-2.0 ping-client.c
diff --git a/frameworks/middleware/examples/dbus/configure.ac b/frameworks/middleware/examples/dbus/configure.ac
new file mode 100644
index 0000000..bf99b42
--- /dev/null
+++ b/frameworks/middleware/examples/dbus/configure.ac
@@ -0,0 +1,24 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.69])
+AC_INIT([dbus-example], [1.0], [manut@linutronix.de])
+AC_CONFIG_SRCDIR([ping-server.c])
+AM_INIT_AUTOMAKE([dist-bzip2])
+AC_CONFIG_HEADERS([config.h])
+
+# Checks for programs.
+AC_PROG_CC
+
+# Checks for libraries.
+PKG_CHECK_MODULES([DBUS], [dbus-glib-1])
+# Checks for header files.
+
+# Checks for typedefs, structures, and compiler characteristics.
+
+# Checks for library functions.
+AC_CHECK_FUNCS([clock_gettime])
+
+AC_CONFIG_FILES([Makefile])
+
+AC_OUTPUT
diff --git a/frameworks/middleware/examples/dbus/ping-client.c b/frameworks/middleware/examples/dbus/ping-client.c
index e3035e4..ceb3205 100644
--- a/frameworks/middleware/examples/dbus/ping-client.c
+++ b/frameworks/middleware/examples/dbus/ping-client.c
@@ -12,10 +12,10 @@ int main (int argc, char **argv)
DBusConnection *bus;
DBusError error;
- if (argc > 1)
- v_STRING = argv[1];
- else
- v_STRING = "no arg given";
+ if (argc > 1)
+ v_STRING = argv[1];
+ else
+ v_STRING = "no arg given";
/* Create a new event loop to run in */
loop = g_main_loop_new (NULL, FALSE);
@@ -42,8 +42,8 @@ int main (int argc, char **argv)
static gboolean send_ping (DBusConnection *bus)
{
DBusMessage *message;
- struct timespec tx_time;
- struct timespec done_time;
+ struct timespec tx_time;
+ struct timespec done_time;
message = dbus_message_new_signal ("/de/linutronix/Ping",
"de.linutronix.Ping", "Ping");
@@ -51,12 +51,16 @@ static gboolean send_ping (DBusConnection *bus)
dbus_message_append_args (message,
DBUS_TYPE_STRING, &v_STRING,
DBUS_TYPE_INVALID);
- clock_gettime(CLOCK_MONOTONIC, &tx_time);
+
+ clock_gettime(CLOCK_MONOTONIC, &tx_time);
+
/* Send the signal */
dbus_connection_send (bus, message, NULL);
- clock_gettime(CLOCK_MONOTONIC, &done_time);
- g_print("%d:%d\n%d:%d\n\n", tx_time.tv_sec, tx_time.tv_nsec/1000,
- done_time.tv_sec, done_time.tv_nsec/1000);
+ clock_gettime(CLOCK_MONOTONIC, &done_time);
+
+ g_print("%d:%d\n%d:%d\n\n", tx_time.tv_sec, tx_time.tv_nsec/1000,
+ done_time.tv_sec, done_time.tv_nsec/1000);
+
/* Free the signal now we have finished with it */
dbus_message_unref (message);
/* Return TRUE to tell the event loop we want to be called again */
diff --git a/frameworks/middleware/examples/dbus/ping-server.c b/frameworks/middleware/examples/dbus/ping-server.c
index 36dd122..96b2397 100644
--- a/frameworks/middleware/examples/dbus/ping-server.c
+++ b/frameworks/middleware/examples/dbus/ping-server.c
@@ -60,7 +60,6 @@ static DBusHandlerResult signal_filter
clock_gettime(CLOCK_MONOTONIC, &rx_time);
g_print("ping received: %s - %d:%d\n", s, rx_time.tv_sec,
rx_time.tv_nsec/1000);
- // dbus_free (s);
} else {
g_print("ping received, but error getting message: %s\n", error.message);
dbus_error_free (&error);
@@ -69,4 +68,3 @@ static DBusHandlerResult signal_filter
}
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
-
diff --git a/frameworks/middleware/examples/soap/client.py b/frameworks/middleware/examples/soap/client.py
new file mode 100755
index 0000000..9cd35f2
--- /dev/null
+++ b/frameworks/middleware/examples/soap/client.py
@@ -0,0 +1,11 @@
+#!/usr/bin/python
+
+from datetime import datetime
+from ZSI.client import Binding
+
+b = Binding(url='http://localhost:8000/')
+t = b.today (5)
+# t = 2014-02-18 15:59:50.571927
+conv = datetime.strptime (t, "%Y-%m-%d %H:%M:%S.%f")
+print "Today: %s" % conv.strftime ("%d.%m.%Y, %H:%M")
+print b.load ("string")
diff --git a/frameworks/middleware/examples/soap/server.py b/frameworks/middleware/examples/soap/server.py
new file mode 100755
index 0000000..32a550a
--- /dev/null
+++ b/frameworks/middleware/examples/soap/server.py
@@ -0,0 +1,18 @@
+#!/usr/bin/python
+
+from datetime import datetime
+from ZSI import dispatch
+
+def today (arg):
+ print "today arg:", arg
+ today = datetime.today ()
+ return str (today)
+
+def load (arg):
+ print "load arg:", arg
+ fd = open ("/proc/loadavg", "r")
+ loadavg = fd.read ()
+ sysload = loadavg.split ()
+ return sysload[0]
+
+dispatch.AsServer (port=8000, rpc=True)
diff --git a/frameworks/middleware/examples/xmlrpc/client.py b/frameworks/middleware/examples/xmlrpc/client.py
new file mode 100755
index 0000000..2b466b7
--- /dev/null
+++ b/frameworks/middleware/examples/xmlrpc/client.py
@@ -0,0 +1,14 @@
+#!/usr/bin/python
+
+import xmlrpclib
+from datetime import datetime
+
+proxy = xmlrpclib.ServerProxy ("http://localhost:8000/")
+
+today = proxy.today ()
+# today = 20140218T14:23:45
+converted = datetime.strptime (today.value, "%Y%m%dT%H:%M:%S")
+print "Today: %s" % converted.strftime ("%d.%m.%Y, %H:%M")
+
+load = proxy.load ()
+print "system load:", load
diff --git a/frameworks/middleware/examples/xmlrpc/server.py b/frameworks/middleware/examples/xmlrpc/server.py
new file mode 100755
index 0000000..ebde5ee
--- /dev/null
+++ b/frameworks/middleware/examples/xmlrpc/server.py
@@ -0,0 +1,21 @@
+#!/usr/bin/python
+
+from datetime import datetime
+from SimpleXMLRPCServer import SimpleXMLRPCServer
+import xmlrpclib
+
+def today ():
+ today = datetime.today ()
+ return xmlrpclib.DateTime (today)
+
+def load ():
+ fd = open ("/proc/loadavg", "r")
+ loadavg = fd.read ()
+ sysload = loadavg.split ()
+ return xmlrpclib.FloatType (sysload[0])
+
+server = SimpleXMLRPCServer (("localhost", 8000))
+server.register_function (today, "today")
+server.register_function (load, "load")
+print "Listening on port 8000..."
+server.serve_forever ()
diff --git a/frameworks/middleware/examples/xmpp/README b/frameworks/middleware/examples/xmpp/README
new file mode 100644
index 0000000..ef147ce
--- /dev/null
+++ b/frameworks/middleware/examples/xmpp/README
@@ -0,0 +1,28 @@
+a) apt-get install libqxmpp-dev psi ejabberd
+
+b) edit /etc/ejabberd/ejabberd.cfg to allow inband registration:
+
+ --8<---
+ %% No username can be registered via in-band registration:
+ %% To enable in-band registration, replace 'deny' with 'allow'
+ % (note that if you remove mod_register from modules list then users will not
+ % be able to change their password as well as register).
+ % This setting is default because it's more safe.
+ {access, register, [{allow, all}]}.
+ --8<---
+
+c) start psi and configure it to use 'localhost' as server and create two
+ accounts: <yourname>:<yourpass>
+ qtapp:test
+
+d) login with <yourname> and qtapp, add both accounts to their contact list,
+ and try to send messages. logoff the qtapp account.
+
+e) build the qt client application and start it:
+
+qmake
+make
+./client
+
+f) the qtapp account needs now to be online in psi, write a messagte to qtapp
+ the message should be displayed in the commandline
diff --git a/frameworks/middleware/examples/xmpp/client.cpp b/frameworks/middleware/examples/xmpp/client.cpp
new file mode 100644
index 0000000..9390438
--- /dev/null
+++ b/frameworks/middleware/examples/xmpp/client.cpp
@@ -0,0 +1,24 @@
+/*
+* Copyright (C) 2008-2010 Manjeet Dahiya
+*
+* Author:
+* Manjeet Dahiya
+* modified 2014 by Manuel Traut <manut@linutronix.de>
+*/
+
+#include <QtCore/QCoreApplication>
+
+//#include <qxmpp/QXmppLogger.h>
+
+#include "myclient.h"
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication a(argc, argv);
+ // QXmppLogger::getLogger()->setLoggingType(QXmppLogger::StdoutLogging);
+
+ MyClient client;
+ client.connectToServer("qtapp@localhost", "test");
+
+ return a.exec();
+}
diff --git a/frameworks/middleware/examples/xmpp/myclient.cpp b/frameworks/middleware/examples/xmpp/myclient.cpp
new file mode 100644
index 0000000..fa28603
--- /dev/null
+++ b/frameworks/middleware/examples/xmpp/myclient.cpp
@@ -0,0 +1,32 @@
+/*
+* Copyright (C) 2008-2010 Manjeet Dahiya
+*
+* Author:
+* Manjeet Dahiya
+*
+* modified 2014 by Manuel Traut <manut@linutronix.de>
+*/
+
+#include <qxmpp/QXmppMessage.h>
+#include <iostream>
+
+#include "myclient.h"
+
+MyClient::MyClient() : QXmppClient()
+{
+ bool check = connect(this,
+ SIGNAL(messageReceived(QXmppMessage)),
+ SLOT(message_rx(QXmppMessage)));
+ Q_ASSERT(check);
+ Q_UNUSED(check);
+}
+
+MyClient::~MyClient() { ; }
+
+void MyClient::message_rx(const QXmppMessage& message)
+{
+ QString from = message.from();
+ QString msg = message.body();
+ std::cout<<from.toStdString()<<": "<<msg.toStdString()<<std::endl;
+ sendPacket(QXmppMessage("", from, "you mean " + msg + "??"));
+}
diff --git a/frameworks/middleware/examples/xmpp/myclient.h b/frameworks/middleware/examples/xmpp/myclient.h
new file mode 100644
index 0000000..22d864c
--- /dev/null
+++ b/frameworks/middleware/examples/xmpp/myclient.h
@@ -0,0 +1,17 @@
+#ifndef CLIENT_H
+#define CLIENT_H
+
+#include <qxmpp/QXmppClient.h>
+
+class MyClient : public QXmppClient
+{
+ Q_OBJECT
+public:
+ MyClient();
+ ~MyClient();
+
+public slots:
+ void message_rx(const QXmppMessage&);
+};
+
+#endif
diff --git a/frameworks/middleware/examples/xmpp/xmpp.pro b/frameworks/middleware/examples/xmpp/xmpp.pro
new file mode 100644
index 0000000..7f0be00
--- /dev/null
+++ b/frameworks/middleware/examples/xmpp/xmpp.pro
@@ -0,0 +1,15 @@
+######################################################################
+# Automatically generated by qmake (2.01a) Tue Feb 18 19:47:09 2014
+######################################################################
+
+TEMPLATE = app
+TARGET = client
+DEPENDPATH += .
+INCLUDEPATH += .
+
+# Input
+SOURCES += client.cpp myclient.cpp
+HEADERS += myclient.h
+
+QT += network
+LIBS += -lqxmpp
diff --git a/frameworks/middleware/pres_middleware.tex b/frameworks/middleware/pres_middleware.tex
index 2f4c462..a658f83 100644
--- a/frameworks/middleware/pres_middleware.tex
+++ b/frameworks/middleware/pres_middleware.tex
@@ -3,23 +3,544 @@
\title{\lq Middleware\rq}
\maketitle
-\subsection{DBUS}
\begin{frame}
-\frametitle{DBUS Communication Framework}
+\frametitle{Agenda}
+\begin{itemize}
+\item Overview
+\item XML based Middleware
+\item Celery
+\item D-Bus
+\item CORBA
+\end{itemize}
+GOAL: get an idea about:
+
+the amount of available middleware solutions
+
+and for what they can be used.
+\end{frame}
+
+\subsection{Overview}
+
+\begin{frame}
+\frametitle{Use-case}
+\begin{center}
+\includegraphics[width=0.8\textheight]{images/714px-Middleware_Schema.png}
+\end{center}
+\tiny Source: http://commons.wikimedia.org/wiki/File:Middleware\_Schema.svg
+\end{frame}
+
+\begin{frame}
+\frametitle{Why should we use a middleware?}
+\begin{itemize}
+\item IPC
+\item scalability
+\item os abstraction
+\item reusability of sw components
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Kinds of Middleware}
+\begin{itemize}
+\item Message Oriented Middleware (MOM)
+\item Remote Procedure Calls (RPC)
+\item Webapplications?
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Requirements}
+\begin{block}{Abstraction Layers}
+\begin{itemize}
+\item operating system
+\item programing language
+\item localization
+\item transport
+\item concurrent access
+\end{itemize}
+\end{block}
+\end{frame}
+
+\begin{frame}
+\frametitle{Requirements}
+\begin{block}{Technical, product specific}
+\begin{itemize}
+\item os / language support
+\item performance
+\item requirement coverage
+\item commerical, open-source, (long-time) support
+\end{itemize}
+\end{block}
+\end{frame}
+
+\begin{frame}
+\frametitle{Standards, Protocols}
+\begin{itemize}
+\item XML based Middleware
+\item Celery - Job Queue Protocol
+\item D-Bus - MOM
+\item CORBA - Common Object Request Broker
+\end{itemize}
+\end{frame}
+
+\subsection{XML based Middleware}
+\begin{frame}
+\frametitle{popular protocols}
+\begin{description}
+\item[XML-RPC] Extensible Markup Language Remote Procedure Call
+\item[SOAP/WSDL] many webservices are based on SOAP
+\item[XMPP] Extensible Messaging and Presence Protocol
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{XML-RPC}
+\begin{itemize}
+\item native supported by Python (see example)
+\item C/C++ Implementation: http://xmlrpc-c.sourceforge.net/
+\item Client- / Serverarchitecture
+\item uses http as transport
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{XML-RPC example in Python}
+server.py\#p1
+\begin{lstlisting}[language=python]
+from datetime import datetime
+from SimpleXMLRPCServer import SimpleXMLRPCServer
+import xmlrpclib
+
+def today ():
+ today = datetime.today ()
+ return xmlrpclib.DateTime (today)
+
+def load ():
+ fd = open ("/proc/loadavg", "r")
+ loadavg = fd.read ()
+ sysload = loadavg.split ()
+ return xmlrpclib.FloatType (sysload[0])
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{XML-RPC example in Python}
+server.py\#p2
+\begin{lstlisting}[language=python]
+server = SimpleXMLRPCServer (("localhost",
+ 8000))
+
+server.register_function (today, "today")
+server.register_function (load, "load")
+
+print "Listening on port 8000..."
+server.serve_forever ()
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{XML-RPC example in Python}
+client.py\#p1
+\begin{lstlisting}[language=python]
+import xmlrpclib
+from datetime import datetime
+
+proxy = xmlrpclib.ServerProxy (
+ "http://localhost:8000/")
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{XML-RPC example in Python}
+client.py\#p2
+\begin{lstlisting}[language=python]
+today = proxy.today ()
+# today = 20140218T14:23:45
+
+conv = datetime.strptime (today.value,
+ "%Y%m%dT%H:%M:%S")
+
+print "Today:", conv.strftime (
+ "%d.%m.%Y, %H:%M")
+
+load = proxy.load ()
+print "system load:", load
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{XML-RPC example in Python}
+output:
+\begin{lstlisting}[language=bash]
+ % python client.py
+Today: 18.02.2014, 14:26
+system load: 0.45
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{XML-RPC example in Python}
+http payload of today rpc call seen in wireshark:
+\begin{lstlisting}[language=XML]
+<?xml version='1.0'?>
+<methodCall>
+ <methodName>today</methodName>
+ <params></params>
+</methodCall>
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{XML-RPC example in Python}
+http payload of today rpc response seen in wireshark:
+\begin{lstlisting}[language=XML]
+<?xml version='1.0'?>
+<methodResponse>
+ <params>
+ <param>
+ <value>
+ <dateTime.iso8601>
+ 20140218T14:26:25
+ </dateTime.iso8601>
+ </value>
+ </param>
+ </params>
+</methodResponse>
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}
+\frametitle{SOAP/WSDL}
+\begin{block}{Overview}
+\begin{itemize}
+\item WSDL (Web Services Description Language)
+
+describes the interface and spcecial datatypes
+\item the SOAP protocol is used for communication
+\item SOAP can be used with various transports:
+
+FTP, SMTP, HTTP(S), JMS
+\item hopping is supported, with different transports
+\item Client- / Serverarchitecture
+\end{itemize}
+\end{block}
+\end{frame}
+
+\begin{frame}
+\frametitle{SOAP/WSDL}
+\begin{block}{Implementations}
+\begin{itemize}
+\item ZSI: Python
+\item KDSOAP: Qt4/5 native Library (commercial)
+\item gSOAP: C/C++
+\item Apache Axis2: C++, JAVA
+\item Apache CXF: JAVA (+ other middleware protocols)
+\item SOAP::WSDL: Perl
+\item SOAP4R: Ruby
+\item wsdl2objc: Objective C
+\item .NET, mono
+\end{itemize}
+\end{block}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{SOAP example in Python/ZSI}
+server.py
+\begin{lstlisting}[language=python]
+from datetime import datetime
+from ZSI import dispatch
+
+def today (arg):
+ print "today arg:", arg
+ today = datetime.today ()
+ return str (today)
+def load (arg):
+ print "load arg:", arg
+ fd = open ("/proc/loadavg", "r")
+ loadavg = fd.read ()
+ sysload = loadavg.split ()
+ return sysload[0]
+
+dispatch.AsServer (port=8000, rpc=True)
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{SOAP example in Python/ZSI}
+client.py
+\begin{lstlisting}[language=python]
+from datetime import datetime
+from ZSI.client import Binding
+
+b = Binding (url='http://localhost:8000/')
+t = b.today (5)
+# t = 2014-02-18 15:59:50.571927
+c = datetime.strptime (t,
+ "%Y-%m-%d %H:%M:%S.%f")
+print "Today:", c.strftime ("%d.%m.%Y, %H:%M")
+print b.load ("string")
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}
+\frametitle{XMPP - Extensible Messaging and Presence Protocol}
+\begin{block}{Overview}
+\begin{itemize}
+\item protocol for MOM based on XML
+\item originally named Jabber
+\item used for
+\begin{itemize}
+ \item real-time Instant Messaging
+ \item publishing Presence Informations
+ \item Contactlist maintenance
+\end{itemize}
+\end{itemize}
+\end{block}
+\end{frame}
+
+
+\begin{frame}
+\frametitle{Extensible Messaging and Presence Protocol}
+\begin{block}{IM for Industry??}
+\begin{itemize}
+\item free and open standard (IETF RFC 6120, 6121)
+\item XMPP servers can be isolated, security is implemented (SASL, TLS)
+\item TCP and HTTP(S) transports are supported
+\item Priority support: multiple logins from same account,
+
+login with highest pority gets message
+\item not just used for IM:
+\begin{itemize}
+ \item smart grid
+ \item publish-subscribe systems
+ \item games
+ \item signalling for VoIP
+\end{itemize}
+\end{itemize}
+\end{block}
+\end{frame}
+
+\begin{frame}
+\frametitle{Extensible Messaging and Presence Protocol}
+\begin{block}{Extensible\dots}
+\begin{itemize}
+\item network management
+\item collaboration tools
+\item file sharing, gaming
+\item remote systems control and monitoring
+\item geolocation
+\end{itemize}
+\end{block}
+\end{frame}
+
+\begin{frame}
+\frametitle{Extensible Messaging and Presence Protocol}
+\begin{block}{Implemmentations}
+\dots too many to mention, have a look at
+
+http://xmpp.org/xmpp-software/
+
+for libraries, clients and servers
+\end{block}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{XMPP Client Example}
+xmpp\_client.cpp
+\begin{lstlisting}[language=C++]
+#include <QtCore/QCoreApplication>
+#include "myclient.h"
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+
+ MyClient client;
+ client.connectToServer("qtapp@localhost",
+ "test");
+
+ return app.exec();
+}
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{XMPP Client Example}
+myclient.h
+\begin{lstlisting}[language=C++]
+#include <qxmpp/QXmppClient.h>
+
+class MyClient : public QXmppClient
+{
+ Q_OBJECT
+
+ public:
+ MyClient();
+ ~MyClient();
+
+ public slots:
+ void message_rx(const QXmppMessage&);
+};
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{XMPP Client Example}
+myclient.cpp\#p1
+\begin{lstlisting}[language=C++]
+#include <qxmpp/QXmppMessage.h>
+#include <iostream>
+
+#include "myclient.h"
+
+MyClient::MyClient() : QXmppClient()
+{
+ bool check = connect(this,
+ SIGNAL(messageReceived(QXmppMessage)),
+ SLOT(message_rx(QXmppMessage)));
+
+ Q_ASSERT(check);
+ Q_UNUSED(check);
+}
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{XMPP Client Example}
+myclient.cpp\#p2
+\begin{lstlisting}[language=C++]
+MyClient::~MyClient() { ; }
+
+void
+MyClient::message_rx(const QXmppMessage& msg)
+{
+ QString from = msg.from();
+ QString body = msg.body();
+
+ std::cout<<from.toStdString()<<": ";
+ std::cout<<body.toStdString()<<std::endl;
+
+ sendPacket(QXmppMessage("",from,body+"??"));
+}
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{XMPP Client Example}
+\begin{itemize}
+\item start ejabberd
+\item start psi
+\item start QT XMPP Client
+\item in psi: write a message to qtapp
+\item with wireshark can be seen that the connection is encrypted
+\end{itemize}
+\end{frame}
+
+
+\subsection{Celery}
+
+\begin{frame}
+\frametitle{Overview}
+\begin{itemize}
+\item Distributed Task Queue
+\item based on message passing
+\item real-time operation and scheduling
+\item Tasks can be hosted on a single or on mulitple workers
+\item synchronous and asynchronous execution
+\item rate limit support
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{implementations}
+\begin{itemize}
+\item celery-project: Python
+\item celery-php: PHP
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{celeryproject}
+\begin{block}{supports multiple message broker}
+\begin{itemize}
+\item database: Django, or any supported by SQLAlchemy
+\item RabbitMQ
+\item Redis
+\item Amazon SQS (experimental)
+\end{itemize}
+\end{block}
+\end{frame}
+
+\begin{frame}
+\frametitle{celeryproject}
+\begin{block}{supports multiple result storage}
+\begin{itemize}
+\item database: any supported by SQLAlchemy
+\item memcached
+\item Redis
+\item AMQP
+\item Cassandra
+\item IronCache
+\end{itemize}
+\end{block}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{celeryproject, example}
+exec\_task.py
+\begin{lstlisting}{language=python}
+import os
+from celery import Celery
+
+app = Celery ('tasks', broker='sqla+sqlite:///celerydb.sqlite)
+
+@app.task
+def execute (command):
+ os.system (command)
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{celeryproject, example}
+test.py
+\begin{lstlisting}{language=python}
+from exec_task import execute
+
+execute.delay ("echo hello world")
+\end{lstlisting}
+
+start the example:
+\begin{lstlisting}{language=bash}
+term1% celery -A exec_task worker
+term2% ./test.py
+\end{lstlisting}
+\dots an example using return values and exceptions is in the example dir
+\end{frame}
+
+
+\subsection{D-Bus}
+
+\begin{frame}
+\frametitle{D-Bus Communication Framework}
\begin{block}{Facts}
\begin{itemize}
-\item used by GNOME, KDE4, E17, XFCE4, HAL, \dots
+\item used by GNOME, KDE4, E17, XFCE4 and many applications
\item for message based local IPC
\item provides 1:1 - 1:n message passing
+\item there is a system and a session bus
\end{itemize}
\end{block}
\end{frame}
\begin{frame}
-\frametitle{DBUS Communication Framework}
+\frametitle{D-Bus Communication Framework}
\begin{block}{Language Support}
\begin{itemize}
-\item C / C++
+\item C / C++ / Objective-C
\item JAVA
\item Python
\item Perl
@@ -27,57 +548,173 @@
\item Pascal
\item Ruby
\item Smalltalk
-\item Tcl
\end{itemize}
\end{block}
\end{frame}
\begin{frame}
-\frametitle{DBUS Communication Framework}
+\frametitle{D-Bus Communication Framework}
\begin{block}{Framework Support}
\begin{itemize}
-\item QT4 (and QT3 backport)
-\item glib
-\item mono
-\item e\_dbus (Enlightenment, E17)
-\item .NET
+\item QT (C++ / Python)
+\item GLib (GDBus)
+\item .NET (mono)
+\item edbus (Enlightenment, E17)
\end{itemize}
\end{block}
\end{frame}
+\begin{frame}[fragile]
+\frametitle{Desktop Integration}
+open home directory with the e17 file manager
+\begin{verbatim}
+% mdbus2 -i
+MDBUS2> org.enlightenment.FileManager \
+ /org/enlightenment/FileManager \
+ org.enlightenment.FileManager.OpenDirectory \
+ /home/local
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{System Integration}
+e.g. hotplug events
+\begin{verbatim}
+% mdbus2 -s -l
+[SIGNAL]
+org.freedesktop.UDisks.DeviceAdded
+/org/freedesktop/UDisks :1.25
+('/org/freedesktop/UDisks/devices/sdb',)
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\begin{verbatim}
+[SIGNAL]
+org.freedesktop.DBus.ObjectManager.InterfacesAdded
+/org/freedesktop/UDisks2 :1.40
+('/org/freedesktop/UDisks2/drives/WD_My_Passport_0748_57584D314335325839363238',
+{'org.freedesktop.UDisks2.Drive':
+ {'Vendor': <'WD'>, 'Model': <'My Passport0748'>,
+ 'Revision': <'1015'>, 'Serial': <'57584D314335325839363238'>,
+ 'WWN': <''>, 'Id': <'WD-My-Passport-0748-57584D314335325839363238'>,
+ 'Configuration': <@a{sv} {}>, 'Media': <''>,
+ 'MediaCompatibility': <@as []>, 'MediaRemovable':<false>,
+ 'MediaAvailable': <true>, 'MediaChangeDetected': <true>,
+ 'Size':<uint64 1000170586112>,
+ 'TimeDetected': <uint64 1392720111627238>,
+ 'TimeMediaDetected': <uint64 1392720111627238>,
+ 'Optical': <false>, OpticalBlank': <false>,
+ 'OpticalNumTracks': <uint32 0>,
+ 'OpticalNumAudioTracks': <uint32 0>,
+ 'OpticalNumDataTracks': <uint32 0>,
+ 'OpticalNumSessions': <uint32 0>,
+ 'RotationRate': <-1>, 'ConnectionBus':<'usb'>,
+ 'Seat': <'seat0'>, 'Removable': <true>, 'Ejectable': <false>,
+ 'SortKey': <'01hotplug/1392720111627238'>,
+ 'CanPowerOff': <true>,
+ 'SiblingId':<'/sys/devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0'>}})
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Example: Session Bus Signals}
+\begin{itemize}
+\item have a look at the code
+\item start pingserver and pingclient
+\item monitor signals with 'mdbus2 -l'
+\end{itemize}
+\end{frame}
+
+\subsection{CORBA}
+
\begin{frame}
-\frametitle{Functional Principle}
-\begin{center}
-\includegraphics[height=0.8\textheight]{images/dbus.png}
-\end{center}
-Source: http://dbus.freedesktop.org
+\frametitle{Common Object Request Broker Architecture}
+\begin{itemize}
+\item hosting of objects / RPC
+\item typically a Client- / Serverarchitecture
+\item one application can be Client and Server at the same time
+\end{itemize}
\end{frame}
+
\begin{frame}
-\frametitle{Desktop Integration}
+\frametitle{well-known implementations}
+\begin{itemize}
+\item omniORB: C++ / Python
+\item ACE/TAO: C++ including RTCORBA support
+\item MICO: C++ focus on security
+\item JacORB: JAVA
+\item IIOP.NET: .NET Remoting integration
+\item ORBit2: C with C++ and Python bindings
+\end{itemize}
+\end{frame}
+
+
+\begin{frame}
+\frametitle{communication between different operating systems}
+\begin{itemize}
+\item hosting of objects is abstracted, e.g. ThreadPool
+\item use of OS services, e.g. sockets is abstracted
+\end{itemize}
+\end{frame}
+
+
+\begin{frame}
+\frametitle{communication between programming languages}
+\begin{itemize}
+\item CORBA uses its own datatypes
+\item datatype mapping needs to be implement for each language
+\end{itemize}
+\end{frame}
+
+
+\begin{frame}
+\frametitle{common transports}
+\begin{itemize}
+\item IIOP
+\item socket
+\item shared-memory
+\item implementing own transports is possible
+\end{itemize}
+\end{frame}
+
+
+\begin{frame}
+\frametitle{Functional Principle}
\begin{center}
-\includegraphics[height=0.8\textheight]{images/dbus-hal.png}
+\includegraphics[width=1.0\textwidth]{images/orb.jpg}
\end{center}
-Source: http://www.redhat.com
\end{frame}
-\subsection{CORBA}
+
\begin{frame}
-\frametitle{Common Object Request Broker Architecture}
-\begin{block}{abstracts}
+\frametitle{Functional Principle}
+\begin{block}{IDL Interface Description Language}
\begin{itemize}
-\item operating systems
-\item programming language
-\item transport protocol
+\item write Interface Description
+\item use IDL compiler to produce stubs and skeleton code
+\item implement interfaces and use interfaces in native language
+\item compile applications
\end{itemize}
\end{block}
\end{frame}
\begin{frame}
\frametitle{Functional Principle}
-\begin{center}
-\includegraphics[height=0.8\textheight]{images/orb.jpg}
-\end{center}
+\begin{block}{Policies}
+\begin{itemize}
+\item Server- or Clientsiede Policies
+\item Run-time and compile-time Policies
+\item e.g. for
+\begin{itemize}
+\item Lifetime of objects
+\item Activation of objects
+\item Thread Policies
+\item Connection Polies
+\end{itemize}
+\end{itemize}
+\end{block}
\end{frame}
\begin{frame}
@@ -134,4 +771,16 @@ Source: http://www.redhat.com
\end{block}
\end{frame}
+\subsection{Conclusion}
+\begin{frame}
+\frametitle{Conclusion}
+\begin{itemize}
+\item many frameworks available
+\item different kind of abstraction
+\item special frameworks for special problems
+\item which framework is best for my problem?
+\item is it helpful to use multiple frameworks?
+\end{itemize}
+\end{frame}
+
\input{tailpres}
diff --git a/images/714px-Middleware_Schema.png b/images/714px-Middleware_Schema.png
new file mode 100644
index 0000000..cedabeb
--- /dev/null
+++ b/images/714px-Middleware_Schema.png
Binary files differ
diff --git a/images/BigTreeClassicRCU.png b/images/BigTreeClassicRCU.png
new file mode 100644
index 0000000..131d9dd
--- /dev/null
+++ b/images/BigTreeClassicRCU.png
Binary files differ
diff --git a/images/GracePeriodGood.png b/images/GracePeriodGood.png
new file mode 100644
index 0000000..f6812c9
--- /dev/null
+++ b/images/GracePeriodGood.png
Binary files differ
diff --git a/images/asource.png b/images/asource.png
new file mode 100644
index 0000000..1c6f0d4
--- /dev/null
+++ b/images/asource.png
Binary files differ
diff --git a/images/emu-process.png b/images/emu-process.png
index f1b1107..0120049 100644
--- a/images/emu-process.png
+++ b/images/emu-process.png
Binary files differ
diff --git a/images/kdirsource.png b/images/kdirsource.png
new file mode 100644
index 0000000..2dd19ec
--- /dev/null
+++ b/images/kdirsource.png
Binary files differ
diff --git a/images/ksource.png b/images/ksource.png
new file mode 100644
index 0000000..fbc5693
--- /dev/null
+++ b/images/ksource.png
Binary files differ
diff --git a/images/overview.png b/images/overview.png
new file mode 100644
index 0000000..ac53578
--- /dev/null
+++ b/images/overview.png
Binary files differ
diff --git a/images/pinh.png b/images/pinh.png
new file mode 100644
index 0000000..1862002
--- /dev/null
+++ b/images/pinh.png
Binary files differ
diff --git a/images/pinv.png b/images/pinv.png
new file mode 100644
index 0000000..902bc5f
--- /dev/null
+++ b/images/pinv.png
Binary files differ
diff --git a/images/pthread_kernelshark.png b/images/pthread_kernelshark.png
new file mode 100644
index 0000000..d73f913
--- /dev/null
+++ b/images/pthread_kernelshark.png
Binary files differ
diff --git a/images/rtarch.png b/images/rtarch.png
new file mode 100644
index 0000000..e58ffab
--- /dev/null
+++ b/images/rtarch.png
Binary files differ
diff --git a/images/rtkernel.png b/images/rtkernel.png
new file mode 100644
index 0000000..e2ead31
--- /dev/null
+++ b/images/rtkernel.png
Binary files differ
diff --git a/images/rtsource.png b/images/rtsource.png
new file mode 100644
index 0000000..009e8c7
--- /dev/null
+++ b/images/rtsource.png
Binary files differ
diff --git a/images/rwlockRCUupdate.jpg b/images/rwlockRCUupdate.jpg
new file mode 100644
index 0000000..edcedcd
--- /dev/null
+++ b/images/rwlockRCUupdate.jpg
Binary files differ
diff --git a/images/trace_overview.dia b/images/trace_overview.dia
new file mode 100644
index 0000000..6b705cf
--- /dev/null
+++ b/images/trace_overview.dia
Binary files differ
diff --git a/images/trace_overview.png b/images/trace_overview.png
new file mode 100644
index 0000000..7156705
--- /dev/null
+++ b/images/trace_overview.png
Binary files differ
diff --git a/kernel-devel/kernel-debugging/pres_kernel-debugging_en.tex b/kernel-devel/kernel-debugging/pres_kernel-debugging_en.tex
index cc1824f..82dc25b 100644
--- a/kernel-devel/kernel-debugging/pres_kernel-debugging_en.tex
+++ b/kernel-devel/kernel-debugging/pres_kernel-debugging_en.tex
@@ -2,6 +2,73 @@
\title{Kernel-Debugging}
\maketitle
+
+\section{Kernel Configuration}
+\begin{frame}
+\frametitle{Kernel hacking / printk and dmesg options}
+\begin{itemize}
+\item Show timing information on printks
+\item Default message log level (1-7)
+\item Enable dynamic printk() support
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Kernel hacking / Compile-time checks and compiler options}
+\begin{itemize}
+\item Compile the kernel with debug info
+\item Debug Filesystem
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Kernel hacking / Memory Debugging}
+\begin{itemize}
+\item Kernel memory leak detector
+\end{itemize}
+reports leaks in /sys/kernel/debug/kmemleak
+
+see also: Documentation/kmemleak.txt
+\end{frame}
+
+\begin{frame}
+\frametitle{Kernel hacking / Debug Lockups and Hangs}
+\begin{itemize}
+\item Debug Lockups and Hangs
+\begin{description}
+\item[Softlockup] loop in kernel mode
+\item[Hardlockup] CPU loop in kernel mode without letting IRQs run
+\item[Hung task] task is uninterruptible (D state)
+\end{description}
+\end{itemize}
+stack trace is printed on detection
+\end{frame}
+
+\begin{frame}
+\frametitle{Kernel hacking / Lock Debugging}
+\begin{itemize}
+\item RT Mutex debugging, deadlock detection
+\item Lock debugging: prove locking correctness, see Documentation/lockdep-design.txt.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Kernel hacking / Tracing}
+\begin{itemize}
+\item Kernel Function (Graph) Tracer
+\item Scheduling Latency Tracer
+\item Enable [k/u]probes-based dynamic events
+\item enable/disable function tracing dynamically
+\item Ring buffer benchmark stress tester (!!don't use it!!)
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Kernel hacking}
+\begin{description}
+\item[Remote debugging over FireWire] Documentation/debugging-via-ohci1394.txt
+\end{description}
+\end{frame}
\section{printk}
\begin{frame}[fragile]
\frametitle{printk is your friend!!}
@@ -38,6 +105,25 @@ $ cat /proc/sys/kernel/printk
\end{verbatim}
\end{frame}
+\section{dynamic printk}
+\begin{frame}
+\frametitle{dynamic printk}
+controlled by debugfs: dynamic\_debug/control
+
+format: filename:lineno [module]function flags format
+\begin{description}
+\item[filename] source file of the debug statement
+\item[lineno] line number of the debug statement
+\item[module] module that contains the debug statement
+\item[function] function that contains the debug statement
+\item[flags] '=p' means the line is turned 'on' for printing
+\item[format] the format used for the debug statement
+\end{description}
+Use pr\_debug() and dev\_dbg() in your code.
+
+see also: Documentation/dynamic-debug-howto.txt
+\end{frame}
+
\section{Logging messages}
\begin{frame}[fragile]
\frametitle{Serial Console}
diff --git a/kernel-devel/kernel-perf/Makefile b/kernel-devel/kernel-perf/Makefile
new file mode 100644
index 0000000..d641258
--- /dev/null
+++ b/kernel-devel/kernel-perf/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/kernel-devel/kernel-perf/pres_kernel-perf_en.tex b/kernel-devel/kernel-perf/pres_kernel-perf_en.tex
new file mode 100644
index 0000000..b6edfc0
--- /dev/null
+++ b/kernel-devel/kernel-perf/pres_kernel-perf_en.tex
@@ -0,0 +1,135 @@
+\input{configpres}
+
+\title{perf}
+\section{Performance Analyzation}
+\maketitle
+
+\begin{frame}
+\frametitle{What is perf?}
+Perf is a profiler tool for Linux 2.6+ based systems.
+\begin{itemize}
+\item perf\_events interface of the Linux kernel
+\item perf userspace tool
+\item access perf events from own applications
+\end{itemize}
+Perf is an event counter, no tracer.
+\end{frame}
+
+\begin{frame}
+\frametitle{perf events}
+\begin{itemize}
+\item hardware performance counters (PMU of Host CPU)
+\item tracepoint events (from ftrace)
+\item dynamic probes (e.g. kprobes or uprobes)
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{perf subcommands I}
+\begin{description}
+\item[list] list available events
+\item[stat] measure total event count for single program or for system, for
+ some time
+\item[top] top-like dynamic view of hottest functions
+\item[record] measure and save sampling data for single program
+\item[report] analyze file generated by perf record;
+ can generate flat, or graph profile
+\item[diff] Read two perf.data files and display the differential profile
+\end{description}
+\end{frame}
+
+\begin{frame}
+\frametitle{perf subcommands II}
+\begin{description}
+\item[sched] tracing/measuring of scheduler actions and latencies
+\item[lock] analyze lock events
+\item[timechart]tool to visualize total system behavior during a workload
+\end{description}
+\end{frame}
+
+
+\begin{frame}
+\frametitle{selecting events}
+\begin{description}
+\item[-e] use the specified event
+\item[-f] filter events, e.g. -e irq:irq\_handler\_entry --filter irq==18
+\end{description}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Example: live-view of page-fault event}
+\begin{lstlisting}
+# perf stat chromium
+ Performance counter stats for 'chromium':
+
+ 3733.112825 task-clock # 0.716 CPUs utilized
+ 8,696 context-switches # 0.002 M/sec
+ 1,063 cpu-migrations # 0.285 K/sec
+ 134,686 page-faults # 0.036 M/sec
+ 9,102,760,996 cycles # 2.438 GHz
+[83.59%]
+ 6,217,623,412 stalled-cycles-frontend # 68.30% frontend cycles idle
+[83.32%]
+ 4,755,104,208 stalled-cycles-backend # 52.24% backend cycles idle
+[67.20%]
+ 7,262,564,269 instructions # 0.80 insns per cycle
+ # 0.86 stalled cycles per insn
+[83.72%]
+ 1,495,191,394 branches # 400.521 M/sec
+[83.38%]
+ 26,037,805 branch-misses # 1.74% of all branches
+[83.04%]
+
+ 5.214978731 seconds time elapsed
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Example: live-view of page-fault event}
+\begin{lstlisting}
+# sudo perf top -e page-faults
+Samples: 562 of event 'page-faults', Event count (approx.): 4557
+ 62.32% libc-2.17.so [.] __memcpy_ssse3_back
+ 20.36% libc-2.17.so [.] _int_malloc
+ 3.16% module.so [.] evas_gl_common_context_font_push
+ 2.83% libevas.so.1.7.7 [.] 0x0000000000083237
+ 2.37% libdricore9.0.2.so.1.0.0 [.] 0x0000000000126050
+ 1.80% libxul.so (deleted) [.] 0x000000000182e48f
+ 1.12% [kernel] [k] file_read_actor
+ 0.92% libfontconfig.so.1.6.2 [.] 0x000000000001bd43
+ 0.88% libdrm_intel.so.1.0.0 [.] 0x0000000000008503
+ 0.79% libc-2.17.so [.] __memset_sse2
+ 0.75% libeet.so.1.7.7 [.] eet_data_image_header_decode_cipher
+ 0.61% module.so [.] evas_gl_common_context_image_push
+ 0.42% libfreetype.so.6.10.0 [.] FT_Stream_ReadFields
+ 0.42% libecore_x.so.1.7.7 [.] ecore_x_netwm_icons_set
+ 0.24% libelementary.so.1.7.7 [.] 0x000000000005ae60
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{Example: count CPU cycles of a ls call}
+\begin{lstlisting}
+# perf record -e cpu-cycles ls
+<output of ls>
+[ perf record: Woken up 1 times to write data ]
+[ perf record: Captured and wrote 0.008 MB perf.data (~334 samples) ]
+# perf report
+Samples: 24 of event 'cpu-cycles', Event count (approx.): 12333055
+ 21.67% ls [kernel.kallsyms] [k] get_unmapped_area
+ 20.77% ls ld-2.17.so [.] _dl_map_object_deps
+ 17.21% ls [kernel.kallsyms] [k] __slab_free
+ 15.73% ls [kernel.kallsyms] [k] tty_insert_flip_string_fixed_flag
+ 12.65% ls [kernel.kallsyms] [k] unlock_page
+ 6.94% ls libc-2.17.so [.] __strlen_sse2
+ 3.41% ls [kernel.kallsyms] [k] count.isra.17.constprop.28
+ 1.02% ls [kernel.kallsyms] [k] get_pageblock_flags_group
+ 0.41% ls [kernel.kallsyms] [k] perf_event_context_sched_in
+ 0.13% ls [kernel.kallsyms] [k] perf_ctx_unlock
+ 0.07% ls [kernel.kallsyms] [k] native_write_msr_safe
+\end{lstlisting}
+\end{frame}
+
+
+\input{tailpres}
diff --git a/kernel-devel/kernel-tracing/pres_kernel-tracing_en.tex b/kernel-devel/kernel-tracing/pres_kernel-tracing_en.tex
index d73a10f..d5a9686 100644
--- a/kernel-devel/kernel-tracing/pres_kernel-tracing_en.tex
+++ b/kernel-devel/kernel-tracing/pres_kernel-tracing_en.tex
@@ -1,19 +1,33 @@
\input{configpres}
\title{Kernel-Tracing}
-\section{FTRACE}
+\section{Overview}
\maketitle
+
+\begin{frame}
+\frametitle{Overview}
+\tableofcontents
+\end{frame}
+
\begin{frame}[fragile]
\frametitle{Kerneltracing: Overview}
\begin{itemize}
\item DebugFS interface
-\item Different tracers: function, function\_graph, sched\_switch, ...
+\item Different tracers: function, function\_graph, wakeup, wakeup\_rt, \dots
\item Custom trace events
\item Graphical frontend (kernelshark)
\end{itemize}
\end{frame}
\begin{frame}[fragile]
+\frametitle{Kerneltracing: Overview}
+\begin{figure}[h]
+\centering
+\includegraphics[width=10cm]{images/trace_overview.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
\frametitle{Kernel-Tracing: DebugFS}
\begin{verbatim}
$ mount -t debugfs debugfs /sys/kernel/debug
@@ -23,27 +37,103 @@ blk function_graph mmiotrace wakeup_rt wakeup
\end{verbatim}
\end{frame}
+\section{Event tracing}
+\begin{frame}[fragile]
+\frametitle{Event tracing}
+current\_tracer can be set to NOP
+\begin{verbatim}
+$ cd /sys/kernel/debug/tracing
+$ ls events/
+[...]
+irq
+sched
+scsi
+signal
+skb
+[...]
+\end{verbatim}
+\end{frame}
\begin{frame}[fragile]
-\frametitle{Kerneltracing: Trivial example}
+\frametitle{Event tracing}
\begin{verbatim}
-$ echo function_graph > current_tracer
-$ echo 1 > tracing_enabled
-$ sleep 1
-$ echo 0 > tracing_enabled
-$ less trace
-# tracer: function_graph
-# CPU DURATION FUNCTION CALLS
-# | | | | | | |
- 1) | enqueue_entity() {
- 1) | update_curr() {
- 1) 0.336 us | task_of();
- 1) 1.524 us | }
- 1) 0.420 us | place_entity();
+$ cd /sys/kernel/debug/tracing
+$ ls -1 events/sched/
+enable
+filter
+sched_kthread_stop
+sched_kthread_stop_ret
+sched_migrate_task
+sched_pi_setprio
+[...]
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Event tracing: Enable events}
+\begin{verbatim}
+$ cd /sys/kernel/debug/tracing
+# Enable ALL events of the group ''sched''
+$ echo 1 > events/sched/enable
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Record a trace}
+After enabling the events you want to see, do:
+\begin{verbatim}
+$ cd /sys/kernel/debug/tracing
+# Start recording to the ringbuffer
+$ echo 1 > tracing_on
+# Stop recording to the ringbuffer
+$ echo 0 > tracing_on
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Analyze a trace}
+You can even do this while recording!
+\begin{verbatim}
+$ cd /sys/kernel/debug/tracing
+# Just print the current content of the ring buffer
+$ cat trace
+# or: do a consuming read on the ring buffer
+$ cat trace_pipe
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Trace event format and filters}
+Each trace event has a specific format and parameters.
+You can put a filter on those parameters for recording a trace:
+\begin{verbatim}
+$ cat events/sched/sched_switch/format
+[...]
+field:__u8 prev_comm[15];
+field:pid_t prev_pid;
+field:int prev_prio;
+field:long prev_state;
+[...]
+$ echo 'next_comm == bash' \
+ > events/sched/sched_switch/filter
+$ echo 1 > events/sched/sched_switch/enable
+$ echo 1 > tracing_on
+$ cat trace
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
+\frametitle{Tracing on multicore}
+\begin{itemize}
+\item One ringbuffer per cpu
+\item trace contains ALL events
+\item the per\_cpu directory contains a trace for each cpu
+\item tracing\_cpumask can limit tracing to specific cores
+\end{itemize}
+\end{frame}
+
+\section{Tracers}
+\begin{frame}[fragile]
\frametitle{Tracer: function}
\begin{verbatim}
# tracer: function
@@ -59,56 +149,60 @@ wnck-2022 [003] 5766.659918: kfree <-skb
\end{frame}
\begin{frame}[fragile]
-\frametitle{Tracer: function / latency\_format}
+\frametitle{Tracer: function\_graph}
\begin{verbatim}
-$ echo 1 > options/latency_format
+$ echo function_graph > current_tracer
+$ echo 1 > tracing_on
+$ sleep 1
+$ echo 0 > tracing_on
$ less trace
-# _------=> CPU#
-# / _-----=> irqs-off
-# | / _----=> need-resched
-# || / _---=> hardirq/softirq
-# ||| / _--=> preempt-depth
-# |||| /_--=> lock-depth
-# |||||/ delay
-# cmd pid |||||| time | caller
-# \ / |||||| \ | /
-wnck-app-2022 3..... 1237702us : skb_relea
-wnck-app-2022 3..... 1237703us : sock_wfre
+# tracer: function_graph
+# CPU DURATION FUNCTION CALLS
+# | | | | | | |
+ 1) | enqueue_entity() {
+ 1) | update_curr() {
+ 1) 0.336 us | task_of();
+ 1) 1.524 us | }
+ 1) 0.420 us | place_entity();
\end{verbatim}
-\end{frame}
+\end{frame}
\begin{frame}[fragile]
-\frametitle{Tracer: function (custom tracepoint)}
+\frametitle{function\_graph: Set a trigger function}
+You can set a trigger function for the function\_graph tracer
+if you just want to record specific functions and their childs:
\begin{verbatim}
-$ echo 1 > tracing_enabled
-$ echo "MARK" > trace_marker
-$ echo 0 > tracing_enabled
-$ less trace
-...
- bash-4328 [003] 5603.687935: get_slab
- bash-4328 [003] 5603.687935: _cond_re
- bash-4328 [003] 5603.687936: _cond_re
- bash-4328 [003] 5603.687939: 0: MARK
- bash-4328 [003] 5603.687939: kfree <-
-...
+echo do_IRQ > set_graph_function
+# Additionals triggers can be set with
+echo another_function >> set_graph_function
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
-\frametitle{Tracer: sched\_switch}
+\frametitle{Tracer: function / latency\_format}
\tiny
\begin{verbatim}
-# tracer: sched_switch
+$ echo 1 > options/latency_format
+# tracer: function
#
-# TASK-PID CPU# TIMESTAMP FUNCTION
-# | | | | |
- bash-4328 [003] 78.553966: 4328:120:S + [003] 4328:120:S bash
- bash-4328 [003] 78.553979: 4328:120:S ==> [003] 0:120:R <idle>
-<idle>-0 [003] 78.553986: 0:120:R + [003] 13:120:R ksoftirqd/3
-<idle>-0 [003] 78.553988: 0:120:R ==> [003] 13:120:R ksoftirqd/3
-
+# function latency trace v1.1.5 on 3.9.4-x1-00124-g0bfd8ff
+# --------------------------------------------------------------------
+# latency: 0 us, #204955/25306195, CPU#0 | (M:desktop VP:0, KP:0, SP:0 HP:0 #P:4)
+# -----------------
+# | task: -0 (uid:0 nice:0 policy:0 rt_prio:0)
+# -----------------
+#
+# _------=> CPU#
+# / _-----=> irqs-off
+# | / _----=> need-resched
+# || / _---=> hardirq/softirq
+# ||| / _--=> preempt-depth
+# |||| / delay
+# cmd pid ||||| time | caller
+# \ / ||||| \ | /
+terminol-11964 1.... 11639243us : ep_read_events_proc <-ep_scan_ready_list.isra.8
\end{verbatim}
-\end{frame}
+\end{frame}
\begin{frame}[fragile]
\frametitle{Tracer: wakeup\_rt}
@@ -131,6 +225,44 @@ ls-4579 3dN... 5us : _raw_spin_unlock_irqrestore <-try_to_wake_up
\end{verbatim}
\end{frame}
+\section{Kernel function profiler}
+
+\begin{frame}[fragile]
+\frametitle{Kernel function profiler}
+\begin{verbatim}
+$ echo 1 > function_profile_enabled
+$ echo 1 > tracing_on
+# then do something...
+$ echo 0 > tracing_on
+$ less trace_stat/function0
+Function Hit Time Avg
+-------- --- ---- ---
+__schedule 7064 1958976725 us 277318.3 us
+schedule 6961 1958965845 us 281420.1 us
+[...]
+\end{verbatim}
+\end{frame}
+
+\section{trace\_marker}
+\begin{frame}[fragile]
+\frametitle{Custom application tracepoints: ''simple method''}
+\begin{verbatim}
+$ echo 1 > tracing_on
+$ echo "MARK" > trace_marker
+$ echo 0 > tracing_on
+$ less trace
+...
+ bash-4328 [003] 5603.687935: get_slab
+ bash-4328 [003] 5603.687935: _cond_re
+ bash-4328 [003] 5603.687936: _cond_re
+ bash-4328 [003] 5603.687939: 0: MARK
+ bash-4328 [003] 5603.687939: kfree <-
+...
+\end{verbatim}
+\end{frame}
+
+\section{trace\_printk}
+
\begin{frame}[fragile]
\frametitle{trace\_printk()}
\begin{itemize}
@@ -158,6 +290,10 @@ Only trace specific functions.
ftrace_notrace=
\end{verbatim}
Don't trace specific functions.
+\begin{verbatim}
+trace_event=
+\end{verbatim}
+Just enable trace events (comma separated list)
\end{frame}
\begin{frame}[fragile]
@@ -170,6 +306,20 @@ echo z > /proc/sysrq-trigger
\end{verbatim}
\end{frame}
+\begin{frame}[fragile]
+\frametitle{Trace instances}
+You can have separate trace instances with their own
+buffers and events:
+\begin{verbatim}
+$ cd /sys/kernel/debug/tracing
+$ mkdir instances/my_inst1
+$ cd instances/my_inst1
+$ echo 1 > events/sched/enable
+$ cat trace
+[...]
+\end{verbatim}
+\end{frame}
+
\section{trace-cmd}
\begin{frame}
@@ -326,9 +476,200 @@ $ kernelshark -i mytrace.dat
\includegraphics[width=10cm]{images/kernelshark_zoom.png}
\end{figure}
\end{frame}
+
+\section{Useful things}
+
+\begin{frame}[fragile]
+\frametitle{Control a trace from your kernel code}
+\begin{verbatim}
+void my_kernel_function(void)
+{
+ tracing_on();
+ do_some_stuff_i_wanna_trace();
+ tracing_off();
+}
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Matching PIDs and process names of your trace(s)}
+\begin{verbatim}
+$ cat saved_cmdlines
+[...]
+5112 bash
+5223 ARTHUR_DENT
+5546 kworker/0:2
+8465 kworker/0:0
+[...]
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Where's my thread in the trace?!}
+To ''find'' a specific thread in your trace, you can use the
+following function to set the thread's name:
+\begin{verbatim}
+#define _GNU_SOURCE
+#include <pthread.h>
+
+pthread_setname_np(pthread_t thread,
+ const char *name);
+\end{verbatim}
+Available since glibc version 2.12
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Thread names: Example}
+\begin{verbatim}
+/* pthread_example */
+pthread_t test_thread;
+[...]
+pthread_create(&test_thread, NULL,
+ my_test_thread, NULL);
+[...]
+pthread_setname_np(test_thread, "ARTHUR_DENT");
+\end{verbatim}
+Check with the ps command:
+\begin{verbatim}
+$ ps H -C pthread_example -o 'pid tid cmd comm'
+ PID TID CMD COMMAND
+4515 4515 ./pthread_example pthread_example
+4515 4516 ./pthread_example ARTHUR_DENT
+\end{verbatim}
+\end{frame}
+
\begin{frame}
+\frametitle{Thread name in kernelshark}
+\begin{figure}[h]
+\centering
+\includegraphics[width=10cm]{images/pthread_kernelshark.png}
+\end{figure}
+\end{frame}
+
+\section{kprobes}
+\begin{frame}[fragile]
+\frametitle{Dynamic kernel tracepoints: KPROBES}
+\begin{itemize}
+\item Similar to Tracepoints
+\item Can be added / removed dynamically
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Dynamic kernel tracepoints: KPROBES}
+\begin{verbatim}
+$ echo 'p:my_k_event do_IRQ' > kprobe_events
+$ echo 1 events/kprobes/my_k_event/enabled
+$ echo 1 > tracing_on
+$ cat trace
+<idle>-0 [000] d... 545.173709: my_k_event: (do_IRQ+0x0/0xc0)
+<idle>-0 [000] d... 545.331051: my_k_event: (do_IRQ+0x0/0xc0)
+<idle>-0 [000] d... 545.331490: my_k_event: (do_IRQ+0x0/0xc0)
+<idle>-0 [000] d... 545.490730: my_k_event: (do_IRQ+0x0/0xc0)
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Dynamic kernel tracepoints: KPROBES for custom modules}
+Let's assume we want to have a tracepoint for the function
+hello\_init in the module hello.ko
+\begin{verbatim}
+# Note: >> will append a new event
+$ echo 'p:my_mod_event hello:hello_init' \
+ >> kprobe_events
+$ echo 1 > events/kprobes/my_mod_event/enable
+$ insmod hello.ko
+$ cat trace
+insmod-9586 [000] d... 13278.003468: my_mod_event: (0xf878d080)
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Dynamic kernel tracepoints: Question / Exercise}
+What happens, if we add the following event. What's different?
+\begin{verbatim}
+# Note >> will append a new event
+$ echo 'r:my_exercise_event hello:hello_init' \
+ >> kprobe_events
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{KPROBES statistics}
+\begin{verbatim}
+$ cat kprobe_profile
+my_mod_event_ret 2 0
+my_mod_event 2 0
+\end{verbatim}
+\end{frame}
+
+\section{uprobes}
+\begin{frame}[fragile]
+\frametitle{Dynamic Userspace Tracepoints: uprobes}
+\begin{itemize}
+\item Similar to kprobes
+\item For userspace applications
+\item A uprobe event is set on a specific offset in a userland process
+\item Powerful method to correlate your kernel and userland events!
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Dynamic Userspace Tracepoints: uprobes}
+\begin{verbatim}
+$ gcc -Wall -g -o pthread_example \
+ pthread_example.c -lpthread
+$ objdump -F -D -S pthread_example | less
+\end{verbatim}
+\begin{verbatim}
+08048594 <my_test_thread> (File Offset: 0x594):
+[...]
+void *my_test_thread(void *x_void_ptr)
+[...]
+ for (i = 0; i < 10; i++) {
+80485a1: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
+80485a8: eb 1c jmp 80485c6 <my_test_thread+0x32> (File Offset: 0x5c6)
+ printf("The answer is 42!\n");
+80485aa: c7 04 24 50 87 04 08 movl $0x8048750,(%esp)
+\end{verbatim}
+So, the file offset for the printf call is 0x5aa !
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Dynamic Userspace Tracepoints: uprobes II}
+\begin{verbatim}
+echo \
+'p:my_ev /home/devel/pthread/pthread_example:0x5aa' \
+ > /sys/kernel/debug/tracing/uprobe_events
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Dynamic Userspace Tracepoints: uprobes III}
+\begin{verbatim}
+$ cd /sys/kernel/debug/tracing/
+$ echo 1 > events/uprobes/my_ev/enable
+$ echo 1 > tracing on
+$ /home/devel/pthread_example/pthread_example
+$ echo 0 > tracing_on
+$ less trace
+# TASK-PID CPU# |||| TIMESTAMP FUNCTION
+# | | | |||| | |
+ARTHUR_DENT-5223 [000] d... 5653.154822: my_ev: (0x80485aa)
+ARTHUR_DENT-5223 [000] d... 5654.155723: my_ev: (0x80485aa)
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{uprobes: statistics}
+\begin{verbatim}
+$ cat uprobe_profile
+/home/devel/pthread/pthread_example my_ev 10
+\end{verbatim}
+\end{frame}
\section{sources}
+\begin{frame}
\frametitle{sources}
\begin{thebibliography}{1}
\bibitem{trace1} http://lwn.net/Articles/365835/
diff --git a/kernel-devel/kexec-and-crash-kernel/Makefile b/kernel-devel/kexec-and-crash-kernel/Makefile
new file mode 100644
index 0000000..d641258
--- /dev/null
+++ b/kernel-devel/kexec-and-crash-kernel/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/kernel-devel/kexec-and-crash-kernel/crashkernel_patches/crashkernel.diff b/kernel-devel/kexec-and-crash-kernel/crashkernel_patches/crashkernel.diff
new file mode 100644
index 0000000..1d3e082
--- /dev/null
+++ b/kernel-devel/kexec-and-crash-kernel/crashkernel_patches/crashkernel.diff
@@ -0,0 +1,65 @@
+From: Magnus Damm <damm at opensource.se>
+
+Update the copy_oldmem_page() function to ioremap() only
+when accessing memory that is outside the regular range
+of system memory that is managed by the kernel.
+
+Without this patch a warning is triggered in the ARM-specific
+ioremap implementation, see WARN_ON(pfn_valid()) in ioremap.c
+
+The copy_oldmem_page() function is used by the secondary crash
+kernel to access memory using the /proc/vmcore code implemented
+in fs/proc/vmcore.c. To pass information from the first kernel
+to the secondary crash kernel a kernel command line option is
+used to point out where the elf core hdr is located.
+
+The crash kernel is loaded through kexec-tools which also contains
+code that reserves memory for the elfcorehdr= option. This memory
+block is reserved _inside_ the main system memory of the secondary
+kernel. The /proc/vmcore code in the secondary kernel is however
+using copy_oldmem_page() to access both this elfcorehdr area and
+the rest of the memory used by the the first kernel.
+
+So the copy_oldmem_page() function is used to access data that
+may be located in system memory, or it may be outside. Always
+using ioremap will not work, so this patch makes it conditional
+based on pfn_valid().
+
+For more details please look at the sh7372-based example here:
+http://permalink.gmane.org/gmane.linux.ports.sh.devel/11502
+
+Signed-off-by: Magnus Damm <damm at opensource.se>
+---
+
+ arch/arm/kernel/crash_dump.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+--- 0001/arch/arm/kernel/crash_dump.c
++++ work/arch/arm/kernel/crash_dump.c 2011-06-18 20:59:49.000000000 +0900
+@@ -39,9 +39,13 @@ ssize_t copy_oldmem_page(unsigned long p
+ if (!csize)
+ return 0;
+
+- vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
+- if (!vaddr)
+- return -ENOMEM;
++ if (pfn_valid(pfn)) {
++ vaddr = phys_to_virt(pfn << PAGE_SHIFT);
++ } else {
++ vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
++ if (!vaddr)
++ return -ENOMEM;
++ }
+
+ if (userbuf) {
+ if (copy_to_user(buf, vaddr + offset, csize)) {
+@@ -52,6 +56,8 @@ ssize_t copy_oldmem_page(unsigned long p
+ memcpy(buf, vaddr + offset, csize);
+ }
+
+- iounmap(vaddr);
++ if (!pfn_valid(pfn))
++ iounmap(vaddr);
++
+ return csize;
+ }
diff --git a/kernel-devel/kexec-and-crash-kernel/crashkernel_patches/kexec_fix_arm_braindamage.diff b/kernel-devel/kexec-and-crash-kernel/crashkernel_patches/kexec_fix_arm_braindamage.diff
new file mode 100644
index 0000000..877f5ea
--- /dev/null
+++ b/kernel-devel/kexec-and-crash-kernel/crashkernel_patches/kexec_fix_arm_braindamage.diff
@@ -0,0 +1,28 @@
+Index: kexec-tools-2.0.3/kexec/arch/arm/crashdump-arm.c
+===================================================================
+--- kexec-tools-2.0.3.orig/kexec/arch/arm/crashdump-arm.c 2011-10-03 00:56:38.000000000 +0200
++++ kexec-tools-2.0.3/kexec/arch/arm/crashdump-arm.c 2013-07-06 17:26:13.410309437 +0200
+@@ -204,12 +204,12 @@
+ * @cmdline. Note that @cmdline must be at least %COMMAND_LINE_SIZE bytes long
+ * (including %NUL).
+ */
+-static void cmdline_add_mem(char *cmdline, unsigned long size)
++static void cmdline_add_mem(char *cmdline, unsigned long size, unsigned long offset)
+ {
+ char buf[COMMAND_LINE_SIZE];
+ int buflen;
+
+- buflen = snprintf(buf, sizeof(buf), "%s mem=%ldK", cmdline, size >> 10);
++ buflen = snprintf(buf, sizeof(buf), "%s mem=%ldK@0x%X", cmdline, size >> 10, offset);
+ if (buflen < 0)
+ die("Failed to construct mem= command line parameter\n");
+ if (buflen >= sizeof(buf))
+@@ -301,7 +301,7 @@
+ * prevents the dump capture kernel from using any other memory regions
+ * which belong to the primary kernel.
+ */
+- cmdline_add_mem(mod_cmdline, elfcorehdr - crash_reserved_mem.start);
++ cmdline_add_mem(mod_cmdline, elfcorehdr - crash_reserved_mem.start, crash_reserved_mem.start);
+
+ dump_memory_ranges();
+ dbgprintf("kernel command line: \"%s\"\n", mod_cmdline);
diff --git a/kernel-devel/kexec-and-crash-kernel/crashkernel_patches/zreladdr.diff b/kernel-devel/kexec-and-crash-kernel/crashkernel_patches/zreladdr.diff
new file mode 100644
index 0000000..867e13a
--- /dev/null
+++ b/kernel-devel/kexec-and-crash-kernel/crashkernel_patches/zreladdr.diff
@@ -0,0 +1,13 @@
+Index: linux-3.2/arch/arm/mach-omap2/Makefile.boot
+===================================================================
+--- linux-3.2.orig/arch/arm/mach-omap2/Makefile.boot 2012-01-05 00:55:44.000000000 +0100
++++ linux-3.2/arch/arm/mach-omap2/Makefile.boot 2013-07-06 17:00:18.718516198 +0200
+@@ -1,3 +1,8 @@
++ifeq ($(CONFIG_CRASH_DUMP),y)
++ zreladdr-y += 0x84008000
++params_phys-y := 0x84000100
++else
+ zreladdr-y += 0x80008000
+ params_phys-y := 0x80000100
++endif
+ initrd_phys-y := 0x80800000
diff --git a/kernel-devel/kexec-and-crash-kernel/pres_kexec_and_crashkernel_en.tex b/kernel-devel/kexec-and-crash-kernel/pres_kexec_and_crashkernel_en.tex
new file mode 100644
index 0000000..1791267
--- /dev/null
+++ b/kernel-devel/kexec-and-crash-kernel/pres_kexec_and_crashkernel_en.tex
@@ -0,0 +1,70 @@
+\input{configpres}
+
+\title{Kexec and Crashkernels}
+\maketitle
+\begin{frame}
+\frametitle{What is kexec?}
+Kexec is a mechanism to boot Linux from within Linux,
+without going through the BIOS / the Bootloader.
+\end{frame}
+
+\begin{frame}
+\frametitle{kexec-tools}
+http://horms.net/projects/kexec/
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Using kexec: Kernel configuration}
+\begin{verbatim}
+Boot options -->
+[*] Kexec system call
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Using kexec: Booting the new kernel}
+\begin{verbatim}
+# Load the kernel image and set the commandline
+$ kexec -l uImage --append=$(cat /proc/cmdline)
+# Start the new kernel
+$ kexec -e
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Using kexec: Crashkernel}
+\begin{itemize}
+\item Build production kernel (enable kexec system call!)
+\item Build ''crash kernel'' (enable kexec system call and crash dump kernel):
+\begin{verbatim}
+Boot options -->
+[*] Kexec system call
+[*] Build kdump crash kernel
+\end{verbatim}
+\item The crash kernel option should automatically select /proc/vmcore
+\end{itemize}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{Using kexec: Crashkernel}
+\begin{itemize}
+\item Boot production kernel (Commandline: crashkernel=256M@0x84000000)
+\item Check if crashkernel memory was reserved:
+\begin{verbatim}
+cat /proc/iomem | grep Crash
+ 84000000-93ffffff : Crash kernel
+\end{verbatim}
+\item Load crash kernel and let the system crash ;-)
+\begin{verbatim}
+kexec -p uImage-crash \
+ --append="$(cat /proc/cmdline | \
+ sed 's/crashkernel/bla/')"
+echo c > /proc/sysrq-trigger
+\end{verbatim}
+\item After crashing the crash kernel should boot up!
+\item Within the crashkernel the core file for the production kernel is available in /proc/vmcore
+\end{itemize}
+\end{frame}
+
+\input{tailpres}
diff --git a/linux-basics/filesystems/pres_filesystems_en.tex b/linux-basics/filesystems/pres_filesystems_en.tex
index 5b1149b..e6339e5 100644
--- a/linux-basics/filesystems/pres_filesystems_en.tex
+++ b/linux-basics/filesystems/pres_filesystems_en.tex
@@ -29,6 +29,10 @@
\item ReiserFS
\item XFS
\end{itemize}
+Filesystem for ''flash based'' block devices:
+\begin{itemize}
+\item F2FS
+\end{itemize}
\end{frame}
\subsubsection{For flash}
@@ -71,7 +75,8 @@ size of a filesystem
\begin{itemize}
\item \textbf{N}o journalling filesystem
\item A good choice for ''flash-based block devices'', like SD cards or USB
-sticks (ext2 minimizes the number of writes)
+sticks (ext2 minimizes the number of writes), if you have heavy write access. F2FS
+might be an alternative for flash devices
\item Supported block sizes: 1kb, 2kb, 4kb, 8kb
\item Max. filesystem size: 32TB (for 8kb blocks)
\end{itemize}
@@ -113,6 +118,16 @@ sticks (ext2 minimizes the number of writes)
\subsubsection{Flash filesystems}
\begin{frame}
+\frametitle{F2FS}
+\begin{itemize}
+\item F lash F riendly F ilesystem
+\item Available since Linux Kernel 3.8 (backports available back to 3.0)
+\item Not a ''real'' flashfilesystem
+\item For ''NAND flash based'' block devices, like SD, MMC, eMMC, ...
+\end{itemize}
+\end{frame}
+
+\begin{frame}
\frametitle{JFFS2}
\begin{itemize}
\item Flash filesystem
diff --git a/realtime/rt-internals/Makefile b/realtime/rt-internals/Makefile
new file mode 100644
index 0000000..d641258
--- /dev/null
+++ b/realtime/rt-internals/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/realtime/rt-internals/pres_rt-internals_en.tex b/realtime/rt-internals/pres_rt-internals_en.tex
new file mode 100644
index 0000000..baeb2e1
--- /dev/null
+++ b/realtime/rt-internals/pres_rt-internals_en.tex
@@ -0,0 +1,511 @@
+% on the following slides, include icon in the left sidebar
+\def\lximg{/usr/share/lx/icons/fueller.png}
+
+\input{configpres}
+
+\title{Linux Preempt-RT internals}
+\maketitle
+
+% stop displaying 'fueller.png' on the following slides
+\def\lximg{none}
+
+\subsection{Linux Real-Time history}
+\begin{frame}[fragile]
+\frametitle{Linux Real-Time history}
+\begin{beamerboxesrounded}[shadow=true]{First projects in the late 1990s}
+\begin{itemize}
+\item KURT - Kansas University
+\item RTAI - University of Milano
+\item RTLinux - New Mexico Tech - Soccoro, New Mexico
+\item Linux/RK - Carnegie Mellon Univeristy, Pittsburgh
+\item QLinux - University of Massachusetts
+\item DROPS - University of Dresden
+\item ...
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Linux Real-Time history}
+\begin{beamerboxesrounded}[shadow=true]{Approaches}
+\begin{itemize}
+\item Linux as the idle thread of a nano/micro kernel
+\item Linux with implicit Real-Time properties
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Linux Real-Time history}
+\begin{beamerboxesrounded}[shadow=true]{Opinion I}
+\begin{quote}
+With RTLinux, you have to split the app up into the hard realtime part
+and the rest.
+\newline
+Which is, in my opinion, the only sane way to handle hard realtime. No
+confusion about priority inversions, no crap.
+\end{quote}
+\begin{flushright}
+Linus Torvalds - 2002
+\end{flushright}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Linux Real-Time history}
+\begin{beamerboxesrounded}[shadow=true]{Opinion II}
+\begin{quote}
+It is impossible to turn a General Purpose Operating System Kernel
+into a Real-Time Operating System Kernel!
+\end{quote}
+\begin{flushright}
+Unknown participant of a podium discussion about Linux Real-Time - 2004
+\end{flushright}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Linux Real-Time history}
+\begin{beamerboxesrounded}[shadow=true]{Preempt-RT}
+\begin{itemize}
+\item Started 2004 by Ingo Molnar
+\item In kernel real-time approach
+\item Driven by mainline kernel developers
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Linux Real-Time history}
+\begin{beamerboxesrounded}[shadow=true]{Opinion III}
+\begin{quote}
+Controlling a laser with Linux is crazy, but everyone in this room is
+crazy in his own way. So if you want to use Linux to control an
+industrial welding laser, I have no problem with your using
+PREEMPT\_RT.
+\end{quote}
+\begin{flushright}
+Linus Torvalds - 2006
+\end{flushright}
+\end{beamerboxesrounded}
+\end{frame}
+
+\subsection{Preempt-RT goals}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT goals}
+\begin{beamerboxesrounded}[shadow=true]{What's the goal?}
+\begin{itemize}
+\item Full Linux kernel hardware support
+\item Standard posix interface
+\item No specialized user space ABI
+\item Full reuse of existing tools
+\item Scalability
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT goals}
+\begin{beamerboxesrounded}[shadow=true]{What's the target application space?}
+\begin{itemize}
+\item The majority of Real-Time applications
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\subsection{Preempt-RT properties}
+\begin{frame}[fragile]
+\frametitle{Preempt-RT properties}
+\begin{beamerboxesrounded}[shadow=true]{Is it hard realtime?}
+\begin{itemize}
+\item Not by the requirement of mathematical proof
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT properties}
+\begin{beamerboxesrounded}[shadow=true]{Is mathematical proof feasible?}
+\begin{itemize}
+\item Not for complex systems
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT properties}
+\begin{beamerboxesrounded}[shadow=true]{Can it be verified?}
+\begin{itemize}
+\item Empirical verfication
+\item Open and documented testing efforts (OSADL, RedHat)
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\subsection{Preempt-RT technology}
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Why is mainline not realtime capable?}
+\begin{itemize}
+\item Hard interrupt context
+\item Soft interrupt context
+\item Interrupt disabled regions
+\item Preemption disabled regions
+\item No protection against priority inversion
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Hard interrupt context}
+\begin{itemize}
+\item Runs with interrupts disabled
+\item Executes driver interrupt handlers
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Soft interrupt context}
+\begin{itemize}
+\item Runs with preemption disabled, mostly on return from hard interrupt context
+\item Executes driver and infrastructure callbacks
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Interrupt disabled regions}
+\begin{itemize}
+\item Mostly in context of spinlocks and rwlocks
+\item Few places which require explicit interrupt disable
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Why spinlocked interrupt disabled regions}
+\begin{table}
+\begin{tabular}{ll}
+ \textbf{thread} & \textbf{interrupt} \\
+ spin\_lock(lock); & \\
+ interrupt & \\
+ & interrupt handler \\
+ & spin\_lock(lock); \\
+ & DEADLOCK! \\
+\end{tabular}
+\end{table}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Preemption disabled regions}
+\begin{itemize}
+\item Mostly in context of spinlocks and rwlocks
+\item Also protects per cpu variables
+\item Few places which require explicit preemption disable
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Why spinlocked preempt disabled regions}
+\begin{table}
+\begin{tabular}{ll}
+ \textbf{thread A} & \textbf{thread B} \\
+ spin\_lock(lock); & \\
+ preemption & \\
+ & spin\_lock(lock);\\
+ & DEADLOCK! \\
+\end{tabular}
+\end{table}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{spinlocks}
+\begin{itemize}
+\item RT separates them into spinlock and raw\_spinlock
+\item raw\_spinlock in RT is identical to mainline
+\item spinlock in RT is replaced by a "'sleeping"' spinlock
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Reader/Writer locks}
+\begin{itemize}
+\item rwlock in RT is replaced by a "'sleeping"' spinlock
+\item Readercount in RT is limited to 1
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Lock replacement requires}
+\begin{itemize}
+\item Forced interrupt threading
+\item Forced soft interrupt threading
+\item Substitution of percpu constructs
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Lock replacement requires}
+Preservation of migration disable. In mainline migration is disabled by
+\begin{itemize}
+\item interrupt disable
+\item preempt disable
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Priority inversion}
+\begin{center}
+\includegraphics[scale=0.4]{images/pinv.png}
+\end{center}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Priority inheritance}
+\begin{center}
+\includegraphics[scale=0.4]{images/pinh.png}
+\end{center}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Priority inheritance}
+\begin{itemize}
+\item Kernelimplementation: rtmutex
+\item Nested lock boosting
+\item User space interface: futex (pthread\_mutex)
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Lock replacement}
+\begin{itemize}
+\item Wrapper around rtmutex
+\item Adaptive spinning for spinlocks and rwlocks
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Lock replacement}
+All locking primitives are replaced except
+\begin{itemize}
+\item raw\_spinlock
+\item semaphore
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Why are semaphores special?}
+\begin{itemize}
+\item No strict owner semantics
+\item No owner, no boosting
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Further changes}
+\begin{itemize}
+\item per cpu locks
+\item preemptible RCU
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Per CPU locks}
+Protect regions which are in mainline protected by
+\begin{itemize}
+\item preemption disable
+\item interrupt disable
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Preemptible RCU}
+What's RCU?
+\begin{itemize}
+\item Read Copy Update
+\item Scalability replacement for reader/writer locks
+\item Restricted bulk refcounting
+\item Poor mans garbage collector
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Preemptible RCU}
+What's RCU?
+\begin{center}
+\includegraphics[scale=0.4]{images/GracePeriodGood.png}
+\end{center}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Preemptible RCU}
+RCU versus rwlocks
+\begin{center}
+\includegraphics[scale=0.4]{images/rwlockRCUupdate.jpg}
+\end{center}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT technology}
+\begin{beamerboxesrounded}[shadow=true]{Preemptible RCU}
+\begin{itemize}
+\item Original RCU implementation relied on preempt disable
+\item Preemptible implementation is in mainline
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\subsection{Preempt-RT source impact}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT source impact}
+\begin{beamerboxesrounded}[shadow=true]{Kernel source structure}
+\begin{center}
+\includegraphics[scale=0.35]{images/ksource.png}
+\end{center}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT source impact}
+\begin{beamerboxesrounded}[shadow=true]{Kernel source structure RT patch}
+\begin{center}
+\includegraphics[scale=0.4]{images/rtsource.png}
+\end{center}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT source impact}
+\begin{beamerboxesrounded}[shadow=true]{Architecture source structure}
+\begin{center}
+\includegraphics[scale=0.35]{images/asource.png}
+\end{center}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT source impact}
+\begin{beamerboxesrounded}[shadow=true]{Architecture source structure, RT patch}
+\begin{center}
+\includegraphics[scale=0.35]{images/rtarch.png}
+\end{center}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT source impact}
+\begin{beamerboxesrounded}[shadow=true]{Core source structure}
+\begin{center}
+\includegraphics[scale=0.35]{images/kdirsource.png}
+\end{center}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT source impact}
+\begin{beamerboxesrounded}[shadow=true]{Core source structure, RT patch}
+\begin{center}
+\includegraphics[scale=0.4]{images/rtkernel.png}
+\end{center}
+\end{beamerboxesrounded}
+\end{frame}
+
+\subsection{Preempt-RT downsides}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT downsides}
+\begin{beamerboxesrounded}[shadow=true]{Determinism comes with a prize}
+\begin{itemize}
+\item Reduced throughput
+\item Measurable I/O performance impact
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\subsection{Preempt-RT influence on mainline Linux}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT influence on mainline Linux}
+\begin{beamerboxesrounded}[shadow=true]{Most of it is upstream}
+\begin{itemize}
+\item More than 95\% of the development has been merged
+\item Only the hard to solve issues are left
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT influence on mainline Linux}
+\begin{beamerboxesrounded}[shadow=true]{What has been achieved?}
+\begin{itemize}
+\item Generic interrupt subsystem
+\item Generic timekeeping subsystem
+\item Generic timer subsystem
+\item High resolution timers
+\item NOHZ infrastructure
+\item Preemptible RCU
+\item Consolidated locking infrastructure
+\item Lock dependency validator
+\item Tracing
+\item ...
+\end{itemize}
+\end{beamerboxesrounded}
+\end{frame}
+
+\subsection{Preempt-RT and Linus Torvalds}
+
+\begin{frame}[fragile]
+\frametitle{Preempt-RT}
+\begin{beamerboxesrounded}[shadow=true]{Famous last words}
+\begin{quote}
+And yeah, I still think the hard-RT people are mostly crazy.
+\end{quote}
+\begin{flushright}
+Linus Torvalds - 2010
+\end{flushright}
+\end{beamerboxesrounded}
+\end{frame}
+
+\input{tailpres}
diff --git a/realtime/rt-specialties/pres_rt-specialties_de.tex b/realtime/rt-specialties/pres_rt-specialties_de.tex
index 85cf301..7061ea4 100644
--- a/realtime/rt-specialties/pres_rt-specialties_de.tex
+++ b/realtime/rt-specialties/pres_rt-specialties_de.tex
@@ -199,11 +199,10 @@ void stack_prefault(void) {
\frametitle{Cyclictest + FTrace}
\begin{lstlisting}[basicstyle=\ttfamily\fontsize{8}{10}\selectfont]
# mount DebugFS
-mkdir -p /mnt/debugfs
-mount -t debugs debugfs /mnt/debugfs
+mount -t debugs debugfs /sys/kernel/debug
# list available tracers
-zi:~# cat /mnt/debugfs/tracing/available_tracers
+zi:~# cat /sys/kernel/debug/tracing/available_tracers
wakeup_rt wakeup preemptoff function sched_switch nop
\end{lstlisting}
\end{frame}