]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - make.sh
JFFS2-Dateisystem hinzugefuegt fuer eventuelle Flash-Version der Firewall.
[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 versions should be compiled? (full|light|devel)
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="-j6"
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 gawk
288 lfsmake2 gettext
289 lfsmake2 grep
290 lfsmake2 groff
291 lfsmake2 gzip
292 lfsmake2 inetutils
293 lfsmake2 iproute2
294 lfsmake2 kbd
295 lfsmake2 less
296 lfsmake2 libaal
297 lfsmake2 make
298 lfsmake2 man
299 lfsmake2 mktemp
300 lfsmake2 modutils
301 lfsmake2 mtd
302 lfsmake2 net-tools
303 lfsmake2 patch
304 lfsmake2 psmisc
305 lfsmake2 reiser4progs
306 lfsmake2 shadow
307 lfsmake2 sysklogd
308 lfsmake2 sysvinit
309 lfsmake2 tar
310 lfsmake2 texinfo
311 lfsmake2 udev
312 lfsmake2 util-linux
313 lfsmake2 vim
314 lfsmake2 grub
315 }
316
317 buildipfire() {
318 LOGFILE="$BASEDIR/log/_build.ipfire.log"
319 export LOGFILE
320 ipfiremake configroot
321 ipfiremake dhcp
322 ipfiremake dhcpcd
323 ipfiremake libusb
324 ipfiremake libpcap
325 ipfiremake linux-atm
326 ipfiremake ppp
327 ipfiremake rp-pppoe
328 ipfiremake unzip
329 ipfiremake linux SMP=1
330 ipfiremake ipp2p SMP=1
331 ipfiremake fcdsl SMP=1
332 ipfiremake fcdsl2 SMP=1
333 ipfiremake fcdslsl SMP=1
334 ipfiremake fcdslusb SMP=1
335 ipfiremake fcdslslusb SMP=1
336 ipfiremake fcpci SMP=1
337 # ipfiremake promise-sata-300-tx SMP=1
338 ipfiremake zaptel SMP=1
339 ipfiremake fuse SMP=1
340 ipfiremake linux
341 ipfiremake ipp2p
342 ipfiremake fcdsl
343 ipfiremake fcdsl2
344 ipfiremake fcdslsl
345 ipfiremake fcdslusb
346 ipfiremake fcdslslusb
347 ipfiremake fcpci
348 # ipfiremake promise-sata-300-tx
349 ipfiremake zaptel
350 ipfiremake fuse
351 ipfiremake pkg-config
352 ipfiremake cpio
353 ipfiremake expat
354 ipfiremake gdbm
355 ipfiremake gmp
356 ipfiremake pam
357 ipfiremake openssl
358 ipfiremake python
359 ipfiremake libnet
360 ipfiremake libjpeg
361 ipfiremake libpng
362 ipfiremake libtiff
363 ipfiremake lcms
364 ipfiremake libmng
365 ipfiremake freetype
366 ipfiremake libart
367 ipfiremake gd
368 ipfiremake popt
369 ipfiremake pcre
370 ipfiremake slang
371 ipfiremake newt
372 ipfiremake libcap
373 ipfiremake pciutils
374 ipfiremake libxml2
375 ipfiremake BerkeleyDB
376 ipfiremake mysql
377 ipfiremake cyrus-sasl
378 ipfiremake openldap
379 ipfiremake apache2
380 ipfiremake php
381 ipfiremake apache2 PASS=C
382 ipfiremake arping
383 ipfiremake beep
384 ipfiremake bind
385 ipfiremake capi4k-utils
386 ipfiremake cdrtools
387 ipfiremake dnsmasq
388 ipfiremake libaal
389 ipfiremake dosfstools
390 ipfiremake reiserfsprogs
391 ipfiremake squashfstools
392 ipfiremake sysfsutils
393 ipfiremake ntfs-3g
394 ipfiremake ethtool
395 ipfiremake ez-ipupdate
396 ipfiremake fcron
397 ipfiremake GD
398 ipfiremake GD-Graph
399 ipfiremake GD-TextUtil
400 ipfiremake gnupg
401 ipfiremake hdparm
402 ipfiremake ibod
403 ipfiremake initscripts
404 ipfiremake whatmask
405 ipfiremake iptables
406 ipfiremake libupnp
407 ipfiremake ipp2p IPT=1
408 ipfiremake moblock
409 ipfiremake linux-igd
410 ipfiremake ipac-ng
411 ipfiremake ipaddr
412 ipfiremake iptstate
413 ipfiremake iputils
414 ipfiremake l7-protocols
415 ipfiremake isapnptools
416 # ipfiremake isdn4k-utils # What about mISDN???
417 ipfiremake hwdata
418 ipfiremake kudzu
419 ipfiremake logrotate
420 ipfiremake logwatch
421 ipfiremake misc-progs
422 ipfiremake mtools
423 ipfiremake nano
424 ipfiremake nash
425 ipfiremake nasm
426 ipfiremake URI
427 ipfiremake HTML-Tagset
428 ipfiremake HTML-Parser
429 ipfiremake Compress-Zlib
430 ipfiremake Digest
431 ipfiremake Digest-SHA1
432 ipfiremake Digest-HMAC
433 ipfiremake libwww-perl
434 ipfiremake Net-DNS
435 ipfiremake Net-IPv4Addr
436 ipfiremake Net_SSLeay
437 ipfiremake IO-Stringy
438 ipfiremake Unix-Syslog
439 ipfiremake Mail-Tools
440 ipfiremake MIME-Tools
441 ipfiremake Net-Server
442 ipfiremake Convert-TNEF
443 ipfiremake Convert-UUlib
444 ipfiremake Archive-Tar
445 ipfiremake Archive-Zip
446 ipfiremake Text-Tabs+Wrap
447 ipfiremake Locale-Country
448 ipfiremake XML-Parser
449 ipfiremake glib
450 ipfiremake GeoIP
451 ipfiremake fwhits
452 ipfiremake noip_updater
453 ipfiremake ntp
454 ipfiremake openssh
455 ipfiremake openswan
456 ipfiremake pptpclient
457 ipfiremake rrdtool
458 ipfiremake setserial
459 ipfiremake setup
460 ipfiremake snort
461 ipfiremake snortsnarf
462 ipfiremake oinkmaster
463 ipfiremake squid
464 ipfiremake squid-graph
465 ipfiremake squidguard
466 ipfiremake calamaris
467 ipfiremake tcpdump
468 ipfiremake traceroute
469 ipfiremake vlan
470 ipfiremake wireless
471 ipfiremake libsafe
472 ipfiremake 3c5x9setup
473 ipfiremake pakfire
474 ipfiremake java
475 ipfiremake bootsplash
476 ipfiremake spandsp
477 ipfiremake lzo
478 ipfiremake openvpn
479 ipfiremake pammysql
480 ipfiremake ghostscript
481 ipfiremake cups
482 ipfiremake samba
483 ipfiremake sudo
484 ipfiremake mc
485 ipfiremake wget
486 ipfiremake bridge-utils
487 ipfiremake screen
488 ipfiremake hddtemp
489 ipfiremake smartmontools
490 ipfiremake htop
491 ipfiremake postfix
492 ipfiremake fetchmail
493 ipfiremake cyrusimap
494 ipfiremake webcyradm
495 ipfiremake mailx
496 ipfiremake clamav
497 ipfiremake spamassassin
498 ipfiremake amavisd
499 ipfiremake stund
500 ipfiremake libpri
501 # ipfiremake bristuff
502 ipfiremake asterisk
503 ipfiremake mpg123
504 ipfiremake libmad
505 ipfiremake libogg
506 ipfiremake libvorbis
507 ipfiremake lame
508 ipfiremake sox
509 ipfiremake gnump3d
510 ipfiremake applejuice
511 ipfiremake ocaml
512 ipfiremake mldonkey
513 ipfiremake rsync
514 ipfiremake tcpwrapper
515 ipfiremake portmap
516 ipfiremake nfs
517 ipfiremake nmap
518 ipfiremake mbmon
519 ipfiremake iftop
520 ipfiremake ncftp
521 ipfiremake cftp
522 ipfiremake etherwake
523 ipfiremake ethereal
524 ipfiremake tftp-hpa
525 ipfiremake bwm-ng
526 ipfiremake tripwire
527 ipfiremake sysstat
528 }
529
530 buildinstaller() {
531 # Run installer scripts one by one
532 LOGFILE="$BASEDIR/log/_build.installer.log"
533 export LOGFILE
534 ipfiremake syslinux
535 ipfiremake as86
536 ipfiremake mbr
537 ipfiremake memtest
538 installmake linux-libc-header
539 installmake binutils
540 ipfiremake uClibc PASS=1
541 ipfiremake gcc INST=1
542 installmake uClibc PASS=2
543 installmake gcc INST=2
544 installmake uClibc PASS=3
545 installmake busybox
546 installmake udev
547 installmake slang
548 installmake newt
549 installmake gettext
550 installmake kbd
551 installmake popt
552 installmake sysvinit
553 installmake misc-progs
554 installmake e2fsprogs
555 installmake libaal
556 installmake reiser4progs
557 installmake reiserfsprogs
558 installmake sysfsutils
559 installmake util-linux
560 installmake pciutils
561 installmake zlib
562 installmake mtd
563 installmake wget
564 installmake hwdata
565 installmake kudzu
566 installmake installer
567 installmake initrd
568 }
569
570 buildpackages() {
571 LOGFILE="$BASEDIR/log/_build.packages.log"
572 export LOGFILE
573 echo "... see detailed log in _build.*.log files" >> $LOGFILE
574
575 installmake strip
576
577 # Generating list of packages used
578 echo -n "Generating packages list from logs" | tee -a $LOGFILE
579 rm -f $BASEDIR/doc/packages-list
580 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
581 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
582 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
583 fi
584 done
585 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
586 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$' \
587 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
588 rm -f $BASEDIR/doc/packages-list
589 # packages-list.txt is ready to be displayed for wiki page
590 beautify message DONE
591
592 # Create images for install
593 if [ "$DEVEL" == "1" ]; then
594 ipfiremake cdrom ED=devel
595 fi
596 ipfiremake cdrom ED=full
597
598 # Check if there is a loop device for building in virtual environments
599 if [ -e /dev/loop0 ]; then
600 ipfiremake usb-stick
601 fi
602 ipfiremake pxe
603 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz} $BASEDIR >> $LOGFILE 2>&1
604
605 ipfirepackages
606
607 # Cleanup
608 stdumount
609 rm -rf $BASEDIR/build/tmp/*
610
611 # Generating total list of files
612 echo -n "Generating files list from logs" | tee -a $LOGFILE
613 rm -f $BASEDIR/log/FILES
614 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
615 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
616 echo "##" >>$BASEDIR/log/FILES
617 echo "## `basename $i`" >>$BASEDIR/log/FILES
618 echo "##" >>$BASEDIR/log/FILES
619 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
620 fi
621 done
622 beautify message DONE
623
624 cd $PWD
625 }
626
627 ipfirepackages() {
628 # ipfiredist amavisd
629 # ipfiredist applejuice
630 # ipfiredist asterisk
631 ipfiredist clamav
632 # ipfiredist cups
633 # ipfiredist cyrusimap
634 # ipfiredist fetchmail
635 # ipfiredist gnump3d
636 # ipfiredist java
637 # ipfiredist mailx
638 # ipfiredist mldonkey
639 # ipfiredist nfs
640 # ipfiredist postfix
641 ipfiredist samba
642 # ipfiredist sox
643 # ipfiredist spamassassin
644 ipfiredist tripwire
645 # ipfiredist webcyradm
646 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
647 mv -f $LFS/install/packages/* $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 DEVEL=0
657 if [ "$2" == "--devel" ]; then
658 DEVEL=1
659 fi
660 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
661 #only restore on a clean disk
662 if [ ! -f log/cleanup-toolchain-2-tools ]; then
663 if [ ! -n "$PACKAGE" ]; then
664 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
665 prepareenv
666 buildtoolchain
667 else
668 PACKAGENAME=${PACKAGE%.tar.gz}
669 beautify build_stage "Packaged toolchain compilation"
670 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
671 tar zxf $PACKAGE
672 prepareenv
673 else
674 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
675 fi
676 fi
677 else
678 echo -n "Using installed toolchain" | tee -a $LOGFILE
679 beautify message SKIP
680 prepareenv
681 fi
682
683 beautify build_start
684 beautify build_stage "Building LFS"
685 buildbase
686
687 beautify build_stage "Building IPFire"
688 buildipfire
689
690 # Setzen des IPFire Builds
691 if [ "$FIREBUILD" ]; then
692 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
693 else
694 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
695 fi
696
697 beautify build_stage "Building installer"
698 buildinstaller
699
700 beautify build_stage "Building packages"
701 buildpackages
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.org/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 update_langs
887 svn commit
888 $0 svn up
889 if [ -n "$FTP_CACHE_URL" ]; then
890 $0 uploadsrc
891 fi
892 ;;
893 dist)
894 if [ $3 ]; then
895 SVN_REVISION=$3
896 fi
897 if [ -f ipfire-source-r$SVN_REVISION.tar.gz ]; then
898 echo -ne "REV $SVN_REVISION: SKIPPED!\n"
899 exit 0
900 fi
901 echo -en "REV $SVN_REVISION: Downloading..."
902 svn export http://svn.ipfire.org/svn/ipfire/trunk ipfire-source/ --force > /dev/null
903 svn log http://svn.ipfire.org/svn/ipfire/trunk -r 1:$SVN_REVISION > ipfire-source/Changelog
904 #svn info http://svn.ipfire.org/svn/ipfire/trunk -r $SVN_REVISION > ipfire-source/svn_status
905 evaluate 1
906
907 echo -en "REV $SVN_REVISION: Compressing files..."
908 if [ -e ipfire-source/trunk/make.sh ]; then
909 chmod 755 ipfire-source/trunk/make.sh
910 fi
911 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
912 evaluate 1
913 echo -en "REV $SVN_REVISION: Cleaning up..."
914 rm ipfire-source/ -r
915 evaluate 1
916 ;;
917 diff|di)
918 update_langs
919 echo -ne "Make a local diff to last svn revision"
920 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
921 evaluate 1
922 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
923 svn status
924 ;;
925 esac
926 ;;
927 uploadsrc)
928 PWD=`pwd`
929 cd $BASEDIR/cache/
930 echo -e "Uploading cache to ftp server:"
931 ncftpls -u $FTP_CACHE_USER -p $FTP_CACHE_PASS ftp://$FTP_CACHE_URL$FTP_CACHE_PATH/ > /tmp/ftplist
932 for i in *; do
933 if [ "$i" == "toolchains" ]; then continue; fi
934 grep -q $i /tmp/ftplist
935 if [ "$?" -ne "0" ]; then
936 echo -ne "$i"
937 ncftpput -u $FTP_CACHE_USER -p $FTP_CACHE_PASS $FTP_CACHE_URL $FTP_CACHE_PATH/ $i
938 if [ "$?" -ne "0" ]; then
939 beautify message FAIL
940 fi
941 fi
942 done
943 rm -f /tmp/ftplist
944 cd $PWD
945 exit 0
946 ;;
947 upload)
948 case "$2" in
949 iso)
950 echo -e "Uploading the iso to $FTP_ISO_PATH/$SVN_REVISION."
951 cat <<EOF > .ftp-commands
952 mkdir -p $FTP_ISO_PATH/$SVN_REVISION
953 ls -lah
954 quit
955 EOF
956 ncftp -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL < .ftp-commands
957 rm -f .ftp-commands
958 md5sum ipfire-$VERSION.$MACHINE-full.iso > ipfire-$VERSION.$MACHINE-full.iso.md5
959 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/ ipfire-$VERSION.$MACHINE-full.iso
960 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/ ipfire-$VERSION.$MACHINE-full.iso.md5
961 if [ -e ipfire-$VERSION.$MACHINE-devel.iso ]; then
962 md5sum ipfire-$VERSION.$MACHINE-devel.iso > ipfire-$VERSION.$MACHINE-devel.iso.md5
963 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/ ipfire-$VERSION.$MACHINE-devel.iso
964 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/ ipfire-$VERSION.$MACHINE-devel.iso.md5
965 fi
966 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/ ipfire-source-r$SVN_REVISION.tar.gz
967 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/ svn_status
968 if [ "$?" -eq "0" ]; then
969 echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $FTP_ISO_URL$FTP_ISO_PATH$SVN_REVISION/."
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 $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH/$SVN_REVISION/ ipfire-sources-cd-$VERSION.$MACHINE.iso
976 fi
977 ;;
978 paks)
979 cat <<EOF > .ftp-commands
980 mkdir -p $FTP_ISO_PATH/$SVN_REVISION/paks
981 ls -lah
982 quit
983 EOF
984 ncftp -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL < .ftp-commands
985 rm -f .ftp-commands
986 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/paks packages/*
987 if [ "$?" -eq "0" ]; then
988 echo -e "The packages were successfully uploaded to $FTP_ISO_URL$FTP_ISO_PATH$SVN_REVISION/."
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" = "--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 lang)
1035 update_langs
1036 ;;
1037 packages)
1038 case "$2" in
1039 sign)
1040 sign_packages
1041 ;;
1042 esac
1043 ;;
1044 "")
1045 clear
1046 svn info
1047 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"
1048 do
1049 case $name in
1050 "IPFIRE: Downloadsrc")
1051 $0 downloadsrc
1052 ;;
1053 "IPFIRE: Build (silent)")
1054 $0 build-silent
1055 ;;
1056 "IPFIRE: Watch Build")
1057 $0 watch
1058 ;;
1059 "IPFIRE: Batch")
1060 $0 batch
1061 ;;
1062 "IPFIRE: Clean")
1063 $0 clean
1064 ;;
1065 "SVN: Update")
1066 $0 svn update
1067 ;;
1068 "Help")
1069 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1070 cat doc/make.sh-usage
1071 ;;
1072 "LOG: Tail")
1073 tail -f log/_*
1074 ;;
1075 "Exit")
1076 break
1077 ;;
1078 esac
1079 done
1080 ;;
1081 config)
1082 make_config
1083 ;;
1084 *)
1085 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1086 cat doc/make.sh-usage
1087 ;;
1088 esac