From 0996948c27a1c3668bf36fa6ada78ed99da3b561 Mon Sep 17 00:00:00 2001
From: Manuel Traut <manut@linutronix.de>
Date: Thu, 9 Jan 2014 11:11:53 +0100
Subject: add elbe example

and hands-on slides

Signed-off-by: Manuel Traut <manut@linutronix.de>
---
 distribution/elbe-example/pres_elbe-example_en.tex | 448 +++++++++++++++++++++
 1 file changed, 448 insertions(+)
 create mode 100644 distribution/elbe-example/pres_elbe-example_en.tex

(limited to 'distribution/elbe-example/pres_elbe-example_en.tex')

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..eb64782
--- /dev/null
+++ b/distribution/elbe-example/pres_elbe-example_en.tex
@@ -0,0 +1,448 @@
+\input{configpres}
+
+\lstset{language=c}
+
+\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
+\end{itemize}
+\end{frame}
+
+\subsection{generate a buildenv}
+
+\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/debian
+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/debian/
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+\frametitle{build debian package inside the buildenv}
+\begin{lstlisting}
+$ cd ../buildenv
+$ make run-con
+# login into buildenv
+$ echo 'deb-src http://10.0.2.2/debian wheezy main' >> /etc/apt/sources.list
+$ apt-get update
+$ apt-get source myapp
+$ cd myapp-1.0
+$ ./autogen.sh
+$ dpkg-buildpackage -b
+$ scp ../myapp*.changes ../myapp*.deb 10.0.2.2:/tmp
+$ dpkg -i ../myapp*.deb
+\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/debian/
+\end{lstlisting}
+\end{frame}
+
+
+\subsection{include own application in target RFS}
+
+\begin{frame}[fragile]
+\frametitle{create target image and add myapp}
+\begin{lstlisting}
+$ cd ..
+$ $EDIT mini.xml
+\end{lstlisting}
+\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>
+      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/debian wheezy main</binary>
+          <source>http://LOCALMACHINE/debian wheezy main</source>
+        </url>
+      </url-list>
+    </mirror>
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{create target image and add myapp}
+\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>
+      <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{set elbe mode and define images}
+\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>200MiB</size>
+        <partition>
+          <size>remain</size>
+          <label>rfs</label>
+        </partition>
+      </msdoshd>
+    </images>
+    <fstab>
+      <bylabel>
+        <label>rfs</label>
+        <mountpoint>/</mountpoint>
+        <fs>
+          <type>ext4</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>
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{build target rfs}
+\begin{lstlisting}
+$ elbe create mini.xml --directory=./target
+$ cd target
+$ make
+
+\input{tailpres}
-- 
cgit v1.2.3

