SquashFS hinzugefuegt damit wir auf OpenVZ-Maschinen bauen koennen.
[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 apache2 PASS=C
375 ipfiremake arping
376 ipfiremake beep
377 ipfiremake bind
378 ipfiremake capi4k-utils
379 ipfiremake cdrtools
380 ipfiremake dnsmasq
381 ipfiremake dosfstools
382 ipfiremake reiserfsprogs
383 ipfiremake squashfstools
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 java
455 ipfiremake bootsplash
456 ipfiremake spandsp
457 ipfiremake lzo
458 ipfiremake openvpn
459 ipfiremake pkg-config
460 ipfiremake glib
461 ipfiremake pammysql
462 ipfiremake xinetd
463 ipfiremake ghostscript
464 ipfiremake cups
465 ipfiremake samba
466 ipfiremake sudo
467 ipfiremake mc
468 ipfiremake wget
469 ipfiremake wput
470 ipfiremake bridge-utils
471 ipfiremake screen
472 ipfiremake hddtemp
473 ipfiremake smartmontools
474 ipfiremake htop
475 ipfiremake lynx
476 ipfiremake postfix
477 ipfiremake procmail
478 ipfiremake fetchmail
479 ipfiremake cyrusimap
480 ipfiremake webcyradm
481 ipfiremake mailx
482 ipfiremake clamav
483 ipfiremake razor
484 ipfiremake spamassassin
485 ipfiremake amavisd
486 ipfiremake stund
487 ipfiremake libpri
488 # ipfiremake bristuff
489 ipfiremake asterisk
490 ipfiremake mpg123
491 ipfiremake libmad
492 ipfiremake libogg
493 ipfiremake libvorbis
494 ipfiremake lame
495 ipfiremake xvid
496 ipfiremake mpeg2dec
497 ipfiremake ffmpeg
498 ipfiremake sox
499 ipfiremake gnump3d
500 ipfiremake videolan
501 ipfiremake applejuice
502 ipfiremake ocaml
503 ipfiremake mldonkey
504 ipfiremake ntop
505 ipfiremake rsync
506 ipfiremake tcpwrapper
507 ipfiremake portmap
508 ipfiremake nfs
509 ipfiremake nmap
510 ipfiremake mbmon
511 ipfiremake iftop
512 ipfiremake ncftp
513 ipfiremake cftp
514 ipfiremake etherwake
515 ipfiremake ethereal
516 ipfiremake tftp-hpa
517 ipfiremake iptraf
518 ipfiremake nagios
519 ipfiremake yasuc
520 }
521
522 buildinstaller() {
523 # Run installer scripts one by one
524 LOGFILE="$BASEDIR/log/_build.installer.log"
525 export LOGFILE
526 ipfiremake syslinux
527 ipfiremake memtest
528 installmake linux-libc-header
529 installmake binutils
530 ipfiremake uClibc PASS=1
531 ipfiremake gcc INST=1
532 installmake uClibc PASS=2
533 installmake gcc INST=2
534 installmake uClibc PASS=3
535 installmake busybox
536 installmake udev
537 installmake slang
538 installmake newt
539 installmake gettext
540 installmake kbd
541 installmake popt
542 installmake sysvinit
543 installmake misc-progs
544 installmake e2fsprogs
545 installmake reiserfsprogs
546 installmake sysfsutils
547 installmake util-linux
548 installmake pciutils
549 installmake kudzu
550 # installmake bootsplash
551 installmake installer
552 installmake initrd
553 }
554
555 buildpackages() {
556 LOGFILE="$BASEDIR/log/_build.packages.log"
557 export LOGFILE
558 echo "... see detailed log in _build.*.log files" >> $LOGFILE
559
560 installmake strip
561
562 # Generating list of packages used
563 echo -n "Generating packages list from logs" | tee -a $LOGFILE
564 rm -f $BASEDIR/doc/packages-list
565 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
566 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
567 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
568 fi
569 done
570 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
571 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$' \
572 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
573 rm -f $BASEDIR/doc/packages-list
574 # packages-list.txt is ready to be displayed for wiki page
575 beautify message DONE
576
577 # Create images for install
578 ipfiremake cdrom
579 ipfiremake pxe
580 cp -f $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
581
582 # ipfirepackages
583
584 # Cleanup
585 stdumount
586 rm -rf $BASEDIR/build/tmp/*
587
588 # Generating total list of files
589 echo "Generating files list from logs" | tee -a $LOGFILE
590 rm -f $BASEDIR/log/FILES
591 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
592 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
593 echo "##" >>$BASEDIR/log/FILES
594 echo "## `basename $i`" >>$BASEDIR/log/FILES
595 echo "##" >>$BASEDIR/log/FILES
596 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
597 fi
598 done
599 cd $BASEDIR/packages; ls -w1 *.ipfire | awk -F ".ipfire" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
600 echo -n "###EOF###" >> $BASEDIR/packages/packages_list.txt
601
602 cd $PWD
603
604 }
605
606 ipfirepackages() {
607 if [ -d "$BASEDIR/packages" ]; then
608 for i in `ls $BASEDIR/packages`; do
609 touch $BASEDIR/build/install/packages/$i.empty
610 done
611 fi
612 # ipfiredist amavisd
613 ipfiredist applejuice
614 ipfiredist asterisk
615 ipfiredist clamav
616 ipfiredist cups
617 ipfiredist cyrusimap
618 ipfiredist fetchmail
619 ipfiredist ffmpeg
620 ipfiredist gnump3d
621 ipfiredist iptraf
622 ipfiredist java
623 ipfiredist lame
624 ipfiredist libmad
625 ipfiredist libogg
626 ipfiredist libvorbis
627 ipfiredist mailx
628 ipfiredist mldonkey
629 ipfiredist mpeg2dec
630 ipfiredist nagios
631 ipfiredist nfs
632 ipfiredist nmap
633 ipfiredist ntop
634 ipfiredist portmap
635 ipfiredist postfix
636 ipfiredist procmail
637 ipfiredist samba
638 ipfiredist sox
639 ipfiredist spamassassin
640 ipfiredist subversion
641 ipfiredist videolan
642 ipfiredist webcyradm
643 ipfiredist xvid
644 ipfiredist yasuc
645 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
646 mv -f $LFS/install/packages/*.{ipfire,md5} $BASEDIR/packages >> $LOGFILE 2>&1
647 rm -rf $BASEDIR/build/install/packages/*
648 }
649
650 # See what we're supposed to do
651 case "$1" in
652 build)
653 clear
654 BUILDMACHINE=`uname -m`
655 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
656 #only restore on a clean disk
657 if [ ! -f log/cleanup-toolchain-2-tools ]; then
658 if [ ! -n "$PACKAGE" ]; then
659 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
660 prepareenv
661 buildtoolchain
662 else
663 PACKAGENAME=${PACKAGE%.tar.gz}
664 beautify build_stage "Packaged toolchain compilation"
665 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
666 tar zxf $PACKAGE
667 prepareenv
668 else
669 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
670 fi
671 fi
672 else
673 echo -n "Using installed toolchain" | tee -a $LOGFILE
674 beautify message SKIP
675 prepareenv
676 fi
677
678 beautify build_start
679 beautify build_stage_start "Building base"
680 buildbase
681 beautify build_stage_end
682
683 beautify build_stage_start "Building IPFire"
684 buildipfire
685 beautify build_stage_end
686
687 # Setzen des IPFire Builds
688 if [ "$FIREBUILD" ]; then
689 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
690 else
691 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
692 fi
693
694 beautify build_stage_start "Building installer"
695 buildinstaller
696 beautify build_stage_end
697
698 beautify build_stage_start "Building packages"
699 buildpackages
700 beautify build_stage_end
701 beautify build_end
702 ;;
703 shell)
704 # enter a shell inside LFS chroot
705 # may be used to changed kernel settings
706 prepareenv
707 entershell
708 ;;
709 changelog)
710 echo -n "Loading new Changelog from SVN: "
711 svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
712 beautify message DONE
713 ;;
714 clean)
715 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
716 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
717 $LOSETUP -d $i 2>/dev/null
718 done
719 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
720 umount $i
721 done
722 stdumount
723 for i in `seq 0 7`; do
724 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
725 umount /dev/loop${i} 2>/dev/null;
726 losetup -d /dev/loop${i} 2>/dev/null;
727 fi;
728 done
729 rm -rf $BASEDIR/build
730 rm -rf $BASEDIR/cdrom
731 rm -rf $BASEDIR/packages
732 rm -rf $BASEDIR/log
733 if [ -h /tools ]; then
734 rm -f /tools
735 fi
736 beautify message DONE
737 ;;
738 downloadsrc)
739 if [ ! -d $BASEDIR/cache ]; then
740 mkdir $BASEDIR/cache
741 fi
742 mkdir -p $BASEDIR/log
743 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
744 FINISHED=0
745 cd $BASEDIR/lfs
746 for c in `seq $MAX_RETRIES`; do
747 if (( FINISHED==1 )); then
748 break
749 fi
750 FINISHED=1
751 cd $BASEDIR/lfs
752 for i in *; do
753 if [ -f "$i" -a "$i" != "Config" ]; then
754 echo -ne "Loading $i"
755 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
756 if [ $? -ne 0 ]; then
757 beautify message FAIL
758 FINISHED=0
759 else
760 if [ $c -eq 1 ]; then
761 beautify message DONE
762 fi
763 fi
764 fi
765 done
766 done
767 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
768 ERROR=0
769 for i in *; do
770 if [ -f "$i" -a "$i" != "Config" ]; then
771 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
772 if [ $? -ne 0 ]; then
773 echo -ne "MD5 difference in lfs/$i"
774 beautify message FAIL
775 ERROR=1
776 fi
777 fi
778 done
779 if [ $ERROR -eq 0 ]; then
780 echo -ne "${BOLD}all files md5sum match${NORMAL}"
781 beautify message DONE
782 else
783 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
784 beautify message FAIL
785 fi
786 cd - >/dev/null 2>&1
787 ;;
788 toolchain)
789 clear
790 prepareenv
791 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
792 buildtoolchain
793 BUILDMACHINE=`uname -m`
794 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
795 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
796 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
797 build/{bin,etc,usr/bin,usr/local} \
798 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
799 log >> $LOGFILE
800 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
801 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
802 stdumount
803 ;;
804 gettoolchain)
805 BUILDMACHINE=`uname -m`
806 # arbitrary name to be updated in case of new toolchain package upload
807 PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
808 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
809 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
810 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
811 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
812 cd $BASEDIR/cache/toolchains
813 wget $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
814 if [ $? -ne 0 ]; then
815 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
816 else
817 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
818 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
819 else
820 exiterror "$PACKAGE.md5 did not match, check downloaded package"
821 fi
822 fi
823 else
824 echo "Toolchain is already downloaded. Exiting..."
825 fi
826 ;;
827 othersrc)
828 prepareenv
829 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
830 chroot $LFS /tools/bin/env -i HOME=/root \
831 TERM=$TERM PS1='\u:\w\$ ' \
832 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
833 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
834 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
835 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
836 if [ $? -eq "0" ]; then
837 beautify message DONE
838 else
839 beautify message FAIL
840 fi
841 stdumount
842 ;;
843 svn)
844 case "$2" in
845 update|up)
846 # clear
847 echo -ne "Loading the latest source files...\n"
848 if [ $3 ]; then
849 svn update -r $3 | tee -a $PWD/log/_build.svn.update.log
850 else
851 svn update | tee -a $PWD/log/_build.svn.update.log
852 fi
853 if [ $? -eq "0" ]; then
854 beautify message DONE
855 else
856 beautify message FAIL
857 exit 1
858 fi
859 echo -ne "Writing the svn-info to a file"
860 svn info > $PWD/svn_status
861 if [ $? -eq "0" ]; then
862 beautify message DONE
863 else
864 beautify message FAIL
865 exit 1
866 fi
867 chmod 755 $0
868 exit 0
869 ;;
870 commit|ci)
871 clear
872 if [ -f /usr/bin/mcedit ]; then
873 export EDITOR=/usr/bin/mcedit
874 fi
875 if [ -f /usr/bin/nano ]; then
876 export EDITOR=/usr/bin/nano
877 fi
878 echo -ne "Selecting editor $EDITOR..."
879 beautify message DONE
880 if [ -e /sbin/yast ]; then
881 if [ "`echo $SVN_REVISION | cut -c 3`" -eq "0" ]; then
882 $0 changelog
883 fi
884 fi
885 svn commit
886 $0 svn up
887 $0 uploadsrc
888 ;;
889 dist)
890 if [ $3 ]; then
891 SVN_REVISION=$3
892 fi
893 if [ -f ipfire-source-r$SVN_REVISION.tar.gz ]; then
894 echo -ne "REV $SVN_REVISION: SKIPPED!\n"
895 exit 0
896 fi
897 echo -en "REV $SVN_REVISION: Downloading..."
898 svn export http://svn.ipfire.eu/svn/ipfire/trunk ipfire-source/ --force > /dev/null
899 svn log http://svn.ipfire.eu/svn/ipfire/trunk -r 1:$SVN_REVISION > ipfire-source/Changelog
900 #svn info http://svn.ipfire.eu/svn/ipfire/trunk -r $SVN_REVISION > ipfire-source/svn_status
901 evaluate 1
902
903 echo -en "REV $SVN_REVISION: Compressing files..."
904 if [ -e ipfire-source/trunk/make.sh ]; then
905 chmod 755 ipfire-source/trunk/make.sh
906 fi
907 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
908 evaluate 1
909 echo -en "REV $SVN_REVISION: Cleaning up..."
910 rm ipfire-source/ -r
911 evaluate 1
912 ;;
913 diff|di)
914 echo -ne "Make a local diff to last svn revision"
915 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
916 evaluate 1
917 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
918 ;;
919 esac
920 ;;
921 uploadsrc)
922 PWD=`pwd`
923 cd $BASEDIR/cache/
924 echo -e "Uploading cache to ftp server:"
925 ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > /var/tmp/ftplist
926 for i in *; do
927 if [ "$i" == "toolchains" ]; then continue; fi
928 grep -q $i /var/tmp/ftplist
929 if [ "$?" -ne "0" ]; then
930 echo -ne "$i"
931 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
932 if [ "$?" -eq "0" ]; then
933 beautify message DONE
934 else
935 beautify message FAIL
936 fi
937 fi
938 done
939 rm -f /var/tmp/ftplist
940 UL_TIME_START=`date +'%s'`
941 ncftpbatch -d > /dev/null 2>&1
942 while ps acx | grep -q ncftpbatch
943 do
944 UL_TIME=$(expr `date +'%s'` - $UL_TIME_START)
945 echo -ne "\r ${UL_TIME}s : Upload is running..."
946 sleep 1
947 done
948 beautify message DONE
949 cd $PWD
950 exit 0
951 ;;
952 upload)
953 case "$2" in
954 iso)
955 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
956 cat <<EOF > .ftp-commands
957 mkdir $IPFIRE_FTP_PATH_EXT
958 ls -lah
959 quit
960 EOF
961 ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
962 rm -f .ftp-commands
963 md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
964 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso
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.md5
966 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
967 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ svn_status
968 if [ "$?" -eq "0" ]; then
969 echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
970 else
971 echo -e "There was an error while uploading the iso to the ftp server."
972 exit 1
973 fi
974 if [ "$3" = "--with-sources-cd" ]; then
975 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
976 fi
977 ;;
978 paks)
979 cat <<EOF > .ftp-commands
980 mkdir $IPFIRE_FTP_PATH_PAK
981 ls -lah
982 quit
983 EOF
984 ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
985 rm -f .ftp-commands
986 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
987 if [ "$?" -eq "0" ]; then
988 echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
989 else
990 echo -e "There was an error while uploading the packages to the ftp server."
991 exit 1
992 fi
993 ;;
994 esac
995 ;;
996 batch)
997 if [ "$2" -eq "--background" ]; then
998 batch_script
999 exit $?
1000 fi
1001 if [ `screen -ls | grep -q ipfire` ]; then
1002 echo "Build is already running, sorry!"
1003 exit 1
1004 else
1005 if [ "$2" = "--rebuild" ]; then
1006 export IPFIRE_REBUILD=1
1007 echo "REBUILD!"
1008 else
1009 export IPFIRE_REBUILD=0
1010 fi
1011 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1012 screen -dmS ipfire $0 batch --background
1013 evaluate 1
1014 exit 0
1015 fi
1016 ;;
1017 watch)
1018 watch_screen
1019 ;;
1020 pxe)
1021 case "$2" in
1022 start)
1023 start_tftpd
1024 ;;
1025 stop)
1026 stop_tftpd
1027 ;;
1028 reload|restart)
1029 reload_tftpd
1030 ;;
1031 esac
1032 exit 0
1033 ;;
1034 "")
1035 clear
1036 svn info
1037 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"
1038 do
1039 case $name in
1040 "IPFIRE: Downloadsrc")
1041 $0 downloadsrc
1042 ;;
1043 "IPFIRE: Build (silent)")
1044 $0 build-silent
1045 ;;
1046 "IPFIRE: Watch Build")
1047 $0 watch
1048 ;;
1049 "IPFIRE: Batch")
1050 $0 batch
1051 ;;
1052 "IPFIRE: Clean")
1053 $0 clean
1054 ;;
1055 "SVN: Update")
1056 $0 svn update
1057 ;;
1058 "Help")
1059 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1060 cat doc/make.sh-usage
1061 ;;
1062 "LOG: Tail")
1063 tail -f log/_*
1064 ;;
1065 "Exit")
1066 break
1067 ;;
1068 esac
1069 done
1070 ;;
1071 config)
1072 make_config
1073 ;;
1074 *)
1075 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1076 cat doc/make.sh-usage
1077 ;;
1078 esac