Rootfile update.
[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 IPFVER="full" # Which versions should be compiled? (full|devel)
42
43 BUILDMACHINE=$MACHINE
44 if [ "$MACHINE" = "x86_64" ]; then
45 BUILDMACHINE="i686";
46 linux32="linux32";
47 fi
48
49
50 # Debian specific settings
51 if [ ! -e /etc/debian_version ]; then
52 FULLPATH=`which $0`
53 else
54 if [ -x /usr/bin/realpath ]; then
55 FULLPATH=`/usr/bin/realpath $0`
56 else
57 echo "ERROR: Need to do apt-get install realpath"
58 exit 1
59 fi
60 fi
61
62 PWD=`pwd`
63 BASENAME=`basename $0`
64 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
65 LOGFILE=$BASEDIR/log/_build.preparation.log
66 export BASEDIR LOGFILE
67 DIR_CHK=$BASEDIR/cache/check
68 mkdir $BASEDIR/log/ 2>/dev/null
69
70 # Include funtions
71 . tools/make-functions
72
73 if [ -f .config ]; then
74 . .config
75 else
76 echo -e "${BOLD}No configuration found!${NORMAL}"
77 echo -ne "Do you want to create one (y/N)?"
78 read CREATE_CONFIG
79 echo ""
80 if [ "$CREATE_CONFIG" == "y" ]; then
81 make_config
82 fi
83 fi
84
85 if [ -z $EDITOR ]; then
86 for i in nano emacs vi; do
87 EDITOR=$(which $i 2>/dev/null)
88 if ! [ -z $EDITOR ]; then
89 export EDITOR=$EDITOR
90 break
91 fi
92 done
93 [ -z $EDITOR ] && exiterror "You should have installed an editor."
94 fi
95
96 prepareenv() {
97 ############################################################################
98 # #
99 # Are we running the right shell? #
100 # #
101 ############################################################################
102 if [ ! "$BASH" ]; then
103 exiterror "BASH environment variable is not set. You're probably running the wrong shell."
104 fi
105
106 if [ -z "${BASH_VERSION}" ]; then
107 exiterror "Not running BASH shell."
108 fi
109
110
111 ############################################################################
112 # #
113 # Trap on emergency exit #
114 # #
115 ############################################################################
116 trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
117
118
119 ############################################################################
120 # #
121 # Resetting our nice level #
122 # #
123 ############################################################################
124 echo -ne "Resetting our nice level to $NICE" | tee -a $LOGFILE
125 renice $NICE $$ > /dev/null
126 if [ `nice` != "$NICE" ]; then
127 beautify message FAIL
128 exiterror "Failed to set correct nice level"
129 else
130 beautify message DONE
131 fi
132
133
134 ############################################################################
135 # #
136 # Checking if running as root user #
137 # #
138 ############################################################################
139 echo -ne "Checking if we're running as root user" | tee -a $LOGFILE
140 if [ `id -u` != 0 ]; then
141 beautify message FAIL
142 exiterror "Not building as root"
143 else
144 beautify message DONE
145 fi
146
147
148 ############################################################################
149 # #
150 # Checking for necessary temporary space #
151 # #
152 ############################################################################
153 echo -ne "Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
154 BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
155 BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
156 if (( 2048000 > $BASE_ASPACE )); then
157 BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
158 if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
159 beautify message FAIL
160 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
161 fi
162 else
163 beautify message DONE
164 fi
165
166 ############################################################################
167 # #
168 # Building Linux From Scratch system #
169 # #
170 ############################################################################
171 # Set umask
172 umask 022
173
174 # Set LFS Directory
175 LFS=$BASEDIR/build
176
177 # Check /tools symlink
178 if [ -h /tools ]; then
179 rm -f /tools
180 fi
181 if [ ! -a /tools ]; then
182 ln -s $BASEDIR/build/tools /
183 fi
184 if [ ! -h /tools ]; then
185 exiterror "Could not create /tools symbolic link."
186 fi
187
188 # Setup environment
189 set +h
190 LC_ALL=POSIX
191 if [ -z $MAKETUNING ]; then
192 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
240 buildtoolchain() {
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 strip
290 lfsmake1 cleanup-toolchain PASS=2
291 export PATH=$ORG_PATH
292 }
293
294 buildbase() {
295 LOGFILE="$BASEDIR/log/_build.base.log"
296 export LOGFILE
297 lfsmake2 stage2
298 if [ "${MACHINE_TYPE}" = "arm" ]; then
299 lfsmake2 linux HEADERS=1
300 else
301 lfsmake2 linux-libc-header
302 fi
303 lfsmake2 man-pages
304 lfsmake2 glibc
305 lfsmake2 cleanup-toolchain PASS=3
306 lfsmake2 binutils
307 lfsmake2 gcc
308 lfsmake2 berkeley
309 lfsmake2 coreutils
310 lfsmake2 iana-etc
311 lfsmake2 m4
312 lfsmake2 bison
313 lfsmake2 ncurses
314 lfsmake2 procps
315 lfsmake2 sed
316 lfsmake2 libtool
317 lfsmake2 perl
318 lfsmake2 readline
319 lfsmake2 zlib
320 lfsmake2 autoconf
321 lfsmake2 automake
322 lfsmake2 bash
323 lfsmake2 bzip2
324 lfsmake2 diffutils
325 lfsmake2 e2fsprogs
326 lfsmake2 ed
327 lfsmake2 file
328 lfsmake2 findutils
329 lfsmake2 flex
330 lfsmake2 gawk
331 lfsmake2 gettext
332 lfsmake2 grep
333 lfsmake2 groff
334 lfsmake2 gzip
335 lfsmake2 inetutils
336 lfsmake2 iproute2
337 lfsmake2 kbd
338 lfsmake2 less
339 lfsmake2 libaal
340 lfsmake2 make
341 lfsmake2 man
342 lfsmake2 mktemp
343 lfsmake2 module-init-tools
344 lfsmake2 net-tools
345 lfsmake2 patch
346 lfsmake2 psmisc
347 lfsmake2 reiser4progs
348 lfsmake2 shadow
349 lfsmake2 sysklogd
350 lfsmake2 sysvinit
351 lfsmake2 tar
352 lfsmake2 texinfo
353 lfsmake2 udev
354 lfsmake2 util-linux
355 lfsmake2 vim
356 lfsmake2 grub
357 }
358
359 buildipfire() {
360 LOGFILE="$BASEDIR/log/_build.ipfire.log"
361 export LOGFILE
362 ipfiremake configroot
363 ipfiremake backup
364 ipfiremake dhcp
365 ipfiremake dhcpcd
366 ipfiremake libusb
367 ipfiremake libpcap
368 ipfiremake ppp
369 ipfiremake pptp
370 ipfiremake unzip
371 ipfiremake which
372 ipfiremake xz
373 ipfiremake linux-firmware
374 ipfiremake zd1211-firmware
375 ipfiremake u-boot
376
377 # The xen and PAE kernels are only available for x86
378 if [ "${MACHINE_TYPE}" != "arm" ]; then
379 ipfiremake linux XEN=1
380 ipfiremake kqemu XEN=1
381 ipfiremake v4l-dvb XEN=1
382 ipfiremake madwifi XEN=1
383 ipfiremake mISDN XEN=1
384 ipfiremake dahdi XEN=1 KMOD=1
385 ipfiremake cryptodev XEN=1
386 ipfiremake compat-wireless XEN=1
387 ipfiremake r8169 XEN=1
388 ipfiremake r8168 XEN=1
389 ipfiremake r8101 XEN=1
390 ipfiremake e1000 XEN=1
391 ipfiremake e1000e XEN=1
392 ipfiremake igb XEN=1
393 ipfiremake linux PAE=1
394 ipfiremake kqemu PAE=1
395 ipfiremake kvm-kmod PAE=1
396 ipfiremake v4l-dvb PAE=1
397 ipfiremake madwifi PAE=1
398 ipfiremake alsa PAE=1 KMOD=1
399 ipfiremake mISDN PAE=1
400 ipfiremake dahdi PAE=1 KMOD=1
401 ipfiremake cryptodev PAE=1
402 ipfiremake compat-wireless PAE=1
403 # ipfiremake r8169 PAE=1
404 # ipfiremake r8168 PAE=1
405 # ipfiremake r8101 PAE=1
406 ipfiremake e1000 PAE=1
407 ipfiremake e1000e PAE=1
408 ipfiremake igb PAE=1
409 fi
410
411 # Default kernel build
412 ipfiremake linux
413 ipfiremake v4l-dvb
414 ipfiremake kqemu
415 ipfiremake kvm-kmod
416 ipfiremake madwifi
417 if [ "${MACHINE_TYPE}" != "arm" ]; then
418 #todo enable alsa driver in kernel config
419 ipfiremake alsa KMOD=1
420 fi
421 #undefined declaration in echo canceler try to fix later
422 ipfiremake mISDN
423 ipfiremake dahdi KMOD=1
424 ipfiremake cryptodev
425 ipfiremake compat-wireless
426 # ipfiremake r8169
427 # ipfiremake r8168
428 # ipfiremake r8101
429 ipfiremake e1000
430 ipfiremake e1000e
431 ipfiremake igb
432 ipfiremake pkg-config
433 ipfiremake linux-atm
434 ipfiremake cpio
435 ipfiremake dracut
436 ipfiremake expat
437 ipfiremake gdbm
438 ipfiremake gmp
439 ipfiremake pam
440 ipfiremake openssl
441 ipfiremake curl
442 ipfiremake tcl
443 ipfiremake sqlite
444 ipfiremake python
445 ipfiremake fireinfo
446 ipfiremake libnet
447 ipfiremake libnl
448 ipfiremake libidn
449 ipfiremake libjpeg
450 ipfiremake libpng
451 ipfiremake libtiff
452 ipfiremake libart
453 ipfiremake freetype
454 ipfiremake gd
455 ipfiremake popt
456 ipfiremake pcre
457 ipfiremake slang
458 ipfiremake newt
459 ipfiremake attr
460 ipfiremake acl
461 ipfiremake libcap
462 ipfiremake pciutils
463 ipfiremake usbutils
464 ipfiremake libxml2
465 ipfiremake libxslt
466 ipfiremake BerkeleyDB
467 ipfiremake mysql
468 ipfiremake cyrus-sasl
469 ipfiremake openldap
470 ipfiremake apache2
471 ipfiremake php
472 ipfiremake apache2 PASS=C
473 ipfiremake arping
474 ipfiremake beep
475 ipfiremake bind
476 ipfiremake dvdrtools
477 ipfiremake dnsmasq
478 ipfiremake dosfstools
479 ipfiremake reiserfsprogs
480 ipfiremake xfsprogs
481 ipfiremake sysfsutils
482 ipfiremake fuse
483 ipfiremake ntfs-3g
484 ipfiremake ethtool
485 ipfiremake ez-ipupdate
486 ipfiremake fcron
487 ipfiremake perl-GD
488 ipfiremake GD-Graph
489 ipfiremake GD-TextUtil
490 ipfiremake gnupg
491 ipfiremake hdparm
492 ipfiremake sdparm
493 ipfiremake mtools
494 ipfiremake initscripts
495 ipfiremake whatmask
496 ipfiremake iptables
497 ipfiremake libupnp
498 ipfiremake ipaddr
499 ipfiremake iptstate
500 ipfiremake iputils
501 ipfiremake l7-protocols
502 ipfiremake mISDNuser
503 ipfiremake capi4k-utils
504 ipfiremake hwdata
505 ipfiremake kudzu
506 ipfiremake logrotate
507 ipfiremake logwatch
508 ipfiremake misc-progs
509 ipfiremake nano
510 ipfiremake nasm
511 ipfiremake URI
512 ipfiremake HTML-Tagset
513 ipfiremake HTML-Parser
514 ipfiremake Compress-Zlib
515 ipfiremake Digest
516 ipfiremake Digest-SHA1
517 ipfiremake Digest-HMAC
518 ipfiremake libwww-perl
519 ipfiremake Net-DNS
520 ipfiremake Net-IPv4Addr
521 ipfiremake Net_SSLeay
522 ipfiremake IO-Stringy
523 ipfiremake Unix-Syslog
524 ipfiremake Mail-Tools
525 ipfiremake MIME-Tools
526 ipfiremake Net-Server
527 ipfiremake Convert-TNEF
528 ipfiremake Convert-UUlib
529 ipfiremake Archive-Tar
530 ipfiremake Archive-Zip
531 ipfiremake Text-Tabs+Wrap
532 ipfiremake Locale-Country
533 ipfiremake XML-Parser
534 ipfiremake python-setuptools
535 ipfiremake python-clientform
536 ipfiremake python-mechanize
537 ipfiremake python-feedparser
538 ipfiremake python-rssdler
539 ipfiremake glib
540 ipfiremake GeoIP
541 ipfiremake fwhits
542 ipfiremake noip_updater
543 ipfiremake ntp
544 ipfiremake openssh
545 ipfiremake rrdtool
546 ipfiremake setserial
547 ipfiremake setup
548 ipfiremake libdnet
549 ipfiremake daq
550 ipfiremake snort
551 ipfiremake oinkmaster
552 ipfiremake squid
553 ipfiremake squidguard
554 ipfiremake calamaris
555 ipfiremake tcpdump
556 ipfiremake traceroute
557 ipfiremake vlan
558 ipfiremake wireless
559 ipfiremake libsafe
560 ipfiremake pakfire
561 ipfiremake spandsp
562 ipfiremake lzo
563 ipfiremake openvpn
564 ipfiremake pammysql
565 ipfiremake cups
566 ipfiremake ghostscript
567 ipfiremake foomatic
568 ipfiremake hplip
569 ipfiremake samba
570 ipfiremake sudo
571 ipfiremake mc
572 ipfiremake wget
573 ipfiremake bridge-utils
574 ipfiremake screen
575 ipfiremake hddtemp
576 ipfiremake smartmontools
577 ipfiremake htop
578 ipfiremake postfix
579 ipfiremake fetchmail
580 ipfiremake cyrus-imapd
581 ipfiremake openmailadmin
582 ipfiremake clamav
583 ipfiremake spamassassin
584 ipfiremake amavisd
585 ipfiremake alsa
586 ipfiremake mpfire
587 ipfiremake guardian
588 ipfiremake libid3tag
589 ipfiremake libmad
590 ipfiremake libogg
591 ipfiremake libvorbis
592 ipfiremake libdvbpsi
593 ipfiremake lame
594 ipfiremake sox
595 ipfiremake libshout
596 ipfiremake xvid
597 ipfiremake libmpeg2
598 ipfiremake cmake
599 ipfiremake gnump3d
600 ipfiremake libsigc++
601 ipfiremake applejuice
602 ipfiremake libtorrent
603 ipfiremake rtorrent
604 ipfiremake ipfireseeder
605 ipfiremake rsync
606 ipfiremake tcpwrapper
607 ipfiremake libevent
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 echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
724 cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
725 echo >> $BASEDIR/build/var/ipfire/firebuild
726 git log -1 >> $BASEDIR/build/var/ipfire/firebuild
727 echo >> $BASEDIR/build/var/ipfire/firebuild
728 git status >> $BASEDIR/build/var/ipfire/firebuild
729 echo >> $BASEDIR/build/var/ipfire/firebuild
730 cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
731 echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
732 if [ "$GIT_BRANCH" = "next" ]; then
733 echo "$NAME $VERSION - (Development Build: $GIT_LASTCOMMIT)" > $BASEDIR/build/etc/system-release
734 else
735 echo "$NAME $VERSION - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
736 fi
737 }
738
739 buildinstaller() {
740 # Run installer scripts one by one
741 LOGFILE="$BASEDIR/log/_build.installer.log"
742 export LOGFILE
743 ipfiremake as86
744 ipfiremake mbr
745 ipfiremake memtest
746 ipfiremake installer
747 cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
748 installmake strip
749 ipfiremake initrd
750 }
751
752 buildpackages() {
753 LOGFILE="$BASEDIR/log/_build.packages.log"
754 export LOGFILE
755 echo "... see detailed log in _build.*.log files" >> $LOGFILE
756
757
758 # Generating list of packages used
759 echo -n "Generating packages list from logs" | tee -a $LOGFILE
760 rm -f $BASEDIR/doc/packages-list
761 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
762 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
763 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
764 fi
765 done
766 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
767 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
768 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
769 rm -f $BASEDIR/doc/packages-list
770 # packages-list.txt is ready to be displayed for wiki page
771 beautify message DONE
772
773 # Update changelog
774 cd $BASEDIR
775 $0 git log
776
777 # Create images for install
778 ipfiremake cdrom ED=$IPFVER
779
780 # Check if there is a loop device for building in virtual environments
781 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
782 if [ "${MACHINE_TYPE}" != "arm" ]; then
783 ipfiremake usb-stick ED=$IPFVER
784 fi
785 ipfiremake flash-images ED=$IPFVER
786 fi
787
788 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
789
790 ipfirepackages
791
792 # Check if there is a loop device for building in virtual environments
793 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]) && [ "${MACHINE_TYPE}" != "arm" ]; then
794 cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
795 cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
796 ipfiremake xen-image ED=$IPFVER
797 rm -rf $LFS/install/packages/linux-xen-*.ipfire
798 rm -rf $LFS/install/packages/meta-linux-xen
799 fi
800 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
801
802 cd $BASEDIR
803 for i in `ls *.bz2 *.img.gz *.iso`; do
804 md5sum $i > $i.md5
805 done
806 cd $PWD
807
808 # Cleanup
809 stdumount
810 rm -rf $BASEDIR/build/tmp/*
811
812 # Generating total list of files
813 echo -n "Generating files list from logs" | tee -a $LOGFILE
814 rm -f $BASEDIR/log/FILES
815 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
816 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
817 echo "##" >>$BASEDIR/log/FILES
818 echo "## `basename $i`" >>$BASEDIR/log/FILES
819 echo "##" >>$BASEDIR/log/FILES
820 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
821 fi
822 done
823 beautify message DONE
824
825 cd $PWD
826 }
827
828 ipfirepackages() {
829 ipfiremake core-updates
830
831 local i
832 for i in $(find $BASEDIR/config/rootfiles/packages{${machine},} -maxdepth 1 -type f); do
833 i=$(basename ${i})
834 if [ -e $BASEDIR/lfs/$i ]; then
835 ipfiredist $i
836 else
837 echo -n $i
838 beautify message SKIP
839 fi
840 done
841 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
842 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
843 rm -rf $BASEDIR/build/install/packages/*
844 }
845
846 # See what we're supposed to do
847 case "$1" in
848 build)
849 clear
850 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
851 #only restore on a clean disk
852 if [ ! -f log/cleanup-toolchain-2-tools ]; then
853 if [ ! -n "$PACKAGE" ]; then
854 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
855 prepareenv
856 buildtoolchain
857 else
858 PACKAGENAME=${PACKAGE%.tar.gz}
859 beautify build_stage "Packaged toolchain compilation"
860 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
861 tar zxf $PACKAGE
862 prepareenv
863 else
864 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
865 fi
866 fi
867 else
868 echo -n "Using installed toolchain" | tee -a $LOGFILE
869 beautify message SKIP
870 prepareenv
871 fi
872
873 beautify build_start
874 beautify build_stage "Building LFS"
875 buildbase
876
877 beautify build_stage "Building IPFire"
878 buildipfire
879
880 beautify build_stage "Building installer"
881 buildinstaller
882
883 beautify build_stage "Building packages"
884 buildpackages
885
886 beautify build_stage "Checking Logfiles for new Files"
887
888 cd $BASEDIR
889 tools/checknewlog.pl
890 cd $PWD
891
892 beautify build_end
893 ;;
894 shell)
895 # enter a shell inside LFS chroot
896 # may be used to changed kernel settings
897 prepareenv
898 entershell
899 ;;
900 clean)
901 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
902 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
903 $LOSETUP -d $i 2>/dev/null
904 done
905 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
906 umount $i
907 done
908 stdumount
909 for i in `seq 0 7`; do
910 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
911 umount /dev/loop${i} 2>/dev/null;
912 losetup -d /dev/loop${i} 2>/dev/null;
913 fi;
914 done
915 rm -rf $BASEDIR/build
916 rm -rf $BASEDIR/cdrom
917 rm -rf $BASEDIR/packages
918 rm -rf $BASEDIR/log
919 if [ -h /tools ]; then
920 rm -f /tools
921 fi
922 rm -f $BASEDIR/ipfire-*
923 beautify message DONE
924 ;;
925 downloadsrc)
926 if [ ! -d $BASEDIR/cache ]; then
927 mkdir $BASEDIR/cache
928 fi
929 mkdir -p $BASEDIR/log
930 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
931 FINISHED=0
932 cd $BASEDIR/lfs
933 for c in `seq $MAX_RETRIES`; do
934 if (( FINISHED==1 )); then
935 break
936 fi
937 FINISHED=1
938 cd $BASEDIR/lfs
939 for i in *; do
940 if [ -f "$i" -a "$i" != "Config" ]; then
941 lfsmakecommoncheck ${i} || continue
942
943 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
944 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
945 if [ $? -ne 0 ]; then
946 beautify message FAIL
947 FINISHED=0
948 else
949 if [ $c -eq 1 ]; then
950 beautify message DONE
951 fi
952 fi
953 fi
954 done
955 done
956 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
957 ERROR=0
958 for i in *; do
959 if [ -f "$i" -a "$i" != "Config" ]; then
960 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
961 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
962 if [ $? -ne 0 ]; then
963 echo -ne "MD5 difference in lfs/$i"
964 beautify message FAIL
965 ERROR=1
966 fi
967 fi
968 done
969 if [ $ERROR -eq 0 ]; then
970 echo -ne "${BOLD}all files md5sum match${NORMAL}"
971 beautify message DONE
972 else
973 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
974 beautify message FAIL
975 fi
976 cd - >/dev/null 2>&1
977 ;;
978 toolchain)
979 clear
980 prepareenv
981 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
982 buildtoolchain
983 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
984 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
985 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
986 build/{bin,etc,usr/bin,usr/local} \
987 build/tools/{bin,etc,*-linux-gnu*,include,lib,libexec,sbin,share,var} \
988 log >> $LOGFILE
989 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
990 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
991 stdumount
992 ;;
993 gettoolchain)
994 # arbitrary name to be updated in case of new toolchain package upload
995 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
996 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
997 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
998 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
999 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1000 cd $BASEDIR/cache/toolchains
1001 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1002 if [ $? -ne 0 ]; then
1003 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1004 else
1005 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1006 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1007 else
1008 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1009 fi
1010 fi
1011 else
1012 echo "Toolchain is already downloaded. Exiting..."
1013 fi
1014 ;;
1015 othersrc)
1016 prepareenv
1017 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1018 chroot $LFS /tools/bin/env -i HOME=/root \
1019 TERM=$TERM PS1='\u:\w\$ ' \
1020 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1021 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1022 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1023 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1024 if [ $? -eq "0" ]; then
1025 beautify message DONE
1026 else
1027 beautify message FAIL
1028 fi
1029 stdumount
1030 ;;
1031 git)
1032 case "$2" in
1033 update|up)
1034 ## REMOVES ALL UNCOMMITTED CHANGES!
1035 [ "$3" == "--force" ] && git checkout -f
1036 git pull
1037 ;;
1038 commit|ci)
1039 shift 2
1040 git commit $*
1041
1042 [ "$?" -eq "0" ] || exiterror "git commit $* failed."
1043
1044 echo -e "${BOLD}Do you want to push, too? [y/N]${NORMAL}"
1045 read
1046 [ -z $REPLY ] && exit 0
1047 for i in y Y j J; do
1048 if [ "$i" == "$REPLY" ]; then
1049 $0 git push
1050 exit $?
1051 fi
1052 done
1053 exiterror "\"$REPLY\" is not a valid answer."
1054 ;;
1055 dist)
1056 git archive HEAD | gzip -9 > ${SNAME}-${VERSION}.tar.gz
1057 ;;
1058 diff|di)
1059 echo -ne "Make a local diff to last revision"
1060 git diff HEAD > ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff
1061 evaluate 1
1062 echo "Diff was successfully saved to ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff"
1063 git diff --stat
1064 ;;
1065 push)
1066 [ -z $GIT_USER ] && exiterror "You have to setup GIT_USER first."
1067 GIT_URL="ssh://${GIT_USER}@git.ipfire.org/pub/git/ipfire-2.x"
1068
1069 git push ${GIT_URL} $3
1070 ;;
1071 log)
1072 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
1073 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
1074
1075 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
1076 ;;
1077 esac
1078 ;;
1079 uploadsrc)
1080 PWD=`pwd`
1081 if [ -z $IPFIRE_USER ]; then
1082 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1083 beautify message FAIL
1084 exit 1
1085 fi
1086
1087 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1088 REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1089
1090 cd $BASEDIR/cache/
1091 for file in $(ls -1 --ignore=toolchains); do
1092 grep -q "$file" <<<$REMOTE_FILES && continue
1093 NEW_FILES="$NEW_FILES $file"
1094 done
1095 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1096 cd $BASEDIR
1097 cd $PWD
1098 exit 0
1099 ;;
1100 batch)
1101 if [ "$2" = "--background" ]; then
1102 batch_script
1103 exit $?
1104 fi
1105 if [ `screen -ls | grep -q ipfire` ]; then
1106 echo "Build is already running, sorry!"
1107 exit 1
1108 else
1109 if [ "$2" = "--rebuild" ]; then
1110 export IPFIRE_REBUILD=1
1111 echo "REBUILD!"
1112 else
1113 export IPFIRE_REBUILD=0
1114 fi
1115 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1116 screen -dmS ipfire $0 batch --background
1117 evaluate 1
1118 exit 0
1119 fi
1120 ;;
1121 watch)
1122 watch_screen
1123 ;;
1124 pxe)
1125 case "$2" in
1126 start)
1127 start_tftpd
1128 ;;
1129 stop)
1130 stop_tftpd
1131 ;;
1132 reload|restart)
1133 reload_tftpd
1134 ;;
1135 esac
1136 exit 0
1137 ;;
1138 lang)
1139 update_langs
1140 ;;
1141 "")
1142 clear
1143 select name in "Exit" "IPFIRE: Downloadsrc" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "LOG: Tail" "Help"
1144 do
1145 case $name in
1146 "IPFIRE: Downloadsrc")
1147 $0 downloadsrc
1148 ;;
1149 "IPFIRE: Build (silent)")
1150 $0 build-silent
1151 ;;
1152 "IPFIRE: Watch Build")
1153 $0 watch
1154 ;;
1155 "IPFIRE: Batch")
1156 $0 batch
1157 ;;
1158 "IPFIRE: Clean")
1159 $0 clean
1160 ;;
1161 "Help")
1162 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1163 cat doc/make.sh-usage
1164 ;;
1165 "LOG: Tail")
1166 tail -f log/_*
1167 ;;
1168 "Exit")
1169 break
1170 ;;
1171 esac
1172 done
1173 ;;
1174 config)
1175 make_config
1176 ;;
1177 *)
1178 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1179 cat doc/make.sh-usage
1180 ;;
1181 esac