diff options
Diffstat (limited to 'distribution/elbe-example/pres_elbe-example_en.tex')
| -rw-r--r-- | distribution/elbe-example/pres_elbe-example_en.tex | 208 |
1 files changed, 158 insertions, 50 deletions
diff --git a/distribution/elbe-example/pres_elbe-example_en.tex b/distribution/elbe-example/pres_elbe-example_en.tex index eb64782..db8c2d7 100644 --- a/distribution/elbe-example/pres_elbe-example_en.tex +++ b/distribution/elbe-example/pres_elbe-example_en.tex @@ -1,11 +1,8 @@ \input{configpres} -\lstset{language=c} - \title{ELBE example} \maketitle - \subsection{What will be done?} \begin{frame} @@ -16,11 +13,13 @@ \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} @@ -272,7 +271,7 @@ $ $EDITOR conf/updates \end{lstlisting} \begin{lstlisting} Name: myremoterepo -Method: http://localhost/debian +Method: http://localhost/myrepo Components: main Architectures: i386 amd64 armel source VerifyRelease: blindtrust @@ -286,7 +285,7 @@ IgnoreRelease: yes \begin{lstlisting} $ reprepro include wheezy ../myapp_1.0_i386.changes $ sudo mkdir /var/www/ -$ sudo rsync -av --exclude=db --exclude=conf * /var/www/debian/ +$ sudo rsync -av --exclude=db --exclude=conf * /var/www/myrepo/ \end{lstlisting} \end{frame} @@ -296,15 +295,24 @@ $ sudo rsync -av --exclude=db --exclude=conf * /var/www/debian/ \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 +\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} @@ -314,33 +322,21 @@ $ dpkg -i ../myapp*.deb \begin{lstlisting} $ cd ../myrepo $ reprepro include wheezy /tmp/myapp_1.0_armel.changes -$ sudo rsync -av --exclude=db --exclude=conf * /var/www/debian/ +$ sudo rsync -av --exclude=db --exclude=conf * /var/www/myrepo/ \end{lstlisting} \end{frame} -\subsection{include own application in target RFS} +\subsection{include app in target RFS} \begin{frame}[fragile] -\frametitle{create target image and add myapp} +\frametitle{add repo including 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> @@ -350,29 +346,20 @@ $ $EDIT mini.xml <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> + <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{create target image and add myapp} +\frametitle{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> @@ -391,7 +378,7 @@ $ $EDIT mini.xml \subsection{define a striped target RFS} \begin{frame}[fragile] -\frametitle{set elbe mode and define images} +\frametitle{define sdcard image} \begin{lstlisting} ... <target> @@ -407,19 +394,28 @@ $ $EDIT mini.xml <images> <msdoshd> <name>my.img</name> - <size>200MiB</size> + <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>ext4</type> + <type>ext2</type> <tune2fs>-i 0</tune2fs> </fs> </bylabel> @@ -427,22 +423,134 @@ $ $EDIT mini.xml <diet /> <norecommend /> <finetuning> - <rm>var/cache/apt/archives/*.deb</rm> - <command>echo "T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100" >> 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} +\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} |
