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