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