HDDTemp nun fuer jede Platte und nicht nur die erste :D
[people/pmueller/ipfire-2.x.git] / make.sh
1 #!/bin/bash
2 ############################################################################
3 # #
4 # This file is part of the IPFire Firewall. #
5 # #
6 # IPFire is free software; you can redistribute it and/or modify #
7 # it under the terms of the GNU General Public License as published by #
8 # the Free Software Foundation; either version 2 of the License, or #
9 # (at your option) any later version. #
10 # #
11 # IPFire is distributed in the hope that it will be useful, #
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14 # GNU General Public License for more details. #
15 # #
16 # You should have received a copy of the GNU General Public License #
17 # along with IPFire; if not, write to the Free Software #
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
19 # #
20 # Copyright (C) 2006 IPFire-Team <info@ipfire.eu>. #
21 # #
22 ############################################################################
23 #
24
25 NAME="IPFire" # Software name
26 SNAME="ipfire" # Short name
27 VERSION="2.0b" # Version number
28 SLOGAN="www.ipfire.org" # Software slogan
29 CONFIG_ROOT=/var/ipfire # Configuration rootdir
30 NICE=10 # Nice level
31 MAX_RETRIES=1 # prefetch/check loop
32 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
33 MACHINE=`uname -m`
34 SVN_REVISION=`svn info | grep Revision | cut -c 11-`
35
36 IPFVER="full" # Which version should be compiled? (full|light|voice)
37
38 # Set an information about the build number
39 if [ -e ./.svn ]; then
40 FIREBUILD=`cat .svn/entries |sed -n 's/^[ \t]*revision=\"// p' | sed -n 's/\".*$// p'`
41 fi
42
43 # Debian specific settings
44 if [ ! -e /etc/debian_version ]; then
45 FULLPATH=`which $0`
46 else
47 if [ -x /usr/bin/realpath ]; then
48 FULLPATH=`/usr/bin/realpath $0`
49 else
50 echo "ERROR: Need to do apt-get install realpath"
51 exit 1
52 fi
53 fi
54
55 PWD=`pwd`
56 BASENAME=`basename $0`
57 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
58 LOGFILE=$BASEDIR/log/_build.preparation.log
59 export BASEDIR LOGFILE
60 DIR_CHK=$BASEDIR/cache/check
61 mkdir $BASEDIR/log/ 2>/dev/null
62
63 # Include funtions
64 . tools/make-functions
65
66 if [ -f .config ]; then
67 . .config
68 else
69 echo -e "${BOLD}No configuration found!${NORMAL}"
70 echo -ne "Do you want to create one (y/N)?"
71 read CREATE_CONFIG
72 echo ""
73 if [ "$CREATE_CONFIG" == "y" ]; then
74 make_config
75 fi
76 fi
77
78 prepareenv() {
79 ############################################################################
80 # #
81 # Are we running the right shell? #
82 # #
83 ############################################################################
84 if [ ! "$BASH" ]; then
85 exiterror "BASH environment variable is not set. You're probably running the wrong shell."
86 fi
87
88 if [ -z "${BASH_VERSION}" ]; then
89 exiterror "Not running BASH shell."
90 fi
91
92
93 ############################################################################
94 # #
95 # Trap on emergency exit #
96 # #
97 ############################################################################
98 trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
99
100
101 ############################################################################
102 # #
103 # Resetting our nice level #
104 # #
105 ############################################################################
106 echo -ne "Resetting our nice level to $NICE" | tee -a $LOGFILE
107 renice $NICE $$ > /dev/null
108 if [ `nice` != "$NICE" ]; then
109 beautify message FAIL
110 exiterror "Failed to set correct nice level"
111 else
112 beautify message DONE
113 fi
114
115
116 ############################################################################
117 # #
118 # Checking if running as root user #
119 # #
120 ############################################################################
121 echo -ne "Checking if we're running as root user" | tee -a $LOGFILE
122 if [ `id -u` != 0 ]; then
123 beautify message FAIL
124 exiterror "Not building as root"
125 else
126 beautify message DONE
127 fi
128
129
130 ############################################################################
131 # #
132 # Checking for necessary temporary space #
133 # #
134 ############################################################################
135 echo -ne "Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
136 BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
137 BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
138 if (( 2048000 > $BASE_ASPACE )); then
139 BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
140 if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
141 beautify message FAIL
142 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
143 fi
144 else
145 beautify message DONE
146 fi
147
148 ############################################################################
149 # #
150 # Building Linux From Scratch system #
151 # #
152 ############################################################################
153 # Set umask
154 umask 022
155
156 # Set LFS Directory
157 LFS=$BASEDIR/build
158
159 # Check /tools symlink
160 if [ -h /tools ]; then
161 rm -f /tools
162 fi
163 if [ ! -a /tools ]; then
164 ln -s $BASEDIR/build/tools /
165 fi
166 if [ ! -h /tools ]; then
167 exiterror "Could not create /tools symbolic link."
168 fi
169
170 # Setup environment
171 set +h
172 LC_ALL=POSIX
173 MAKETUNING="-j12"
174 export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
175 unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
176
177 # Make some extra directories
178 mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
179 mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
180 mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
181 mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
182
183 mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
184 mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
185
186 # Make all sources and proc available under lfs build
187 mount --bind /dev $BASEDIR/build/dev
188 mount --bind /dev/pts $BASEDIR/build/dev/pts
189 mount --bind /dev/shm $BASEDIR/build/dev/shm
190 mount --bind /proc $BASEDIR/build/proc
191 mount --bind /sys $BASEDIR/build/sys
192 mount --bind $BASEDIR/cache $BASEDIR/build/usr/src/cache
193 mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
194 mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
195 mount --bind $BASEDIR/doc $BASEDIR/build/usr/src/doc
196 mount --bind $BASEDIR/html $BASEDIR/build/usr/src/html
197 mount --bind $BASEDIR/langs $BASEDIR/build/usr/src/langs
198 mount --bind $BASEDIR/lfs $BASEDIR/build/usr/src/lfs
199 mount --bind $BASEDIR/log $BASEDIR/build/usr/src/log
200 mount --bind $BASEDIR/src $BASEDIR/build/usr/src/src
201
202 # This is a temporary hack!!!
203 if [ ! -f /tools/bin/hostname ]; then
204 cp -f /bin/hostname /tools/bin/hostname 2>/dev/null
205 fi
206
207 # Run LFS static binary creation scripts one by one
208 export CCACHE_DIR=$BASEDIR/ccache
209 export CCACHE_HASHDIR=1
210
211 # Remove pre-install list of installed files in case user erase some files before rebuild
212 rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
213 }
214
215 buildtoolchain() {
216 LOGFILE="$BASEDIR/log/_build.toolchain.log"
217 export LOGFILE
218 ORG_PATH=$PATH
219 NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
220 export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
221 lfsmake1 ccache
222 lfsmake1 binutils PASS=1
223 lfsmake1 gcc PASS=1
224 export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
225 lfsmake1 linux-libc-header
226 lfsmake1 glibc
227 lfsmake1 cleanup-toolchain PASS=1
228 lfsmake1 tcl
229 lfsmake1 expect
230 lfsmake1 dejagnu
231 lfsmake1 gcc PASS=2
232 lfsmake1 binutils PASS=2
233 lfsmake1 ncurses
234 lfsmake1 bash
235 lfsmake1 bzip2
236 lfsmake1 coreutils
237 lfsmake1 diffutils
238 lfsmake1 findutils
239 lfsmake1 gawk
240 lfsmake1 gettext
241 lfsmake1 grep
242 lfsmake1 gzip
243 lfsmake1 m4
244 lfsmake1 make
245 lfsmake1 patch
246 lfsmake1 perl
247 lfsmake1 sed
248 lfsmake1 tar
249 lfsmake1 texinfo
250 lfsmake1 util-linux
251 lfsmake1 cleanup-toolchain PASS=2
252 export PATH=$ORG_PATH
253 }
254
255 buildbase() {
256 LOGFILE="$BASEDIR/log/_build.base.log"
257 export LOGFILE
258 lfsmake2 stage2
259 lfsmake2 linux-libc-header
260 lfsmake2 man-pages
261 lfsmake2 glibc
262 lfsmake2 cleanup-toolchain PASS=3
263 lfsmake2 binutils
264 lfsmake2 gcc
265 lfsmake2 berkeley
266 lfsmake2 coreutils
267 lfsmake2 iana-etc
268 lfsmake2 m4
269 lfsmake2 bison
270 lfsmake2 ncurses
271 lfsmake2 procps
272 lfsmake2 sed
273 lfsmake2 libtool
274 lfsmake2 perl
275 lfsmake2 readline
276 lfsmake2 zlib
277 lfsmake2 autoconf
278 lfsmake2 automake
279 lfsmake2 bash
280 lfsmake2 bzip2
281 lfsmake2 diffutils
282 lfsmake2 e2fsprogs
283 lfsmake2 ed
284 lfsmake2 file
285 lfsmake2 findutils
286 lfsmake2 flex
287 lfsmake2 grub
288 lfsmake2 gawk
289 lfsmake2 gettext
290 lfsmake2 grep
291 lfsmake2 groff
292 lfsmake2 gzip
293 lfsmake2 inetutils
294 lfsmake2 iproute2
295 lfsmake2 kbd
296 lfsmake2 less
297 lfsmake2 make
298 lfsmake2 man
299 lfsmake2 mktemp
300 lfsmake2 modutils
301 lfsmake2 net-tools
302 lfsmake2 patch
303 lfsmake2 psmisc
304 lfsmake2 shadow
305 lfsmake2 sysklogd
306 lfsmake2 sysvinit
307 lfsmake2 tar
308 lfsmake2 texinfo
309 lfsmake2 udev
310 lfsmake2 util-linux
311 lfsmake2 vim
312 }
313
314 buildipfire() {
315 LOGFILE="$BASEDIR/log/_build.ipfire.log"
316 export LOGFILE
317 ipfiremake configroot
318 ipfiremake dhcp
319 ipfiremake dhcpcd
320 ipfiremake libusb
321 ipfiremake libpcap
322 ipfiremake linux-atm
323 ipfiremake ppp
324 ipfiremake rp-pppoe
325 ipfiremake unzip
326 ipfiremake linux SMP=1
327 ipfiremake ipp2p SMP=1
328 ipfiremake fcdsl SMP=1
329 ipfiremake fcdsl2 SMP=1
330 ipfiremake fcdslsl SMP=1
331 ipfiremake fcdslusb SMP=1
332 ipfiremake fcdslslusb SMP=1
333 ipfiremake fcpci SMP=1
334 # ipfiremake promise-sata-300-tx SMP=1
335 ipfiremake zaptel PASS=S
336 ipfiremake linux
337 ipfiremake ipp2p
338 ipfiremake fcdsl
339 ipfiremake fcdsl2
340 ipfiremake fcdslsl
341 ipfiremake fcdslusb
342 ipfiremake fcdslslusb
343 ipfiremake fcpci
344 # ipfiremake promise-sata-300-tx
345 ipfiremake zaptel
346 ipfiremake expat
347 ipfiremake gdbm
348 ipfiremake gmp
349 ipfiremake pam
350 ipfiremake openssl
351 ipfiremake python
352 ipfiremake libnet
353 ipfiremake libjpeg
354 ipfiremake libpng
355 ipfiremake libtiff
356 ipfiremake lcms
357 ipfiremake libmng
358 ipfiremake freetype
359 ipfiremake libart
360 ipfiremake gd
361 ipfiremake popt
362 ipfiremake pcre
363 ipfiremake slang
364 ipfiremake newt
365 ipfiremake libcap
366 ipfiremake pciutils
367 ipfiremake libxml2
368 ipfiremake BerkeleyDB
369 ipfiremake mysql
370 ipfiremake cyrus-sasl
371 ipfiremake openldap
372 ipfiremake apache2
373 ipfiremake php
374 ipfiremake subversion
375 ipfiremake apache2 PASS=C
376 ipfiremake arping
377 ipfiremake beep
378 ipfiremake bind
379 ipfiremake capi4k-utils
380 ipfiremake cdrtools
381 ipfiremake dnsmasq
382 ipfiremake dosfstools
383 ipfiremake reiserfsprogs
384 ipfiremake ethtool
385 ipfiremake ez-ipupdate
386 ipfiremake fcron
387 ipfiremake GD
388 ipfiremake gnupg
389 ipfiremake hdparm
390 ipfiremake ibod
391 ipfiremake initscripts
392 ipfiremake iptables
393 ipfiremake ipp2p IPT=1
394 ipfiremake ipac-ng
395 ipfiremake ipaddr
396 ipfiremake iptstate
397 ipfiremake iputils
398 ipfiremake l7-protocols
399 ipfiremake isapnptools
400 # ipfiremake isdn4k-utils # What about mISDN???
401 ipfiremake kudzu
402 ipfiremake logrotate
403 ipfiremake logwatch
404 ipfiremake mingetty
405 ipfiremake misc-progs
406 ipfiremake mtools
407 ipfiremake nano
408 ipfiremake nash
409 ipfiremake nasm
410 ipfiremake URI
411 ipfiremake HTML-Tagset
412 ipfiremake HTML-Parser
413 ipfiremake Compress-Zlib
414 ipfiremake Digest
415 ipfiremake Digest-SHA1
416 ipfiremake Digest-HMAC
417 ipfiremake libwww-perl
418 ipfiremake Net-DNS
419 ipfiremake Net-IPv4Addr
420 ipfiremake Net_SSLeay
421 ipfiremake IO-Stringy
422 ipfiremake Unix-Syslog
423 ipfiremake Mail-Tools
424 ipfiremake MIME-Tools
425 ipfiremake Net-Server
426 ipfiremake Convert-TNEF
427 ipfiremake Convert-UUlib
428 ipfiremake Archive-Tar
429 ipfiremake Archive-Zip
430 ipfiremake Text-Tabs+Wrap
431 ipfiremake Locale-Country
432 ipfiremake GeoIP
433 ipfiremake fwhits
434 ipfiremake noip_updater
435 ipfiremake ntp
436 ipfiremake oinkmaster
437 ipfiremake openssh
438 ipfiremake openswan
439 ipfiremake pptpclient
440 ipfiremake rrdtool
441 ipfiremake setserial
442 ipfiremake setup
443 ipfiremake snort
444 ipfiremake squid
445 ipfiremake squid-graph
446 ipfiremake squidguard
447 # ipfiremake tcpdump
448 ipfiremake traceroute
449 ipfiremake vlan
450 ipfiremake wireless
451 ipfiremake libsafe
452 ipfiremake 3c5x9setup
453 ipfiremake pakfire
454 ipfiremake startscripts
455 ipfiremake java
456 ipfiremake bootsplash
457 ipfiremake spandsp
458 ipfiremake lzo
459 ipfiremake openvpn
460 ipfiremake pkg-config
461 ipfiremake glib
462 ipfiremake pammysql
463 ipfiremake xinetd
464 ipfiremake ghostscript
465 ipfiremake cups
466 ipfiremake samba
467 ipfiremake sudo
468 ipfiremake mc
469 ipfiremake wget
470 ipfiremake wput
471 ipfiremake bridge-utils
472 ipfiremake screen
473 ipfiremake hddtemp
474 ipfiremake smartmontools
475 ipfiremake htop
476 ipfiremake lynx
477 ipfiremake postfix
478 ipfiremake procmail
479 ipfiremake fetchmail
480 ipfiremake cyrusimap
481 ipfiremake webcyradm
482 ipfiremake mailx
483 ipfiremake clamav
484 ipfiremake razor
485 ipfiremake spamassassin
486 ipfiremake amavisd
487 ipfiremake stund
488 ipfiremake libpri
489 # ipfiremake bristuff
490 ipfiremake asterisk
491 ipfiremake mpg123
492 ipfiremake libmad
493 ipfiremake libogg
494 ipfiremake libvorbis
495 ipfiremake lame
496 ipfiremake xvid
497 ipfiremake mpeg2dec
498 ipfiremake ffmpeg
499 ipfiremake sox
500 ipfiremake gnump3d
501 ipfiremake videolan
502 ipfiremake applejuice
503 ipfiremake ocaml
504 ipfiremake mldonkey
505 ipfiremake ntop
506 ipfiremake rsync
507 ipfiremake tcpwrapper
508 ipfiremake portmap
509 ipfiremake nfs
510 ipfiremake nmap
511 ipfiremake mbmon
512 ipfiremake iftop
513 ipfiremake ncftp
514 ipfiremake cftp
515 ipfiremake etherwake
516 ipfiremake ethereal
517 ipfiremake tftp-hpa
518 ipfiremake iptraf
519 ipfiremake nagios
520 ipfiremake yasuc
521 }
522
523 buildinstaller() {
524 # Run installer scripts one by one
525 LOGFILE="$BASEDIR/log/_build.installer.log"
526 export LOGFILE
527 ipfiremake syslinux
528 ipfiremake memtest
529 installmake linux-libc-header
530 installmake binutils
531 ipfiremake uClibc PASS=1
532 ipfiremake gcc INST=1
533 installmake uClibc PASS=2
534 installmake gcc INST=2
535 installmake uClibc PASS=3
536 installmake busybox
537 installmake udev
538 installmake slang
539 installmake newt
540 installmake gettext
541 installmake kbd
542 installmake popt
543 installmake sysvinit
544 installmake misc-progs
545 installmake e2fsprogs
546 installmake reiserfsprogs
547 installmake sysfsutils
548 installmake util-linux
549 installmake pciutils
550 installmake kudzu
551 # installmake bootsplash
552 installmake installer
553 installmake initrd
554 }
555
556 buildpackages() {
557 LOGFILE="$BASEDIR/log/_build.packages.log"
558 export LOGFILE
559 echo "... see detailed log in _build.*.log files" >> $LOGFILE
560
561 installmake strip
562
563 # Generating list of packages used
564 echo -n "Generating packages list from logs" | tee -a $LOGFILE
565 rm -f $BASEDIR/doc/packages-list
566 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
567 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
568 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
569 fi
570 done
571 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
572 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$' \
573 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
574 rm -f $BASEDIR/doc/packages-list
575 # packages-list.txt is ready to be displayed for wiki page
576 beautify message DONE
577
578 # Create images for install
579 ipfiremake cdrom
580 ipfiremake pxe
581 cp -f $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
582
583 # ipfirepackages
584
585 # Cleanup
586 stdumount
587 rm -rf $BASEDIR/build/tmp/*
588
589 # Generating total list of files
590 echo "Generating files list from logs" | tee -a $LOGFILE
591 rm -f $BASEDIR/log/FILES
592 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
593 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
594 echo "##" >>$BASEDIR/log/FILES
595 echo "## `basename $i`" >>$BASEDIR/log/FILES
596 echo "##" >>$BASEDIR/log/FILES
597 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
598 fi
599 done
600 cd $BASEDIR/packages; ls -w1 *.ipfire | awk -F ".ipfire" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
601 echo -n "###EOF###" >> $BASEDIR/packages/packages_list.txt
602
603 cd $PWD
604
605 }
606
607 ipfirepackages() {
608 if [ -d "$BASEDIR/packages" ]; then
609 for i in `ls $BASEDIR/packages`; do
610 touch $BASEDIR/build/install/packages/$i.empty
611 done
612 fi
613 # ipfiredist amavisd
614 ipfiredist applejuice
615 ipfiredist asterisk
616 ipfiredist clamav
617 ipfiredist cups
618 ipfiredist cyrusimap
619 ipfiredist fetchmail
620 ipfiredist ffmpeg
621 ipfiredist gnump3d
622 ipfiredist iptraf
623 ipfiredist java
624 ipfiredist lame
625 ipfiredist libmad
626 ipfiredist libogg
627 ipfiredist libvorbis
628 ipfiredist mailx
629 ipfiredist mldonkey
630 ipfiredist mpeg2dec
631 ipfiredist nagios
632 ipfiredist nfs
633 ipfiredist nmap
634 ipfiredist ntop
635 ipfiredist portmap
636 ipfiredist postfix
637 ipfiredist procmail
638 ipfiredist samba
639 ipfiredist sox
640 ipfiredist spamassassin
641 ipfiredist subversion
642 ipfiredist videolan
643 ipfiredist webcyradm
644 ipfiredist xvid
645 ipfiredist yasuc
646 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
647 mv -f $LFS/install/packages/*.{ipfire,md5} $BASEDIR/packages >> $LOGFILE 2>&1
648 rm -rf $BASEDIR/build/install/packages/*
649 }
650
651 # See what we're supposed to do
652 case "$1" in
653 build)
654 clear
655 BUILDMACHINE=`uname -m`
656 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
657 #only restore on a clean disk
658 if [ ! -f log/cleanup-toolchain-2-tools ]; then
659 if [ ! -n "$PACKAGE" ]; then
660 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
661 prepareenv
662 buildtoolchain
663 else
664 PACKAGENAME=${PACKAGE%.tar.gz}
665 beautify build_stage "Packaged toolchain compilation"
666 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
667 tar zxf $PACKAGE
668 prepareenv
669 else
670 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
671 fi
672 fi
673 else
674 echo -n "Using installed toolchain" | tee -a $LOGFILE
675 beautify message SKIP
676 prepareenv
677 fi
678
679 beautify build_start
680 beautify build_stage_start "Building base"
681 buildbase
682 beautify build_stage_end
683
684 beautify build_stage_start "Building IPFire"
685 buildipfire
686 beautify build_stage_end
687
688 # Setzen des IPFire Builds
689 if [ "$FIREBUILD" ]; then
690 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
691 else
692 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
693 fi
694
695 beautify build_stage_start "Building installer"
696 buildinstaller
697 beautify build_stage_end
698
699 beautify build_stage_start "Building packages"
700 buildpackages
701 beautify build_stage_end
702 beautify build_end
703 ;;
704 shell)
705 # enter a shell inside LFS chroot
706 # may be used to changed kernel settings
707 prepareenv
708 entershell
709 ;;
710 changelog)
711 echo -n "Loading new Changelog from SVN: "
712 svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
713 beautify message DONE
714 ;;
715 clean)
716 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
717 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
718 $LOSETUP -d $i 2>/dev/null
719 done
720 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
721 umount $i
722 done
723 stdumount
724 for i in `seq 0 7`; do
725 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
726 umount /dev/loop${i} 2>/dev/null;
727 losetup -d /dev/loop${i} 2>/dev/null;
728 fi;
729 done
730 rm -rf $BASEDIR/build
731 rm -rf $BASEDIR/cdrom
732 rm -rf $BASEDIR/packages
733 rm -rf $BASEDIR/log
734 if [ -h /tools ]; then
735 rm -f /tools
736 fi
737 beautify message DONE
738 ;;
739 downloadsrc)
740 if [ ! -d $BASEDIR/cache ]; then
741 mkdir $BASEDIR/cache
742 fi
743 mkdir -p $BASEDIR/log
744 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
745 FINISHED=0
746 cd $BASEDIR/lfs
747 for c in `seq $MAX_RETRIES`; do
748 if (( FINISHED==1 )); then
749 break
750 fi
751 FINISHED=1
752 cd $BASEDIR/lfs
753 for i in *; do
754 if [ -f "$i" -a "$i" != "Config" ]; then
755 echo -ne "Loading $i"
756 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
757 if [ $? -ne 0 ]; then
758 beautify message FAIL
759 FINISHED=0
760 else
761 if [ $c -eq 1 ]; then
762 beautify message DONE
763 fi
764 fi
765 fi
766 done
767 done
768 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
769 ERROR=0
770 for i in *; do
771 if [ -f "$i" -a "$i" != "Config" ]; then
772 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
773 if [ $? -ne 0 ]; then
774 echo -ne "MD5 difference in lfs/$i"
775 beautify message FAIL
776 ERROR=1
777 fi
778 fi
779 done
780 if [ $ERROR -eq 0 ]; then
781 echo -ne "${BOLD}all files md5sum match${NORMAL}"
782 beautify message DONE
783 else
784 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
785 beautify message FAIL
786 fi
787 cd - >/dev/null 2>&1
788 ;;
789 toolchain)
790 clear
791 prepareenv
792 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
793 buildtoolchain
794 BUILDMACHINE=`uname -m`
795 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
796 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
797 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
798 build/{bin,etc,usr/bin,usr/local} \
799 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
800 log >> $LOGFILE
801 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
802 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
803 stdumount
804 ;;
805 gettoolchain)
806 BUILDMACHINE=`uname -m`
807 # arbitrary name to be updated in case of new toolchain package upload
808 PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
809 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
810 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
811 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
812 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
813 cd $BASEDIR/cache/toolchains
814 wget $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
815 if [ $? -ne 0 ]; then
816 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
817 else
818 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
819 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
820 else
821 exiterror "$PACKAGE.md5 did not match, check downloaded package"
822 fi
823 fi
824 else
825 echo "Toolchain is already downloaded. Exiting..."
826 fi
827 ;;
828 othersrc)
829 prepareenv
830 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
831 chroot $LFS /tools/bin/env -i HOME=/root \
832 TERM=$TERM PS1='\u:\w\$ ' \
833 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
834 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
835 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
836 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
837 if [ $? -eq "0" ]; then
838 beautify message DONE
839 else
840 beautify message FAIL
841 fi
842 stdumount
843 ;;
844 svn)
845 case "$2" in
846 update|up)
847 # clear
848 echo -ne "Loading the latest source files...\n"
849 if [ $3 ]; then
850 svn update -r $3 | tee -a $PWD/log/_build.svn.update.log
851 else
852 svn update | tee -a $PWD/log/_build.svn.update.log
853 fi
854 if [ $? -eq "0" ]; then
855 beautify message DONE
856 else
857 beautify message FAIL
858 exit 1
859 fi
860 echo -ne "Writing the svn-info to a file"
861 svn info > $PWD/svn_status
862 if [ $? -eq "0" ]; then
863 beautify message DONE
864 else
865 beautify message FAIL
866 exit 1
867 fi
868 chmod 755 $0
869 exit 0
870 ;;
871 commit|ci)
872 clear
873 if [ -f /usr/bin/mcedit ]; then
874 export EDITOR=/usr/bin/mcedit
875 fi
876 if [ -f /usr/bin/nano ]; then
877 export EDITOR=/usr/bin/nano
878 fi
879 echo -ne "Selecting editor $EDITOR..."
880 beautify message DONE
881 if [ -e /sbin/yast ]; then
882 if [ "`echo $SVN_REVISION | cut -c 3`" -eq "0" ]; then
883 $0 changelog
884 fi
885 fi
886 svn commit
887 $0 svn up
888 $0 uploadsrc
889 ;;
890 dist)
891 if [ $3 ]; then
892 SVN_REVISION=$3
893 fi
894 if [ -f ipfire-source-r$SVN_REVISION.tar.gz ]; then
895 echo -ne "REV $SVN_REVISION: SKIPPED!\n"
896 exit 0
897 fi
898 echo -en "REV $SVN_REVISION: Downloading..."
899 svn export http://svn.ipfire.eu/svn/ipfire/trunk ipfire-source/ --force > /dev/null
900 svn log http://svn.ipfire.eu/svn/ipfire/trunk -r 1:$SVN_REVISION > ipfire-source/Changelog
901 #svn info http://svn.ipfire.eu/svn/ipfire/trunk -r $SVN_REVISION > ipfire-source/svn_status
902 evaluate 1
903
904 echo -en "REV $SVN_REVISION: Compressing files..."
905 if [ -e ipfire-source/trunk/make.sh ]; then
906 chmod 755 ipfire-source/trunk/make.sh
907 fi
908 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
909 evaluate 1
910 echo -en "REV $SVN_REVISION: Cleaning up..."
911 rm ipfire-source/ -r
912 evaluate 1
913 ;;
914 diff|di)
915 echo -ne "Make a local diff to last svn revision"
916 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
917 evaluate 1
918 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
919 ;;
920 esac
921 ;;
922 uploadsrc)
923 PWD=`pwd`
924 cd $BASEDIR/cache/
925 echo -e "Uploading cache to ftp server:"
926 ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > /var/tmp/ftplist
927 for i in *; do
928 if [ "$i" == "toolchains" ]; then continue; fi
929 grep -q $i /var/tmp/ftplist
930 if [ "$?" -ne "0" ]; then
931 echo -ne "$i"
932 ncftpput -bb -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ $i >> $BASEDIR/log/_build.uploadsrc.log 2>&1
933 if [ "$?" -eq "0" ]; then
934 beautify message DONE
935 else
936 beautify message FAIL
937 fi
938 fi
939 done
940 rm -f /var/tmp/ftplist
941 UL_TIME_START=`date +'%s'`
942 ncftpbatch -d > /dev/null 2>&1
943 while ps acx | grep -q ncftpbatch
944 do
945 UL_TIME=$(expr `date +'%s'` - $UL_TIME_START)
946 echo -ne "\r ${UL_TIME}s : Upload is running..."
947 sleep 1
948 done
949 beautify message DONE
950 cd $PWD
951 exit 0
952 ;;
953 upload)
954 case "$2" in
955 iso)
956 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
957 cat <<EOF > .ftp-commands
958 mkdir $IPFIRE_FTP_PATH_EXT
959 ls -lah
960 quit
961 EOF
962 ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
963 rm -f .ftp-commands
964 md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
965 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso
966 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
967 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
968 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ svn_status
969 if [ "$?" -eq "0" ]; then
970 echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
971 else
972 echo -e "There was an error while uploading the iso to the ftp server."
973 exit 1
974 fi
975 if [ "$3" = "--with-sources-cd" ]; then
976 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
977 fi
978 ;;
979 paks)
980 cat <<EOF > .ftp-commands
981 mkdir $IPFIRE_FTP_PATH_PAK
982 ls -lah
983 quit
984 EOF
985 ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
986 rm -f .ftp-commands
987 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
988 if [ "$?" -eq "0" ]; then
989 echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
990 else
991 echo -e "There was an error while uploading the packages to the ftp server."
992 exit 1
993 fi
994 ;;
995 esac
996 ;;
997 batch)
998 if [ "$2" -eq "--background" ]; then
999 batch_script
1000 exit $?
1001 fi
1002 if [ `screen -ls | grep -q ipfire` ]; then
1003 echo "Build is already running, sorry!"
1004 exit 1
1005 else
1006 if [ "$2" = "--rebuild" ]; then
1007 export IPFIRE_REBUILD=1
1008 echo "REBUILD!"
1009 else
1010 export IPFIRE_REBUILD=0
1011 fi
1012 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1013 screen -dmS ipfire $0 batch --background
1014 evaluate 1
1015 exit 0
1016 fi
1017 ;;
1018 watch)
1019 watch_screen
1020 ;;
1021 pxe)
1022 case "$2" in
1023 start)
1024 start_tftpd
1025 ;;
1026 stop)
1027 stop_tftpd
1028 ;;
1029 reload|restart)
1030 reload_tftpd
1031 ;;
1032 esac
1033 exit 0
1034 ;;
1035 "")
1036 clear
1037 svn info
1038 select name in "Exit" "IPFIRE: Downloadsrc" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "SVN: Commit" "SVN: Update" "SVN: Status" "SVN: Diff" "LOG: Tail" "Help"
1039 do
1040 case $name in
1041 "IPFIRE: Downloadsrc")
1042 $0 downloadsrc
1043 ;;
1044 "IPFIRE: Build (silent)")
1045 $0 build-silent
1046 ;;
1047 "IPFIRE: Watch Build")
1048 $0 watch
1049 ;;
1050 "IPFIRE: Batch")
1051 $0 batch
1052 ;;
1053 "IPFIRE: Clean")
1054 $0 clean
1055 ;;
1056 "SVN: Update")
1057 $0 svn update
1058 ;;
1059 "Help")
1060 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1061 cat doc/make.sh-usage
1062 ;;
1063 "LOG: Tail")
1064 tail -f log/_*
1065 ;;
1066 "Exit")
1067 break
1068 ;;
1069 esac
1070 done
1071 ;;
1072 config)
1073 make_config
1074 ;;
1075 *)
1076 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1077 cat doc/make.sh-usage
1078 ;;
1079 esac