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