Geaendert:
[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="2.0"                 # 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         ipcopmake promise-sata-300-tx SMP=1
555   fi
556
557   ipcopmake linux       LFS_PASS=ipfire
558   ipcopmake 3cp4218     
559   ipcopmake amedyn      
560   ipcopmake cxacru      
561   ipcopmake eciadsl     
562   ipcopmake eagle       
563   ipcopmake speedtouch  
564   if [ 'i386' = $MACHINE ]; then 
565         # These are here because they have i386 only binary libraries
566         # included in the package.
567         ipcopmake cnx_pci       
568         ipcopmake fcdsl         
569         ipcopmake fcdsl2        
570         ipcopmake fcdslsl       
571         ipcopmake fcdslusb      
572         ipcopmake fcdslslusb 
573         ipcopmake fcpci
574         ipcopmake fcclassic
575         ipcopmake pulsar        
576         ipcopmake unicorn
577         ipcopmake promise-sata-300-tx
578   fi
579
580   ipcopmake pcmcia-cs
581   ipcopmake expat
582   ipcopmake gdbm
583   ipcopmake gmp
584   ipcopmake openssl
585   ipcopmake python
586   ipcopmake libnet
587   ipcopmake libpng
588   ipcopmake gd
589   ipcopmake popt
590   ipcopmake slang
591   ipcopmake newt
592   ipcopmake libcap
593   ipcopmake pciutils
594   ipcopmake pcre
595   ipcopmake apache
596   ipcopmake arping
597   ipcopmake beep
598   ipcopmake bind
599   ipcopmake capi4k-utils
600   ipcopmake cdrtools
601   ipcopmake dnsmasq
602   ipcopmake dosfstools
603   ipcopmake ethtool
604   ipcopmake ez-ipupdate
605   ipcopmake fcron
606   ipcopmake perl-GD
607   ipcopmake gnupg
608   ipcopmake hdparm
609   ipcopmake ibod
610   ipcopmake initscripts
611   ipcopmake iptables
612   ipcopmake ipac-ng
613   ipcopmake ipaddr
614   ipcopmake iproute2
615   ipcopmake iptstate
616   ipcopmake iputils
617   ipcopmake l7-protocols
618   ipcopmake isapnptools
619   ipcopmake isdn4k-utils
620   ipcopmake kudzu
621   ipcopmake logrotate
622   ipcopmake logwatch
623   ipcopmake mingetty
624   ipcopmake misc-progs
625   ipcopmake mtools
626   ipcopmake nano
627   ipcopmake nash
628   ipcopmake nasm
629   ipcopmake URI
630   ipcopmake HTML-Tagset
631   ipcopmake HTML-Parser
632   ipcopmake Compress-Zlib
633   ipcopmake Digest
634   ipcopmake Digest-SHA1
635   ipcopmake Digest-HMAC
636   ipcopmake libwww-perl
637   ipcopmake Net-DNS
638   ipcopmake Net-IPv4Addr
639   ipcopmake Net_SSLeay
640   ipcopmake IO-Stringy
641   ipcopmake Unix-Syslog
642   ipcopmake Mail-Tools
643   ipcopmake MIME-Tools
644   ipcopmake Net-Server
645   ipcopmake Convert-TNEF
646   ipcopmake Convert-UUlib
647   ipcopmake Archive-Tar
648   ipcopmake Archive-Zip
649   ipcopmake Text-Tabs+Wrap
650   ipcopmake Locale-Country
651   ipcopmake GeoIP
652   ipcopmake fwhits
653   ipcopmake berkeley
654   ipcopmake BerkeleyDB ## The Perl module
655   ipcopmake noip_updater
656   ipcopmake ntp
657   ipcopmake oinkmaster
658   ipcopmake openssh
659   ipcopmake openswan
660   ipcopmake pptpclient
661   ipcopmake rrdtool
662   ipcopmake setserial
663   ipcopmake setup
664   ipcopmake snort
665   #ipcopmake speedycgi
666   ipcopmake saslauthd PASS=1
667   ipcopmake openldap
668   ipcopmake squid
669   ipcopmake squid-graph
670   ipcopmake squidguard
671   ipcopmake tcpdump
672   ipcopmake traceroute
673   ipcopmake vlan
674   #ipcopmake wireless
675   ipcopmake libsafe
676   ipcopmake 3c5x9setup
677 #  echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
678   ipcopmake pakfire
679   ipcopmake startscripts
680 ## Zuerst die Libs und dann die Programme. Ordnung muss sein!
681   ipcopmake java
682   ipcopmake libtiff
683   ipcopmake libjpeg
684   ipcopmake lcms
685   ipcopmake libmng
686   ipcopmake freetype
687   ipcopmake bootsplash
688   ipcopmake libxml2
689   ipcopmake spandsp
690   ipcopmake lzo
691   ipcopmake openvpn
692   ipcopmake pkg-config
693   ipcopmake glib
694   ipcopmake xampp
695   ipcopmake pam
696   ipcopmake pammysql
697   ipcopmake saslauthd PASS=2
698   ipcopmake xinetd
699   ipcopmake ghostscript
700   ipcopmake cups
701 #  ipcopmake lpd ## Im Moment aus, da CUPS vorhanden ist.
702   ipcopmake samba
703   ipcopmake sudo
704   ipcopmake mc
705 #  ipcopmake pwlib
706 #  ipcopmake openh323
707   ipcopmake wget
708   ipcopmake wput
709   ipcopmake bridge-utils
710   ipcopmake screen
711   ipcopmake hddtemp
712   ipcopmake smartmontools
713   ipcopmake htop
714   ipcopmake lynx
715   echo -ne "`date -u '+%b %e %T'`: Building ### Mailserver ### \n" | tee -a $LOGFILE
716   ipcopmake postfix
717   ipcopmake procmail
718   ipcopmake fetchmail
719   ipcopmake cyrusimap
720   ipcopmake web-cyradm
721   ipcopmake mailx
722   ipcopmake clamav
723   ipcopmake razor
724   ipcopmake spamassassin
725 #  ipcopmake amavisd
726   echo -ne "`date -u '+%b %e %T'`: Building ### VoIP-Server ### \n" | tee -a $LOGFILE
727   ipcopmake stund
728   ipcopmake zaptel
729   ipcopmake libpri
730   ipcopmake bristuff
731   ipcopmake asterisk
732   ipcopmake mpg123
733   echo -ne "`date -u '+%b %e %T'`: Building ### MP3-Server ### \n" | tee -a $LOGFILE
734   ipcopmake lame
735   ipcopmake gnump3d
736   echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE
737   ipcopmake applejuice
738   ipcopmake edonkeyclc
739 #  ipcopmake sane
740   echo -ne "`date -u '+%b %e %T'`: Building ### Net-Tools ### \n" | tee -a $LOGFILE
741   ipcopmake ntop
742 #  ipcopmake rsync
743   ipcopmake tcpwrapper
744   ipcopmake portmap
745   ipcopmake nfs
746   ipcopmake nmap
747   ipcopmake mbmon
748   ipcopmake iftop
749   ipcopmake ncftp
750   ipcopmake cftp
751   ipcopmake etherwake
752   ipcopmake ethereal
753 #  ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
754 }
755
756 buildinstaller() {
757   # Run installer scripts one by one
758   LOGFILE="$BASEDIR/log/_build.installer.log"
759   export LOGFILE
760   echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
761   if [ 'i386' = $MACHINE ]; then 
762         ipcopmake syslinux
763         ipcopmake as86
764         ipcopmake mbr
765         ipcopmake uClibc
766   fi
767   installmake busybox
768   installmake sysvinit
769   installmake e2fsprogs
770   installmake misc-progs
771   installmake slang
772   installmake util-linux
773   installmake newt
774   installmake pciutils
775   installmake pcmcia-cs
776   installmake kbd
777   installmake installer
778   installmake scsi.img
779   installmake driver.img
780   installmake initrd
781   installmake boot.img
782 }
783
784 buildpackages() {
785   LOGFILE="$BASEDIR/log/_build.packages.log"
786   export LOGFILE
787   echo "... see detailed log in _build.*.log files" >> $LOGFILE
788   echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
789   # Strip files
790   echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
791   find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
792         ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
793          -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
794   # add -ls before -exec if you want to verify what files are stripped
795
796   find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
797         -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
798   # there add -v to strip to verify
799
800   if [ 'i386' = $MACHINE ]; then
801         # Create fcdsl packages
802         echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
803         cp $LFS/install/images/fcdsl/license.txt $LFS  >> $LOGFILE 2>&1
804         touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
805         cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
806                 lib/modules/$KVER/misc/fcdsl*.o.gz \
807                 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
808                 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
809                 etc/fcdsl/fcdsl*.conf \
810                 etc/drdsl/{drdsl,drdsl.ini} \
811                 license.txt \
812                 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
813         rm -f $LFS/license.txt >> $LOGFILE 2>&1
814         cd $BASEDIR
815   fi
816   
817   # Generating list of packages used
818   echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
819   rm -f $BASEDIR/doc/packages-list
820   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
821         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
822                 echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
823         fi
824   done
825   echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
826   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
827         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
828   rm -f $BASEDIR/doc/packages-list
829   # packages-list.txt is ready to be displayed for wiki page
830
831   # Create ISO for CDRom and USB-superfloppy
832   ipcopmake cdrom
833   rm -f $LFS/install/images/*usb*
834   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
835
836   ipfirepackages
837
838   # Cleanup
839   stdumount
840   rm -rf $BASEDIR/build/tmp/*
841
842   # Generating total list of files
843   echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
844   rm -f $BASEDIR/log/FILES
845   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
846         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
847                 echo "##" >>$BASEDIR/log/FILES
848                 echo "## `basename $i`" >>$BASEDIR/log/FILES
849                 echo "##" >>$BASEDIR/log/FILES
850                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
851         fi
852   done
853
854   cd $PWD
855
856 }
857
858 ipfirepackages() {
859   if [ -d "$BASEDIR/packages" ]; then
860           for i in `ls $BASEDIR/packages`; do
861                 touch $BASEDIR/build/install/packages/$i.empty
862           done
863   fi
864   ipfiredist amavisd
865   ipfiredist applejuice
866   # ipfiredist asterisk
867   ipfiredist clamav
868   ipfiredist cups
869   ipfiredist cyrusimap
870   ipfiredist fetchmail
871   ipfiredist gnump3d
872   ipfiredist java
873   ipfiredist lame
874   ipfiredist libtiff
875   ipfiredist libxml2
876   ipfiredist mailx
877   ipfiredist nfs
878   ipfiredist nmap
879   ipfiredist ntop
880   ipfiredist postfix
881   ipfiredist procmail
882   ipfiredist samba
883   ipfiredist spamassassin
884   ipfiredist web-cyradm
885   ipfiredist xampp
886   ipfiredist xinetd
887   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
888   mv -f $LFS/install/packages/*.{tar.gz,md5} $BASEDIR/packages >> $LOGFILE 2>&1
889   rm -rf  $BASEDIR/build/install/packages/*
890 }
891
892 # See what we're supposed to do
893 case "$1" in 
894 build)
895         BUILDMACHINE=`uname -m`
896         PACKAGE=`ls -v -r $BASEDIR/cache/$SNAME-1.4-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
897         #only restore on a clean disk
898         if [ ! -f log/perl-*-tools ]; then
899                 if [ ! -n "$PACKAGE" ]; then
900                         echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
901                         prepareenv
902                         buildtoolchain
903                 else
904                         PACKAGENAME=${PACKAGE%.tar.gz}
905                         echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
906                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
907                                 tar zxf $PACKAGE
908                                 prepareenv
909                         else
910                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
911                         fi
912                 fi
913         else
914                 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
915                 prepareenv
916         fi
917
918         buildbase
919         buildipcop
920
921         # Setzen des IPFire Builds
922         if [ "$FIREBUILD" ]; then
923                 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
924         else
925                 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
926         fi
927
928         buildinstaller
929         buildpackages
930         ;;
931 shell)
932         # enter a shell inside LFS chroot
933         # may be used to changed kernel settings
934         prepareenv
935         entershell
936         ;;
937 changelog)
938         echo -n "Loading new Changelog from SVN: "
939         svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
940         echo "Finished!"
941         ;;
942 check)
943         echo "Checking sources files availability on the web"
944         if [ ! -d $DIR_CHK ]; then
945                 mkdir -p $DIR_CHK
946         fi
947         FINISHED=0
948         cd $BASEDIR/lfs
949         for c in `seq $MAX_RETRIES`; do
950                 if (( FINISHED==1 )); then
951                         break
952                 fi
953                 FINISHED=1
954                 cd $BASEDIR/lfs
955                 for i in *; do
956                         if [ -f "$i" -a "$i" != "Config" ]; then
957                                 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
958                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" check
959                                 if [ $? -ne 0 ]; then
960                                         echo "Check : wget error in lfs/$i"
961                                         FINISHED=0
962                                 fi
963                         fi
964                 done
965         done
966         cd -
967         ;;
968 checkclean)
969         echo "Erasing sources files availability tags"
970         rm -rf $DIR_CHK/*
971         ;;
972 clean)
973         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
974                 $LOSETUP -d $i 2>/dev/null
975         done
976         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
977                 umount $i
978         done
979         stdumount
980         for i in `seq 0 7`; do
981             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
982                 umount /dev/loop${i}     2>/dev/null;
983                 losetup -d /dev/loop${i} 2>/dev/null;
984             fi;
985         done
986         rm -rf $BASEDIR/build
987         rm -rf $BASEDIR/cdrom
988         rm -rf $BASEDIR/packages
989         rm -rf $BASEDIR/log
990         if [ -h /tools ]; then
991                 rm -f /tools
992         fi
993         ;;
994 dist)
995         echo -ne "Updating & building source package from SVN: "
996         svn up > /dev/null
997         svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
998         tar cfz ipfire-source-`date +'%Y-%m-%d'`-r`svn info | grep Revision | cut -c 11-`.tar.gz ipfire-source
999         rm ipfire-source/ -r
1000         echo "Finished!"
1001         ;;
1002 newpak)
1003         # create structure for a new package
1004         echo -e "Name of the new package: $2"
1005         if [ ! -f "lfs/$2" ]; then
1006                 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
1007                 mkdir -p src/paks/$2
1008                 cd src/paks/$2
1009                 echo "`date -u '+%b %e %T'`: Creating files"
1010                 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
1011
1012                 touch ROOTFILES
1013                 touch {,un}install.sh
1014         ## install.sh
1015                 echo '#!/bin/bash' > install.sh
1016                 echo '#' >> install.sh
1017                 echo '#################################################################' >> install.sh
1018                 echo '#                                                               #' >> install.sh
1019                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
1020                 echo '#                                                               #' >> install.sh
1021                 echo '#################################################################' >> install.sh
1022                 echo '#' >> install.sh
1023                 echo '# Extract the files' >> install.sh
1024                 echo 'tar xfz files.tgz -C /' >> install.sh
1025                 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
1026         ## uninstall.sh
1027                 echo '#!/bin/bash' > uninstall.sh
1028                 echo '#################################################################' >> uninstall.sh
1029                 echo '#                                                               #' >> uninstall.sh
1030                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
1031                 echo '#                                                               #' >> uninstall.sh
1032                 echo '#################################################################' >> uninstall.sh
1033                 echo '#' >> uninstall.sh
1034                 echo '# Delete the files' >> uninstall.sh
1035                 echo '## Befehl fehlt noch' >> uninstall.sh
1036                 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
1037                 echo "`date -u '+%b %e %T'`: Adding files to SVN"
1038                 cd - && svn add lfs/$2 && svn add src/paks/$2
1039
1040                 echo -n "Do you want to remove the folders? [y/n]"
1041                 read REM
1042                 if  [ "$REM" == "y" ]; then
1043                         echo "Removing the folders..."
1044                         svn del src/paks/$2 --force
1045                 else
1046                         echo "Folders are kept."
1047                 fi
1048         else
1049                 echo "$2 already exists"
1050         fi
1051         exit 0
1052         ;;
1053 prefetch)
1054         if [ ! -d $BASEDIR/cache ]; then
1055                 mkdir $BASEDIR/cache
1056         fi
1057         mkdir -p $BASEDIR/log
1058         echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1059         FINISHED=0
1060         cd $BASEDIR/lfs
1061         for c in `seq $MAX_RETRIES`; do
1062                 if (( FINISHED==1 )); then 
1063                         break
1064                 fi
1065                 FINISHED=1
1066                 cd $BASEDIR/lfs
1067                 for i in *; do
1068                         if [ -f "$i" -a "$i" != "Config" ]; then
1069                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1070                                 if [ $? -ne 0 ]; then
1071                                         echo "Prefetch : wget error in lfs/$i"
1072                                         FINISHED=0
1073                                 else
1074                                         if [ $c -eq 1 ]; then
1075                                                 echo "Prefetch : lfs/$i files loaded"
1076                                         fi
1077                                 fi
1078                         fi
1079                 done
1080         done
1081         echo "Prefetch : verifying md5sum"
1082         ERROR=0
1083         for i in *; do
1084                 if [ -f "$i" -a "$i" != "Config" ]; then
1085                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1086                         if [ $? -ne 0 ]; then
1087                                 echo "md5 difference in lfs/$i"
1088                                 ERROR=1
1089                         fi
1090                 fi
1091         done
1092         if [ $ERROR -eq 0 ]; then
1093                 echo "Prefetch : all files md5sum match"
1094         fi
1095         cd -
1096         ;;
1097 toolchain)
1098         prepareenv
1099         buildtoolchain
1100         BUILDMACHINE=`uname -m`
1101         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1102         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1103                 build/{bin,etc,usr/bin,usr/local} \
1104                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1105                 log >> $LOGFILE
1106         md5sum cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1107                 > cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1108         stdumount
1109         ;;
1110 gettoolchain)
1111         BUILDMACHINE=`uname -m`
1112         # arbitrary name to be updated in case of new toolchain package upload
1113         PACKAGE=$SNAME-1.4-toolchain-$BUILDMACHINE
1114         URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1115         echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1116         cd $BASEDIR/cache
1117         wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
1118         if [ $? -ne 0 ]; then
1119                 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1120         else
1121                 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1122                         echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1123                 else
1124                         exiterror "$PACKAGE.md5 did not match, check downloaded package"
1125                 fi
1126         fi
1127         ;;
1128 paks)
1129         prepareenv
1130         # buildpackages
1131         ipfirepackages
1132         ;;
1133 update)
1134         echo "Load the latest source-files:"
1135         svn update
1136         ;;
1137 commit)
1138         echo "Upload the changed files:"
1139         svn commit
1140         ./make.sh sync
1141         clear
1142         svn up
1143         ;;
1144 make)
1145         echo "Do a complete compile:"   
1146         ./make.sh prefetch && ./make.sh gettoolchain && ./make.sh build
1147         ;;
1148 diff)
1149         echo -ne "Make a local diff to last SVN revision: "
1150         svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1151         echo "Finished!"
1152         echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1153         ;;
1154 sync)
1155         echo -e "Syncing Cache to FTP:"
1156         if [ -f .pass ]; then
1157                 PASS="`cat .pass`"
1158         else
1159                 echo -ne "Password for mirror.ipfire.org: "; read PASS
1160         fi
1161         rm -f doc/packages-to-remove-from-ftp
1162         ncftpls -u web3 -p $PASS ftp://mirror.ipfire.org/html/source-packages/source/ > ftplist
1163         for i in `ls -w1 cache/`; do
1164                 grep $i ftplist
1165                 if [ "$?" -ne "0" ]; then
1166                         ncftpput -u web3 -p $PASS mirror.ipfire.org /html/source-packages/source cache/$i
1167                         if [ "$?" -eq "0" ]; then
1168                                 echo -e "$i was successfully uploaded to the ftp server."
1169                         else
1170                                 echo -e "There was an error while uploading $i to the ftp server."
1171                         fi
1172                 fi
1173         done
1174         for i in `cat ftplist`; do
1175                 ls -w1 cache/ | grep $i
1176                 if [ "$?" -eq "1" ]; then
1177                         echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1178                 fi
1179         done
1180         rm -f ftplist
1181         ;;
1182 pub-iso)
1183         echo -e "Upload the ISO to the beta-mirror!"
1184         if [ -f .pass ]; then
1185                 PASS="`cat .pass`"
1186         else
1187                 echo -ne "Password for mirror.ipfire.org: "; read PASS
1188         fi
1189         ncftpls -u web3 -p $PASS ftp://mirror.ipfire.org/html/source-packages/beta/ | grep `svn info | grep Revision | cut -c 11-`
1190         if [ "$?" -eq "1" ]; then
1191                         cp $BASEDIR/ipfire-install-1.4.i386.iso $BASEDIR/ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso
1192                         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
1193                         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
1194                         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
1195                         if [ "$?" -eq "0" ]; then
1196                                 echo -e "The ISO of Revision `svn info | grep Revision | cut -c 11-` was successfully uploaded to the ftp server."
1197                         else
1198                                 echo -e "There was an error while uploading the ISO to the ftp server."
1199                         fi
1200         else
1201                 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!"
1202         fi
1203         rm -f ipfire-install-1.4.i386-r`svn info | grep Revision | cut -c 11-`.iso{,.md5}
1204         ;;
1205 pub-paks)
1206         echo -e "Upload the packages to the beta-mirror!"
1207         if [ -f .pass ]; then
1208                 PASS="`cat .pass`"
1209         else
1210                 echo -ne "Password for mirror.ipfire.org: "; read PASS
1211         fi
1212         ncftpput -z -u web3 -p $PASS mirror.ipfire.org /html/source-packages/packages/ packages/*
1213         if [ "$?" -eq "0" ]; then
1214                 echo -e "The packages were successfully uploaded to the ftp server."
1215         else
1216                 echo -e "There was an error while uploading the packages to the ftp server."
1217         fi
1218         ;;
1219 build-only)
1220         rm -f $BASEDIR/log/$2*
1221         BUILDMACHINE=`uname -m`
1222         prepareenv
1223         ipcopmake $2
1224         ;;
1225 *)
1226         echo "Usage: $0 {build|changelog|check|checkclean|clean|commit|diff|dist|gettoolchain|make|newpak|prefetch|pub-iso|pub-paks|shell|sync|toolchain|update}"
1227         cat doc/make.sh-usage
1228         exit 1
1229         ;;
1230 esac