\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}
mini xml
1
optimal to use as buildenv
armel
ftp.debian.org
/debian
http
http://debian.linutronix.de/elbe wheezy main
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{minimal XML file}
\begin{lstlisting}
wheezy
elbe-bootstrap
build-essential
debhelper
devscripts
autotools-dev
automake
mini
linutronix
foo
bash
\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
#include
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 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}
mini xml
1
minimal target rfs including a simple app
buildenv to build the simple app
armel
ftp.debian.org
/debian
http
http://debian.linutronix.de/elbe wheezy main
http://LOCALMACHINE/debian wheezy main
http://LOCALMACHINE/debian wheezy main
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{create target image and add myapp}
\begin{lstlisting}
wheezy
elbe-bootstrap
build-essential
debhelper
devscripts
autotools-dev
automake
mini
linutronix
foo
var/cache/apt/archives/*.deb
bash
myapp
\end{lstlisting}
\end{frame}
\subsection{define a striped target RFS}
\begin{frame}[fragile]
\frametitle{set elbe mode and define images}
\begin{lstlisting}
...
mini
linutronix
foo
ttyAMA0,115200
rootfs.tar.gz
my.img
200MiB
remain
/
ext4
-i 0
var/cache/apt/archives/*.deb
echo "T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100" >> etc/inittab
bash
myapp
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{build target rfs}
\begin{lstlisting}
$ elbe create mini.xml --directory=./target
$ cd target
$ make
\input{tailpres}