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 zaptel
726   ipcopmake libpri
727   ipcopmake bristuff
728   ipcopmake asterisk
729   ipcopmake mpg123
730   echo -ne "`date -u '+%b %e %T'`: Building ### MP3-Server ### \n" | tee -a $LOGFILE
731   ipcopmake lame
732   ipcopmake gnump3d
733   echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE
734   ipcopmake applejuice
735   ipcopmake edonkeyclc
736 #  ipcopmake sane
737   echo -ne "`date -u '+%b %e %T'`: Building ### Net-Tools ### \n" | tee -a $LOGFILE
738   ipcopmake ntop
739 #  ipcopmake rsync
740   ipcopmake tcpwrapper
741   ipcopmake portmap
742   ipcopmake nfs
743   ipcopmake nmap
744   ipcopmake mbmon
745   ipcopmake iftop
746   ipcopmake ncftp
747   ipcopmake cftp
748   ipcopmake etherwake
749   ipcopmake ethereal
750 #  ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
751 }
752
753 buildinstaller() {
754   # Run installer scripts one by one
755   LOGFILE="$BASEDIR/log/_build.installer.log"
756   export LOGFILE
757   echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
758   if [ 'i386' = $MACHINE ]; then 
759         ipcopmake syslinux
760         ipcopmake as86
761         ipcopmake mbr
762         ipcopmake uClibc
763   fi
764   installmake busybox
765   installmake sysvinit
766   installmake e2fsprogs
767   installmake misc-progs
768   installmake slang
769   installmake util-linux
770   installmake newt
771   installmake pciutils
772   installmake pcmcia-cs
773   installmake kbd
774   installmake installer
775   installmake scsi.img
776   installmake driver.img
777   installmake initrd
778   installmake boot.img
779 }
780
781 buildpackages() {
782   LOGFILE="$BASEDIR/log/_build.packages.log"
783   export LOGFILE
784   echo "... see detailed log in _build.*.log files" >> $LOGFILE
785   echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
786   # Strip files
787   echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
788   find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
789         ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
790          -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
791   # add -ls before -exec if you want to verify what files are stripped
792
793   find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
794         -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
795   # there add -v to strip to verify
796
797   if [ 'i386' = $MACHINE ]; then
798         # Create fcdsl packages
799         echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
800         cp $LFS/install/images/fcdsl/license.txt $LFS  >> $LOGFILE 2>&1
801         touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
802         cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
803                 lib/modules/$KVER/misc/fcdsl*.o.gz \
804                 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
805                 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
806                 etc/fcdsl/fcdsl*.conf \
807                 etc/drdsl/{drdsl,drdsl.ini} \
808                 license.txt \
809                 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
810         rm -f $LFS/license.txt >> $LOGFILE 2>&1
811         cd $BASEDIR
812   fi
813   
814   # Generating list of packages used
815   echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
816   rm -f $BASEDIR/doc/packages-list
817   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
818         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
819                 echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
820         fi
821   done
822   echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
823   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
824         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
825   rm -f $BASEDIR/doc/packages-list
826   # packages-list.txt is ready to be displayed for wiki page
827
828   # Create ISO for CDRom and USB-superfloppy
829   ipcopmake cdrom
830   rm -f $LFS/install/images/*usb*
831   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
832
833   ipfirepackages
834
835   # Cleanup
836   stdumount
837   rm -rf $BASEDIR/build/tmp/*
838
839   # Generating total list of files
840   echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
841   rm -f $BASEDIR/log/FILES
842   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
843         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
844                 echo "##" >>$BASEDIR/log/FILES
845                 echo "## `basename $i`" >>$BASEDIR/log/FILES
846                 echo "##" >>$BASEDIR/log/FILES
847                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
848         fi
849   done
850
851   cd $PWD
852
853 }
854
855 ipfirepackages() {
856   if [ -d "$BASEDIR/packages" ]; then
857           for i in `ls $BASEDIR/packages`; do
858                 touch $BASEDIR/build/install/packages/$i.empty
859           done
860   fi
861   ipfiredist amavisd
862   ipfiredist applejuice
863   # ipfiredist asterisk
864   ipfiredist clamav
865   ipfiredist cups
866   ipfiredist cyrusimap
867   ipfiredist fetchmail
868   ipfiredist gnump3d
869   ipfiredist java
870   ipfiredist lame
871   ipfiredist libtiff
872   ipfiredist libxml2
873   ipfiredist mailx
874   ipfiredist nfs
875   ipfiredist nmap
876   ipfiredist ntop
877   ipfiredist postfix
878   ipfiredist procmail
879   ipfiredist samba
880   ipfiredist spamassassin
881   ipfiredist web-cyradm
882   ipfiredist xampp
883   ipfiredist xinetd
884   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
885   mv -f $LFS/install/packages/*.{tar.gz,md5} $BASEDIR/packages >> $LOGFILE 2>&1
886   rm -rf  $BASEDIR/build/install/packages/*
887 }
888
889 # See what we're supposed to do
890 case "$1" in 
891 build)
892         BUILDMACHINE=`uname -m`
893         PACKAGE=`ls -v -r $BASEDIR/cache/$SNAME-1.4-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
894         #only restore on a clean disk
895         if [ ! -f log/perl-*-tools ]; then
896                 if [ ! -n "$PACKAGE" ]; then
897                         echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
898                         prepareenv
899                         buildtoolchain
900                 else
901                         PACKAGENAME=${PACKAGE%.tar.gz}
902                         echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
903                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
904                                 tar zxf $PACKAGE
905                                 prepareenv
906                         else
907                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
908                         fi
909                 fi
910         else
911                 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
912                 prepareenv
913         fi
914
915         buildbase
916         buildipcop
917
918         # Setzen des IPFire Builds
919         if [ "$FIREBUILD" ]; then
920                 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
921         else
922                 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
923         fi
924
925         buildinstaller
926         buildpackages
927         ;;
928 shell)
929         # enter a shell inside LFS chroot
930         # may be used to changed kernel settings
931         prepareenv
932         entershell
933         ;;
934 changelog)
935         echo -n "Loading new Changelog from SVN: "
936         svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
937         echo "Finished!"
938         ;;
939 check)
940         echo "Checking sources files availability on the web"
941         if [ ! -d $DIR_CHK ]; then
942                 mkdir -p $DIR_CHK
943         fi
944         FINISHED=0
945         cd $BASEDIR/lfs
946         for c in `seq $MAX_RETRIES`; do
947                 if (( FINISHED==1 )); then
948                         break
949                 fi
950                 FINISHED=1
951                 cd $BASEDIR/lfs
952                 for i in *; do
953                         if [ -f "$i" -a "$i" != "Config" ]; then
954                                 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
955                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" check
956                                 if [ $? -ne 0 ]; then
957                                         echo "Check : wget error in lfs/$i"
958                                         FINISHED=0
959                                 fi
960                         fi
961                 done
962         done
963         cd -
964         ;;
965 checkclean)
966         echo "Erasing sources files availability tags"
967         rm -rf $DIR_CHK/*
968         ;;
969 clean)
970         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
971                 $LOSETUP -d $i 2>/dev/null
972         done
973         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
974                 umount $i
975         done
976         stdumount
977         for i in `seq 0 7`; do
978             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
979                 umount /dev/loop${i}     2>/dev/null;
980                 losetup -d /dev/loop${i} 2>/dev/null;
981             fi;
982         done
983         rm -rf $BASEDIR/build
984         rm -rf $BASEDIR/cdrom
985         rm -rf $BASEDIR/packages
986         rm -rf $BASEDIR/log
987         if [ -h /tools ]; then
988                 rm -f /tools
989         fi
990         ;;
991 dist)
992         echo -ne "Updating & building source package from SVN: "
993         svn up > /dev/null
994         svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
995         tar cfz ipfire-source-`date +'%Y-%m-%d'`-r`svn info | grep Revision | cut -c 11-`.tar.gz ipfire-source
996         rm ipfire-source/ -r
997         echo "Finished!"
998         ;;
999 newpak)
1000         # create structure for a new package
1001         echo -e "Name of the new package: $2"
1002         if [ ! -f "lfs/$2" ]; then
1003                 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
1004                 mkdir -p src/paks/$2
1005                 cd src/paks/$2
1006                 echo "`date -u '+%b %e %T'`: Creating files"
1007                 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
1008
1009                 touch ROOTFILES
1010                 touch {,un}install.sh
1011         ## install.sh
1012                 echo '#!/bin/bash' > install.sh
1013                 echo '#' >> install.sh
1014                 echo '#################################################################' >> install.sh
1015                 echo '#                                                               #' >> install.sh
1016                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
1017                 echo '#                                                               #' >> install.sh
1018                 echo '#################################################################' >> install.sh
1019                 echo '#' >> install.sh
1020                 echo '# Extract the files' >> install.sh
1021                 echo 'tar xfz files.tgz -C /' >> install.sh
1022                 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
1023         ## uninstall.sh
1024                 echo '#!/bin/bash' > uninstall.sh
1025                 echo '#################################################################' >> uninstall.sh
1026                 echo '#                                                               #' >> uninstall.sh
1027                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
1028                 echo '#                                                               #' >> uninstall.sh
1029                 echo '#################################################################' >> uninstall.sh
1030                 echo '#' >> uninstall.sh
1031                 echo '# Delete the files' >> uninstall.sh
1032                 echo '## Befehl fehlt noch' >> uninstall.sh
1033                 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
1034                 echo "`date -u '+%b %e %T'`: Adding files to SVN"
1035                 cd - && svn add lfs/$2 && svn add src/paks/$2
1036
1037                 echo -n "Do you want to remove the folders? [y/n]"
1038                 read REM
1039                 if  [ "$REM" == "y" ]; then
1040                         echo "Removing the folders..."
1041                         svn del src/paks/$2 --force
1042                 else
1043                         echo "Folders are kept."
1044                 fi
1045         else
1046                 echo "$2 already exists"
1047         fi
1048         exit 0
1049         ;;
1050 prefetch)
1051         if [ ! -d $BASEDIR/cache ]; then
1052                 mkdir $BASEDIR/cache
1053         fi
1054         mkdir -p $BASEDIR/log
1055         echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1056         FINISHED=0
1057         cd $BASEDIR/lfs
1058         for c in `seq $MAX_RETRIES`; do
1059                 if (( FINISHED==1 )); then 
1060                         break
1061                 fi
1062                 FINISHED=1
1063                 cd $BASEDIR/lfs
1064                 for i in *; do
1065                         if [ -f "$i" -a "$i" != "Config" ]; then
1066                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1067                                 if [ $? -ne 0 ]; then
1068                                         echo "Prefetch : wget error in lfs/$i"
1069                                         FINISHED=0
1070                                 else
1071                                         if [ $c -eq 1 ]; then
1072                                                 echo "Prefetch : lfs/$i files loaded"
1073                                         fi
1074                                 fi
1075                         fi
1076                 done
1077         done
1078         echo "Prefetch : verifying md5sum"
1079         ERROR=0
1080         for i in *; do
1081                 if [ -f "$i" -a "$i" != "Config" ]; then
1082                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1083                         if [ $? -ne 0 ]; then
1084                                 echo "md5 difference in lfs/$i"
1085                                 ERROR=1
1086                         fi
1087                 fi
1088         done
1089         if [ $ERROR -eq 0 ]; then
1090                 echo "Prefetch : all files md5sum match"
1091         fi
1092         cd -
1093         ;;
1094 toolchain)
1095         prepareenv
1096         buildtoolchain
1097         BUILDMACHINE=`uname -m`
1098         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1099         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1100                 build/{bin,etc,usr/bin,usr/local} \
1101                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1102                 log >> $LOGFILE
1103         md5sum cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1104                 > cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1105         stdumount
1106         ;;
1107 gettoolchain)
1108         BUILDMACHINE=`uname -m`
1109         # arbitrary name to be updated in case of new toolchain package upload
1110         PACKAGE=$SNAME-1.4-toolchain-$BUILDMACHINE
1111         URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1112         echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1113         cd $BASEDIR/cache
1114         wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
1115         if [ $? -ne 0 ]; then
1116                 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1117         else
1118                 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1119                         echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1120                 else
1121                         exiterror "$PACKAGE.md5 did not match, check downloaded package"
1122                 fi
1123         fi
1124         ;;
1125 paks)
1126         prepareenv
1127         # buildpackages
1128         ipfirepackages
1129         ;;
1130 update)
1131         echo "Load the latest source-files:"
1132         svn update
1133         ;;
1134 commit)
1135         echo "Upload the changed files:"
1136         svn commit
1137         ./make.sh sync
1138         clear
1139         svn up
1140         ;;
1141 make)
1142         echo "Do a complete compile:"   
1143         ./make.sh prefetch && ./make.sh gettoolchain && ./make.sh build
1144         ;;
1145 diff)
1146         echo -ne "Make a local diff to last SVN revision: "
1147         svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1148         echo "Finished!"
1149         echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1150         ;;
1151 sync)
1152         echo -e "Syncing Cache to FTP:"
1153         if [ -f .pass ]; then
1154                 PASS="`cat .pass`"
1155         else
1156                 echo -ne "Password for mirror.ipfire.org: "; read PASS
1157         fi
1158         rm -f doc/packages-to-remove-from-ftp
1159         ncftpls -u web3 -p $PASS ftp://mirror.ipfire.org/html/source-packages/source/ > ftplist
1160         for i in `ls -w1 cache/`; do
1161                 grep $i ftplist
1162                 if [ "$?" -ne "0" ]; then
1163                         ncftpput -u web3 -p $PASS mirror.ipfire.org /html/source-packages/source cache/$i
1164                         if [ "$?" -eq "0" ]; then
1165                                 echo -e "$i was successfully uploaded to the ftp server."
1166                         else
1167                                 echo -e "There was an error while uploading $i to the ftp server."
1168                         fi
1169                 fi
1170         done
1171         for i in `cat ftplist`; do
1172                 ls -w1 cache/ | grep $i
1173                 if [ "$?" -eq "1" ]; then
1174                         echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1175                 fi
1176         done
1177         rm -f ftplist
1178         ;;
1179 pub-iso)
1180         echo -e "Upload the ISO to the beta-mirror!"
1181         if [ -f .pass ]; then
1182                 PASS="`cat .pass`"
1183         else
1184                 echo -ne "Password for mirror.ipfire.org: "; read PASS
1185         fi
1186         ncftpls -u web3 -p $PASS ftp://mirror.ipfire.org/html/source-packages/beta/ | grep `svn info | grep Revision | cut -c 11-`
1187         if [ "$?" -eq "1" ]; then
1188                         cp $BASEDIR/ipfire-install-1.4.i386.iso $BASEDIR/ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso
1189                         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
1190                         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
1191                         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
1192                         if [ "$?" -eq "0" ]; then
1193                                 echo -e "The ISO of Revision `svn info | grep Revision | cut -c 11-` was successfully uploaded to the ftp server."
1194                         else
1195                                 echo -e "There was an error while uploading the ISO to the ftp server."
1196                         fi
1197         else
1198                 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!"
1199         fi
1200         rm -f ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso{,.md5}
1201         ;;
1202 pub-paks)
1203         echo -e "Upload the packages to the beta-mirror!"
1204         if [ -f .pass ]; then
1205                 PASS="`cat .pass`"
1206         else
1207                 echo -ne "Password for mirror.ipfire.org: "; read PASS
1208         fi
1209         ncftpput -z -u web3 -p $PASS mirror.ipfire.org /html/source-packages/packages/ packages/*
1210         if [ "$?" -eq "0" ]; then
1211                 echo -e "The packages were successfully uploaded to the ftp server."
1212         else
1213                 echo -e "There was an error while uploading the packages to the ftp server."
1214         fi
1215         ;;
1216 build-only)
1217         rm -f $BASEDIR/log/$2*
1218         BUILDMACHINE=`uname -m`
1219         prepareenv
1220         ipcopmake $2
1221         ;;
1222 *)
1223         echo "Usage: $0 {build|changelog|check|checkclean|clean|commit|diff|dist|gettoolchain|make|newpak|prefetch|pub-iso|pub-paks|shell|sync|toolchain|update}"
1224         cat doc/make.sh-usage
1225         exit 1
1226         ;;
1227 esac