]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - make.sh
ncurses: update to 6.0 and rename 5.9 to ncurses-compat
[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="101" # Core Level (Filename)
29 PAKFIRE_CORE="101" # 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)
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-compat
344 lfsmake2 ncurses
345 lfsmake2 procps
346 lfsmake2 libtool
347 lfsmake2 perl
348 lfsmake2 readline
349 lfsmake2 readline-compat
350 lfsmake2 pcre
351 lfsmake2 pcre-compat
352 lfsmake2 autoconf
353 lfsmake2 automake
354 lfsmake2 bash
355 lfsmake2 bzip2
356 lfsmake2 diffutils
357 lfsmake2 e2fsprogs
358 lfsmake2 ed
359 lfsmake2 findutils
360 lfsmake2 flex
361 lfsmake2 gawk
362 lfsmake2 gettext
363 lfsmake2 grep
364 lfsmake2 groff
365 lfsmake2 gperf
366 lfsmake2 gzip
367 lfsmake2 hostname
368 lfsmake2 iproute2
369 lfsmake2 jwhois
370 lfsmake2 kbd
371 lfsmake2 less
372 lfsmake2 make
373 lfsmake2 man
374 lfsmake2 kmod
375 lfsmake2 net-tools
376 lfsmake2 patch
377 lfsmake2 psmisc
378 lfsmake2 shadow
379 lfsmake2 sysklogd
380 lfsmake2 sysvinit
381 lfsmake2 tar
382 lfsmake2 texinfo
383 lfsmake2 util-linux
384 lfsmake2 udev
385 lfsmake2 vim
386 lfsmake2 xz
387 lfsmake2 paxctl
388 }
389
390 buildipfire() {
391 LOGFILE="$BASEDIR/log/_build.ipfire.log"
392 export LOGFILE
393 ipfiremake configroot
394 ipfiremake backup
395 ipfiremake pkg-config
396 ipfiremake libusb
397 ipfiremake libusb-compat
398 ipfiremake libpcap
399 ipfiremake ppp
400 ipfiremake pptp
401 ipfiremake unzip
402 ipfiremake which
403 ipfiremake linux-firmware
404 ipfiremake ath10k-firmware
405 ipfiremake dvb-firmwares
406 ipfiremake mt7601u-firmware
407 ipfiremake zd1211-firmware
408 ipfiremake rpi-firmware
409 ipfiremake bc
410 ipfiremake u-boot
411 ipfiremake cpio
412 ipfiremake mdadm
413 ipfiremake dracut
414 ipfiremake lvm2
415 ipfiremake multipath-tools
416 ipfiremake freetype
417 ipfiremake grub
418 ipfiremake libmnl
419 ipfiremake libnfnetlink
420 ipfiremake libnetfilter_queue
421 ipfiremake libnetfilter_conntrack
422 ipfiremake libnetfilter_cthelper
423 ipfiremake libnetfilter_cttimeout
424 ipfiremake iptables
425
426 case "${TARGET_ARCH}" in
427 x86_64)
428 ipfiremake linux KCFG=""
429 ipfiremake backports KCFG=""
430 ipfiremake e1000e KCFG=""
431 ipfiremake igb KCFG=""
432 ipfiremake ixgbe KCFG=""
433 ipfiremake xtables-addons KCFG=""
434 ipfiremake linux-initrd KCFG=""
435 ;;
436 i586)
437 # x86-pae (Native and new XEN) kernel build
438 ipfiremake linux KCFG="-pae"
439 ipfiremake backports KCFG="-pae"
440 ipfiremake e1000e KCFG="-pae"
441 ipfiremake igb KCFG="-pae"
442 ipfiremake ixgbe KCFG="-pae"
443 ipfiremake xtables-addons KCFG="-pae"
444 ipfiremake linux-initrd KCFG="-pae"
445
446 # x86 kernel build
447 ipfiremake linux KCFG=""
448 ipfiremake backports KCFG=""
449 ipfiremake e1000e KCFG=""
450 ipfiremake igb KCFG=""
451 ipfiremake ixgbe KCFG=""
452 ipfiremake xtables-addons KCFG=""
453 ipfiremake linux-initrd KCFG=""
454 ;;
455
456 armv5tel)
457 # arm-rpi (Raspberry Pi) kernel build
458 ipfiremake linux KCFG="-rpi"
459 ipfiremake backports KCFG="-rpi"
460 ipfiremake xtables-addons KCFG="-rpi"
461 ipfiremake linux-initrd KCFG="-rpi"
462
463 # arm multi platform (Panda, Wandboard ...) kernel build
464 ipfiremake linux KCFG="-multi"
465 ipfiremake backports KCFG="-multi"
466 ipfiremake e1000e KCFG="-multi"
467 ipfiremake igb KCFG="-multi"
468 ipfiremake ixgbe KCFG="-multi"
469 ipfiremake xtables-addons KCFG="-multi"
470 ipfiremake linux-initrd KCFG="-multi"
471
472 # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build
473 ipfiremake linux KCFG="-kirkwood"
474 ipfiremake backports KCFG="-kirkwood"
475 ipfiremake e1000e KCFG="-kirkwood"
476 ipfiremake igb KCFG="-kirkwood"
477 ipfiremake ixgbe KCFG="-kirkwood"
478 ipfiremake xtables-addons KCFG="-kirkwood"
479 ipfiremake linux-initrd KCFG="-kirkwood"
480 ;;
481 esac
482 ipfiremake xtables-addons USPACE="1"
483 ipfiremake openssl
484 [ "${TARGET_ARCH}" = "i586" ] && ipfiremake openssl KCFG='-sse2'
485 ipfiremake libgpg-error
486 ipfiremake libgcrypt
487 ipfiremake libassuan
488 ipfiremake bind
489 ipfiremake dhcp
490 ipfiremake dhcpcd
491 ipfiremake boost
492 ipfiremake linux-atm
493 ipfiremake expat
494 ipfiremake gdbm
495 ipfiremake pam
496 ipfiremake curl
497 ipfiremake tcl
498 ipfiremake sqlite
499 ipfiremake libffi
500 ipfiremake python
501 ipfiremake ca-certificates
502 ipfiremake fireinfo
503 ipfiremake libnet
504 ipfiremake libnl
505 ipfiremake libnl-3
506 ipfiremake libidn
507 ipfiremake nasm
508 ipfiremake libjpeg
509 ipfiremake libexif
510 ipfiremake libpng
511 ipfiremake libtiff
512 ipfiremake libart
513 ipfiremake gd
514 ipfiremake popt
515 ipfiremake pcre
516 ipfiremake slang
517 ipfiremake newt
518 ipfiremake libsmooth
519 ipfiremake attr
520 ipfiremake acl
521 ipfiremake libcap
522 ipfiremake pciutils
523 ipfiremake usbutils
524 ipfiremake libxml2
525 ipfiremake libxslt
526 ipfiremake BerkeleyDB
527 ipfiremake mysql
528 ipfiremake cyrus-sasl
529 ipfiremake openldap
530 ipfiremake apache2
531 ipfiremake php
532 ipfiremake web-user-interface
533 ipfiremake flag-icons
534 ipfiremake jquery
535 ipfiremake arping
536 ipfiremake beep
537 ipfiremake dvdrtools
538 ipfiremake nettle
539 ipfiremake dnsmasq
540 ipfiremake dosfstools
541 ipfiremake reiserfsprogs
542 ipfiremake xfsprogs
543 ipfiremake sysfsutils
544 ipfiremake fuse
545 ipfiremake ntfs-3g
546 ipfiremake ethtool
547 ipfiremake ez-ipupdate
548 ipfiremake fcron
549 ipfiremake perl-GD
550 ipfiremake GD-Graph
551 ipfiremake GD-TextUtil
552 ipfiremake perl-Device-SerialPort
553 ipfiremake perl-Device-Modem
554 ipfiremake perl-Apache-Htpasswd
555 ipfiremake gnupg
556 ipfiremake hdparm
557 ipfiremake sdparm
558 ipfiremake mtools
559 ipfiremake initscripts
560 ipfiremake whatmask
561 ipfiremake conntrack-tools
562 ipfiremake libupnp
563 ipfiremake ipaddr
564 ipfiremake iputils
565 ipfiremake l7-protocols
566 ipfiremake mISDNuser
567 ipfiremake capi4k-utils
568 ipfiremake hwdata
569 ipfiremake logrotate
570 ipfiremake logwatch
571 ipfiremake misc-progs
572 ipfiremake nano
573 ipfiremake URI
574 ipfiremake HTML-Tagset
575 ipfiremake HTML-Parser
576 ipfiremake HTML-Template
577 ipfiremake Compress-Zlib
578 ipfiremake Digest
579 ipfiremake Digest-SHA1
580 ipfiremake Digest-HMAC
581 ipfiremake libwww-perl
582 ipfiremake Net-DNS
583 ipfiremake Net-IPv4Addr
584 ipfiremake Net_SSLeay
585 ipfiremake IO-Stringy
586 ipfiremake IO-Socket-SSL
587 ipfiremake Unix-Syslog
588 ipfiremake Mail-Tools
589 ipfiremake MIME-Tools
590 ipfiremake Net-Server
591 ipfiremake Convert-TNEF
592 ipfiremake Convert-UUlib
593 ipfiremake Archive-Tar
594 ipfiremake Archive-Zip
595 ipfiremake Text-Tabs+Wrap
596 ipfiremake Locale-Country
597 ipfiremake XML-Parser
598 ipfiremake Crypt-PasswdMD5
599 ipfiremake Net-Telnet
600 ipfiremake python-setuptools
601 ipfiremake python-clientform
602 ipfiremake python-mechanize
603 ipfiremake python-feedparser
604 ipfiremake python-rssdler
605 ipfiremake glib
606 ipfiremake GeoIP
607 ipfiremake fwhits
608 ipfiremake noip_updater
609 ipfiremake ntp
610 ipfiremake openssh
611 ipfiremake fontconfig
612 ipfiremake dejavu-fonts-ttf
613 ipfiremake freefont
614 ipfiremake pixman
615 ipfiremake cairo
616 ipfiremake pango
617 ipfiremake rrdtool
618 ipfiremake setserial
619 ipfiremake setup
620 ipfiremake libdnet
621 ipfiremake daq
622 ipfiremake snort
623 ipfiremake oinkmaster
624 ipfiremake squid
625 ipfiremake squidguard
626 ipfiremake calamaris
627 ipfiremake tcpdump
628 ipfiremake traceroute
629 ipfiremake vlan
630 ipfiremake wireless
631 ipfiremake pakfire
632 ipfiremake spandsp
633 ipfiremake lzo
634 ipfiremake openvpn
635 ipfiremake pammysql
636 ipfiremake mpage
637 ipfiremake dbus
638 ipfiremake cups
639 ipfiremake ghostscript
640 ipfiremake foomatic
641 ipfiremake hplip
642 ipfiremake cifs-utils
643 ipfiremake krb5
644 ipfiremake samba
645 ipfiremake sudo
646 ipfiremake mc
647 ipfiremake wget
648 ipfiremake bridge-utils
649 ipfiremake screen
650 ipfiremake smartmontools
651 ipfiremake htop
652 ipfiremake chkconfig
653 ipfiremake postfix
654 ipfiremake fetchmail
655 ipfiremake cyrus-imapd
656 ipfiremake openmailadmin
657 ipfiremake clamav
658 ipfiremake spamassassin
659 ipfiremake amavisd
660 ipfiremake dma
661 ipfiremake alsa
662 ipfiremake mpfire
663 ipfiremake guardian
664 ipfiremake libid3tag
665 ipfiremake libmad
666 ipfiremake libogg
667 ipfiremake libvorbis
668 ipfiremake libdvbpsi
669 ipfiremake flac
670 ipfiremake lame
671 ipfiremake sox
672 ipfiremake libshout
673 ipfiremake xvid
674 ipfiremake libmpeg2
675 ipfiremake libarchive
676 ipfiremake cmake
677 ipfiremake gnump3d
678 ipfiremake rsync
679 ipfiremake tcpwrapper
680 ipfiremake libevent
681 ipfiremake libevent2
682 ipfiremake portmap
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 }
866
867 buildinstaller() {
868 # Run installer scripts one by one
869 LOGFILE="$BASEDIR/log/_build.installer.log"
870 export LOGFILE
871 ipfiremake memtest
872 ipfiremake installer
873 installmake strip
874 }
875
876 buildpackages() {
877 LOGFILE="$BASEDIR/log/_build.packages.log"
878 export LOGFILE
879 echo "... see detailed log in _build.*.log files" >> $LOGFILE
880
881
882 # Generating list of packages used
883 echo -n "Generating packages list from logs" | tee -a $LOGFILE
884 rm -f $BASEDIR/doc/packages-list
885 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
886 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
887 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
888 fi
889 done
890 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
891 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
892 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
893 rm -f $BASEDIR/doc/packages-list
894 # packages-list.txt is ready to be displayed for wiki page
895 beautify message DONE
896
897 # Update changelog
898 cd $BASEDIR
899 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
900 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
901 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
902
903 # Create images for install
904 ipfiremake cdrom
905
906 # Check if there is a loop device for building in virtual environments
907 modprobe loop 2>/dev/null
908 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
909 ipfiremake flash-images
910 ipfiremake flash-images SCON=1
911 fi
912
913 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
914
915 ipfirepackages
916
917 ipfiremake xen-image
918 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
919
920 cd $BASEDIR
921
922 # remove not useable iso on armv5tel (needed to build flash images)
923 [ "${TARGET_ARCH}" = "armv5tel" ] && rm -rf *.iso
924
925 for i in `ls *.bz2 *.img.gz *.iso`; do
926 md5sum $i > $i.md5
927 done
928 cd $PWD
929
930 # Cleanup
931 stdumount
932 rm -rf $BASEDIR/build/tmp/*
933
934 # Generating total list of files
935 echo -n "Generating files list from logs" | tee -a $LOGFILE
936 rm -f $BASEDIR/log/FILES
937 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
938 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
939 echo "##" >>$BASEDIR/log/FILES
940 echo "## `basename $i`" >>$BASEDIR/log/FILES
941 echo "##" >>$BASEDIR/log/FILES
942 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
943 fi
944 done
945 beautify message DONE
946
947 cd $PWD
948 }
949
950 ipfirepackages() {
951 ipfiremake core-updates
952
953 local i
954 for i in $(find $BASEDIR/config/rootfiles/packages{/${MACHINE},} -maxdepth 1 -type f); do
955 i=$(basename ${i})
956 if [ -e $BASEDIR/lfs/$i ]; then
957 ipfiredist $i
958 else
959 echo -n $i
960 beautify message SKIP
961 fi
962 done
963 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
964 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
965 rm -rf $BASEDIR/build/install/packages/*
966 }
967
968 while [ $# -gt 0 ]; do
969 case "${1}" in
970 --target=*)
971 configure_target "${1#--target=}"
972 ;;
973 -*)
974 exiterror "Unknown configuration option: ${1}"
975 ;;
976 *)
977 # Found a command, so exit options parsing.
978 break
979 ;;
980 esac
981 shift
982 done
983
984 # See what we're supposed to do
985 case "$1" in
986 build)
987 clear
988 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
989 #only restore on a clean disk
990 if [ ! -f log/cleanup-toolchain-2-tools ]; then
991 if [ ! -n "$PACKAGE" ]; then
992 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
993 prepareenv
994 buildtoolchain
995 else
996 PACKAGENAME=${PACKAGE%.tar.gz}
997 beautify build_stage "Packaged toolchain compilation"
998 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
999 tar zxf $PACKAGE
1000 prepareenv
1001 else
1002 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
1003 fi
1004 fi
1005 else
1006 echo -n "Using installed toolchain" | tee -a $LOGFILE
1007 beautify message SKIP
1008 prepareenv
1009 fi
1010
1011 beautify build_start
1012 beautify build_stage "Building LFS"
1013 buildbase
1014
1015 beautify build_stage "Building IPFire"
1016 buildipfire
1017
1018 beautify build_stage "Building installer"
1019 buildinstaller
1020
1021 beautify build_stage "Building packages"
1022 buildpackages
1023
1024 beautify build_stage "Checking Logfiles for new Files"
1025
1026 cd $BASEDIR
1027 tools/checknewlog.pl
1028 tools/checkrootfiles
1029 cd $PWD
1030
1031 beautify build_end
1032 ;;
1033 shell)
1034 # enter a shell inside LFS chroot
1035 # may be used to changed kernel settings
1036 prepareenv
1037 entershell
1038 ;;
1039 clean)
1040 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
1041 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1042 $LOSETUP -d $i 2>/dev/null
1043 done
1044 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1045 umount $i
1046 done
1047 stdumount
1048 for i in `seq 0 7`; do
1049 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1050 umount /dev/loop${i} 2>/dev/null;
1051 losetup -d /dev/loop${i} 2>/dev/null;
1052 fi;
1053 done
1054 rm -rf $BASEDIR/build
1055 rm -rf $BASEDIR/cdrom
1056 rm -rf $BASEDIR/packages
1057 rm -rf $BASEDIR/log
1058 if [ -h /tools ]; then
1059 rm -f /tools
1060 fi
1061 rm -f $BASEDIR/ipfire-*
1062 beautify message DONE
1063 ;;
1064 downloadsrc)
1065 if [ ! -d $BASEDIR/cache ]; then
1066 mkdir $BASEDIR/cache
1067 fi
1068 mkdir -p $BASEDIR/log
1069 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
1070 FINISHED=0
1071 cd $BASEDIR/lfs
1072 for c in `seq $MAX_RETRIES`; do
1073 if (( FINISHED==1 )); then
1074 break
1075 fi
1076 FINISHED=1
1077 cd $BASEDIR/lfs
1078 for i in *; do
1079 if [ -f "$i" -a "$i" != "Config" ]; then
1080 lfsmakecommoncheck ${i} || continue
1081
1082 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1083 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1084 if [ $? -ne 0 ]; then
1085 beautify message FAIL
1086 FINISHED=0
1087 else
1088 if [ $c -eq 1 ]; then
1089 beautify message DONE
1090 fi
1091 fi
1092 fi
1093 done
1094 done
1095 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1096 ERROR=0
1097 for i in *; do
1098 if [ -f "$i" -a "$i" != "Config" ]; then
1099 lfsmakecommoncheck ${i} > /dev/null || continue
1100 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1101 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1102 if [ $? -ne 0 ]; then
1103 echo -ne "MD5 difference in lfs/$i"
1104 beautify message FAIL
1105 ERROR=1
1106 fi
1107 fi
1108 done
1109 if [ $ERROR -eq 0 ]; then
1110 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1111 beautify message DONE
1112 else
1113 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1114 beautify message FAIL
1115 fi
1116 cd - >/dev/null 2>&1
1117 ;;
1118 toolchain)
1119 clear
1120 prepareenv
1121 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1122 buildtoolchain
1123 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1124 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1125 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1126 build/tools build/bin/sh log >> $LOGFILE
1127 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1128 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1129 stdumount
1130 ;;
1131 gettoolchain)
1132 # arbitrary name to be updated in case of new toolchain package upload
1133 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1134 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1135 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1136 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1137 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1138 cd $BASEDIR/cache/toolchains
1139 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1140 if [ $? -ne 0 ]; then
1141 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1142 else
1143 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1144 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1145 else
1146 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1147 fi
1148 fi
1149 else
1150 echo "Toolchain is already downloaded. Exiting..."
1151 fi
1152 ;;
1153 othersrc)
1154 prepareenv
1155 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1156 chroot $LFS /tools/bin/env -i HOME=/root \
1157 TERM=$TERM PS1='\u:\w\$ ' \
1158 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1159 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1160 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1161 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1162 if [ $? -eq "0" ]; then
1163 beautify message DONE
1164 else
1165 beautify message FAIL
1166 fi
1167 stdumount
1168 ;;
1169 uploadsrc)
1170 PWD=`pwd`
1171 if [ -z $IPFIRE_USER ]; then
1172 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1173 beautify message FAIL
1174 exit 1
1175 fi
1176
1177 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1178 REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1179
1180 for file in ${BASEDIR}/cache/*; do
1181 [ -d "${file}" ] && continue
1182 grep -q "$(basename ${file})" <<<$REMOTE_FILES && continue
1183 NEW_FILES="$NEW_FILES $file"
1184 done
1185 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1186 cd $BASEDIR
1187 cd $PWD
1188 exit 0
1189 ;;
1190 lang)
1191 update_langs
1192 ;;
1193 *)
1194 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1195 cat doc/make.sh-usage
1196 ;;
1197 esac