[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Lost] [Patch] [4/4] Service-Manager - Buildsystemänderungen



Noch ein Versuch, diesmal mit Anhang ;-)
Index: trunk/buildmk.sh
===================================================================
--- trunk.orig/buildmk.sh
+++ trunk/buildmk.sh
@@ -37,7 +37,8 @@ shopt -s extglob
 
 INCLUDES=`echo $1 | sed -e 's#-I \?\([^ ]\+\)#-I ../\1#g'`
 NASMINCLUDES=`echo $1 | sed -e 's#-I \?\([^ ]\+\)#-I ../\1/#g'`
-LIBDIRS=`echo $2 | sed -e 's#lib/#../lib/#g'`
+LIBDIRS="$2"
+
 
 if [ -z $LOST_BUILDMK_ROOT ]; then
   export LOST_BUILDMK_ROOT="`pwd`"
@@ -59,20 +60,21 @@ FPCINCLUDES=`echo $INCLUDES | sed -e 's#
 
 if [ -d lib ]; then
     if [ -f lib/prt0.asm ]; then
-        LIBDIRS="lib/prt0.o $LIBDIRS"
+        LIBDIRS="`pwd`/lib/prt0.o $LIBDIRS"
     fi
-    LIBDIRS="lib/library.a $LIBDIRS"
+    LIBDIRS="`pwd`/lib/library.a $LIBDIRS"
 fi
 
 CC_FLAGS=
+CC_FLAGS_APPEND=
 if [ -f Makefile.conf ]; then
     source Makefile.conf
 fi
 
 cat <<EOF > Makefile
-CC=$LOST_TOOLS_GCC $CC_FLAGS $INCLUDES
+CC=$LOST_TOOLS_GCC $CC_FLAGS $INCLUDES $CC_FLAGS_APPEND
 CPP=$LOST_TOOLS_GPP $INCLUDES
-PPC=fpc -n -Cn -CX -Tlost $FPCINCLUDES -Fu../lib/units -Fu../units
+PPC=$LOST_TOOLS_PPC -n -Cn -CX -Tlost $FPCINCLUDES -Fu../lib/units -Fu../units
 
 ASM_ELF=nasm -felf -O99 $NASMINCLUDES
 ASM_BIN=nasm -fbin -O99
@@ -215,7 +217,7 @@ clean:
 	rm -f *.o *.a *.mod
 	for file in *; do if [ -f "\$\$file/Makefile" -a ! -f "\$\$file/.nobuild" ]; then make -sC "\$\$file" clean; rm "\$\$file/Makefile"; fi done  
 
-.SILENT: all makefiles subdirs obj clean image
+.SILENT: all makefiles subdirs obj clean clean_root updateroot image-floppy image-hd test-qemu test-qemu-hd
 EOF
 
 if [ "$LOST_BUILDMK_ROOT" == "`pwd`" ]; then
@@ -223,59 +225,27 @@ cat <<EOF >> Makefile
 clean: clean_root
 
 clean_root:
-	@rm -f build/lost.img
-	@rm -f build/output/apps/* build/output/modules/* build/output/kernel/* build/output/gz/*/*
+	rm -rf build/images/* build/root/*
+	rm -f build/output/apps/* build/output/modules/* build/output/kernel/* build/output/gz/*/*
+	rm -f qemu.log
 
-internal_image:
-	if ! [ -f build/lost.img ]; then \
-        PATH=\$\$PATH:/sbin:/usr/sbin:/usr/local/sbin ;\
-		dd if=/dev/zero of=build/lost.img bs=1024 count=1440 ;\
-		mkfs.msdos build/lost.img ;\
-		mmd -i build/lost.img ::/boot ;\
-		mmd -i build/lost.img ::/boot/grub ;\
-		mmd -i build/lost.img ::/modules ;\
-		mmd -i build/lost.img ::/apps ;\
-		mcopy -i build/lost.img /boot/grub/stage? ::/boot/grub ;\
-		mcopy -i build/lost.img build/default.cfg ::/boot/grub/menu.lst ;\
-		echo device '(fd0)' build/lost.img > build/grub.txt ;\
-		echo root '(fd0)' >> build/grub.txt ;\
-		echo setup '(fd0)' >> build/grub.txt ;\
-		grub --batch < build/grub.txt ;\
-		rm build/grub.txt ;\
-	fi
-	
-	for i in build/output/kernel/*; do \
-		gzip -c \$\$i > build/output/gz/kernel/\`basename \$\$i\` ;\
-	done
-	
-	for i in build/output/modules/*; do \
-		gzip -c \$\$i > build/output/gz/modules/\`basename \$\$i\` ;\
-	done
-
-	for i in build/output/apps/*; do \
-		gzip -c \$\$i > build/output/gz/apps/\`basename \$\$i\` ;\
-	done
-	
-	
-	mcopy -D o -i build/lost.img build/default.cfg ::/boot/grub/menu.lst
-	
-	mcopy -D o -i build/lost.img build/output/gz/kernel/* ::/boot/
-	mcopy -D o -i build/lost.img build/output/gz/modules/* ::/modules/
-	mcopy -D o -i build/lost.img build/output/gz/apps/* ::/apps/
-	mcopy -D o -i build/lost.img build/root/* ::/
-
-image:
-	make --no-print-directory -s all
-	make --no-print-directory -s internal_image 
+updateroot: subdirs
+	build/scripts/updateroot
 
-simage:
-	make --no-print-directory -s subdirs
-	make --no-print-directory -s internal_image 
+image-floppy: updateroot
+	build/scripts/image_floppy
+
+image-hd: updateroot
+	build/scripts/image_hd
 	
-test-qemu: image
-	qemu -serial stdio -fda build/lost.img -boot a
+test-qemu: image-floppy
+	qemu -serial stdio -fda build/images/floppy.img -boot a -net user -net nic,model=rtl8139 | tee qemu-serial.log
+
+test-qemu-hd: image-hd
+	rm -f qemu.log
+	qemu -serial stdio -hda build/images/hd.img -net user -net nic,model=rtl8139 | tee qemu.log
 
-test-bochs: image
+test-bochs: image-floppy
 	bochs -f bochs.config
 
 menuconfig:
Index: trunk/config.sh
===================================================================
--- trunk.orig/config.sh
+++ trunk/config.sh
@@ -1,6 +1,12 @@
 # Ab hier anpassen
 COMPILER_PREFIX_AMD64=
 COMPILER_PREFIX_I386=
+LOST_TOOLS_PPC=fpc
+LOST_GRUB_STAGESDIR=/boot/grub
+LOST_TOOLS_GRUB=/sbin/grub
+LOST_TOOLS_MKE2FS=/sbin/mke2fs
+
+[ -f  $LOST_BUILDMK_ROOT/myconf.sh ] && source  $LOST_BUILDMK_ROOT/myconf.sh
 
 # Ab hier nicht mehr anpassen
 CONFIG_ARCH=`grep CONFIG_ARCH $LOST_BUILDMK_ROOT/src/include/config.h | awk '{ print $3 }'`
Index: trunk/build/config/grub_floppy.cfg
===================================================================
--- /dev/null
+++ trunk/build/config/grub_floppy.cfg
@@ -0,0 +1,9 @@
+title LOST
+kernel /boot/lost debug=s
+module /modules/init boot=file:/
+module /modules/cmos
+module /modules/floppy
+module /modules/dma
+module /modules/fat
+module /modules/servmgr floppy:/devices/fd0|fat:/ cmos floppy fat dma
+boot
Index: trunk/build/config/grub_hd.cfg
===================================================================
--- /dev/null
+++ trunk/build/config/grub_hd.cfg
@@ -0,0 +1,7 @@
+title LOST
+kernel /boot/lost debug=s
+module /modules/init boot=file:/
+module /modules/ata
+module /modules/next2
+module /modules/servmgr ata:/ata00_p0|next2:/ ata next2
+boot
Index: trunk/build/config/image_floppy.sh
===================================================================
--- /dev/null
+++ trunk/build/config/image_floppy.sh
@@ -0,0 +1 @@
+IMAGE_PATH="build/images/floppy.img"
Index: trunk/build/config/image_hd.sh
===================================================================
--- /dev/null
+++ trunk/build/config/image_hd.sh
@@ -0,0 +1,3 @@
+IMAGE_PATH="build/images/hd.img"
+# Imagegroesse in Megabytes
+IMAGE_SIZE=10
Index: trunk/build/default.cfg
===================================================================
--- trunk.orig/build/default.cfg
+++ /dev/null
@@ -1,19 +0,0 @@
-title LOST
-kernel /boot/lost debug=s
-module /modules/init
-module /modules/vterm
-module /modules/console vterm:/vterm0/out vterm:/vterm0/in
-module /modules/tcpip ns=192.168.1.1
-module /modules/dma
-module /modules/floppy
-module /modules/fat
-module /modules/file
-module /modules/kbc
-module /modules/cmos
-module /modules/pci
-module /modules/ata
-module /modules/next2
-module /modules/file mount file:/ ata:/ata00|next2:/
-module /modules/rtl8139
-module /apps/sh
-boot
Index: trunk/build/makeimage.sh
===================================================================
--- trunk.orig/build/makeimage.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-dd if=/dev/zero of=$1 bs=1024 count=1440
-mkfs.msdos $1
-mkdir -p mnt
-mount -oloop $1 mnt
-
-mkdir mnt/grub
-cp /boot/grub/stage? mnt/grub
-
-echo timeout 2 >> mnt/grub/menu.lst
-echo title LOST >> mnt/grub/menu.lst
-echo kernel /lost.krn >> mnt/grub/menu.lst
-echo module /init.mod >> mnt/grub/menu.lst
-for i in *.mod; do 
-    [ "$i" != "init.mod" ] && echo module /"$i" >> mnt/grub/menu.lst
-done
-
-echo boot >> mnt/grub/menu.lst
-
-cp *.krn mnt
-cp *.mod mnt
-umount mnt
-rmdir mnt
-
-echo device '(fd0)' lost.img > grub.txt
-echo root '(fd0)' >> grub.txt
-echo setup '(fd0)' >> grub.txt
-grub --batch < grub.txt
-rm grub.txt
Index: trunk/build/scripts/create_partition
===================================================================
--- /dev/null
+++ trunk/build/scripts/create_partition
@@ -0,0 +1,111 @@
+#!/usr/bin/python
+
+# Copyright (c) 2008 The LOST Project. All rights reserved.
+#
+# This code is derived from software contributed to the LOST Project
+# by Antoine Kaufmann.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#     This product includes software developed by the LOST Project
+#     and its contributors.
+# 4. Neither the name of the LOST Project nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+import sys
+import array
+import stat
+import os
+
+sectors_per_track = 63
+head_count = 16
+
+# Berechnet die CHS-Adresse zur LBA und wandelt sie in das passende Format fuer
+# die Partitionstabelle um.
+# Zurueckgegeben wird ein Tupel mit den 3 Bytes fuer die
+# Partitionstabelleneintraege.
+def lba2chs(lba):
+    # CHS Berechnen
+    cylinder = lba / (sectors_per_track * head_count)
+    temp = lba % (head_count * sectors_per_track)
+    head = temp / sectors_per_track;
+    sector = (temp % sectors_per_track) + 1;
+
+    # Fuer Partitionstabelle Formatieren
+    a = head
+    b = ((cylinder & 0x300) >> 2) + sector
+    c = cylinder & 0xFF
+    return a, b, c
+
+# DWORD in 4 Bytes umrechenen (Little Endian)
+# Zurueckgegeben wird ein Tupel mit den Bytes
+def le_dword(dword):
+    return (dword >>  0) & 255, (dword >>  8) & 255, (dword >> 16) & 255, (dword >> 24) & 255
+
+
+# Abrrechen wenn kein Argument mit dem Pfad gefunden werden konnte
+if len(sys.argv) <= 1:
+    print 'Bitte Imagepfad angeben'
+    sys.exit(-1)
+
+# Ansonsten wird der Pfad gespeichert
+image_path = sys.argv[1]
+
+# Image oeffnen
+image_file = open(image_path, mode='r+b')
+if image_file == 0:
+    print 'Image konnte nicht geoeffnet werden.'
+    sys.exit(-1)
+stat_info = os.lstat(image_path)
+image_size = stat_info[stat.ST_SIZE]
+
+# Partitionstabelle vorbereiten
+part_table = array.array('B')
+for i in range(0, 66):
+    part_table.insert(i, 0)
+# Signatur setzen
+part_table[64] = int('55', 16)
+part_table[65] = int('aa', 16)
+
+
+# Daten fuer Eintrag vorbereiten
+sector_size = 512
+partition_start = 63
+partition_end = image_size / sector_size
+# Das Partitionsende muss auf einer Zylindergrenze liegen
+partition_end -= partition_end % (63 * 16)
+
+
+# In Partitionstabelle eintragen
+part_table[1], part_table[2], part_table[3] = lba2chs(partition_start)
+part_table[4] = int('83', 16)
+part_table[5], part_table[6], part_table[7] = lba2chs(partition_end - 1)
+part_table[8], part_table[9], part_table[10], part_table[11] = le_dword(partition_start)
+part_table[12], part_table[13], part_table[14], part_table[15] = le_dword(partition_end - partition_start)
+
+
+# Partitionstabelle apspeichern
+image_file.seek(446)
+part_table.tofile(image_file)
+
+image_file.close()
Index: trunk/build/scripts/get_partition
===================================================================
--- /dev/null
+++ trunk/build/scripts/get_partition
@@ -0,0 +1,68 @@
+#!/usr/bin/python
+
+# Copyright (c) 2008 The LOST Project. All rights reserved.
+#
+# This code is derived from software contributed to the LOST Project
+# by Antoine Kaufmann.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#     This product includes software developed by the LOST Project
+#     and its contributors.
+# 4. Neither the name of the LOST Project nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+import sys
+import array
+import os
+
+# 4 Bytes in ein dword umwandeln (Little endian)
+# Zurueckgegeben wird ein Tuppel mit den Bytes
+def le_dword(a, b, c, d):
+    return ((a << 0) | (b << 8) | (c << 16) | (d << 24))
+
+
+# Abrrechen wenn kein Argument mit dem Pfad gefunden werden konnte
+if len(sys.argv) <= 1:
+    print 'Bitte Imagepfad angeben'
+    sys.exit(-1)
+
+# Ansonsten wird der Pfad gespeichert
+image_path = sys.argv[1]
+
+# Image oeffnen
+image_file = open(image_path, mode='rb')
+if image_file == 0:
+    print 'Image konnte nicht geoeffnet werden.'
+    sys.exit(-1)
+
+# Partitionstabelle vorbereiten und einlesen
+part_table = array.array('B')
+image_file.seek(446)
+part_table.fromfile(image_file, 63)
+
+# Werte anzeigen
+print le_dword(part_table[8], part_table[9], part_table[10], part_table[11]), le_dword(part_table[12], part_table[13], part_table[14], part_table[15])
+
+image_file.close()
+
Index: trunk/build/scripts/image_floppy
===================================================================
--- /dev/null
+++ trunk/build/scripts/image_floppy
@@ -0,0 +1,83 @@
+#!/bin/bash
+
+# Copyright (c) 2008 The LOST Project. All rights reserved.
+#
+# This code is derived from software contributed to the LOST Project
+# by Antoine Kaufmann.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#     This product includes software developed by the LOST Project
+#     and its contributors.
+# 4. Neither the name of the LOST Project nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ROOT=build/root
+ROOT_COMMON=build/root-common
+ROOT_FLOPPY=build/root-floppy
+source build/config/image_floppy.sh
+
+export PATH="/sbin:/usr/sbin:$PATH"
+export MTOOLSRC=lostmtools.conf
+
+# Konfigurationsdatei fuer mtools generieren
+cat << EOF > $MTOOLSRC
+drive l:
+    file="$IMAGE_PATH" cylinders=80 heads=2 sectors=18 filter
+EOF
+
+# Wenn das Image neu erstellt werden muss, kommen noch ein paar schritte mehr
+# dazu.
+NEW=0
+if ! [ -f $IMAGE_PATH ]; then
+    # Leeres Image erstellen und formatieren
+    dd if=/dev/zero of=$IMAGE_PATH bs=1024 count=1440
+    mformat l:
+    NEW=1
+fi
+
+
+mcopy -D o -s $ROOT/* $ROOT_COMMON/* $ROOT_FLOPPY/* l:/
+
+# Grub-Konfiguration kopieren
+mcopy -D o build/config/grub_floppy.cfg l:/boot/grub/menu.lst
+
+if [ $NEW -ne 0 ]; then
+    # Grub kopieren und installieren
+    mmd -D s l:/boot/grub
+    mcopy -D o $LOST_GRUB_STAGESDIR/stage? l:/boot/grub/
+
+    echo device '(fd0)' $IMAGE_PATH > build/grub.txt
+    echo root '(fd0)' >> build/grub.txt
+    echo setup '(fd0)' >> build/grub.txt
+    $LOST_TOOLS_GRUB --batch < build/grub.txt <<EOF
+    device (fd0) $IMAGE_PATH
+    root (fd0)
+    setup (fd0)
+EOF
+    rm build/grub.txt
+fi
+
+# Konfigurationsdatei fuer mtools wieder loeschen
+rm -f $MTOOLSRC
Index: trunk/build/scripts/image_hd
===================================================================
--- /dev/null
+++ trunk/build/scripts/image_hd
@@ -0,0 +1,110 @@
+#!/bin/bash
+
+# Copyright (c) 2008 The LOST Project. All rights reserved.
+#
+# This code is derived from software contributed to the LOST Project
+# by Antoine Kaufmann.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#     This product includes software developed by the LOST Project
+#     and its contributors.
+# 4. Neither the name of the LOST Project nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ROOT=build/root
+ROOT_COMMON=build/root-common
+ROOT_HD=build/root-hd
+MOUNT=build/mnt
+SUDO=sudo
+
+export LOST_BUILDMK_ROOT="`pwd`"
+source build/config/image_hd.sh
+source config.sh
+
+die()
+{
+    echo $1
+    exit -1
+}
+
+# Wenn das Image neu erstellt werden muss, kommen noch ein paar schritte mehr
+# dazu.
+NEW=0
+if ! [ -f $IMAGE_PATH ]; then
+    # Leeres Image erstellen und formatieren
+    dd if=/dev/zero of=$IMAGE_PATH bs=$((1024*1024)) count=$IMAGE_SIZE 2> /dev/null
+    build/scripts/create_partition $IMAGE_PATH
+    NEW=1
+fi
+
+
+# Start und Ende der Partition einlesen
+PARTITIONS="`build/scripts/get_partition $IMAGE_PATH`"
+PART_START=`echo $PARTITIONS | awk '{print $1}'`
+PART_SIZE=`echo $PARTITIONS | awk '{print $2}'`
+
+if [ $NEW -ne 0 ]; then
+    PART_IMAGE=`tempfile`
+    dd if=$IMAGE_PATH of=$PART_IMAGE bs=512 skip=$PART_START count=$PART_SIZE
+
+    # Dateisystem erstellen
+    $LOST_TOOLS_MKE2FS -F -q -r0 $PART_IMAGE || die "Dateisystem konnte nicht erstellt werden"
+
+    dd if=$PART_IMAGE of=$IMAGE_PATH bs=512 seek=$PART_START count=$PART_SIZE
+    rm $PART_IMAGE
+fi
+
+# Partition mounten
+mkdir -p $MOUNT
+$SUDO mount $IMAGE_PATH $MOUNT -o loop,offset=$((${PART_START} * 512))
+$SUDO chmod 777 -R $MOUNT
+
+# Daten Kopieren
+cp -rP --preserve=links,timestamps $ROOT/* $ROOT_COMMON/* $ROOT_HD/* $MOUNT/
+
+# GRUB-Konfiguration kopieren
+mkdir -p $MOUNT/boot/grub
+cp build/config/grub_hd.cfg $MOUNT/boot/grub/menu.lst
+
+
+# Grub kopieren
+if [ $NEW -ne 0 ]; then
+    cp $LOST_GRUB_STAGESDIR/stage? $MOUNT/boot/grub/
+fi
+
+# Partition unmounten und loopback-Device freigeben
+$SUDO umount $MOUNT
+rmdir $MOUNT
+
+
+# Grub installieren
+if [ $NEW -ne 0 ]; then
+    $LOST_TOOLS_GRUB --no-floppy --batch > /dev/null <<EOF
+    device (hd0) $IMAGE_PATH
+    root (hd0,0)
+    setup (hd0)
+EOF
+fi
+
Index: trunk/build/scripts/updateroot
===================================================================
--- /dev/null
+++ trunk/build/scripts/updateroot
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# Copyright (c) 2006 The LOST Project. All rights reserved.
+#
+# This code is derived from software contributed to the LOST Project
+# by Kevin Wolf.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#     This product includes software developed by the LOST Project
+#     and its contributors.
+# 4. Neither the name of the LOST Project nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+ROOT=build/root
+OUTPUT=build/output
+
+# Verzeichnisstruktur anlegen
+mkdir -p $ROOT/boot/grub
+mkdir -p $ROOT/apps
+mkdir -p $ROOT/modules
+
+# Module Komprimieren und auf Image kopieren
+for f in $OUTPUT/modules/*; do
+    gzip -c $f > $ROOT/modules/`basename $f .mod`
+done
+
+# Anwendungen komprimieren und auf Image kopieren
+for f in $OUTPUT/apps/*; do
+    gzip -c $f > $ROOT/apps/`basename $f`
+done
+
+# Kernel komprimieren und auf Image kopieren
+for f in $OUTPUT/kernel/*; do
+    gzip -c $f > $ROOT/boot/`basename $f .krn`
+done
+
+