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