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