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