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