Direkt ein Fix fuer eben genannte Sachen...
[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 apache
603   ipcopmake arping
604   ipcopmake beep
605   ipcopmake bind
606   ipcopmake capi4k-utils
607   ipcopmake cdrtools
608   ipcopmake dnsmasq
609   ipcopmake dosfstools
610   ipcopmake ethtool
611   ipcopmake ez-ipupdate
612   ipcopmake fcron
613   ipcopmake perl-GD
614   ipcopmake gnupg
615   ipcopmake hdparm
616   ipcopmake ibod
617   ipcopmake initscripts
618   ipcopmake iptables
619   ipcopmake ipac-ng
620   ipcopmake ipaddr
621   ipcopmake iproute2
622   ipcopmake iptstate
623   ipcopmake iputils
624   ipcopmake l7-protocols
625   ipcopmake isapnptools
626   ipcopmake isdn4k-utils
627   ipcopmake kudzu
628   ipcopmake logrotate
629   ipcopmake logwatch
630   ipcopmake mingetty
631   ipcopmake misc-progs
632   ipcopmake mtools
633   ipcopmake nano
634   ipcopmake nash
635   ipcopmake nasm
636   ipcopmake URI
637   ipcopmake HTML-Tagset
638   ipcopmake HTML-Parser
639   ipcopmake Compress-Zlib
640   ipcopmake Digest
641   ipcopmake Digest-SHA1
642   ipcopmake Digest-HMAC
643   ipcopmake libwww-perl
644   ipcopmake Net-DNS
645   ipcopmake Net-IPv4Addr
646   ipcopmake Net_SSLeay
647   ipcopmake IO-Stringy
648   ipcopmake Unix-Syslog
649   ipcopmake Mail-Tools
650   ipcopmake MIME-Tools
651   ipcopmake Net-Server
652   ipcopmake Convert-TNEF
653   ipcopmake Convert-UUlib
654   ipcopmake Archive-Tar
655   ipcopmake Archive-Zip
656   ipcopmake Text-Tabs+Wrap
657   ipcopmake Locale-Country
658   ipcopmake GeoIP
659   ipcopmake fwhits
660   ipcopmake berkeley
661   ipcopmake BerkeleyDB ## The Perl module
662   ipcopmake noip_updater
663   ipcopmake ntp
664   ipcopmake oinkmaster
665   ipcopmake openssh
666   ipcopmake openswan
667   ipcopmake pptpclient
668   ipcopmake rrdtool
669   ipcopmake setserial
670   ipcopmake setup
671   ipcopmake snort
672   #ipcopmake speedycgi
673   ipcopmake saslauthd PASS=1
674   ipcopmake openldap
675   ipcopmake squid
676   ipcopmake squid-graph
677   ipcopmake squidguard
678   ipcopmake tcpdump
679   ipcopmake traceroute
680   ipcopmake vlan
681   #ipcopmake wireless
682   ipcopmake libsafe
683   ipcopmake 3c5x9setup
684 #  echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
685   ipcopmake pakfire
686   ipcopmake startscripts
687 ## Zuerst die Libs und dann die Programme. Ordnung muss sein!
688   ipcopmake java
689   ipcopmake bootsplash
690   ipcopmake libxml2
691   ipcopmake spandsp
692   ipcopmake lzo
693   ipcopmake openvpn
694   ipcopmake pkg-config
695   ipcopmake glib
696   ipcopmake xampp
697   ipcopmake pam
698   ipcopmake pammysql
699   ipcopmake saslauthd PASS=2
700   ipcopmake xinetd
701   ipcopmake ghostscript
702   ipcopmake cups
703 #  ipcopmake lpd ## Im Moment aus, da CUPS vorhanden ist.
704   ipcopmake samba
705   ipcopmake sudo
706   ipcopmake mc
707 #  ipcopmake pwlib
708 #  ipcopmake openh323
709   ipcopmake wget
710   ipcopmake wput
711   ipcopmake bridge-utils
712   ipcopmake screen
713   ipcopmake hddtemp
714   ipcopmake smartmontools
715   ipcopmake htop
716   ipcopmake lynx
717   echo -ne "`date -u '+%b %e %T'`: Building ### Mailserver ### \n" | tee -a $LOGFILE
718   ipcopmake postfix
719   ipcopmake procmail
720   ipcopmake fetchmail
721   ipcopmake cyrusimap
722   ipcopmake web-cyradm
723   ipcopmake mailx
724   ipcopmake clamav
725   ipcopmake razor
726   ipcopmake spamassassin
727 #  ipcopmake amavisd
728   echo -ne "`date -u '+%b %e %T'`: Building ### VoIP-Server ### \n" | tee -a $LOGFILE
729   ipcopmake stund
730   ipcopmake zaptel
731   ipcopmake libpri
732   ipcopmake bristuff
733   ipcopmake asterisk
734   ipcopmake mpg123
735   echo -ne "`date -u '+%b %e %T'`: Building ### Multimedia-Server ### \n" | tee -a $LOGFILE
736   ipcopmake libmad
737   ipcopmake libogg
738   ipcopmake libvorbis
739   ipcopmake lame
740   ipcopmake xvid
741   ipcopmake mpeg2dec
742   ipcopmake ffmpeg
743   ipcopmake sox
744   ipcopmake gnump3d
745   ipcopmake videolan
746   echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE
747   ipcopmake applejuice
748   ipcopmake ocaml
749   ipcopmake mldonkey
750 #  ipcopmake edonkeyclc
751 #  ipcopmake sane
752   echo -ne "`date -u '+%b %e %T'`: Building ### Net-Tools ### \n" | tee -a $LOGFILE
753   ipcopmake ntop
754 #  ipcopmake rsync
755   ipcopmake tcpwrapper
756   ipcopmake portmap
757   ipcopmake nfs
758   ipcopmake nmap
759   ipcopmake mbmon
760   ipcopmake iftop
761   ipcopmake ncftp
762   ipcopmake cftp
763   ipcopmake etherwake
764   ipcopmake ethereal
765   ipcopmake tftp-hpa
766   ipcopmake subversion
767   ipcopmake iptraf
768   ipcopmake nagios
769 #  ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
770 }
771
772 buildinstaller() {
773   # Run installer scripts one by one
774   LOGFILE="$BASEDIR/log/_build.installer.log"
775   export LOGFILE
776   echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
777   if [ 'i386' = $MACHINE ]; then 
778         ipcopmake syslinux
779         ipcopmake as86
780         ipcopmake mbr
781         ipcopmake uClibc
782   fi
783   installmake busybox
784   installmake sysvinit
785   installmake e2fsprogs
786   installmake misc-progs
787   installmake slang
788   installmake util-linux
789   installmake newt
790   installmake pciutils
791   installmake pcmcia-cs
792   installmake kbd
793   installmake installer
794   installmake scsi.img
795   installmake driver.img
796   installmake initrd
797   installmake boot.img
798 }
799
800 buildpackages() {
801   LOGFILE="$BASEDIR/log/_build.packages.log"
802   export LOGFILE
803   echo "... see detailed log in _build.*.log files" >> $LOGFILE
804   echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
805   # Strip files
806   echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
807   find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
808         ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
809          -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
810   # add -ls before -exec if you want to verify what files are stripped
811
812   find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
813         -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
814   # there add -v to strip to verify
815
816   if [ 'i386' = $MACHINE ]; then
817         # Create fcdsl packages
818         echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
819         cp $LFS/install/images/fcdsl/license.txt $LFS  >> $LOGFILE 2>&1
820         touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
821         cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
822                 lib/modules/$KVER/misc/fcdsl*.o.gz \
823                 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
824                 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
825                 etc/fcdsl/fcdsl*.conf \
826                 etc/drdsl/{drdsl,drdsl.ini} \
827                 license.txt \
828                 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
829         rm -f $LFS/license.txt >> $LOGFILE 2>&1
830         cd $BASEDIR
831   fi
832   
833   # Generating list of packages used
834   echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
835   rm -f $BASEDIR/doc/packages-list
836   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
837         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
838                 echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
839         fi
840   done
841   echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
842   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipfire$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|^ipfire-logs' \
843         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
844   rm -f $BASEDIR/doc/packages-list
845   # packages-list.txt is ready to be displayed for wiki page
846
847   # Create ISO for CDRom and USB-superfloppy
848   ipcopmake cdrom
849   rm -f $LFS/install/images/*usb*
850   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
851
852   ipfirepackages
853
854   # Cleanup
855   stdumount
856   rm -rf $BASEDIR/build/tmp/*
857
858   # Generating total list of files
859   echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
860   rm -f $BASEDIR/log/FILES
861   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
862         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
863                 echo "##" >>$BASEDIR/log/FILES
864                 echo "## `basename $i`" >>$BASEDIR/log/FILES
865                 echo "##" >>$BASEDIR/log/FILES
866                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
867         fi
868   done
869   cd $BASEDIR/packages; ls -w1 *.ipfire | awk -F ".ipfire" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
870   echo "###EOF###" >> $BASEDIR/packages/packages_list.txt
871
872   cd $PWD
873
874 }
875
876 ipfirepackages() {
877   if [ -d "$BASEDIR/packages" ]; then
878           for i in `ls $BASEDIR/packages`; do
879                 touch $BASEDIR/build/install/packages/$i.empty
880           done
881   fi
882   ipfiredist amavisd
883   ipfiredist applejuice
884   ipfiredist asterisk
885   ipfiredist clamav
886   ipfiredist cups
887   ipfiredist cyrusimap
888   ipfiredist fetchmail
889   ipfiredist ffmpeg
890   ipfiredist gnump3d
891   ipfiredist iptraf
892   ipfiredist java
893   ipfiredist lame
894   ipfiredist libmad
895   ipfiredist libogg
896   ipfiredist libtiff
897   ipfiredist libvorbis
898   ipfiredist libxml2
899   ipfiredist mailx
900   ipfiredist mldonkey
901   ipfiredist mpeg2dec
902   ipfiredist nagios
903   ipfiredist nfs
904   ipfiredist nmap
905   ipfiredist ntop
906   ipfiredist portmap
907   ipfiredist postfix
908   ipfiredist procmail
909   ipfiredist samba
910   ipfiredist sox
911   ipfiredist spamassassin
912   ipfiredist subversion
913   ipfiredist videolan
914   ipfiredist web-cyradm
915   ipfiredist xampp
916 #  ipfiredist xinetd
917   ipfiredist xvid
918   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
919   mv -f $LFS/install/packages/*.{ipfire,md5} $BASEDIR/packages >> $LOGFILE 2>&1
920   rm -rf  $BASEDIR/build/install/packages/*
921 }
922
923 update_logs() {
924         tar cfz log/ipfire-logs-`date +'%Y-%m-%d-%H:%M'`.tgz log/_build.*
925         rm -f log/_build.*
926 }
927
928 # See what we're supposed to do
929 case "$1" in 
930 build)
931         BUILDMACHINE=`uname -m`
932         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
933         #only restore on a clean disk
934         if [ ! -f log/perl-*-tools ]; then
935                 if [ ! -n "$PACKAGE" ]; then
936                         echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
937                         prepareenv
938                         buildtoolchain
939                 else
940                         PACKAGENAME=${PACKAGE%.tar.gz}
941                         echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
942                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
943                                 tar zxf $PACKAGE
944                                 prepareenv
945                         else
946                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
947                         fi
948                 fi
949         else
950                 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
951                 prepareenv
952         fi
953
954         buildbase
955         buildipcop
956
957         # Setzen des IPFire Builds
958         if [ "$FIREBUILD" ]; then
959                 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
960         else
961                 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
962         fi
963
964         buildinstaller
965         buildpackages
966         ;;
967 shell)
968         # enter a shell inside LFS chroot
969         # may be used to changed kernel settings
970         prepareenv
971         entershell
972         ;;
973 changelog)
974         echo -n "Loading new Changelog from SVN: "
975         svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
976         echo "Finished!"
977         ;;
978 check)
979         echo "Checking sources files availability on the web"
980         if [ ! -d $DIR_CHK ]; then
981                 mkdir -p $DIR_CHK
982         fi
983         FINISHED=0
984         cd $BASEDIR/lfs
985         for c in `seq $MAX_RETRIES`; do
986                 if (( FINISHED==1 )); then
987                         break
988                 fi
989                 FINISHED=1
990                 cd $BASEDIR/lfs
991                 for i in *; do
992                         if [ -f "$i" -a "$i" != "Config" ]; then
993                                 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
994                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" check
995                                 if [ $? -ne 0 ]; then
996                                         echo "Check : wget error in lfs/$i"
997                                         FINISHED=0
998                                 fi
999                         fi
1000                 done
1001         done
1002         cd -
1003         ;;
1004 checkclean)
1005         echo "Erasing sources files availability tags"
1006         rm -rf $DIR_CHK/*
1007         ;;
1008 clean)
1009         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1010                 $LOSETUP -d $i 2>/dev/null
1011         done
1012         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1013                 umount $i
1014         done
1015         stdumount
1016         for i in `seq 0 7`; do
1017             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1018                 umount /dev/loop${i}     2>/dev/null;
1019                 losetup -d /dev/loop${i} 2>/dev/null;
1020             fi;
1021         done
1022         rm -rf $BASEDIR/build
1023         rm -rf $BASEDIR/cdrom
1024         rm -rf $BASEDIR/packages
1025         rm -rf $BASEDIR/log
1026         if [ -h /tools ]; then
1027                 rm -f /tools
1028         fi
1029         ;;
1030 newpak)
1031         # create structure for a new package
1032         echo -e "Name of the new package: $2"
1033         if [ ! -f "lfs/$2" ]; then
1034                 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
1035                 mkdir -p src/paks/$2
1036                 cd src/paks/$2
1037                 echo "`date -u '+%b %e %T'`: Creating files"
1038                 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
1039
1040                 touch ROOTFILES
1041                 touch {,un}install.sh
1042         ## install.sh
1043                 echo '#!/bin/bash' > install.sh
1044                 echo '#' >> install.sh
1045                 echo '#################################################################' >> install.sh
1046                 echo '#                                                               #' >> install.sh
1047                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
1048                 echo '#                                                               #' >> install.sh
1049                 echo '#################################################################' >> install.sh
1050                 echo '#' >> install.sh
1051                 echo '# Extract the files' >> install.sh
1052                 echo 'tar xfz files.tgz -C /' >> install.sh
1053                 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
1054         ## uninstall.sh
1055                 echo '#!/bin/bash' > uninstall.sh
1056                 echo '#################################################################' >> uninstall.sh
1057                 echo '#                                                               #' >> uninstall.sh
1058                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
1059                 echo '#                                                               #' >> uninstall.sh
1060                 echo '#################################################################' >> uninstall.sh
1061                 echo '#' >> uninstall.sh
1062                 echo '# Delete the files' >> uninstall.sh
1063                 echo '## Befehl fehlt noch' >> uninstall.sh
1064                 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
1065                 echo "`date -u '+%b %e %T'`: Adding files to SVN"
1066                 cd - && svn add lfs/$2 && svn add src/paks/$2
1067
1068                 echo -n "Do you want to remove the folders? [y/n]"
1069                 read REM
1070                 if  [ "$REM" == "y" ]; then
1071                         echo "Removing the folders..."
1072                         svn del src/paks/$2 --force
1073                 else
1074                         echo "Folders are kept."
1075                 fi
1076         else
1077                 echo "$2 already exists"
1078         fi
1079         exit 0
1080         ;;
1081 prefetch)
1082         if [ ! -d $BASEDIR/cache ]; then
1083                 mkdir $BASEDIR/cache
1084         fi
1085         mkdir -p $BASEDIR/log
1086         echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1087         FINISHED=0
1088         cd $BASEDIR/lfs
1089         for c in `seq $MAX_RETRIES`; do
1090                 if (( FINISHED==1 )); then 
1091                         break
1092                 fi
1093                 FINISHED=1
1094                 cd $BASEDIR/lfs
1095                 for i in *; do
1096                         if [ -f "$i" -a "$i" != "Config" ]; then
1097                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1098                                 if [ $? -ne 0 ]; then
1099                                         echo "Prefetch : wget error in lfs/$i"
1100                                         FINISHED=0
1101                                 else
1102                                         if [ $c -eq 1 ]; then
1103                                                 echo "Prefetch : lfs/$i files loaded"
1104                                         fi
1105                                 fi
1106                         fi
1107                 done
1108         done
1109         echo "Prefetch : verifying md5sum"
1110         ERROR=0
1111         for i in *; do
1112                 if [ -f "$i" -a "$i" != "Config" ]; then
1113                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1114                         if [ $? -ne 0 ]; then
1115                                 echo "md5 difference in lfs/$i"
1116                                 ERROR=1
1117                         fi
1118                 fi
1119         done
1120         if [ $ERROR -eq 0 ]; then
1121                 echo "Prefetch : all files md5sum match"
1122         fi
1123         cd -
1124         ;;
1125 toolchain)
1126         prepareenv
1127         buildtoolchain
1128         BUILDMACHINE=`uname -m`
1129         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1130         test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1131         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1132                 build/{bin,etc,usr/bin,usr/local} \
1133                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1134                 log >> $LOGFILE
1135         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1136                 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1137         stdumount
1138         ;;
1139 gettoolchain)
1140         BUILDMACHINE=`uname -m`
1141         # arbitrary name to be updated in case of new toolchain package upload
1142         PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
1143         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1144                 URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1145                 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1146                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1147                 cd $BASEDIR/cache/toolchains
1148                 wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
1149                 if [ $? -ne 0 ]; then
1150                         echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1151                 else
1152                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1153                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1154                         else
1155                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1156                         fi
1157                 fi
1158         else
1159                 echo "Toolchain is already downloaded. Exiting..."
1160         fi
1161         ;;
1162 sources-iso)
1163         prepareenv
1164         echo "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1165         chroot $LFS /tools/bin/env -i   HOME=/root \
1166         TERM=$TERM PS1='\u:\w\$ ' \
1167         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1168         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1169         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1170         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1171         stdumount
1172         ;;
1173 svn)
1174         case "$2" in
1175           update|up)
1176                 # clear
1177                 echo -n "Load the latest source files..."
1178                 svn update >> $PWD/log/_build.svn.update.log
1179                 if [ $? -eq 0 ]; then
1180                         echo ".Done!"
1181                 else
1182                         echo ".Fail!"
1183                         exit 1
1184                 fi
1185                 echo -n "Write the svn info to a file..."
1186                 svn info > $PWD/svn_status
1187                 if [ "$?" -eq "0" ]; then
1188                         echo ".Done!"
1189                 else
1190                         echo ".Fail!"
1191                         exit 1
1192                 fi
1193                 chmod 755 $0
1194                 tail log/_build.svn.update.log
1195                 exit 0
1196           ;;
1197           commit|ci)
1198                 clear
1199                 if [ -e /sbin/yast ]; then
1200                         $0 changelog
1201                 fi
1202                 echo "Upload the changed files..."
1203                 sleep 1
1204                 IPFIRE_SVN_MESSAGE=/tmp/ipfire-svn-co-message.txt
1205                 rm -f $IPFIRE_SVN_MESSAGE
1206                 mcedit $IPFIRE_SVN_MESSAGE
1207                 svn commit -F $IPFIRE_SVN_MESSAGE
1208                 rm -f $IPFIRE_SVN_MESSAGE
1209                 $0 svn up
1210           ;;
1211           dist)
1212                 #$0 svn up
1213                 echo -ne "Download source package from svn..."
1214                 svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
1215                 if [ "$?" -eq "0" ]; then
1216                         echo ".Done!"
1217                 else
1218                         echo ".Fail!"
1219                         exit 1
1220                 fi
1221                 echo -n "Compress files..."
1222                 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
1223                 if [ "$?" -eq "0" ]; then
1224                         echo ".Done!"
1225                 else
1226                         echo ".Fail!"
1227                         exit 1
1228                 fi
1229                 echo -n "Cleanup..."
1230                 rm ipfire-source/ -r
1231                 if [ "$?" -eq "0" ]; then
1232                         echo ".Done!"
1233                 else
1234                         echo ".Fail!"
1235                         exit 1
1236                 fi
1237           ;;
1238           diff)
1239                 echo -ne "Make a local diff to last svn revision..."
1240                 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1241                 if [ "$?" -eq "0" ]; then
1242                         echo ".Done!"
1243                 else
1244                         echo ".Fail!"
1245                         exit 1
1246                 fi
1247                 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1248           ;;
1249         esac
1250         ;;
1251 make-config)
1252         echo -e "This is for creating your configuration..."
1253         echo -e "We will need some input:"
1254         echo -e ""
1255         echo -n "FTP-DOMAIN FOR THE ISO: "
1256         read IPFIRE_FTP_URL_EXT
1257         echo -n "PATH FOR $IPFIRE_FTP_URL_EXT: "
1258         read IPFIRE_FTP_PATH_EXT
1259         echo -n "USERNAME FOR $IPFIRE_FTP_URL_EXT: "
1260         read IPFIRE_FTP_USER_EXT
1261         echo -n "PASSWORD FOR $IPFIRE_FTP_URL_EXT: "
1262         read -s IPFIRE_FTP_PASS_EXT
1263         echo ""
1264         echo "(You can leave this empty if the cache-server is the same as your iso-server.)"
1265         echo -n "FTP-DOMAIN FOR THE CACHE: "
1266         read IPFIRE_FTP_URL_INT
1267         echo -n "PATH FOR $IPFIRE_FTP_URL_INT: "
1268         read IPFIRE_FTP_PATH_INT
1269         if [ $IPFIRE_FTP_URL_INT ]; then
1270                 echo -n "USERNAME FOR $IPFIRE_FTP_URL_INT: "
1271                 read IPFIRE_FTP_USER_INT
1272                 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_INT: "
1273                 read -s IPFIRE_FTP_PASS_INT
1274         else
1275                 IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_EXT
1276                 IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_EXT
1277                 IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_EXT
1278                 echo "USERNAME FOR $IPFIRE_FTP_URL_INT: $IPFIRE_FTP_USER_INT"
1279                 echo "PASSWORD FOR $IPFIRE_FTP_URL_INT: !HIDDEN!"
1280         fi
1281         echo ""
1282         echo "(You can leave this empty if the pak-server is the same as your iso-server.)"
1283         echo -n "FTP-DOMAIN FOR THE PAKS: "
1284         read IPFIRE_FTP_URL_PAK
1285         echo -n "PATH FOR $IPFIRE_FTP_URL_PAK: "
1286         read IPFIRE_FTP_PATH_PAK
1287         if [ $IPFIRE_FTP_URL_PAK ]; then
1288                 echo -n "USERNAME FOR $IPFIRE_FTP_URL_PAK: "
1289                 read IPFIRE_FTP_USER_PAK
1290                 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_PAK: "
1291                 read -s IPFIRE_FTP_PASS_PAK
1292         else
1293                 IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_EXT
1294                 IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_EXT
1295                 IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_EXT
1296                 echo "USERNAME FOR $IPFIRE_FTP_URL_PAK: $IPFIRE_FTP_USER_PAK"
1297                 echo "PASSWORD FOR $IPFIRE_FTP_URL_PAK: !HIDDEN!"
1298         fi
1299         echo ""
1300         echo -e "ONE OR MORE EMAIL ADDRESS(ES) TO WHICH THE REPORTS WILL BE SENT"
1301         echo -e "(seperated by comma)"
1302         read IPFIRE_MAIL_REPORT
1303         echo -n "EMAIL FROM: "
1304         read IPFIRE_MAIL_FROM
1305         echo -n "EMAIL SERVER: "
1306         read IPFIRE_MAIL_SERVER
1307         echo -n "LOGIN TO MAIL SERVER: "
1308         read IPFIRE_MAIL_USER
1309         echo -n "MAIL PASSWORD: "
1310         read -s IPFIRE_MAIL_PASS
1311         echo -n "Saving..."
1312         for i in `seq 20`; do
1313                 sleep 0.1; echo -n "."
1314         done
1315         echo ".Finished!"
1316         cat <<END > .config
1317 ### ISO server
1318 IPFIRE_FTP_URL_EXT=$IPFIRE_FTP_URL_EXT
1319 IPFIRE_FTP_PATH_EXT=$IPFIRE_FTP_PATH_EXT
1320 IPFIRE_FTP_USER_EXT=$IPFIRE_FTP_USER_EXT
1321 IPFIRE_FTP_PASS_EXT=$IPFIRE_FTP_PASS_EXT
1322 ### cache server
1323 IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_INT
1324 IPFIRE_FTP_PATH_INT=$IPFIRE_FTP_PATH_INT
1325 IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_INT
1326 IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_INT
1327 ### paks server
1328 IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_PAK
1329 IPFIRE_FTP_PATH_PAK=$IPFIRE_FTP_PATH_PAK
1330 IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_PAK
1331 IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_PAK
1332 ### mail reports
1333 IPFIRE_MAIL_REPORT=$IPFIRE_MAIL_REPORT
1334 IPFIRE_MAIL_FROM=$IPFIRE_MAIL_FROM
1335 IPFIRE_MAIL_SERVER=$IPFIRE_MAIL_SERVER
1336 IPFIRE_MAIL_USER=$IPFIRE_MAIL_USER
1337 IPFIRE_MAIL_PASS=$IPFIRE_MAIL_PASS
1338 END
1339         ;;
1340 sync)
1341         echo -e "Syncing cache to ftp:"
1342 #       rm -f doc/packages-to-remove-from-ftp
1343         ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > ftplist
1344         for i in `ls -w1 cache/`; do
1345                 grep $i ftplist
1346                 if [ "$?" -ne "0" ]; then
1347                         ncftpput -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ cache/$i
1348                         if [ "$?" -eq "0" ]; then
1349                                 echo -e "$i was successfully uploaded to the ftp server."
1350                         else
1351                                 echo -e "There was an error while uploading $i to the ftp server."
1352                         fi
1353                 fi
1354         done
1355 #       for i in `cat ftplist`; do
1356 #               ls -w1 cache/ | grep $i
1357 #               if [ "$?" -eq "1" ]; then
1358 #                       echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1359 #               fi
1360 #       done
1361         rm -f ftplist
1362         ;;
1363 upload)
1364         case "$2" in
1365           iso)
1366                 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
1367                 cat <<EOF > .ftp-commands
1368 mkdir $IPFIRE_FTP_PATH_EXT
1369 ls -lah
1370 quit
1371 EOF
1372                 ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
1373                 rm -f .ftp-commands
1374                 md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
1375                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso
1376                 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
1377                 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
1378                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ svn_status
1379                 if [ "$?" -eq "0" ]; then
1380                         echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
1381                 else
1382                         echo -e "There was an error while uploading the iso to the ftp server."
1383                         exit 1
1384                 fi
1385                 if [ "$3" = "--with-sources-cd" ]; then
1386                         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
1387                 fi
1388                 ;;
1389           paks)
1390                 cat <<EOF > .ftp-commands
1391 mkdir $IPFIRE_FTP_PATH_PAK
1392 ls -lah
1393 quit
1394 EOF
1395                 ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
1396                 rm -f .ftp-commands
1397                 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
1398                 if [ "$?" -eq "0" ]; then
1399                         echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
1400                 else
1401                         echo -e "There was an error while uploading the packages to the ftp server."
1402                         exit 1
1403                 fi
1404           ;;
1405         esac
1406         ;;
1407 build-only)
1408         rm -f $BASEDIR/log/$2*
1409         BUILDMACHINE=`uname -m`
1410         prepareenv
1411         ipcopmake $2
1412         ;;
1413 build-silent)
1414         screen -dmS ipfire $0 build
1415         echo "Build started... This will take a while!"
1416         echo "You can see the status with 'screen -x ipfire'."
1417         ;;
1418 mail)
1419         chmod 755 tools/sendEmail
1420         ATTACHMENT=/tmp/ipfire-build-logs-R$SVN_REVISION.tar.gz
1421         if [ "$2" = "ERROR" ]; then
1422                 SUBJECT="ERROR: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1423                 echo "ERROR: $0 build!"
1424                 cat <<END > /tmp/ipfire_mail_body
1425 When I was building IPFire on `hostname`, I have found an ERROR!
1426 Here you can see the logs and detect the reason for this error.
1427
1428 Best Regards
1429 Your IPFire-Build-Script
1430 END
1431         fi
1432         if [ "$2" = "SUCCESS" ]; then
1433                 SUBJECT="SUCCESS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1434                 cat <<END > /tmp/ipfire_mail_body
1435 Building IPFire on `hostname` in Revision $SVN_REVISION was successfull!
1436 You can find the ISO on your ftp server.
1437
1438 Statistics:
1439 -----------
1440 Started:        $IPFIRE_START_TIME
1441 Finished:       `date`
1442
1443 Best Regards
1444 Your IPFire-Build-Script
1445 END
1446         fi
1447         if [ "$2" = "SVNUPDATE" ]; then
1448                 SUBJECT="SVNUPDATE: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1449                 echo "ERROR: $0 svn up!"
1450                 cat <<END > /tmp/ipfire_mail_body
1451 When I was downloading the latest svn source,
1452 I have found an ERROR!
1453 Here you can see the logs and detect the reason for this error.
1454
1455 Best Regards
1456 Your IPFire-Build-Script
1457 END
1458         fi
1459
1460         if [ "$2" = "SVNDIST" ]; then
1461                 SUBJECT="SVNDIST: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1462                 echo "ERROR: $0 svn dist!"
1463                 cat <<END > /tmp/ipfire_mail_body
1464 When I was exporting the latest svn source,
1465 I have found an ERROR!
1466 Here you can see the logs and detect the reason for this error.
1467
1468 Best Regards
1469 Your IPFire-Build-Script
1470 END
1471         fi
1472
1473         if [ "$2" = "PREFETCH" ]; then
1474                 SUBJECT="PREFETCH: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1475                 echo "ERROR: $0 prefetch!"
1476                 cat <<END > /tmp/ipfire_mail_body
1477 When I was downloading the source packages,
1478 I have found an ERROR!
1479 Here you can see the logs and detect the reason for this error.
1480
1481 Best Regards
1482 Your IPFire-Build-Script
1483 END
1484         fi
1485
1486         if [ "$2" = "ISO" ]; then
1487                 SUBJECT="ISO: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1488                 echo "ERROR: $0 upload iso!"
1489                 cat <<END > /tmp/ipfire_mail_body
1490 When I was uploading the iso image,
1491 I have found an ERROR!
1492 Here you can see the logs and detect the reason for this error.
1493
1494 Best Regards
1495 Your IPFire-Build-Script
1496 END
1497         fi
1498
1499         if [ "$2" = "PAKS" ]; then
1500                 SUBJECT="PAKS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1501                 echo "ERROR: $0 upload paks!"
1502                 cat <<END > /tmp/ipfire_mail_body
1503 When I was uploading the packages,
1504 I have found an ERROR!
1505 Here you can see the logs and detect the reason for this error.
1506
1507 Best Regards
1508 Your IPFire-Build-Script
1509 END
1510         fi
1511
1512         tar cfz $ATTACHMENT log/_build*
1513         cat <<END >> /tmp/ipfire_mail_body
1514
1515 Here is a summary... The full logs are in the attachment.
1516 ---------------------------------------------------------
1517
1518 `tail log/_*`
1519 END
1520         cat /tmp/ipfire_mail_body | tools/sendEmail -q \
1521                 -f $IPFIRE_MAIL_FROM \
1522                 -t $IPFIRE_MAIL_REPORT \
1523                 -u $SUBJECT \
1524                 -s $IPFIRE_MAIL_SERVER:25 \
1525                 -xu $IPFIRE_MAIL_USER \
1526                 -xp $IPFIRE_MAIL_PASS \
1527                 -l log/_build.mail.log \
1528                 -a $ATTACHMENT # -v
1529         rm -f /tmp/ipfire_mail_body $ATTACHMENT
1530         ;;
1531 unattended)
1532         if [ ! -f .config ]; then
1533                 echo "No configuration found. Try ./make.sh make-config."
1534         fi
1535         ### This is our procedure that will compile the IPFire by herself...
1536         echo "### UPDATE LOGS"
1537         update_logs
1538
1539         if [ "$IPFIRE_REBUILD" -eq "0" ]; then
1540                 echo "### SAVING TIME"
1541                 export IPFIRE_START_TIME=`date`
1542
1543                 echo "### GETTING TOOLCHAIN"
1544                 $0 gettoolchain
1545
1546                 echo "### RUNNING SVN-UPDATE"
1547                 $0 svn update
1548                 if [ $? -ne 0 ]; then
1549                         $0 mail SVNUPDATE
1550                         exit 1
1551                 fi
1552         
1553                 echo "### EXPORT SOURCES"
1554                 $0 svn dist
1555                 if [ $? -ne 0 ]; then
1556                         $0 mail SVNDIST
1557                         exit 1
1558                 fi
1559
1560                 echo "### RUNNING PREFETCH"
1561                 $0 prefetch | grep -q "md5 difference"
1562                 if [ $? -eq 0 ]; then
1563                         $0 mail PREFETCH
1564                         exit 1
1565                 fi
1566         fi
1567
1568         echo "### RUNNING BUILD"
1569         $0 build
1570         if [ $? -ne 0 ]; then
1571                 $0 mail ERROR
1572                 exit 1
1573         fi
1574
1575         echo "### MAKING SOURCES-ISO"
1576         echo "DISABLED by Delaco!"
1577         #$0 sources-iso
1578
1579         echo "### UPLOADING ISO"
1580         $0 upload iso
1581         if [ $? -ne 0 ]; then
1582                 $0 mail ISO
1583                 exit 1
1584         fi
1585         
1586         echo "### UPLOADING PAKS"
1587         $0 upload paks
1588         if [ $? -ne 0 ]; then
1589                 $0 mail PAKS
1590                 exit 1
1591         fi
1592
1593         echo "### SUCCESS!"
1594         $0 mail SUCCESS
1595         exit 0
1596         ;;
1597 batch)
1598         if [ `screen -ls | grep -q ipfire` ]; then
1599                 echo "Build is already running, sorry!"
1600                 exit 1
1601         else
1602                 if [ "$2" = "--rebuild" ]; then
1603                         export IPFIRE_REBUILD=1
1604                         echo "REBUILD!"
1605                 else
1606                         export IPFIRE_REBUILD=0
1607                 fi
1608                 echo -n "IPFire-Batch-Build is starting..."
1609                 screen -dmS ipfire $0 unattended
1610                 if [ "$?" -eq "0" ]; then
1611                         echo ".Done!"
1612                 else
1613                         echo ".ERROR!"
1614                         exit 1
1615                 fi
1616                 exit 0
1617         fi
1618         ;;
1619 *)
1620         clear
1621         svn info
1622         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"
1623         do
1624         case $name in
1625         "IPFIRE: Prefetch")
1626                 $0 prefetch
1627                 ;;
1628         "IPFIRE: Build (silent)")
1629                 $0 build-silent
1630                 ;;
1631         "IPFIRE: Watch Build")
1632                 echo "Exit with Ctrl+A, Ctrl+D."
1633                 echo -n "Preparing..."
1634                 for i in `seq 10`; do
1635                         sleep 0.1; echo -n "."
1636                 done
1637                 echo ".Ready!"
1638                 sleep 0.3
1639                 screen -x ipfire
1640                 ;;
1641         "IPFIRE: Batch")
1642                 $0 batch
1643                 ;;
1644         "IPFIRE: Clean")
1645                 $0 clean
1646                 ;;
1647         "SVN: Commit")
1648                 echo "Are your sure to Update all Files to the Server (write: yes)?"; read input
1649                 if [ "$input" == "yes" ]; then
1650                         $0 svn commit
1651                 fi
1652                 $0 sync
1653                 ;;
1654         "SVN: Update")
1655                 $0 svn update
1656                 ;;
1657         "SVN: Status")
1658                 svn status # | grep -v ^?
1659                 ;;
1660         "SVN: Diff")
1661                 $0 svn diff
1662                 ;;
1663         "Help")
1664                 echo "Usage: $0 {build|changelog|check|checkclean|clean|gettoolchain|newpak|prefetch|shell|sync|toolchain}"
1665                 cat doc/make.sh-usage
1666                 ;;
1667         "LOG: Tail")
1668                 tail -f log/_*
1669                 ;;
1670         "Exit")
1671                 break
1672                 ;;
1673         esac
1674         done
1675         ;;
1676 esac