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