X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=make.sh;h=fdd425d4afc4abe2f04c23a8b31364e2064932fe;hp=6b886be62ab59540b71c49bbb0d0b7af4f8c802d;hb=3a1019f6895602c89145cec0e252f015c465a36c;hpb=028698e8e12bfd5a2cd025929f18c15b16c18490 diff --git a/make.sh b/make.sh index 6b886be62a..fdd425d4af 100644 --- a/make.sh +++ b/make.sh @@ -1,5 +1,4 @@ #!/bin/bash -# ############################################################################ # # # This file is part of the IPFire Firewall. # @@ -18,117 +17,63 @@ # 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 . # +# Copyright (C) 2006 IPFire-Team . # # # ############################################################################ # - 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 - MAX_RETRIES=3 # 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 +NAME="IPFire" # Software name +SNAME="ipfire" # Short name +VERSION="2.0b" # Version number +SLOGAN="www.ipfire.org" # 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-` + +IPFVER="full" # Which version should be compiled? (full|light|voice) + +# Set an information about the build number +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 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 [ -f .config ]; then - . .config - fi +# Include funtions +. tools/make-functions - 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)" >> $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" >> $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" >> $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; -} - -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 +if [ -f .config ]; then + . .config +else + echo -e "${BOLD}No configuration found!${NORMAL}" + echo -ne "Do you want to create one (y/N)?" + read CREATE_CONFIG + echo "" + if [ "$CREATE_CONFIG" == "y" ]; then + make_config fi -} +fi prepareenv() { ############################################################################ @@ -158,20 +103,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 @@ -180,14 +132,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 + if (( 2048000 > $BASE_ASPACE )); then BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'` - if (( 2202000 - $BASE_USPACE > $BASE_ASPACE )); then - exiterror "Not enough temporary space available, need at least 2.1GB on $BASE_DEV" + if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then + beautify message FAIL + exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV" fi + else + beautify message DONE fi ############################################################################ @@ -195,8 +150,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 @@ -217,17 +170,25 @@ prepareenv() { # Setup environment set +h LC_ALL=POSIX - export LFS LC_ALL CFLAGS CXXFLAGS + MAKETUNING="-j12" + 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 @@ -238,6 +199,11 @@ prepareenv() { mount --bind $BASEDIR/log $BASEDIR/build/usr/src/log mount --bind $BASEDIR/src $BASEDIR/build/usr/src/src + # This is a temporary hack!!! + if [ ! -f /tools/bin/hostname ]; then + cp -f /bin/hostname /tools/bin/hostname 2>/dev/null + fi + # Run LFS static binary creation scripts one by one export CCACHE_DIR=$BASEDIR/ccache export CCACHE_HASHDIR=1 @@ -246,615 +212,393 @@ 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/*.ipfire | 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 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 ed + 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 net-tools 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 } -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 - ipcopmake promise-sata-300-tx 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 - ipcopmake promise-sata-300-tx - fi - - ipcopmake pcmcia-cs - ipcopmake expat - ipcopmake gdbm - ipcopmake gmp - ipcopmake openssl - ipcopmake python - ipcopmake libnet - ipcopmake libpng - ipcopmake libtiff - ipcopmake libjpeg - ipcopmake lcms - ipcopmake libmng - ipcopmake freetype - ipcopmake gd - ipcopmake popt - ipcopmake slang - ipcopmake newt - ipcopmake libcap - ipcopmake pciutils - ipcopmake pcre - ipcopmake readline - ipcopmake libxml2 - ipcopmake berkeley - ipcopmake BerkeleyDB ## The Perl module - ipcopmake mysql - ipcopmake saslauthd PASS=1 - ipcopmake openldap - #ipcopmake apache - ipcopmake apache2 - ipcopmake php - 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 noip_updater - ipcopmake ntp - ipcopmake oinkmaster - ipcopmake openssh - ipcopmake openswan - ipcopmake pptpclient - ipcopmake rrdtool - ipcopmake setserial - ipcopmake setup - ipcopmake snort - #ipcopmake speedycgi - 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 bootsplash - 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 smartmontools - 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 zaptel - ipcopmake libpri - ipcopmake bristuff - ipcopmake asterisk - ipcopmake mpg123 - echo -ne "`date -u '+%b %e %T'`: Building ### Multimedia-Server ### \n" | tee -a $LOGFILE - ipcopmake libmad - ipcopmake libogg - ipcopmake libvorbis - ipcopmake lame - ipcopmake xvid - ipcopmake mpeg2dec - ipcopmake ffmpeg - ipcopmake sox - ipcopmake gnump3d - ipcopmake videolan - echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE - ipcopmake applejuice - ipcopmake ocaml - ipcopmake mldonkey -# 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 mbmon - ipcopmake iftop - ipcopmake ncftp - ipcopmake cftp - ipcopmake etherwake - ipcopmake ethereal - ipcopmake tftp-hpa - #ipcopmake subversion - ipcopmake iptraf - ipcopmake nagios - ipcopmake yasuc -# 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 SMP=1 +# ipfiremake 3cp4218 PASS=SMP +# ipfiremake amedyn PASS=SMP +# ipfiremake cxacru PASS=SMP +# ipfiremake eagle PASS=SMP +# ipfiremake cnx_pci PASS=SMP +# ipfiremake fcdsl PASS=SMP +# ipfiremake fcdsl2 PASS=SMP +# ipfiremake fcdslsl PASS=SMP +# ipfiremake fcdslusb PASS=SMP +# ipfiremake fcdslslusb PASS=SMP +# ipfiremake fcpci PASS=SMP +# ipfiremake fcclassic PASS=SMP +# ipfiremake pulsar PASS=SMP +# ipfiremake unicorn PASS=SMP +# ipfiremake promise-sata-300-tx PASS=SMP + ipfiremake zaptel PASS=S + ipfiremake linux +# 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 zaptel +# ipfiremake pcmciautils + ipfiremake expat + ipfiremake gdbm + ipfiremake gmp + ipfiremake pam + ipfiremake openssl + ipfiremake python + ipfiremake libnet + ipfiremake libjpeg + ipfiremake libpng + ipfiremake libtiff + ipfiremake lcms + ipfiremake libmng + ipfiremake freetype + ipfiremake libart + ipfiremake gd + ipfiremake popt + ipfiremake pcre + ipfiremake slang + ipfiremake newt + ipfiremake libcap + ipfiremake pciutils + ipfiremake libxml2 + ipfiremake BerkeleyDB + ipfiremake mysql + ipfiremake cyrus-sasl + ipfiremake openldap +# ipfiremake cyrus-sasl PASS=L # Doesn't work yet. Thereby there's the question: Do we really need this? + ipfiremake apache2 + ipfiremake php + ipfiremake subversion + ipfiremake apache2 PASS=C + ipfiremake arping + ipfiremake beep + ipfiremake bind + ipfiremake capi4k-utils + ipfiremake cdrtools + ipfiremake dnsmasq + ipfiremake dosfstools + ipfiremake reiserfsprogs + ipfiremake ethtool + ipfiremake ez-ipupdate + ipfiremake fcron + ipfiremake GD + ipfiremake gnupg + ipfiremake hdparm + ipfiremake ibod + ipfiremake initscripts + ipfiremake iptables + ipfiremake ipac-ng + ipfiremake ipaddr + ipfiremake iptstate + ipfiremake iputils + ipfiremake l7-protocols +# ipfiremake isapnptools # ERROR :( +# ipfiremake isdn4k-utils # What about mISDN??? + ipfiremake kudzu + ipfiremake logrotate + ipfiremake logwatch + ipfiremake mingetty + ipfiremake misc-progs + ipfiremake mtools + ipfiremake nano + ipfiremake nash + ipfiremake nasm +### The Perl Modules have to be updated! I will skip this now! + 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 pammysql + 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 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 uClibc installmake busybox + installmake udev + installmake slang + installmake newt + installmake gettext + installmake kbd + installmake popt installmake sysvinit - installmake e2fsprogs installmake misc-progs - installmake slang + installmake e2fsprogs + installmake reiserfsprogs + installmake sysfsutils installmake util-linux - installmake newt installmake pciutils - installmake pcmcia-cs - installmake kbd + installmake pcmciautils + installmake kudzu installmake installer - installmake scsi.img - installmake driver.img + installmake scsi.img # this is to be deleted + installmake driver.img # this is to be deleted installmake initrd - installmake boot.img + installmake boot.img # this is to be deleted +# ipfiremake as86 # this is to be deleted +# ipfiremake mbr # this is to be deleted } buildpackages() { LOGFILE="$BASEDIR/log/_build.packages.log" export LOGFILE echo "... see detailed log in _build.*.log files" >> $LOGFILE - echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE - # Strip files - echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE - find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \ - ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \ - -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1 - # add -ls before -exec if you want to verify what files are stripped - - find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \ - -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1 - # there add -v to strip to verify - if [ 'i386' = $MACHINE ]; then - # Create fcdsl packages - echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE - cp $LFS/install/images/fcdsl/license.txt $LFS >> $LOGFILE 2>&1 - touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} - cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \ - lib/modules/$KVER/misc/fcdsl*.o.gz \ - lib/modules/$KVER-smp/misc/fcdsl*.o.gz \ - usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \ - etc/fcdsl/fcdsl*.conf \ - etc/drdsl/{drdsl,drdsl.ini} \ - license.txt \ - var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1 - rm -f $LFS/license.txt >> $LOGFILE 2>&1 - cd $BASEDIR - fi + installmake strip # Generating list of packages used - echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE + echo -n "Generating packages list from logs" | tee -a $LOGFILE 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$\|ipfire$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|^ipfire-logs' \ + echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt + grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$' \ $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 + beautify message DONE - # Create ISO for CDRom and USB-superfloppy - ipcopmake cdrom - rm -f $LFS/install/images/*usb* - cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1 + # Create images for install + ipfiremake cdrom + ipfiremake pxe + cp -f $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1 - ipfirepackages +# ipfirepackages # Cleanup stdumount @@ -884,7 +628,7 @@ ipfirepackages() { touch $BASEDIR/build/install/packages/$i.empty done fi - ipfiredist amavisd +# ipfiredist amavisd ipfiredist applejuice ipfiredist asterisk ipfiredist clamav @@ -898,9 +642,7 @@ ipfirepackages() { ipfiredist lame ipfiredist libmad ipfiredist libogg - ipfiredist libtiff ipfiredist libvorbis - ipfiredist libxml2 ipfiredist mailx ipfiredist mldonkey ipfiredist mpeg2dec @@ -916,9 +658,7 @@ ipfirepackages() { ipfiredist spamassassin ipfiredist subversion ipfiredist videolan - ipfiredist web-cyradm - ipfiredist xampp -# ipfiredist xinetd + ipfiredist webcyradm ipfiredist xvid ipfiredist yasuc test -d $BASEDIR/packages || mkdir $BASEDIR/packages @@ -926,25 +666,21 @@ ipfirepackages() { rm -rf $BASEDIR/build/install/packages/* } -update_logs() { - tar cfz log/ipfire-logs-`date +'%Y-%m-%d-%H:%M'`.tgz log/_build.* - rm -f log/_build.* -} - # See what we're supposed to do case "$1" in build) + clear BUILDMACHINE=`uname -m` 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 @@ -953,12 +689,16 @@ 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 @@ -967,7 +707,10 @@ build) echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild fi + beautify build_stage "Building installer" buildinstaller + + beautify build_stage "Building packages" buildpackages ;; shell) @@ -981,36 +724,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 @@ -1084,12 +797,12 @@ newpak) fi exit 0 ;; -prefetch) +downloadsrc) if [ ! -d $BASEDIR/cache ]; then 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 @@ -1100,36 +813,44 @@ 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 @@ -1147,11 +868,11 @@ gettoolchain) # arbitrary name to be updated in case of new toolchain package upload PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then - URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'` + URL_TOOLCHAIN=`grep URL_TOOLCHAIN 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 + wget $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null if [ $? -ne 0 ]; then echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE else @@ -1165,35 +886,44 @@ gettoolchain) echo "Toolchain is already downloaded. Exiting..." fi ;; -sources-iso) +othersrc) prepareenv - echo "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE + 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 + beautify message FAIL + fi stdumount ;; svn) case "$2" in update|up) # clear - echo "Loading the latest source files..." - svn update | tee -a $PWD/log/_build.svn.update.log - if [ $? -eq 0 ]; then - echo "Finished!" + 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 - echo "Failure!" + beautify message FAIL exit 1 fi - echo -n "Writing the svn-info to a file..." + echo -ne "Writing the svn-info to a file" svn info > $PWD/svn_status - if [ "$?" -eq "0" ]; then - echo ".Finished!" + if [ $? -eq "0" ]; then + beautify message DONE else - echo ".Failure!" + beautify message FAIL exit 1 fi chmod 755 $0 @@ -1201,171 +931,85 @@ svn) ;; commit|ci) clear + if [ -f /usr/bin/mcedit ]; then + export EDITOR=/usr/bin/mcedit + fi + if [ -f /usr/bin/nano ]; then + export EDITOR=/usr/bin/nano + fi + echo -ne "Selecting editor $EDITOR..." + beautify message DONE 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 - IPFIRE_SVN_MESSAGE=/tmp/ipfire-svn-co-message.txt - rm -f $IPFIRE_SVN_MESSAGE - mcedit $IPFIRE_SVN_MESSAGE - svn commit -F $IPFIRE_SVN_MESSAGE - rm -f $IPFIRE_SVN_MESSAGE + svn commit $0 svn up + $0 uploadsrc ;; dist) - #$0 svn up - echo -ne "Download source package from svn..." - svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null - if [ "$?" -eq "0" ]; then - echo ".Done!" - else - echo ".Fail!" - exit 1 + if [ $3 ]; then + SVN_REVISION=$3 fi - echo -n "Compress files..." - tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source - if [ "$?" -eq "0" ]; then - echo ".Done!" - else - echo ".Fail!" - exit 1 + if [ -f ipfire-source-r$SVN_REVISION.tar.gz ]; then + echo -ne "REV $SVN_REVISION: SKIPPED!\n" + exit 0 fi - echo -n "Cleanup..." - rm ipfire-source/ -r - if [ "$?" -eq "0" ]; then - echo ".Done!" - else - echo ".Fail!" - exit 1 + 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..." + 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 - if [ "$?" -eq "0" ]; then - echo ".Done!" - else - echo ".Fail!" - exit 1 - fi + 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 ;; -make-config) - echo -e "This is for creating your configuration..." - echo -e "We will need some input:" - echo -e "" - echo -n "FTP-DOMAIN FOR THE ISO: " - read IPFIRE_FTP_URL_EXT - echo -n "PATH FOR $IPFIRE_FTP_URL_EXT: " - read IPFIRE_FTP_PATH_EXT - echo -n "USERNAME FOR $IPFIRE_FTP_URL_EXT: " - read IPFIRE_FTP_USER_EXT - echo -n "PASSWORD FOR $IPFIRE_FTP_URL_EXT: " - read -s IPFIRE_FTP_PASS_EXT - echo "" - echo "(You can leave this empty if the cache-server is the same as your iso-server.)" - echo -n "FTP-DOMAIN FOR THE CACHE: " - read IPFIRE_FTP_URL_INT - echo -n "PATH FOR $IPFIRE_FTP_URL_INT: " - read IPFIRE_FTP_PATH_INT - if [ $IPFIRE_FTP_URL_INT ]; then - echo -n "USERNAME FOR $IPFIRE_FTP_URL_INT: " - read IPFIRE_FTP_USER_INT - echo -n "PASSWORD FOR $IPFIRE_FTP_URL_INT: " - read -s IPFIRE_FTP_PASS_INT - else - IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_EXT - IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_EXT - IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_EXT - echo "USERNAME FOR $IPFIRE_FTP_URL_INT: $IPFIRE_FTP_USER_INT" - echo "PASSWORD FOR $IPFIRE_FTP_URL_INT: !HIDDEN!" - fi - echo "" - echo "(You can leave this empty if the pak-server is the same as your iso-server.)" - echo -n "FTP-DOMAIN FOR THE PAKS: " - read IPFIRE_FTP_URL_PAK - echo -n "PATH FOR $IPFIRE_FTP_URL_PAK: " - read IPFIRE_FTP_PATH_PAK - if [ $IPFIRE_FTP_URL_PAK ]; then - echo -n "USERNAME FOR $IPFIRE_FTP_URL_PAK: " - read IPFIRE_FTP_USER_PAK - echo -n "PASSWORD FOR $IPFIRE_FTP_URL_PAK: " - read -s IPFIRE_FTP_PASS_PAK - else - IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_EXT - IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_EXT - IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_EXT - echo "USERNAME FOR $IPFIRE_FTP_URL_PAK: $IPFIRE_FTP_USER_PAK" - echo "PASSWORD FOR $IPFIRE_FTP_URL_PAK: !HIDDEN!" - fi - echo "" - echo -e "ONE OR MORE EMAIL ADDRESS(ES) TO WHICH THE REPORTS WILL BE SENT" - echo -e "(seperated by comma)" - read IPFIRE_MAIL_REPORT - echo -n "EMAIL FROM: " - read IPFIRE_MAIL_FROM - echo -n "EMAIL SERVER: " - read IPFIRE_MAIL_SERVER - echo -n "LOGIN TO MAIL SERVER: " - read IPFIRE_MAIL_USER - echo -n "MAIL PASSWORD: " - read -s IPFIRE_MAIL_PASS - echo -n "Saving..." - for i in `seq 20`; do - sleep 0.1; echo -n "." - done - echo ".Finished!" - cat < .config -### ISO server -IPFIRE_FTP_URL_EXT=$IPFIRE_FTP_URL_EXT -IPFIRE_FTP_PATH_EXT=$IPFIRE_FTP_PATH_EXT -IPFIRE_FTP_USER_EXT=$IPFIRE_FTP_USER_EXT -IPFIRE_FTP_PASS_EXT=$IPFIRE_FTP_PASS_EXT -### cache server -IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_INT -IPFIRE_FTP_PATH_INT=$IPFIRE_FTP_PATH_INT -IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_INT -IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_INT -### paks server -IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_PAK -IPFIRE_FTP_PATH_PAK=$IPFIRE_FTP_PATH_PAK -IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_PAK -IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_PAK -### mail reports -IPFIRE_MAIL_REPORT=$IPFIRE_MAIL_REPORT -IPFIRE_MAIL_FROM=$IPFIRE_MAIL_FROM -IPFIRE_MAIL_SERVER=$IPFIRE_MAIL_SERVER -IPFIRE_MAIL_USER=$IPFIRE_MAIL_USER -IPFIRE_MAIL_PASS=$IPFIRE_MAIL_PASS -END - ;; -sync) - echo -e "Syncing cache to ftp:" -# rm -f doc/packages-to-remove-from-ftp - ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > ftplist - for i in `ls -w1 cache/`; do - grep $i ftplist +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 $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ 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 >> $BASEDIR/log/_build.uploadsrc.log 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 -# done - rm -f ftplist + 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 + beautify message DONE + cd $PWD + exit 0 ;; upload) case "$2" in @@ -1411,197 +1055,11 @@ EOF ;; esac ;; -build-only) - rm -f $BASEDIR/log/$2* - BUILDMACHINE=`uname -m` - prepareenv - ipcopmake $2 - ;; -build-silent) - screen -dmS ipfire $0 build - echo "Build started... This will take a while!" - echo "You can see the status with 'screen -x ipfire'." - ;; -mail) - chmod 755 tools/sendEmail - ATTACHMENT=/tmp/ipfire-build-logs-R$SVN_REVISION.tar.gz - if [ "$2" = "ERROR" ]; then - SUBJECT="ERROR: IPFIRE-BUILD R$SVN_REVISION on `hostname`" - echo "ERROR: $0 build!" - cat < /tmp/ipfire_mail_body -When I was building IPFire on `hostname`, I have found an ERROR! -Here you can see the logs and detect the reason for this error. - -Best Regards -Your IPFire-Build-Script -END - fi - if [ "$2" = "SUCCESS" ]; then - SUBJECT="SUCCESS: IPFIRE-BUILD R$SVN_REVISION on `hostname`" - cat < /tmp/ipfire_mail_body -Building IPFire on `hostname` in Revision $SVN_REVISION was successfull! -You can find the ISO on your ftp server. - -Statistics: ------------ -Started: $IPFIRE_START_TIME -Finished: `date` - -Best Regards -Your IPFire-Build-Script -END - fi - if [ "$2" = "SVNUPDATE" ]; then - SUBJECT="SVNUPDATE: IPFIRE-BUILD R$SVN_REVISION on `hostname`" - echo "ERROR: $0 svn up!" - cat < /tmp/ipfire_mail_body -When I was downloading the latest svn source, -I have found an ERROR! -Here you can see the logs and detect the reason for this error. - -Best Regards -Your IPFire-Build-Script -END - fi - - if [ "$2" = "SVNDIST" ]; then - SUBJECT="SVNDIST: IPFIRE-BUILD R$SVN_REVISION on `hostname`" - echo "ERROR: $0 svn dist!" - cat < /tmp/ipfire_mail_body -When I was exporting the latest svn source, -I have found an ERROR! -Here you can see the logs and detect the reason for this error. - -Best Regards -Your IPFire-Build-Script -END - fi - - if [ "$2" = "PREFETCH" ]; then - SUBJECT="PREFETCH: IPFIRE-BUILD R$SVN_REVISION on `hostname`" - echo "ERROR: $0 prefetch!" - cat < /tmp/ipfire_mail_body -When I was downloading the source packages, -I have found an ERROR! -Here you can see the logs and detect the reason for this error. - -Best Regards -Your IPFire-Build-Script -END - fi - - if [ "$2" = "ISO" ]; then - SUBJECT="ISO: IPFIRE-BUILD R$SVN_REVISION on `hostname`" - echo "ERROR: $0 upload iso!" - cat < /tmp/ipfire_mail_body -When I was uploading the iso image, -I have found an ERROR! -Here you can see the logs and detect the reason for this error. - -Best Regards -Your IPFire-Build-Script -END - fi - - if [ "$2" = "PAKS" ]; then - SUBJECT="PAKS: IPFIRE-BUILD R$SVN_REVISION on `hostname`" - echo "ERROR: $0 upload paks!" - cat < /tmp/ipfire_mail_body -When I was uploading the packages, -I have found an ERROR! -Here you can see the logs and detect the reason for this error. - -Best Regards -Your IPFire-Build-Script -END - fi - - tar cfz $ATTACHMENT log/_build* - cat <> /tmp/ipfire_mail_body - -Here is a summary... The full logs are in the attachment. ---------------------------------------------------------- - -`tail log/_*` -END - cat /tmp/ipfire_mail_body | tools/sendEmail -q \ - -f $IPFIRE_MAIL_FROM \ - -t $IPFIRE_MAIL_REPORT \ - -u $SUBJECT \ - -s $IPFIRE_MAIL_SERVER:25 \ - -xu $IPFIRE_MAIL_USER \ - -xp $IPFIRE_MAIL_PASS \ - -l log/_build.mail.log \ - -a $ATTACHMENT # -v - rm -f /tmp/ipfire_mail_body $ATTACHMENT - ;; -unattended) - if [ ! -f .config ]; then - echo "No configuration found. Try ./make.sh make-config." - fi - ### This is our procedure that will compile the IPFire by herself... - echo "### UPDATE LOGS" - update_logs - - if [ "$IPFIRE_REBUILD" -eq "0" ]; then - echo "### SAVING TIME" - export IPFIRE_START_TIME=`date` - - echo "### GETTING TOOLCHAIN" - $0 gettoolchain - - echo "### RUNNING SVN-UPDATE" - $0 svn update - if [ $? -ne 0 ]; then - $0 mail SVNUPDATE - exit 1 - fi - - echo "### EXPORT SOURCES" - $0 svn dist - if [ $? -ne 0 ]; then - $0 mail SVNDIST - exit 1 - fi - - echo "### RUNNING PREFETCH" - $0 prefetch | grep -q "md5 difference" - if [ $? -eq 0 ]; then - $0 mail PREFETCH - exit 1 - fi - fi - - echo "### RUNNING BUILD" - $0 build - if [ $? -ne 0 ]; then - $0 mail ERROR - exit 1 - fi - - echo "### MAKING SOURCES-ISO" - echo "DISABLED by Delaco!" - #$0 sources-iso - - echo "### UPLOADING ISO" - $0 upload iso - if [ $? -ne 0 ]; then - $0 mail ISO - exit 1 - fi - - echo "### UPLOADING PAKS" - $0 upload paks - if [ $? -ne 0 ]; then - $0 mail PAKS - exit 1 - fi - - echo "### SUCCESS!" - $0 mail SUCCESS - exit 0 - ;; batch) + if [ "$2" -eq "--background" ]; then + batch_script + exit $? + fi if [ `screen -ls | grep -q ipfire` ]; then echo "Build is already running, sorry!" exit 1 @@ -1612,35 +1070,37 @@ batch) else export IPFIRE_REBUILD=0 fi - echo -n "IPFire-Batch-Build is starting..." - screen -dmS ipfire $0 unattended - if [ "$?" -eq "0" ]; then - echo ".Done!" - else - echo ".ERROR!" - exit 1 - fi + echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}" + screen -dmS ipfire $0 batch --background + evaluate 1 exit 0 fi ;; watch) - echo "Exit with Ctrl+A, Ctrl+D." - echo -n "Preparing..." - for i in `seq 5`; do - sleep 0.1; echo -n "." - done - echo ".Ready!" - sleep 0.3 - screen -x ipfire + watch_screen ;; -*) +pxe) + case "$2" in + start) + start_tftpd + ;; + stop) + stop_tftpd + ;; + reload) + reload_tftpd + ;; + esac + exit 0 + ;; +"") 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" + select name in "Exit" "IPFIRE: Downloadsrc" "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: Downloadsrc") + $0 downloadsrc ;; "IPFIRE: Build (silent)") $0 build-silent @@ -1654,24 +1114,11 @@ watch) "IPFIRE: Clean") $0 clean ;; - "SVN: Commit") - echo "Are your sure to Update all Files to the Server (write: yes)?"; read input - if [ "$input" == "yes" ]; then - $0 svn commit - fi - $0 sync - ;; "SVN: Update") $0 svn update ;; - "SVN: Status") - svn status # | grep -v ^? - ;; - "SVN: Diff") - $0 svn diff - ;; "Help") - echo "Usage: $0 {build|changelog|check|checkclean|clean|gettoolchain|newpak|prefetch|shell|sync|toolchain}" + echo "Usage: $0 {build|changelog|clean|gettoolchain|newpak|downloadsrc|shell|sync|toolchain}" cat doc/make.sh-usage ;; "LOG: Tail") @@ -1683,4 +1130,8 @@ watch) esac done ;; +*) + echo "Usage: $0 {build|changelog|clean|gettoolchain|newpak|downloadsrc|shell|sync|toolchain}" + cat doc/make.sh-usage + ;; esac