From 15679d9f9689003c7a79fc3875307b666e67a04f Mon Sep 17 00:00:00 2001 From: ms Date: Sat, 30 Sep 2006 22:07:28 +0000 Subject: [PATCH] Make.sh gesplittet und maechtig ueberarbeitet. git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@298 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8 --- lfs/binutils | 6 +- lfs/cleanup-toolchain | 2 + lfs/configroot | 2 + lfs/gcc | 4 +- lfs/stage2 | 8 +- make.sh | 1266 ++++++++++++----------------------------- tools/make-functions | 627 ++++++++++++++++++++ 7 files changed, 990 insertions(+), 925 deletions(-) create mode 100644 tools/make-functions diff --git a/lfs/binutils b/lfs/binutils index bd140c4db1..6981aa3e98 100644 --- a/lfs/binutils +++ b/lfs/binutils @@ -41,7 +41,7 @@ ifeq "$(ROOT)" "" EXTRA_MAKE = EXTRA_INSTALL = else -ifeq "$(LFS_PASS)" "1" +ifeq "$(PASS)" "1" TARGET = $(DIR_INFO)/$(THISAPP)-tools1 EXTRA_CONFIG = --prefix=/tools --disable-nls EXTRA_MAKE = LDFLAGS="-all-static" @@ -98,7 +98,7 @@ ifeq "$(ROOT)" "" cd $(DIR_SRC)/binutils-build && make $(MAKETUNING) $(EXTRA_MAKE) cd $(DIR_SRC)/binutils-build && make $(EXTRA_INSTALL) install else -ifeq "$(LFS_PASS)" "1" +ifeq "$(PASS)" "1" cd $(DIR_SRC)/binutils-build && make $(MAKETUNING) cd $(DIR_SRC)/binutils-build && make $(MAKETUNING) clean cd $(DIR_SRC)/binutils-build && make $(MAKETUNING) $(EXTRA_MAKE) @@ -107,7 +107,7 @@ else endif cd $(DIR_SRC)/binutils-build && make $(EXTRA_INSTALL) install cd $(DIR_SRC)/binutils-build && make -C ld clean -ifeq "$(LFS_PASS)" "1" +ifeq "$(PASS)" "1" cd $(DIR_SRC)/binutils-build && make -C ld LIB_PATH=/tools/lib else cd $(DIR_SRC)/binutils-build && make -C ld LIB_PATH=/usr/lib:/lib diff --git a/lfs/cleanup-toolchain b/lfs/cleanup-toolchain index c9b652a199..0dbebbcbb1 100644 --- a/lfs/cleanup-toolchain +++ b/lfs/cleanup-toolchain @@ -26,6 +26,8 @@ include Config +VER = ipfire + THISAPP = cleanup-toolchain TARGET = $(DIR_INFO)/$(THISAPP)-tools diff --git a/lfs/configroot b/lfs/configroot index ad89fdfb23..36d01211c6 100644 --- a/lfs/configroot +++ b/lfs/configroot @@ -26,6 +26,8 @@ include Config +VER = ipfire + THISAPP = configroot DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) diff --git a/lfs/gcc b/lfs/gcc index df9187db92..ff0b07c025 100644 --- a/lfs/gcc +++ b/lfs/gcc @@ -46,7 +46,7 @@ ifeq "$(ROOT)" "" EXTRA_MAKE = EXTRA_INSTALL = else -ifeq "$(LFS_PASS)" "1" +ifeq "$(PASS)" "1" TARGET = $(DIR_INFO)/$(THISAPP)-tools1 EXTRA_CONFIG = --prefix=/tools \ --with-local-prefix=/tools --disable-nls --enable-shared \ @@ -106,7 +106,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) ifeq "$(ROOT)" "" else -ifeq "$(LFS_PASS)" "1" +ifeq "$(PASS)" "1" cd $(DIR_SRC)/gcc-build && /bin/bash $(DIR_APP)/configure $(EXTRA_CONFIG) cd $(DIR_SRC)/gcc-build && make $(MAKETUNING) $(EXTRA_MAKE) cd $(DIR_SRC)/gcc-build && make $(EXTRA_INSTALL) install diff --git a/lfs/stage2 b/lfs/stage2 index 81ac2145c0..ae1e5c49b2 100644 --- a/lfs/stage2 +++ b/lfs/stage2 @@ -18,12 +18,6 @@ # Makefiles are based on LFSMake, which is # # Copyright (C) 2002 Rod Roard # # # -# Modifications by: # -# ??-12-2003 Mark Wormgoor < mark@wormgoor.com> # -# - Modified Makefile for IPCop build # -# # -# $Id: stage2,v 1.14.2.5 2006/02/08 23:53:37 gespinasse Exp $ -# # ############################################################################### ############################################################################### @@ -32,6 +26,8 @@ include Config +VER = ipfire + THISAPP = stage2 TARGET = $(DIR_INFO)/$(THISAPP) diff --git a/make.sh b/make.sh index 66d054005c..5b69026913 100644 --- a/make.sh +++ b/make.sh @@ -1,5 +1,4 @@ #!/bin/bash -# ############################################################################ # # # This file is part of the IPFire Firewall. # @@ -18,112 +17,55 @@ # 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.0" # Version number +SLOGAN="www.ipfire.eu" # Software slogan +CONFIG_ROOT=/var/ipfire # Configuration rootdir +NICE=10 # Nice level +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 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 - - 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 i486 (or equivalent)" >> $LOGFILE - MACHINE=i486 - BUILDTARGET=i486-pc-linux-gnu - CFLAGS="-O2 -mcpu=i486 -march=i486 -pipe -fomit-frame-pointer" - CXXFLAGS="-O2 -mcpu=i486 -march=i486 -pipe -fomit-frame-pointer" - 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 -} +# Include funtions +. tools/make-functions -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() { ############################################################################ @@ -153,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 "`date -u '+%b %e %T'`: 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 "`date -u '+%b %e %T'`: 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 @@ -175,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 "`date -u '+%b %e %T'`: 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 ############################################################################ @@ -242,181 +194,23 @@ 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 \ - MAKETUNING=$MAKETUNING \ - 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 MAKETUNING=$MAKETUNING \ - 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 MAKETUNING=$MAKETUNING \ - 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 - 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 - 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} - echo -ne "`date -u '+%b %e %T'`: Native GCC: $NATIVEGCC\n" lfsmake1 ccache - 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-libc-header lfsmake1 glibc lfsmake1 tcl lfsmake1 expect lfsmake1 dejagnu - lfsmake1 gcc LFS_PASS=2 - lfsmake1 binutils LFS_PASS=2 + lfsmake1 gcc PASS=2 + lfsmake1 binutils PASS=2 lfsmake1 ncurses lfsmake1 bash lfsmake1 bzip2 @@ -442,8 +236,6 @@ buildtoolchain() { 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 @@ -481,11 +273,7 @@ buildbase() { lfsmake2 kbd lfsmake2 e2fsprogs lfsmake2 grep - if [ 'i386' = $MACHINE ]; then - lfsmake2 grub - elif [ 'alpha' = $MACHINE ]; then - lfsmake2 aboot - fi + lfsmake2 grub lfsmake2 gzip lfsmake2 man lfsmake2 make @@ -501,268 +289,241 @@ buildbase() { lfsmake2 util-linux } -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 apache2 - ipcopmake php - ipcopmake subversion - ipcopmake apache2 PASS=CONFIG - 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 squid - ipcopmake squid-graph - ipcopmake squidguard - ipcopmake tcpdump - ipcopmake traceroute - ipcopmake vlan - ipcopmake wireless - ipcopmake libsafe - ipcopmake 3c5x9setup - ipcopmake pakfire - ipcopmake startscripts - ipcopmake java - ipcopmake bootsplash - ipcopmake spandsp - ipcopmake lzo - ipcopmake openvpn - ipcopmake pkg-config - ipcopmake glib - ipcopmake pam - ipcopmake pammysql - ipcopmake saslauthd PASS=2 - ipcopmake xinetd - ipcopmake ghostscript - ipcopmake cups - ipcopmake samba - ipcopmake sudo - ipcopmake mc - 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 webcyradm - 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 - 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 iptraf - ipcopmake nagios - ipcopmake yasuc + ipfiremake configroot + ipfiremake dhcp + ipfiremake dhcpcd + ipfiremake libusb + ipfiremake libpcap + 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 @@ -828,7 +589,7 @@ buildpackages() { # packages-list.txt is ready to be displayed for wiki page # Create ISO for CDROM - ipcopmake cdrom + ipfiremake cdrom rm -f $LFS/install/images/*usb* cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1 @@ -901,25 +662,20 @@ 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) 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/cleanup-toolchain-*-tools ]; then + if [ ! -f log/cleanup-toolchain-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 @@ -932,8 +688,11 @@ build) prepareenv fi + beautify build_stage "Building base" buildbase - buildipcop + + beautify build_stage "Building IPFire" + buildipfire # Setzen des IPFire Builds if [ "$FIREBUILD" ]; then @@ -942,7 +701,10 @@ build) echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild fi + beautify build_stage "Building installer" buildinstaller + + beautify build_stage "Building packages" buildpackages ;; shell) @@ -956,36 +718,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 @@ -1105,6 +837,7 @@ prefetch) ;; toolchain) 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 @@ -1140,39 +873,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..." + 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 - echo "Finished!" + 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 @@ -1187,11 +925,7 @@ svn) 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 ;; dist) @@ -1206,156 +940,58 @@ svn) svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null svn log http://svn.ipfire.eu/svn/ipfire -r 1:$SVN_REVISION > ipfire-source/Changelog #svn info http://svn.ipfire.eu/svn/ipfire -r $SVN_REVISION > ipfire-source/svn_status - if [ "$?" -eq "0" ]; then - echo -en "\r" - else - echo -en "\n" - exit 1 - fi + 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 - if [ "$?" -eq "0" ]; then - echo -ne "\r" - else - echo -ne "\n" - exit 1 - fi + evaluate 1 echo -en "REV $SVN_REVISION: Cleaning up..." rm ipfire-source/ -r - if [ "$?" -eq "0" ]; then - echo -ne "\rREV $SVN_REVISION: ##### FINISHED! #####\n" - else - echo -ne "\n" - exit 1 - fi - ;; - alldist|ad) - echo -e "### THIS WILL TAKE A LONG TIME!\nDOING A FETCH FROM REV 1 TO REV $SVN_REVISION!\n" - for i in `seq 1 $SVN_REVISION`; do - $0 svn dist $i - done + 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 + 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 > /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 + else + echo -ne "$i" + beautify message SKIP 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 @@ -1401,197 +1037,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 @@ -1602,26 +1052,14 @@ 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 ;; *) clear @@ -1645,11 +1083,11 @@ watch) $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 + if [ -f /usr/bin/mcedit ]; then + export EDITOR=/usr/sbin/mcedit fi - $0 sync + $0 svn commit + $0 uploadsrc ;; "SVN: Update") $0 svn update diff --git a/tools/make-functions b/tools/make-functions new file mode 100644 index 0000000000..e9564bf54d --- /dev/null +++ b/tools/make-functions @@ -0,0 +1,627 @@ +#!/bin/bash +############################################################################ +# +# Beautifying variables & presentation & input output interface +# +############################################################################ + +## Screen Dimentions +# Find current screen size +if [ -z "${COLUMNS}" ]; then + COLUMNS=$(stty size) + COLUMNS=${COLUMNS##* } +fi + +# When using remote connections, such as a serial port, stty size returns 0 +if [ "${COLUMNS}" = "0" ]; then + COLUMNS=80 +fi + +## Measurements for positioning result messages +RESULT_WIDTH=4 +TIME_WIDTH=8 +OPT_WIDTH=6 +VER_WIDTH=10 +RESULT_COL=$((${COLUMNS} - $RESULT_WIDTH - 4)) +TIME_COL=$((${RESULT_COL} - $TIME_WIDTH - 5)) +OPT_COL=$((${TIME_COL} - $OPT_WIDTH - 5)) +VER_COL=$((${OPT_COL} - $VER_WIDTH - 5)) + +## Set Cursur Position Commands, used via echo -e +SET_RESULT_COL="\\033[${RESULT_COL}G" +SET_TIME_COL="\\033[${TIME_COL}G" +SET_OPT_COL="\\033[${OPT_COL}G" +SET_VER_COL="\\033[${VER_COL}G" + +# Define color for messages +BOLD="\\033[1;39m" +DONE="\\033[1;32m" +SKIP="\\033[1;34m" +WARN="\\033[1;35m" +FAIL="\\033[1;31m" +NORMAL="\\033[0;39m" + +evaluate() { + if [ "$?" -eq "0" ]; then + beautify message DONE + else + EXITCODE=$1 + shift 1 + beautify message FAIL + $* + if [ $EXITCODE -ne "0" ]; then + exit $EXITCODE + fi + fi +} + +position_cursor() +{ + # ARG1=starting position on screen + # ARG2=string to be printed + # ARG3=offset, negative for left movement, positive for right movement, relative to ARG1 + # For example if your starting position is column 50 and you want to print Hello three columns to the right + # of your starting position, your call will look like this: + # position_cursor 50 "Hello" 3 (you'll get the string Hello at position 53 (= 50 + 3) + # If on the other hand you want your string "Hello" to end three columns to the left of position 50, + # your call will look like this: + # position_cursor 50 "Hello" -3 (you'll get the string Hello at position 42 (= 50 - 5 -3) + # If you want to start printing at the exact starting location, use offset 0 + + START=$1 + STRING=$2 + OFFSET=$3 + + STRING_LENGTH=${#STRING} + + if [ ${OFFSET} -lt 0 ]; then + COL=$((${START} + ${OFFSET} - ${STRING_LENGTH})) + else + COL=$((${START} + ${OFFSET})) + fi + + SET_COL="\\033[${COL}G" + + echo $SET_COL +} # End of position_cursor() + + +beautify() +{ + # Commands: build_stage, make_pkg, message, result + case "$1" in + message) + case "$2" in + DONE) + echo -ne "${SET_RESULT_COL}[${DONE} DONE ${NORMAL}]\n" + ;; + WARN) + echo -ne "${WARN}${3}${NORMAL}${SET_RESULT_COL}[${WARN} WARN ${NORMAL}]\n" + ;; + FAIL) + echo -ne "${SET_RESULT_COL}[${FAIL} FAIL ${NORMAL}]\n" + ;; + SKIP) + echo -ne "${SET_RESULT_COL}[${SKIP} SKIP ${NORMAL}]\n" + ;; + esac + ;; + build_stage) + MESSAGE=$2 + echo -ne "${BOLD}*** ${MESSAGE}${SET_VER_COL} version${SET_OPT_COL} options" + echo -ne "${SET_TIME_COL} time (sec)${SET_RESULT_COL} status${NORMAL}\n" + ;; + make_pkg) + echo "$2" | while read PKG_VER PROGRAM OPTIONS + do + SET_VER_COL_REAL=`position_cursor $OPT_COL $PKG_VER -3` + + if [ "$OPTIONS" == "" ]; then + echo -ne "${PROGRAM}${SET_VER_COL}[ ${BOLD}${SET_VER_COL_REAL}${PKG_VER}" + echo -ne "${NORMAL} ]${SET_RESULT_COL}" + else + echo -ne "${PROGRAM}${SET_VER_COL}[ ${BOLD}${SET_VER_COL_REAL}${PKG_VER}" + echo -ne "${NORMAL} ]${SET_OPT_COL}[ ${BOLD}${OPTIONS}" + echo -ne "${NORMAL} ]${SET_RESULT_COL}" + fi + done + ;; + result) + RESULT=$2 + + if [ ! $3 ]; then + PKG_TIME=0 + else + PKG_TIME=$3 + fi + + SET_TIME_COL_REAL=`position_cursor $RESULT_COL $PKG_TIME -3` + case "$RESULT" in + DONE) + echo -ne "${SET_TIME_COL}[ ${BOLD}${SET_TIME_COL_REAL}$PKG_TIME${NORMAL} ]" + echo -ne "${SET_RESULT_COL}[${DONE} DONE ${NORMAL}]\n" + ;; + FAIL) + echo -ne "${SET_TIME_COL}[ ${BOLD}${SET_TIME_COL_REAL}$PKG_TIME${NORMAL} ]" + echo -ne "${SET_RESULT_COL}[${FAIL} FAIL ${NORMAL}]\n" + ;; + SKIP) + echo -ne "${SET_TIME_COL}[ ${BOLD}${SET_TIME_COL_REAL}$PKG_TIME${NORMAL} ]" + echo -ne "${SET_RESULT_COL}[${SKIP} SKIP ${NORMAL}]\n" + ;; + esac + ;; + esac +} # End of beautify() + + +get_pkg_ver() +{ + PKG_VER=`grep ^VER $1 | awk '{print $3}'` + + if [ -z $PKG_VER ]; then + PKG_VER=`grep "Exp " $1 | awk '{print $4}'` + fi + + if [ ${#PKG_VER} -gt $VER_WIDTH ]; then + # If a package version number is greater than $VER_WIDTH, we keep the first 4 characters + # and replace enough characters to fit the resulting string on the screen. We'll replace + # the extra character with .. (two dots). That's why the "+ 2" in the formula below. + # Example: if we have a 21-long version number that we want to fit into a 10-long space, + # we have to remove 11 characters. But if we replace 11 characters with 2 characters, we'll + # end up with a 12-character long string. That's why we replace 12 characters with .. + REMOVE=`expr substr "$PKG_VER" 4 $[ ${#PKG_VER} - $VER_WIDTH + 2 ]` + PKG_VER=`echo ${PKG_VER/$REMOVE/..}` + fi + + echo "$PKG_VER" +} # End of get_pkg_ver() + +if [ 'x86_64' = $MACHINE -o 'i686' = $MACHINE -o 'i586' = $MACHINE ]; then + echo "`date -u '+%b %e %T'`: Machine is iX86 (or equivalent)" >> $LOGFILE + MACHINE=i586 + BUILDTARGET=i586-pc-linux-gnu + C2FLAGS="-O2 -march=i586 -mtune=i586 -pipe -fomit-frame-pointer" + CXX2FLAGS="-O2 -march=i586 -mtune=i586 -pipe -fomit-frame-pointer" +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 -e "\nERROR: $*" + 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="$CF2LAGS" CXXFLAGS="$CXX2FLAGS" \ + 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 + beautify message FAIL + exiterror "chroot error" + else + stdumount + fi +} + +############################################################################ +# # +# Necessary shell functions # +# # +############################################################################ +# +# Common checking before entering the chroot and compilling +# +# Return:0 caller can continue +# :1 skip (nothing to do) +# or fail if no script file found +# +lfsmakecommoncheck() +{ + + # Script present? + if [ ! -f $BASEDIR/lfs/$1 ]; then + exiterror "No such file or directory: $BASEDIR/$1" + fi + + local PKG_VER=`get_pkg_ver $BASEDIR/lfs/$1` + beautify make_pkg "$PKG_VER $*" + + # Script slipped? + local i + for i in $SKIP_PACKAGE_LIST + do + if [ "$i" == "$1" ]; then + beautify result SKIP + return 1; + fi + done + + echo -ne "`date -u '+%b %e %T'`: Building $* " >> $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 + + return 0 # pass all! +} # End of lfsmakecommoncheck() + +lfsmake1() { + lfsmakecommoncheck $* + [ $? == 1 ] && return 0 + + local PKG_TIME_START=`date +%s` + + cd $BASEDIR/lfs && make -f $* BUILDTARGET=$BUILDTARGET \ + MACHINE=$MACHINE \ + LFS_BASEDIR=$BASEDIR \ + ROOT=$LFS \ + KVER=$KVER \ + MAKETUNING=$MAKETUNING \ + install >> $LOGFILE 2>&1 + local COMPILE_SUCCESS=$? + local PKG_TIME_END=`date +%s` + + if [ $COMPILE_SUCCESS -ne 0 ]; then + beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] + exiterror "Building $*"; + else + beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] + fi + + return 0 +} + +lfsmake2() { + lfsmakecommoncheck $* + [ $? == 1 ] && return 0 + + local PKG_TIME_START=`date +%s` + 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="$C2FLAGS" CXXFLAGS="$CXX2FLAGS" \ + CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \ + KVER=$KVER MAKETUNING=$MAKETUNING \ + BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ + /tools/bin/bash -x -c "cd /usr/src/lfs && \ + make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 + local COMPILE_SUCCESS=$? + local PKG_TIME_END=`date +%s` + + if [ $COMPILE_SUCCESS -ne 0 ]; then + beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] + exiterror "Building $*"; + else + beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] + fi + + return 0 +} + +ipfiremake() { + lfsmakecommoncheck $* + [ $? == 1 ] && return 0 + + local PKG_TIME_START=`date +%s` + 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="$C2FLAGS" CXXFLAGS="$CXX2FLAGS" \ + CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \ + KVER=$KVER MAKETUNING=$MAKETUNING \ + BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ + /bin/bash -x -c "cd /usr/src/lfs && \ + make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 + + local COMPILE_SUCCESS=$? + local PKG_TIME_END=`date +%s` + + if [ $COMPILE_SUCCESS -ne 0 ]; then + beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] + exiterror "Building $*"; + else + beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] + fi + return 0 +} + +ipfiredist() { + if [ -f $BASEDIR/build/usr/src/lfs/$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="$C2FLAGS" CXXFLAGS="$CXX2FLAGS" \ + 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 + 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 +} + +update_logs() { + tar cfz log/ipfire-logs-`date +'%Y-%m-%d-%H:%M'`.tgz log/_build.* + rm -f log/_build.* +} + +batch_script() { + echo -ne "### UPDATE LOGS" + update_logs + evaluate 1 + + if [ "$IPFIRE_REBUILD" -eq "0" ]; then + echo -ne "### SAVING TIME" + export IPFIRE_START_TIME=`date` + evaluate 1 + + echo "### RUNNING SVN-UPDATE" + $0 svn update + evaluate 1 mail SVNUPDATE + + echo "### EXPORT SOURCES" + $0 svn dist + evaluate 1 mail SVNDIST + + echo "### RUNNING PREFETCH" + $0 prefetch | grep -q "md5 difference" + evaluate 1 mail PREFETCH + fi + + echo "### RUNNING BUILD" + $0 build + evaluate 1 mail ERROR + + echo "### UPLOADING ISO" + $0 upload iso + evaluate 1 mail ISO + + echo -ne "### UPLOADING PAKS" + $0 upload paks + evaluate 1 mail PAKS + + echo -n "${BOLD}***SUCCESS!${NORMAL}" + evaluate 0 mail SUCCESS + exit 0 +} + +watch_screen() { + echo -e "${BOLD}Exit with Ctrl+A, Ctrl+D.${NORMAL}" + sleep 0.5 + screen -x ipfire +} + +mail() { + chmod 755 tools/sendEmail + ATTACHMENT=/tmp/ipfire-build-logs-R$SVN_REVISION.tar.gz + case "$1" in + success) + 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 + echo -ne "${BOLD}***Sending success message${NORMAL}" + ;; + *) + SUBJECT="ERROR $1: IPFIRE-BUILD R$SVN_REVISION on `hostname`" + cat < /tmp/ipfire_mail_body +When I was building IPFire on `hostname`, I have found an ERROR with name $1! +Here you can see the logs and detect the reason for this error. + +Best Regards +Your IPFire-Build-Script + + +Here is a summary... The full logs are in the attachment. +--------------------------------------------------------- + +`tail log/_*` +END + echo -ne "${BOLD}***Sending error message${NORMAL}" + ;; + esac + tar cfz $ATTACHMENT log/_build* + 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 + if [ "$?" -eq "0" ]; then + beautify message DONE + else + beautify message FAIL + fi + rm -f /tmp/ipfire_mail_body $ATTACHMENT +} + +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..." + 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 + beautify message DONE +} \ No newline at end of file -- 2.39.2