Hinzugefuegt:
[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="www.ipfire.org"               # 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   SVN_REVISION=`svn info | grep Revision | cut -c 11-`
36
37   # Setzen des IPFire Builds
38   if [ -e ./.svn ]; then
39     FIREBUILD=`cat .svn/entries |sed -n 's/^[ \t]*revision=\"// p' | sed -n 's/\".*$// p'`
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   PWD=`pwd`
55   BASENAME=`basename $0`
56   BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
57   LOGFILE=$BASEDIR/log/_build.preparation.log
58   export BASEDIR LOGFILE
59   DIR_CHK=$BASEDIR/cache/check
60   mkdir $BASEDIR/log/ 2>/dev/null
61
62   if [ -f .config ]; then
63         . .config
64   fi
65
66   if [ 'x86_64' = $MACHINE -o 'i686' = $MACHINE -o 'i586' = $MACHINE -o 'i486' = $MACHINE -o 'i386' = $MACHINE ]; then
67         echo "`date -u '+%b %e %T'`: Machine is ix86 (or equivalent)" >> $LOGFILE
68         MACHINE=i386
69         BUILDTARGET=i386-pc-linux-gnu
70         CFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
71         CXXFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
72   elif [ 'alpha' = $MACHINE ]; then
73         echo "`date -u '+%b %e %T'`: Machine is Alpha AXP" >> $LOGFILE
74         BUILDTARGET=alpha-unknown-linux-gnu
75         CFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
76         CXXFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
77   else
78         echo "`date -u '+%b %e %T'`: Can't determine your architecture - $MACHINE" >> $LOGFILE
79         exit 1
80   fi
81
82 # Define immediately
83 stdumount() {
84         umount $BASEDIR/build/dev/pts           2>/dev/null;
85         umount $BASEDIR/build/proc                      2>/dev/null;
86         umount $BASEDIR/build/install/mnt               2>/dev/null;
87         umount $BASEDIR/build/usr/src/cache     2>/dev/null;
88         umount $BASEDIR/build/usr/src/ccache    2>/dev/null;
89         umount $BASEDIR/build/usr/src/config    2>/dev/null;
90         umount $BASEDIR/build/usr/src/doc               2>/dev/null;
91         umount $BASEDIR/build/usr/src/html              2>/dev/null;
92         umount $BASEDIR/build/usr/src/langs     2>/dev/null;
93         umount $BASEDIR/build/usr/src/lfs               2>/dev/null;
94         umount $BASEDIR/build/usr/src/log               2>/dev/null;
95         umount $BASEDIR/build/usr/src/src               2>/dev/null;
96 }
97
98 exiterror() {
99         stdumount
100         for i in `seq 0 7`; do
101             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
102                 losetup -d /dev/loop${i} 2>/dev/null
103             fi;
104         done
105         echo "ERROR: $*"
106         echo "       Check $LOGFILE for errors if applicable"
107         exit 1
108 }
109
110 entershell() {
111         if [ ! -e $BASEDIR/build/usr/src/lfs/ ]; then
112                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/"
113         fi
114         echo "Entering to a shell inside LFS chroot, go out with exit"
115         chroot $LFS /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
116                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
117                 VERSION=$VERSION CONFIG_ROOT=$CONFIG_ROOT \
118                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
119                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
120                 CCACHE_DIR=/usr/src/ccache \
121                 CCACHE_HASHDIR=1 \
122                 KVER=$KVER \
123                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
124                 KGCC="ccache /usr/bin/gcc" \
125                 /tools/bin/bash
126         if [ $? -ne 0 ]; then
127                         exiterror "chroot error"
128         else
129                 stdumount
130         fi
131 }
132
133 prepareenv() {
134     ############################################################################
135     #                                                                          #
136     # Are we running the right shell?                                          #
137     #                                                                          #
138     ############################################################################
139     if [ ! "$BASH" ]; then
140         exiterror "BASH environment variable is not set.  You're probably running the wrong shell."
141     fi
142
143     if [ -z "${BASH_VERSION}" ]; then
144         exiterror "Not running BASH shell."
145     fi
146
147
148     ############################################################################
149     #                                                                          #
150     # Trap on emergency exit                                                   #
151     #                                                                          #
152     ############################################################################
153     trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
154
155
156     ############################################################################
157     #                                                                          #
158     # Resetting our nice level                                                 #
159     #                                                                          #
160     ############################################################################
161     echo "`date -u '+%b %e %T'`: Resetting our nice level to $NICE" | tee -a $LOGFILE
162     renice $NICE $$ > /dev/null
163     if [ `nice` != "$NICE" ]; then
164         exiterror "Failed to set correct nice level"
165     fi
166
167     ############################################################################
168     #                                                                          #
169     # Checking if running as root user                                         #
170     #                                                                          #
171     ############################################################################
172     echo "`date -u '+%b %e %T'`: Checking if we're running as root user" | tee -a $LOGFILE
173     if [ `id -u` != 0 ]; then
174         exiterror "Not building as root"
175     fi
176
177
178     ############################################################################
179     #                                                                          #
180     # Checking for necessary temporary space                                   #
181     #                                                                          #
182     ############################################################################
183     echo "`date -u '+%b %e %T'`: Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
184     BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
185     BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
186     if (( 2202000 > $BASE_ASPACE )); then
187         BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
188         if (( 2202000 - $BASE_USPACE > $BASE_ASPACE )); then
189                 exiterror "Not enough temporary space available, need at least 2.1GB on $BASE_DEV"
190         fi
191     fi
192
193     ############################################################################
194     #                                                                          #
195     # Building Linux From Scratch system                                       #
196     #                                                                          #
197     ############################################################################
198     echo "`date -u '+%b %e %T'`: Building Linux From Scratch system" | tee -a $LOGFILE
199
200     # Set umask
201     umask 022
202
203     # Set LFS Directory
204     LFS=$BASEDIR/build
205
206     # Check /tools symlink
207     if [ -h /tools ]; then
208         rm -f /tools
209     fi
210     if [ ! -a /tools ]; then
211         ln -s $BASEDIR/build/tools /
212     fi
213     if [ ! -h /tools ]; then
214         exiterror "Could not create /tools symbolic link."
215     fi
216
217     # Setup environment
218     set +h
219     LC_ALL=POSIX
220     export LFS LC_ALL CFLAGS CXXFLAGS
221     unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
222
223     # Make some extra directories
224     mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
225     mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
226     mkdir -p $BASEDIR/build/dev/pts $BASEDIR/build/proc $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
227
228     # Make all sources and proc available under lfs build
229     mount --bind /dev/pts        $BASEDIR/build/dev/pts
230     mount --bind /proc           $BASEDIR/build/proc
231     mount --bind $BASEDIR/cache  $BASEDIR/build/usr/src/cache
232     mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
233     mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
234     mount --bind $BASEDIR/doc    $BASEDIR/build/usr/src/doc
235     mount --bind $BASEDIR/html   $BASEDIR/build/usr/src/html
236     mount --bind $BASEDIR/langs  $BASEDIR/build/usr/src/langs
237     mount --bind $BASEDIR/lfs    $BASEDIR/build/usr/src/lfs
238     mount --bind $BASEDIR/log    $BASEDIR/build/usr/src/log
239     mount --bind $BASEDIR/src    $BASEDIR/build/usr/src/src
240
241     # Run LFS static binary creation scripts one by one
242     export CCACHE_DIR=$BASEDIR/ccache
243     export CCACHE_HASHDIR=1
244
245     # Remove pre-install list of installed files in case user erase some files before rebuild
246     rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
247 }
248
249
250 ############################################################################
251 #                                                                          #
252 # Necessary shell functions                                                #
253 #                                                                          #
254 ############################################################################
255 lfsmake1() {
256         if [ -f $BASEDIR/lfs/$1 ]; then
257                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
258                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
259                 if [ $? -ne 0 ]; then
260                         exiterror "Download error in $1"
261                 fi
262                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
263                 if [ $? -ne 0 ]; then
264                         exiterror "md5sum error in $1, check file in cache or signature"
265                 fi
266                 cd $BASEDIR/lfs && make -f $*   BUILDTARGET=$BUILDTARGET \
267                                                 MACHINE=$MACHINE \
268                                                 LFS_BASEDIR=$BASEDIR \
269                                                 ROOT=$LFS \
270                                                 KVER=$KVER \
271                                                 install >> $LOGFILE 2>&1
272                 if [ $? -ne 0 ]; then
273                         exiterror "Building $*";
274                 fi
275         else
276                 exiterror "No such file or directory: $BASEDIR/$1"
277         fi
278         return 0
279 }
280
281 lfsmake2() {
282         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
283                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
284                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
285                 if [ $? -ne 0 ]; then
286                         exiterror "Download error in $1"
287                 fi
288                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
289                 if [ $? -ne 0 ]; then
290                         exiterror "md5sum error in $1, check file in cache or signature"
291                 fi
292                 chroot $LFS /tools/bin/env -i   HOME=/root \
293                                                 TERM=$TERM PS1='\u:\w\$ ' \
294                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
295                                                 VERSION=$VERSION \
296                                                 CONFIG_ROOT=$CONFIG_ROOT \
297                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
298                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
299                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
300                                                 KVER=$KVER \
301                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
302                     /tools/bin/bash -x -c "cd /usr/src/lfs && \
303                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
304                 if [ $? -ne 0 ]; then
305                         exiterror "Building $*"
306                 fi
307         else
308                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
309         fi
310         return 0
311 }
312
313 ipcopmake() {
314         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
315                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
316                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
317                 if [ $? -ne 0 ]; then
318                         exiterror "Download error in $1"
319                 fi
320                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
321                 if [ $? -ne 0 ]; then
322                         exiterror "md5sum error in $1, check file in cache or signature"
323                 fi
324                 chroot $LFS /tools/bin/env -i   HOME=/root \
325                                                 TERM=$TERM PS1='\u:\w\$ ' \
326                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
327                                                 VERSION=$VERSION \
328                                                 CONFIG_ROOT=$CONFIG_ROOT \
329                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
330                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
331                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
332                                                 KVER=$KVER \
333                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
334                     /bin/bash -x -c "cd /usr/src/lfs && \
335                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
336                 if [ $? -ne 0 ]; then
337                         exiterror "Building $*"
338                 fi
339         else
340                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
341         fi
342         return 0
343 }
344
345 ipfiredist() {
346         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
347 #          if [ ! `ls -w1 $BASEDIR/packages/*.tar.gz | grep $1` ]; then
348                 echo "`date -u '+%b %e %T'`: Packaging $1" | tee -a $LOGFILE
349                 chroot $LFS /tools/bin/env -i   HOME=/root \
350                                                 TERM=$TERM PS1='\u:\w\$ ' \
351                                                 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
352                                                 VERSION=$VERSION \
353                                                 CONFIG_ROOT=$CONFIG_ROOT \
354                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
355                                                 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
356                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
357                                                 KVER=$KVER \
358                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
359                     /bin/bash -x -c "cd /usr/src/lfs && \
360                     make -f $1 LFS_BASEDIR=/usr/src dist" >>$LOGFILE 2>&1
361                 if [ $? -ne 0 ]; then
362                         exiterror "Packaging $1"
363                 fi
364 #          else
365 #               echo "`date -u '+%b %e %T'`: Packaging: The package $1 already exists"
366 #          fi
367         else
368                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
369         fi
370         return 0
371 }
372
373
374 installmake() {
375         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
376                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
377                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
378                 if [ $? -ne 0 ]; then
379                         exiterror "Download error in $1"
380                 fi
381                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
382                 if [ $? -ne 0 ]; then
383                         exiterror "md5sum error in $1, check file in cache or signature"
384                 fi
385                 chroot $LFS /tools/bin/env -i   HOME=/root \
386                                                 TERM=$TERM PS1='\u:\w\$ ' \
387                                                 PATH=/usr/local/bin:/opt/$MACHINE-uClibc/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin \
388                                                 VERSION=$VERSION \
389                                                 CONFIG_ROOT=$CONFIG_ROOT \
390                                                 LFS_PASS="install" \
391                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
392                                                 CFLAGS="-Os" CXXFLAGS="-Os" \
393                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
394                                                 KVER=$KVER \
395                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
396                     /bin/bash -x -c "cd /usr/src/lfs && \
397                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
398                 if [ $? -ne 0 ]; then
399                         exiterror "Building $*"
400                 fi
401         else
402                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
403         fi
404         return 0
405 }
406
407 buildtoolchain() {
408     LOGFILE="$BASEDIR/log/_build.toolchain.log"
409     export LOGFILE
410     echo -ne "`date -u '+%b %e %T'`: Stage1 toolchain build \n" | tee -a $LOGFILE
411     # Build sed now, as we use some extensions
412     ORG_PATH=$PATH
413     NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
414     export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
415     lfsmake1 ccache
416     lfsmake1 sed        LFS_PASS=1
417     lfsmake1 m4         LFS_PASS=1
418     lfsmake1 bison      LFS_PASS=1
419     lfsmake1 flex       LFS_PASS=1
420     lfsmake1 binutils   LFS_PASS=1
421     lfsmake1 gcc        LFS_PASS=1
422     export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
423     
424     lfsmake1 linux
425     lfsmake1 tcl
426     lfsmake1 expect
427     lfsmake1 glibc
428     lfsmake1 dejagnu
429     lfsmake1 gcc        LFS_PASS=2
430     lfsmake1 binutils   LFS_PASS=2
431     lfsmake1 gawk
432     lfsmake1 coreutils
433     lfsmake1 bzip2
434     lfsmake1 gzip
435     lfsmake1 diffutils
436     lfsmake1 findutils
437     lfsmake1 make
438     lfsmake1 grep
439     lfsmake1 sed        LFS_PASS=2
440     lfsmake1 m4         LFS_PASS=2
441     lfsmake1 bison      LFS_PASS=2
442     lfsmake1 flex       LFS_PASS=2
443     lfsmake1 gettext
444     lfsmake1 ncurses
445     lfsmake1 patch
446     lfsmake1 tar
447     lfsmake1 texinfo
448     lfsmake1 bash
449     lfsmake1 util-linux
450     lfsmake1 perl
451     export PATH=$ORG_PATH
452 }
453
454 buildbase() {
455     LOGFILE="$BASEDIR/log/_build.base.log"
456     export LOGFILE
457     echo -ne "`date -u '+%b %e %T'`: Stage2 linux base build \n" | tee -a $LOGFILE
458     # Run LFS dynamic binary creation scripts one by one
459     lfsmake2 stage2
460     lfsmake2 makedev
461     lfsmake2 linux
462     lfsmake2 man-pages
463     lfsmake2 glibc
464     lfsmake2 binutils
465     lfsmake2 gcc
466     lfsmake2 coreutils
467     lfsmake2 zlib
468     lfsmake2 mktemp
469     lfsmake2 iana-etc
470     lfsmake2 findutils
471     lfsmake2 gawk
472     lfsmake2 ncurses
473     lfsmake2 vim
474     lfsmake2 m4
475     lfsmake2 bison
476     lfsmake2 less
477     lfsmake2 groff
478     lfsmake2 sed
479     lfsmake2 flex
480     lfsmake2 gettext
481     lfsmake2 net-tools
482     lfsmake2 inetutils
483     lfsmake2 perl
484     lfsmake2 texinfo
485     lfsmake2 autoconf
486     lfsmake2 automake
487     lfsmake2 bash
488     lfsmake2 file
489     lfsmake2 libtool
490     lfsmake2 bzip2
491     lfsmake2 diffutils
492     lfsmake2 ed
493     lfsmake2 kbd
494     lfsmake2 e2fsprogs
495     lfsmake2 grep
496     if [ 'i386' = $MACHINE ]; then 
497         lfsmake2 grub
498     elif [ 'alpha' = $MACHINE ]; then 
499         lfsmake2 aboot
500     fi
501     lfsmake2 gzip
502     lfsmake2 man
503     lfsmake2 make
504     lfsmake2 modutils
505     lfsmake2 patch
506     lfsmake2 procinfo
507     lfsmake2 procps
508     lfsmake2 psmisc
509     lfsmake2 shadow
510     lfsmake2 sysklogd
511     lfsmake2 sysvinit
512     lfsmake2 tar
513     lfsmake2 util-linux
514 }
515
516 buildipcop() {
517   # Run IPFire make scripts one by one
518   LOGFILE="$BASEDIR/log/_build.ipfire.log"
519   export LOGFILE
520   echo -ne "`date -u '+%b %e %T'`: Stage3 $NAME build \n" | tee -a $LOGFILE
521
522   # Build these first as some of the kernel packages below rely on 
523   # these for some of their client program functionality 
524   ipcopmake configroot
525   ipcopmake dhcp
526   ipcopmake dhcpcd
527   ipcopmake libusb
528   ipcopmake libpcap
529   ipcopmake linux-atm
530   ipcopmake ppp
531   ipcopmake rp-pppoe
532   ipcopmake unzip
533   # Do SMP now
534   if [ 'i386' = $MACHINE ]; then 
535         # abuse the SMP flag, and make an minimal installer kernel first
536         # so that the boot floppy always works.....
537         ipcopmake linux         LFS_PASS=ipfire SMP=installer
538         ipcopmake linux         LFS_PASS=ipfire SMP=1
539         ipcopmake 3cp4218       SMP=1
540         ipcopmake amedyn        SMP=1
541         ipcopmake cxacru        SMP=1
542         ipcopmake eagle         SMP=1
543
544         # These are here because they have i386 only binary libraries
545         # included in the package.
546         ipcopmake cnx_pci       SMP=1
547         ipcopmake fcdsl         SMP=1
548         ipcopmake fcdsl2        SMP=1
549         ipcopmake fcdslsl       SMP=1
550         ipcopmake fcdslusb      SMP=1
551         ipcopmake fcdslslusb    SMP=1
552         ipcopmake fcpci SMP=1
553         ipcopmake fcclassic     SMP=1
554         ipcopmake pulsar        SMP=1
555         ipcopmake unicorn       SMP=1
556         ipcopmake promise-sata-300-tx SMP=1
557   fi
558
559   ipcopmake linux       LFS_PASS=ipfire
560   ipcopmake 3cp4218     
561   ipcopmake amedyn      
562   ipcopmake cxacru      
563   ipcopmake eciadsl     
564   ipcopmake eagle       
565   ipcopmake speedtouch  
566   if [ 'i386' = $MACHINE ]; then 
567         # These are here because they have i386 only binary libraries
568         # included in the package.
569         ipcopmake cnx_pci       
570         ipcopmake fcdsl         
571         ipcopmake fcdsl2        
572         ipcopmake fcdslsl       
573         ipcopmake fcdslusb      
574         ipcopmake fcdslslusb 
575         ipcopmake fcpci
576         ipcopmake fcclassic
577         ipcopmake pulsar        
578         ipcopmake unicorn
579         ipcopmake promise-sata-300-tx
580   fi
581
582   ipcopmake pcmcia-cs
583   ipcopmake expat
584   ipcopmake gdbm
585   ipcopmake gmp
586   ipcopmake openssl
587   ipcopmake python
588   ipcopmake libnet
589   ipcopmake libpng
590   ipcopmake libtiff
591   ipcopmake libjpeg
592   ipcopmake lcms
593   ipcopmake libmng
594   ipcopmake freetype
595   ipcopmake gd
596   ipcopmake popt
597   ipcopmake slang
598   ipcopmake newt
599   ipcopmake libcap
600   ipcopmake pciutils
601   ipcopmake pcre
602   ipcopmake apache
603   ipcopmake arping
604   ipcopmake beep
605   ipcopmake bind
606   ipcopmake capi4k-utils
607   ipcopmake cdrtools
608   ipcopmake dnsmasq
609   ipcopmake dosfstools
610   ipcopmake ethtool
611   ipcopmake ez-ipupdate
612   ipcopmake fcron
613   ipcopmake perl-GD
614   ipcopmake gnupg
615   ipcopmake hdparm
616   ipcopmake ibod
617   ipcopmake initscripts
618   ipcopmake iptables
619   ipcopmake ipac-ng
620   ipcopmake ipaddr
621   ipcopmake iproute2
622   ipcopmake iptstate
623   ipcopmake iputils
624   ipcopmake l7-protocols
625   ipcopmake isapnptools
626   ipcopmake isdn4k-utils
627   ipcopmake kudzu
628   ipcopmake logrotate
629   ipcopmake logwatch
630   ipcopmake mingetty
631   ipcopmake misc-progs
632   ipcopmake mtools
633   ipcopmake nano
634   ipcopmake nash
635   ipcopmake nasm
636   ipcopmake URI
637   ipcopmake HTML-Tagset
638   ipcopmake HTML-Parser
639   ipcopmake Compress-Zlib
640   ipcopmake Digest
641   ipcopmake Digest-SHA1
642   ipcopmake Digest-HMAC
643   ipcopmake libwww-perl
644   ipcopmake Net-DNS
645   ipcopmake Net-IPv4Addr
646   ipcopmake Net_SSLeay
647   ipcopmake IO-Stringy
648   ipcopmake Unix-Syslog
649   ipcopmake Mail-Tools
650   ipcopmake MIME-Tools
651   ipcopmake Net-Server
652   ipcopmake Convert-TNEF
653   ipcopmake Convert-UUlib
654   ipcopmake Archive-Tar
655   ipcopmake Archive-Zip
656   ipcopmake Text-Tabs+Wrap
657   ipcopmake Locale-Country
658   ipcopmake GeoIP
659   ipcopmake fwhits
660   ipcopmake berkeley
661   ipcopmake BerkeleyDB ## The Perl module
662   ipcopmake noip_updater
663   ipcopmake ntp
664   ipcopmake oinkmaster
665   ipcopmake openssh
666   ipcopmake openswan
667   ipcopmake pptpclient
668   ipcopmake rrdtool
669   ipcopmake setserial
670   ipcopmake setup
671   ipcopmake snort
672   #ipcopmake speedycgi
673   ipcopmake saslauthd PASS=1
674   ipcopmake openldap
675   ipcopmake squid
676   ipcopmake squid-graph
677   ipcopmake squidguard
678   ipcopmake tcpdump
679   ipcopmake traceroute
680   ipcopmake vlan
681   #ipcopmake wireless
682   ipcopmake libsafe
683   ipcopmake 3c5x9setup
684 #  echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
685   ipcopmake pakfire
686   ipcopmake startscripts
687 ## Zuerst die Libs und dann die Programme. Ordnung muss sein!
688   ipcopmake java
689   ipcopmake bootsplash
690   ipcopmake libxml2
691   ipcopmake spandsp
692   ipcopmake lzo
693   ipcopmake openvpn
694   ipcopmake pkg-config
695   ipcopmake glib
696   ipcopmake xampp
697   ipcopmake pam
698   ipcopmake pammysql
699   ipcopmake saslauthd PASS=2
700   ipcopmake xinetd
701   ipcopmake ghostscript
702   ipcopmake cups
703 #  ipcopmake lpd ## Im Moment aus, da CUPS vorhanden ist.
704   ipcopmake samba
705   ipcopmake sudo
706   ipcopmake mc
707 #  ipcopmake pwlib
708 #  ipcopmake openh323
709   ipcopmake wget
710   ipcopmake wput
711   ipcopmake bridge-utils
712   ipcopmake screen
713   ipcopmake hddtemp
714   ipcopmake smartmontools
715   ipcopmake htop
716   ipcopmake lynx
717   echo -ne "`date -u '+%b %e %T'`: Building ### Mailserver ### \n" | tee -a $LOGFILE
718   ipcopmake postfix
719   ipcopmake procmail
720   ipcopmake fetchmail
721   ipcopmake cyrusimap
722   ipcopmake web-cyradm
723   ipcopmake mailx
724   ipcopmake clamav
725   ipcopmake razor
726   ipcopmake spamassassin
727 #  ipcopmake amavisd
728   echo -ne "`date -u '+%b %e %T'`: Building ### VoIP-Server ### \n" | tee -a $LOGFILE
729   ipcopmake stund
730   ipcopmake zaptel
731   ipcopmake libpri
732   ipcopmake bristuff
733   ipcopmake asterisk
734   ipcopmake mpg123
735   echo -ne "`date -u '+%b %e %T'`: Building ### MP3-Server ### \n" | tee -a $LOGFILE
736   ipcopmake libogg
737   ipcopmake libvorbis
738   ipcopmake lame
739   ipcopmake sox
740   ipcopmake gnump3d
741   echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE
742   ipcopmake applejuice
743   ipcopmake ocaml
744   ipcopmake mldonkey
745 #  ipcopmake edonkeyclc
746 #  ipcopmake sane
747   echo -ne "`date -u '+%b %e %T'`: Building ### Net-Tools ### \n" | tee -a $LOGFILE
748   ipcopmake ntop
749 #  ipcopmake rsync
750   ipcopmake tcpwrapper
751   ipcopmake portmap
752   ipcopmake nfs
753   ipcopmake nmap
754   ipcopmake mbmon
755   ipcopmake iftop
756   ipcopmake ncftp
757   ipcopmake cftp
758   ipcopmake etherwake
759   ipcopmake ethereal
760   ipcopmake tftp-hpa
761   ipcopmake subversion
762   ipcopmake iptraf
763   ipcopmake nagios
764 #  ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
765 }
766
767 buildinstaller() {
768   # Run installer scripts one by one
769   LOGFILE="$BASEDIR/log/_build.installer.log"
770   export LOGFILE
771   echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
772   if [ 'i386' = $MACHINE ]; then 
773         ipcopmake syslinux
774         ipcopmake as86
775         ipcopmake mbr
776         ipcopmake uClibc
777   fi
778   installmake busybox
779   installmake sysvinit
780   installmake e2fsprogs
781   installmake misc-progs
782   installmake slang
783   installmake util-linux
784   installmake newt
785   installmake pciutils
786   installmake pcmcia-cs
787   installmake kbd
788   installmake installer
789   installmake scsi.img
790   installmake driver.img
791   installmake initrd
792   installmake boot.img
793 }
794
795 buildpackages() {
796   LOGFILE="$BASEDIR/log/_build.packages.log"
797   export LOGFILE
798   echo "... see detailed log in _build.*.log files" >> $LOGFILE
799   echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
800   # Strip files
801   echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
802   find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
803         ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
804          -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
805   # add -ls before -exec if you want to verify what files are stripped
806
807   find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
808         -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
809   # there add -v to strip to verify
810
811   if [ 'i386' = $MACHINE ]; then
812         # Create fcdsl packages
813         echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
814         cp $LFS/install/images/fcdsl/license.txt $LFS  >> $LOGFILE 2>&1
815         touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
816         cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
817                 lib/modules/$KVER/misc/fcdsl*.o.gz \
818                 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
819                 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
820                 etc/fcdsl/fcdsl*.conf \
821                 etc/drdsl/{drdsl,drdsl.ini} \
822                 license.txt \
823                 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
824         rm -f $LFS/license.txt >> $LOGFILE 2>&1
825         cd $BASEDIR
826   fi
827   
828   # Generating list of packages used
829   echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
830   rm -f $BASEDIR/doc/packages-list
831   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
832         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
833                 echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
834         fi
835   done
836   echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
837   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipfire$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|^ipfire-logs' \
838         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
839   rm -f $BASEDIR/doc/packages-list
840   # packages-list.txt is ready to be displayed for wiki page
841
842   # Create ISO for CDRom and USB-superfloppy
843   ipcopmake cdrom
844   rm -f $LFS/install/images/*usb*
845   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
846
847   ipfirepackages
848
849   # Cleanup
850   stdumount
851   rm -rf $BASEDIR/build/tmp/*
852
853   # Generating total list of files
854   echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
855   rm -f $BASEDIR/log/FILES
856   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
857         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
858                 echo "##" >>$BASEDIR/log/FILES
859                 echo "## `basename $i`" >>$BASEDIR/log/FILES
860                 echo "##" >>$BASEDIR/log/FILES
861                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
862         fi
863   done
864   cd $BASEDIR/packages; ls -w1 *.tar.gz | awk -F ".tar.gz" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
865   echo "###EOF###" >> $BASEDIR/packages/packages_list.txt
866
867   cd $PWD
868
869 }
870
871 ipfirepackages() {
872   if [ -d "$BASEDIR/packages" ]; then
873           for i in `ls $BASEDIR/packages`; do
874                 touch $BASEDIR/build/install/packages/$i.empty
875           done
876   fi
877   ipfiredist amavisd
878   ipfiredist applejuice
879   ipfiredist asterisk
880   ipfiredist clamav
881   ipfiredist cups
882   ipfiredist cyrusimap
883   ipfiredist fetchmail
884   ipfiredist gnump3d
885   ipfiredist iptraf
886   ipfiredist java
887   ipfiredist lame
888   ipfiredist libogg
889   ipfiredist libtiff
890   ipfiredist libvorbis
891   ipfiredist libxml2
892   ipfiredist mailx
893   ipfiredist mldonkey
894   ipfiredist nagios
895   ipfiredist nfs
896   ipfiredist nmap
897   ipfiredist ntop
898   ipfiredist portmap
899   ipfiredist postfix
900   ipfiredist procmail
901   ipfiredist samba
902   ipfiredist sox
903   ipfiredist spamassassin
904   ipfiredist subversion
905   ipfiredist web-cyradm
906   ipfiredist xampp
907 #  ipfiredist xinetd
908   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
909   mv -f $LFS/install/packages/*.{tar.gz,md5} $BASEDIR/packages >> $LOGFILE 2>&1
910   rm -rf  $BASEDIR/build/install/packages/*
911 }
912
913 update_logs() {
914         tar cfz log/ipfire-logs-`date +'%Y-%m-%d-%H:%M'`.tgz log/_build.*
915         rm -f log/_build.*
916 }
917
918 # See what we're supposed to do
919 case "$1" in 
920 build)
921         BUILDMACHINE=`uname -m`
922         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
923         #only restore on a clean disk
924         if [ ! -f log/perl-*-tools ]; then
925                 if [ ! -n "$PACKAGE" ]; then
926                         echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
927                         prepareenv
928                         buildtoolchain
929                 else
930                         PACKAGENAME=${PACKAGE%.tar.gz}
931                         echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
932                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
933                                 tar zxf $PACKAGE
934                                 prepareenv
935                         else
936                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
937                         fi
938                 fi
939         else
940                 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
941                 prepareenv
942         fi
943
944         buildbase
945         buildipcop
946
947         # Setzen des IPFire Builds
948         if [ "$FIREBUILD" ]; then
949                 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
950         else
951                 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
952         fi
953
954         buildinstaller
955         buildpackages
956         ;;
957 shell)
958         # enter a shell inside LFS chroot
959         # may be used to changed kernel settings
960         prepareenv
961         entershell
962         ;;
963 changelog)
964         echo -n "Loading new Changelog from SVN: "
965         svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
966         echo "Finished!"
967         ;;
968 check)
969         echo "Checking sources files availability on the web"
970         if [ ! -d $DIR_CHK ]; then
971                 mkdir -p $DIR_CHK
972         fi
973         FINISHED=0
974         cd $BASEDIR/lfs
975         for c in `seq $MAX_RETRIES`; do
976                 if (( FINISHED==1 )); then
977                         break
978                 fi
979                 FINISHED=1
980                 cd $BASEDIR/lfs
981                 for i in *; do
982                         if [ -f "$i" -a "$i" != "Config" ]; then
983                                 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
984                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" check
985                                 if [ $? -ne 0 ]; then
986                                         echo "Check : wget error in lfs/$i"
987                                         FINISHED=0
988                                 fi
989                         fi
990                 done
991         done
992         cd -
993         ;;
994 checkclean)
995         echo "Erasing sources files availability tags"
996         rm -rf $DIR_CHK/*
997         ;;
998 clean)
999         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1000                 $LOSETUP -d $i 2>/dev/null
1001         done
1002         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1003                 umount $i
1004         done
1005         stdumount
1006         for i in `seq 0 7`; do
1007             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1008                 umount /dev/loop${i}     2>/dev/null;
1009                 losetup -d /dev/loop${i} 2>/dev/null;
1010             fi;
1011         done
1012         rm -rf $BASEDIR/build
1013         rm -rf $BASEDIR/cdrom
1014         rm -rf $BASEDIR/packages
1015         rm -rf $BASEDIR/log
1016         if [ -h /tools ]; then
1017                 rm -f /tools
1018         fi
1019         ;;
1020 newpak)
1021         # create structure for a new package
1022         echo -e "Name of the new package: $2"
1023         if [ ! -f "lfs/$2" ]; then
1024                 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
1025                 mkdir -p src/paks/$2
1026                 cd src/paks/$2
1027                 echo "`date -u '+%b %e %T'`: Creating files"
1028                 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
1029
1030                 touch ROOTFILES
1031                 touch {,un}install.sh
1032         ## install.sh
1033                 echo '#!/bin/bash' > install.sh
1034                 echo '#' >> install.sh
1035                 echo '#################################################################' >> install.sh
1036                 echo '#                                                               #' >> install.sh
1037                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
1038                 echo '#                                                               #' >> install.sh
1039                 echo '#################################################################' >> install.sh
1040                 echo '#' >> install.sh
1041                 echo '# Extract the files' >> install.sh
1042                 echo 'tar xfz files.tgz -C /' >> install.sh
1043                 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
1044         ## uninstall.sh
1045                 echo '#!/bin/bash' > uninstall.sh
1046                 echo '#################################################################' >> uninstall.sh
1047                 echo '#                                                               #' >> uninstall.sh
1048                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
1049                 echo '#                                                               #' >> uninstall.sh
1050                 echo '#################################################################' >> uninstall.sh
1051                 echo '#' >> uninstall.sh
1052                 echo '# Delete the files' >> uninstall.sh
1053                 echo '## Befehl fehlt noch' >> uninstall.sh
1054                 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
1055                 echo "`date -u '+%b %e %T'`: Adding files to SVN"
1056                 cd - && svn add lfs/$2 && svn add src/paks/$2
1057
1058                 echo -n "Do you want to remove the folders? [y/n]"
1059                 read REM
1060                 if  [ "$REM" == "y" ]; then
1061                         echo "Removing the folders..."
1062                         svn del src/paks/$2 --force
1063                 else
1064                         echo "Folders are kept."
1065                 fi
1066         else
1067                 echo "$2 already exists"
1068         fi
1069         exit 0
1070         ;;
1071 prefetch)
1072         if [ ! -d $BASEDIR/cache ]; then
1073                 mkdir $BASEDIR/cache
1074         fi
1075         mkdir -p $BASEDIR/log
1076         echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1077         FINISHED=0
1078         cd $BASEDIR/lfs
1079         for c in `seq $MAX_RETRIES`; do
1080                 if (( FINISHED==1 )); then 
1081                         break
1082                 fi
1083                 FINISHED=1
1084                 cd $BASEDIR/lfs
1085                 for i in *; do
1086                         if [ -f "$i" -a "$i" != "Config" ]; then
1087                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1088                                 if [ $? -ne 0 ]; then
1089                                         echo "Prefetch : wget error in lfs/$i"
1090                                         FINISHED=0
1091                                 else
1092                                         if [ $c -eq 1 ]; then
1093                                                 echo "Prefetch : lfs/$i files loaded"
1094                                         fi
1095                                 fi
1096                         fi
1097                 done
1098         done
1099         echo "Prefetch : verifying md5sum"
1100         ERROR=0
1101         for i in *; do
1102                 if [ -f "$i" -a "$i" != "Config" ]; then
1103                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1104                         if [ $? -ne 0 ]; then
1105                                 echo "md5 difference in lfs/$i"
1106                                 ERROR=1
1107                         fi
1108                 fi
1109         done
1110         if [ $ERROR -eq 0 ]; then
1111                 echo "Prefetch : all files md5sum match"
1112         fi
1113         cd -
1114         ;;
1115 toolchain)
1116         prepareenv
1117         buildtoolchain
1118         BUILDMACHINE=`uname -m`
1119         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1120         test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1121         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1122                 build/{bin,etc,usr/bin,usr/local} \
1123                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1124                 log >> $LOGFILE
1125         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1126                 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1127         stdumount
1128         ;;
1129 gettoolchain)
1130         BUILDMACHINE=`uname -m`
1131         # arbitrary name to be updated in case of new toolchain package upload
1132         PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
1133         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1134                 URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1135                 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1136                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1137                 cd $BASEDIR/cache/toolchains
1138                 wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
1139                 if [ $? -ne 0 ]; then
1140                         echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1141                 else
1142                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1143                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1144                         else
1145                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1146                         fi
1147                 fi
1148         else
1149                 echo "Toolchain is already downloaded. Exiting..."
1150         fi
1151         ;;
1152 sources-iso)
1153         prepareenv
1154         echo "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1155         chroot $LFS /tools/bin/env -i   HOME=/root \
1156         TERM=$TERM PS1='\u:\w\$ ' \
1157         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1158         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1159         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1160         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1161         stdumount
1162         ;;
1163 svn)
1164         case "$2" in
1165           update|up)
1166                 # clear
1167                 echo -n "Load the latest source files..."
1168                 svn update >> $PWD/log/_build.svn.update.log
1169                 if [ $? -eq 0 ]; then
1170                         echo ".Done!"
1171                 else
1172                         echo ".Fail!"
1173                         exit 1
1174                 fi
1175                 echo -n "Write the svn info to a file..."
1176                 svn info > $PWD/svn_status
1177                 if [ "$?" -eq "0" ]; then
1178                         echo ".Done!"
1179                 else
1180                         echo ".Fail!"
1181                         exit 1
1182                 fi
1183                 chmod 755 $0
1184                 exit 0
1185           ;;
1186           commit|ci)
1187                 clear
1188                 if [ -e /sbin/yast ]; then
1189                         $0 changelog
1190                 fi
1191                 echo "Upload the changed files..."
1192                 sleep 1
1193                 IPFIRE_SVN_MESSAGE=/tmp/ipfire-svn-co-message.txt
1194                 rm -f $IPFIRE_SVN_MESSAGE
1195                 mcedit $IPFIRE_SVN_MESSAGE
1196                 svn commit -F $IPFIRE_SVN_MESSAGE
1197                 rm -f $IPFIRE_SVN_MESSAGE
1198                 $0 svn up
1199           ;;
1200           dist)
1201                 #$0 svn up
1202                 echo -ne "Download source package from svn..."
1203                 svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
1204                 if [ "$?" -eq "0" ]; then
1205                         echo ".Done!"
1206                 else
1207                         echo ".Fail!"
1208                         exit 1
1209                 fi
1210                 echo -n "Compress files..."
1211                 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
1212                 if [ "$?" -eq "0" ]; then
1213                         echo ".Done!"
1214                 else
1215                         echo ".Fail!"
1216                         exit 1
1217                 fi
1218                 echo -n "Cleanup..."
1219                 rm ipfire-source/ -r
1220                 if [ "$?" -eq "0" ]; then
1221                         echo ".Done!"
1222                 else
1223                         echo ".Fail!"
1224                         exit 1
1225                 fi
1226           ;;
1227           diff)
1228                 echo -ne "Make a local diff to last svn revision..."
1229                 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1230                 if [ "$?" -eq "0" ]; then
1231                         echo ".Done!"
1232                 else
1233                         echo ".Fail!"
1234                         exit 1
1235                 fi
1236                 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1237           ;;
1238         esac
1239         ;;
1240 make-config)
1241         echo -e "This is for creating your configuration..."
1242         echo -e "We will need some input:"
1243         echo -e ""
1244         echo -n "FTP-DOMAIN FOR THE ISO: "
1245         read IPFIRE_FTP_URL_EXT
1246         echo -n "PATH FOR $IPFIRE_FTP_URL_EXT: "
1247         read IPFIRE_FTP_PATH_EXT
1248         echo -n "USERNAME FOR $IPFIRE_FTP_URL_EXT: "
1249         read IPFIRE_FTP_USER_EXT
1250         echo -n "PASSWORD FOR $IPFIRE_FTP_URL_EXT: "
1251         read -s IPFIRE_FTP_PASS_EXT
1252         echo ""
1253         echo "(You can leave this empty if the cache-server is the same as your iso-server.)"
1254         echo -n "FTP-DOMAIN FOR THE CACHE: "
1255         read IPFIRE_FTP_URL_INT
1256         echo -n "PATH FOR $IPFIRE_FTP_URL_INT: "
1257         read IPFIRE_FTP_PATH_INT
1258         if [ $IPFIRE_FTP_URL_INT ]; then
1259                 echo -n "USERNAME FOR $IPFIRE_FTP_URL_INT: "
1260                 read IPFIRE_FTP_USER_INT
1261                 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_INT: "
1262                 read -s IPFIRE_FTP_PASS_INT
1263         else
1264                 IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_EXT
1265                 IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_EXT
1266                 IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_EXT
1267                 echo "USERNAME FOR $IPFIRE_FTP_URL_INT: $IPFIRE_FTP_USER_INT"
1268                 echo "PASSWORD FOR $IPFIRE_FTP_URL_INT: !HIDDEN!"
1269         fi
1270         echo ""
1271         echo "(You can leave this empty if the pak-server is the same as your iso-server.)"
1272         echo -n "FTP-DOMAIN FOR THE PAKS: "
1273         read IPFIRE_FTP_URL_PAK
1274         echo -n "PATH FOR $IPFIRE_FTP_URL_PAK: "
1275         read IPFIRE_FTP_PATH_PAK
1276         if [ $IPFIRE_FTP_URL_PAK ]; then
1277                 echo -n "USERNAME FOR $IPFIRE_FTP_URL_PAK: "
1278                 read IPFIRE_FTP_USER_PAK
1279                 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_PAK: "
1280                 read -s IPFIRE_FTP_PASS_PAK
1281         else
1282                 IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_EXT
1283                 IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_EXT
1284                 IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_EXT
1285                 echo "USERNAME FOR $IPFIRE_FTP_URL_PAK: $IPFIRE_FTP_USER_PAK"
1286                 echo "PASSWORD FOR $IPFIRE_FTP_URL_PAK: !HIDDEN!"
1287         fi
1288         echo ""
1289         echo -e "ONE OR MORE EMAIL ADDRESS(ES) TO WHICH THE REPORTS WILL BE SENT"
1290         echo -e "(seperated by comma)"
1291         read IPFIRE_MAIL_REPORT
1292         echo -n "EMAIL FROM: "
1293         read IPFIRE_MAIL_FROM
1294         echo -n "EMAIL SERVER: "
1295         read IPFIRE_MAIL_SERVER
1296         echo -n "LOGIN TO MAIL SERVER: "
1297         read IPFIRE_MAIL_USER
1298         echo -n "MAIL PASSWORD: "
1299         read -s IPFIRE_MAIL_PASS
1300         echo -n "Saving..."
1301         for i in `seq 20`; do
1302                 sleep 0.1; echo -n "."
1303         done
1304         echo ".Finished!"
1305         cat <<END > .config
1306 ### ISO server
1307 IPFIRE_FTP_URL_EXT=$IPFIRE_FTP_URL_EXT
1308 IPFIRE_FTP_PATH_EXT=$IPFIRE_FTP_PATH_EXT
1309 IPFIRE_FTP_USER_EXT=$IPFIRE_FTP_USER_EXT
1310 IPFIRE_FTP_PASS_EXT=$IPFIRE_FTP_PASS_EXT
1311 ### cache server
1312 IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_INT
1313 IPFIRE_FTP_PATH_INT=$IPFIRE_FTP_PATH_INT
1314 IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_INT
1315 IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_INT
1316 ### paks server
1317 IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_PAK
1318 IPFIRE_FTP_PATH_PAK=$IPFIRE_FTP_PATH_PAK
1319 IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_PAK
1320 IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_PAK
1321 ### mail reports
1322 IPFIRE_MAIL_REPORT=$IPFIRE_MAIL_REPORT
1323 IPFIRE_MAIL_FROM=$IPFIRE_MAIL_FROM
1324 IPFIRE_MAIL_SERVER=$IPFIRE_MAIL_SERVER
1325 IPFIRE_MAIL_USER=$IPFIRE_MAIL_USER
1326 IPFIRE_MAIL_PASS=$IPFIRE_MAIL_PASS
1327 END
1328         ;;
1329 sync)
1330         echo -e "Syncing cache to ftp:"
1331 #       rm -f doc/packages-to-remove-from-ftp
1332         ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > ftplist
1333         for i in `ls -w1 cache/`; do
1334                 grep $i ftplist
1335                 if [ "$?" -ne "0" ]; then
1336                         ncftpput -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ cache/$i
1337                         if [ "$?" -eq "0" ]; then
1338                                 echo -e "$i was successfully uploaded to the ftp server."
1339                         else
1340                                 echo -e "There was an error while uploading $i to the ftp server."
1341                         fi
1342                 fi
1343         done
1344 #       for i in `cat ftplist`; do
1345 #               ls -w1 cache/ | grep $i
1346 #               if [ "$?" -eq "1" ]; then
1347 #                       echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1348 #               fi
1349 #       done
1350         rm -f ftplist
1351         ;;
1352 upload)
1353         case "$2" in
1354           iso)
1355                 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
1356                 cat <<EOF > .ftp-commands
1357 mkdir $IPFIRE_FTP_PATH_EXT
1358 ls -lah
1359 quit
1360 EOF
1361                 ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
1362                 rm -f .ftp-commands
1363                 md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
1364                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso
1365                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso.md5
1366                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-source-r$SVN_REVISION.tar.gz
1367                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ svn_status
1368                 if [ "$?" -eq "0" ]; then
1369                         echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
1370                 else
1371                         echo -e "There was an error while uploading the iso to the ftp server."
1372                         exit 1
1373                 fi
1374                 if [ "$3" = "--with-sources-cd" ]; then
1375                         ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-sources-cd-$VERSION.$MACHINE.iso
1376                 fi
1377                 ;;
1378           paks)
1379                 cat <<EOF > .ftp-commands
1380 mkdir $IPFIRE_FTP_PATH_PAK
1381 ls -lah
1382 quit
1383 EOF
1384                 ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
1385                 rm -f .ftp-commands
1386                 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
1387                 if [ "$?" -eq "0" ]; then
1388                         echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
1389                 else
1390                         echo -e "There was an error while uploading the packages to the ftp server."
1391                         exit 1
1392                 fi
1393           ;;
1394         esac
1395         ;;
1396 build-only)
1397         rm -f $BASEDIR/log/$2*
1398         BUILDMACHINE=`uname -m`
1399         prepareenv
1400         ipcopmake $2
1401         ;;
1402 build-silent)
1403         screen -dmS ipfire $0 build
1404         echo "Build started... This will take a while!"
1405         echo "You can see the status with 'screen -x ipfire'."
1406         ;;
1407 mail)
1408         chmod 755 tools/sendEmail
1409         ATTACHMENT=/tmp/ipfire-build-logs-R$SVN_REVISION.tar.gz
1410         if [ "$2" = "ERROR" ]; then
1411                 SUBJECT="ERROR: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1412                 echo "ERROR: $0 build!"
1413                 cat <<END > /tmp/ipfire_mail_body
1414 When I was building IPFire on `hostname`, I have found an ERROR!
1415 Here you can see the logs and detect the reason for this error.
1416
1417 Best Regards
1418 Your IPFire-Build-Script
1419 END
1420         fi
1421         if [ "$2" = "SUCCESS" ]; then
1422                 SUBJECT="SUCCESS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1423                 cat <<END > /tmp/ipfire_mail_body
1424 Building IPFire on `hostname` in Revision $SVN_REVISION was successfull!
1425 You can find the ISO on your ftp server.
1426
1427 Statistics:
1428 -----------
1429 Started:        $IPFIRE_START_TIME
1430 Finished:       `date`
1431
1432 Best Regards
1433 Your IPFire-Build-Script
1434 END
1435         fi
1436         if [ "$2" = "SVNUPDATE" ]; then
1437                 SUBJECT="SVNUPDATE: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1438                 echo "ERROR: $0 svn up!"
1439                 cat <<END > /tmp/ipfire_mail_body
1440 When I was downloading the latest svn source,
1441 I have found an ERROR!
1442 Here you can see the logs and detect the reason for this error.
1443
1444 Best Regards
1445 Your IPFire-Build-Script
1446 END
1447         fi
1448
1449         if [ "$2" = "SVNDIST" ]; then
1450                 SUBJECT="SVNDIST: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1451                 echo "ERROR: $0 svn dist!"
1452                 cat <<END > /tmp/ipfire_mail_body
1453 When I was exporting the latest svn source,
1454 I have found an ERROR!
1455 Here you can see the logs and detect the reason for this error.
1456
1457 Best Regards
1458 Your IPFire-Build-Script
1459 END
1460         fi
1461
1462         if [ "$2" = "PREFETCH" ]; then
1463                 SUBJECT="PREFETCH: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1464                 echo "ERROR: $0 prefetch!"
1465                 cat <<END > /tmp/ipfire_mail_body
1466 When I was downloading the source packages,
1467 I have found an ERROR!
1468 Here you can see the logs and detect the reason for this error.
1469
1470 Best Regards
1471 Your IPFire-Build-Script
1472 END
1473         fi
1474
1475         if [ "$2" = "ISO" ]; then
1476                 SUBJECT="ISO: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1477                 echo "ERROR: $0 upload iso!"
1478                 cat <<END > /tmp/ipfire_mail_body
1479 When I was uploading the iso image,
1480 I have found an ERROR!
1481 Here you can see the logs and detect the reason for this error.
1482
1483 Best Regards
1484 Your IPFire-Build-Script
1485 END
1486         fi
1487
1488         if [ "$2" = "PAKS" ]; then
1489                 SUBJECT="PAKS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1490                 echo "ERROR: $0 upload paks!"
1491                 cat <<END > /tmp/ipfire_mail_body
1492 When I was uploading the packages,
1493 I have found an ERROR!
1494 Here you can see the logs and detect the reason for this error.
1495
1496 Best Regards
1497 Your IPFire-Build-Script
1498 END
1499         fi
1500
1501         tar cfz $ATTACHMENT log/_build*
1502         cat <<END >> /tmp/ipfire_mail_body
1503
1504 Here is a summary... The full logs are in the attachment.
1505 ---------------------------------------------------------
1506
1507 `tail log/_*`
1508 END
1509         cat /tmp/ipfire_mail_body | tools/sendEmail -q \
1510                 -f $IPFIRE_MAIL_FROM \
1511                 -t $IPFIRE_MAIL_REPORT \
1512                 -u $SUBJECT \
1513                 -s $IPFIRE_MAIL_SERVER:25 \
1514                 -xu $IPFIRE_MAIL_USER \
1515                 -xp $IPFIRE_MAIL_PASS \
1516                 -l log/_build.mail.log \
1517                 -a $ATTACHMENT # -v
1518         rm -f /tmp/ipfire_mail_body $ATTACHMENT
1519         ;;
1520 unattended)
1521         if [ ! -f .config ]; then
1522                 echo "No configuration found. Try ./make.sh make-config."
1523         fi
1524         ### This is our procedure that will compile the IPFire by herself...
1525         echo "### UPDATE LOGS"
1526         update_logs
1527
1528         if [ "$IPFIRE_REBUILD" -eq "0" ]; then
1529                 echo "### SAVING TIME"
1530                 export IPFIRE_START_TIME=`date`
1531
1532                 echo "### GETTING TOOLCHAIN"
1533                 $0 gettoolchain
1534
1535                 echo "### RUNNING SVN-UPDATE"
1536                 $0 svn update
1537                 if [ $? -ne 0 ]; then
1538                         $0 mail SVNUPDATE
1539                         exit 1
1540                 fi
1541         
1542                 echo "### EXPORT SOURCES"
1543                 $0 svn dist
1544                 if [ $? -ne 0 ]; then
1545                         $0 mail SVNDIST
1546                         exit 1
1547                 fi
1548
1549                 echo "### RUNNING PREFETCH"
1550                 $0 prefetch | grep -q "md5 difference"
1551                 if [ $? -eq 0 ]; then
1552                         $0 mail PREFETCH
1553                         exit 1
1554                 fi
1555         fi
1556
1557         echo "### RUNNING BUILD"
1558         $0 build
1559         if [ $? -ne 0 ]; then
1560                 $0 mail ERROR
1561                 exit 1
1562         fi
1563
1564         echo "### MAKING SOURCES-ISO"
1565         echo "DISABLED by Delaco!"
1566         #$0 sources-iso
1567
1568         echo "### UPLOADING ISO"
1569         $0 upload iso
1570         if [ $? -ne 0 ]; then
1571                 $0 mail ISO
1572                 exit 1
1573         fi
1574         
1575         echo "### UPLOADING PAKS"
1576         $0 upload paks
1577         if [ $? -ne 0 ]; then
1578                 $0 mail PAKS
1579                 exit 1
1580         fi
1581
1582         echo "### SUCCESS!"
1583         $0 mail SUCCESS
1584         exit 0
1585         ;;
1586 batch)
1587         if [ `screen -ls | grep -q ipfire` ]; then
1588                 echo "Build is already running, sorry!"
1589                 exit 1
1590         else
1591                 if [ "$2" = "--rebuild" ]; then
1592                         export IPFIRE_REBUILD=1
1593                         echo "REBUILD!"
1594                 else
1595                         export IPFIRE_REBUILD=0
1596                 fi
1597                 echo -n "IPFire-Batch-Build is starting..."
1598                 screen -dmS ipfire $0 unattended
1599                 if [ "$?" -eq "0" ]; then
1600                         echo ".Done!"
1601                 else
1602                         echo ".ERROR!"
1603                         exit 1
1604                 fi
1605                 exit 0
1606         fi
1607         ;;
1608 *)
1609         clear
1610         svn info
1611         select name in "Exit" "IPFIRE: Prefetch" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "SVN: Commit" "SVN: Update" "SVN: Status" "SVN: Diff" "LOG: Tail" "Help"
1612         do
1613         case $name in
1614         "IPFIRE: Prefetch")
1615                 $0 prefetch
1616                 ;;
1617         "IPFIRE: Build (silent)")
1618                 $0 build-silent
1619                 ;;
1620         "IPFIRE: Watch Build")
1621                 echo "Exit with Ctrl+A, Ctrl+D."
1622                 echo -n "Preparing..."
1623                 for i in `seq 10`; do
1624                         sleep 0.1; echo -n "."
1625                 done
1626                 echo ".Ready!"
1627                 sleep 0.3
1628                 screen -x ipfire
1629                 ;;
1630         "IPFIRE: Batch")
1631                 $0 batch
1632                 ;;
1633         "IPFIRE: Clean")
1634                 $0 clean
1635                 ;;
1636         "SVN: Commit")
1637                 echo "Are your sure to Update all Files to the Server (write: yes)?"; read input
1638                 if [ "$input" == "yes" ]; then
1639                         $0 svn commit
1640                 fi
1641                 ;;
1642         "SVN: Update")
1643                 $0 svn update
1644                 ;;
1645         "SVN: Status")
1646                 svn status # | grep -v ^?
1647                 ;;
1648         "SVN: Diff")
1649                 $0 svn diff
1650                 ;;
1651         "Help")
1652                 echo "Usage: $0 {build|changelog|check|checkclean|clean|gettoolchain|newpak|prefetch|shell|sync|toolchain}"
1653                 cat doc/make.sh-usage
1654                 ;;
1655         "LOG: Tail")
1656                 tail -f log/_*
1657                 ;;
1658         "Exit")
1659                 break
1660                 ;;
1661         esac
1662         done
1663         ;;
1664 esac