HinzugefĆ¼gt:
[ipfire-2.x.git] / make.sh
1 #!/bin/bash
2 #
3 ############################################################################
4 #                                                                          #
5 # This file is part of the IPFire Firewall.                                #
6 #                                                                          #
7 # IPFire is free software; you can redistribute it and/or modify           #
8 # it under the terms of the GNU General Public License as published by     #
9 # the Free Software Foundation; either version 2 of the License, or        #
10 # (at your option) any later version.                                      #
11 #                                                                          #
12 # IPFire is distributed in the hope that it will be useful,                #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of           #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
15 # GNU General Public License for more details.                             #
16 #                                                                          #
17 # You should have received a copy of the GNU General Public License        #
18 # along with IPFire; if not, write to the Free Software                    #
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
20 #                                                                          #
21 # Copyright (C) 2006 IPFire-Team <entwickler@ipfire.org>.                  #
22 #                                                                          #
23 ############################################################################
24 #
25
26   NAME="IPFire"                 # Software name
27   SNAME="ipfire"                        # Short name
28   VERSION="1.4"                 # Version number
29   SLOGAN="We secure your network"       # Software slogan
30   CONFIG_ROOT=/var/ipfire               # Configuration rootdir
31   NICE=10
32   MAX_RETRIES=3                 # prefetch/check loop
33   KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
34   MACHINE=`uname -m`
35
36   # 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                 echo "`date -u '+%b %e %T'`: Packaging $1" | tee -a $LOGFILE
339                 cp -f $BASEDIR/src/scripts/make-packages.sh $BASEDIR/build/usr/local/bin
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                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
357         fi
358 #       test -d $BASEDIR/packages || mkdir $BASEDIR/packages
359 #       mv -f $BASEDIR/build/paks/* $BASEDIR/packages/
360         return 0
361 }
362
363
364 installmake() {
365         if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
366                 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
367                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download  >> $LOGFILE 2>&1
368                 if [ $? -ne 0 ]; then
369                         exiterror "Download error in $1"
370                 fi
371                 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5  >> $LOGFILE 2>&1
372                 if [ $? -ne 0 ]; then
373                         exiterror "md5sum error in $1, check file in cache or signature"
374                 fi
375                 chroot $LFS /tools/bin/env -i   HOME=/root \
376                                                 TERM=$TERM PS1='\u:\w\$ ' \
377                                                 PATH=/usr/local/bin:/opt/$MACHINE-uClibc/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin \
378                                                 VERSION=$VERSION \
379                                                 CONFIG_ROOT=$CONFIG_ROOT \
380                                                 LFS_PASS="install" \
381                                                 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
382                                                 CFLAGS="-Os" CXXFLAGS="-Os" \
383                                                 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
384                                                 KVER=$KVER \
385                                                 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
386                     /bin/bash -x -c "cd /usr/src/lfs && \
387                     make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
388                 if [ $? -ne 0 ]; then
389                         exiterror "Building $*"
390                 fi
391         else
392                 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
393         fi
394         return 0
395 }
396
397 buildtoolchain() {
398     LOGFILE="$BASEDIR/log/_build.toolchain.log"
399     export LOGFILE
400     echo -ne "`date -u '+%b %e %T'`: Stage1 toolchain build \n" | tee -a $LOGFILE
401     # Build sed now, as we use some extensions
402     ORG_PATH=$PATH
403     NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
404     export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
405     lfsmake1 ccache
406     lfsmake1 sed        LFS_PASS=1
407     lfsmake1 m4         LFS_PASS=1
408     lfsmake1 bison      LFS_PASS=1
409     lfsmake1 flex       LFS_PASS=1
410     lfsmake1 binutils   LFS_PASS=1
411     lfsmake1 gcc        LFS_PASS=1
412     export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
413     
414     lfsmake1 linux
415     lfsmake1 tcl
416     lfsmake1 expect
417     lfsmake1 glibc
418     lfsmake1 dejagnu
419     lfsmake1 gcc        LFS_PASS=2
420     lfsmake1 binutils   LFS_PASS=2
421     lfsmake1 gawk
422     lfsmake1 coreutils
423     lfsmake1 bzip2
424     lfsmake1 gzip
425     lfsmake1 diffutils
426     lfsmake1 findutils
427     lfsmake1 make
428     lfsmake1 grep
429     lfsmake1 sed        LFS_PASS=2
430     lfsmake1 m4         LFS_PASS=2
431     lfsmake1 bison      LFS_PASS=2
432     lfsmake1 flex       LFS_PASS=2
433     lfsmake1 gettext
434     lfsmake1 ncurses
435     lfsmake1 patch
436     lfsmake1 tar
437     lfsmake1 texinfo
438     lfsmake1 bash
439     lfsmake1 util-linux
440     lfsmake1 perl
441     export PATH=$ORG_PATH
442 }
443
444 buildbase() {
445     LOGFILE="$BASEDIR/log/_build.base.log"
446     export LOGFILE
447     echo -ne "`date -u '+%b %e %T'`: Stage2 linux base build \n" | tee -a $LOGFILE
448     # Run LFS dynamic binary creation scripts one by one
449     lfsmake2 stage2
450     lfsmake2 makedev
451     lfsmake2 linux
452     lfsmake2 man-pages
453     lfsmake2 glibc
454     lfsmake2 binutils
455     lfsmake2 gcc
456     lfsmake2 coreutils
457     lfsmake2 zlib
458     lfsmake2 mktemp
459     lfsmake2 iana-etc
460     lfsmake2 findutils
461     lfsmake2 gawk
462     lfsmake2 ncurses
463     lfsmake2 vim
464     lfsmake2 m4
465     lfsmake2 bison
466     lfsmake2 less
467     lfsmake2 groff
468     lfsmake2 sed
469     lfsmake2 flex
470     lfsmake2 gettext
471     lfsmake2 net-tools
472     lfsmake2 inetutils
473     lfsmake2 perl
474     lfsmake2 texinfo
475     lfsmake2 autoconf
476     lfsmake2 automake
477     lfsmake2 bash
478     lfsmake2 file
479     lfsmake2 libtool
480     lfsmake2 bzip2
481     lfsmake2 diffutils
482     lfsmake2 ed
483     lfsmake2 kbd
484     lfsmake2 e2fsprogs
485     lfsmake2 grep
486     if [ 'i386' = $MACHINE ]; then 
487         lfsmake2 grub
488     elif [ 'alpha' = $MACHINE ]; then 
489         lfsmake2 aboot
490     fi
491     lfsmake2 gzip
492     lfsmake2 man
493     lfsmake2 make
494     lfsmake2 modutils
495     lfsmake2 patch
496     lfsmake2 procinfo
497     lfsmake2 procps
498     lfsmake2 psmisc
499     lfsmake2 shadow
500     lfsmake2 sysklogd
501     lfsmake2 sysvinit
502     lfsmake2 tar
503     lfsmake2 util-linux
504 }
505
506 buildipcop() {
507   # Run IPFire make scripts one by one
508   LOGFILE="$BASEDIR/log/_build.ipfire.log"
509   export LOGFILE
510   echo -ne "`date -u '+%b %e %T'`: Stage3 $NAME build \n" | tee -a $LOGFILE
511
512   # Build these first as some of the kernel packages below rely on 
513   # these for some of their client program functionality 
514   ipcopmake configroot
515   ipcopmake dhcp
516   ipcopmake dhcpcd
517   ipcopmake libusb
518   ipcopmake libpcap
519   ipcopmake linux-atm
520   ipcopmake ppp
521   ipcopmake rp-pppoe
522   ipcopmake unzip
523   # Do SMP now
524   if [ 'i386' = $MACHINE ]; then 
525         # abuse the SMP flag, and make an minimal installer kernel first
526         # so that the boot floppy always works.....
527         ipcopmake linux         LFS_PASS=ipcop SMP=installer
528         ipcopmake linux         LFS_PASS=ipcop SMP=1
529         ipcopmake 3cp4218       SMP=1
530         ipcopmake amedyn        SMP=1
531         ipcopmake cxacru        SMP=1
532         ipcopmake eagle         SMP=1
533
534         # These are here because they have i386 only binary libraries
535         # included in the package.
536         ipcopmake cnx_pci       SMP=1
537         ipcopmake fcdsl         SMP=1
538         ipcopmake fcdsl2        SMP=1
539         ipcopmake fcdslsl       SMP=1
540         ipcopmake fcdslusb      SMP=1
541         ipcopmake fcdslslusb    SMP=1
542         ipcopmake fcpci SMP=1
543         ipcopmake pulsar        SMP=1
544         ipcopmake unicorn       SMP=1
545   fi
546
547   ipcopmake linux       LFS_PASS=ipcop
548   ipcopmake 3cp4218     
549   ipcopmake amedyn      
550   ipcopmake cxacru      
551   ipcopmake eciadsl     
552   ipcopmake eagle       
553   ipcopmake speedtouch  
554   if [ 'i386' = $MACHINE ]; then 
555         # These are here because they have i386 only binary libraries
556         # included in the package.
557         ipcopmake cnx_pci       
558         ipcopmake fcdsl         
559         ipcopmake fcdsl2        
560         ipcopmake fcdslsl       
561         ipcopmake fcdslusb      
562         ipcopmake fcdslslusb 
563         ipcopmake fcpci 
564         ipcopmake pulsar        
565         ipcopmake unicorn       
566   fi
567
568   ipcopmake pcmcia-cs
569   ipcopmake expat
570   ipcopmake gdbm
571   ipcopmake gmp
572   ipcopmake openssl
573   ipcopmake python
574   ipcopmake libnet
575   ipcopmake libpng
576   ipcopmake gd
577   ipcopmake popt
578   ipcopmake slang
579   ipcopmake newt
580   ipcopmake libcap
581   ipcopmake pciutils
582   ipcopmake pcre
583   ipcopmake apache
584   ipcopmake arping
585   ipcopmake beep
586   ipcopmake bind
587   ipcopmake capi4k-utils
588   ipcopmake cdrtools
589   ipcopmake dnsmasq
590   ipcopmake dosfstools
591   ipcopmake ethtool
592   ipcopmake ez-ipupdate
593   ipcopmake fcron
594   ipcopmake perl-GD
595   ipcopmake gnupg
596   ipcopmake hdparm
597   ipcopmake ibod
598   ipcopmake initscripts
599   ipcopmake iptables
600   ipcopmake ipac-ng
601   ipcopmake ipaddr
602   ipcopmake iproute2
603   ipcopmake iptstate
604   ipcopmake iputils
605   ipcopmake isapnptools
606   ipcopmake isdn4k-utils
607   ipcopmake kudzu
608   ipcopmake logrotate
609   ipcopmake logwatch
610   ipcopmake mingetty
611   ipcopmake misc-progs
612   ipcopmake mtools
613   ipcopmake nano
614   ipcopmake nash
615   ipcopmake nasm
616   ipcopmake URI
617   ipcopmake HTML-Tagset
618   ipcopmake HTML-Parser
619   ipcopmake Compress-Zlib
620   ipcopmake Digest
621   ipcopmake Digest-SHA1
622   ipcopmake Digest-HMAC
623   ipcopmake libwww-perl
624   ipcopmake Net-DNS
625   ipcopmake Net-IPv4Addr
626   ipcopmake Net_SSLeay
627   ipcopmake IO-Stringy
628   ipcopmake Unix-Syslog
629   ipcopmake Mail-Tools
630   ipcopmake MIME-Tools
631   ipcopmake Net-Server
632   ipcopmake Convert-TNEF
633   ipcopmake Convert-UUlib
634   ipcopmake Archive-Tar
635   ipcopmake Archive-Zip
636   ipcopmake GeoIP
637   ipcopmake fwhits
638   ipcopmake noip_updater
639   ipcopmake ntp
640   ipcopmake oinkmaster
641   ipcopmake openssh
642   ipcopmake openswan
643   ipcopmake pptpclient
644   ipcopmake rrdtool
645   ipcopmake setserial
646   ipcopmake setup
647   ipcopmake snort
648   #ipcopmake speedycgi
649   ipcopmake squid
650   ipcopmake squid-graph
651   ipcopmake tcpdump
652   ipcopmake traceroute
653   ipcopmake vlan
654   #ipcopmake wireless
655   ipcopmake libsafe
656   ipcopmake 3c5x9setup
657   echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
658   ipcopmake pakfire
659 ## Zuerst die Libs und dann die Programme. Ordnung muss sein!
660   ipcopmake berkeley
661   ipcopmake BerkeleyDB ## The Perl module
662   ipcopmake libtiff
663   ipcopmake libjpeg
664   ipcopmake libxml2
665   ipcopmake spandsp
666   ipcopmake lzo
667   ipcopmake pkg-config
668   ipcopmake glib
669   ipcopmake xampp
670   ipcopmake pam
671   ipcopmake pammysql
672   ipcopmake saslauthd PASS=1
673   ipcopmake openldap
674   ipcopmake saslauthd PASS=2
675   ipcopmake xinetd
676   ipcopmake ghostscript
677   ipcopmake cups
678 #  ipcopmake lpd ## Im Moment aus, da CUPS vorhanden ist.
679   ipcopmake samba
680   ipcopmake sudo
681   ipcopmake mc
682   ipcopmake pwlib
683   ipcopmake openh323
684   ipcopmake wget
685   ipcopmake bridge-utils
686   echo -ne "`date -u '+%b %e %T'`: Building ### Mailserver ### \n" | tee -a $LOGFILE
687   ipcopmake postfix
688   ipcopmake fetchmail
689   ipcopmake cyrusimap
690   ipcopmake procmail
691   ipcopmake mailx
692   ipcopmake clamav
693   ipcopmake razor
694   ipcopmake spamassassin
695   ipcopmake amavisd
696   echo -ne "`date -u '+%b %e %T'`: Building ### VoIP-Server ### \n" | tee -a $LOGFILE
697   ipcopmake stund
698   ipcopmake asterisk
699   echo -ne "`date -u '+%b %e %T'`: Building ### MP3-Server ### \n" | tee -a $LOGFILE
700   ipcopmake lame
701   ipcopmake gnump3d
702   ipcopmake java
703   ipcopmake openvpn
704   ipcopmake edonkeyclc
705   ipcopmake sane
706   ipcopmake rsync
707   ipcopmake tcpwrapper
708   ipcopmake portmap
709   ipcopmake nmap
710   ipcopmake htop
711   ipcopmake nfs
712   ipcopmake ncftp
713   ipcopmake ethereal
714 #  wget http://www.guzu.net/linux/hddtemp.db && mv hddtemp.db $BASEDIR/build/etc/hddtemp.db
715 #  ipcopmake hddtemp
716 #  ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
717 }
718
719 buildinstaller() {
720   # Run installer scripts one by one
721   LOGFILE="$BASEDIR/log/_build.installer.log"
722   export LOGFILE
723   echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
724   if [ 'i386' = $MACHINE ]; then 
725         ipcopmake syslinux
726         ipcopmake as86
727         ipcopmake mbr
728         ipcopmake uClibc
729   fi
730   installmake busybox
731   installmake sysvinit
732   installmake e2fsprogs
733   installmake misc-progs
734   installmake slang
735   installmake util-linux
736   installmake newt
737   installmake pciutils
738   installmake pcmcia-cs
739   installmake kbd
740   installmake installer
741   installmake scsi.img
742   installmake driver.img
743   installmake initrd
744   installmake boot.img
745 }
746
747 buildpackages() {
748   LOGFILE="$BASEDIR/log/_build.packages.log"
749   export LOGFILE
750   echo "... see detailed log in _build.*.log files" >> $LOGFILE
751   echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
752   # Strip files
753   echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
754   find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
755         ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
756         -ls -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
757   # add -ls before -exec if you want to verify what files are stripped
758
759   find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
760         -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
761   # there add -v to strip to verify
762
763   if [ 'i386' = $MACHINE ]; then
764         # Create fcdsl packages
765         echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
766         cp $LFS/install/images/fcdsl/license.txt $LFS  >> $LOGFILE 2>&1
767         touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
768         cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
769                 lib/modules/$KVER/misc/fcdsl*.o.gz \
770                 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
771                 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
772                 etc/fcdsl/fcdsl*.conf \
773                 etc/drdsl/{drdsl,drdsl.ini} \
774                 license.txt \
775                 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
776         rm -f $LFS/license.txt >> $LOGFILE 2>&1
777         cd $BASEDIR
778   fi
779
780 #  Create update for this version
781 #  echo "`date -u '+%b %e %T'`: Building update $VERSION tgz" | tee -a $LOGFILE
782 #  tar -cz -C $BASEDIR/build --files-from=$BASEDIR/updates/$VERSION/ROOTFILES.$MACHINE-$VERSION -f $BASEDIR/updates/$VERSION/patch.tar.gz --exclude='#*'; 
783 #  chmod 755 $BASEDIR/updates/$VERSION/setup
784 #  tar -cz -C $BASEDIR/updates/$VERSION -f $LFS/install/images/$SNAME-update-$VERSION.$MACHINE.tgz patch.tar.gz setup information
785 #  rm -f $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
786   
787   # Generating list of packages used
788   echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
789   rm -f $BASEDIR/doc/packages-list
790   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
791         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
792                 echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
793         fi
794   done
795   echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
796   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
797         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
798   rm -f $BASEDIR/doc/packages-list
799   # packages-list.txt is ready to be displayed for wiki page
800
801   # Create ISO for CDRom and USB-superfloppy
802   ipcopmake cdrom
803   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
804
805   # Build IPFire packages
806   ipfiredist asterisk
807   ipfiredist cyrusimap
808   ipfiredist fetchmail
809   ipfiredist gnump3d
810   ipfiredist libtiff
811   ipfiredist libxml2
812   ipfiredist mc
813   ipfiredist postfix
814   ipfiredist pwlib
815   ipfiredist sane
816   ipfiredist spandsp
817   ipfiredist sudo
818   ipfiredist xampp
819   ipfiredist xinetd
820   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
821   cp -f $LFS/paks/*.tar.gz $LFS/paks/*.md5 $BASEDIR/packages >> $LOGFILE 2>&1
822
823   # Cleanup
824   stdumount
825   rm -rf $BASEDIR/build/tmp/*
826
827   # Generating total list of files
828   echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
829   rm -f $BASEDIR/log/FILES
830   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
831         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
832                 echo "##" >>$BASEDIR/log/FILES
833                 echo "## `basename $i`" >>$BASEDIR/log/FILES
834                 echo "##" >>$BASEDIR/log/FILES
835                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
836         fi
837   done
838
839   cd $PWD
840
841 }
842
843 # See what we're supposed to do
844 case "$1" in 
845 build)
846         BUILDMACHINE=`uname -m`
847         PACKAGE=`ls -v -r $BASEDIR/cache/$SNAME-1.4.*-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
848         #only restore on a clean disk
849         if [ ! -f log/perl-*-tools ]; then
850                 if [ ! -n "$PACKAGE" ]; then
851                         echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
852                         prepareenv
853                         buildtoolchain
854                 else
855                         PACKAGENAME=${PACKAGE%.tar.gz}
856                         echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
857                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
858                                 tar zxf $PACKAGE
859                                 prepareenv
860                         else
861                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
862                         fi
863                 fi
864         else
865                 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
866                 prepareenv
867         fi
868         buildbase
869         buildipcop
870         buildinstaller
871         buildpackages
872         ;;
873 shell)
874         # enter a shell inside LFS chroot
875         # may be used to changed kernel settings
876         prepareenv
877         entershell
878         ;;
879 changelog)
880         echo -n "Loading new Changelog from SVN: "
881         svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
882         echo "Finished!"
883         ;;
884 check)
885         echo "Checking sources files availability on the web"
886         if [ ! -d $DIR_CHK ]; then
887                 mkdir -p $DIR_CHK
888         fi
889         FINISHED=0
890         cd $BASEDIR/lfs
891         for c in `seq $MAX_RETRIES`; do
892                 if (( FINISHED==1 )); then
893                         break
894                 fi
895                 FINISHED=1
896                 cd $BASEDIR/lfs
897                 for i in *; do
898                         if [ -f "$i" -a "$i" != "Config" ]; then
899                                 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
900                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" check
901                                 if [ $? -ne 0 ]; then
902                                         echo "Check : wget error in lfs/$i"
903                                         FINISHED=0
904                                 fi
905                         fi
906                 done
907         done
908         cd -
909         ;;
910 checkclean)
911         echo "Erasing sources files availability tags"
912         rm -rf $DIR_CHK/*
913         ;;
914 clean)
915         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
916                 $LOSETUP -d $i 2>/dev/null
917         done
918         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
919                 umount $i
920         done
921         stdumount
922         for i in `seq 0 7`; do
923             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
924                 umount /dev/loop${i}     2>/dev/null;
925                 losetup -d /dev/loop${i} 2>/dev/null;
926             fi;
927         done
928         rm -rf $BASEDIR/build
929         rm -rf $BASEDIR/cdrom
930         rm -rf $BASEDIR/packages
931         rm -rf $BASEDIR/log
932         if [ -h /tools ]; then
933                 rm -f /tools
934         fi
935         ;;
936 dist)
937         echo -ne "Updating & building source package from SVN: "
938         svn up > /dev/null
939         svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
940         tar cfz ipfire-source-`date +'%Y-%m-%d'`-r`svn info | grep Revision | cut -c 11-`.tar.gz ipfire-source
941         rm ipfire-source/ -r
942         echo "Finished!"
943         ;;
944 newpak)
945         # create structure for a new package
946         echo -e "Name of the new package: $2"
947         if [ ! -f "lfs/$2" ]; then
948                 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
949                 mkdir -p src/paks/$2
950                 cd src/paks/$2
951                 echo "`date -u '+%b %e %T'`: Creating files"
952                 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
953
954                 touch ROOTFILES
955                 touch CONFFILES
956                 touch {,un}install.sh
957         ## install.sh
958                 echo '#!/bin/bash' > install.sh
959                 echo '#' >> install.sh
960                 echo '#################################################################' >> install.sh
961                 echo '#                                                               #' >> install.sh
962                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
963                 echo '#                                                               #' >> install.sh
964                 echo '#################################################################' >> install.sh
965                 echo '#' >> install.sh
966                 echo '# Extract the files' >> install.sh
967                 echo 'tar xfz files.tgz -C /' >> install.sh
968                 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
969         ## uninstall.sh
970                 echo '#!/bin/bash' > uninstall.sh
971                 echo '#################################################################' >> uninstall.sh
972                 echo '#                                                               #' >> uninstall.sh
973                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
974                 echo '#                                                               #' >> uninstall.sh
975                 echo '#################################################################' >> uninstall.sh
976                 echo '#' >> uninstall.sh
977                 echo '# Delete the files' >> uninstall.sh
978                 echo '## Befehl fehlt noch' >> uninstall.sh
979                 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
980                 echo "`date -u '+%b %e %T'`: Adding files to SVN"
981                 cd - && svn add lfs/$2 && svn add src/paks/$2
982
983                 echo -n "Do you want to remove the folders? [y/n]"
984                 read REM
985                 if  [ "$REM" == "y" ]; then
986                         echo "Removing the folders..."
987                         svn del src/paks/$2 --force
988                 else
989                         echo "Folders are kept."
990                 fi
991         else
992                 echo "$2 already exists"
993         fi
994         exit 0
995         ;;
996 prefetch)
997         if [ ! -d $BASEDIR/cache ]; then
998                 mkdir $BASEDIR/cache
999         fi
1000         mkdir -p $BASEDIR/log
1001         echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1002         FINISHED=0
1003         cd $BASEDIR/lfs
1004         for c in `seq $MAX_RETRIES`; do
1005                 if (( FINISHED==1 )); then 
1006                         break
1007                 fi
1008                 FINISHED=1
1009                 cd $BASEDIR/lfs
1010                 for i in *; do
1011                         if [ -f "$i" -a "$i" != "Config" ]; then
1012                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1013                                 if [ $? -ne 0 ]; then
1014                                         echo "Prefetch : wget error in lfs/$i"
1015                                         FINISHED=0
1016                                 else
1017                                         if [ $c -eq 1 ]; then
1018                                                 echo "Prefetch : lfs/$i files loaded"
1019                                         fi
1020                                 fi
1021                         fi
1022                 done
1023         done
1024         echo "Prefetch : verifying md5sum"
1025         ERROR=0
1026         for i in *; do
1027                 if [ -f "$i" -a "$i" != "Config" ]; then
1028                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1029                         if [ $? -ne 0 ]; then
1030                                 echo "md5 difference in lfs/$i"
1031                                 ERROR=1
1032                         fi
1033                 fi
1034         done
1035         if [ $ERROR -eq 0 ]; then
1036                 echo "Prefetch : all files md5sum match"
1037         fi
1038         cd -
1039         ;;
1040 toolchain)
1041         prepareenv
1042         buildtoolchain
1043         BUILDMACHINE=`uname -m`
1044         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1045         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1046                 build/{bin,etc,usr/bin,usr/local} \
1047                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1048                 log >> $LOGFILE
1049         md5sum cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1050                 > cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1051         stdumount
1052         ;;
1053 gettoolchain)
1054         BUILDMACHINE=`uname -m`
1055         # arbitrary name to be updated in case of new toolchain package upload
1056         PACKAGE=$SNAME-1.4-toolchain-$BUILDMACHINE
1057         URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1058         echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1059         cd $BASEDIR/cache
1060         wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5
1061         if [ $? -ne 0 ]; then
1062                 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1063         else
1064                 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1065                         echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1066                         echo "`date -u '+%b %e %T'`: Uncompressing toolchain" | tee -a $LOGFILE
1067                         cd $BASEDIR && tar xvfz cache/$PACKAGE.tar.gz -C .
1068                         rm -vf $BASEDIR/cache/$PACKAGE.{tar.gz,md5}
1069                 else
1070                         exiterror "$PACKAGE.md5 did not match, check downloaded package"
1071                 fi
1072         fi
1073         ;;
1074 update)
1075         echo "Load the latest source-files:"
1076         svn update
1077         ;;
1078 commit)
1079         echo "Upload the changed files:"
1080         svn commit
1081         svn up > /dev/null
1082         ;;
1083 make)
1084         echo "Do a complete compile:"   
1085         ./make.sh prefetch && ./make.sh build
1086         ;;
1087 diff)
1088         echo -ne "Make a local diff to last SVN revision: "
1089         svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1090         echo "Finished!"
1091         echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1092         ;;
1093 sync)
1094         echo -e "Syncing Cache to FTP:"
1095         echo -ne "Password for mirror.ipfire.org: "; read PASS
1096         rm -f doc/packages-to-remove-from-ftp
1097         ncftpls -u web3 -p $PASS ftp://mirror.ipfire.org/html/source-packages/source/ > ftplist
1098         for i in `ls -w1 cache/`; do
1099                 grep $i ftplist
1100                 if [ "$?" -ne "0" ]; then
1101                         ncftpput -u web3 -p $PASS mirror.ipfire.org /html/source-packages/source cache/$i
1102                         if [ "$?" -eq "0" ]; then
1103                                 echo -e "$i was successfully uploaded to the ftp server."
1104                         else
1105                                 echo -e "There was an error while uploading $i to the ftp server."
1106                         fi
1107                 fi
1108         done
1109         for i in `cat ftplist`; do
1110                 ls -w1 cache/ | grep $i
1111                 if [ "$?" -eq "1" ]; then
1112                         echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1113                 fi
1114         done
1115         rm -f ftplist
1116         ;;
1117 *)
1118         echo "Usage: $0 {build|changelog|check|checkclean|clean|commit|diff|dist|gettoolchain|make|newpak|prefetch|shell|sync|toolchain|update}"
1119         cat doc/make.sh-usage
1120         exit 1
1121         ;;
1122 esac