]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - make.sh
Zwischencommit fuer LFS. Bis Kernel.
[ipfire-2.x.git] / make.sh
diff --git a/make.sh b/make.sh
index 9dbea0d9d3cb98a960a5736b8c6178411b49b3b4..0a01c17ff2eeddd7b85b4eff48f5558d068d8a6b 100644 (file)
--- a/make.sh
+++ b/make.sh
@@ -1,5 +1,4 @@
 #!/bin/bash
-#
 ############################################################################
 #                                                                          #
 # This file is part of the IPFire Firewall.                                #
 # along with IPFire; if not, write to the Free Software                    #
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
 #                                                                          #
-# Copyright (C) 2006 IPFire-Team <entwickler@ipfire.org>.                  #
+# Copyright (C) 2006 IPFire-Team <info@ipfire.eu>.                         #
 #                                                                          #
 ############################################################################
 #
 
-  NAME="IPFire"                        # Software name
-  SNAME="ipfire"                       # Short name
-  VERSION="1.4"                        # Version number
-  SLOGAN="We secure your network"      # Software slogan
-  CONFIG_ROOT=/var/ipfire              # Configuration rootdir
-  NICE=10
-  MAX_RETRIES=3                        # prefetch/check loop
-  KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
-  MACHINE=`uname -m`
+NAME="IPFire"                          # Software name
+SNAME="ipfire"                 # Short name
+VERSION="2.0"                          # Version number
+SLOGAN="www.ipfire.eu"         # Software slogan
+CONFIG_ROOT=/var/ipfire                # Configuration rootdir
+NICE=10                                # Nice level
+MAX_RETRIES=1                          # prefetch/check loop
+KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
+MACHINE=`uname -m`
+SVN_REVISION=`svn info | grep Revision | cut -c 11-`
+
+# Setzen des IPFire Builds
+if [ -e ./.svn ]; then
+       FIREBUILD=`cat .svn/entries |sed -n 's/^[ \t]*revision=\"// p' | sed -n 's/\".*$// p'`
+fi
 
-  # Debian specific settings
-  if [ ! -e /etc/debian_version ]; then
+# Debian specific settings
+if [ ! -e /etc/debian_version ]; then
        FULLPATH=`which $0`
-  else
+else
        if [ -x /usr/bin/realpath ]; then
                FULLPATH=`/usr/bin/realpath $0`
        else
                echo "ERROR: Need to do apt-get install realpath"
                exit 1
        fi
-  fi
-
+fi
 
-  PWD=`pwd`
-  BASENAME=`basename $0`
-  BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
-  LOGFILE=$BASEDIR/log/_build.preparation.log
-  export BASEDIR LOGFILE
-  DIR_CHK=$BASEDIR/cache/check
-  mkdir $BASEDIR/log/ 2>/dev/null
+PWD=`pwd`
+BASENAME=`basename $0`
+BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
+LOGFILE=$BASEDIR/log/_build.preparation.log
+export BASEDIR LOGFILE
+DIR_CHK=$BASEDIR/cache/check
+mkdir $BASEDIR/log/ 2>/dev/null
 
-  if [ 'x86_64' = $MACHINE -o 'i686' = $MACHINE -o 'i586' = $MACHINE -o 'i486' = $MACHINE -o 'i386' = $MACHINE ]; then
-       echo "`date -u '+%b %e %T'`: Machine is ix86 (or equivalent)" | tee -a $LOGFILE
-       MACHINE=i386
-       BUILDTARGET=i386-pc-linux-gnu
-       CFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
-       CXXFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
-  elif [ 'alpha' = $MACHINE ]; then
-       echo "`date -u '+%b %e %T'`: Machine is Alpha AXP" | tee -a $LOGFILE
-       BUILDTARGET=alpha-unknown-linux-gnu
-       CFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
-       CXXFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
-  else
-       echo "`date -u '+%b %e %T'`: Can't determine your architecture - $MACHINE" | tee -a $LOGFILE
-       exit 1
-  fi
-
-# Define immediately
-stdumount() {
-       umount $BASEDIR/build/dev/pts           2>/dev/null;
-       umount $BASEDIR/build/proc                      2>/dev/null;
-       umount $BASEDIR/build/install/mnt               2>/dev/null;
-       umount $BASEDIR/build/usr/src/cache     2>/dev/null;
-       umount $BASEDIR/build/usr/src/ccache    2>/dev/null;
-       umount $BASEDIR/build/usr/src/config    2>/dev/null;
-       umount $BASEDIR/build/usr/src/doc               2>/dev/null;
-       umount $BASEDIR/build/usr/src/html              2>/dev/null;
-       umount $BASEDIR/build/usr/src/langs     2>/dev/null;
-       umount $BASEDIR/build/usr/src/lfs               2>/dev/null;
-       umount $BASEDIR/build/usr/src/log               2>/dev/null;
-       umount $BASEDIR/build/usr/src/src               2>/dev/null;
-}
+# Include funtions
+. tools/make-functions
 
-exiterror() {
-       stdumount
-       for i in `seq 0 7`; do
-           if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
-               losetup -d /dev/loop${i} 2>/dev/null
-           fi;
-       done
-       echo "ERROR: $*"
-       echo "       Check $LOGFILE for errors if applicable"
-       exit 1
-}
-
-entershell() {
-       if [ ! -e $BASEDIR/build/usr/src/lfs/ ]; then
-               exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/"
-       fi
-       echo "Entering to a shell inside LFS chroot, go out with exit"
-       chroot $LFS /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
-               PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
-               VERSION=$VERSION CONFIG_ROOT=$CONFIG_ROOT \
-               NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
-               CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
-               CCACHE_DIR=/usr/src/ccache \
-               CCACHE_HASHDIR=1 \
-               KVER=$KVER \
-               BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
-               KGCC="ccache /usr/bin/gcc" \
-               /tools/bin/bash
-       if [ $? -ne 0 ]; then
-                       exiterror "chroot error"
-       else
-               stdumount
-       fi
-}
+if [ -f .config ]; then
+       . .config
+else
+       make_config
+fi
 
 prepareenv() {
     ############################################################################
@@ -149,20 +95,27 @@ prepareenv() {
     # Resetting our nice level                                                 #
     #                                                                          #
     ############################################################################
-    echo "`date -u '+%b %e %T'`: Resetting our nice level to $NICE" | tee -a $LOGFILE
+    echo -ne "Resetting our nice level to $NICE" | tee -a $LOGFILE
     renice $NICE $$ > /dev/null
     if [ `nice` != "$NICE" ]; then
+       beautify message FAIL
        exiterror "Failed to set correct nice level"
+    else
+       beautify message DONE
     fi
 
+
     ############################################################################
     #                                                                          #
     # Checking if running as root user                                         #
     #                                                                          #
     ############################################################################
-    echo "`date -u '+%b %e %T'`: Checking if we're running as root user" | tee -a $LOGFILE
+    echo -ne "Checking if we're running as root user" | tee -a $LOGFILE
     if [ `id -u` != 0 ]; then
+       beautify message FAIL
        exiterror "Not building as root"
+    else
+       beautify message DONE
     fi
 
 
@@ -171,14 +124,17 @@ prepareenv() {
     # Checking for necessary temporary space                                   #
     #                                                                          #
     ############################################################################
-    echo "`date -u '+%b %e %T'`: Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
+    echo -ne "Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
     BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
     BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
     if (( 2202000 > $BASE_ASPACE )); then
        BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
        if (( 2202000 - $BASE_USPACE > $BASE_ASPACE )); then
+               beautify message FAIL
                exiterror "Not enough temporary space available, need at least 2.1GB on $BASE_DEV"
        fi
+    else
+       beautify message DONE
     fi
 
     ############################################################################
@@ -186,8 +142,6 @@ prepareenv() {
     # Building Linux From Scratch system                                       #
     #                                                                          #
     ############################################################################
-    echo "`date -u '+%b %e %T'`: Building Linux From Scratch system" | tee -a $LOGFILE
-
     # Set umask
     umask 022
 
@@ -208,17 +162,25 @@ prepareenv() {
     # Setup environment
     set +h
     LC_ALL=POSIX
-    export LFS LC_ALL CFLAGS CXXFLAGS
+    MAKETUNING="-j8"
+    export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
     unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
 
     # Make some extra directories
     mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
+    mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
     mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
-    mkdir -p $BASEDIR/build/dev/pts $BASEDIR/build/proc $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
+    mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
+
+    mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
+    mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
 
     # Make all sources and proc available under lfs build
+    mount --bind /dev            $BASEDIR/build/dev
     mount --bind /dev/pts        $BASEDIR/build/dev/pts
+    mount --bind /dev/shm        $BASEDIR/build/dev/shm
     mount --bind /proc           $BASEDIR/build/proc
+    mount --bind /sys            $BASEDIR/build/sys
     mount --bind $BASEDIR/cache  $BASEDIR/build/usr/src/cache
     mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
     mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
@@ -229,6 +191,9 @@ prepareenv() {
     mount --bind $BASEDIR/log    $BASEDIR/build/usr/src/log
     mount --bind $BASEDIR/src    $BASEDIR/build/usr/src/src
 
+    # This is a temporary hack!!!
+    cp -f /bin/hostname /tools/bin/hostname 2>/dev/null
+
     # Run LFS static binary creation scripts one by one
     export CCACHE_DIR=$BASEDIR/ccache
     export CCACHE_HASHDIR=1
@@ -237,515 +202,345 @@ prepareenv() {
     rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
 }
 
-
-############################################################################
-#                                                                          #
-# Necessary shell functions                                                #
-#                                                                          #
-############################################################################
-lfsmake1() {
-       if [ -f $BASEDIR/lfs/$1 ]; then
-               echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
-               cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "Download error in $1"
-               fi
-               cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "md5sum error in $1, check file in cache or signature"
-               fi
-               cd $BASEDIR/lfs && make -f $*   BUILDTARGET=$BUILDTARGET \
-                                               MACHINE=$MACHINE \
-                                               LFS_BASEDIR=$BASEDIR \
-                                               ROOT=$LFS \
-                                               KVER=$KVER \
-                                               install >> $LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "Building $*";
-               fi
-       else
-               exiterror "No such file or directory: $BASEDIR/$1"
-       fi
-       return 0
-}
-
-lfsmake2() {
-       if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
-               echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
-               cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "Download error in $1"
-               fi
-               cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "md5sum error in $1, check file in cache or signature"
-               fi
-               chroot $LFS /tools/bin/env -i   HOME=/root \
-                                               TERM=$TERM PS1='\u:\w\$ ' \
-                                               PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
-                                               VERSION=$VERSION \
-                                               CONFIG_ROOT=$CONFIG_ROOT \
-                                               NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
-                                               CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
-                                               CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
-                                               KVER=$KVER \
-                                               BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
-                   /tools/bin/bash -x -c "cd /usr/src/lfs && \
-                   make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "Building $*"
-               fi
-       else
-               exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
-       fi
-       return 0
-}
-
-ipcopmake() {
-       if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
-               echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
-               cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "Download error in $1"
-               fi
-               cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "md5sum error in $1, check file in cache or signature"
-               fi
-               chroot $LFS /tools/bin/env -i   HOME=/root \
-                                               TERM=$TERM PS1='\u:\w\$ ' \
-                                               PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
-                                               VERSION=$VERSION \
-                                               CONFIG_ROOT=$CONFIG_ROOT \
-                                               NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
-                                               CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
-                                               CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
-                                               KVER=$KVER \
-                                               BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
-                   /bin/bash -x -c "cd /usr/src/lfs && \
-                   make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "Building $*"
-               fi
-       else
-               exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
-       fi
-       return 0
-}
-
-ipfiredist() {
-       if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
-#         if [ ! `ls -w1 $BASEDIR/packages/*.tar.gz | grep $1` ]; then
-               echo "`date -u '+%b %e %T'`: Packaging $1" | tee -a $LOGFILE
-               chroot $LFS /tools/bin/env -i   HOME=/root \
-                                               TERM=$TERM PS1='\u:\w\$ ' \
-                                               PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
-                                               VERSION=$VERSION \
-                                               CONFIG_ROOT=$CONFIG_ROOT \
-                                               NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
-                                               CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
-                                               CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
-                                               KVER=$KVER \
-                                               BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
-                   /bin/bash -x -c "cd /usr/src/lfs && \
-                   make -f $1 LFS_BASEDIR=/usr/src dist" >>$LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "Packaging $1"
-               fi
-#         else
-#              echo "`date -u '+%b %e %T'`: Packaging: The package $1 already exists"
-#         fi
-       else
-               exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
-       fi
-       return 0
-}
-
-
-installmake() {
-       if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
-               echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
-               cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "Download error in $1"
-               fi
-               cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "md5sum error in $1, check file in cache or signature"
-               fi
-               chroot $LFS /tools/bin/env -i   HOME=/root \
-                                               TERM=$TERM PS1='\u:\w\$ ' \
-                                               PATH=/usr/local/bin:/opt/$MACHINE-uClibc/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin \
-                                               VERSION=$VERSION \
-                                               CONFIG_ROOT=$CONFIG_ROOT \
-                                               LFS_PASS="install" \
-                                               NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
-                                               CFLAGS="-Os" CXXFLAGS="-Os" \
-                                               CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
-                                               KVER=$KVER \
-                                               BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
-                   /bin/bash -x -c "cd /usr/src/lfs && \
-                   make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
-               if [ $? -ne 0 ]; then
-                       exiterror "Building $*"
-               fi
-       else
-               exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
-       fi
-       return 0
-}
-
 buildtoolchain() {
     LOGFILE="$BASEDIR/log/_build.toolchain.log"
     export LOGFILE
-    echo -ne "`date -u '+%b %e %T'`: Stage1 toolchain build \n" | tee -a $LOGFILE
-    # Build sed now, as we use some extensions
     ORG_PATH=$PATH
     NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
     export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
     lfsmake1 ccache
-    lfsmake1 sed       LFS_PASS=1
-    lfsmake1 m4                LFS_PASS=1
-    lfsmake1 bison     LFS_PASS=1
-    lfsmake1 flex      LFS_PASS=1
-    lfsmake1 binutils   LFS_PASS=1
-    lfsmake1 gcc        LFS_PASS=1
+    lfsmake1 binutils  PASS=1
+    lfsmake1 gcc               PASS=1
     export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
-    
-    lfsmake1 linux
+    lfsmake1 linux-libc-header
+    lfsmake1 glibc
+    lfsmake1 cleanup-toolchain PASS=1
     lfsmake1 tcl
     lfsmake1 expect
-    lfsmake1 glibc
     lfsmake1 dejagnu
-    lfsmake1 gcc        LFS_PASS=2
-    lfsmake1 binutils   LFS_PASS=2
-    lfsmake1 gawk
-    lfsmake1 coreutils
+    lfsmake1 gcc               PASS=2
+    lfsmake1 binutils  PASS=2
+    lfsmake1 ncurses
+    lfsmake1 bash
     lfsmake1 bzip2
-    lfsmake1 gzip
+    lfsmake1 coreutils
     lfsmake1 diffutils
     lfsmake1 findutils
-    lfsmake1 make
-    lfsmake1 grep
-    lfsmake1 sed       LFS_PASS=2
-    lfsmake1 m4                LFS_PASS=2
-    lfsmake1 bison     LFS_PASS=2
-    lfsmake1 flex      LFS_PASS=2
+    lfsmake1 gawk
     lfsmake1 gettext
-    lfsmake1 ncurses
+    lfsmake1 grep
+    lfsmake1 gzip
+    lfsmake1 m4
+    lfsmake1 make
     lfsmake1 patch
+    lfsmake1 perl
+    lfsmake1 sed
     lfsmake1 tar
     lfsmake1 texinfo
-    lfsmake1 bash
     lfsmake1 util-linux
-    lfsmake1 perl
+    lfsmake1 cleanup-toolchain PASS=2
     export PATH=$ORG_PATH
 }
 
 buildbase() {
     LOGFILE="$BASEDIR/log/_build.base.log"
     export LOGFILE
-    echo -ne "`date -u '+%b %e %T'`: Stage2 linux base build \n" | tee -a $LOGFILE
-    # Run LFS dynamic binary creation scripts one by one
     lfsmake2 stage2
-    lfsmake2 makedev
-    lfsmake2 linux
+#    lfsmake2 makedev
+    lfsmake2 linux-libc-header
     lfsmake2 man-pages
     lfsmake2 glibc
+    lfsmake2 cleanup-toolchain PASS=3
     lfsmake2 binutils
     lfsmake2 gcc
+    lfsmake2 berkeley
     lfsmake2 coreutils
-    lfsmake2 zlib
-    lfsmake2 mktemp
     lfsmake2 iana-etc
-    lfsmake2 findutils
-    lfsmake2 gawk
-    lfsmake2 ncurses
-    lfsmake2 vim
     lfsmake2 m4
     lfsmake2 bison
-    lfsmake2 less
-    lfsmake2 groff
+    lfsmake2 ncurses
+    lfsmake2 procps
     lfsmake2 sed
-    lfsmake2 flex
-    lfsmake2 gettext
-    lfsmake2 net-tools
-    lfsmake2 inetutils
+    lfsmake2 libtool
     lfsmake2 perl
-    lfsmake2 texinfo
+    lfsmake2 readline
+    lfsmake2 zlib
     lfsmake2 autoconf
     lfsmake2 automake
     lfsmake2 bash
-    lfsmake2 file
-    lfsmake2 libtool
     lfsmake2 bzip2
     lfsmake2 diffutils
-    lfsmake2 ed
-    lfsmake2 kbd
     lfsmake2 e2fsprogs
+    lfsmake2 file
+    lfsmake2 findutils
+    lfsmake2 flex
+    lfsmake2 grub
+    lfsmake2 gawk
+    lfsmake2 gettext
     lfsmake2 grep
-    if [ 'i386' = $MACHINE ]; then 
-       lfsmake2 grub
-    elif [ 'alpha' = $MACHINE ]; then 
-       lfsmake2 aboot
-    fi
+    lfsmake2 groff
     lfsmake2 gzip
-    lfsmake2 man
+    lfsmake2 inetutils
+    lfsmake2 iproute2
+    lfsmake2 kbd
+    lfsmake2 less
     lfsmake2 make
+    lfsmake2 man
+    lfsmake2 mktemp
     lfsmake2 modutils
     lfsmake2 patch
-    lfsmake2 procinfo
-    lfsmake2 procps
     lfsmake2 psmisc
     lfsmake2 shadow
     lfsmake2 sysklogd
     lfsmake2 sysvinit
     lfsmake2 tar
+    lfsmake2 texinfo
+    lfsmake2 udev
     lfsmake2 util-linux
+    lfsmake2 vim
+####
+#    lfsmake2 net-tools
+#    lfsmake2 inetutils
+#    lfsmake2 ed
+#    lfsmake2 procinfo
 }
 
-buildipcop() {
-  # Run IPFire make scripts one by one
+buildipfire() {
   LOGFILE="$BASEDIR/log/_build.ipfire.log"
   export LOGFILE
-  echo -ne "`date -u '+%b %e %T'`: Stage3 $NAME build \n" | tee -a $LOGFILE
-
-  # Build these first as some of the kernel packages below rely on 
-  # these for some of their client program functionality 
-  ipcopmake configroot
-  ipcopmake dhcp
-  ipcopmake dhcpcd
-  ipcopmake libusb
-  ipcopmake libpcap
-  ipcopmake linux-atm
-  ipcopmake ppp
-  ipcopmake rp-pppoe
-  ipcopmake unzip
-  # Do SMP now
-  if [ 'i386' = $MACHINE ]; then 
-       # abuse the SMP flag, and make an minimal installer kernel first
-       # so that the boot floppy always works.....
-       ipcopmake linux         LFS_PASS=ipfire SMP=installer
-       ipcopmake linux         LFS_PASS=ipfire SMP=1
-       ipcopmake 3cp4218       SMP=1
-       ipcopmake amedyn        SMP=1
-       ipcopmake cxacru        SMP=1
-       ipcopmake eagle         SMP=1
-
-       # These are here because they have i386 only binary libraries
-       # included in the package.
-       ipcopmake cnx_pci       SMP=1
-       ipcopmake fcdsl         SMP=1
-       ipcopmake fcdsl2        SMP=1
-       ipcopmake fcdslsl       SMP=1
-       ipcopmake fcdslusb      SMP=1
-       ipcopmake fcdslslusb    SMP=1
-       ipcopmake fcpci SMP=1
-       ipcopmake fcclassic     SMP=1
-       ipcopmake pulsar        SMP=1
-       ipcopmake unicorn       SMP=1
-  fi
-
-  ipcopmake linux      LFS_PASS=ipfire
-  ipcopmake 3cp4218    
-  ipcopmake amedyn     
-  ipcopmake cxacru     
-  ipcopmake eciadsl    
-  ipcopmake eagle      
-  ipcopmake speedtouch         
-  if [ 'i386' = $MACHINE ]; then 
-       # These are here because they have i386 only binary libraries
-       # included in the package.
-       ipcopmake cnx_pci       
-       ipcopmake fcdsl         
-       ipcopmake fcdsl2        
-       ipcopmake fcdslsl       
-       ipcopmake fcdslusb      
-       ipcopmake fcdslslusb 
-       ipcopmake fcpci
-       ipcopmake fcclassic
-       ipcopmake pulsar        
-       ipcopmake unicorn       
-  fi
-
-  ipcopmake pcmcia-cs
-  ipcopmake expat
-  ipcopmake gdbm
-  ipcopmake gmp
-  ipcopmake openssl
-  ipcopmake python
-  ipcopmake libnet
-  ipcopmake libpng
-  ipcopmake gd
-  ipcopmake popt
-  ipcopmake slang
-  ipcopmake newt
-  ipcopmake libcap
-  ipcopmake pciutils
-  ipcopmake pcre
-  ipcopmake apache
-  ipcopmake arping
-  ipcopmake beep
-  ipcopmake bind
-  ipcopmake capi4k-utils
-  ipcopmake cdrtools
-  ipcopmake dnsmasq
-  ipcopmake dosfstools
-  ipcopmake ethtool
-  ipcopmake ez-ipupdate
-  ipcopmake fcron
-  ipcopmake perl-GD
-  ipcopmake gnupg
-  ipcopmake hdparm
-  ipcopmake ibod
-  ipcopmake initscripts
-  ipcopmake iptables
-  ipcopmake ipac-ng
-  ipcopmake ipaddr
-  ipcopmake iproute2
-  ipcopmake iptstate
-  ipcopmake iputils
-  ipcopmake l7-protocols
-  ipcopmake isapnptools
-  ipcopmake isdn4k-utils
-  ipcopmake kudzu
-  ipcopmake logrotate
-  ipcopmake logwatch
-  ipcopmake mingetty
-  ipcopmake misc-progs
-  ipcopmake mtools
-  ipcopmake nano
-  ipcopmake nash
-  ipcopmake nasm
-  ipcopmake URI
-  ipcopmake HTML-Tagset
-  ipcopmake HTML-Parser
-  ipcopmake Compress-Zlib
-  ipcopmake Digest
-  ipcopmake Digest-SHA1
-  ipcopmake Digest-HMAC
-  ipcopmake libwww-perl
-  ipcopmake Net-DNS
-  ipcopmake Net-IPv4Addr
-  ipcopmake Net_SSLeay
-  ipcopmake IO-Stringy
-  ipcopmake Unix-Syslog
-  ipcopmake Mail-Tools
-  ipcopmake MIME-Tools
-  ipcopmake Net-Server
-  ipcopmake Convert-TNEF
-  ipcopmake Convert-UUlib
-  ipcopmake Archive-Tar
-  ipcopmake Archive-Zip
-  ipcopmake Text-Tabs+Wrap
-  ipcopmake Locale-Country
-  ipcopmake GeoIP
-  ipcopmake fwhits
-  ipcopmake berkeley
-  ipcopmake BerkeleyDB ## The Perl module
-  ipcopmake noip_updater
-  ipcopmake ntp
-  ipcopmake oinkmaster
-  ipcopmake openssh
-  ipcopmake openswan
-  ipcopmake pptpclient
-  ipcopmake rrdtool
-  ipcopmake setserial
-  ipcopmake setup
-  ipcopmake snort
-  #ipcopmake speedycgi
-  ipcopmake saslauthd PASS=1
-  ipcopmake openldap
-  ipcopmake squid
-  ipcopmake squid-graph
-  ipcopmake squidguard
-  ipcopmake tcpdump
-  ipcopmake traceroute
-  ipcopmake vlan
-  #ipcopmake wireless
-  ipcopmake libsafe
-  ipcopmake 3c5x9setup
-#  echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
-  ipcopmake pakfire
-  ipcopmake startscripts
-## Zuerst die Libs und dann die Programme. Ordnung muss sein!
-  ipcopmake java
-  ipcopmake libtiff
-  ipcopmake libjpeg
-  ipcopmake libxml2
-  ipcopmake spandsp
-  ipcopmake lzo
-  ipcopmake openvpn
-  ipcopmake pkg-config
-  ipcopmake glib
-  ipcopmake xampp
-  ipcopmake pam
-  ipcopmake pammysql
-  ipcopmake saslauthd PASS=2
-  ipcopmake xinetd
-  ipcopmake ghostscript
-  ipcopmake cups
-#  ipcopmake lpd ## Im Moment aus, da CUPS vorhanden ist.
-  ipcopmake samba
-  ipcopmake sudo
-  ipcopmake mc
-  ipcopmake pwlib
-  ipcopmake openh323
-  ipcopmake wget
-  ipcopmake wput
-  ipcopmake bridge-utils
-  ipcopmake screen
-  ipcopmake hddtemp
-  ipcopmake htop
-  ipcopmake lynx
-  echo -ne "`date -u '+%b %e %T'`: Building ### Mailserver ### \n" | tee -a $LOGFILE
-  ipcopmake postfix
-  ipcopmake procmail
-  ipcopmake fetchmail
-  ipcopmake cyrusimap
-  ipcopmake web-cyradm
-  ipcopmake mailx
-  ipcopmake clamav
-  ipcopmake razor
-  ipcopmake spamassassin
-#  ipcopmake amavisd
-  echo -ne "`date -u '+%b %e %T'`: Building ### VoIP-Server ### \n" | tee -a $LOGFILE
-  ipcopmake stund
-  ipcopmake asterisk
-  ipcopmake mpg123
-  echo -ne "`date -u '+%b %e %T'`: Building ### MP3-Server ### \n" | tee -a $LOGFILE
-  ipcopmake lame
-  ipcopmake gnump3d
-  echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE
-  ipcopmake applejuice
-  ipcopmake edonkeyclc
-#  ipcopmake sane
-  echo -ne "`date -u '+%b %e %T'`: Building ### Net-Tools ### \n" | tee -a $LOGFILE
-  ipcopmake ntop
-#  ipcopmake rsync
-  ipcopmake tcpwrapper
-  ipcopmake portmap
-  ipcopmake nfs
-  ipcopmake nmap
-  ipcopmake iftop
-  ipcopmake ncftp
-  ipcopmake cftp
-  ipcopmake etherwake
-  ipcopmake ethereal
-#  ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
+  ipfiremake configroot
+  ipfiremake dhcp
+  ipfiremake dhcpcd
+  ipfiremake libusb
+  ipfiremake libpcap
+# Temporary disabled.
+#  ipfiremake linux-atm
+  ipfiremake ppp
+  ipfiremake rp-pppoe
+  ipfiremake unzip
+  ipfiremake linux                     PASS=ipfire SMP=installer
+  ipfiremake linux                     PASS=ipfire SMP=1
+#  ipfiremake 3cp4218                  SMP=1
+#  ipfiremake amedyn                   SMP=1
+#  ipfiremake cxacru                   SMP=1
+#  ipfiremake eagle                    SMP=1
+#  ipfiremake cnx_pci                  SMP=1
+#  ipfiremake fcdsl                    SMP=1
+#  ipfiremake fcdsl2                   SMP=1
+#  ipfiremake fcdslsl                  SMP=1
+#  ipfiremake fcdslusb         SMP=1
+#  ipfiremake fcdslslusb               SMP=1
+#  ipfiremake fcpci                    SMP=1
+#  ipfiremake fcclassic                SMP=1
+#  ipfiremake pulsar                   SMP=1
+#  ipfiremake unicorn                  SMP=1
+#  ipfiremake promise-sata-300-tx      SMP=1
+  ipfiremake linux                     PASS=ipfire
+#  ipfiremake 3cp4218  
+#  ipfiremake amedyn   
+#  ipfiremake cxacru   
+#  ipfiremake eciadsl  
+#  ipfiremake eagle    
+#  ipfiremake speedtouch       
+#  ipfiremake cnx_pci  
+#  ipfiremake fcdsl    
+#  ipfiremake fcdsl2   
+#  ipfiremake fcdslsl  
+#  ipfiremake fcdslusb         
+#  ipfiremake fcdslslusb 
+#  ipfiremake fcpci
+#  ipfiremake fcclassic
+#  ipfiremake pulsar   
+#  ipfiremake unicorn
+#  ipfiremake promise-sata-300-tx
+  ipfiremake pcmcia-cs
+  ipfiremake expat
+  ipfiremake gdbm
+  ipfiremake gmp
+  ipfiremake openssl
+  ipfiremake python
+  ipfiremake libnet
+  ipfiremake libpng
+  ipfiremake libtiff
+  ipfiremake libjpeg
+  ipfiremake lcms
+  ipfiremake libmng
+  ipfiremake freetype
+  ipfiremake gd
+  ipfiremake popt
+  ipfiremake slang
+  ipfiremake newt
+  ipfiremake libcap
+  ipfiremake pciutils
+  ipfiremake pcre
+  ipfiremake readline
+  ipfiremake libxml2
+  ipfiremake berkeley
+  ipfiremake BerkeleyDB ## The Perl module
+  ipfiremake mysql
+  ipfiremake saslauthd PASS=1
+  ipfiremake openldap
+  ipfiremake apache2
+  ipfiremake php
+  ipfiremake subversion
+  ipfiremake apache2 PASS=CONFIG
+  ipfiremake arping
+  ipfiremake beep
+  ipfiremake bind
+  ipfiremake capi4k-utils
+  ipfiremake cdrtools
+  ipfiremake dnsmasq
+  ipfiremake dosfstools
+  ipfiremake ethtool
+  ipfiremake ez-ipupdate
+  ipfiremake fcron
+  ipfiremake perl-GD
+  ipfiremake gnupg
+  ipfiremake hdparm
+  ipfiremake ibod
+  ipfiremake initscripts
+  ipfiremake iptables
+  ipfiremake ipac-ng
+  ipfiremake ipaddr
+  ipfiremake iproute2
+  ipfiremake iptstate
+  ipfiremake iputils
+  ipfiremake l7-protocols
+  ipfiremake isapnptools
+  ipfiremake isdn4k-utils
+  ipfiremake kudzu
+  ipfiremake logrotate
+  ipfiremake logwatch
+  ipfiremake mingetty
+  ipfiremake misc-progs
+  ipfiremake mtools
+  ipfiremake nano
+  ipfiremake nash
+  ipfiremake nasm
+  ipfiremake URI
+  ipfiremake HTML-Tagset
+  ipfiremake HTML-Parser
+  ipfiremake Compress-Zlib
+  ipfiremake Digest
+  ipfiremake Digest-SHA1
+  ipfiremake Digest-HMAC
+  ipfiremake libwww-perl
+  ipfiremake Net-DNS
+  ipfiremake Net-IPv4Addr
+  ipfiremake Net_SSLeay
+  ipfiremake IO-Stringy
+  ipfiremake Unix-Syslog
+  ipfiremake Mail-Tools
+  ipfiremake MIME-Tools
+  ipfiremake Net-Server
+  ipfiremake Convert-TNEF
+  ipfiremake Convert-UUlib
+  ipfiremake Archive-Tar
+  ipfiremake Archive-Zip
+  ipfiremake Text-Tabs+Wrap
+  ipfiremake Locale-Country
+  ipfiremake GeoIP
+  ipfiremake fwhits
+  ipfiremake noip_updater
+  ipfiremake ntp
+  ipfiremake oinkmaster
+  ipfiremake openssh
+  ipfiremake openswan
+  ipfiremake pptpclient
+  ipfiremake rrdtool
+  ipfiremake setserial
+  ipfiremake setup
+  ipfiremake snort
+  ipfiremake squid
+  ipfiremake squid-graph
+  ipfiremake squidguard
+  ipfiremake tcpdump
+  ipfiremake traceroute
+  ipfiremake vlan
+  ipfiremake wireless
+  ipfiremake libsafe
+  ipfiremake 3c5x9setup
+  ipfiremake pakfire
+  ipfiremake startscripts
+  ipfiremake java
+  ipfiremake bootsplash
+  ipfiremake spandsp
+  ipfiremake lzo
+  ipfiremake openvpn
+  ipfiremake pkg-config
+  ipfiremake glib
+  ipfiremake pam
+  ipfiremake pammysql
+  ipfiremake saslauthd PASS=2
+  ipfiremake xinetd
+  ipfiremake ghostscript
+  ipfiremake cups
+  ipfiremake samba
+  ipfiremake sudo
+  ipfiremake mc
+  ipfiremake wget
+  ipfiremake wput
+  ipfiremake bridge-utils
+  ipfiremake screen
+  ipfiremake hddtemp
+  ipfiremake smartmontools
+  ipfiremake htop
+  ipfiremake lynx
+  ipfiremake postfix
+  ipfiremake procmail
+  ipfiremake fetchmail
+  ipfiremake cyrusimap
+  ipfiremake webcyradm
+  ipfiremake mailx
+  ipfiremake clamav
+  ipfiremake razor
+  ipfiremake spamassassin
+#  ipfiremake amavisd
+  ipfiremake stund
+  ipfiremake zaptel
+  ipfiremake libpri
+  ipfiremake bristuff
+  ipfiremake asterisk
+  ipfiremake mpg123
+  ipfiremake libmad
+  ipfiremake libogg
+  ipfiremake libvorbis
+  ipfiremake lame
+  ipfiremake xvid
+  ipfiremake mpeg2dec
+  ipfiremake ffmpeg
+  ipfiremake sox
+  ipfiremake gnump3d
+  ipfiremake videolan
+  ipfiremake applejuice
+  ipfiremake ocaml
+  ipfiremake mldonkey
+  ipfiremake ntop
+  ipfiremake rsync
+  ipfiremake tcpwrapper
+  ipfiremake portmap
+  ipfiremake nfs
+  ipfiremake nmap
+  ipfiremake mbmon
+  ipfiremake iftop
+  ipfiremake ncftp
+  ipfiremake cftp
+  ipfiremake etherwake
+  ipfiremake ethereal
+  ipfiremake tftp-hpa
+  ipfiremake iptraf
+  ipfiremake nagios
+  ipfiremake yasuc
 }
 
 buildinstaller() {
   # Run installer scripts one by one
   LOGFILE="$BASEDIR/log/_build.installer.log"
   export LOGFILE
-  echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
-  if [ 'i386' = $MACHINE ]; then 
-       ipcopmake syslinux
-       ipcopmake as86
-       ipcopmake mbr
-       ipcopmake uClibc
-  fi
+  ipfiremake syslinux
+  ipfiremake as86
+  ipfiremake mbr
+  ipfiremake uClibc
   installmake busybox
   installmake sysvinit
   installmake e2fsprogs
@@ -801,17 +596,17 @@ buildpackages() {
   rm -f $BASEDIR/doc/packages-list
   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
        if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
-               echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
+               echo "* `basename $i`" >>$BASEDIR/doc/packages-list
        fi
   done
-  echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
-  grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
+  echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
+  grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipfire$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$' \
        $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
   rm -f $BASEDIR/doc/packages-list
   # packages-list.txt is ready to be displayed for wiki page
 
-  # Create ISO for CDRom and USB-superfloppy
-  ipcopmake cdrom
+  # Create ISO for CDROM
+  ipfiremake cdrom
   rm -f $LFS/install/images/*usb*
   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
 
@@ -832,57 +627,73 @@ buildpackages() {
                cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
        fi
   done
+  cd $BASEDIR/packages; ls -w1 *.ipfire | awk -F ".ipfire" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
+  echo -n "###EOF###" >> $BASEDIR/packages/packages_list.txt
 
   cd $PWD
 
 }
 
 ipfirepackages() {
-  for i in `ls $BASEDIR/packages`; do
-       touch $BASEDIR/build/install/packages/$i.empty
-  done
-  ipfiredist amavisd
+  if [ -d "$BASEDIR/packages" ]; then
+         for i in `ls $BASEDIR/packages`; do
+               touch $BASEDIR/build/install/packages/$i.empty
+         done
+  fi
+#  ipfiredist amavisd
   ipfiredist applejuice
   ipfiredist asterisk
   ipfiredist clamav
   ipfiredist cups
   ipfiredist cyrusimap
   ipfiredist fetchmail
+  ipfiredist ffmpeg
   ipfiredist gnump3d
+  ipfiredist iptraf
   ipfiredist java
   ipfiredist lame
+  ipfiredist libmad
+  ipfiredist libogg
   ipfiredist libtiff
-  ipfiredist libxml2
+  ipfiredist libvorbis
   ipfiredist mailx
+  ipfiredist mldonkey
+  ipfiredist mpeg2dec
+  ipfiredist nagios
   ipfiredist nfs
   ipfiredist nmap
   ipfiredist ntop
+  ipfiredist portmap
   ipfiredist postfix
   ipfiredist procmail
   ipfiredist samba
+  ipfiredist sox
   ipfiredist spamassassin
-  ipfiredist web-cyradm
-  ipfiredist xampp
-  ipfiredist xinetd
+  ipfiredist subversion
+  ipfiredist videolan
+  ipfiredist webcyradm
+  ipfiredist xvid
+  ipfiredist yasuc
   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
-  mv -f $LFS/install/packages/*.{tar.gz,md5} $BASEDIR/packages >> $LOGFILE 2>&1
+  mv -f $LFS/install/packages/*.{ipfire,md5} $BASEDIR/packages >> $LOGFILE 2>&1
   rm -rf  $BASEDIR/build/install/packages/*
 }
 
 # See what we're supposed to do
 case "$1" in 
 build)
+       clear
        BUILDMACHINE=`uname -m`
-       PACKAGE=`ls -v -r $BASEDIR/cache/$SNAME-1.4-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
+       PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
        #only restore on a clean disk
-       if [ ! -f log/perl-*-tools ]; then
+       if [ ! -f log/cleanup-toolchain-2-tools ]; then
                if [ ! -n "$PACKAGE" ]; then
-                       echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
+                       beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
                        prepareenv
                        buildtoolchain
                else
                        PACKAGENAME=${PACKAGE%.tar.gz}
-                       echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
+                       beautify build_stage "Packaged toolchain compilation"
                        if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
                                tar zxf $PACKAGE
                                prepareenv
@@ -891,12 +702,28 @@ build)
                        fi
                fi
        else
-               echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
+               echo -n "Using installed toolchain" | tee -a $LOGFILE
+               beautify message SKIP
                prepareenv
        fi
+
+       beautify build_stage "Building base"
        buildbase
-       buildipcop
+
+       beautify build_stage "Building IPFire"
+       buildipfire
+
+       # Setzen des IPFire Builds
+       if [ "$FIREBUILD" ]; then
+               echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
+       else
+               echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
+       fi
+
+       beautify build_stage "Building installer"
        buildinstaller
+
+       beautify build_stage "Building packages"
        buildpackages
        ;;
 shell)
@@ -910,36 +737,6 @@ changelog)
        svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
        echo "Finished!"
        ;;
-check)
-       echo "Checking sources files availability on the web"
-       if [ ! -d $DIR_CHK ]; then
-               mkdir -p $DIR_CHK
-       fi
-       FINISHED=0
-       cd $BASEDIR/lfs
-       for c in `seq $MAX_RETRIES`; do
-               if (( FINISHED==1 )); then
-                       break
-               fi
-               FINISHED=1
-               cd $BASEDIR/lfs
-               for i in *; do
-                       if [ -f "$i" -a "$i" != "Config" ]; then
-                               make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
-                                       MESSAGE="$i\t ($c/$MAX_RETRIES)" check
-                               if [ $? -ne 0 ]; then
-                                       echo "Check : wget error in lfs/$i"
-                                       FINISHED=0
-                               fi
-                       fi
-               done
-       done
-       cd -
-       ;;
-checkclean)
-       echo "Erasing sources files availability tags"
-       rm -rf $DIR_CHK/*
-       ;;
 clean)
        for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
                $LOSETUP -d $i 2>/dev/null
@@ -962,14 +759,6 @@ clean)
                rm -f /tools
        fi
        ;;
-dist)
-       echo -ne "Updating & building source package from SVN: "
-       svn up > /dev/null
-       svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
-       tar cfz ipfire-source-`date +'%Y-%m-%d'`-r`svn info | grep Revision | cut -c 11-`.tar.gz ipfire-source
-       rm ipfire-source/ -r
-       echo "Finished!"
-       ;;
 newpak)
        # create structure for a new package
        echo -e "Name of the new package: $2"
@@ -1026,7 +815,7 @@ prefetch)
                mkdir $BASEDIR/cache
        fi
        mkdir -p $BASEDIR/log
-       echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
+       echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
        FINISHED=0
        cd $BASEDIR/lfs
        for c in `seq $MAX_RETRIES`; do
@@ -1037,161 +826,316 @@ prefetch)
                cd $BASEDIR/lfs
                for i in *; do
                        if [ -f "$i" -a "$i" != "Config" ]; then
+                               echo -ne "Loading $i"
                                make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
                                if [ $? -ne 0 ]; then
-                                       echo "Prefetch : wget error in lfs/$i"
+                                       beautify message FAIL
                                        FINISHED=0
                                else
                                        if [ $c -eq 1 ]; then
-                                               echo "Prefetch : lfs/$i files loaded"
+                                       beautify message DONE
                                        fi
                                fi
                        fi
                done
        done
-       echo "Prefetch : verifying md5sum"
+       echo -e "${BOLD}***Verifying md5sums${NORMAL}"
        ERROR=0
        for i in *; do
                if [ -f "$i" -a "$i" != "Config" ]; then
                        make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
                        if [ $? -ne 0 ]; then
-                               echo "md5 difference in lfs/$i"
+                               echo -ne "MD5 difference in lfs/$i"
+                               beautify message FAIL
                                ERROR=1
                        fi
                fi
        done
        if [ $ERROR -eq 0 ]; then
-               echo "Prefetch : all files md5sum match"
+               echo -ne "${BOLD}all files md5sum match${NORMAL}"
+               beautify message DONE
+       else
+               echo -ne "${BOLD}not all files were correctly download${NORMAL}"
+               beautify message FAIL
        fi
-       cd -
+       cd - >/dev/null 2>&1
        ;;
 toolchain)
+       clear
        prepareenv
+       beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
        buildtoolchain
        BUILDMACHINE=`uname -m`
        echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
-       cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
+       test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
+       cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
                build/{bin,etc,usr/bin,usr/local} \
                build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
                log >> $LOGFILE
-       md5sum cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
-               > cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
+       md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
+               > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
        stdumount
        ;;
 gettoolchain)
        BUILDMACHINE=`uname -m`
        # arbitrary name to be updated in case of new toolchain package upload
-       PACKAGE=$SNAME-1.4-toolchain-$BUILDMACHINE
-       URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
-       echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
-       cd $BASEDIR/cache
-       wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
-       if [ $? -ne 0 ]; then
-               echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
-#      else
-#              if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
-#                      echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
-#                      echo "`date -u '+%b %e %T'`: Uncompressing toolchain" | tee -a $LOGFILE
-#                      cd $BASEDIR && tar xfz cache/$PACKAGE.tar.gz -C .
-#                      rm -f $BASEDIR/cache/$PACKAGE.{tar.gz,md5}
-#              else
-#                      exiterror "$PACKAGE.md5 did not match, check downloaded package"
-#              fi
+       PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
+       if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
+               URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
+               test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
+               echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
+               cd $BASEDIR/cache/toolchains
+               wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
+               if [ $? -ne 0 ]; then
+                       echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
+               else
+                       if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
+                               echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
+                       else
+                               exiterror "$PACKAGE.md5 did not match, check downloaded package"
+                       fi
+               fi
+       else
+               echo "Toolchain is already downloaded. Exiting..."
        fi
        ;;
-paks)
+othersrc)
        prepareenv
-       # buildpackages
-       ipfirepackages
-       ;;
-update)
-       echo "Load the latest source-files:"
-       svn update
-       ;;
-commit)
-       echo "Upload the changed files:"
-       svn commit
-       ./make.sh sync
-       svn up > /dev/null
-       ;;
-make)
-       echo "Do a complete compile:"   
-       ./make.sh prefetch && ./make.sh gettoolchain && ./make.sh build
-       ;;
-diff)
-       echo -ne "Make a local diff to last SVN revision: "
-       svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
-       echo "Finished!"
-       echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
-       ;;
-sync)
-       echo -e "Syncing Cache to FTP:"
-       if [ -f .pass ]; then
-               PASS="`cat .pass`"
+       echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
+       chroot $LFS /tools/bin/env -i   HOME=/root \
+       TERM=$TERM PS1='\u:\w\$ ' \
+       PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
+       VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
+       /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
+       mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
+       if [ $? -eq "0" ]; then
+               beautify message DONE
        else
-               echo -ne "Password for mirror.ipfire.org: "; read PASS
+               beautify message FAIL
        fi
-       rm -f doc/packages-to-remove-from-ftp
-       ncftpls -u web3 -p $PASS ftp://mirror.ipfire.org/html/source-packages/source/ > ftplist
-       for i in `ls -w1 cache/`; do
-               grep $i ftplist
+       stdumount
+       ;;
+svn)
+       case "$2" in
+         update|up)
+               # clear
+               echo -ne "Loading the latest source files...\n"
+               if [ $3 ]; then
+                       svn update -r $3 | tee -a $PWD/log/_build.svn.update.log
+               else
+                       svn update | tee -a $PWD/log/_build.svn.update.log
+               fi
+               if [ $? -eq "0" ]; then
+                       beautify message DONE
+               else
+                       beautify message FAIL
+                       exit 1
+               fi
+               echo -ne "Writing the svn-info to a file"
+               svn info > $PWD/svn_status
+               if [ $? -eq "0" ]; then
+                       beautify message DONE
+               else
+                       beautify message FAIL
+                       exit 1
+               fi
+               chmod 755 $0
+               exit 0
+         ;;
+         commit|ci)
+               clear
+               if [ -e /sbin/yast ]; then
+                       if [ "`echo $SVN_REVISION | cut -c 3`" -eq "0" ]; then
+                               $0 changelog
+                       fi
+               fi
+               echo "Upload the changed files..."
+               sleep 1
+               svn commit
+               $0 svn up
+         ;;
+         dist)
+               if [ $3 ]; then
+                       SVN_REVISION=$3
+               fi
+               if [ -f ipfire-source-r$SVN_REVISION.tar.gz ]; then
+                       echo -ne "REV $SVN_REVISION: SKIPPED!\n"
+                       exit 0
+               fi
+               echo -en "REV $SVN_REVISION: Downloading..."
+               svn export http://svn.ipfire.eu/svn/ipfire/trunk ipfire-source/ --force > /dev/null
+               svn log http://svn.ipfire.eu/svn/ipfire/trunk -r 1:$SVN_REVISION > ipfire-source/Changelog
+               #svn info http://svn.ipfire.eu/svn/ipfire/trunk -r $SVN_REVISION > ipfire-source/svn_status
+               evaluate 1
+
+               echo -en "REV $SVN_REVISION: Compressing files..."
+               if [ -e ipfire-source/trunk/make.sh ]; then
+                       chmod 755 ipfire-source/trunk/make.sh
+               fi
+               tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
+               evaluate 1
+               echo -en "REV $SVN_REVISION: Cleaning up..."
+               rm ipfire-source/ -r
+               evaluate 1
+         ;;
+         diff|di)
+               echo -ne "Make a local diff to last svn revision"
+               svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
+               evaluate 1
+               echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
+         ;;
+       esac
+       ;;
+uploadsrc)
+       PWD=`pwd`
+       cd $BASEDIR/cache/
+       echo -e "Uploading cache to ftp server:"
+       ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > /var/tmp/ftplist
+       for i in *; do
+               if [ "$i" == "toolchains" ]; then continue; fi
+               grep -q $i /var/tmp/ftplist
                if [ "$?" -ne "0" ]; then
-                       ncftpput -u web3 -p $PASS mirror.ipfire.org /html/source-packages/source cache/$i
+                       echo -ne "$i"
+                       ncftpput -bb -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ $i > /dev/null 2>&1
                        if [ "$?" -eq "0" ]; then
-                               echo -e "$i was successfully uploaded to the ftp server."
+                               beautify message DONE
                        else
-                               echo -e "There was an error while uploading $i to the ftp server."
+                               beautify message FAIL
                        fi
                fi
        done
-       for i in `cat ftplist`; do
-               ls -w1 cache/ | grep $i
-               if [ "$?" -eq "1" ]; then
-                       echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
-               fi
+       rm -f /var/tmp/ftplist
+       UL_TIME_START=`date +'%s'`
+       ncftpbatch -d > /dev/null 2>&1
+       while ps acx | grep -q ncftpbatch
+       do
+               UL_TIME=$(expr `date +'%s'` - $UL_TIME_START)
+               echo -ne "\r ${UL_TIME}s : Upload is running..."
+               sleep 1
        done
-       rm -f ftplist
+       beautify message DONE
+       cd $PWD
+       exit 0
        ;;
-pub-iso)
-       echo -e "Upload the ISO to the beta-mirror!"
-       if [ -f .pass ]; then
-               PASS="`cat .pass`"
-       else
-               echo -ne "Password for mirror.ipfire.org: "; read PASS
-       fi
-       ncftpls -u web3 -p $PASS ftp://mirror.ipfire.org/html/source-packages/beta/ | grep `svn info | grep Revision | cut -c 11-`
-       if [ "$?" -eq "1" ]; then
-                       cp $BASEDIR/ipfire-install-1.4.i386.iso $BASEDIR/ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso
-                       md5sum ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso > ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso.md5
-                       ncftpput -u web3 -p $PASS mirror.ipfire.org /html/source-packages/beta/ ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso
-                       ncftpput -u web3 -p $PASS mirror.ipfire.org /html/source-packages/beta/ ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso.md5
-                       if [ "$?" -eq "0" ]; then
-                               echo -e "The ISO of Revision `svn info | grep Revision | cut -c 11-` was successfully uploaded to the ftp server."
-                       else
-                               echo -e "There was an error while uploading the ISO to the ftp server."
-                       fi
-       else
-               echo -e "File with name ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso already exists on the ftp server!"
-       fi
-       rm -f ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso{,.md5}
+upload)
+       case "$2" in
+         iso)
+               echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
+               cat <<EOF > .ftp-commands
+mkdir $IPFIRE_FTP_PATH_EXT
+ls -lah
+quit
+EOF
+               ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
+               rm -f .ftp-commands
+               md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
+               ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso
+               ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso.md5
+               ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-source-r$SVN_REVISION.tar.gz
+               ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ svn_status
+               if [ "$?" -eq "0" ]; then
+                       echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
+               else
+                       echo -e "There was an error while uploading the iso to the ftp server."
+                       exit 1
+               fi
+               if [ "$3" = "--with-sources-cd" ]; then
+                       ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-sources-cd-$VERSION.$MACHINE.iso
+               fi
+               ;;
+         paks)
+               cat <<EOF > .ftp-commands
+mkdir $IPFIRE_FTP_PATH_PAK
+ls -lah
+quit
+EOF
+               ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
+               rm -f .ftp-commands
+               ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
+               if [ "$?" -eq "0" ]; then
+                       echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
+               else
+                       echo -e "There was an error while uploading the packages to the ftp server."
+                       exit 1
+               fi
+         ;;
+       esac
        ;;
-pub-paks)
-       echo -e "Upload the packages to the beta-mirror!"
-       if [ -f .pass ]; then
-               PASS="`cat .pass`"
-       else
-               echo -ne "Password for mirror.ipfire.org: "; read PASS
+batch)
+       if [ "$2" -eq "--background" ]; then
+               batch_script
+               exit $?
        fi
-       ncftpput -z -u web3 -p $PASS mirror.ipfire.org /html/source-packages/packages/ packages/*
-       if [ "$?" -eq "0" ]; then
-               echo -e "The packages were successfully uploaded to the ftp server."
+       if [ `screen -ls | grep -q ipfire` ]; then
+               echo "Build is already running, sorry!"
+               exit 1
        else
-               echo -e "There was an error while uploading the packages to the ftp server."
+               if [ "$2" = "--rebuild" ]; then
+                       export IPFIRE_REBUILD=1
+                       echo "REBUILD!"
+               else
+                       export IPFIRE_REBUILD=0
+               fi
+               echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
+               screen -dmS ipfire $0 batch --background
+               evaluate 1
+               exit 0
        fi
        ;;
+watch)
+       watch_screen
+       ;;
 *)
-       echo "Usage: $0 {build|changelog|check|checkclean|clean|commit|diff|dist|gettoolchain|make|newpak|prefetch|pub-iso|pub-paks|shell|sync|toolchain|update}"
-       cat doc/make.sh-usage
-       exit 1
+       clear
+       svn info
+       select name in "Exit" "IPFIRE: Prefetch" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "SVN: Commit" "SVN: Update" "SVN: Status" "SVN: Diff" "LOG: Tail" "Help"
+       do
+       case $name in
+       "IPFIRE: Prefetch")
+               $0 prefetch
+               ;;
+       "IPFIRE: Build (silent)")
+               $0 build-silent
+               ;;
+       "IPFIRE: Watch Build")
+               $0 watch
+               ;;
+       "IPFIRE: Batch")
+               $0 batch
+               ;;
+       "IPFIRE: Clean")
+               $0 clean
+               ;;
+       "SVN: Commit")
+               if [ -f /usr/bin/mcedit ]; then
+                       export EDITOR=/usr/bin/mcedit
+               fi
+               if [ -f /usr/bin/nano ]; then
+                       export EDITOR=/usr/bin/nano
+               fi
+               $0 svn commit
+               $0 uploadsrc
+               ;;
+       "SVN: Update")
+               $0 svn update
+               ;;
+       "SVN: Status")
+               svn status # | grep -v ^?
+               ;;
+       "SVN: Diff")
+               $0 svn diff
+               ;;
+       "Help")
+               echo "Usage: $0 {build|changelog|clean|gettoolchain|newpak|prefetch|shell|sync|toolchain}"
+               cat doc/make.sh-usage
+               ;;
+       "LOG: Tail")
+               tail -f log/_*
+               ;;
+       "Exit")
+               break
+               ;;
+       esac
+       done
        ;;
 esac