02.09.2014, 05:37 UhrDeutsch | English
Hallo Gast [ Registrierung | Anmelden ]
Letzte Änderung am 2006-08-13 00:27:54 von RoEn


Editiert am 2006-06-27 17:17:03 von RoEn

Erweiterungen:
DEVICE=/dev/sdc

Löschungen:
(bash)DEVICE=/dev/sdc



Editiert am 2006-06-10 19:19:52 von RoEn

Erweiterungen:
 mkdir $FLASH/dev/pts
cp -a $FLASH/* template
/dev/hda1 / ext2? defaults 0 0


Löschungen:
 (bash)mkdir $FLASH/dev/pts
(bash)cp -a $FLASH/* template
(bash)/dev/hda1 / ext2? defaults 0 0



Editiert am 2006-06-10 19:18:15 von RoEn

Erweiterungen:
%%


Editiert am 2006-06-10 19:17:20 von RoEn

Erweiterungen:

Embedded Kanotix


Hardware: PC104, 32MB Compact Flash, 64MB Ram, National Geode GX1 Prozessor mit 200 MHz
Software: Ein (bis zur Unkenntlichkeit) abgespecktes Kanotix BH8. Original Kernel, original libc, busybox, dropbear (SSH) und tinylogin.
DEVICE=/dev/sdc
FLASH=/mnt/sdc1

cfdisk $DEVICE

mkfs.ext2 $PARTITION

 (bash)tune2fs -c 0 -i 0 $PARTITION

mount $PARTITION $FLASH

grub-install --no-floppy --root-directory=$FLASH $DEVICE
echo "(hd0)   /dev/hda" > $FLASH/boot/grub/device.map

 (bash)

 (bash)mkdir $FLASH/bin
cp -a /bin/ash.static $FLASH/bin

 (bash)mkdir $FLASH/dev
mknod $FLASH/dev/console c 5 1

 (bash)mkdir $FLASH/dev/pts
mknod $FLASH/dev/ptmx c 5 2

Auf meinem Entwicklungssystem besteht folgende Verzeichnisstruktur:
 (bash)
                        template.tgz

 (bash)cp -a $FLASH/* template

 (bash)
tar cvfz ../template.tgz

 (bash)
shadow

 (bash)/dev/hda1       /               ext2    defaults        0 0
pts             /dev/pts        devpts  gid=5,mode=0620 0 0

 (bash)
tty4::respawn:/sbin/getty 38400 /dev/tty4

 (bash)
done

 (bash)
cp -a target/* $FLASH

zurück



Löschungen:
Embedded Kanotix :code:
:code:
Hardware: PC104, 32MB Compact Flash, 64MB Ram, National Geode GX1 Prozessor mit 200 MHz
Software: Ein (bis zur Unkenntlichkeit) abgespecktes Kanotix BH8. Original Kernel, original libc, busybox, dropbear (SSH) und tinylogin.
:code:DEVICE=/dev/sdc
FLASH=/mnt/sdc1?:code:
:code:cfdisk $code :
:code:mkfs.ext2? $code :
:code:tune2fs? -c 0 -i 0 $code :
:code:mount $PARTITION $code :
:code:grub-install --no-floppy --root-directory=$FLASH $DEVICE
echo "(hd0?) /dev/hda" > $FLASH/boot/grub/device.map:code:
:code:
:code:
:code:mkdir $FLASH/bin
cp -a /bin/ash.static $FLASH/bin:code:
:code:mkdir $FLASH/dev
mknod $FLASH/dev/console c 5 1
:code:
:code:mkdir $FLASH/dev/pts
mknod $FLASH/dev/ptmx c 5 2:code:
# Auf meinem Entwicklungssystem besteht folgende Verzeichnisstruktur:
:code:
              1. tgz
:code:
:code:cp -a $FLASH/* template:code:
:code:
tar cvfz ../template.tgz
:code:
:code:
shadow
:code:
:code:/dev/hda1 / ext2? defaults 0 0
pts /dev/pts devpts gid=5,mode=0620 0 0
:code:
:code:
tty4?::respawn:/sbin/getty 38400 /dev/tty4?
:code:
busybox http://busybox.net stellt die meisten Tools zur Verfügung.
tinylogin http://tinylogin.busybox.net liefert login, getty, passwd, su,...
dropbear http://matt.ucc.asn.au/dropbear liefert ssh-Server und -Client.
:code:
:code:
:code:
cp -a target/* $FLASH
:code:

zurück zum Hardware-Menü




Editiert am 2006-06-10 17:08:18 von RoEn

Erweiterungen:
Embedded Kanotix
So meldet sich mein Rechner blackbox per SSH:
:code:
BusyBox? v1.00-rc3? (2004.09.30-12:24+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ # uname -a
Linux blackbox 2.6.8.1-kanotix-5 #1 Sun Sep 19 14:41:18 CEST 2004 i586 unknown
~ # df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda1 30721 7660 21475 26% /
tmpfs 29224 4 29220 0% /tmp
~ # free
          1. used free shared buffers
    1. 58448 5984 52464 0 152
Swap: 0 0 0
Total: 58448 5984 52464
~ #
:code:
Hardware: PC104, 32MB Compact Flash, 64MB Ram, National Geode GX1 Prozessor mit 200 MHz
Software: Ein (bis zur Unkenntlichkeit) abgespecktes Kanotix BH8. Original Kernel, original libc, busybox, dropbear (SSH) und tinylogin.

Mein Kochrezept, um ein Embedded Kanotix zu realisieren:


Ein paar Definitionen
:code:DEVICE=/dev/sdc
PARTITION=/dev/sdc1?
# Mountpoint
FLASH=/mnt/sdc1?:code:
1.) bootbare Linux Partition anlegen
:code:cfdisk $code :
2.) Filesystem erzeugen
:code:mkfs.ext2? $code :
3.) Checks ausschalten
:code:tune2fs? -c 0 -i 0 $code :
4.) CF mounten
:code:mount $PARTITION $code :
5.) $FLASH/lost+found kann gelöscht werden
6.) GRUB installieren
:code:grub-install --no-floppy --root-directory=$FLASH $DEVICE
echo "(hd0?) /dev/hda" > $FLASH/boot/grub/device.map:code:
7.) kernel -> $FLASH/boot/vmlinuz kopieren
8.) Benötigte Module nach $FLASH/lib/modules... kopieren
9.) $FLASH/boot/grub/menu.lst anpassen, z.B.:
:code:
default 0
timeout 10

#German keyboard (darf nur einmal aufgerufen werden)
setkey y z
setkey z y
setkey Y Z
setkey Z Y
setkey equal parenright
setkey parenright parenleft
setkey parenleft asterisk
setkey doublequote at
setkey plus bracketright
setkey minus slash
setkey slash ampersand
setkey ampersand percent
setkey percent caret
setkey underscore question
setkey question underscore
setkey semicolon less
setkey less numbersign
setkey numbersign backslash
setkey colon greater
setkey greater bar
setkey asterisk braceright


title Linux ash.static
    1. (hd0?,0)
      1. /boot/vmlinuz root=/dev/hda1 init=/bin/ash.static
title Linux
    1. (hd0?,0)
      1. /boot/vmlinuz root=/dev/hda1
    2. :code:

10.) Eine minimale Shell zur Verfügung stellen
:code:mkdir $FLASH/bin
cp -a /bin/ash.static $FLASH/bin:code:

11.) Devices einrichten
:code:mkdir $FLASH/dev
for n in 0 1 2 3 4 5 6 7 8 9; do
      1. $FLASH/dev/tty$n c 4 $n
      2. root:tty $FLASH/dev/tty$n
      3. 666 $FLASH/dev/tty$n
done
mknod $FLASH/dev/tty c 5 0
mknod $FLASH/dev/console c 5 1
:code:
12.) UNIX 98 pty devices einrichten, noch nicht nötig
:code:mkdir $FLASH/dev/pts
mknod $FLASH/dev/ptmx c 5 2:code:

Jetzt müßte der Kernel schon mal mit ash.static starten...

# Auf meinem Entwicklungssystem besteht folgende Verzeichnisstruktur:

:code:
/root /projects /blackbox /src /busybox /dropbear /tinylogin /target ... /template ...
            1. target
            2. template
              1. tgz
:code:

Wenn der Kernel mit ash.static startet, dann ein Abbild in template erzeugen.
:code:cp -a $FLASH/* template:code:
und mit ./make_template ein komprimiertes Abbild erzeugen.
make_template:
:code:
#!/bin/sh
cd template
tar cvfz ../template.tgz
:code:

In template/etc sind jetzt einige Anpassungen nötig, bei mir siehts so aus:

:code:
/dropbear
/init.d
/rcS?.d
busybox.conf
fstab
hosts
hostname
inittab
group
gshadow
passwd
shadow
:code:

Das Verzeichnis dropbear enthält die SSH-keys.
group, gshadow, passwd und shadow können (erstmal) vom Entwicklungsrechner übernommen werden.

fstab:
:code:/dev/hda1 / ext2? defaults 0 0
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
pts /dev/pts devpts gid=5,mode=0620 0 0
:code:

hosts und hostname sind klar.
init.d und rcS?.d gehören zu init, inittab weicht allerdings vom Standard ab, da busybox verwendet wird.
inittab:
:code:
# Run first
::sysinit:/etc/init.d/rcS?

#
::ctrlaltdel:/sbin/reboot

# To do before rebooting
::shutdown:/bin/umount -a -r

# Restart init
::restart:/sbin/init

#Shells on tty1?..4
tty1?::respawn:/sbin/getty 38400 /dev/tty1?
tty2?::respawn:/sbin/getty 38400 /dev/tty2?
tty3?::respawn:/sbin/getty 38400 /dev/tty3?
tty4?::respawn:/sbin/getty 38400 /dev/tty4?
:code:

Drei Softwarepakete liefern kompakte Programme für den Embedded-Bereich:
busybox http://busybox.net stellt die meisten Tools zur Verfügung.
tinylogin http://tinylogin.busybox.net liefert login, getty, passwd, su,...
dropbear http://matt.ucc.asn.au/dropbear liefert ssh-Server und -Client.
Die Quellen nach src installieren und anpassen. Die Default-Werte sind soweit ganz gut. Nur bei dropbear habe ich "dropbearmulti" in options.h eingestellt.

Mit make_target wird jetzt alles zusammen gemixt, template.tgz wird entpackt, zusätzliche (Standard-)Programme werden kopiert, busybox, dropbear und tinylogin werden installiert, einige Standard-Libraries (pam, terminfo,..) werden installiert und anschließend werden per ldd alle Library-Abhängigkeiten ermittelt und die zugehörigen *.so kopiert.

make_target:
:code:
#!/bin/sh

WORK="/root/projects/blackbox
TARGET="$WORK/target"

#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"
#SBINS="dhcpcd dhcpd hwclock mgetty netdate nmbd nscd portmap pppd smbd sshd tcpd"

BINS="fuser apm"
SBINS="hwclock"

function error {
    1. " ERROR: " $* " ERROR"
}


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

# MAIN

if [ ! -d $TARGET ] ; then
    1. "could not find the target-directory $TARGET"
  1. 1;
fi

echo "first we delete old stuff"
rm -rf $TARGET/*


echo "install template"
cd $TARGET
tar xzvf $WORK/template.tgz
cd $WORK


if [ "$BINS" ] ; then
      1. "copy $BINS to /bin:"
        1. -p $TARGET/bin
        2. -p $TARGET/usr/bin
      2. i in $BINS ; do
          1. [ -e /bin/$i ] ; then
              1. cp /bin/$i $TARGET/bin
                1. $TARGET/bin/$i
            1. [ -e /usr/bin/$i ] ; then
                1. cp /usr/bin/$i $TARGET/usr/bin
                  1. $TARGET/usr/bin/$i
              1. error "cannot locate /bin/$i nor /usr/bin/$i"
            2. done
fi


if [ "$SBINS" ] ; then
      1. "copy $SBINS to /sbin:"
        1. -p $TARGET/sbin
        2. -p $TARGET/usr/sbin
      2. i in $SBINS ; do
          1. [ -e /sbin/$i ] ; then
              1. cp /sbin/$i $TARGET/sbin
                1. $TARGET/sbin/$i
            1. [ -e /usr/sbin/$i ] ; then
                1. cp /usr/sbin/$i $TARGET/usr/sbin
                  1. $TARGET/usr/sbin/$i
              1. error "cannot locate /sbin/$i nor /usr/sbin/$i"
            2. done
fi


# busybox updaten
echo "update busybox"
cd $WORK/src/busybox
make all
make install
cd _install
tar czf $WORK/bb.tgz *
cd $TARGET
tar xzvf $WORK/bb.tgz
cd $WORK


# dropbear updaten
echo "update dropbear"
cd $WORK/src/dropbear
make dropbearmulti
cp dropbearmulti $TARGET/usr/sbin
ln -s dropbearmulti $TARGET/usr/sbin/dropbear
ln -s dropbearmulti $TARGET/usr/sbin/dropbearkey
ln -s dropbearmulti $TARGET/usr/sbin/dropbearconvert
make scp
cp scp $TARGET/usr/bin


# tinylogin updaten
echo "update tinylogin"
cd $WORK/src/tinylogin
make all
make install
cd _install
tar czf $WORK/tl.tgz *
cd $TARGET
tar xzvf $WORK/tl.tgz
cd $WORK


# copy needed libs

echo "copy terminfo :"
mkdir -p $TARGET/usr/share/terminfo/l
cp -puv /usr/share/terminfo/l/linux $TARGET/usr/share/terminfo/l
mkdir -p $TARGET/usr/lib/terminfo/l
cp -puv /usr/lib/terminfo/l/linux $TARGET/usr/lib/terminfo/l

echo "copy pam & co:"
cp -av /etc/pam.d $TARGET/etc
cp -av /etc/security $TARGET/etc
cp -av /etc/nsswitch.conf $TARGET/etc

echo "copy /lib/security/*"
mkdir -p $TARGET/lib/security
cp -r /lib/security/* $TARGET/lib/security

echo "copy ld-linux.so.*"
for i in /lib/ld-linux.so.[0-9] ; do
      1. cp $i $TARGET/lib
        1. $TARGET/$i
done

echo "copy libnss*"
for i in /lib/libnss* ; do
      1. cp $i $TARGET/lib
        1. $TARGET/$i
done


echo "copy libraries dynamic ..."
LIBS=$( ldd $TARGET/sbin/* $TARGET/bin/* $TARGET/usr/bin/* $TARGET/usr/sbin/* $TARGET/lib/security/* 2> /dev/null | grep ":space:lib" | awk '{print $1}' | sort -u )
echo "copy $LIBS to /lib :"
for i in $LIBS ; do
    1. [ -e /lib/$i ] ; then
      1. cp /lib/$i $TARGET/lib
        1. $TARGET/lib/$i
      2. [ -e /usr/lib/$i ] ; then
      3. cp /usr/lib/$i $TARGET/usr/lib
        1. $TARGET/usr/lib/$i
      4. error "cannot locate /lib/$i nor /usr/lib/$i"
    2. done
:code:


Zum Abschluß wird target ins Flash kopiert:

:code:
cp -a target/* $FLASH
:code:


Fortsetzung folgt...


zurück zum Hardware-Menü



Löschungen:
Embedded Kanotix
So meldet sich mein Rechner blackbox per SSH:
:code:
BusyBox? v1.00-rc3? (2004.09.30-12:24+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ # uname -a
Linux blackbox 2.6.8.1-kanotix-5 #1 Sun Sep 19 14:41:18 CEST 2004 i586 unknown
~ # df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda1 30721 7660 21475 26% /
tmpfs 29224 4 29220 0% /tmp
~ # free
          1. used free shared buffers
    1. 58448 5984 52464 0 152
Swap: 0 0 0
Total: 58448 5984 52464
~ #
:code:
Hardware: PC104, 32MB Compact Flash, 64MB Ram, National Geode GX1 Prozessor mit 200 MHz
Software: Ein (bis zur Unkenntlichkeit) abgespecktes Kanotix BH8. Original Kernel, original libc, busybox, dropbear (SSH) und tinylogin.

Mein Kochrezept, um ein Embedded Kanotix zu realisieren:


Ein paar Definitionen
:code:DEVICE=/dev/sdc
PARTITION=/dev/sdc1?
# Mountpoint
FLASH=/mnt/sdc1?:code:
1.) bootbare Linux Partition anlegen
:code:cfdisk $code :
2.) Filesystem erzeugen
:code:mkfs.ext2? $code :
3.) Checks ausschalten
:code:tune2fs? -c 0 -i 0 $code :
4.) CF mounten
:code:mount $PARTITION $code :
5.) $FLASH/lost+found kann gelöscht werden
6.) GRUB installieren
:code:grub-install --no-floppy --root-directory=$FLASH $DEVICE
echo "(hd0?) /dev/hda" > $FLASH/boot/grub/device.map:code:
7.) kernel -> $FLASH/boot/vmlinuz kopieren
8.) Benötigte Module nach $FLASH/lib/modules... kopieren
9.) $FLASH/boot/grub/menu.lst anpassen, z.B.:
:code:
default 0
timeout 10

#German keyboard (darf nur einmal aufgerufen werden)
setkey y z
setkey z y
setkey Y Z
setkey Z Y
setkey equal parenright
setkey parenright parenleft
setkey parenleft asterisk
setkey doublequote at
setkey plus bracketright
setkey minus slash
setkey slash ampersand
setkey ampersand percent
setkey percent caret
setkey underscore question
setkey question underscore
setkey semicolon less
setkey less numbersign
setkey numbersign backslash
setkey colon greater
setkey greater bar
setkey asterisk braceright


title Linux ash.static
    1. (hd0?,0)
      1. /boot/vmlinuz root=/dev/hda1 init=/bin/ash.static
title Linux
    1. (hd0?,0)
      1. /boot/vmlinuz root=/dev/hda1
    2. :code:

10.) Eine minimale Shell zur Verfügung stellen
:code:mkdir $FLASH/bin
cp -a /bin/ash.static $FLASH/bin:code:

11.) Devices einrichten
:code:mkdir $FLASH/dev
for n in 0 1 2 3 4 5 6 7 8 9; do
      1. $FLASH/dev/tty$n c 4 $n
      2. root:tty $FLASH/dev/tty$n
      3. 666 $FLASH/dev/tty$n
done
mknod $FLASH/dev/tty c 5 0
mknod $FLASH/dev/console c 5 1
:code:
12.) UNIX 98 pty devices einrichten, noch nicht nötig
:code:mkdir $FLASH/dev/pts
mknod $FLASH/dev/ptmx c 5 2:code:

Jetzt müßte der Kernel schon mal mit ash.static starten...

# Auf meinem Entwicklungssystem besteht folgende Verzeichnisstruktur:

:code:
/root /projects /blackbox /src /busybox /dropbear /tinylogin /target ... /template ...
            1. target
            2. template
              1. tgz
:code:

Wenn der Kernel mit ash.static startet, dann ein Abbild in template erzeugen.
:code:cp -a $FLASH/* template:code:
und mit ./make_template ein komprimiertes Abbild erzeugen.
make_template:
:code:
#!/bin/sh
cd template
tar cvfz ../template.tgz
:code:

In template/etc sind jetzt einige Anpassungen nötig, bei mir siehts so aus:

:code:
/dropbear
/init.d
/rcS?.d
busybox.conf
fstab
hosts
hostname
inittab
group
gshadow
passwd
shadow
:code:

Das Verzeichnis dropbear enthält die SSH-keys.
group, gshadow, passwd und shadow können (erstmal) vom Entwicklungsrechner übernommen werden.

fstab:
:code:/dev/hda1 / ext2? defaults 0 0
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
pts /dev/pts devpts gid=5,mode=0620 0 0
:code:

hosts und hostname sind klar.
init.d und rcS?.d gehören zu init, inittab weicht allerdings vom Standard ab, da busybox verwendet wird.
inittab:
:code:
# Run first
::sysinit:/etc/init.d/rcS?

#
::ctrlaltdel:/sbin/reboot

# To do before rebooting
::shutdown:/bin/umount -a -r

# Restart init
::restart:/sbin/init

#Shells on tty1?..4
tty1?::respawn:/sbin/getty 38400 /dev/tty1?
tty2?::respawn:/sbin/getty 38400 /dev/tty2?
tty3?::respawn:/sbin/getty 38400 /dev/tty3?
tty4?::respawn:/sbin/getty 38400 /dev/tty4?
:code:

Drei Softwarepakete liefern kompakte Programme für den Embedded-Bereich:
busybox http://busybox.net stellt die meisten Tools zur Verfügung.
tinylogin http://tinylogin.busybox.net liefert login, getty, passwd, su,...
dropbear http://matt.ucc.asn.au/dropbear liefert ssh-Server und -Client.
Die Quellen nach src installieren und anpassen. Die Default-Werte sind soweit ganz gut. Nur bei dropbear habe ich "dropbearmulti" in options.h eingestellt.

Mit make_target wird jetzt alles zusammen gemixt, template.tgz wird entpackt, zusätzliche (Standard-)Programme werden kopiert, busybox, dropbear und tinylogin werden installiert, einige Standard-Libraries (pam, terminfo,..) werden installiert und anschließend werden per ldd alle Library-Abhängigkeiten ermittelt und die zugehörigen *.so kopiert.

make_target:
:code:
#!/bin/sh

WORK="/root/projects/blackbox
TARGET="$WORK/target"

#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"
#SBINS="dhcpcd dhcpd hwclock mgetty netdate nmbd nscd portmap pppd smbd sshd tcpd"

BINS="fuser apm"
SBINS="hwclock"

function error {
    1. " ERROR: " $* " ERROR"
}


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

# MAIN

if [ ! -d $TARGET ] ; then
    1. "could not find the target-directory $TARGET"
  1. 1;
fi

echo "first we delete old stuff"
rm -rf $TARGET/*


echo "install template"
cd $TARGET
tar xzvf $WORK/template.tgz
cd $WORK


if [ "$BINS" ] ; then
      1. "copy $BINS to /bin:"
        1. -p $TARGET/bin
        2. -p $TARGET/usr/bin
      2. i in $BINS ; do
          1. [ -e /bin/$i ] ; then
              1. cp /bin/$i $TARGET/bin
                1. $TARGET/bin/$i
            1. [ -e /usr/bin/$i ] ; then
                1. cp /usr/bin/$i $TARGET/usr/bin
                  1. $TARGET/usr/bin/$i
              1. error "cannot locate /bin/$i nor /usr/bin/$i"
            2. done
fi


if [ "$SBINS" ] ; then
      1. "copy $SBINS to /sbin:"
        1. -p $TARGET/sbin
        2. -p $TARGET/usr/sbin
      2. i in $SBINS ; do
          1. [ -e /sbin/$i ] ; then
              1. cp /sbin/$i $TARGET/sbin
                1. $TARGET/sbin/$i
            1. [ -e /usr/sbin/$i ] ; then
                1. cp /usr/sbin/$i $TARGET/usr/sbin
                  1. $TARGET/usr/sbin/$i
              1. error "cannot locate /sbin/$i nor /usr/sbin/$i"
            2. done
fi


# busybox updaten
echo "update busybox"
cd $WORK/src/busybox
make all
make install
cd _install
tar czf $WORK/bb.tgz *
cd $TARGET
tar xzvf $WORK/bb.tgz
cd $WORK


# dropbear updaten
echo "update dropbear"
cd $WORK/src/dropbear
make dropbearmulti
cp dropbearmulti $TARGET/usr/sbin
ln -s dropbearmulti $TARGET/usr/sbin/dropbear
ln -s dropbearmulti $TARGET/usr/sbin/dropbearkey
ln -s dropbearmulti $TARGET/usr/sbin/dropbearconvert
make scp
cp scp $TARGET/usr/bin


# tinylogin updaten
echo "update tinylogin"
cd $WORK/src/tinylogin
make all
make install
cd _install
tar czf $WORK/tl.tgz *
cd $TARGET
tar xzvf $WORK/tl.tgz
cd $WORK


# copy needed libs

echo "copy terminfo :"
mkdir -p $TARGET/usr/share/terminfo/l
cp -puv /usr/share/terminfo/l/linux $TARGET/usr/share/terminfo/l
mkdir -p $TARGET/usr/lib/terminfo/l
cp -puv /usr/lib/terminfo/l/linux $TARGET/usr/lib/terminfo/l

echo "copy pam & co:"
cp -av /etc/pam.d $TARGET/etc
cp -av /etc/security $TARGET/etc
cp -av /etc/nsswitch.conf $TARGET/etc

echo "copy /lib/security/*"
mkdir -p $TARGET/lib/security
cp -r /lib/security/* $TARGET/lib/security

echo "copy ld-linux.so.*"
for i in /lib/ld-linux.so.[0-9] ; do
      1. cp $i $TARGET/lib
        1. $TARGET/$i
done

echo "copy libnss*"
for i in /lib/libnss* ; do
      1. cp $i $TARGET/lib
        1. $TARGET/$i
done


echo "copy libraries dynamic ..."
LIBS=$( ldd $TARGET/sbin/* $TARGET/bin/* $TARGET/usr/bin/* $TARGET/usr/sbin/* $TARGET/lib/security/* 2> /dev/null | grep ":space:lib" | awk '{print $1}' | sort -u )
echo "copy $LIBS to /lib :"
for i in $LIBS ; do
    1. [ -e /lib/$i ] ; then
      1. cp /lib/$i $TARGET/lib
        1. $TARGET/lib/$i
      2. [ -e /usr/lib/$i ] ; then
      3. cp /usr/lib/$i $TARGET/usr/lib
        1. $TARGET/usr/lib/$i
      4. error "cannot locate /lib/$i nor /usr/lib/$i"
    2. done
:code:


Zum Abschluß wird target ins Flash kopiert:

:code:
cp -a target/* $FLASH
:code:


Fortsetzung folgt...



älteste bekannte Version dieser Seite wurde bearbeitet am 2004-10-04 17:36:52 von HoRo [ ]

Embedded Kanotix

So meldet sich mein Rechner blackbox per SSH:
:code:
BusyBox? v1.00-rc3? (2004.09.30-12:24+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ # uname -a
Linux blackbox 2.6.8.1-kanotix-5 #1 Sun Sep 19 14:41:18 CEST 2004 i586 unknown
~ # df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda1 30721 7660 21475 26% /
tmpfs 29224 4 29220 0% /tmp
~ # free
          1. used free shared buffers
    1. 58448 5984 52464 0 152
Swap: 0 0 0
Total: 58448 5984 52464
~ #
:code:
Hardware: PC104, 32MB Compact Flash, 64MB Ram, National Geode GX1 Prozessor mit 200 MHz
Software: Ein (bis zur Unkenntlichkeit) abgespecktes Kanotix BH8. Original Kernel, original libc, busybox, dropbear (SSH) und tinylogin.

Mein Kochrezept, um ein Embedded Kanotix zu realisieren:


Ein paar Definitionen
:code:DEVICE=/dev/sdc
PARTITION=/dev/sdc1?
# Mountpoint
FLASH=/mnt/sdc1?:code:
1.) bootbare Linux Partition anlegen
:code:cfdisk $code :
2.) Filesystem erzeugen
:code:mkfs.ext2? $code :
3.) Checks ausschalten
:code:tune2fs? -c 0 -i 0 $code :
4.) CF mounten
:code:mount $PARTITION $code :
5.) $FLASH/lost+found kann gelöscht werden
6.) GRUB installieren
:code:grub-install --no-floppy --root-directory=$FLASH $DEVICE
echo "(hd0?) /dev/hda" > $FLASH/boot/grub/device.map:code:
7.) kernel -> $FLASH/boot/vmlinuz kopieren
8.) Benötigte Module nach $FLASH/lib/modules... kopieren
9.) $FLASH/boot/grub/menu.lst anpassen, z.B.:
:code:
default 0
timeout 10

#German keyboard (darf nur einmal aufgerufen werden)
setkey y z
setkey z y
setkey Y Z
setkey Z Y
setkey equal parenright
setkey parenright parenleft
setkey parenleft asterisk
setkey doublequote at
setkey plus bracketright
setkey minus slash
setkey slash ampersand
setkey ampersand percent
setkey percent caret
setkey underscore question
setkey question underscore
setkey semicolon less
setkey less numbersign
setkey numbersign backslash
setkey colon greater
setkey greater bar
setkey asterisk braceright


title Linux ash.static
    1. (hd0?,0)
      1. /boot/vmlinuz root=/dev/hda1 init=/bin/ash.static
title Linux
    1. (hd0?,0)
      1. /boot/vmlinuz root=/dev/hda1
    2. :code:

10.) Eine minimale Shell zur Verfügung stellen
:code:mkdir $FLASH/bin
cp -a /bin/ash.static $FLASH/bin:code:

11.) Devices einrichten
:code:mkdir $FLASH/dev
for n in 0 1 2 3 4 5 6 7 8 9; do
      1. $FLASH/dev/tty$n c 4 $n
      2. root:tty $FLASH/dev/tty$n
      3. 666 $FLASH/dev/tty$n
done
mknod $FLASH/dev/tty c 5 0
mknod $FLASH/dev/console c 5 1
:code:
12.) UNIX 98 pty devices einrichten, noch nicht nötig
:code:mkdir $FLASH/dev/pts
mknod $FLASH/dev/ptmx c 5 2:code:

Jetzt müßte der Kernel schon mal mit ash.static starten...

# Auf meinem Entwicklungssystem besteht folgende Verzeichnisstruktur:

:code:
/root /projects /blackbox /src /busybox /dropbear /tinylogin /target ... /template ...
            1. target
            2. template
              1. tgz
:code:

Wenn der Kernel mit ash.static startet, dann ein Abbild in template erzeugen.
:code:cp -a $FLASH/* template:code:
und mit ./make_template ein komprimiertes Abbild erzeugen.
make_template:
:code:
#!/bin/sh
cd template
tar cvfz ../template.tgz
:code:

In template/etc sind jetzt einige Anpassungen nötig, bei mir siehts so aus:

:code:
/dropbear
/init.d
/rcS?.d
busybox.conf
fstab
hosts
hostname
inittab
group
gshadow
passwd
shadow
:code:

Das Verzeichnis dropbear enthält die SSH-keys.
group, gshadow, passwd und shadow können (erstmal) vom Entwicklungsrechner übernommen werden.

fstab:
:code:/dev/hda1 / ext2? defaults 0 0
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
pts /dev/pts devpts gid=5,mode=0620 0 0
:code:

hosts und hostname sind klar.
init.d und rcS?.d gehören zu init, inittab weicht allerdings vom Standard ab, da busybox verwendet wird.
inittab:
:code:
# Run first
::sysinit:/etc/init.d/rcS?

#
::ctrlaltdel:/sbin/reboot

# To do before rebooting
::shutdown:/bin/umount -a -r

# Restart init
::restart:/sbin/init

#Shells on tty1?..4
tty1?::respawn:/sbin/getty 38400 /dev/tty1?
tty2?::respawn:/sbin/getty 38400 /dev/tty2?
tty3?::respawn:/sbin/getty 38400 /dev/tty3?
tty4?::respawn:/sbin/getty 38400 /dev/tty4?
:code:

Drei Softwarepakete liefern kompakte Programme für den Embedded-Bereich:
busybox http://busybox.net stellt die meisten Tools zur Verfügung.
tinylogin http://tinylogin.busybox.net liefert login, getty, passwd, su,...
dropbear http://matt.ucc.asn.au/dropbear liefert ssh-Server und -Client.
Die Quellen nach src installieren und anpassen. Die Default-Werte sind soweit ganz gut. Nur bei dropbear habe ich "dropbearmulti" in options.h eingestellt.

Mit make_target wird jetzt alles zusammen gemixt, template.tgz wird entpackt, zusätzliche (Standard-)Programme werden kopiert, busybox, dropbear und tinylogin werden installiert, einige Standard-Libraries (pam, terminfo,..) werden installiert und anschließend werden per ldd alle Library-Abhängigkeiten ermittelt und die zugehörigen *.so kopiert.

make_target:
:code:
#!/bin/sh

WORK="/root/projects/blackbox
TARGET="$WORK/target"

#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"
#SBINS="dhcpcd dhcpd hwclock mgetty netdate nmbd nscd portmap pppd smbd sshd tcpd"

BINS="fuser apm"
SBINS="hwclock"

function error {
    1. " ERROR: " $* " ERROR"
}


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

# MAIN

if [ ! -d $TARGET ] ; then
    1. "could not find the target-directory $TARGET"
  1. 1;
fi

echo "first we delete old stuff"
rm -rf $TARGET/*


echo "install template"
cd $TARGET
tar xzvf $WORK/template.tgz
cd $WORK


if [ "$BINS" ] ; then
      1. "copy $BINS to /bin:"
        1. -p $TARGET/bin
        2. -p $TARGET/usr/bin
      2. i in $BINS ; do
          1. [ -e /bin/$i ] ; then
              1. cp /bin/$i $TARGET/bin
                1. $TARGET/bin/$i
            1. [ -e /usr/bin/$i ] ; then
                1. cp /usr/bin/$i $TARGET/usr/bin
                  1. $TARGET/usr/bin/$i
              1. error "cannot locate /bin/$i nor /usr/bin/$i"
            2. done
fi


if [ "$SBINS" ] ; then
      1. "copy $SBINS to /sbin:"
        1. -p $TARGET/sbin
        2. -p $TARGET/usr/sbin
      2. i in $SBINS ; do
          1. [ -e /sbin/$i ] ; then
              1. cp /sbin/$i $TARGET/sbin
                1. $TARGET/sbin/$i
            1. [ -e /usr/sbin/$i ] ; then
                1. cp /usr/sbin/$i $TARGET/usr/sbin
                  1. $TARGET/usr/sbin/$i
              1. error "cannot locate /sbin/$i nor /usr/sbin/$i"
            2. done
fi


# busybox updaten
echo "update busybox"
cd $WORK/src/busybox
make all
make install
cd _install
tar czf $WORK/bb.tgz *
cd $TARGET
tar xzvf $WORK/bb.tgz
cd $WORK


# dropbear updaten
echo "update dropbear"
cd $WORK/src/dropbear
make dropbearmulti
cp dropbearmulti $TARGET/usr/sbin
ln -s dropbearmulti $TARGET/usr/sbin/dropbear
ln -s dropbearmulti $TARGET/usr/sbin/dropbearkey
ln -s dropbearmulti $TARGET/usr/sbin/dropbearconvert
make scp
cp scp $TARGET/usr/bin


# tinylogin updaten
echo "update tinylogin"
cd $WORK/src/tinylogin
make all
make install
cd _install
tar czf $WORK/tl.tgz *
cd $TARGET
tar xzvf $WORK/tl.tgz
cd $WORK


# copy needed libs

echo "copy terminfo :"
mkdir -p $TARGET/usr/share/terminfo/l
cp -puv /usr/share/terminfo/l/linux $TARGET/usr/share/terminfo/l
mkdir -p $TARGET/usr/lib/terminfo/l
cp -puv /usr/lib/terminfo/l/linux $TARGET/usr/lib/terminfo/l

echo "copy pam & co:"
cp -av /etc/pam.d $TARGET/etc
cp -av /etc/security $TARGET/etc
cp -av /etc/nsswitch.conf $TARGET/etc

echo "copy /lib/security/*"
mkdir -p $TARGET/lib/security
cp -r /lib/security/* $TARGET/lib/security

echo "copy ld-linux.so.*"
for i in /lib/ld-linux.so.[0-9] ; do
      1. cp $i $TARGET/lib
        1. $TARGET/$i
done

echo "copy libnss*"
for i in /lib/libnss* ; do
      1. cp $i $TARGET/lib
        1. $TARGET/$i
done


echo "copy libraries dynamic ..."
LIBS=$( ldd $TARGET/sbin/* $TARGET/bin/* $TARGET/usr/bin/* $TARGET/usr/sbin/* $TARGET/lib/security/* 2> /dev/null | grep ":space:lib" | awk '{print $1}' | sort -u )
echo "copy $LIBS to /lib :"
for i in $LIBS ; do
    1. [ -e /lib/$i ] ; then
      1. cp /lib/$i $TARGET/lib
        1. $TARGET/lib/$i
      2. [ -e /usr/lib/$i ] ; then
      3. cp /usr/lib/$i $TARGET/usr/lib
        1. $TARGET/usr/lib/$i
      4. error "cannot locate /lib/$i nor /usr/lib/$i"
    2. done
:code:


Zum Abschluß wird target ins Flash kopiert:

:code:
cp -a target/* $FLASH
:code:


Fortsetzung folgt...
Letzte Revision :
Letzter Editor :
Eigentümer :
 
Deutsch | English
Logos and trademarks are the property of their respective owners, comments are property of their posters, the rest is © 2004 - 2006 by Jörg Schirottke (Kano).
Consult Impressum and Legal Terms for details. Kanotix is Free Software released under the GNU/GPL license.
This CMS is powered by PostNuke, all themes used at this site are released under the GNU/GPL license. designed and hosted by w3you. Our web server is running on Kanotix64-2006.