]> git.ipfire.org Git - ipfire-2.x.git/blob - make.sh
Add forgotten Firewire HDD (sbp2 non smp-kernel) to core7
[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 hwdata
410 ipfiremake kudzu
411 ipfiremake logrotate
412 ipfiremake logwatch
413 ipfiremake misc-progs
414 ipfiremake nano
415 ipfiremake nasm
416 ipfiremake URI
417 ipfiremake HTML-Tagset
418 ipfiremake HTML-Parser
419 ipfiremake Compress-Zlib
420 ipfiremake Digest
421 ipfiremake Digest-SHA1
422 ipfiremake Digest-HMAC
423 ipfiremake libwww-perl
424 ipfiremake Net-DNS
425 ipfiremake Net-IPv4Addr
426 ipfiremake Net_SSLeay
427 ipfiremake IO-Stringy
428 ipfiremake Unix-Syslog
429 ipfiremake Mail-Tools
430 ipfiremake MIME-Tools
431 ipfiremake Net-Server
432 ipfiremake Convert-TNEF
433 ipfiremake Convert-UUlib
434 ipfiremake Archive-Tar
435 ipfiremake Archive-Zip
436 ipfiremake Text-Tabs+Wrap
437 ipfiremake Locale-Country
438 ipfiremake XML-Parser
439 ipfiremake glib
440 ipfiremake GeoIP
441 ipfiremake fwhits
442 ipfiremake noip_updater
443 ipfiremake ntp
444 ipfiremake openssh
445 ipfiremake openswan
446 ipfiremake rrdtool
447 ipfiremake setserial
448 ipfiremake setup
449 ipfiremake snort
450 ipfiremake oinkmaster
451 ipfiremake squid
452 ipfiremake squid-graph
453 ipfiremake squidguard
454 ipfiremake calamaris
455 ipfiremake tcpdump
456 ipfiremake traceroute
457 ipfiremake vlan
458 ipfiremake wireless
459 ipfiremake libsafe
460 ipfiremake pakfire
461 ipfiremake java
462 ipfiremake spandsp
463 ipfiremake lzo
464 ipfiremake openvpn
465 ipfiremake pammysql
466 ipfiremake cups
467 ipfiremake ghostscript
468 ipfiremake foomatic
469 ipfiremake hplip
470 ipfiremake samba
471 ipfiremake sudo
472 ipfiremake mc
473 ipfiremake wget
474 ipfiremake bridge-utils
475 ipfiremake screen
476 ipfiremake hddtemp
477 ipfiremake smartmontools
478 ipfiremake htop
479 ipfiremake postfix
480 ipfiremake fetchmail
481 ipfiremake cyrus-imapd
482 ipfiremake openmailadmin
483 ipfiremake clamav
484 ipfiremake spamassassin
485 ipfiremake amavisd
486 ipfiremake alsa
487 ipfiremake mpg123
488 ipfiremake mpfire
489 ipfiremake guardian
490 ipfiremake libid3tag
491 ipfiremake libmad
492 ipfiremake libogg
493 ipfiremake libvorbis
494 ipfiremake lame
495 ipfiremake sox
496 ipfiremake libshout
497 ipfiremake icecast
498 ipfiremake icegenerator
499 ipfiremake mpd
500 ipfiremake mpc
501 ipfiremake xvid
502 ipfiremake libmpeg2
503 ipfiremake videolan
504 ipfiremake libpri
505 ipfiremake asterisk
506 ipfiremake gnump3d
507 ipfiremake libsigc++
508 ipfiremake applejuice
509 ipfiremake ocaml
510 ipfiremake mldonkey
511 ipfiremake libtorrent
512 ipfiremake rtorrent
513 ipfiremake ipfireseeder
514 ipfiremake rsync
515 ipfiremake tcpwrapper
516 ipfiremake portmap
517 ipfiremake nfs
518 ipfiremake nmap
519 ipfiremake mbmon
520 ipfiremake ncftp
521 ipfiremake etherwake
522 ipfiremake bwm-ng
523 ipfiremake tripwire
524 ipfiremake sysstat
525 ipfiremake vsftpd
526 ipfiremake which
527 ipfiremake lsof
528 ipfiremake centerim
529 ipfiremake br2684ctl
530 ipfiremake pcmciautils
531 ipfiremake collectd
532 ipfiremake lcd4linux
533 ipfiremake neon
534 ipfiremake subversion
535 }
536
537 buildinstaller() {
538 # Run installer scripts one by one
539 LOGFILE="$BASEDIR/log/_build.installer.log"
540 export LOGFILE
541 ipfiremake syslinux
542 ipfiremake as86
543 ipfiremake mbr
544 ipfiremake memtest
545 installmake linux-libc-header
546 installmake binutils
547 ipfiremake uClibc PASS=1
548 ipfiremake gcc INST=1
549 installmake uClibc PASS=2
550 installmake gcc INST=2
551 installmake uClibc PASS=3
552 installmake busybox
553 installmake udev
554 installmake slang
555 installmake newt
556 installmake gettext
557 installmake kbd
558 installmake popt
559 installmake sysvinit
560 installmake misc-progs
561 installmake libaal
562 installmake reiser4progs
563 installmake reiserfsprogs
564 installmake sysfsutils
565 installmake util-linux
566 installmake pciutils
567 installmake zlib
568 installmake mtd
569 installmake wget
570 installmake hwdata
571 installmake kudzu
572 installmake pcmciautils
573 installmake installer
574 installmake initrd
575 }
576
577 buildpackages() {
578 LOGFILE="$BASEDIR/log/_build.packages.log"
579 export LOGFILE
580 echo "... see detailed log in _build.*.log files" >> $LOGFILE
581
582 installmake strip
583
584 # Generating list of packages used
585 echo -n "Generating packages list from logs" | tee -a $LOGFILE
586 rm -f $BASEDIR/doc/packages-list
587 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
588 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
589 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
590 fi
591 done
592 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
593 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
594 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
595 rm -f $BASEDIR/doc/packages-list
596 # packages-list.txt is ready to be displayed for wiki page
597 beautify message DONE
598
599 # Create images for install
600 ipfiremake cdrom ED=full
601
602 # Check if there is a loop device for building in virtual environments
603 if [ -e /dev/loop/0 ] || [ -e /dev/loop0 ]; then
604 ipfiremake usb-stick
605 fi
606 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz} $BASEDIR >> $LOGFILE 2>&1
607
608 ipfirepackages
609
610 # Cleanup
611 stdumount
612 rm -rf $BASEDIR/build/tmp/*
613
614 # Generating total list of files
615 echo -n "Generating files list from logs" | tee -a $LOGFILE
616 rm -f $BASEDIR/log/FILES
617 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
618 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
619 echo "##" >>$BASEDIR/log/FILES
620 echo "## `basename $i`" >>$BASEDIR/log/FILES
621 echo "##" >>$BASEDIR/log/FILES
622 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
623 fi
624 done
625 beautify message DONE
626
627 cd $PWD
628 }
629
630 ipfirepackages() {
631 ipfiremake core-updates
632 for i in $(ls -1 $BASEDIR/config/rootfiles/packages); do
633 if [ -e $BASEDIR/lfs/$i ]; then
634 ipfiredist $i
635 else
636 echo -n $i
637 beautify message SKIP
638 fi
639 done
640 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
641 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
642 rm -rf $BASEDIR/build/install/packages/*
643 }
644
645 # See what we're supposed to do
646 case "$1" in
647 build)
648 clear
649 BUILDMACHINE=`uname -m`
650 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
651 #only restore on a clean disk
652 if [ ! -f log/cleanup-toolchain-2-tools ]; then
653 if [ ! -n "$PACKAGE" ]; then
654 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
655 prepareenv
656 buildtoolchain
657 else
658 PACKAGENAME=${PACKAGE%.tar.gz}
659 beautify build_stage "Packaged toolchain compilation"
660 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
661 tar zxf $PACKAGE
662 prepareenv
663 else
664 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
665 fi
666 fi
667 else
668 echo -n "Using installed toolchain" | tee -a $LOGFILE
669 beautify message SKIP
670 prepareenv
671 fi
672
673 beautify build_start
674 beautify build_stage "Building LFS"
675 buildbase
676
677 beautify build_stage "Building IPFire"
678 buildipfire
679
680 # Setzen des IPFire Builds
681 if [ "$SVN_REVISION" ]; then
682 echo "$SVN_REVISION" > $BASEDIR/build/var/ipfire/firebuild
683 else
684 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
685 fi
686
687 beautify build_stage "Building installer"
688 buildinstaller
689
690 beautify build_stage "Building packages"
691 buildpackages
692 beautify build_end
693 ;;
694 shell)
695 # enter a shell inside LFS chroot
696 # may be used to changed kernel settings
697 prepareenv
698 entershell
699 ;;
700 changelog)
701 echo -n "Loading new Changelog from SVN: "
702 svn log http://svn.ipfire.org/svn/ipfire > doc/ChangeLog
703 beautify message DONE
704 ;;
705 clean)
706 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
707 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
708 $LOSETUP -d $i 2>/dev/null
709 done
710 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
711 umount $i
712 done
713 stdumount
714 for i in `seq 0 7`; do
715 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
716 umount /dev/loop${i} 2>/dev/null;
717 losetup -d /dev/loop${i} 2>/dev/null;
718 fi;
719 done
720 rm -rf $BASEDIR/build
721 rm -rf $BASEDIR/cdrom
722 rm -rf $BASEDIR/packages
723 rm -rf $BASEDIR/log
724 if [ -h /tools ]; then
725 rm -f /tools
726 fi
727 beautify message DONE
728 ;;
729 downloadsrc)
730 if [ ! -d $BASEDIR/cache ]; then
731 mkdir $BASEDIR/cache
732 fi
733 mkdir -p $BASEDIR/log
734 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
735 FINISHED=0
736 cd $BASEDIR/lfs
737 for c in `seq $MAX_RETRIES`; do
738 if (( FINISHED==1 )); then
739 break
740 fi
741 FINISHED=1
742 cd $BASEDIR/lfs
743 for i in *; do
744 if [ -f "$i" -a "$i" != "Config" ]; then
745 echo -ne "Loading $i"
746 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
747 if [ $? -ne 0 ]; then
748 beautify message FAIL
749 FINISHED=0
750 else
751 if [ $c -eq 1 ]; then
752 beautify message DONE
753 fi
754 fi
755 fi
756 done
757 done
758 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
759 ERROR=0
760 for i in *; do
761 if [ -f "$i" -a "$i" != "Config" ]; then
762 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
763 if [ $? -ne 0 ]; then
764 echo -ne "MD5 difference in lfs/$i"
765 beautify message FAIL
766 ERROR=1
767 fi
768 fi
769 done
770 if [ $ERROR -eq 0 ]; then
771 echo -ne "${BOLD}all files md5sum match${NORMAL}"
772 beautify message DONE
773 else
774 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
775 beautify message FAIL
776 fi
777 cd - >/dev/null 2>&1
778 ;;
779 toolchain)
780 clear
781 prepareenv
782 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
783 buildtoolchain
784 BUILDMACHINE=`uname -m`
785 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
786 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
787 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
788 build/{bin,etc,usr/bin,usr/local} \
789 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
790 log >> $LOGFILE
791 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
792 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
793 stdumount
794 ;;
795 gettoolchain)
796 BUILDMACHINE=`uname -m`
797 # arbitrary name to be updated in case of new toolchain package upload
798 PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
799 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
800 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
801 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
802 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
803 cd $BASEDIR/cache/toolchains
804 wget $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
805 if [ $? -ne 0 ]; then
806 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
807 else
808 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
809 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
810 else
811 exiterror "$PACKAGE.md5 did not match, check downloaded package"
812 fi
813 fi
814 else
815 echo "Toolchain is already downloaded. Exiting..."
816 fi
817 ;;
818 othersrc)
819 prepareenv
820 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
821 chroot $LFS /tools/bin/env -i HOME=/root \
822 TERM=$TERM PS1='\u:\w\$ ' \
823 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
824 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
825 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
826 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
827 if [ $? -eq "0" ]; then
828 beautify message DONE
829 else
830 beautify message FAIL
831 fi
832 stdumount
833 ;;
834 svn)
835 case "$2" in
836 update|up)
837 # clear
838 echo -ne "Loading the latest source files...\n"
839 if [ $3 ]; then
840 svn update -r $3 | tee -a $PWD/log/_build.svn.update.log
841 else
842 svn update | tee -a $PWD/log/_build.svn.update.log
843 fi
844 if [ $? -eq "0" ]; then
845 beautify message DONE
846 else
847 beautify message FAIL
848 exit 1
849 fi
850 echo -ne "Writing the svn-info to a file"
851 svn info > $PWD/svn_status
852 if [ $? -eq "0" ]; then
853 beautify message DONE
854 else
855 beautify message FAIL
856 exit 1
857 fi
858 chmod 755 $0
859 exit 0
860 ;;
861 commit|ci)
862 clear
863 if [ -f /usr/bin/mcedit ]; then
864 export EDITOR=/usr/bin/mcedit
865 fi
866 if [ -f /usr/bin/nano ]; then
867 export EDITOR=/usr/bin/nano
868 fi
869 echo -ne "Selecting editor $EDITOR..."
870 beautify message DONE
871 if [ -e /sbin/yast ]; then
872 if [ "`echo $SVN_REVISION | cut -c 3`" -eq "0" ]; then
873 $0 changelog
874 fi
875 fi
876 update_langs
877 svn commit
878 $0 svn up
879 if [ -n "$FTP_CACHE_URL" ]; then
880 $0 uploadsrc
881 fi
882 ;;
883 dist)
884 if [ $3 ]; then
885 SVN_REVISION=$3
886 fi
887 if [ -f ipfire-source-r$SVN_REVISION.tar.gz ]; then
888 echo -ne "REV $SVN_REVISION: SKIPPED!\n"
889 exit 0
890 fi
891 echo -en "REV $SVN_REVISION: Downloading..."
892 svn export http://svn.ipfire.org/svn/ipfire/trunk ipfire-source/ --force > /dev/null
893 svn log http://svn.ipfire.org/svn/ipfire/trunk -r 1:$SVN_REVISION > ipfire-source/Changelog
894 #svn info http://svn.ipfire.org/svn/ipfire/trunk -r $SVN_REVISION > ipfire-source/svn_status
895 evaluate 1
896
897 echo -en "REV $SVN_REVISION: Compressing files..."
898 if [ -e ipfire-source/trunk/make.sh ]; then
899 chmod 755 ipfire-source/trunk/make.sh
900 fi
901 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
902 evaluate 1
903 echo -en "REV $SVN_REVISION: Cleaning up..."
904 rm ipfire-source/ -r
905 evaluate 1
906 ;;
907 diff|di)
908 update_langs
909 echo -ne "Make a local diff to last svn revision"
910 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
911 evaluate 1
912 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
913 svn status
914 ;;
915 esac
916 ;;
917 uploadsrc)
918 PWD=`pwd`
919 cd $BASEDIR/cache/
920 echo -e "Uploading cache to ftp server:"
921 ncftpls -u $FTP_CACHE_USER -p $FTP_CACHE_PASS ftp://$FTP_CACHE_URL/$FTP_CACHE_PATH/ > /tmp/ftplist
922 for i in *; do
923 if [ "$(basename $i)" == "toolchains" ]; then continue; fi
924 grep -q $(basename $i) /tmp/ftplist
925 if [ "$?" -ne "0" ]; then
926 echo -ne "$(basename $i)"
927 ncftpput -u $FTP_CACHE_USER -p $FTP_CACHE_PASS $FTP_CACHE_URL $FTP_CACHE_PATH/ $(basename $i)
928 if [ "$?" -ne "0" ]; then
929 beautify message FAIL
930 fi
931 fi
932 done
933 rm -f /tmp/ftplist
934 cd $PWD
935 exit 0
936 ;;
937 upload)
938 FTP_ISO_PORT=`echo "$FTP_ISO_URL" | awk -F: '{ print $2 }'`
939 FTP_ISO_URL=`echo "$FTP_ISO_URL" | awk -F: '{ print $1 }'`
940 if [ -z $FTP_ISO_PORT ]; then
941 FTP_ISO_PORT=21
942 fi
943 cat <<EOF > .ftp-commands
944 mkdir -p $FTP_ISO_PATH$SVN_REVISION
945 mkdir -p $FTP_ISO_PATH$SVN_REVISION/paks
946 quit
947 EOF
948 ncftp -u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL < .ftp-commands
949 rm -f .ftp-commands
950
951 case "$2" in
952 iso)
953 echo -e "Uploading the iso to $FTP_ISO_PATH/$SVN_REVISION."
954
955 md5sum ipfire-$VERSION.$MACHINE-full.iso > ipfire-$VERSION.$MACHINE-full.iso.md5
956 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
957 if [ -e "$i" ]; then
958 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/ $i
959 if [ "$?" -eq "0" ]; then
960 echo "The file with name $i was successfully uploaded to $FTP_ISO_URL$FTP_ISO_PATH$SVN_REVISION/."
961 else
962 echo "There was an error while uploading the file $i to the ftp server."
963 exit 1
964 fi
965 fi
966 done
967 rm -f ipfire-$VERSION.$MACHINE-full.iso.md5
968 if [ "$3" = "--with-sources-cd" ]; then
969 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
970 fi
971 ;;
972 paks)
973 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/paks packages/*
974 if [ "$?" -eq "0" ]; then
975 echo -e "The packages were successfully uploaded to $FTP_ISO_URL$FTP_ISO_PATH$SVN_REVISION/."
976 else
977 echo -e "There was an error while uploading the packages to the ftp server."
978 exit 1
979 fi
980 ;;
981 esac
982 ;;
983 batch)
984 if [ "$2" = "--background" ]; then
985 batch_script
986 exit $?
987 fi
988 if [ `screen -ls | grep -q ipfire` ]; then
989 echo "Build is already running, sorry!"
990 exit 1
991 else
992 if [ "$2" = "--rebuild" ]; then
993 export IPFIRE_REBUILD=1
994 echo "REBUILD!"
995 else
996 export IPFIRE_REBUILD=0
997 fi
998 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
999 screen -dmS ipfire $0 batch --background
1000 evaluate 1
1001 exit 0
1002 fi
1003 ;;
1004 watch)
1005 watch_screen
1006 ;;
1007 pxe)
1008 case "$2" in
1009 start)
1010 start_tftpd
1011 ;;
1012 stop)
1013 stop_tftpd
1014 ;;
1015 reload|restart)
1016 reload_tftpd
1017 ;;
1018 esac
1019 exit 0
1020 ;;
1021 lang)
1022 update_langs
1023 ;;
1024 "")
1025 clear
1026 svn info
1027 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"
1028 do
1029 case $name in
1030 "IPFIRE: Downloadsrc")
1031 $0 downloadsrc
1032 ;;
1033 "IPFIRE: Build (silent)")
1034 $0 build-silent
1035 ;;
1036 "IPFIRE: Watch Build")
1037 $0 watch
1038 ;;
1039 "IPFIRE: Batch")
1040 $0 batch
1041 ;;
1042 "IPFIRE: Clean")
1043 $0 clean
1044 ;;
1045 "SVN: Update")
1046 $0 svn update
1047 ;;
1048 "Help")
1049 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1050 cat doc/make.sh-usage
1051 ;;
1052 "LOG: Tail")
1053 tail -f log/_*
1054 ;;
1055 "Exit")
1056 break
1057 ;;
1058 esac
1059 done
1060 ;;
1061 config)
1062 make_config
1063 ;;
1064 *)
1065 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1066 cat doc/make.sh-usage
1067 ;;
1068 esac