Weiter Zurück Inhalt

6. Libraries

6.1 Wozu Libraries

Libraries haben den Vorteil, daß Applikationen (Ihre Anwendung, Dämonen, usw.) nicht allen Programmcode enthalten müssen, sondern Funktionen die von verschiedenen Programmen verwendet werden nur in Form einer Library dem System zugänglich gemacht werden müssen. Libraries sparen also Platz auf der Harddisk, indem die Programme viel kleiner sein können und sparen auch zur Laufzeit Platz, da mehrere Programme auf die Libraries zugreifen können die nur noch einmal im Speicher geladen sein müssen.

Dieser Vorteil bringt uns ein bischen Arbeit. Wir müssen immer sicherstellen, daß die richtigen Applikationen und Libraries auf der Flashdisk in Ihrer Directorystruktur vorhanden sein müssen. Hierzu habe ich bei meinen Embedded Systemen folgendes Script im Einsatz, daß in die Directory Struktur die notwendigen Applikationen und Libraries implantiert. Damit haben Sie alle Libraries am embedded system verfügbar, die auch auf ihrem Entwicklungssystem verfügbar sind.

6.2 Das Script

Das nachfolgende Script kopiert die Applikationen die in den Variablen BINS und SBINS angegeben sind, in Ihr Zieldirectory, daß Sie zuvor in das Directory "root" entpackt haben. Nach dem implantieren der Programme, werden die notwendigen Libraries ermittelt (mit dem Programm ldd) und in die Director Struktur kopiert.

#! /bin/bash
#
# copy all needed files to a Targetdirectory
#
# Original Copyright by:
# Copyright (C) 1998 August Hoerandl <hoerandl@elina.htlw1.ac.at>
#
# Modifications for Nanobox based on a Busybox, made by
# Copyright (C) 2003 Heimo Schön <heimo.schoen@gmx.at>
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# $Id: update-cache,v 1.4 1999/04/01 12:09:51 gustl Exp $
# $Log: update-cache,v $
# Revision 1.4  1999/04/01 12:09:51  gustl
# support for glibc
#
# Revision 1.3  1998/11/22 19:07:02  hoerandl
#
# increased ramdisk size
# added printer support
# fixed problem with ld.so.cache
# fixed etc/inetd.conf
#
# Revision 1.1.1.1  1998/09/21 19:28:56  hoerandl
# First Version in CVS
#
#

#set -x

BINS="clear dmesg fuser gawk login netcat passwd pico rz scp setserial sftp smbclient smbpasswd ssh ssh-add ssh-agent ssh-keyconverter ssh-keygen ssh-keyscan strace stty su sudo sz zip tee"
SBINS="dhcpcd dhcpd hwclock mgetty netdate nmbd nscd portmap pppd smbd sshd tcpd"

function error {
  echo ">>> ERROR: " $* " < ----------------------------------- ERROR" 
}

function do_cp {
  cp -puv $LINK $1 $2 || cp -puv $1 $2 || error "cp $1 $2"
}

# ----------- MAIN ----------------

if [ ! -d root ] ; then
  error "couldnot find the target-directory root"
  exit 1;
fi

echo "first we delete old stuff"
rm -rf root/bin/* root/usr/bin/* root/sbin/* root/usr/sbin/*

echo "copy $BINS to /bin:" 
for i in $BINS ; do
  if [ -e /bin/$i ] ; then 
    do_cp /bin/$i root/bin
    strip root/bin/$i
  elif [ -e /usr/bin/$i ] ; then
    do_cp /usr/bin/$i root/usr/bin
    strip root/usr/bin/$i
  else
    error "cannot locate /bin/$i nor /usr/bin/$i"
  fi
done

echo "copy $SBINS to /sbin:" 
for i in $SBINS ; do
  if [ -e /sbin/$i ] ; then 
    do_cp /sbin/$i root/sbin
    strip root/sbin/$i
  elif [ -e /usr/sbin/$i ] ; then
    do_cp /usr/sbin/$i root/sbin
    strip root/sbin/$i
  else
    error "cannot locate /sbin/$i nor /usr/sbin/$i"
  fi
done

### echo "copy to /etc:" # ETCS
### for i in $ETCS ; do
###   do_cp /etc/$i root/etc
### done
### echo "set keyboard to $KBD"
### rm ramdisk/etc/default.keyboard
### echo $KBD > ramdisk/etc/default.keyboard

### echo "copy to /boot:" # BOOT
### for i in $BOOT ; do
###   if [ -e /bin/$i ] ; then 
###     do_cp /bin/$i boot
###   elif [ -e /usr/bin/$i ] ; then
###     do_cp /usr/bin/$i boot
###   elif [ -e /sbin/$i ] ; then 
###     do_cp /sbin/$i boot
###   elif [ -e /usr/sbin/$i ] ; then
###     do_cp /usr/bin/$i boot
###   else
###     error "cannot locate $i"
###   fi
### done

echo "copy terminfo :"
cp -puv /usr/share/terminfo/l/linux root/usr/lib/terminfo/l
cp -puv /usr/share/terminfo/l/linux root/usr/share/terminfo/l

echo "delete /lib/*"
rm -rf root/lib/*

echo "copy /lib/security/*"
mkdir root/lib/security
cp -r /lib/security/* root/lib/security

echo "copy libraries dynamic ..."
LIBS=$( ldd root/sbin/* root/bin/* root/usr/bin/* root/usr/sbin/* root/lib/security/* 2> /dev/null | grep "[ \t]*lib" | grep -v "ld-linux" | cut -d " " -f 1 | sort -u )
echo "copy $LIBS to /lib :"
for i in $LIBS ; do
  if [ -e /lib/$i ] ; then 
    do_cp /lib/$i root/lib
    strip root/lib/$i
  elif [ -e /usr/lib/$i ] ; then
    do_cp /usr/lib/$i root/lib
    strip root/lib/$i
  else
    error "cannot locate /lib/$i nor /usr/lib/$i"
  fi
done

# copy other libaries
echo "copy ld-linux.so.* libnss*"
for i in /lib/ld-linux.so.[0-9] /lib/libnss* ; do
  do_cp $i root/lib
  strip root/$i
done

# busybox updaten
cd ..
cd busybox
make all
make install
cd _install
tar czvf bb.tgz *
cd ../..
cd nanobox
mv ../busybox/_install/bb.tgz root
cd root
tar xzvf bb.tgz --exclude=tee
mv bb.tgz ../last_bb.tgz
cd ..
    


Weiter Zurück Inhalt