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