Gro├čes Update:
[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         echo "`date -u '+%b %e %T'`: Machine is ix86 (or equivalent)" | tee -a $LOGFILE
59         MACHINE=i386
60         BUILDTARGET=i386-pc-linux-gnu
61         CFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
62         CXXFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
63   elif [ 'alpha' = $MACHINE ]; then
64         echo "`date -u '+%b %e %T'`: Machine is Alpha AXP" | tee -a $LOGFILE
65         BUILDTARGET=alpha-unknown-linux-gnu
66         CFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
67         CXXFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
68   else
69         echo "`date -u '+%b %e %T'`: Can't determine your architecture - $MACHINE" | tee -a $LOGFILE
70         exit 1
71   fi
72
73 # Define immediately
74 stdumount() {
75         umount $BASEDIR/build/dev/pts           2>/dev/null;
76         umount $BASEDIR/build/proc                      2>/dev/null;
77         umount $BASEDIR/build/install/mnt               2>/dev/null;
78         umount $BASEDIR/build/usr/src/cache     2>/dev/null;
79         umount $BASEDIR/build/usr/src/ccache    2>/dev/null;
80         umount $BASEDIR/build/usr/src/config    2>/dev/null;
81         umount $BASEDIR/build/usr/src/doc               2>/dev/null;
82         umount $BASEDIR/build/usr/src/html              2>/dev/null;
83         umount $BASEDIR/build/usr/src/langs     2>/dev/null;
84         umount $BASEDIR/build/usr/src/lfs               2>/dev/null;
85         umount $BASEDIR/build/usr/src/log               2>/dev/null;
86         umount $BASEDIR/build/usr/src/src               2>/dev/null;
87 }
88
89 exiterror() {
90         stdumount
91         for i in `seq 0 7`; do
92             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
93                 losetup -d /dev/loop${i} 2>/dev/null
94             fi;
95         done
96         echo "ERROR: $*"
97         echo "       Check $LOGFILE for errors if applicable"
98         exit 1
99 }
100
101 entershell() {
102         if [ ! -e $BASEDIR/build/usr/src/lfs/ ]; then
103                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/"
104         fi
105         echo "Entering to a shell inside LFS chroot, go out with exit"
106         chroot $LFS /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
107                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
108                 VERSION=$VERSION CONFIG_ROOT=$CONFIG_ROOT \
109                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
110                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
111                 CCACHE_DIR=/usr/src/ccache \
112                 CCACHE_HASHDIR=1 \
113                 KVER=$KVER \
114                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
115                 KGCC="ccache /usr/bin/gcc" \
116                 /tools/bin/bash
117         if [ $? -ne 0 ]; then
118                         exiterror "chroot error"
119         else
120                 stdumount
121         fi
122 }
123
124 prepareenv() {
125     ############################################################################
126     #                                                                          #
127     # Are we running the right shell?                                          #
128     #                                                                          #
129     ############################################################################
130     if [ ! "$BASH" ]; then
131         exiterror "BASH environment variable is not set.  You're probably running the wrong shell."
132     fi
133
134     if [ -z "${BASH_VERSION}" ]; then
135         exiterror "Not running BASH shell."
136     fi
137
138
139     ############################################################################
140     #                                                                          #
141     # Trap on emergency exit                                                   #
142     #                                                                          #
143     ############################################################################
144     trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
145
146
147     ############################################################################
148     #                                                                          #
149     # Resetting our nice level                                                 #
150     #                                                                          #
151     ############################################################################
152     echo "`date -u '+%b %e %T'`: Resetting our nice level to $NICE" | tee -a $LOGFILE
153     renice $NICE $$ > /dev/null
154     if [ `nice` != "$NICE" ]; then
155         exiterror "Failed to set correct nice level"
156     fi
157
158     ############################################################################
159     #                                                                          #
160     # Checking if running as root user                                         #
161     #                                                                          #
162     ############################################################################
163     echo "`date -u '+%b %e %T'`: Checking if we're running as root user" | tee -a $LOGFILE
164     if [ `id -u` != 0 ]; then
165         exiterror "Not building as root"
166     fi
167
168
169     ############################################################################
170     #                                                                          #
171     # Checking for necessary temporary space                                   #
172     #                                                                          #
173     ############################################################################
174     echo "`date -u '+%b %e %T'`: Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
175     BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
176     BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
177     if (( 2202000 > $BASE_ASPACE )); then
178         BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
179         if (( 2202000 - $BASE_USPACE > $BASE_ASPACE )); then
180                 exiterror "Not enough temporary space available, need at least 2.1GB on $BASE_DEV"
181         fi
182     fi
183
184     ############################################################################
185     #                                                                          #
186     # Building Linux From Scratch system                                       #
187     #                                                                          #
188     ############################################################################
189     echo "`date -u '+%b %e %T'`: Building Linux From Scratch system" | tee -a $LOGFILE
190
191     # Set umask
192     umask 022
193
194     # Set LFS Directory
195     LFS=$BASEDIR/build
196
197     # Check /tools symlink
198     if [ -h /tools ]; then
199         rm -f /tools
200     fi
201     if [ ! -a /tools ]; then
202         ln -s $BASEDIR/build/tools /
203     fi
204     if [ ! -h /tools ]; then
205         exiterror "Could not create /tools symbolic link."
206     fi
207
208     # Setup environment
209     set +h
210     LC_ALL=POSIX
211     export LFS LC_ALL CFLAGS CXXFLAGS
212     unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
213
214     # Make some extra directories
215     mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
216     mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
217     mkdir -p $BASEDIR/build/dev/pts $BASEDIR/build/proc $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
218
219     # Make all sources and proc available under lfs build
220     mount --bind /dev/pts        $BASEDIR/build/dev/pts
221     mount --bind /proc           $BASEDIR/build/proc
222     mount --bind $BASEDIR/cache  $BASEDIR/build/usr/src/cache
223     mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
224     mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
225     mount --bind $BASEDIR/doc    $BASEDIR/build/usr/src/doc
226     mount --bind $BASEDIR/html   $BASEDIR/build/usr/src/html
227     mount --bind $BASEDIR/langs  $BASEDIR/build/usr/src/langs
228     mount --bind $BASEDIR/lfs    $BASEDIR/build/usr/src/lfs
229     mount --bind $BASEDIR/log    $BASEDIR/build/usr/src/log
230     mount --bind $BASEDIR/src    $BASEDIR/build/usr/src/src
231
232     # Run LFS static binary creation scripts one by one
233     export CCACHE_DIR=$BASEDIR/ccache
234     export CCACHE_HASHDIR=1
235
236     # Remove pre-install list of installed files in case user erase some files before rebuild
237     rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
238 }
239
240
241 ############################################################################
242 #                                                                          #
243 # Necessary shell functions                                                #
244 #                                                                          #
245 ############################################################################
246 lfsmake1() {
247         if [ -f $BASEDIR/lfs/$1 ]; then
248                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
249                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
250                 if [ $? -ne 0 ]; then
251                         exiterror "Download error in $1"
252                 fi
253                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
254                 if [ $? -ne 0 ]; then
255                         exiterror "md5sum error in $1, check file in cache or signature"
256                 fi
257                 cd $BASEDIR/lfs && make -f $*   BUILDTARGET=$BUILDTARGET \
258                                                 MACHINE=$MACHINE \
259                                                 LFS_BASEDIR=$BASEDIR \
260                                                 ROOT=$LFS \
261                                                 KVER=$KVER \
262                                                 install >> $LOGFILE 2>&1
263                 if [ $? -ne 0 ]; then
264                         exiterror "Building $*";
265                 fi
266         else
267                 exiterror "No such file or directory: $BASEDIR/$1"
268         fi
269         return 0
270 }
271
272 lfsmake2() {
273         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
274                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
275                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
276                 if [ $? -ne 0 ]; then
277                         exiterror "Download error in $1"
278                 fi
279                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
280                 if [ $? -ne 0 ]; then
281                         exiterror "md5sum error in $1, check file in cache or signature"
282                 fi
283                 chroot $LFS /tools/bin/env -i   HOME=/root \
284                                                 TERM=$TERM PS1='\u:\w\$ ' \
285                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
286                                                 VERSION=$VERSION \
287                                                 CONFIG_ROOT=$CONFIG_ROOT \
288                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
289                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
290                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
291                                                 KVER=$KVER \
292                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
293                     /tools/bin/bash -x -c "cd /usr/src/lfs && \
294                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
295                 if [ $? -ne 0 ]; then
296                         exiterror "Building $*"
297                 fi
298         else
299                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
300         fi
301         return 0
302 }
303
304 ipcopmake() {
305         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
306                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
307                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
308                 if [ $? -ne 0 ]; then
309                         exiterror "Download error in $1"
310                 fi
311                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
312                 if [ $? -ne 0 ]; then
313                         exiterror "md5sum error in $1, check file in cache or signature"
314                 fi
315                 chroot $LFS /tools/bin/env -i   HOME=/root \
316                                                 TERM=$TERM PS1='\u:\w\$ ' \
317                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
318                                                 VERSION=$VERSION \
319                                                 CONFIG_ROOT=$CONFIG_ROOT \
320                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
321                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
322                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
323                                                 KVER=$KVER \
324                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
325                     /bin/bash -x -c "cd /usr/src/lfs && \
326                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
327                 if [ $? -ne 0 ]; then
328                         exiterror "Building $*"
329                 fi
330         else
331                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
332         fi
333         return 0
334 }
335
336 ipfiredist() {
337         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
338           if [ "`ls -w1 $BASEDIR/packages/ | grep $1; echo $?`" -ne "0" ]; then
339                 echo "`date -u '+%b %e %T'`: Packaging $1" | tee -a $LOGFILE
340                 cp -f $BASEDIR/src/scripts/make-packages.sh $BASEDIR/build/usr/local/bin
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'`: Package $1 already exists" | tee -a $LOGFILE
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=ipcop SMP=installer
530         ipcopmake linux         LFS_PASS=ipcop 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 pulsar        SMP=1
546         ipcopmake unicorn       SMP=1
547   fi
548
549   ipcopmake linux       LFS_PASS=ipcop
550   ipcopmake 3cp4218     
551   ipcopmake amedyn      
552   ipcopmake cxacru      
553   ipcopmake eciadsl     
554   ipcopmake eagle       
555   ipcopmake speedtouch  
556   if [ 'i386' = $MACHINE ]; then 
557         # These are here because they have i386 only binary libraries
558         # included in the package.
559         ipcopmake cnx_pci       
560         ipcopmake fcdsl         
561         ipcopmake fcdsl2        
562         ipcopmake fcdslsl       
563         ipcopmake fcdslusb      
564         ipcopmake fcdslslusb 
565         ipcopmake fcpci 
566         ipcopmake pulsar        
567         ipcopmake unicorn       
568   fi
569
570   ipcopmake pcmcia-cs
571   ipcopmake expat
572   ipcopmake gdbm
573   ipcopmake gmp
574   ipcopmake openssl
575   ipcopmake python
576   ipcopmake libnet
577   ipcopmake libpng
578   ipcopmake gd
579   ipcopmake popt
580   ipcopmake slang
581   ipcopmake newt
582   ipcopmake libcap
583   ipcopmake pciutils
584   ipcopmake pcre
585   ipcopmake apache
586   ipcopmake arping
587   ipcopmake beep
588   ipcopmake bind
589   ipcopmake capi4k-utils
590   ipcopmake cdrtools
591   ipcopmake dnsmasq
592   ipcopmake dosfstools
593   ipcopmake ethtool
594   ipcopmake ez-ipupdate
595   ipcopmake fcron
596   ipcopmake perl-GD
597   ipcopmake gnupg
598   ipcopmake hdparm
599   ipcopmake ibod
600   ipcopmake initscripts
601   ipcopmake iptables
602   ipcopmake ipac-ng
603   ipcopmake ipaddr
604   ipcopmake iproute2
605   ipcopmake iptstate
606   ipcopmake iputils
607   ipcopmake l7-protocols
608   ipcopmake isapnptools
609   ipcopmake isdn4k-utils
610   ipcopmake kudzu
611   ipcopmake logrotate
612   ipcopmake logwatch
613   ipcopmake mingetty
614   ipcopmake misc-progs
615   ipcopmake mtools
616   ipcopmake nano
617   ipcopmake nash
618   ipcopmake nasm
619   ipcopmake URI
620   ipcopmake HTML-Tagset
621   ipcopmake HTML-Parser
622   ipcopmake Compress-Zlib
623   ipcopmake Digest
624   ipcopmake Digest-SHA1
625   ipcopmake Digest-HMAC
626   ipcopmake libwww-perl
627   ipcopmake Net-DNS
628   ipcopmake Net-IPv4Addr
629   ipcopmake Net_SSLeay
630   ipcopmake IO-Stringy
631   ipcopmake Unix-Syslog
632   ipcopmake Mail-Tools
633   ipcopmake MIME-Tools
634   ipcopmake Net-Server
635   ipcopmake Convert-TNEF
636   ipcopmake Convert-UUlib
637   ipcopmake Archive-Tar
638   ipcopmake Archive-Zip
639   ipcopmake GeoIP
640   ipcopmake fwhits
641   ipcopmake noip_updater
642   ipcopmake ntp
643   ipcopmake oinkmaster
644   ipcopmake openssh
645   ipcopmake openswan
646   ipcopmake pptpclient
647   ipcopmake rrdtool
648   ipcopmake setserial
649   ipcopmake setup
650   ipcopmake snort
651   #ipcopmake speedycgi
652   ipcopmake squid
653   ipcopmake squid-graph
654   ipcopmake tcpdump
655   ipcopmake traceroute
656   ipcopmake vlan
657   #ipcopmake wireless
658   ipcopmake libsafe
659   ipcopmake 3c5x9setup
660   echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
661   ipcopmake pakfire
662   ipcopmake startscripts
663 ## Zuerst die Libs und dann die Programme. Ordnung muss sein!
664   ipcopmake berkeley
665   ipcopmake BerkeleyDB ## The Perl module
666   ipcopmake java
667   ipcopmake libtiff
668   ipcopmake libjpeg
669   ipcopmake libxml2
670   ipcopmake spandsp
671   ipcopmake lzo
672   ipcopmake openvpn
673   ipcopmake pkg-config
674   ipcopmake glib
675   ipcopmake xampp
676   ipcopmake pam
677   ipcopmake pammysql
678   ipcopmake saslauthd PASS=1
679   ipcopmake openldap
680   ipcopmake saslauthd PASS=2
681   ipcopmake xinetd
682   ipcopmake ghostscript
683   ipcopmake cups
684 #  ipcopmake lpd ## Im Moment aus, da CUPS vorhanden ist.
685   ipcopmake samba
686   ipcopmake sudo
687   ipcopmake mc
688   ipcopmake pwlib
689   ipcopmake openh323
690   ipcopmake wget
691   ipcopmake bridge-utils
692   echo -ne "`date -u '+%b %e %T'`: Building ### Mailserver ### \n" | tee -a $LOGFILE
693   ipcopmake postfix
694   ipcopmake fetchmail
695   ipcopmake cyrusimap
696   ipcopmake procmail
697   ipcopmake mailx
698   ipcopmake clamav
699   ipcopmake razor
700   ipcopmake spamassassin
701   ipcopmake amavisd
702   echo -ne "`date -u '+%b %e %T'`: Building ### VoIP-Server ### \n" | tee -a $LOGFILE
703   ipcopmake stund
704   ipcopmake asterisk
705   echo -ne "`date -u '+%b %e %T'`: Building ### MP3-Server ### \n" | tee -a $LOGFILE
706   ipcopmake lame
707   ipcopmake gnump3d
708   echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE
709   ipcopmake applejuice
710   ipcopmake edonkeyclc
711   ipcopmake sane
712   ipcopmake rsync
713   ipcopmake tcpwrapper
714   ipcopmake portmap
715   ipcopmake screen
716   ipcopmake nmap
717   ipcopmake htop
718   ipcopmake nfs
719   ipcopmake ncftp
720   ipcopmake ethereal
721 #  wget http://www.guzu.net/linux/hddtemp.db && mv hddtemp.db $BASEDIR/build/etc/hddtemp.db
722 #  ipcopmake hddtemp
723 #  ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
724 }
725
726 buildinstaller() {
727   # Run installer scripts one by one
728   LOGFILE="$BASEDIR/log/_build.installer.log"
729   export LOGFILE
730   echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
731   if [ 'i386' = $MACHINE ]; then 
732         ipcopmake syslinux
733         ipcopmake as86
734         ipcopmake mbr
735         ipcopmake uClibc
736   fi
737   installmake busybox
738   installmake sysvinit
739   installmake e2fsprogs
740   installmake misc-progs
741   installmake slang
742   installmake util-linux
743   installmake newt
744   installmake pciutils
745   installmake pcmcia-cs
746   installmake kbd
747   installmake installer
748   installmake scsi.img
749   installmake driver.img
750   installmake initrd
751   installmake boot.img
752 }
753
754 buildpackages() {
755   LOGFILE="$BASEDIR/log/_build.packages.log"
756   export LOGFILE
757   echo "... see detailed log in _build.*.log files" >> $LOGFILE
758   echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
759   # Strip files
760   echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
761   find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
762         ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
763         -ls -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
764   # add -ls before -exec if you want to verify what files are stripped
765
766   find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
767         -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
768   # there add -v to strip to verify
769
770   if [ 'i386' = $MACHINE ]; then
771         # Create fcdsl packages
772         echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
773         cp $LFS/install/images/fcdsl/license.txt $LFS  >> $LOGFILE 2>&1
774         touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
775         cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
776                 lib/modules/$KVER/misc/fcdsl*.o.gz \
777                 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
778                 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
779                 etc/fcdsl/fcdsl*.conf \
780                 etc/drdsl/{drdsl,drdsl.ini} \
781                 license.txt \
782                 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
783         rm -f $LFS/license.txt >> $LOGFILE 2>&1
784         cd $BASEDIR
785   fi
786
787 #  Create update for this version
788 #  echo "`date -u '+%b %e %T'`: Building update $VERSION tgz" | tee -a $LOGFILE
789 #  tar -cz -C $BASEDIR/build --files-from=$BASEDIR/updates/$VERSION/ROOTFILES.$MACHINE-$VERSION -f $BASEDIR/updates/$VERSION/patch.tar.gz --exclude='#*'; 
790 #  chmod 755 $BASEDIR/updates/$VERSION/setup
791 #  tar -cz -C $BASEDIR/updates/$VERSION -f $LFS/install/images/$SNAME-update-$VERSION.$MACHINE.tgz patch.tar.gz setup information
792 #  rm -f $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
793   
794   # Generating list of packages used
795   echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
796   rm -f $BASEDIR/doc/packages-list
797   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
798         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
799                 echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
800         fi
801   done
802   echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
803   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
804         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
805   rm -f $BASEDIR/doc/packages-list
806   # packages-list.txt is ready to be displayed for wiki page
807
808   # Create ISO for CDRom and USB-superfloppy
809   ipcopmake cdrom
810   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
811
812   ipfiredist applejuice
813   ipfiredist asterisk
814   ipfiredist cyrusimap
815   ipfiredist fetchmail
816   ipfiredist gnump3d
817   ipfiredist lame
818   ipfiredist libtiff
819   ipfiredist libxml2
820   ipfiredist mc
821   ipfiredist postfix
822   ipfiredist pwlib
823   ipfiredist sane
824   ipfiredist spandsp
825   ipfiredist sudo
826   ipfiredist xampp
827   ipfiredist xinetd
828   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
829   mv -f $LFS/paks/*.tar.gz $LFS/paks/*.md5 $BASEDIR/packages >> $LOGFILE 2>&1
830   rm -rf $LFS/paks
831   rm -rf $BASEDIR/build/tmp/*
832
833   # Cleanup
834   stdumount
835   rm -rf $BASEDIR/build/tmp/*
836
837   # Generating total list of files
838   echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
839   rm -f $BASEDIR/log/FILES
840   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
841         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
842                 echo "##" >>$BASEDIR/log/FILES
843                 echo "## `basename $i`" >>$BASEDIR/log/FILES
844                 echo "##" >>$BASEDIR/log/FILES
845                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
846         fi
847   done
848
849   cd $PWD
850
851 }
852
853 # See what we're supposed to do
854 case "$1" in 
855 build)
856         BUILDMACHINE=`uname -m`
857         PACKAGE=`ls -v -r $BASEDIR/cache/$SNAME-1.4.*-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
858         #only restore on a clean disk
859         if [ ! -f log/perl-*-tools ]; then
860                 if [ ! -n "$PACKAGE" ]; then
861                         echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
862                         prepareenv
863                         buildtoolchain
864                 else
865                         PACKAGENAME=${PACKAGE%.tar.gz}
866                         echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
867                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
868                                 tar zxf $PACKAGE
869                                 prepareenv
870                         else
871                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
872                         fi
873                 fi
874         else
875                 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
876                 prepareenv
877         fi
878         buildbase
879         buildipcop
880         buildinstaller
881         buildpackages
882         ;;
883 shell)
884         # enter a shell inside LFS chroot
885         # may be used to changed kernel settings
886         prepareenv
887         entershell
888         ;;
889 changelog)
890         echo -n "Loading new Changelog from SVN: "
891         svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
892         echo "Finished!"
893         ;;
894 check)
895         echo "Checking sources files availability on the web"
896         if [ ! -d $DIR_CHK ]; then
897                 mkdir -p $DIR_CHK
898         fi
899         FINISHED=0
900         cd $BASEDIR/lfs
901         for c in `seq $MAX_RETRIES`; do
902                 if (( FINISHED==1 )); then
903                         break
904                 fi
905                 FINISHED=1
906                 cd $BASEDIR/lfs
907                 for i in *; do
908                         if [ -f "$i" -a "$i" != "Config" ]; then
909                                 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
910                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" check
911                                 if [ $? -ne 0 ]; then
912                                         echo "Check : wget error in lfs/$i"
913                                         FINISHED=0
914                                 fi
915                         fi
916                 done
917         done
918         cd -
919         ;;
920 checkclean)
921         echo "Erasing sources files availability tags"
922         rm -rf $DIR_CHK/*
923         ;;
924 clean)
925         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
926                 $LOSETUP -d $i 2>/dev/null
927         done
928         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
929                 umount $i
930         done
931         stdumount
932         for i in `seq 0 7`; do
933             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
934                 umount /dev/loop${i}     2>/dev/null;
935                 losetup -d /dev/loop${i} 2>/dev/null;
936             fi;
937         done
938         rm -rf $BASEDIR/build
939         rm -rf $BASEDIR/cdrom
940         rm -rf $BASEDIR/packages
941         rm -rf $BASEDIR/log
942         if [ -h /tools ]; then
943                 rm -f /tools
944         fi
945         ;;
946 dist)
947         echo -ne "Updating & building source package from SVN: "
948         svn up > /dev/null
949         svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
950         tar cfz ipfire-source-`date +'%Y-%m-%d'`-r`svn info | grep Revision | cut -c 11-`.tar.gz ipfire-source
951         rm ipfire-source/ -r
952         echo "Finished!"
953         ;;
954 newpak)
955         # create structure for a new package
956         echo -e "Name of the new package: $2"
957         if [ ! -f "lfs/$2" ]; then
958                 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
959                 mkdir -p src/paks/$2
960                 cd src/paks/$2
961                 echo "`date -u '+%b %e %T'`: Creating files"
962                 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
963
964                 touch ROOTFILES
965                 touch CONFFILES
966                 touch {,un}install.sh
967         ## install.sh
968                 echo '#!/bin/bash' > install.sh
969                 echo '#' >> install.sh
970                 echo '#################################################################' >> install.sh
971                 echo '#                                                               #' >> install.sh
972                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
973                 echo '#                                                               #' >> install.sh
974                 echo '#################################################################' >> install.sh
975                 echo '#' >> install.sh
976                 echo '# Extract the files' >> install.sh
977                 echo 'tar xfz files.tgz -C /' >> install.sh
978                 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
979         ## uninstall.sh
980                 echo '#!/bin/bash' > uninstall.sh
981                 echo '#################################################################' >> uninstall.sh
982                 echo '#                                                               #' >> uninstall.sh
983                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
984                 echo '#                                                               #' >> uninstall.sh
985                 echo '#################################################################' >> uninstall.sh
986                 echo '#' >> uninstall.sh
987                 echo '# Delete the files' >> uninstall.sh
988                 echo '## Befehl fehlt noch' >> uninstall.sh
989                 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
990                 echo "`date -u '+%b %e %T'`: Adding files to SVN"
991                 cd - && svn add lfs/$2 && svn add src/paks/$2
992
993                 echo -n "Do you want to remove the folders? [y/n]"
994                 read REM
995                 if  [ "$REM" == "y" ]; then
996                         echo "Removing the folders..."
997                         svn del src/paks/$2 --force
998                 else
999                         echo "Folders are kept."
1000                 fi
1001         else
1002                 echo "$2 already exists"
1003         fi
1004         exit 0
1005         ;;
1006 prefetch)
1007         if [ ! -d $BASEDIR/cache ]; then
1008                 mkdir $BASEDIR/cache
1009         fi
1010         mkdir -p $BASEDIR/log
1011         echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1012         FINISHED=0
1013         cd $BASEDIR/lfs
1014         for c in `seq $MAX_RETRIES`; do
1015                 if (( FINISHED==1 )); then 
1016                         break
1017                 fi
1018                 FINISHED=1
1019                 cd $BASEDIR/lfs
1020                 for i in *; do
1021                         if [ -f "$i" -a "$i" != "Config" ]; then
1022                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1023                                 if [ $? -ne 0 ]; then
1024                                         echo "Prefetch : wget error in lfs/$i"
1025                                         FINISHED=0
1026                                 else
1027                                         if [ $c -eq 1 ]; then
1028                                                 echo "Prefetch : lfs/$i files loaded"
1029                                         fi
1030                                 fi
1031                         fi
1032                 done
1033         done
1034         echo "Prefetch : verifying md5sum"
1035         ERROR=0
1036         for i in *; do
1037                 if [ -f "$i" -a "$i" != "Config" ]; then
1038                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1039                         if [ $? -ne 0 ]; then
1040                                 echo "md5 difference in lfs/$i"
1041                                 ERROR=1
1042                         fi
1043                 fi
1044         done
1045         if [ $ERROR -eq 0 ]; then
1046                 echo "Prefetch : all files md5sum match"
1047         fi
1048         cd -
1049         ;;
1050 toolchain)
1051         prepareenv
1052         buildtoolchain
1053         BUILDMACHINE=`uname -m`
1054         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1055         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1056                 build/{bin,etc,usr/bin,usr/local} \
1057                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1058                 log >> $LOGFILE
1059         md5sum cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1060                 > cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1061         stdumount
1062         ;;
1063 gettoolchain)
1064         BUILDMACHINE=`uname -m`
1065         # arbitrary name to be updated in case of new toolchain package upload
1066         PACKAGE=$SNAME-1.4-toolchain-$BUILDMACHINE
1067         URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1068         echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1069         cd $BASEDIR/cache
1070         wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5
1071         if [ $? -ne 0 ]; then
1072                 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1073         else
1074                 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1075                         echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1076                         echo "`date -u '+%b %e %T'`: Uncompressing toolchain" | tee -a $LOGFILE
1077                         cd $BASEDIR && tar xfz cache/$PACKAGE.tar.gz -C .
1078                         rm -vf $BASEDIR/cache/$PACKAGE.{tar.gz,md5}
1079                 else
1080                         exiterror "$PACKAGE.md5 did not match, check downloaded package"
1081                 fi
1082         fi
1083         ;;
1084 paks)
1085         prepareenv
1086         buildpackages
1087         ;;
1088 update)
1089         echo "Load the latest source-files:"
1090         svn update
1091         ;;
1092 commit)
1093         echo "Upload the changed files:"
1094         svn commit
1095         ;;
1096 make)
1097         echo "Do a complete compile:"   
1098         ./make.sh prefetch && ./make.sh gettoolchain && ./make.sh build
1099         ;;
1100 diff)
1101         echo -ne "Make a local diff to last SVN revision: "
1102         svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1103         echo "Finished!"
1104         echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1105         ;;
1106 sync)
1107         echo -e "Syncing Cache to FTP:"
1108         echo -ne "Password for mirror.ipfire.org: "; read PASS
1109         rm -f doc/packages-to-remove-from-ftp
1110         ncftpls -u web3 -p $PASS ftp://mirror.ipfire.org/html/source-packages/source/ > ftplist
1111         for i in `ls -w1 cache/`; do
1112                 grep $i ftplist
1113                 if [ "$?" -ne "0" ]; then
1114                         ncftpput -u web3 -p $PASS mirror.ipfire.org /html/source-packages/source cache/$i
1115                         if [ "$?" -eq "0" ]; then
1116                                 echo -e "$i was successfully uploaded to the ftp server."
1117                         else
1118                                 echo -e "There was an error while uploading $i to the ftp server."
1119                         fi
1120                 fi
1121         done
1122         for i in `cat ftplist`; do
1123                 ls -w1 cache/ | grep $i
1124                 if [ "$?" -eq "1" ]; then
1125                         echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1126                 fi
1127         done
1128         rm -f ftplist
1129         ;;
1130 *)
1131         echo "Usage: $0 {build|changelog|check|checkclean|clean|commit|diff|dist|gettoolchain|make|newpak|prefetch|shell|sync|toolchain|update}"
1132         cat doc/make.sh-usage
1133         exit 1
1134         ;;
1135 esac