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