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