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