Geaendert:
[ipfire-2.x.git] / make.sh
1 #!/bin/bash
2 #
3 ############################################################################
4 #                                                                          #
5 # This file is part of the IPFire Firewall.                                #
6 #                                                                          #
7 # IPFire is free software; you can redistribute it and/or modify           #
8 # it under the terms of the GNU General Public License as published by     #
9 # the Free Software Foundation; either version 2 of the License, or        #
10 # (at your option) any later version.                                      #
11 #                                                                          #
12 # IPFire is distributed in the hope that it will be useful,                #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of           #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
15 # GNU General Public License for more details.                             #
16 #                                                                          #
17 # You should have received a copy of the GNU General Public License        #
18 # along with IPFire; if not, write to the Free Software                    #
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
20 #                                                                          #
21 # Copyright (C) 2006 IPFire-Team <entwickler@ipfire.org>.                  #
22 #                                                                          #
23 ############################################################################
24 #
25
26   NAME="IPFire"                 # Software name
27   SNAME="ipfire"                        # Short name
28   VERSION="2.0"                 # Version number
29   SLOGAN="www.ipfire.org"               # Software slogan
30   CONFIG_ROOT=/var/ipfire               # Configuration rootdir
31   NICE=10
32   MAX_RETRIES=3                 # prefetch/check loop
33   KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
34   MACHINE=`uname -m`
35   SVN_REVISION=`svn info | grep Revision | cut -c 11-`
36
37   # Setzen des IPFire Builds
38   if [ -e ./.svn ]; then
39     FIREBUILD=`cat .svn/entries |sed -n 's/^[ \t]*revision=\"// p' | sed -n 's/\".*$// p'`
40   fi
41
42   # Debian specific settings
43   if [ ! -e /etc/debian_version ]; then
44         FULLPATH=`which $0`
45   else
46         if [ -x /usr/bin/realpath ]; then
47                 FULLPATH=`/usr/bin/realpath $0`
48         else
49                 echo "ERROR: Need to do apt-get install realpath"
50                 exit 1
51         fi
52   fi
53
54   PWD=`pwd`
55   BASENAME=`basename $0`
56   BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
57   LOGFILE=$BASEDIR/log/_build.preparation.log
58   export BASEDIR LOGFILE
59   DIR_CHK=$BASEDIR/cache/check
60   mkdir $BASEDIR/log/ 2>/dev/null
61
62   if [ -f .config ]; then
63         . .config
64   fi
65
66   if [ 'x86_64' = $MACHINE -o 'i686' = $MACHINE -o 'i586' = $MACHINE -o 'i486' = $MACHINE -o 'i386' = $MACHINE ]; then
67         echo "`date -u '+%b %e %T'`: Machine is ix86 (or equivalent)" >> $LOGFILE
68         MACHINE=i386
69         BUILDTARGET=i386-pc-linux-gnu
70         CFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
71         CXXFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
72   elif [ 'alpha' = $MACHINE ]; then
73         echo "`date -u '+%b %e %T'`: Machine is Alpha AXP" >> $LOGFILE
74         BUILDTARGET=alpha-unknown-linux-gnu
75         CFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
76         CXXFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
77   else
78         echo "`date -u '+%b %e %T'`: Can't determine your architecture - $MACHINE" >> $LOGFILE
79         exit 1
80   fi
81
82 # Define immediately
83 stdumount() {
84         umount $BASEDIR/build/dev/pts           2>/dev/null;
85         umount $BASEDIR/build/proc                      2>/dev/null;
86         umount $BASEDIR/build/install/mnt               2>/dev/null;
87         umount $BASEDIR/build/usr/src/cache     2>/dev/null;
88         umount $BASEDIR/build/usr/src/ccache    2>/dev/null;
89         umount $BASEDIR/build/usr/src/config    2>/dev/null;
90         umount $BASEDIR/build/usr/src/doc               2>/dev/null;
91         umount $BASEDIR/build/usr/src/html              2>/dev/null;
92         umount $BASEDIR/build/usr/src/langs     2>/dev/null;
93         umount $BASEDIR/build/usr/src/lfs               2>/dev/null;
94         umount $BASEDIR/build/usr/src/log               2>/dev/null;
95         umount $BASEDIR/build/usr/src/src               2>/dev/null;
96 }
97
98 exiterror() {
99         stdumount
100         for i in `seq 0 7`; do
101             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
102                 losetup -d /dev/loop${i} 2>/dev/null
103             fi;
104         done
105         echo "ERROR: $*"
106         echo "       Check $LOGFILE for errors if applicable"
107         exit 1
108 }
109
110 entershell() {
111         if [ ! -e $BASEDIR/build/usr/src/lfs/ ]; then
112                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/"
113         fi
114         echo "Entering to a shell inside LFS chroot, go out with exit"
115         chroot $LFS /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
116                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
117                 VERSION=$VERSION CONFIG_ROOT=$CONFIG_ROOT \
118                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
119                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
120                 CCACHE_DIR=/usr/src/ccache \
121                 CCACHE_HASHDIR=1 \
122                 KVER=$KVER \
123                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
124                 KGCC="ccache /usr/bin/gcc" \
125                 /tools/bin/bash
126         if [ $? -ne 0 ]; then
127                         exiterror "chroot error"
128         else
129                 stdumount
130         fi
131 }
132
133 prepareenv() {
134     ############################################################################
135     #                                                                          #
136     # Are we running the right shell?                                          #
137     #                                                                          #
138     ############################################################################
139     if [ ! "$BASH" ]; then
140         exiterror "BASH environment variable is not set.  You're probably running the wrong shell."
141     fi
142
143     if [ -z "${BASH_VERSION}" ]; then
144         exiterror "Not running BASH shell."
145     fi
146
147
148     ############################################################################
149     #                                                                          #
150     # Trap on emergency exit                                                   #
151     #                                                                          #
152     ############################################################################
153     trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
154
155
156     ############################################################################
157     #                                                                          #
158     # Resetting our nice level                                                 #
159     #                                                                          #
160     ############################################################################
161     echo "`date -u '+%b %e %T'`: Resetting our nice level to $NICE" | tee -a $LOGFILE
162     renice $NICE $$ > /dev/null
163     if [ `nice` != "$NICE" ]; then
164         exiterror "Failed to set correct nice level"
165     fi
166
167     ############################################################################
168     #                                                                          #
169     # Checking if running as root user                                         #
170     #                                                                          #
171     ############################################################################
172     echo "`date -u '+%b %e %T'`: Checking if we're running as root user" | tee -a $LOGFILE
173     if [ `id -u` != 0 ]; then
174         exiterror "Not building as root"
175     fi
176
177
178     ############################################################################
179     #                                                                          #
180     # Checking for necessary temporary space                                   #
181     #                                                                          #
182     ############################################################################
183     echo "`date -u '+%b %e %T'`: Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
184     BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
185     BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
186     if (( 2202000 > $BASE_ASPACE )); then
187         BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
188         if (( 2202000 - $BASE_USPACE > $BASE_ASPACE )); then
189                 exiterror "Not enough temporary space available, need at least 2.1GB on $BASE_DEV"
190         fi
191     fi
192
193     ############################################################################
194     #                                                                          #
195     # Building Linux From Scratch system                                       #
196     #                                                                          #
197     ############################################################################
198     echo "`date -u '+%b %e %T'`: Building Linux From Scratch system" | tee -a $LOGFILE
199
200     # Set umask
201     umask 022
202
203     # Set LFS Directory
204     LFS=$BASEDIR/build
205
206     # Check /tools symlink
207     if [ -h /tools ]; then
208         rm -f /tools
209     fi
210     if [ ! -a /tools ]; then
211         ln -s $BASEDIR/build/tools /
212     fi
213     if [ ! -h /tools ]; then
214         exiterror "Could not create /tools symbolic link."
215     fi
216
217     # Setup environment
218     set +h
219     LC_ALL=POSIX
220     export LFS LC_ALL CFLAGS CXXFLAGS
221     unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
222
223     # Make some extra directories
224     mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
225     mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
226     mkdir -p $BASEDIR/build/dev/pts $BASEDIR/build/proc $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
227
228     # Make all sources and proc available under lfs build
229     mount --bind /dev/pts        $BASEDIR/build/dev/pts
230     mount --bind /proc           $BASEDIR/build/proc
231     mount --bind $BASEDIR/cache  $BASEDIR/build/usr/src/cache
232     mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
233     mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
234     mount --bind $BASEDIR/doc    $BASEDIR/build/usr/src/doc
235     mount --bind $BASEDIR/html   $BASEDIR/build/usr/src/html
236     mount --bind $BASEDIR/langs  $BASEDIR/build/usr/src/langs
237     mount --bind $BASEDIR/lfs    $BASEDIR/build/usr/src/lfs
238     mount --bind $BASEDIR/log    $BASEDIR/build/usr/src/log
239     mount --bind $BASEDIR/src    $BASEDIR/build/usr/src/src
240
241     # Run LFS static binary creation scripts one by one
242     export CCACHE_DIR=$BASEDIR/ccache
243     export CCACHE_HASHDIR=1
244
245     # Remove pre-install list of installed files in case user erase some files before rebuild
246     rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
247 }
248
249
250 ############################################################################
251 #                                                                          #
252 # Necessary shell functions                                                #
253 #                                                                          #
254 ############################################################################
255 lfsmake1() {
256         if [ -f $BASEDIR/lfs/$1 ]; then
257                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
258                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
259                 if [ $? -ne 0 ]; then
260                         exiterror "Download error in $1"
261                 fi
262                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
263                 if [ $? -ne 0 ]; then
264                         exiterror "md5sum error in $1, check file in cache or signature"
265                 fi
266                 cd $BASEDIR/lfs && make -f $*   BUILDTARGET=$BUILDTARGET \
267                                                 MACHINE=$MACHINE \
268                                                 LFS_BASEDIR=$BASEDIR \
269                                                 ROOT=$LFS \
270                                                 KVER=$KVER \
271                                                 install >> $LOGFILE 2>&1
272                 if [ $? -ne 0 ]; then
273                         exiterror "Building $*";
274                 fi
275         else
276                 exiterror "No such file or directory: $BASEDIR/$1"
277         fi
278         return 0
279 }
280
281 lfsmake2() {
282         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
283                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
284                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
285                 if [ $? -ne 0 ]; then
286                         exiterror "Download error in $1"
287                 fi
288                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
289                 if [ $? -ne 0 ]; then
290                         exiterror "md5sum error in $1, check file in cache or signature"
291                 fi
292                 chroot $LFS /tools/bin/env -i   HOME=/root \
293                                                 TERM=$TERM PS1='\u:\w\$ ' \
294                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
295                                                 VERSION=$VERSION \
296                                                 CONFIG_ROOT=$CONFIG_ROOT \
297                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
298                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
299                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
300                                                 KVER=$KVER \
301                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
302                     /tools/bin/bash -x -c "cd /usr/src/lfs && \
303                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
304                 if [ $? -ne 0 ]; then
305                         exiterror "Building $*"
306                 fi
307         else
308                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
309         fi
310         return 0
311 }
312
313 ipcopmake() {
314         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
315                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
316                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
317                 if [ $? -ne 0 ]; then
318                         exiterror "Download error in $1"
319                 fi
320                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
321                 if [ $? -ne 0 ]; then
322                         exiterror "md5sum error in $1, check file in cache or signature"
323                 fi
324                 chroot $LFS /tools/bin/env -i   HOME=/root \
325                                                 TERM=$TERM PS1='\u:\w\$ ' \
326                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
327                                                 VERSION=$VERSION \
328                                                 CONFIG_ROOT=$CONFIG_ROOT \
329                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
330                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
331                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
332                                                 KVER=$KVER \
333                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
334                     /bin/bash -x -c "cd /usr/src/lfs && \
335                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
336                 if [ $? -ne 0 ]; then
337                         exiterror "Building $*"
338                 fi
339         else
340                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
341         fi
342         return 0
343 }
344
345 ipfiredist() {
346         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
347 #          if [ ! `ls -w1 $BASEDIR/packages/*.ipfire | grep $1` ]; then
348                 echo "`date -u '+%b %e %T'`: Packaging $1" | tee -a $LOGFILE
349                 chroot $LFS /tools/bin/env -i   HOME=/root \
350                                                 TERM=$TERM PS1='\u:\w\$ ' \
351                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
352                                                 VERSION=$VERSION \
353                                                 CONFIG_ROOT=$CONFIG_ROOT \
354                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
355                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
356                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
357                                                 KVER=$KVER \
358                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
359                     /bin/bash -x -c "cd /usr/src/lfs && \
360                     make -f $1 LFS_BASEDIR=/usr/src dist" >>$LOGFILE 2>&1
361                 if [ $? -ne 0 ]; then
362                         exiterror "Packaging $1"
363                 fi
364 #          else
365 #               echo "`date -u '+%b %e %T'`: Packaging: The package $1 already exists"
366 #          fi
367         else
368                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
369         fi
370         return 0
371 }
372
373
374 installmake() {
375         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
376                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
377                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
378                 if [ $? -ne 0 ]; then
379                         exiterror "Download error in $1"
380                 fi
381                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
382                 if [ $? -ne 0 ]; then
383                         exiterror "md5sum error in $1, check file in cache or signature"
384                 fi
385                 chroot $LFS /tools/bin/env -i   HOME=/root \
386                                                 TERM=$TERM PS1='\u:\w\$ ' \
387                                                 PATH=/usr/local/bin:/opt/$MACHINE-uClibc/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin \
388                                                 VERSION=$VERSION \
389                                                 CONFIG_ROOT=$CONFIG_ROOT \
390                                                 LFS_PASS="install" \
391                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
392                                                 CFLAGS="-Os" CXXFLAGS="-Os" \
393                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
394                                                 KVER=$KVER \
395                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
396                     /bin/bash -x -c "cd /usr/src/lfs && \
397                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
398                 if [ $? -ne 0 ]; then
399                         exiterror "Building $*"
400                 fi
401         else
402                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
403         fi
404         return 0
405 }
406
407 buildtoolchain() {
408     LOGFILE="$BASEDIR/log/_build.toolchain.log"
409     export LOGFILE
410     echo -ne "`date -u '+%b %e %T'`: Stage1 toolchain build \n" | tee -a $LOGFILE
411     # Build sed now, as we use some extensions
412     ORG_PATH=$PATH
413     NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
414     export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
415     lfsmake1 ccache
416     lfsmake1 sed        LFS_PASS=1
417     lfsmake1 m4         LFS_PASS=1
418     lfsmake1 bison      LFS_PASS=1
419     lfsmake1 flex       LFS_PASS=1
420     lfsmake1 binutils   LFS_PASS=1
421     lfsmake1 gcc        LFS_PASS=1
422     export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
423     
424     lfsmake1 linux
425     lfsmake1 tcl
426     lfsmake1 expect
427     lfsmake1 glibc
428     lfsmake1 dejagnu
429     lfsmake1 gcc        LFS_PASS=2
430     lfsmake1 binutils   LFS_PASS=2
431     lfsmake1 gawk
432     lfsmake1 coreutils
433     lfsmake1 bzip2
434     lfsmake1 gzip
435     lfsmake1 diffutils
436     lfsmake1 findutils
437     lfsmake1 make
438     lfsmake1 grep
439     lfsmake1 sed        LFS_PASS=2
440     lfsmake1 m4         LFS_PASS=2
441     lfsmake1 bison      LFS_PASS=2
442     lfsmake1 flex       LFS_PASS=2
443     lfsmake1 gettext
444     lfsmake1 ncurses
445     lfsmake1 patch
446     lfsmake1 tar
447     lfsmake1 texinfo
448     lfsmake1 bash
449     lfsmake1 util-linux
450     lfsmake1 perl
451     export PATH=$ORG_PATH
452 }
453
454 buildbase() {
455     LOGFILE="$BASEDIR/log/_build.base.log"
456     export LOGFILE
457     echo -ne "`date -u '+%b %e %T'`: Stage2 linux base build \n" | tee -a $LOGFILE
458     # Run LFS dynamic binary creation scripts one by one
459     lfsmake2 stage2
460     lfsmake2 makedev
461     lfsmake2 linux
462     lfsmake2 man-pages
463     lfsmake2 glibc
464     lfsmake2 binutils
465     lfsmake2 gcc
466     lfsmake2 coreutils
467     lfsmake2 zlib
468     lfsmake2 mktemp
469     lfsmake2 iana-etc
470     lfsmake2 findutils
471     lfsmake2 gawk
472     lfsmake2 ncurses
473     lfsmake2 vim
474     lfsmake2 m4
475     lfsmake2 bison
476     lfsmake2 less
477     lfsmake2 groff
478     lfsmake2 sed
479     lfsmake2 flex
480     lfsmake2 gettext
481     lfsmake2 net-tools
482     lfsmake2 inetutils
483     lfsmake2 perl
484     lfsmake2 texinfo
485     lfsmake2 autoconf
486     lfsmake2 automake
487     lfsmake2 bash
488     lfsmake2 file
489     lfsmake2 libtool
490     lfsmake2 bzip2
491     lfsmake2 diffutils
492     lfsmake2 ed
493     lfsmake2 kbd
494     lfsmake2 e2fsprogs
495     lfsmake2 grep
496     if [ 'i386' = $MACHINE ]; then 
497         lfsmake2 grub
498     elif [ 'alpha' = $MACHINE ]; then 
499         lfsmake2 aboot
500     fi
501     lfsmake2 gzip
502     lfsmake2 man
503     lfsmake2 make
504     lfsmake2 modutils
505     lfsmake2 patch
506     lfsmake2 procinfo
507     lfsmake2 procps
508     lfsmake2 psmisc
509     lfsmake2 shadow
510     lfsmake2 sysklogd
511     lfsmake2 sysvinit
512     lfsmake2 tar
513     lfsmake2 util-linux
514 }
515
516 buildipcop() {
517   # Run IPFire make scripts one by one
518   LOGFILE="$BASEDIR/log/_build.ipfire.log"
519   export LOGFILE
520   echo -ne "`date -u '+%b %e %T'`: Stage3 $NAME build \n" | tee -a $LOGFILE
521
522   # Build these first as some of the kernel packages below rely on 
523   # these for some of their client program functionality 
524   ipcopmake configroot
525   ipcopmake dhcp
526   ipcopmake dhcpcd
527   ipcopmake libusb
528   ipcopmake libpcap
529   ipcopmake linux-atm
530   ipcopmake ppp
531   ipcopmake rp-pppoe
532   ipcopmake unzip
533   # Do SMP now
534   if [ 'i386' = $MACHINE ]; then 
535         # abuse the SMP flag, and make an minimal installer kernel first
536         # so that the boot floppy always works.....
537         ipcopmake linux         LFS_PASS=ipfire SMP=installer
538         ipcopmake linux         LFS_PASS=ipfire SMP=1
539         ipcopmake 3cp4218       SMP=1
540         ipcopmake amedyn        SMP=1
541         ipcopmake cxacru        SMP=1
542         ipcopmake eagle         SMP=1
543
544         # These are here because they have i386 only binary libraries
545         # included in the package.
546         ipcopmake cnx_pci       SMP=1
547         ipcopmake fcdsl         SMP=1
548         ipcopmake fcdsl2        SMP=1
549         ipcopmake fcdslsl       SMP=1
550         ipcopmake fcdslusb      SMP=1
551         ipcopmake fcdslslusb    SMP=1
552         ipcopmake fcpci SMP=1
553         ipcopmake fcclassic     SMP=1
554         ipcopmake pulsar        SMP=1
555         ipcopmake unicorn       SMP=1
556         ipcopmake promise-sata-300-tx SMP=1
557   fi
558
559   ipcopmake linux       LFS_PASS=ipfire
560   ipcopmake 3cp4218     
561   ipcopmake amedyn      
562   ipcopmake cxacru      
563   ipcopmake eciadsl     
564   ipcopmake eagle       
565   ipcopmake speedtouch  
566   if [ 'i386' = $MACHINE ]; then 
567         # These are here because they have i386 only binary libraries
568         # included in the package.
569         ipcopmake cnx_pci       
570         ipcopmake fcdsl         
571         ipcopmake fcdsl2        
572         ipcopmake fcdslsl       
573         ipcopmake fcdslusb      
574         ipcopmake fcdslslusb 
575         ipcopmake fcpci
576         ipcopmake fcclassic
577         ipcopmake pulsar        
578         ipcopmake unicorn
579         ipcopmake promise-sata-300-tx
580   fi
581
582   ipcopmake pcmcia-cs
583   ipcopmake expat
584   ipcopmake gdbm
585   ipcopmake gmp
586   ipcopmake openssl
587   ipcopmake python
588   ipcopmake libnet
589   ipcopmake libpng
590   ipcopmake libtiff
591   ipcopmake libjpeg
592   ipcopmake lcms
593   ipcopmake libmng
594   ipcopmake freetype
595   ipcopmake gd
596   ipcopmake popt
597   ipcopmake slang
598   ipcopmake newt
599   ipcopmake libcap
600   ipcopmake pciutils
601   ipcopmake pcre
602   ipcopmake readline
603   ipcopmake libxml2
604   ipcopmake berkeley
605   ipcopmake BerkeleyDB ## The Perl module
606   ipcopmake mysql
607   ipcopmake saslauthd PASS=1
608   ipcopmake openldap
609   #ipcopmake apache
610   ipcopmake apache2
611   ipcopmake php
612   ipcopmake arping
613   ipcopmake beep
614   ipcopmake bind
615   ipcopmake capi4k-utils
616   ipcopmake cdrtools
617   ipcopmake dnsmasq
618   ipcopmake dosfstools
619   ipcopmake ethtool
620   ipcopmake ez-ipupdate
621   ipcopmake fcron
622   ipcopmake perl-GD
623   ipcopmake gnupg
624   ipcopmake hdparm
625   ipcopmake ibod
626   ipcopmake initscripts
627   ipcopmake iptables
628   ipcopmake ipac-ng
629   ipcopmake ipaddr
630   ipcopmake iproute2
631   ipcopmake iptstate
632   ipcopmake iputils
633   ipcopmake l7-protocols
634   ipcopmake isapnptools
635   ipcopmake isdn4k-utils
636   ipcopmake kudzu
637   ipcopmake logrotate
638   ipcopmake logwatch
639   ipcopmake mingetty
640   ipcopmake misc-progs
641   ipcopmake mtools
642   ipcopmake nano
643   ipcopmake nash
644   ipcopmake nasm
645   ipcopmake URI
646   ipcopmake HTML-Tagset
647   ipcopmake HTML-Parser
648   ipcopmake Compress-Zlib
649   ipcopmake Digest
650   ipcopmake Digest-SHA1
651   ipcopmake Digest-HMAC
652   ipcopmake libwww-perl
653   ipcopmake Net-DNS
654   ipcopmake Net-IPv4Addr
655   ipcopmake Net_SSLeay
656   ipcopmake IO-Stringy
657   ipcopmake Unix-Syslog
658   ipcopmake Mail-Tools
659   ipcopmake MIME-Tools
660   ipcopmake Net-Server
661   ipcopmake Convert-TNEF
662   ipcopmake Convert-UUlib
663   ipcopmake Archive-Tar
664   ipcopmake Archive-Zip
665   ipcopmake Text-Tabs+Wrap
666   ipcopmake Locale-Country
667   ipcopmake GeoIP
668   ipcopmake fwhits
669   ipcopmake noip_updater
670   ipcopmake ntp
671   ipcopmake oinkmaster
672   ipcopmake openssh
673   ipcopmake openswan
674   ipcopmake pptpclient
675   ipcopmake rrdtool
676   ipcopmake setserial
677   ipcopmake setup
678   ipcopmake snort
679   #ipcopmake speedycgi
680   ipcopmake squid
681   ipcopmake squid-graph
682   ipcopmake squidguard
683   ipcopmake tcpdump
684   ipcopmake traceroute
685   ipcopmake vlan
686   ipcopmake wireless
687   ipcopmake libsafe
688   ipcopmake 3c5x9setup
689 #  echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
690   ipcopmake pakfire
691   ipcopmake startscripts
692 ## Zuerst die Libs und dann die Programme. Ordnung muss sein!
693   ipcopmake java
694   ipcopmake bootsplash
695   ipcopmake spandsp
696   ipcopmake lzo
697   ipcopmake openvpn
698   ipcopmake pkg-config
699   ipcopmake glib
700   ipcopmake xampp
701   ipcopmake pam
702   ipcopmake pammysql
703   ipcopmake saslauthd PASS=2
704   ipcopmake xinetd
705   ipcopmake ghostscript
706   ipcopmake cups
707 #  ipcopmake lpd ## Im Moment aus, da CUPS vorhanden ist.
708   ipcopmake samba
709   ipcopmake sudo
710   ipcopmake mc
711 #  ipcopmake pwlib
712 #  ipcopmake openh323
713   ipcopmake wget
714   ipcopmake wput
715   ipcopmake bridge-utils
716   ipcopmake screen
717   ipcopmake hddtemp
718   ipcopmake smartmontools
719   ipcopmake htop
720   ipcopmake lynx
721   echo -ne "`date -u '+%b %e %T'`: Building ### Mailserver ### \n" | tee -a $LOGFILE
722   ipcopmake postfix
723   ipcopmake procmail
724   ipcopmake fetchmail
725   ipcopmake cyrusimap
726   ipcopmake web-cyradm
727   ipcopmake mailx
728   ipcopmake clamav
729   ipcopmake razor
730   ipcopmake spamassassin
731 #  ipcopmake amavisd
732   echo -ne "`date -u '+%b %e %T'`: Building ### VoIP-Server ### \n" | tee -a $LOGFILE
733   ipcopmake stund
734   ipcopmake zaptel
735   ipcopmake libpri
736   ipcopmake bristuff
737   ipcopmake asterisk
738   ipcopmake mpg123
739   echo -ne "`date -u '+%b %e %T'`: Building ### Multimedia-Server ### \n" | tee -a $LOGFILE
740   ipcopmake libmad
741   ipcopmake libogg
742   ipcopmake libvorbis
743   ipcopmake lame
744   ipcopmake xvid
745   ipcopmake mpeg2dec
746   ipcopmake ffmpeg
747   ipcopmake sox
748   ipcopmake gnump3d
749   ipcopmake videolan
750   echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE
751   ipcopmake applejuice
752   ipcopmake ocaml
753   ipcopmake mldonkey
754 #  ipcopmake edonkeyclc
755 #  ipcopmake sane
756   echo -ne "`date -u '+%b %e %T'`: Building ### Net-Tools ### \n" | tee -a $LOGFILE
757   ipcopmake ntop
758 #  ipcopmake rsync
759   ipcopmake tcpwrapper
760   ipcopmake portmap
761   ipcopmake nfs
762   ipcopmake nmap
763   ipcopmake mbmon
764   ipcopmake iftop
765   ipcopmake ncftp
766   ipcopmake cftp
767   ipcopmake etherwake
768   ipcopmake ethereal
769   ipcopmake tftp-hpa
770   #ipcopmake subversion
771   ipcopmake iptraf
772   ipcopmake nagios
773   ipcopmake yasuc
774 #  ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
775 }
776
777 buildinstaller() {
778   # Run installer scripts one by one
779   LOGFILE="$BASEDIR/log/_build.installer.log"
780   export LOGFILE
781   echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
782   if [ 'i386' = $MACHINE ]; then 
783         ipcopmake syslinux
784         ipcopmake as86
785         ipcopmake mbr
786         ipcopmake uClibc
787   fi
788   installmake busybox
789   installmake sysvinit
790   installmake e2fsprogs
791   installmake misc-progs
792   installmake slang
793   installmake util-linux
794   installmake newt
795   installmake pciutils
796   installmake pcmcia-cs
797   installmake kbd
798   installmake installer
799   installmake scsi.img
800   installmake driver.img
801   installmake initrd
802   installmake boot.img
803 }
804
805 buildpackages() {
806   LOGFILE="$BASEDIR/log/_build.packages.log"
807   export LOGFILE
808   echo "... see detailed log in _build.*.log files" >> $LOGFILE
809   echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
810   # Strip files
811   echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
812   find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
813         ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
814          -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
815   # add -ls before -exec if you want to verify what files are stripped
816
817   find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
818         -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
819   # there add -v to strip to verify
820
821   if [ 'i386' = $MACHINE ]; then
822         # Create fcdsl packages
823         echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
824         cp $LFS/install/images/fcdsl/license.txt $LFS  >> $LOGFILE 2>&1
825         touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
826         cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
827                 lib/modules/$KVER/misc/fcdsl*.o.gz \
828                 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
829                 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
830                 etc/fcdsl/fcdsl*.conf \
831                 etc/drdsl/{drdsl,drdsl.ini} \
832                 license.txt \
833                 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
834         rm -f $LFS/license.txt >> $LOGFILE 2>&1
835         cd $BASEDIR
836   fi
837   
838   # Generating list of packages used
839   echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
840   rm -f $BASEDIR/doc/packages-list
841   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
842         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
843                 echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
844         fi
845   done
846   echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
847   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipfire$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|^ipfire-logs' \
848         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
849   rm -f $BASEDIR/doc/packages-list
850   # packages-list.txt is ready to be displayed for wiki page
851
852   # Create ISO for CDRom and USB-superfloppy
853   ipcopmake cdrom
854   rm -f $LFS/install/images/*usb*
855   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
856
857   ipfirepackages
858
859   # Cleanup
860   stdumount
861   rm -rf $BASEDIR/build/tmp/*
862
863   # Generating total list of files
864   echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
865   rm -f $BASEDIR/log/FILES
866   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
867         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
868                 echo "##" >>$BASEDIR/log/FILES
869                 echo "## `basename $i`" >>$BASEDIR/log/FILES
870                 echo "##" >>$BASEDIR/log/FILES
871                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
872         fi
873   done
874   cd $BASEDIR/packages; ls -w1 *.ipfire | awk -F ".ipfire" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
875   echo -n "###EOF###" >> $BASEDIR/packages/packages_list.txt
876
877   cd $PWD
878
879 }
880
881 ipfirepackages() {
882   if [ -d "$BASEDIR/packages" ]; then
883           for i in `ls $BASEDIR/packages`; do
884                 touch $BASEDIR/build/install/packages/$i.empty
885           done
886   fi
887   ipfiredist amavisd
888   ipfiredist applejuice
889   ipfiredist asterisk
890   ipfiredist clamav
891   ipfiredist cups
892   ipfiredist cyrusimap
893   ipfiredist fetchmail
894   ipfiredist ffmpeg
895   ipfiredist gnump3d
896   ipfiredist iptraf
897   ipfiredist java
898   ipfiredist lame
899   ipfiredist libmad
900   ipfiredist libogg
901   ipfiredist libtiff
902   ipfiredist libvorbis
903   ipfiredist libxml2
904   ipfiredist mailx
905   ipfiredist mldonkey
906   ipfiredist mpeg2dec
907   ipfiredist nagios
908   ipfiredist nfs
909   ipfiredist nmap
910   ipfiredist ntop
911   ipfiredist portmap
912   ipfiredist postfix
913   ipfiredist procmail
914   ipfiredist samba
915   ipfiredist sox
916   ipfiredist spamassassin
917   ipfiredist subversion
918   ipfiredist videolan
919   ipfiredist web-cyradm
920   ipfiredist xampp
921 #  ipfiredist xinetd
922   ipfiredist xvid
923   ipfiredist yasuc
924   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
925   mv -f $LFS/install/packages/*.{ipfire,md5} $BASEDIR/packages >> $LOGFILE 2>&1
926   rm -rf  $BASEDIR/build/install/packages/*
927 }
928
929 update_logs() {
930         tar cfz log/ipfire-logs-`date +'%Y-%m-%d-%H:%M'`.tgz log/_build.*
931         rm -f log/_build.*
932 }
933
934 # See what we're supposed to do
935 case "$1" in 
936 build)
937         BUILDMACHINE=`uname -m`
938         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
939         #only restore on a clean disk
940         if [ ! -f log/perl-*-tools ]; then
941                 if [ ! -n "$PACKAGE" ]; then
942                         echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
943                         prepareenv
944                         buildtoolchain
945                 else
946                         PACKAGENAME=${PACKAGE%.tar.gz}
947                         echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
948                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
949                                 tar zxf $PACKAGE
950                                 prepareenv
951                         else
952                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
953                         fi
954                 fi
955         else
956                 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
957                 prepareenv
958         fi
959
960         buildbase
961         buildipcop
962
963         # Setzen des IPFire Builds
964         if [ "$FIREBUILD" ]; then
965                 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
966         else
967                 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
968         fi
969
970         buildinstaller
971         buildpackages
972         ;;
973 shell)
974         # enter a shell inside LFS chroot
975         # may be used to changed kernel settings
976         prepareenv
977         entershell
978         ;;
979 changelog)
980         echo -n "Loading new Changelog from SVN: "
981         svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
982         echo "Finished!"
983         ;;
984 check)
985         echo "Checking sources files availability on the web"
986         if [ ! -d $DIR_CHK ]; then
987                 mkdir -p $DIR_CHK
988         fi
989         FINISHED=0
990         cd $BASEDIR/lfs
991         for c in `seq $MAX_RETRIES`; do
992                 if (( FINISHED==1 )); then
993                         break
994                 fi
995                 FINISHED=1
996                 cd $BASEDIR/lfs
997                 for i in *; do
998                         if [ -f "$i" -a "$i" != "Config" ]; then
999                                 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
1000                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" check
1001                                 if [ $? -ne 0 ]; then
1002                                         echo "Check : wget error in lfs/$i"
1003                                         FINISHED=0
1004                                 fi
1005                         fi
1006                 done
1007         done
1008         cd -
1009         ;;
1010 checkclean)
1011         echo "Erasing sources files availability tags"
1012         rm -rf $DIR_CHK/*
1013         ;;
1014 clean)
1015         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1016                 $LOSETUP -d $i 2>/dev/null
1017         done
1018         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1019                 umount $i
1020         done
1021         stdumount
1022         for i in `seq 0 7`; do
1023             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1024                 umount /dev/loop${i}     2>/dev/null;
1025                 losetup -d /dev/loop${i} 2>/dev/null;
1026             fi;
1027         done
1028         rm -rf $BASEDIR/build
1029         rm -rf $BASEDIR/cdrom
1030         rm -rf $BASEDIR/packages
1031         rm -rf $BASEDIR/log
1032         if [ -h /tools ]; then
1033                 rm -f /tools
1034         fi
1035         ;;
1036 newpak)
1037         # create structure for a new package
1038         echo -e "Name of the new package: $2"
1039         if [ ! -f "lfs/$2" ]; then
1040                 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
1041                 mkdir -p src/paks/$2
1042                 cd src/paks/$2
1043                 echo "`date -u '+%b %e %T'`: Creating files"
1044                 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
1045
1046                 touch ROOTFILES
1047                 touch {,un}install.sh
1048         ## install.sh
1049                 echo '#!/bin/bash' > install.sh
1050                 echo '#' >> install.sh
1051                 echo '#################################################################' >> install.sh
1052                 echo '#                                                               #' >> install.sh
1053                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
1054                 echo '#                                                               #' >> install.sh
1055                 echo '#################################################################' >> install.sh
1056                 echo '#' >> install.sh
1057                 echo '# Extract the files' >> install.sh
1058                 echo 'tar xfz files.tgz -C /' >> install.sh
1059                 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
1060         ## uninstall.sh
1061                 echo '#!/bin/bash' > uninstall.sh
1062                 echo '#################################################################' >> uninstall.sh
1063                 echo '#                                                               #' >> uninstall.sh
1064                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
1065                 echo '#                                                               #' >> uninstall.sh
1066                 echo '#################################################################' >> uninstall.sh
1067                 echo '#' >> uninstall.sh
1068                 echo '# Delete the files' >> uninstall.sh
1069                 echo '## Befehl fehlt noch' >> uninstall.sh
1070                 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
1071                 echo "`date -u '+%b %e %T'`: Adding files to SVN"
1072                 cd - && svn add lfs/$2 && svn add src/paks/$2
1073
1074                 echo -n "Do you want to remove the folders? [y/n]"
1075                 read REM
1076                 if  [ "$REM" == "y" ]; then
1077                         echo "Removing the folders..."
1078                         svn del src/paks/$2 --force
1079                 else
1080                         echo "Folders are kept."
1081                 fi
1082         else
1083                 echo "$2 already exists"
1084         fi
1085         exit 0
1086         ;;
1087 prefetch)
1088         if [ ! -d $BASEDIR/cache ]; then
1089                 mkdir $BASEDIR/cache
1090         fi
1091         mkdir -p $BASEDIR/log
1092         echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1093         FINISHED=0
1094         cd $BASEDIR/lfs
1095         for c in `seq $MAX_RETRIES`; do
1096                 if (( FINISHED==1 )); then 
1097                         break
1098                 fi
1099                 FINISHED=1
1100                 cd $BASEDIR/lfs
1101                 for i in *; do
1102                         if [ -f "$i" -a "$i" != "Config" ]; then
1103                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1104                                 if [ $? -ne 0 ]; then
1105                                         echo "Prefetch : wget error in lfs/$i"
1106                                         FINISHED=0
1107                                 else
1108                                         if [ $c -eq 1 ]; then
1109                                                 echo "Prefetch : lfs/$i files loaded"
1110                                         fi
1111                                 fi
1112                         fi
1113                 done
1114         done
1115         echo "Prefetch : verifying md5sum"
1116         ERROR=0
1117         for i in *; do
1118                 if [ -f "$i" -a "$i" != "Config" ]; then
1119                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1120                         if [ $? -ne 0 ]; then
1121                                 echo "md5 difference in lfs/$i"
1122                                 ERROR=1
1123                         fi
1124                 fi
1125         done
1126         if [ $ERROR -eq 0 ]; then
1127                 echo "Prefetch : all files md5sum match"
1128         fi
1129         cd -
1130         ;;
1131 toolchain)
1132         prepareenv
1133         buildtoolchain
1134         BUILDMACHINE=`uname -m`
1135         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1136         test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1137         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1138                 build/{bin,etc,usr/bin,usr/local} \
1139                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1140                 log >> $LOGFILE
1141         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1142                 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1143         stdumount
1144         ;;
1145 gettoolchain)
1146         BUILDMACHINE=`uname -m`
1147         # arbitrary name to be updated in case of new toolchain package upload
1148         PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
1149         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1150                 URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1151                 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1152                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1153                 cd $BASEDIR/cache/toolchains
1154                 wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
1155                 if [ $? -ne 0 ]; then
1156                         echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1157                 else
1158                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1159                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1160                         else
1161                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1162                         fi
1163                 fi
1164         else
1165                 echo "Toolchain is already downloaded. Exiting..."
1166         fi
1167         ;;
1168 sources-iso)
1169         prepareenv
1170         echo "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1171         chroot $LFS /tools/bin/env -i   HOME=/root \
1172         TERM=$TERM PS1='\u:\w\$ ' \
1173         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1174         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1175         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1176         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1177         stdumount
1178         ;;
1179 svn)
1180         case "$2" in
1181           update|up)
1182                 # clear
1183                 echo -n "Load the latest source files..."
1184                 svn update >> $PWD/log/_build.svn.update.log
1185                 if [ $? -eq 0 ]; then
1186                         echo ".Done!"
1187                 else
1188                         echo ".Fail!"
1189                         exit 1
1190                 fi
1191                 echo -n "Write the svn info to a file..."
1192                 svn info > $PWD/svn_status
1193                 if [ "$?" -eq "0" ]; then
1194                         echo ".Done!"
1195                 else
1196                         echo ".Fail!"
1197                         exit 1
1198                 fi
1199                 chmod 755 $0
1200                 tail log/_build.svn.update.log
1201                 exit 0
1202           ;;
1203           commit|ci)
1204                 clear
1205                 if [ -e /sbin/yast ]; then
1206                         $0 changelog
1207                 fi
1208                 echo "Upload the changed files..."
1209                 sleep 1
1210                 IPFIRE_SVN_MESSAGE=/tmp/ipfire-svn-co-message.txt
1211                 rm -f $IPFIRE_SVN_MESSAGE
1212                 mcedit $IPFIRE_SVN_MESSAGE
1213                 svn commit -F $IPFIRE_SVN_MESSAGE
1214                 rm -f $IPFIRE_SVN_MESSAGE
1215                 $0 svn up
1216           ;;
1217           dist)
1218                 #$0 svn up
1219                 echo -ne "Download source package from svn..."
1220                 svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
1221                 if [ "$?" -eq "0" ]; then
1222                         echo ".Done!"
1223                 else
1224                         echo ".Fail!"
1225                         exit 1
1226                 fi
1227                 echo -n "Compress files..."
1228                 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
1229                 if [ "$?" -eq "0" ]; then
1230                         echo ".Done!"
1231                 else
1232                         echo ".Fail!"
1233                         exit 1
1234                 fi
1235                 echo -n "Cleanup..."
1236                 rm ipfire-source/ -r
1237                 if [ "$?" -eq "0" ]; then
1238                         echo ".Done!"
1239                 else
1240                         echo ".Fail!"
1241                         exit 1
1242                 fi
1243           ;;
1244           diff)
1245                 echo -ne "Make a local diff to last svn revision..."
1246                 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1247                 if [ "$?" -eq "0" ]; then
1248                         echo ".Done!"
1249                 else
1250                         echo ".Fail!"
1251                         exit 1
1252                 fi
1253                 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1254           ;;
1255         esac
1256         ;;
1257 make-config)
1258         echo -e "This is for creating your configuration..."
1259         echo -e "We will need some input:"
1260         echo -e ""
1261         echo -n "FTP-DOMAIN FOR THE ISO: "
1262         read IPFIRE_FTP_URL_EXT
1263         echo -n "PATH FOR $IPFIRE_FTP_URL_EXT: "
1264         read IPFIRE_FTP_PATH_EXT
1265         echo -n "USERNAME FOR $IPFIRE_FTP_URL_EXT: "
1266         read IPFIRE_FTP_USER_EXT
1267         echo -n "PASSWORD FOR $IPFIRE_FTP_URL_EXT: "
1268         read -s IPFIRE_FTP_PASS_EXT
1269         echo ""
1270         echo "(You can leave this empty if the cache-server is the same as your iso-server.)"
1271         echo -n "FTP-DOMAIN FOR THE CACHE: "
1272         read IPFIRE_FTP_URL_INT
1273         echo -n "PATH FOR $IPFIRE_FTP_URL_INT: "
1274         read IPFIRE_FTP_PATH_INT
1275         if [ $IPFIRE_FTP_URL_INT ]; then
1276                 echo -n "USERNAME FOR $IPFIRE_FTP_URL_INT: "
1277                 read IPFIRE_FTP_USER_INT
1278                 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_INT: "
1279                 read -s IPFIRE_FTP_PASS_INT
1280         else
1281                 IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_EXT
1282                 IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_EXT
1283                 IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_EXT
1284                 echo "USERNAME FOR $IPFIRE_FTP_URL_INT: $IPFIRE_FTP_USER_INT"
1285                 echo "PASSWORD FOR $IPFIRE_FTP_URL_INT: !HIDDEN!"
1286         fi
1287         echo ""
1288         echo "(You can leave this empty if the pak-server is the same as your iso-server.)"
1289         echo -n "FTP-DOMAIN FOR THE PAKS: "
1290         read IPFIRE_FTP_URL_PAK
1291         echo -n "PATH FOR $IPFIRE_FTP_URL_PAK: "
1292         read IPFIRE_FTP_PATH_PAK
1293         if [ $IPFIRE_FTP_URL_PAK ]; then
1294                 echo -n "USERNAME FOR $IPFIRE_FTP_URL_PAK: "
1295                 read IPFIRE_FTP_USER_PAK
1296                 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_PAK: "
1297                 read -s IPFIRE_FTP_PASS_PAK
1298         else
1299                 IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_EXT
1300                 IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_EXT
1301                 IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_EXT
1302                 echo "USERNAME FOR $IPFIRE_FTP_URL_PAK: $IPFIRE_FTP_USER_PAK"
1303                 echo "PASSWORD FOR $IPFIRE_FTP_URL_PAK: !HIDDEN!"
1304         fi
1305         echo ""
1306         echo -e "ONE OR MORE EMAIL ADDRESS(ES) TO WHICH THE REPORTS WILL BE SENT"
1307         echo -e "(seperated by comma)"
1308         read IPFIRE_MAIL_REPORT
1309         echo -n "EMAIL FROM: "
1310         read IPFIRE_MAIL_FROM
1311         echo -n "EMAIL SERVER: "
1312         read IPFIRE_MAIL_SERVER
1313         echo -n "LOGIN TO MAIL SERVER: "
1314         read IPFIRE_MAIL_USER
1315         echo -n "MAIL PASSWORD: "
1316         read -s IPFIRE_MAIL_PASS
1317         echo -n "Saving..."
1318         for i in `seq 20`; do
1319                 sleep 0.1; echo -n "."
1320         done
1321         echo ".Finished!"
1322         cat <<END > .config
1323 ### ISO server
1324 IPFIRE_FTP_URL_EXT=$IPFIRE_FTP_URL_EXT
1325 IPFIRE_FTP_PATH_EXT=$IPFIRE_FTP_PATH_EXT
1326 IPFIRE_FTP_USER_EXT=$IPFIRE_FTP_USER_EXT
1327 IPFIRE_FTP_PASS_EXT=$IPFIRE_FTP_PASS_EXT
1328 ### cache server
1329 IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_INT
1330 IPFIRE_FTP_PATH_INT=$IPFIRE_FTP_PATH_INT
1331 IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_INT
1332 IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_INT
1333 ### paks server
1334 IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_PAK
1335 IPFIRE_FTP_PATH_PAK=$IPFIRE_FTP_PATH_PAK
1336 IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_PAK
1337 IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_PAK
1338 ### mail reports
1339 IPFIRE_MAIL_REPORT=$IPFIRE_MAIL_REPORT
1340 IPFIRE_MAIL_FROM=$IPFIRE_MAIL_FROM
1341 IPFIRE_MAIL_SERVER=$IPFIRE_MAIL_SERVER
1342 IPFIRE_MAIL_USER=$IPFIRE_MAIL_USER
1343 IPFIRE_MAIL_PASS=$IPFIRE_MAIL_PASS
1344 END
1345         ;;
1346 sync)
1347         echo -e "Syncing cache to ftp:"
1348 #       rm -f doc/packages-to-remove-from-ftp
1349         ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > ftplist
1350         for i in `ls -w1 cache/`; do
1351                 grep $i ftplist
1352                 if [ "$?" -ne "0" ]; then
1353                         ncftpput -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ cache/$i
1354                         if [ "$?" -eq "0" ]; then
1355                                 echo -e "$i was successfully uploaded to the ftp server."
1356                         else
1357                                 echo -e "There was an error while uploading $i to the ftp server."
1358                         fi
1359                 fi
1360         done
1361 #       for i in `cat ftplist`; do
1362 #               ls -w1 cache/ | grep $i
1363 #               if [ "$?" -eq "1" ]; then
1364 #                       echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1365 #               fi
1366 #       done
1367         rm -f ftplist
1368         ;;
1369 upload)
1370         case "$2" in
1371           iso)
1372                 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
1373                 cat <<EOF > .ftp-commands
1374 mkdir $IPFIRE_FTP_PATH_EXT
1375 ls -lah
1376 quit
1377 EOF
1378                 ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
1379                 rm -f .ftp-commands
1380                 md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
1381                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso
1382                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso.md5
1383                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-source-r$SVN_REVISION.tar.gz
1384                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ svn_status
1385                 if [ "$?" -eq "0" ]; then
1386                         echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
1387                 else
1388                         echo -e "There was an error while uploading the iso to the ftp server."
1389                         exit 1
1390                 fi
1391                 if [ "$3" = "--with-sources-cd" ]; then
1392                         ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-sources-cd-$VERSION.$MACHINE.iso
1393                 fi
1394                 ;;
1395           paks)
1396                 cat <<EOF > .ftp-commands
1397 mkdir $IPFIRE_FTP_PATH_PAK
1398 ls -lah
1399 quit
1400 EOF
1401                 ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
1402                 rm -f .ftp-commands
1403                 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
1404                 if [ "$?" -eq "0" ]; then
1405                         echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
1406                 else
1407                         echo -e "There was an error while uploading the packages to the ftp server."
1408                         exit 1
1409                 fi
1410           ;;
1411         esac
1412         ;;
1413 build-only)
1414         rm -f $BASEDIR/log/$2*
1415         BUILDMACHINE=`uname -m`
1416         prepareenv
1417         ipcopmake $2
1418         ;;
1419 build-silent)
1420         screen -dmS ipfire $0 build
1421         echo "Build started... This will take a while!"
1422         echo "You can see the status with 'screen -x ipfire'."
1423         ;;
1424 mail)
1425         chmod 755 tools/sendEmail
1426         ATTACHMENT=/tmp/ipfire-build-logs-R$SVN_REVISION.tar.gz
1427         if [ "$2" = "ERROR" ]; then
1428                 SUBJECT="ERROR: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1429                 echo "ERROR: $0 build!"
1430                 cat <<END > /tmp/ipfire_mail_body
1431 When I was building IPFire on `hostname`, I have found an ERROR!
1432 Here you can see the logs and detect the reason for this error.
1433
1434 Best Regards
1435 Your IPFire-Build-Script
1436 END
1437         fi
1438         if [ "$2" = "SUCCESS" ]; then
1439                 SUBJECT="SUCCESS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1440                 cat <<END > /tmp/ipfire_mail_body
1441 Building IPFire on `hostname` in Revision $SVN_REVISION was successfull!
1442 You can find the ISO on your ftp server.
1443
1444 Statistics:
1445 -----------
1446 Started:        $IPFIRE_START_TIME
1447 Finished:       `date`
1448
1449 Best Regards
1450 Your IPFire-Build-Script
1451 END
1452         fi
1453         if [ "$2" = "SVNUPDATE" ]; then
1454                 SUBJECT="SVNUPDATE: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1455                 echo "ERROR: $0 svn up!"
1456                 cat <<END > /tmp/ipfire_mail_body
1457 When I was downloading the latest svn source,
1458 I have found an ERROR!
1459 Here you can see the logs and detect the reason for this error.
1460
1461 Best Regards
1462 Your IPFire-Build-Script
1463 END
1464         fi
1465
1466         if [ "$2" = "SVNDIST" ]; then
1467                 SUBJECT="SVNDIST: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1468                 echo "ERROR: $0 svn dist!"
1469                 cat <<END > /tmp/ipfire_mail_body
1470 When I was exporting the latest svn source,
1471 I have found an ERROR!
1472 Here you can see the logs and detect the reason for this error.
1473
1474 Best Regards
1475 Your IPFire-Build-Script
1476 END
1477         fi
1478
1479         if [ "$2" = "PREFETCH" ]; then
1480                 SUBJECT="PREFETCH: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1481                 echo "ERROR: $0 prefetch!"
1482                 cat <<END > /tmp/ipfire_mail_body
1483 When I was downloading the source packages,
1484 I have found an ERROR!
1485 Here you can see the logs and detect the reason for this error.
1486
1487 Best Regards
1488 Your IPFire-Build-Script
1489 END
1490         fi
1491
1492         if [ "$2" = "ISO" ]; then
1493                 SUBJECT="ISO: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1494                 echo "ERROR: $0 upload iso!"
1495                 cat <<END > /tmp/ipfire_mail_body
1496 When I was uploading the iso image,
1497 I have found an ERROR!
1498 Here you can see the logs and detect the reason for this error.
1499
1500 Best Regards
1501 Your IPFire-Build-Script
1502 END
1503         fi
1504
1505         if [ "$2" = "PAKS" ]; then
1506                 SUBJECT="PAKS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1507                 echo "ERROR: $0 upload paks!"
1508                 cat <<END > /tmp/ipfire_mail_body
1509 When I was uploading the packages,
1510 I have found an ERROR!
1511 Here you can see the logs and detect the reason for this error.
1512
1513 Best Regards
1514 Your IPFire-Build-Script
1515 END
1516         fi
1517
1518         tar cfz $ATTACHMENT log/_build*
1519         cat <<END >> /tmp/ipfire_mail_body
1520
1521 Here is a summary... The full logs are in the attachment.
1522 ---------------------------------------------------------
1523
1524 `tail log/_*`
1525 END
1526         cat /tmp/ipfire_mail_body | tools/sendEmail -q \
1527                 -f $IPFIRE_MAIL_FROM \
1528                 -t $IPFIRE_MAIL_REPORT \
1529                 -u $SUBJECT \
1530                 -s $IPFIRE_MAIL_SERVER:25 \
1531                 -xu $IPFIRE_MAIL_USER \
1532                 -xp $IPFIRE_MAIL_PASS \
1533                 -l log/_build.mail.log \
1534                 -a $ATTACHMENT # -v
1535         rm -f /tmp/ipfire_mail_body $ATTACHMENT
1536         ;;
1537 unattended)
1538         if [ ! -f .config ]; then
1539                 echo "No configuration found. Try ./make.sh make-config."
1540         fi
1541         ### This is our procedure that will compile the IPFire by herself...
1542         echo "### UPDATE LOGS"
1543         update_logs
1544
1545         if [ "$IPFIRE_REBUILD" -eq "0" ]; then
1546                 echo "### SAVING TIME"
1547                 export IPFIRE_START_TIME=`date`
1548
1549                 echo "### GETTING TOOLCHAIN"
1550                 $0 gettoolchain
1551
1552                 echo "### RUNNING SVN-UPDATE"
1553                 $0 svn update
1554                 if [ $? -ne 0 ]; then
1555                         $0 mail SVNUPDATE
1556                         exit 1
1557                 fi
1558         
1559                 echo "### EXPORT SOURCES"
1560                 $0 svn dist
1561                 if [ $? -ne 0 ]; then
1562                         $0 mail SVNDIST
1563                         exit 1
1564                 fi
1565
1566                 echo "### RUNNING PREFETCH"
1567                 $0 prefetch | grep -q "md5 difference"
1568                 if [ $? -eq 0 ]; then
1569                         $0 mail PREFETCH
1570                         exit 1
1571                 fi
1572         fi
1573
1574         echo "### RUNNING BUILD"
1575         $0 build
1576         if [ $? -ne 0 ]; then
1577                 $0 mail ERROR
1578                 exit 1
1579         fi
1580
1581         echo "### MAKING SOURCES-ISO"
1582         echo "DISABLED by Delaco!"
1583         #$0 sources-iso
1584
1585         echo "### UPLOADING ISO"
1586         $0 upload iso
1587         if [ $? -ne 0 ]; then
1588                 $0 mail ISO
1589                 exit 1
1590         fi
1591         
1592         echo "### UPLOADING PAKS"
1593         $0 upload paks
1594         if [ $? -ne 0 ]; then
1595                 $0 mail PAKS
1596                 exit 1
1597         fi
1598
1599         echo "### SUCCESS!"
1600         $0 mail SUCCESS
1601         exit 0
1602         ;;
1603 batch)
1604         if [ `screen -ls | grep -q ipfire` ]; then
1605                 echo "Build is already running, sorry!"
1606                 exit 1
1607         else
1608                 if [ "$2" = "--rebuild" ]; then
1609                         export IPFIRE_REBUILD=1
1610                         echo "REBUILD!"
1611                 else
1612                         export IPFIRE_REBUILD=0
1613                 fi
1614                 echo -n "IPFire-Batch-Build is starting..."
1615                 screen -dmS ipfire $0 unattended
1616                 if [ "$?" -eq "0" ]; then
1617                         echo ".Done!"
1618                 else
1619                         echo ".ERROR!"
1620                         exit 1
1621                 fi
1622                 exit 0
1623         fi
1624         ;;
1625 *)
1626         clear
1627         svn info
1628         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"
1629         do
1630         case $name in
1631         "IPFIRE: Prefetch")
1632                 $0 prefetch
1633                 ;;
1634         "IPFIRE: Build (silent)")
1635                 $0 build-silent
1636                 ;;
1637         "IPFIRE: Watch Build")
1638                 echo "Exit with Ctrl+A, Ctrl+D."
1639                 echo -n "Preparing..."
1640                 for i in `seq 10`; do
1641                         sleep 0.1; echo -n "."
1642                 done
1643                 echo ".Ready!"
1644                 sleep 0.3
1645                 screen -x ipfire
1646                 ;;
1647         "IPFIRE: Batch")
1648                 $0 batch
1649                 ;;
1650         "IPFIRE: Clean")
1651                 $0 clean
1652                 ;;
1653         "SVN: Commit")
1654                 echo "Are your sure to Update all Files to the Server (write: yes)?"; read input
1655                 if [ "$input" == "yes" ]; then
1656                         $0 svn commit
1657                 fi
1658                 $0 sync
1659                 ;;
1660         "SVN: Update")
1661                 $0 svn update
1662                 ;;
1663         "SVN: Status")
1664                 svn status # | grep -v ^?
1665                 ;;
1666         "SVN: Diff")
1667                 $0 svn diff
1668                 ;;
1669         "Help")
1670                 echo "Usage: $0 {build|changelog|check|checkclean|clean|gettoolchain|newpak|prefetch|shell|sync|toolchain}"
1671                 cat doc/make.sh-usage
1672                 ;;
1673         "LOG: Tail")
1674                 tail -f log/_*
1675                 ;;
1676         "Exit")
1677                 break
1678                 ;;
1679         esac
1680         done
1681         ;;
1682 esac