Fehlerbereinigung beim URL-Filter
[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="1.4"                 # Version number
29   SLOGAN="We secure your network"       # 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
36   # Debian specific settings
37   if [ ! -e /etc/debian_version ]; then
38         FULLPATH=`which $0`
39   else
40         if [ -x /usr/bin/realpath ]; then
41                 FULLPATH=`/usr/bin/realpath $0`
42         else
43                 echo "ERROR: Need to do apt-get install realpath"
44                 exit 1
45         fi
46   fi
47
48
49   PWD=`pwd`
50   BASENAME=`basename $0`
51   BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
52   LOGFILE=$BASEDIR/log/_build.preparation.log
53   export BASEDIR LOGFILE
54   DIR_CHK=$BASEDIR/cache/check
55   mkdir $BASEDIR/log/ 2>/dev/null
56
57   if [ 'x86_64' = $MACHINE -o 'i686' = $MACHINE -o 'i586' = $MACHINE -o 'i486' = $MACHINE -o 'i386' = $MACHINE ]; then
58
59         echo "`date -u '+%b %e %T'`: Machine is ix86 (or equivalent)" | tee -a $LOGFILE
60         MACHINE=i386
61         BUILDTARGET=i386-pc-linux-gnu
62         CFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
63         CXXFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
64   elif [ 'alpha' = $MACHINE ]; then
65         echo "`date -u '+%b %e %T'`: Machine is Alpha AXP" | tee -a $LOGFILE
66         BUILDTARGET=alpha-unknown-linux-gnu
67         CFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
68         CXXFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
69   else
70         echo "`date -u '+%b %e %T'`: Can't determine your architecture - $MACHINE" | tee -a $LOGFILE
71         exit 1
72   fi
73
74 # Define immediately
75 stdumount() {
76         umount $BASEDIR/build/dev/pts           2>/dev/null;
77         umount $BASEDIR/build/proc                      2>/dev/null;
78         umount $BASEDIR/build/install/mnt               2>/dev/null;
79         umount $BASEDIR/build/usr/src/cache     2>/dev/null;
80         umount $BASEDIR/build/usr/src/ccache    2>/dev/null;
81         umount $BASEDIR/build/usr/src/config    2>/dev/null;
82         umount $BASEDIR/build/usr/src/doc               2>/dev/null;
83         umount $BASEDIR/build/usr/src/html              2>/dev/null;
84         umount $BASEDIR/build/usr/src/langs     2>/dev/null;
85         umount $BASEDIR/build/usr/src/lfs               2>/dev/null;
86         umount $BASEDIR/build/usr/src/log               2>/dev/null;
87         umount $BASEDIR/build/usr/src/src               2>/dev/null;
88 }
89
90 exiterror() {
91         stdumount
92         for i in `seq 0 7`; do
93             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
94                 losetup -d /dev/loop${i} 2>/dev/null
95             fi;
96         done
97         echo "ERROR: $*"
98         echo "       Check $LOGFILE for errors if applicable"
99         exit 1
100 }
101
102 entershell() {
103         if [ ! -e $BASEDIR/build/usr/src/lfs/ ]; then
104                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/"
105         fi
106         echo "Entering to a shell inside LFS chroot, go out with exit"
107         chroot $LFS /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
108                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
109                 VERSION=$VERSION CONFIG_ROOT=$CONFIG_ROOT \
110                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
111                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
112                 CCACHE_DIR=/usr/src/ccache \
113                 CCACHE_HASHDIR=1 \
114                 KVER=$KVER \
115                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
116                 KGCC="ccache /usr/bin/gcc" \
117                 /tools/bin/bash
118         if [ $? -ne 0 ]; then
119                         exiterror "chroot error"
120         else
121                 stdumount
122         fi
123 }
124
125 prepareenv() {
126     ############################################################################
127     #                                                                          #
128     # Are we running the right shell?                                          #
129     #                                                                          #
130     ############################################################################
131     if [ ! "$BASH" ]; then
132         exiterror "BASH environment variable is not set.  You're probably running the wrong shell."
133     fi
134
135     if [ -z "${BASH_VERSION}" ]; then
136         exiterror "Not running BASH shell."
137     fi
138
139
140     ############################################################################
141     #                                                                          #
142     # Trap on emergency exit                                                   #
143     #                                                                          #
144     ############################################################################
145     trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
146
147
148     ############################################################################
149     #                                                                          #
150     # Resetting our nice level                                                 #
151     #                                                                          #
152     ############################################################################
153     echo "`date -u '+%b %e %T'`: Resetting our nice level to $NICE" | tee -a $LOGFILE
154     renice $NICE $$ > /dev/null
155     if [ `nice` != "$NICE" ]; then
156         exiterror "Failed to set correct nice level"
157     fi
158
159     ############################################################################
160     #                                                                          #
161     # Checking if running as root user                                         #
162     #                                                                          #
163     ############################################################################
164     echo "`date -u '+%b %e %T'`: Checking if we're running as root user" | tee -a $LOGFILE
165     if [ `id -u` != 0 ]; then
166         exiterror "Not building as root"
167     fi
168
169
170     ############################################################################
171     #                                                                          #
172     # Checking for necessary temporary space                                   #
173     #                                                                          #
174     ############################################################################
175     echo "`date -u '+%b %e %T'`: Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
176     BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
177     BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
178     if (( 2202000 > $BASE_ASPACE )); then
179         BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
180         if (( 2202000 - $BASE_USPACE > $BASE_ASPACE )); then
181                 exiterror "Not enough temporary space available, need at least 2.1GB on $BASE_DEV"
182         fi
183     fi
184
185     ############################################################################
186     #                                                                          #
187     # Building Linux From Scratch system                                       #
188     #                                                                          #
189     ############################################################################
190     echo "`date -u '+%b %e %T'`: Building Linux From Scratch system" | tee -a $LOGFILE
191
192     # Set umask
193     umask 022
194
195     # Set LFS Directory
196     LFS=$BASEDIR/build
197
198     # Check /tools symlink
199     if [ -h /tools ]; then
200         rm -f /tools
201     fi
202     if [ ! -a /tools ]; then
203         ln -s $BASEDIR/build/tools /
204     fi
205     if [ ! -h /tools ]; then
206         exiterror "Could not create /tools symbolic link."
207     fi
208
209     # Setup environment
210     set +h
211     LC_ALL=POSIX
212     export LFS LC_ALL CFLAGS CXXFLAGS
213     unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
214
215     # Make some extra directories
216     mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
217     mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
218     mkdir -p $BASEDIR/build/dev/pts $BASEDIR/build/proc $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
219
220     # Make all sources and proc available under lfs build
221     mount --bind /dev/pts        $BASEDIR/build/dev/pts
222     mount --bind /proc           $BASEDIR/build/proc
223     mount --bind $BASEDIR/cache  $BASEDIR/build/usr/src/cache
224     mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
225     mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
226     mount --bind $BASEDIR/doc    $BASEDIR/build/usr/src/doc
227     mount --bind $BASEDIR/html   $BASEDIR/build/usr/src/html
228     mount --bind $BASEDIR/langs  $BASEDIR/build/usr/src/langs
229     mount --bind $BASEDIR/lfs    $BASEDIR/build/usr/src/lfs
230     mount --bind $BASEDIR/log    $BASEDIR/build/usr/src/log
231     mount --bind $BASEDIR/src    $BASEDIR/build/usr/src/src
232
233     # Run LFS static binary creation scripts one by one
234     export CCACHE_DIR=$BASEDIR/ccache
235     export CCACHE_HASHDIR=1
236
237     # Remove pre-install list of installed files in case user erase some files before rebuild
238     rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
239 }
240
241
242 ############################################################################
243 #                                                                          #
244 # Necessary shell functions                                                #
245 #                                                                          #
246 ############################################################################
247 lfsmake1() {
248         if [ -f $BASEDIR/lfs/$1 ]; then
249                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
250                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
251                 if [ $? -ne 0 ]; then
252                         exiterror "Download error in $1"
253                 fi
254                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
255                 if [ $? -ne 0 ]; then
256                         exiterror "md5sum error in $1, check file in cache or signature"
257                 fi
258                 cd $BASEDIR/lfs && make -f $*   BUILDTARGET=$BUILDTARGET \
259                                                 MACHINE=$MACHINE \
260                                                 LFS_BASEDIR=$BASEDIR \
261                                                 ROOT=$LFS \
262                                                 KVER=$KVER \
263                                                 install >> $LOGFILE 2>&1
264                 if [ $? -ne 0 ]; then
265                         exiterror "Building $*";
266                 fi
267         else
268                 exiterror "No such file or directory: $BASEDIR/$1"
269         fi
270         return 0
271 }
272
273 lfsmake2() {
274         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
275                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
276                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
277                 if [ $? -ne 0 ]; then
278                         exiterror "Download error in $1"
279                 fi
280                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
281                 if [ $? -ne 0 ]; then
282                         exiterror "md5sum error in $1, check file in cache or signature"
283                 fi
284                 chroot $LFS /tools/bin/env -i   HOME=/root \
285                                                 TERM=$TERM PS1='\u:\w\$ ' \
286                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
287                                                 VERSION=$VERSION \
288                                                 CONFIG_ROOT=$CONFIG_ROOT \
289                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
290                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
291                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
292                                                 KVER=$KVER \
293                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
294                     /tools/bin/bash -x -c "cd /usr/src/lfs && \
295                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
296                 if [ $? -ne 0 ]; then
297                         exiterror "Building $*"
298                 fi
299         else
300                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
301         fi
302         return 0
303 }
304
305 ipcopmake() {
306         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
307                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
308                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
309                 if [ $? -ne 0 ]; then
310                         exiterror "Download error in $1"
311                 fi
312                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
313                 if [ $? -ne 0 ]; then
314                         exiterror "md5sum error in $1, check file in cache or signature"
315                 fi
316                 chroot $LFS /tools/bin/env -i   HOME=/root \
317                                                 TERM=$TERM PS1='\u:\w\$ ' \
318                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
319                                                 VERSION=$VERSION \
320                                                 CONFIG_ROOT=$CONFIG_ROOT \
321                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
322                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
323                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
324                                                 KVER=$KVER \
325                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
326                     /bin/bash -x -c "cd /usr/src/lfs && \
327                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
328                 if [ $? -ne 0 ]; then
329                         exiterror "Building $*"
330                 fi
331         else
332                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
333         fi
334         return 0
335 }
336
337 ipfiredist() {
338         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
339 #          if [ ! `ls -w1 $BASEDIR/packages/*.tar.gz | grep $1` ]; then
340                 echo "`date -u '+%b %e %T'`: Packaging $1" | tee -a $LOGFILE
341                 chroot $LFS /tools/bin/env -i   HOME=/root \
342                                                 TERM=$TERM PS1='\u:\w\$ ' \
343                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
344                                                 VERSION=$VERSION \
345                                                 CONFIG_ROOT=$CONFIG_ROOT \
346                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
347                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
348                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
349                                                 KVER=$KVER \
350                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
351                     /bin/bash -x -c "cd /usr/src/lfs && \
352                     make -f $1 LFS_BASEDIR=/usr/src dist" >>$LOGFILE 2>&1
353                 if [ $? -ne 0 ]; then
354                         exiterror "Packaging $1"
355                 fi
356 #          else
357 #               echo "`date -u '+%b %e %T'`: Packaging: The package $1 already exists"
358 #          fi
359         else
360                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
361         fi
362         return 0
363 }
364
365
366 installmake() {
367         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
368                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
369                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
370                 if [ $? -ne 0 ]; then
371                         exiterror "Download error in $1"
372                 fi
373                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
374                 if [ $? -ne 0 ]; then
375                         exiterror "md5sum error in $1, check file in cache or signature"
376                 fi
377                 chroot $LFS /tools/bin/env -i   HOME=/root \
378                                                 TERM=$TERM PS1='\u:\w\$ ' \
379                                                 PATH=/usr/local/bin:/opt/$MACHINE-uClibc/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin \
380                                                 VERSION=$VERSION \
381                                                 CONFIG_ROOT=$CONFIG_ROOT \
382                                                 LFS_PASS="install" \
383                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
384                                                 CFLAGS="-Os" CXXFLAGS="-Os" \
385                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
386                                                 KVER=$KVER \
387                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
388                     /bin/bash -x -c "cd /usr/src/lfs && \
389                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
390                 if [ $? -ne 0 ]; then
391                         exiterror "Building $*"
392                 fi
393         else
394                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
395         fi
396         return 0
397 }
398
399 buildtoolchain() {
400     LOGFILE="$BASEDIR/log/_build.toolchain.log"
401     export LOGFILE
402     echo -ne "`date -u '+%b %e %T'`: Stage1 toolchain build \n" | tee -a $LOGFILE
403     # Build sed now, as we use some extensions
404     ORG_PATH=$PATH
405     NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
406     export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
407     lfsmake1 ccache
408     lfsmake1 sed        LFS_PASS=1
409     lfsmake1 m4         LFS_PASS=1
410     lfsmake1 bison      LFS_PASS=1
411     lfsmake1 flex       LFS_PASS=1
412     lfsmake1 binutils   LFS_PASS=1
413     lfsmake1 gcc        LFS_PASS=1
414     export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
415     
416     lfsmake1 linux
417     lfsmake1 tcl
418     lfsmake1 expect
419     lfsmake1 glibc
420     lfsmake1 dejagnu
421     lfsmake1 gcc        LFS_PASS=2
422     lfsmake1 binutils   LFS_PASS=2
423     lfsmake1 gawk
424     lfsmake1 coreutils
425     lfsmake1 bzip2
426     lfsmake1 gzip
427     lfsmake1 diffutils
428     lfsmake1 findutils
429     lfsmake1 make
430     lfsmake1 grep
431     lfsmake1 sed        LFS_PASS=2
432     lfsmake1 m4         LFS_PASS=2
433     lfsmake1 bison      LFS_PASS=2
434     lfsmake1 flex       LFS_PASS=2
435     lfsmake1 gettext
436     lfsmake1 ncurses
437     lfsmake1 patch
438     lfsmake1 tar
439     lfsmake1 texinfo
440     lfsmake1 bash
441     lfsmake1 util-linux
442     lfsmake1 perl
443     export PATH=$ORG_PATH
444 }
445
446 buildbase() {
447     LOGFILE="$BASEDIR/log/_build.base.log"
448     export LOGFILE
449     echo -ne "`date -u '+%b %e %T'`: Stage2 linux base build \n" | tee -a $LOGFILE
450     # Run LFS dynamic binary creation scripts one by one
451     lfsmake2 stage2
452     lfsmake2 makedev
453     lfsmake2 linux
454     lfsmake2 man-pages
455     lfsmake2 glibc
456     lfsmake2 binutils
457     lfsmake2 gcc
458     lfsmake2 coreutils
459     lfsmake2 zlib
460     lfsmake2 mktemp
461     lfsmake2 iana-etc
462     lfsmake2 findutils
463     lfsmake2 gawk
464     lfsmake2 ncurses
465     lfsmake2 vim
466     lfsmake2 m4
467     lfsmake2 bison
468     lfsmake2 less
469     lfsmake2 groff
470     lfsmake2 sed
471     lfsmake2 flex
472     lfsmake2 gettext
473     lfsmake2 net-tools
474     lfsmake2 inetutils
475     lfsmake2 perl
476     lfsmake2 texinfo
477     lfsmake2 autoconf
478     lfsmake2 automake
479     lfsmake2 bash
480     lfsmake2 file
481     lfsmake2 libtool
482     lfsmake2 bzip2
483     lfsmake2 diffutils
484     lfsmake2 ed
485     lfsmake2 kbd
486     lfsmake2 e2fsprogs
487     lfsmake2 grep
488     if [ 'i386' = $MACHINE ]; then 
489         lfsmake2 grub
490     elif [ 'alpha' = $MACHINE ]; then 
491         lfsmake2 aboot
492     fi
493     lfsmake2 gzip
494     lfsmake2 man
495     lfsmake2 make
496     lfsmake2 modutils
497     lfsmake2 patch
498     lfsmake2 procinfo
499     lfsmake2 procps
500     lfsmake2 psmisc
501     lfsmake2 shadow
502     lfsmake2 sysklogd
503     lfsmake2 sysvinit
504     lfsmake2 tar
505     lfsmake2 util-linux
506 }
507
508 buildipcop() {
509   # Run IPFire make scripts one by one
510   LOGFILE="$BASEDIR/log/_build.ipfire.log"
511   export LOGFILE
512   echo -ne "`date -u '+%b %e %T'`: Stage3 $NAME build \n" | tee -a $LOGFILE
513
514   # Build these first as some of the kernel packages below rely on 
515   # these for some of their client program functionality 
516   ipcopmake configroot
517   ipcopmake dhcp
518   ipcopmake dhcpcd
519   ipcopmake libusb
520   ipcopmake libpcap
521   ipcopmake linux-atm
522   ipcopmake ppp
523   ipcopmake rp-pppoe
524   ipcopmake unzip
525   # Do SMP now
526   if [ 'i386' = $MACHINE ]; then 
527         # abuse the SMP flag, and make an minimal installer kernel first
528         # so that the boot floppy always works.....
529         ipcopmake linux         LFS_PASS=ipfire SMP=installer
530         ipcopmake linux         LFS_PASS=ipfire SMP=1
531         ipcopmake 3cp4218       SMP=1
532         ipcopmake amedyn        SMP=1
533         ipcopmake cxacru        SMP=1
534         ipcopmake eagle         SMP=1
535
536         # These are here because they have i386 only binary libraries
537         # included in the package.
538         ipcopmake cnx_pci       SMP=1
539         ipcopmake fcdsl         SMP=1
540         ipcopmake fcdsl2        SMP=1
541         ipcopmake fcdslsl       SMP=1
542         ipcopmake fcdslusb      SMP=1
543         ipcopmake fcdslslusb    SMP=1
544         ipcopmake fcpci SMP=1
545         ipcopmake fcclassic     SMP=1
546         ipcopmake pulsar        SMP=1
547         ipcopmake unicorn       SMP=1
548   fi
549
550   ipcopmake linux       LFS_PASS=ipfire
551   ipcopmake 3cp4218     
552   ipcopmake amedyn      
553   ipcopmake cxacru      
554   ipcopmake eciadsl     
555   ipcopmake eagle       
556   ipcopmake speedtouch  
557   if [ 'i386' = $MACHINE ]; then 
558         # These are here because they have i386 only binary libraries
559         # included in the package.
560         ipcopmake cnx_pci       
561         ipcopmake fcdsl         
562         ipcopmake fcdsl2        
563         ipcopmake fcdslsl       
564         ipcopmake fcdslusb      
565         ipcopmake fcdslslusb 
566         ipcopmake fcpci
567         ipcopmake fcclassic
568         ipcopmake pulsar        
569         ipcopmake unicorn       
570   fi
571
572   ipcopmake pcmcia-cs
573   ipcopmake expat
574   ipcopmake gdbm
575   ipcopmake gmp
576   ipcopmake openssl
577   ipcopmake python
578   ipcopmake libnet
579   ipcopmake libpng
580   ipcopmake gd
581   ipcopmake popt
582   ipcopmake slang
583   ipcopmake newt
584   ipcopmake libcap
585   ipcopmake pciutils
586   ipcopmake pcre
587   ipcopmake apache
588   ipcopmake arping
589   ipcopmake beep
590   ipcopmake bind
591   ipcopmake capi4k-utils
592   ipcopmake cdrtools
593   ipcopmake dnsmasq
594   ipcopmake dosfstools
595   ipcopmake ethtool
596   ipcopmake ez-ipupdate
597   ipcopmake fcron
598   ipcopmake perl-GD
599   ipcopmake gnupg
600   ipcopmake hdparm
601   ipcopmake ibod
602   ipcopmake initscripts
603   ipcopmake iptables
604   ipcopmake ipac-ng
605   ipcopmake ipaddr
606   ipcopmake iproute2
607   ipcopmake iptstate
608   ipcopmake iputils
609   ipcopmake l7-protocols
610   ipcopmake isapnptools
611   ipcopmake isdn4k-utils
612   ipcopmake kudzu
613   ipcopmake logrotate
614   ipcopmake logwatch
615   ipcopmake mingetty
616   ipcopmake misc-progs
617   ipcopmake mtools
618   ipcopmake nano
619   ipcopmake nash
620   ipcopmake nasm
621   ipcopmake URI
622   ipcopmake HTML-Tagset
623   ipcopmake HTML-Parser
624   ipcopmake Compress-Zlib
625   ipcopmake Digest
626   ipcopmake Digest-SHA1
627   ipcopmake Digest-HMAC
628   ipcopmake libwww-perl
629   ipcopmake Net-DNS
630   ipcopmake Net-IPv4Addr
631   ipcopmake Net_SSLeay
632   ipcopmake IO-Stringy
633   ipcopmake Unix-Syslog
634   ipcopmake Mail-Tools
635   ipcopmake MIME-Tools
636   ipcopmake Net-Server
637   ipcopmake Convert-TNEF
638   ipcopmake Convert-UUlib
639   ipcopmake Archive-Tar
640   ipcopmake Archive-Zip
641   ipcopmake Text-Tabs+Wrap
642   ipcopmake Locale-Country
643   ipcopmake GeoIP
644   ipcopmake fwhits
645   ipcopmake berkeley
646   ipcopmake BerkeleyDB ## The Perl module
647   ipcopmake noip_updater
648   ipcopmake ntp
649   ipcopmake oinkmaster
650   ipcopmake openssh
651   ipcopmake openswan
652   ipcopmake pptpclient
653   ipcopmake rrdtool
654   ipcopmake setserial
655   ipcopmake setup
656   ipcopmake snort
657   #ipcopmake speedycgi
658   ipcopmake saslauthd PASS=1
659   ipcopmake openldap
660   ipcopmake squid
661   ipcopmake squid-graph
662   ipcopmake squidguard
663   ipcopmake tcpdump
664   ipcopmake traceroute
665   ipcopmake vlan
666   #ipcopmake wireless
667   ipcopmake libsafe
668   ipcopmake 3c5x9setup
669 #  echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
670   ipcopmake pakfire
671   ipcopmake startscripts
672 ## Zuerst die Libs und dann die Programme. Ordnung muss sein!
673   ipcopmake java
674   ipcopmake libtiff
675   ipcopmake libjpeg
676   ipcopmake libxml2
677   ipcopmake spandsp
678   ipcopmake lzo
679   ipcopmake openvpn
680   ipcopmake pkg-config
681   ipcopmake glib
682   ipcopmake xampp
683   ipcopmake pam
684   ipcopmake pammysql
685   ipcopmake saslauthd PASS=2
686   ipcopmake xinetd
687   ipcopmake ghostscript
688   ipcopmake cups
689 #  ipcopmake lpd ## Im Moment aus, da CUPS vorhanden ist.
690   ipcopmake samba
691   ipcopmake sudo
692   ipcopmake mc
693   ipcopmake pwlib
694   ipcopmake openh323
695   ipcopmake wget
696   ipcopmake wput
697   ipcopmake bridge-utils
698   ipcopmake screen
699   ipcopmake hddtemp
700   ipcopmake htop
701   ipcopmake lynx
702   echo -ne "`date -u '+%b %e %T'`: Building ### Mailserver ### \n" | tee -a $LOGFILE
703   ipcopmake postfix
704   ipcopmake procmail
705   ipcopmake fetchmail
706   ipcopmake cyrusimap
707   ipcopmake web-cyradm
708   ipcopmake mailx
709   ipcopmake clamav
710   ipcopmake razor
711   ipcopmake spamassassin
712 #  ipcopmake amavisd
713   echo -ne "`date -u '+%b %e %T'`: Building ### VoIP-Server ### \n" | tee -a $LOGFILE
714   ipcopmake stund
715   ipcopmake asterisk
716   ipcopmake mpg123
717   echo -ne "`date -u '+%b %e %T'`: Building ### MP3-Server ### \n" | tee -a $LOGFILE
718   ipcopmake lame
719   ipcopmake gnump3d
720   echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE
721   ipcopmake applejuice
722   ipcopmake edonkeyclc
723 #  ipcopmake sane
724   echo -ne "`date -u '+%b %e %T'`: Building ### Net-Tools ### \n" | tee -a $LOGFILE
725   ipcopmake ntop
726 #  ipcopmake rsync
727   ipcopmake tcpwrapper
728   ipcopmake portmap
729   ipcopmake nfs
730   ipcopmake nmap
731   ipcopmake iftop
732   ipcopmake ncftp
733   ipcopmake cftp
734   ipcopmake etherwake
735   ipcopmake ethereal
736 #  ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
737 }
738
739 buildinstaller() {
740   # Run installer scripts one by one
741   LOGFILE="$BASEDIR/log/_build.installer.log"
742   export LOGFILE
743   echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
744   if [ 'i386' = $MACHINE ]; then 
745         ipcopmake syslinux
746         ipcopmake as86
747         ipcopmake mbr
748         ipcopmake uClibc
749   fi
750   installmake busybox
751   installmake sysvinit
752   installmake e2fsprogs
753   installmake misc-progs
754   installmake slang
755   installmake util-linux
756   installmake newt
757   installmake pciutils
758   installmake pcmcia-cs
759   installmake kbd
760   installmake installer
761   installmake scsi.img
762   installmake driver.img
763   installmake initrd
764   installmake boot.img
765 }
766
767 buildpackages() {
768   LOGFILE="$BASEDIR/log/_build.packages.log"
769   export LOGFILE
770   echo "... see detailed log in _build.*.log files" >> $LOGFILE
771   echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
772   # Strip files
773   echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
774   find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
775         ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
776          -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
777   # add -ls before -exec if you want to verify what files are stripped
778
779   find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
780         -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
781   # there add -v to strip to verify
782
783   if [ 'i386' = $MACHINE ]; then
784         # Create fcdsl packages
785         echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
786         cp $LFS/install/images/fcdsl/license.txt $LFS  >> $LOGFILE 2>&1
787         touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
788         cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
789                 lib/modules/$KVER/misc/fcdsl*.o.gz \
790                 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
791                 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
792                 etc/fcdsl/fcdsl*.conf \
793                 etc/drdsl/{drdsl,drdsl.ini} \
794                 license.txt \
795                 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
796         rm -f $LFS/license.txt >> $LOGFILE 2>&1
797         cd $BASEDIR
798   fi
799   
800   # Generating list of packages used
801   echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
802   rm -f $BASEDIR/doc/packages-list
803   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
804         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
805                 echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
806         fi
807   done
808   echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
809   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
810         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
811   rm -f $BASEDIR/doc/packages-list
812   # packages-list.txt is ready to be displayed for wiki page
813
814   # Create ISO for CDRom and USB-superfloppy
815   ipcopmake cdrom
816   rm -f $LFS/install/images/*usb*
817   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
818
819   ipfirepackages
820
821   # Cleanup
822   stdumount
823   rm -rf $BASEDIR/build/tmp/*
824
825   # Generating total list of files
826   echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
827   rm -f $BASEDIR/log/FILES
828   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
829         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
830                 echo "##" >>$BASEDIR/log/FILES
831                 echo "## `basename $i`" >>$BASEDIR/log/FILES
832                 echo "##" >>$BASEDIR/log/FILES
833                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
834         fi
835   done
836
837   cd $PWD
838
839 }
840
841 ipfirepackages() {
842   for i in `ls $BASEDIR/packages`; do
843         touch $BASEDIR/build/install/packages/$i.empty
844   done
845   ipfiredist amavisd
846   ipfiredist applejuice
847   ipfiredist asterisk
848   ipfiredist clamav
849   ipfiredist cups
850   ipfiredist cyrusimap
851   ipfiredist fetchmail
852   ipfiredist gnump3d
853   ipfiredist java
854   ipfiredist lame
855   ipfiredist libtiff
856   ipfiredist libxml2
857   ipfiredist mailx
858   ipfiredist nfs
859   ipfiredist nmap
860   ipfiredist ntop
861   ipfiredist postfix
862   ipfiredist procmail
863   ipfiredist samba
864   ipfiredist spamassassin
865   ipfiredist web-cyradm
866   ipfiredist xampp
867   ipfiredist xinetd
868   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
869   mv -f $LFS/install/packages/*.{tar.gz,md5} $BASEDIR/packages >> $LOGFILE 2>&1
870   rm -rf  $BASEDIR/build/install/packages/*
871 }
872
873 # See what we're supposed to do
874 case "$1" in 
875 build)
876         BUILDMACHINE=`uname -m`
877         PACKAGE=`ls -v -r $BASEDIR/cache/$SNAME-1.4-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
878         #only restore on a clean disk
879         if [ ! -f log/perl-*-tools ]; then
880                 if [ ! -n "$PACKAGE" ]; then
881                         echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
882                         prepareenv
883                         buildtoolchain
884                 else
885                         PACKAGENAME=${PACKAGE%.tar.gz}
886                         echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
887                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
888                                 tar zxf $PACKAGE
889                                 prepareenv
890                         else
891                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
892                         fi
893                 fi
894         else
895                 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
896                 prepareenv
897         fi
898
899         buildbase
900         buildipcop
901
902         # Setzen des IPFire Builds
903         if [ -e ./.svn ]; then
904                 cat .svn/entries |sed -n 's/^[ \t]*revision=\"// p' | sed -n 's/\".*$// p' > $LFS/home/httpd/html/firebuild
905         else
906                 echo "_(OvO)_" > $LFS/home/httpd/html/firebuild
907         fi
908
909         buildinstaller
910         buildpackages
911         ;;
912 shell)
913         # enter a shell inside LFS chroot
914         # may be used to changed kernel settings
915         prepareenv
916         entershell
917         ;;
918 changelog)
919         echo -n "Loading new Changelog from SVN: "
920         svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
921         echo "Finished!"
922         ;;
923 check)
924         echo "Checking sources files availability on the web"
925         if [ ! -d $DIR_CHK ]; then
926                 mkdir -p $DIR_CHK
927         fi
928         FINISHED=0
929         cd $BASEDIR/lfs
930         for c in `seq $MAX_RETRIES`; do
931                 if (( FINISHED==1 )); then
932                         break
933                 fi
934                 FINISHED=1
935                 cd $BASEDIR/lfs
936                 for i in *; do
937                         if [ -f "$i" -a "$i" != "Config" ]; then
938                                 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
939                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" check
940                                 if [ $? -ne 0 ]; then
941                                         echo "Check : wget error in lfs/$i"
942                                         FINISHED=0
943                                 fi
944                         fi
945                 done
946         done
947         cd -
948         ;;
949 checkclean)
950         echo "Erasing sources files availability tags"
951         rm -rf $DIR_CHK/*
952         ;;
953 clean)
954         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
955                 $LOSETUP -d $i 2>/dev/null
956         done
957         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
958                 umount $i
959         done
960         stdumount
961         for i in `seq 0 7`; do
962             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
963                 umount /dev/loop${i}     2>/dev/null;
964                 losetup -d /dev/loop${i} 2>/dev/null;
965             fi;
966         done
967         rm -rf $BASEDIR/build
968         rm -rf $BASEDIR/cdrom
969         rm -rf $BASEDIR/packages
970         rm -rf $BASEDIR/log
971         if [ -h /tools ]; then
972                 rm -f /tools
973         fi
974         ;;
975 dist)
976         echo -ne "Updating & building source package from SVN: "
977         svn up > /dev/null
978         svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
979         tar cfz ipfire-source-`date +'%Y-%m-%d'`-r`svn info | grep Revision | cut -c 11-`.tar.gz ipfire-source
980         rm ipfire-source/ -r
981         echo "Finished!"
982         ;;
983 newpak)
984         # create structure for a new package
985         echo -e "Name of the new package: $2"
986         if [ ! -f "lfs/$2" ]; then
987                 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
988                 mkdir -p src/paks/$2
989                 cd src/paks/$2
990                 echo "`date -u '+%b %e %T'`: Creating files"
991                 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
992
993                 touch ROOTFILES
994                 touch {,un}install.sh
995         ## install.sh
996                 echo '#!/bin/bash' > install.sh
997                 echo '#' >> install.sh
998                 echo '#################################################################' >> install.sh
999                 echo '#                                                               #' >> install.sh
1000                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
1001                 echo '#                                                               #' >> install.sh
1002                 echo '#################################################################' >> install.sh
1003                 echo '#' >> install.sh
1004                 echo '# Extract the files' >> install.sh
1005                 echo 'tar xfz files.tgz -C /' >> install.sh
1006                 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
1007         ## uninstall.sh
1008                 echo '#!/bin/bash' > uninstall.sh
1009                 echo '#################################################################' >> uninstall.sh
1010                 echo '#                                                               #' >> uninstall.sh
1011                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
1012                 echo '#                                                               #' >> uninstall.sh
1013                 echo '#################################################################' >> uninstall.sh
1014                 echo '#' >> uninstall.sh
1015                 echo '# Delete the files' >> uninstall.sh
1016                 echo '## Befehl fehlt noch' >> uninstall.sh
1017                 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
1018                 echo "`date -u '+%b %e %T'`: Adding files to SVN"
1019                 cd - && svn add lfs/$2 && svn add src/paks/$2
1020
1021                 echo -n "Do you want to remove the folders? [y/n]"
1022                 read REM
1023                 if  [ "$REM" == "y" ]; then
1024                         echo "Removing the folders..."
1025                         svn del src/paks/$2 --force
1026                 else
1027                         echo "Folders are kept."
1028                 fi
1029         else
1030                 echo "$2 already exists"
1031         fi
1032         exit 0
1033         ;;
1034 prefetch)
1035         if [ ! -d $BASEDIR/cache ]; then
1036                 mkdir $BASEDIR/cache
1037         fi
1038         mkdir -p $BASEDIR/log
1039         echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1040         FINISHED=0
1041         cd $BASEDIR/lfs
1042         for c in `seq $MAX_RETRIES`; do
1043                 if (( FINISHED==1 )); then 
1044                         break
1045                 fi
1046                 FINISHED=1
1047                 cd $BASEDIR/lfs
1048                 for i in *; do
1049                         if [ -f "$i" -a "$i" != "Config" ]; then
1050                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1051                                 if [ $? -ne 0 ]; then
1052                                         echo "Prefetch : wget error in lfs/$i"
1053                                         FINISHED=0
1054                                 else
1055                                         if [ $c -eq 1 ]; then
1056                                                 echo "Prefetch : lfs/$i files loaded"
1057                                         fi
1058                                 fi
1059                         fi
1060                 done
1061         done
1062         echo "Prefetch : verifying md5sum"
1063         ERROR=0
1064         for i in *; do
1065                 if [ -f "$i" -a "$i" != "Config" ]; then
1066                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1067                         if [ $? -ne 0 ]; then
1068                                 echo "md5 difference in lfs/$i"
1069                                 ERROR=1
1070                         fi
1071                 fi
1072         done
1073         if [ $ERROR -eq 0 ]; then
1074                 echo "Prefetch : all files md5sum match"
1075         fi
1076         cd -
1077         ;;
1078 toolchain)
1079         prepareenv
1080         buildtoolchain
1081         BUILDMACHINE=`uname -m`
1082         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1083         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1084                 build/{bin,etc,usr/bin,usr/local} \
1085                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1086                 log >> $LOGFILE
1087         md5sum cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1088                 > cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1089         stdumount
1090         ;;
1091 gettoolchain)
1092         BUILDMACHINE=`uname -m`
1093         # arbitrary name to be updated in case of new toolchain package upload
1094         PACKAGE=$SNAME-1.4-toolchain-$BUILDMACHINE
1095         URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1096         echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1097         cd $BASEDIR/cache
1098         wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
1099         if [ $? -ne 0 ]; then
1100                 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1101 #       else
1102 #               if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1103 #                       echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1104 #                       echo "`date -u '+%b %e %T'`: Uncompressing toolchain" | tee -a $LOGFILE
1105 #                       cd $BASEDIR && tar xfz cache/$PACKAGE.tar.gz -C .
1106 #                       rm -f $BASEDIR/cache/$PACKAGE.{tar.gz,md5}
1107 #               else
1108 #                       exiterror "$PACKAGE.md5 did not match, check downloaded package"
1109 #               fi
1110         fi
1111         ;;
1112 paks)
1113         prepareenv
1114         # buildpackages
1115         ipfirepackages
1116         ;;
1117 update)
1118         echo "Load the latest source-files:"
1119         svn update
1120         ;;
1121 commit)
1122         echo "Upload the changed files:"
1123         svn commit
1124         ./make.sh sync
1125         svn up > /dev/null
1126         ;;
1127 make)
1128         echo "Do a complete compile:"   
1129         ./make.sh prefetch && ./make.sh gettoolchain && ./make.sh build
1130         ;;
1131 diff)
1132         echo -ne "Make a local diff to last SVN revision: "
1133         svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1134         echo "Finished!"
1135         echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1136         ;;
1137 sync)
1138         echo -e "Syncing Cache to FTP:"
1139         if [ -f .pass ]; then
1140                 PASS="`cat .pass`"
1141         else
1142                 echo -ne "Password for mirror.ipfire.org: "; read PASS
1143         fi
1144         rm -f doc/packages-to-remove-from-ftp
1145         ncftpls -u web3 -p $PASS ftp://mirror.ipfire.org/html/source-packages/source/ > ftplist
1146         for i in `ls -w1 cache/`; do
1147                 grep $i ftplist
1148                 if [ "$?" -ne "0" ]; then
1149                         ncftpput -u web3 -p $PASS mirror.ipfire.org /html/source-packages/source cache/$i
1150                         if [ "$?" -eq "0" ]; then
1151                                 echo -e "$i was successfully uploaded to the ftp server."
1152                         else
1153                                 echo -e "There was an error while uploading $i to the ftp server."
1154                         fi
1155                 fi
1156         done
1157         for i in `cat ftplist`; do
1158                 ls -w1 cache/ | grep $i
1159                 if [ "$?" -eq "1" ]; then
1160                         echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1161                 fi
1162         done
1163         rm -f ftplist
1164         ;;
1165 pub-iso)
1166         echo -e "Upload the ISO to the beta-mirror!"
1167         if [ -f .pass ]; then
1168                 PASS="`cat .pass`"
1169         else
1170                 echo -ne "Password for mirror.ipfire.org: "; read PASS
1171         fi
1172         ncftpls -u web3 -p $PASS ftp://mirror.ipfire.org/html/source-packages/beta/ | grep `svn info | grep Revision | cut -c 11-`
1173         if [ "$?" -eq "1" ]; then
1174                         cp $BASEDIR/ipfire-install-1.4.i386.iso $BASEDIR/ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso
1175                         md5sum ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso > ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso.md5
1176                         ncftpput -u web3 -p $PASS mirror.ipfire.org /html/source-packages/beta/ ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso
1177                         ncftpput -u web3 -p $PASS mirror.ipfire.org /html/source-packages/beta/ ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso.md5
1178                         if [ "$?" -eq "0" ]; then
1179                                 echo -e "The ISO of Revision `svn info | grep Revision | cut -c 11-` was successfully uploaded to the ftp server."
1180                         else
1181                                 echo -e "There was an error while uploading the ISO to the ftp server."
1182                         fi
1183         else
1184                 echo -e "File with name ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso already exists on the ftp server!"
1185         fi
1186         rm -f ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso{,.md5}
1187         ;;
1188 pub-paks)
1189         echo -e "Upload the packages to the beta-mirror!"
1190         if [ -f .pass ]; then
1191                 PASS="`cat .pass`"
1192         else
1193                 echo -ne "Password for mirror.ipfire.org: "; read PASS
1194         fi
1195         ncftpput -z -u web3 -p $PASS mirror.ipfire.org /html/source-packages/packages/ packages/*
1196         if [ "$?" -eq "0" ]; then
1197                 echo -e "The packages were successfully uploaded to the ftp server."
1198         else
1199                 echo -e "There was an error while uploading the packages to the ftp server."
1200         fi
1201         ;;
1202 *)
1203         echo "Usage: $0 {build|changelog|check|checkclean|clean|commit|diff|dist|gettoolchain|make|newpak|prefetch|pub-iso|pub-paks|shell|sync|toolchain|update}"
1204         cat doc/make.sh-usage
1205         exit 1
1206         ;;
1207 esac