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