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