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