]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - make.sh
Hinzugefuegt:
[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 libogg
737 ipcopmake libvorbis
738 ipcopmake lame
739 ipcopmake sox
740 ipcopmake gnump3d
741 echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE
742 ipcopmake applejuice
743 ipcopmake ocaml
744 ipcopmake mldonkey
745 # ipcopmake edonkeyclc
746 # ipcopmake sane
747 echo -ne "`date -u '+%b %e %T'`: Building ### Net-Tools ### \n" | tee -a $LOGFILE
748 ipcopmake ntop
749 # ipcopmake rsync
750 ipcopmake tcpwrapper
751 ipcopmake portmap
752 ipcopmake nfs
753 ipcopmake nmap
754 ipcopmake mbmon
755 ipcopmake iftop
756 ipcopmake ncftp
757 ipcopmake cftp
758 ipcopmake etherwake
759 ipcopmake ethereal
760 ipcopmake tftp-hpa
761 ipcopmake subversion
762 ipcopmake iptraf
763 # ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
764 }
765
766 buildinstaller() {
767 # Run installer scripts one by one
768 LOGFILE="$BASEDIR/log/_build.installer.log"
769 export LOGFILE
770 echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
771 if [ 'i386' = $MACHINE ]; then
772 ipcopmake syslinux
773 ipcopmake as86
774 ipcopmake mbr
775 ipcopmake uClibc
776 fi
777 installmake busybox
778 installmake sysvinit
779 installmake e2fsprogs
780 installmake misc-progs
781 installmake slang
782 installmake util-linux
783 installmake newt
784 installmake pciutils
785 installmake pcmcia-cs
786 installmake kbd
787 installmake installer
788 installmake scsi.img
789 installmake driver.img
790 installmake initrd
791 installmake boot.img
792 }
793
794 buildpackages() {
795 LOGFILE="$BASEDIR/log/_build.packages.log"
796 export LOGFILE
797 echo "... see detailed log in _build.*.log files" >> $LOGFILE
798 echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
799 # Strip files
800 echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
801 find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
802 ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
803 -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
804 # add -ls before -exec if you want to verify what files are stripped
805
806 find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
807 -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
808 # there add -v to strip to verify
809
810 if [ 'i386' = $MACHINE ]; then
811 # Create fcdsl packages
812 echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
813 cp $LFS/install/images/fcdsl/license.txt $LFS >> $LOGFILE 2>&1
814 touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
815 cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
816 lib/modules/$KVER/misc/fcdsl*.o.gz \
817 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
818 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
819 etc/fcdsl/fcdsl*.conf \
820 etc/drdsl/{drdsl,drdsl.ini} \
821 license.txt \
822 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
823 rm -f $LFS/license.txt >> $LOGFILE 2>&1
824 cd $BASEDIR
825 fi
826
827 # Generating list of packages used
828 echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
829 rm -f $BASEDIR/doc/packages-list
830 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
831 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
832 echo " * `basename $i`" >>$BASEDIR/doc/packages-list
833 fi
834 done
835 echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
836 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipfire$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|^ipfire-logs' \
837 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
838 rm -f $BASEDIR/doc/packages-list
839 # packages-list.txt is ready to be displayed for wiki page
840
841 # Create ISO for CDRom and USB-superfloppy
842 ipcopmake cdrom
843 rm -f $LFS/install/images/*usb*
844 cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
845
846 ipfirepackages
847
848 # Cleanup
849 stdumount
850 rm -rf $BASEDIR/build/tmp/*
851
852 # Generating total list of files
853 echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
854 rm -f $BASEDIR/log/FILES
855 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
856 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
857 echo "##" >>$BASEDIR/log/FILES
858 echo "## `basename $i`" >>$BASEDIR/log/FILES
859 echo "##" >>$BASEDIR/log/FILES
860 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
861 fi
862 done
863 cd $BASEDIR/packages; ls -w1 *.tar.gz | awk -F ".tar.gz" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
864 echo "###EOF###" >> $BASEDIR/packages/packages_list.txt
865
866 cd $PWD
867
868 }
869
870 ipfirepackages() {
871 if [ -d "$BASEDIR/packages" ]; then
872 for i in `ls $BASEDIR/packages`; do
873 touch $BASEDIR/build/install/packages/$i.empty
874 done
875 fi
876 ipfiredist amavisd
877 ipfiredist applejuice
878 ipfiredist asterisk
879 ipfiredist clamav
880 ipfiredist cups
881 ipfiredist cyrusimap
882 ipfiredist fetchmail
883 ipfiredist gnump3d
884 ipfiredist iptraf
885 ipfiredist java
886 ipfiredist lame
887 ipfiredist libogg
888 ipfiredist libtiff
889 ipfiredist libvorbis
890 ipfiredist libxml2
891 ipfiredist mailx
892 ipfiredist mldonkey
893 ipfiredist nfs
894 ipfiredist nmap
895 ipfiredist ntop
896 ipfiredist portmap
897 ipfiredist postfix
898 ipfiredist procmail
899 ipfiredist samba
900 ipfiredist sox
901 ipfiredist spamassassin
902 ipfiredist subversion
903 ipfiredist web-cyradm
904 ipfiredist xampp
905 # ipfiredist xinetd
906 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
907 mv -f $LFS/install/packages/*.{tar.gz,md5} $BASEDIR/packages >> $LOGFILE 2>&1
908 rm -rf $BASEDIR/build/install/packages/*
909 }
910
911 update_logs() {
912 tar cfz log/ipfire-logs-`date +'%Y-%m-%d-%H:%M'`.tgz log/_build.*
913 rm -f log/_build.*
914 }
915
916 # See what we're supposed to do
917 case "$1" in
918 build)
919 BUILDMACHINE=`uname -m`
920 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
921 #only restore on a clean disk
922 if [ ! -f log/perl-*-tools ]; then
923 if [ ! -n "$PACKAGE" ]; then
924 echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
925 prepareenv
926 buildtoolchain
927 else
928 PACKAGENAME=${PACKAGE%.tar.gz}
929 echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
930 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
931 tar zxf $PACKAGE
932 prepareenv
933 else
934 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
935 fi
936 fi
937 else
938 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
939 prepareenv
940 fi
941
942 buildbase
943 buildipcop
944
945 # Setzen des IPFire Builds
946 if [ "$FIREBUILD" ]; then
947 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
948 else
949 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
950 fi
951
952 buildinstaller
953 buildpackages
954 ;;
955 shell)
956 # enter a shell inside LFS chroot
957 # may be used to changed kernel settings
958 prepareenv
959 entershell
960 ;;
961 changelog)
962 echo -n "Loading new Changelog from SVN: "
963 svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
964 echo "Finished!"
965 ;;
966 check)
967 echo "Checking sources files availability on the web"
968 if [ ! -d $DIR_CHK ]; then
969 mkdir -p $DIR_CHK
970 fi
971 FINISHED=0
972 cd $BASEDIR/lfs
973 for c in `seq $MAX_RETRIES`; do
974 if (( FINISHED==1 )); then
975 break
976 fi
977 FINISHED=1
978 cd $BASEDIR/lfs
979 for i in *; do
980 if [ -f "$i" -a "$i" != "Config" ]; then
981 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
982 MESSAGE="$i\t ($c/$MAX_RETRIES)" check
983 if [ $? -ne 0 ]; then
984 echo "Check : wget error in lfs/$i"
985 FINISHED=0
986 fi
987 fi
988 done
989 done
990 cd -
991 ;;
992 checkclean)
993 echo "Erasing sources files availability tags"
994 rm -rf $DIR_CHK/*
995 ;;
996 clean)
997 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
998 $LOSETUP -d $i 2>/dev/null
999 done
1000 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1001 umount $i
1002 done
1003 stdumount
1004 for i in `seq 0 7`; do
1005 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1006 umount /dev/loop${i} 2>/dev/null;
1007 losetup -d /dev/loop${i} 2>/dev/null;
1008 fi;
1009 done
1010 rm -rf $BASEDIR/build
1011 rm -rf $BASEDIR/cdrom
1012 rm -rf $BASEDIR/packages
1013 rm -rf $BASEDIR/log
1014 if [ -h /tools ]; then
1015 rm -f /tools
1016 fi
1017 ;;
1018 newpak)
1019 # create structure for a new package
1020 echo -e "Name of the new package: $2"
1021 if [ ! -f "lfs/$2" ]; then
1022 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
1023 mkdir -p src/paks/$2
1024 cd src/paks/$2
1025 echo "`date -u '+%b %e %T'`: Creating files"
1026 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
1027
1028 touch ROOTFILES
1029 touch {,un}install.sh
1030 ## install.sh
1031 echo '#!/bin/bash' > install.sh
1032 echo '#' >> install.sh
1033 echo '#################################################################' >> install.sh
1034 echo '# #' >> install.sh
1035 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
1036 echo '# #' >> install.sh
1037 echo '#################################################################' >> install.sh
1038 echo '#' >> install.sh
1039 echo '# Extract the files' >> install.sh
1040 echo 'tar xfz files.tgz -C /' >> install.sh
1041 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
1042 ## uninstall.sh
1043 echo '#!/bin/bash' > uninstall.sh
1044 echo '#################################################################' >> uninstall.sh
1045 echo '# #' >> uninstall.sh
1046 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
1047 echo '# #' >> uninstall.sh
1048 echo '#################################################################' >> uninstall.sh
1049 echo '#' >> uninstall.sh
1050 echo '# Delete the files' >> uninstall.sh
1051 echo '## Befehl fehlt noch' >> uninstall.sh
1052 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
1053 echo "`date -u '+%b %e %T'`: Adding files to SVN"
1054 cd - && svn add lfs/$2 && svn add src/paks/$2
1055
1056 echo -n "Do you want to remove the folders? [y/n]"
1057 read REM
1058 if [ "$REM" == "y" ]; then
1059 echo "Removing the folders..."
1060 svn del src/paks/$2 --force
1061 else
1062 echo "Folders are kept."
1063 fi
1064 else
1065 echo "$2 already exists"
1066 fi
1067 exit 0
1068 ;;
1069 prefetch)
1070 if [ ! -d $BASEDIR/cache ]; then
1071 mkdir $BASEDIR/cache
1072 fi
1073 mkdir -p $BASEDIR/log
1074 echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1075 FINISHED=0
1076 cd $BASEDIR/lfs
1077 for c in `seq $MAX_RETRIES`; do
1078 if (( FINISHED==1 )); then
1079 break
1080 fi
1081 FINISHED=1
1082 cd $BASEDIR/lfs
1083 for i in *; do
1084 if [ -f "$i" -a "$i" != "Config" ]; then
1085 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1086 if [ $? -ne 0 ]; then
1087 echo "Prefetch : wget error in lfs/$i"
1088 FINISHED=0
1089 else
1090 if [ $c -eq 1 ]; then
1091 echo "Prefetch : lfs/$i files loaded"
1092 fi
1093 fi
1094 fi
1095 done
1096 done
1097 echo "Prefetch : verifying md5sum"
1098 ERROR=0
1099 for i in *; do
1100 if [ -f "$i" -a "$i" != "Config" ]; then
1101 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1102 if [ $? -ne 0 ]; then
1103 echo "md5 difference in lfs/$i"
1104 ERROR=1
1105 fi
1106 fi
1107 done
1108 if [ $ERROR -eq 0 ]; then
1109 echo "Prefetch : all files md5sum match"
1110 fi
1111 cd -
1112 ;;
1113 toolchain)
1114 prepareenv
1115 buildtoolchain
1116 BUILDMACHINE=`uname -m`
1117 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1118 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1119 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1120 build/{bin,etc,usr/bin,usr/local} \
1121 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1122 log >> $LOGFILE
1123 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1124 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1125 stdumount
1126 ;;
1127 gettoolchain)
1128 BUILDMACHINE=`uname -m`
1129 # arbitrary name to be updated in case of new toolchain package upload
1130 PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
1131 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1132 URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1133 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1134 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1135 cd $BASEDIR/cache/toolchains
1136 wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
1137 if [ $? -ne 0 ]; then
1138 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1139 else
1140 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1141 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1142 else
1143 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1144 fi
1145 fi
1146 else
1147 echo "Toolchain is already downloaded. Exiting..."
1148 fi
1149 ;;
1150 sources-iso)
1151 prepareenv
1152 echo "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1153 chroot $LFS /tools/bin/env -i HOME=/root \
1154 TERM=$TERM PS1='\u:\w\$ ' \
1155 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1156 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1157 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1158 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1159 stdumount
1160 ;;
1161 svn)
1162 case "$2" in
1163 update|up)
1164 # clear
1165 echo -n "Load the latest source files..."
1166 svn update >> $PWD/log/_build.svn.update.log
1167 if [ $? -eq 0 ]; then
1168 echo ".Done!"
1169 else
1170 echo ".Fail!"
1171 exit 1
1172 fi
1173 echo -n "Write the svn info to a file..."
1174 svn info > $PWD/svn_status
1175 if [ "$?" -eq "0" ]; then
1176 echo ".Done!"
1177 else
1178 echo ".Fail!"
1179 exit 1
1180 fi
1181 chmod 755 $0
1182 exit 0
1183 ;;
1184 commit|ci)
1185 clear
1186 if [ -e /sbin/yast ]; then
1187 $0 changelog
1188 fi
1189 echo "Upload the changed files..."
1190 sleep 1
1191 IPFIRE_SVN_MESSAGE=/tmp/ipfire-svn-co-message.txt
1192 rm -f $IPFIRE_SVN_MESSAGE
1193 mcedit $IPFIRE_SVN_MESSAGE
1194 svn commit -F $IPFIRE_SVN_MESSAGE
1195 rm -f $IPFIRE_SVN_MESSAGE
1196 $0 svn up
1197 ;;
1198 dist)
1199 #$0 svn up
1200 echo -ne "Download source package from svn..."
1201 svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
1202 if [ "$?" -eq "0" ]; then
1203 echo ".Done!"
1204 else
1205 echo ".Fail!"
1206 exit 1
1207 fi
1208 echo -n "Compress files..."
1209 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
1210 if [ "$?" -eq "0" ]; then
1211 echo ".Done!"
1212 else
1213 echo ".Fail!"
1214 exit 1
1215 fi
1216 echo -n "Cleanup..."
1217 rm ipfire-source/ -r
1218 if [ "$?" -eq "0" ]; then
1219 echo ".Done!"
1220 else
1221 echo ".Fail!"
1222 exit 1
1223 fi
1224 ;;
1225 diff)
1226 echo -ne "Make a local diff to last svn revision..."
1227 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1228 if [ "$?" -eq "0" ]; then
1229 echo ".Done!"
1230 else
1231 echo ".Fail!"
1232 exit 1
1233 fi
1234 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1235 ;;
1236 esac
1237 ;;
1238 make-config)
1239 echo -e "This is for creating your configuration..."
1240 echo -e "We will need some input:"
1241 echo -e ""
1242 echo -n "FTP-DOMAIN FOR THE ISO: "
1243 read IPFIRE_FTP_URL_EXT
1244 echo -n "PATH FOR $IPFIRE_FTP_URL_EXT: "
1245 read IPFIRE_FTP_PATH_EXT
1246 echo -n "USERNAME FOR $IPFIRE_FTP_URL_EXT: "
1247 read IPFIRE_FTP_USER_EXT
1248 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_EXT: "
1249 read -s IPFIRE_FTP_PASS_EXT
1250 echo ""
1251 echo "(You can leave this empty if the cache-server is the same as your iso-server.)"
1252 echo -n "FTP-DOMAIN FOR THE CACHE: "
1253 read IPFIRE_FTP_URL_INT
1254 echo -n "PATH FOR $IPFIRE_FTP_URL_INT: "
1255 read IPFIRE_FTP_PATH_INT
1256 if [ $IPFIRE_FTP_URL_INT ]; then
1257 echo -n "USERNAME FOR $IPFIRE_FTP_URL_INT: "
1258 read IPFIRE_FTP_USER_INT
1259 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_INT: "
1260 read -s IPFIRE_FTP_PASS_INT
1261 else
1262 IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_EXT
1263 IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_EXT
1264 IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_EXT
1265 echo "USERNAME FOR $IPFIRE_FTP_URL_INT: $IPFIRE_FTP_USER_INT"
1266 echo "PASSWORD FOR $IPFIRE_FTP_URL_INT: !HIDDEN!"
1267 fi
1268 echo ""
1269 echo "(You can leave this empty if the pak-server is the same as your iso-server.)"
1270 echo -n "FTP-DOMAIN FOR THE PAKS: "
1271 read IPFIRE_FTP_URL_PAK
1272 echo -n "PATH FOR $IPFIRE_FTP_URL_PAK: "
1273 read IPFIRE_FTP_PATH_PAK
1274 if [ $IPFIRE_FTP_URL_PAK ]; then
1275 echo -n "USERNAME FOR $IPFIRE_FTP_URL_PAK: "
1276 read IPFIRE_FTP_USER_PAK
1277 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_PAK: "
1278 read -s IPFIRE_FTP_PASS_PAK
1279 else
1280 IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_EXT
1281 IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_EXT
1282 IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_EXT
1283 echo "USERNAME FOR $IPFIRE_FTP_URL_PAK: $IPFIRE_FTP_USER_PAK"
1284 echo "PASSWORD FOR $IPFIRE_FTP_URL_PAK: !HIDDEN!"
1285 fi
1286 echo ""
1287 echo -e "ONE OR MORE EMAIL ADDRESS(ES) TO WHICH THE REPORTS WILL BE SENT"
1288 echo -e "(seperated by comma)"
1289 read IPFIRE_MAIL_REPORT
1290 echo -n "EMAIL FROM: "
1291 read IPFIRE_MAIL_FROM
1292 echo -n "EMAIL SERVER: "
1293 read IPFIRE_MAIL_SERVER
1294 echo -n "LOGIN TO MAIL SERVER: "
1295 read IPFIRE_MAIL_USER
1296 echo -n "MAIL PASSWORD: "
1297 read -s IPFIRE_MAIL_PASS
1298 echo -n "Saving..."
1299 for i in `seq 20`; do
1300 sleep 0.1; echo -n "."
1301 done
1302 echo ".Finished!"
1303 cat <<END > .config
1304 ### ISO server
1305 IPFIRE_FTP_URL_EXT=$IPFIRE_FTP_URL_EXT
1306 IPFIRE_FTP_PATH_EXT=$IPFIRE_FTP_PATH_EXT
1307 IPFIRE_FTP_USER_EXT=$IPFIRE_FTP_USER_EXT
1308 IPFIRE_FTP_PASS_EXT=$IPFIRE_FTP_PASS_EXT
1309 ### cache server
1310 IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_INT
1311 IPFIRE_FTP_PATH_INT=$IPFIRE_FTP_PATH_INT
1312 IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_INT
1313 IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_INT
1314 ### paks server
1315 IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_PAK
1316 IPFIRE_FTP_PATH_PAK=$IPFIRE_FTP_PATH_PAK
1317 IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_PAK
1318 IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_PAK
1319 ### mail reports
1320 IPFIRE_MAIL_REPORT=$IPFIRE_MAIL_REPORT
1321 IPFIRE_MAIL_FROM=$IPFIRE_MAIL_FROM
1322 IPFIRE_MAIL_SERVER=$IPFIRE_MAIL_SERVER
1323 IPFIRE_MAIL_USER=$IPFIRE_MAIL_USER
1324 IPFIRE_MAIL_PASS=$IPFIRE_MAIL_PASS
1325 END
1326 ;;
1327 sync)
1328 echo -e "Syncing cache to ftp:"
1329 # rm -f doc/packages-to-remove-from-ftp
1330 ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > ftplist
1331 for i in `ls -w1 cache/`; do
1332 grep $i ftplist
1333 if [ "$?" -ne "0" ]; then
1334 ncftpput -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ cache/$i
1335 if [ "$?" -eq "0" ]; then
1336 echo -e "$i was successfully uploaded to the ftp server."
1337 else
1338 echo -e "There was an error while uploading $i to the ftp server."
1339 fi
1340 fi
1341 done
1342 # for i in `cat ftplist`; do
1343 # ls -w1 cache/ | grep $i
1344 # if [ "$?" -eq "1" ]; then
1345 # echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1346 # fi
1347 # done
1348 rm -f ftplist
1349 ;;
1350 upload)
1351 case "$2" in
1352 iso)
1353 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
1354 cat <<EOF > .ftp-commands
1355 mkdir $IPFIRE_FTP_PATH_EXT
1356 ls -lah
1357 quit
1358 EOF
1359 ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
1360 rm -f .ftp-commands
1361 md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
1362 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso
1363 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso.md5
1364 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-source-r$SVN_REVISION.tar.gz
1365 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ svn_status
1366 if [ "$?" -eq "0" ]; then
1367 echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
1368 else
1369 echo -e "There was an error while uploading the iso to the ftp server."
1370 exit 1
1371 fi
1372 if [ "$3" = "--with-sources-cd" ]; then
1373 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-sources-cd-$VERSION.$MACHINE.iso
1374 fi
1375 ;;
1376 paks)
1377 cat <<EOF > .ftp-commands
1378 mkdir $IPFIRE_FTP_PATH_PAK
1379 ls -lah
1380 quit
1381 EOF
1382 ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
1383 rm -f .ftp-commands
1384 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
1385 if [ "$?" -eq "0" ]; then
1386 echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
1387 else
1388 echo -e "There was an error while uploading the packages to the ftp server."
1389 exit 1
1390 fi
1391 ;;
1392 esac
1393 ;;
1394 build-only)
1395 rm -f $BASEDIR/log/$2*
1396 BUILDMACHINE=`uname -m`
1397 prepareenv
1398 ipcopmake $2
1399 ;;
1400 build-silent)
1401 screen -dmS ipfire $0 build
1402 echo "Build started... This will take a while!"
1403 echo "You can see the status with 'screen -x ipfire'."
1404 ;;
1405 mail)
1406 chmod 755 tools/sendEmail
1407 ATTACHMENT=/tmp/ipfire-build-logs-R$SVN_REVISION.tar.gz
1408 if [ "$2" = "ERROR" ]; then
1409 SUBJECT="ERROR: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1410 echo "ERROR: $0 build!"
1411 cat <<END > /tmp/ipfire_mail_body
1412 When I was building IPFire on `hostname`, 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 if [ "$2" = "SUCCESS" ]; then
1420 SUBJECT="SUCCESS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1421 cat <<END > /tmp/ipfire_mail_body
1422 Building IPFire on `hostname` in Revision $SVN_REVISION was successfull!
1423 You can find the ISO on your ftp server.
1424
1425 Statistics:
1426 -----------
1427 Started: $IPFIRE_START_TIME
1428 Finished: `date`
1429
1430 Best Regards
1431 Your IPFire-Build-Script
1432 END
1433 fi
1434 if [ "$2" = "SVNUPDATE" ]; then
1435 SUBJECT="SVNUPDATE: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1436 echo "ERROR: $0 svn up!"
1437 cat <<END > /tmp/ipfire_mail_body
1438 When I was downloading the latest svn source,
1439 I have found an ERROR!
1440 Here you can see the logs and detect the reason for this error.
1441
1442 Best Regards
1443 Your IPFire-Build-Script
1444 END
1445 fi
1446
1447 if [ "$2" = "SVNDIST" ]; then
1448 SUBJECT="SVNDIST: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1449 echo "ERROR: $0 svn dist!"
1450 cat <<END > /tmp/ipfire_mail_body
1451 When I was exporting the latest svn source,
1452 I have found an ERROR!
1453 Here you can see the logs and detect the reason for this error.
1454
1455 Best Regards
1456 Your IPFire-Build-Script
1457 END
1458 fi
1459
1460 if [ "$2" = "PREFETCH" ]; then
1461 SUBJECT="PREFETCH: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1462 echo "ERROR: $0 prefetch!"
1463 cat <<END > /tmp/ipfire_mail_body
1464 When I was downloading the source packages,
1465 I have found an ERROR!
1466 Here you can see the logs and detect the reason for this error.
1467
1468 Best Regards
1469 Your IPFire-Build-Script
1470 END
1471 fi
1472
1473 if [ "$2" = "ISO" ]; then
1474 SUBJECT="ISO: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1475 echo "ERROR: $0 upload iso!"
1476 cat <<END > /tmp/ipfire_mail_body
1477 When I was uploading the iso image,
1478 I have found an ERROR!
1479 Here you can see the logs and detect the reason for this error.
1480
1481 Best Regards
1482 Your IPFire-Build-Script
1483 END
1484 fi
1485
1486 if [ "$2" = "PAKS" ]; then
1487 SUBJECT="PAKS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1488 echo "ERROR: $0 upload paks!"
1489 cat <<END > /tmp/ipfire_mail_body
1490 When I was uploading the packages,
1491 I have found an ERROR!
1492 Here you can see the logs and detect the reason for this error.
1493
1494 Best Regards
1495 Your IPFire-Build-Script
1496 END
1497 fi
1498
1499 tar cfz $ATTACHMENT log/_build*
1500 cat <<END >> /tmp/ipfire_mail_body
1501
1502 Here is a summary... The full logs are in the attachment.
1503 ---------------------------------------------------------
1504
1505 `tail log/_*`
1506 END
1507 cat /tmp/ipfire_mail_body | tools/sendEmail -q \
1508 -f $IPFIRE_MAIL_FROM \
1509 -t $IPFIRE_MAIL_REPORT \
1510 -u $SUBJECT \
1511 -s $IPFIRE_MAIL_SERVER:25 \
1512 -xu $IPFIRE_MAIL_USER \
1513 -xp $IPFIRE_MAIL_PASS \
1514 -l log/_build.mail.log \
1515 -a $ATTACHMENT # -v
1516 rm -f /tmp/ipfire_mail_body $ATTACHMENT
1517 ;;
1518 unattended)
1519 if [ ! -f .config ]; then
1520 echo "No configuration found. Try ./make.sh make-config."
1521 fi
1522 ### This is our procedure that will compile the IPFire by herself...
1523 echo "### UPDATE LOGS"
1524 update_logs
1525
1526 if [ "$IPFIRE_REBUILD" -eq "0" ]; then
1527 echo "### SAVING TIME"
1528 export IPFIRE_START_TIME=`date`
1529
1530 echo "### GETTING TOOLCHAIN"
1531 $0 gettoolchain
1532
1533 echo "### RUNNING SVN-UPDATE"
1534 $0 svn update
1535 if [ $? -ne 0 ]; then
1536 $0 mail SVNUPDATE
1537 exit 1
1538 fi
1539
1540 echo "### EXPORT SOURCES"
1541 $0 svn dist
1542 if [ $? -ne 0 ]; then
1543 $0 mail SVNDIST
1544 exit 1
1545 fi
1546
1547 echo "### RUNNING PREFETCH"
1548 $0 prefetch | grep -q "md5 difference"
1549 if [ $? -eq 0 ]; then
1550 $0 mail PREFETCH
1551 exit 1
1552 fi
1553 fi
1554
1555 echo "### RUNNING BUILD"
1556 $0 build
1557 if [ $? -ne 0 ]; then
1558 $0 mail ERROR
1559 exit 1
1560 fi
1561
1562 echo "### MAKING SOURCES-ISO"
1563 echo "DISABLED by Delaco!"
1564 #$0 sources-iso
1565
1566 echo "### UPLOADING ISO"
1567 $0 upload iso
1568 if [ $? -ne 0 ]; then
1569 $0 mail ISO
1570 exit 1
1571 fi
1572
1573 echo "### UPLOADING PAKS"
1574 $0 upload paks
1575 if [ $? -ne 0 ]; then
1576 $0 mail PAKS
1577 exit 1
1578 fi
1579
1580 echo "### SUCCESS!"
1581 $0 mail SUCCESS
1582 exit 0
1583 ;;
1584 batch)
1585 if [ `screen -ls | grep -q ipfire` ]; then
1586 echo "Build is already running, sorry!"
1587 exit 1
1588 else
1589 if [ "$2" = "--rebuild" ]; then
1590 export IPFIRE_REBUILD=1
1591 echo "REBUILD!"
1592 else
1593 export IPFIRE_REBUILD=0
1594 fi
1595 echo -n "IPFire-Batch-Build is starting..."
1596 screen -dmS ipfire $0 unattended
1597 if [ "$?" -eq "0" ]; then
1598 echo ".Done!"
1599 else
1600 echo ".ERROR!"
1601 exit 1
1602 fi
1603 exit 0
1604 fi
1605 ;;
1606 *)
1607 clear
1608 svn info
1609 select name in "Exit" "IPFIRE: Prefetch" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "SVN: Commit" "SVN: Update" "SVN: Status" "SVN: Diff" "LOG: Tail" "Help"
1610 do
1611 case $name in
1612 "IPFIRE: Prefetch")
1613 $0 prefetch
1614 ;;
1615 "IPFIRE: Build (silent)")
1616 $0 build-silent
1617 ;;
1618 "IPFIRE: Watch Build")
1619 echo "Exit with Ctrl+A, Ctrl+D."
1620 echo -n "Preparing..."
1621 for i in `seq 10`; do
1622 sleep 0.1; echo -n "."
1623 done
1624 echo ".Ready!"
1625 sleep 0.3
1626 screen -x ipfire
1627 ;;
1628 "IPFIRE: Batch")
1629 $0 batch
1630 ;;
1631 "IPFIRE: Clean")
1632 $0 clean
1633 ;;
1634 "SVN: Commit")
1635 echo "Are your sure to Update all Files to the Server (write: yes)?"; read input
1636 if [ "$input" == "yes" ]; then
1637 $0 svn commit
1638 fi
1639 ;;
1640 "SVN: Update")
1641 $0 svn update
1642 ;;
1643 "SVN: Status")
1644 svn status # | grep -v ^?
1645 ;;
1646 "SVN: Diff")
1647 $0 svn diff
1648 ;;
1649 "Help")
1650 echo "Usage: $0 {build|changelog|check|checkclean|clean|gettoolchain|newpak|prefetch|shell|sync|toolchain}"
1651 cat doc/make.sh-usage
1652 ;;
1653 "LOG: Tail")
1654 tail -f log/_*
1655 ;;
1656 "Exit")
1657 break
1658 ;;
1659 esac
1660 done
1661 ;;
1662 esac