Hauptsächlich Quellenupdate. Apache - Bind - hddtemp - hdparm - lame
[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 # PREVIOUSTAG=IPCOP_v1_4_10_FINAL
30   SLOGAN="We secure your network"       # Software slogan
31   CONFIG_ROOT=/var/ipfire               # Configuration rootdir
32   NICE=10
33   MAX_RETRIES=3                         # prefetch/check loop
34   KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
35   MACHINE=`uname -m`
36
37   # Debian specific settings
38   if [ ! -e /etc/debian_version ]; then
39         FULLPATH=`which $0`
40   else
41         if [ -x /usr/bin/realpath ]; then
42                 FULLPATH=`/usr/bin/realpath $0`
43         else
44                 echo "ERROR: Need to do apt-get install realpath"
45                 exit 1
46         fi
47   fi
48
49
50   PWD=`pwd`
51   BASENAME=`basename $0`
52   BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
53   LOGFILE=$BASEDIR/log/_build.preparation.log
54   export BASEDIR LOGFILE
55   DIR_CHK=$BASEDIR/cache/check
56   mkdir $BASEDIR/log/ 2>/dev/null
57
58   if [ 'x86_64' = $MACHINE -o 'i686' = $MACHINE -o 'i586' = $MACHINE -o 'i486' = $MACHINE -o 'i386' = $MACHINE ]; then
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                 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                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
358         fi
359 #       test -d $BASEDIR/packages || mkdir $BASEDIR/packages
360 #       mv -f $BASEDIR/build/paks/* $BASEDIR/packages/
361         return 0
362 }
363
364
365 installmake() {
366         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
367                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
368                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
369                 if [ $? -ne 0 ]; then
370                         exiterror "Download error in $1"
371                 fi
372                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
373                 if [ $? -ne 0 ]; then
374                         exiterror "md5sum error in $1, check file in cache or signature"
375                 fi
376                 chroot $LFS /tools/bin/env -i   HOME=/root \
377                                                 TERM=$TERM PS1='\u:\w\$ ' \
378                                                 PATH=/usr/local/bin:/opt/$MACHINE-uClibc/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin \
379                                                 VERSION=$VERSION \
380                                                 CONFIG_ROOT=$CONFIG_ROOT \
381                                                 LFS_PASS="install" \
382                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
383                                                 CFLAGS="-Os" CXXFLAGS="-Os" \
384                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
385                                                 KVER=$KVER \
386                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
387                     /bin/bash -x -c "cd /usr/src/lfs && \
388                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
389                 if [ $? -ne 0 ]; then
390                         exiterror "Building $*"
391                 fi
392         else
393                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
394         fi
395         return 0
396 }
397
398 buildtoolchain() {
399     LOGFILE="$BASEDIR/log/_build.toolchain.log"
400     export LOGFILE
401     echo -ne "`date -u '+%b %e %T'`: Stage1 toolchain build \n" | tee -a $LOGFILE
402     # Build sed now, as we use some extensions
403     ORG_PATH=$PATH
404     NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
405     export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
406     lfsmake1 ccache
407     lfsmake1 sed        LFS_PASS=1
408     lfsmake1 m4         LFS_PASS=1
409     lfsmake1 bison      LFS_PASS=1
410     lfsmake1 flex       LFS_PASS=1
411     lfsmake1 binutils   LFS_PASS=1
412     lfsmake1 gcc        LFS_PASS=1
413     export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
414     
415     lfsmake1 linux
416     lfsmake1 tcl
417     lfsmake1 expect
418     lfsmake1 glibc
419     lfsmake1 dejagnu
420     lfsmake1 gcc        LFS_PASS=2
421     lfsmake1 binutils   LFS_PASS=2
422     lfsmake1 gawk
423     lfsmake1 coreutils
424     lfsmake1 bzip2
425     lfsmake1 gzip
426     lfsmake1 diffutils
427     lfsmake1 findutils
428     lfsmake1 make
429     lfsmake1 grep
430     lfsmake1 sed        LFS_PASS=2
431     lfsmake1 m4         LFS_PASS=2
432     lfsmake1 bison      LFS_PASS=2
433     lfsmake1 flex       LFS_PASS=2
434     lfsmake1 gettext
435     lfsmake1 ncurses
436     lfsmake1 patch
437     lfsmake1 tar
438     lfsmake1 texinfo
439     lfsmake1 bash
440     lfsmake1 util-linux
441     lfsmake1 perl
442     export PATH=$ORG_PATH
443 }
444
445 buildbase() {
446     LOGFILE="$BASEDIR/log/_build.base.log"
447     export LOGFILE
448     echo -ne "`date -u '+%b %e %T'`: Stage2 linux base build \n" | tee -a $LOGFILE
449     # Run LFS dynamic binary creation scripts one by one
450     lfsmake2 stage2
451     lfsmake2 makedev
452     lfsmake2 linux
453     lfsmake2 man-pages
454     lfsmake2 glibc
455     lfsmake2 binutils
456     lfsmake2 gcc
457     lfsmake2 coreutils
458     lfsmake2 zlib
459     lfsmake2 mktemp
460     lfsmake2 iana-etc
461     lfsmake2 findutils
462     lfsmake2 gawk
463     lfsmake2 ncurses
464     lfsmake2 vim
465     lfsmake2 m4
466     lfsmake2 bison
467     lfsmake2 less
468     lfsmake2 groff
469     lfsmake2 sed
470     lfsmake2 flex
471     lfsmake2 gettext
472     lfsmake2 net-tools
473     lfsmake2 inetutils
474     lfsmake2 perl
475     lfsmake2 texinfo
476     lfsmake2 autoconf
477     lfsmake2 automake
478     lfsmake2 bash
479     lfsmake2 file
480     lfsmake2 libtool
481     lfsmake2 bzip2
482     lfsmake2 diffutils
483     lfsmake2 ed
484     lfsmake2 kbd
485     lfsmake2 e2fsprogs
486     lfsmake2 grep
487     if [ 'i386' = $MACHINE ]; then 
488         lfsmake2 grub
489     elif [ 'alpha' = $MACHINE ]; then 
490         lfsmake2 aboot
491     fi
492     lfsmake2 gzip
493     lfsmake2 man
494     lfsmake2 make
495     lfsmake2 modutils
496     lfsmake2 patch
497     lfsmake2 procinfo
498     lfsmake2 procps
499     lfsmake2 psmisc
500     lfsmake2 shadow
501     lfsmake2 sysklogd
502     lfsmake2 sysvinit
503     lfsmake2 tar
504     lfsmake2 util-linux
505 }
506
507 buildipcop() {
508   # Run IPCop make scripts one by one
509   LOGFILE="$BASEDIR/log/_build.ipcop.log"
510   export LOGFILE
511   echo -ne "`date -u '+%b %e %T'`: Stage3 $NAME build \n" | tee -a $LOGFILE
512
513   # Build these first as some of the kernel packages below rely on 
514   # these for some of their client program functionality 
515   ipcopmake configroot
516   ipcopmake dhcp
517   ipcopmake dhcpcd
518   ipcopmake libusb
519   ipcopmake libpcap
520   ipcopmake linux-atm
521   ipcopmake ppp
522   ipcopmake rp-pppoe
523   ipcopmake unzip
524   # Do SMP now
525   if [ 'i386' = $MACHINE ]; then 
526         # abuse the SMP flag, and make an minimal installer kernel first
527         # so that the boot floppy always works.....
528         ipcopmake linux         LFS_PASS=ipcop SMP=installer
529         ipcopmake linux         LFS_PASS=ipcop SMP=1
530         ipcopmake 3cp4218       SMP=1
531         ipcopmake amedyn        SMP=1
532         ipcopmake cxacru        SMP=1
533         ipcopmake eagle         SMP=1
534
535         # These are here because they have i386 only binary libraries
536         # included in the package.
537         ipcopmake cnx_pci       SMP=1
538         ipcopmake fcdsl         SMP=1
539         ipcopmake fcdsl2        SMP=1
540         ipcopmake fcdslsl       SMP=1
541         ipcopmake fcdslusb      SMP=1
542         ipcopmake fcdslslusb    SMP=1
543         ipcopmake pulsar        SMP=1
544         ipcopmake unicorn       SMP=1
545   fi
546
547   ipcopmake linux       LFS_PASS=ipcop
548   ipcopmake 3cp4218     
549   ipcopmake amedyn      
550   ipcopmake cxacru      
551   ipcopmake eciadsl     
552   ipcopmake eagle       
553   ipcopmake speedtouch  
554   if [ 'i386' = $MACHINE ]; then 
555         # These are here because they have i386 only binary libraries
556         # included in the package.
557         ipcopmake cnx_pci       
558         ipcopmake fcdsl         
559         ipcopmake fcdsl2        
560         ipcopmake fcdslsl       
561         ipcopmake fcdslusb      
562         ipcopmake fcdslslusb    
563         ipcopmake pulsar        
564         ipcopmake unicorn       
565   fi
566
567   ipcopmake pcmcia-cs
568   ipcopmake expat
569   ipcopmake gdbm
570   ipcopmake gmp
571   ipcopmake openssl
572   ipcopmake python
573   ipcopmake libnet
574   ipcopmake libpng
575   ipcopmake gd
576   ipcopmake popt
577   ipcopmake slang
578   ipcopmake newt
579   ipcopmake libcap
580   ipcopmake pciutils
581   ipcopmake pcre
582   ipcopmake apache
583   ipcopmake arping
584   ipcopmake beep
585   ipcopmake bind
586   ipcopmake capi4k-utils
587   ipcopmake cdrtools
588   ipcopmake dnsmasq
589   ipcopmake dosfstools
590   ipcopmake ethtool
591   ipcopmake ez-ipupdate
592   ipcopmake fcron
593   ipcopmake perl-GD
594   ipcopmake gnupg
595   ipcopmake hdparm
596   ipcopmake ibod
597   ipcopmake initscripts
598   ipcopmake iptables
599   ipcopmake ipac-ng
600   ipcopmake ipaddr
601   ipcopmake iproute2
602   ipcopmake iptstate
603   ipcopmake iputils
604   ipcopmake isapnptools
605   ipcopmake isdn4k-utils
606   ipcopmake kudzu
607   ipcopmake logrotate
608   ipcopmake logwatch
609   ipcopmake mingetty
610   ipcopmake misc-progs
611   ipcopmake mtools
612   ipcopmake nano
613   ipcopmake nash
614   ipcopmake nasm
615   ipcopmake URI
616   ipcopmake HTML-Tagset
617   ipcopmake HTML-Parser
618   ipcopmake Compress-Zlib
619   ipcopmake Digest
620   ipcopmake Digest-SHA1
621   ipcopmake Digest-HMAC
622   ipcopmake libwww-perl
623   ipcopmake Net-DNS
624   ipcopmake Net-IPv4Addr
625   ipcopmake Net_SSLeay
626   ipcopmake noip_updater
627   ipcopmake ntp
628   ipcopmake oinkmaster
629   ipcopmake openssh
630   ipcopmake openswan
631   ipcopmake pptpclient
632   ipcopmake rrdtool
633   ipcopmake setserial
634   ipcopmake setup
635   ipcopmake snort
636   #ipcopmake speedycgi
637   ipcopmake squid
638   ipcopmake squid-graph
639   ipcopmake tcpdump
640   ipcopmake traceroute
641   ipcopmake vlan
642   ipcopmake wireless
643   ipcopmake libsafe
644   ipcopmake 3c5x9setup
645   echo -ne "`date -u '+%b %e %T'`: Building IPFire modules \n" | tee -a $LOGFILE
646 ## Zuerst die Libs und dann die Programme. Ordnung muss sein!
647   ipcopmake berkeley
648   ipcopmake libtiff
649   ipcopmake libjpeg
650   ipcopmake libxml2
651   ipcopmake spandsp
652   ipcopmake lzo
653   ipcopmake pkg-config
654   ipcopmake glib
655   ipcopmake xampp
656   ipcopmake pam
657   ipcopmake pammysql
658   ipcopmake saslauthd PASS=1
659   ipcopmake openldap
660   ipcopmake saslauthd PASS=2
661   ipcopmake xinetd
662   ipcopmake ghostscript
663   ipcopmake cups
664   ipcopmake samba
665   ipcopmake sudo
666   ipcopmake mc
667   ipcopmake pwlib
668   ipcopmake openh323
669   ipcopmake wget
670   ipcopmake bridge-utils
671   ipcopmake postfix
672   ipcopmake fetchmail
673   ipcopmake cyrusimap
674   ipcopmake stund
675 #  ipcopmake lpd
676   ipcopmake openvpn
677   ipcopmake asterisk
678   ipcopmake edonkeyclc
679   ipcopmake sane
680   ipcopmake lame
681   ipcopmake gnump3d
682 #  wget http://www.guzu.net/linux/hddtemp.db && mv hddtemp.db $BASEDIR/build/etc/hddtemp.db
683 #  ipcopmake hddtemp
684 # ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
685 }
686
687 buildinstaller() {
688   # Run installer scripts one by one
689   LOGFILE="$BASEDIR/log/_build.installer.log"
690   export LOGFILE
691   echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
692   if [ 'i386' = $MACHINE ]; then 
693         ipcopmake syslinux
694         ipcopmake as86
695         ipcopmake mbr
696         ipcopmake uClibc
697   fi
698   installmake busybox
699   installmake sysvinit
700   installmake e2fsprogs
701   installmake misc-progs
702   installmake slang
703   installmake util-linux
704   installmake newt
705   installmake pciutils
706   installmake pcmcia-cs
707   installmake kbd
708   installmake installer
709   installmake scsi.img
710   installmake driver.img
711   installmake initrd
712   installmake boot.img
713 }
714
715 buildpackages() {
716   LOGFILE="$BASEDIR/log/_build.packages.log"
717   export LOGFILE
718   echo "... see detailed log in _build.*.log files" >> $LOGFILE
719   echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
720   # Strip files
721   echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
722   find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
723         ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
724         -ls -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
725   # add -ls before -exec if you want to verify what files are stripped
726
727   find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
728         -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
729   # there add -v to strip to verify
730
731   if [ 'i386' = $MACHINE ]; then
732         # Create fcdsl packages
733         echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
734         cp $LFS/install/images/fcdsl/license.txt $LFS  >> $LOGFILE 2>&1
735         touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
736         cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
737                 lib/modules/$KVER/misc/fcdsl*.o.gz \
738                 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
739                 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
740                 etc/fcdsl/fcdsl*.conf \
741                 etc/drdsl/{drdsl,drdsl.ini} \
742                 license.txt \
743                 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
744         rm -f $LFS/license.txt >> $LOGFILE 2>&1
745         cd $BASEDIR
746   fi
747
748 #  Create update for this version
749 #  echo "`date -u '+%b %e %T'`: Building update $VERSION tgz" | tee -a $LOGFILE
750 #  tar -cz -C $BASEDIR/build --files-from=$BASEDIR/updates/$VERSION/ROOTFILES.$MACHINE-$VERSION -f $BASEDIR/updates/$VERSION/patch.tar.gz --exclude='#*'; 
751 #  chmod 755 $BASEDIR/updates/$VERSION/setup
752 #  tar -cz -C $BASEDIR/updates/$VERSION -f $LFS/install/images/$SNAME-update-$VERSION.$MACHINE.tgz patch.tar.gz setup information
753 #  rm -f $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
754   
755   # Generating list of packages used
756   echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
757   rm -f $BASEDIR/doc/packages-list
758   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
759         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
760                 echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
761         fi
762   done
763   echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
764   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
765         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
766   rm -f $BASEDIR/doc/packages-list
767   # packages-list.txt is ready to be displayed for wiki page
768
769   # Create ISO for CDRom and USB-superfloppy
770   ipcopmake cdrom
771   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
772
773   # Build IPFire packages
774   ipfiredist asterisk
775   ipfiredist cyrusimap
776   ipfiredist fetchmail
777   ipfiredist libtiff
778   ipfiredist libxml2
779   ipfiredist mc
780   ipfiredist postfix
781   ipfiredist pwlib
782   ipfiredist sane
783   ipfiredist spandsp
784   ipfiredist sudo
785   ipfiredist xampp
786   ipfiredist xinetd
787   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
788   cp -f $LFS/paks/*.tar.gz $LFS/paks/*.md5 $BASEDIR/packages >> $LOGFILE 2>&1
789
790   # Cleanup
791   stdumount
792   rm -rf $BASEDIR/build/tmp/*
793
794   # Generating total list of files
795   echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
796   rm -f $BASEDIR/log/FILES
797   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
798         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
799                 echo "##" >>$BASEDIR/log/FILES
800                 echo "## `basename $i`" >>$BASEDIR/log/FILES
801                 echo "##" >>$BASEDIR/log/FILES
802                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
803         fi
804   done
805
806   cd $PWD
807
808 }
809
810 # See what we're supposed to do
811 case "$1" in 
812 build)
813         BUILDMACHINE=`uname -m`
814         PACKAGE=`ls -v -r $BASEDIR/cache/$SNAME-1.4.*-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
815         #only restore on a clean disk
816         if [ ! -f log/perl-*-tools ]; then
817                 if [ ! -n "$PACKAGE" ]; then
818                         echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
819                         prepareenv
820                         buildtoolchain
821                 else
822                         PACKAGENAME=${PACKAGE%.tar.gz}
823                         echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
824                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
825                                 tar zxf $PACKAGE
826                                 prepareenv
827                         else
828                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
829                         fi
830                 fi
831         else
832                 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
833                 prepareenv
834         fi
835         buildbase
836         buildipcop
837         buildinstaller
838         buildpackages
839         ;;
840 shell)
841         # enter a shell inside LFS chroot
842         # may be used to changed kernel settings
843         prepareenv
844         entershell
845         ;;
846 changelog)
847         echo "Building doc/Changelog from CVS"
848         # cv2cl script come from http://www.red-bean.com/cvs2cl/
849         if [ ! -s $BASEDIR/doc/CVS/Tag ]; then
850                 BRANCHOPTS=""
851         else
852                 BRANCH=`cat $BASEDIR/doc/CVS/Tag`
853                 BRANCH=${BRANCH:1}
854                 BRANCHOPTS="--follow-only $BRANCH"
855         fi
856         
857         $BASEDIR/tools/cvs2cl.pl --gmt --show-dead $BRANCHOPTS -f $BASEDIR/doc/ChangeLog
858         rm -f $BASEDIR/doc/ChangeLog.bak
859         echo
860         echo "Commit the change now to update CVS"
861         ;;
862 check)
863         echo "Checking sources files availability on the web"
864         if [ ! -d $DIR_CHK ]; then
865                 mkdir -p $DIR_CHK
866         fi
867         FINISHED=0
868         cd $BASEDIR/lfs
869         for c in `seq $MAX_RETRIES`; do
870                 if (( FINISHED==1 )); then
871                         break
872                 fi
873                 FINISHED=1
874                 cd $BASEDIR/lfs
875                 for i in *; do
876                         if [ -f "$i" -a "$i" != "Config" ]; then
877                                 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
878                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" check
879                                 if [ $? -ne 0 ]; then
880                                         echo "Check : wget error in lfs/$i"
881                                         FINISHED=0
882                                 fi
883                         fi
884                 done
885         done
886         cd -
887         ;;
888 checkclean)
889         echo "Erasing sources files availability tags"
890         rm -rf $DIR_CHK/*
891         ;;
892 clean)
893         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
894                 $LOSETUP -d $i 2>/dev/null
895         done
896         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
897                 umount $i
898         done
899         stdumount
900         for i in `seq 0 7`; do
901             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
902                 umount /dev/loop${i}     2>/dev/null;
903                 losetup -d /dev/loop${i} 2>/dev/null;
904             fi;
905         done
906         rm -rf $BASEDIR/build
907         rm -rf $BASEDIR/cdrom
908         rm -rf $BASEDIR/log
909         rm -f $BASEDIR/updates/$VERSION/patch.tar.gz;
910         if [ -h /tools ]; then
911                 rm -f /tools
912         fi
913         ;;
914 dist)
915         echo "Building source package from CVS, list of changed files, MD5 of release files"
916         if [ ! -s $BASEDIR/doc/CVS/Tag ]; then
917                 BRANCH=""
918                 BRANCHOPTS="-D `date +'%Y-%m-%d'`"
919         else
920                 BRANCH=`cat $BASEDIR/doc/CVS/Tag`
921                 BRANCH=${BRANCH:1}
922                 BRANCHOPTS="-r $BRANCH"
923         fi
924
925         rm -rf $BASEDIR/build/tmp/$SNAME-$VERSION $BASEDIR/doc/release.txt
926         cd $BASEDIR/build/tmp
927         # build sources tgz
928         echo "Export tree $BRANCH $SNAME-$VERSION"
929         cvs -z3 -d `cat $BASEDIR/CVS/Root` export $BRANCHOPTS ipcop
930         if [ $? -eq 0 ]; then
931                 mv ipcop $SNAME-$VERSION
932                 tar cfz $BASEDIR/$SNAME-sources-$VERSION.tgz $SNAME-$VERSION
933                 cd $BASEDIR
934
935                 if [ ! -d $BASEDIR/build/tmp/$PREVIOUSTAG ]; then
936                         # export previous version to be compared with actual, this help to check wich files need to go in update
937                         cd $BASEDIR/build/tmp
938                         echo "Export tree $PREVIOUSTAG"
939                         cvs -z3 -d `cat $BASEDIR/CVS/Root` export -r $PREVIOUSTAG ipcop
940                         mv ipcop $PREVIOUSTAG
941                 fi
942                 if [ -d $BASEDIR/build/tmp/$PREVIOUSTAG -o -d $BASEDIR/build/tmp/$SNAME-$VERSION ]; then
943                         cd $BASEDIR/build/tmp
944                         echo "diff $PREVIOUSTAG <> $BRANCH $SNAME-$VERSION >doc/updated-sources.txt"
945                         diff -rq $PREVIOUSTAG $SNAME-$VERSION > $BASEDIR/doc/updated-sources.txt
946                         mv $BASEDIR/doc/updated-sources.txt $BASEDIR/doc/updated-sources.bak
947                         sed -e "s+Files $PREVIOUSTAG\/++" \
948                                 -e "s+ and .*$++" \
949                                 -e "s+src/rc.d+etc/rc.d+" \
950                                 -e "s+^langs/+var/ipcop/langs/+" \
951                                 -e "s+html/cgi-bin+home/httpd/cgi-bin+" $BASEDIR/doc/updated-sources.bak \
952                                 > $BASEDIR/doc/updated-sources.txt
953                         rm -f $BASEDIR/doc/updated-sources.bak
954                 fi
955         fi
956         ;;
957 newpak)
958         # create structure for a new package
959         echo -e "Name of the new package: $2"
960         if [ ! -f "lfs/$2" ]; then
961                 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
962                 mkdir -p src/paks/$2
963                 cd src/paks/$2
964                 echo "`date -u '+%b %e %T'`: Creating files"
965                 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
966
967                 touch ROOTFILES
968                 touch CONFFILES
969                 touch {,un}install.sh
970         ## install.sh
971                 echo '#!/bin/bash' > install.sh
972                 echo '#' >> install.sh
973                 echo '#################################################################' >> install.sh
974                 echo '#                                                               #' >> install.sh
975                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
976                 echo '#                                                               #' >> install.sh
977                 echo '#################################################################' >> install.sh
978                 echo '#' >> install.sh
979                 echo '# Extract the files' >> install.sh
980                 echo 'tar xfz files.tgz -C /' >> install.sh
981                 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
982         ## uninstall.sh
983                 echo '#!/bin/bash' > uninstall.sh
984                 echo '#################################################################' >> uninstall.sh
985                 echo '#                                                               #' >> uninstall.sh
986                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
987                 echo '#                                                               #' >> uninstall.sh
988                 echo '#################################################################' >> uninstall.sh
989                 echo '#' >> uninstall.sh
990                 echo '# Delete the files' >> uninstall.sh
991                 echo '## Befehl fehlt noch' >> uninstall.sh
992                 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
993                 echo "`date -u '+%b %e %T'`: Adding files to SVN"
994                 cd - && svn add lfs/$2 && svn add src/paks/$2
995
996                 echo -n "Do you want to remove the folders? [y/n]"
997                 read REM
998                 if  [ "$REM" == "y" ]; then
999                         echo "Removing the folders..."
1000                         svn del src/paks/$2 --force
1001                 else
1002                         echo "Folders are kept."
1003                 fi
1004         else
1005                 echo "$2 already exists"
1006         fi
1007         exit 0
1008         ;;
1009 prefetch)
1010         if [ ! -d $BASEDIR/cache ]; then
1011                 mkdir $BASEDIR/cache
1012         fi
1013         mkdir -p $BASEDIR/log
1014         echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1015         FINISHED=0
1016         cd $BASEDIR/lfs
1017         for c in `seq $MAX_RETRIES`; do
1018                 if (( FINISHED==1 )); then 
1019                         break
1020                 fi
1021                 FINISHED=1
1022                 cd $BASEDIR/lfs
1023                 for i in *; do
1024                         if [ -f "$i" -a "$i" != "Config" ]; then
1025                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1026                                 if [ $? -ne 0 ]; then
1027                                         echo "Prefetch : wget error in lfs/$i"
1028                                         FINISHED=0
1029                                 else
1030                                         if [ $c -eq 1 ]; then
1031                                                 echo "Prefetch : lfs/$i files loaded"
1032                                         fi
1033                                 fi
1034                         fi
1035                 done
1036         done
1037         echo "Prefetch : verifying md5sum"
1038         ERROR=0
1039         for i in *; do
1040                 if [ -f "$i" -a "$i" != "Config" ]; then
1041                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1042                         if [ $? -ne 0 ]; then
1043                                 echo "md5 difference in lfs/$i"
1044                                 ERROR=1
1045                         fi
1046                 fi
1047         done
1048         if [ $ERROR -eq 0 ]; then
1049                 echo "Prefetch : all files md5sum match"
1050         fi
1051         cd -
1052         ;;
1053 rootfiles)
1054         PREVIOUSVERSION=`echo $PREVIOUSTAG | sed -e 's/IPCOP_v//' -e 's/_FINAL//' -e 's/_/\./g'`
1055         # make md5 list of actual build
1056         # some packages include a timestamp (kernel/perl/python/vim and more), so md5 vary at each build
1057         # anyway, it is sometime usable after a patch or a minor upgrade to know wich files include in update
1058         if [ ! -f "$BASEDIR/build/install/cdrom/$SNAME-$VERSION.tgz" ]; then
1059                 echo "need cdrom be build to read include files list, use ./make.sh build before."
1060         else
1061                 tar tzf $BASEDIR/build/install/cdrom/$SNAME-$VERSION.tgz > $BASEDIR/updates/$VERSION/FILES.tmp
1062                 cd $BASEDIR/build
1063                 rm -f $BASEDIR/updates/$VERSION/FILES-$MACHINE-$VERSION.md5
1064                 for line in `cat $BASEDIR/updates/$VERSION/FILES.tmp`; do
1065                         if [ -f "$line" -a ! -L "$line" ]; then
1066                                 md5sum "$line" >> $BASEDIR/updates/$VERSION/FILES-$MACHINE-$VERSION.md5
1067                         fi
1068                 done
1069                 diff $BASEDIR/updates/$PREVIOUSVERSION/FILES-$MACHINE-$PREVIOUSVERSION.md5 \
1070                         $BASEDIR/updates/$VERSION/FILES-$MACHINE-$VERSION.md5 \
1071                         > $BASEDIR/updates/$VERSION/FILES-$MACHINE.diff
1072                 awk '$1==">" {print $3}' $BASEDIR/updates/$VERSION/FILES-$MACHINE.diff \
1073                         > $BASEDIR/updates/$VERSION/ROOTFILES.add.$MACHINE
1074                 awk '$1=="<" {print $3}' $BASEDIR/updates/$VERSION/FILES-$MACHINE.diff \
1075                         > $BASEDIR/updates/$VERSION/ROOTFILES.remove.$MACHINE.tmp
1076                 rm -f $BASEDIR/updates/$VERSION/ROOTFILES.remove.$MACHINE
1077                 for line in `cat $BASEDIR/updates/$VERSION/ROOTFILES.remove.$MACHINE.tmp`; do
1078                         # a file is only removed when not in add file
1079                         if ( ! grep -q "^$line$" $BASEDIR/updates/$VERSION/ROOTFILES.add.$MACHINE ); then
1080                                 echo $line >> $BASEDIR/updates/$VERSION/ROOTFILES.remove.$MACHINE
1081                         fi
1082                 done
1083                 rm -f $BASEDIR/updates/$VERSION/{FILES.tmp,FILES-*.diff,ROOTFILES.remove.*.tmp}
1084         fi
1085         exit 0
1086         ;;
1087 toolchain)
1088         prepareenv
1089         buildtoolchain
1090         BUILDMACHINE=`uname -m`
1091         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1092         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1093                 build/{bin,etc,usr/bin,usr/local} \
1094                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1095                 log >> $LOGFILE
1096         md5sum cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1097                 > cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1098         stdumount
1099         ;;
1100 gettoolchain)
1101         BUILDMACHINE=`uname -m`
1102         # arbitrary name to be updated in case of new toolchain package upload
1103         PACKAGE=$SNAME-1.4-toolchain-$BUILDMACHINE
1104         URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1105         echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1106         cd $BASEDIR/cache
1107         wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5
1108         if [ $? -ne 0 ]; then
1109                 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1110         else
1111                 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1112                         echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1113                         echo "`date -u '+%b %e %T'`: Uncompressing toolchain" | tee -a $LOGFILE
1114                         cd $BASEDIR && tar xvfz cache/$PACKAGE.tar.gz -C .
1115                 else
1116                         exiterror "$PACKAGE.md5 did not match, check downloaded package"
1117                 fi
1118         fi
1119         ;;
1120 update)
1121         echo "Load the latest source-files:"
1122         svn update
1123         ;;
1124 *)
1125         echo "Usage: $0 {build|changelog|check|checkclean|clean|dist|gettoolchain|newpak|prefetch|rootfiles|shell|toolchain|update}"
1126         cat doc/make.sh-usage
1127         exit 1
1128         ;;
1129 esac