]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - make.sh
Drop tripwire
[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-2015 IPFire Team <info@ipfire.org>. #
21 # #
22 ############################################################################
23 #
24
25 NAME="IPFire" # Software name
26 SNAME="ipfire" # Short name
27 VERSION="2.17" # Version number
28 CORE="96" # Core Level (Filename)
29 PAKFIRE_CORE="95" # 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=10
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 binutils PASS=2
291 lfsmake1 gcc PASS=2
292 lfsmake1 ccache PASS=2
293 lfsmake1 tcl
294 lfsmake1 expect
295 lfsmake1 dejagnu
296 lfsmake1 ncurses
297 lfsmake1 bash
298 lfsmake1 bzip2
299 lfsmake1 coreutils
300 lfsmake1 diffutils
301 lfsmake1 findutils
302 lfsmake1 gawk
303 lfsmake1 gettext
304 lfsmake1 grep
305 lfsmake1 gzip
306 lfsmake1 m4
307 lfsmake1 make
308 lfsmake1 patch
309 lfsmake1 perl
310 lfsmake1 sed
311 lfsmake1 tar
312 lfsmake1 texinfo
313 lfsmake1 xz
314 lfsmake1 fake-environ
315 lfsmake1 cleanup-toolchain PASS=2
316 export PATH=$ORG_PATH
317 }
318
319 buildbase() {
320 LOGFILE="$BASEDIR/log/_build.base.log"
321 export LOGFILE
322 lfsmake2 stage2
323 lfsmake2 linux KCFG="-headers"
324 lfsmake2 man-pages
325 lfsmake2 glibc
326 lfsmake2 tzdata
327 lfsmake2 cleanup-toolchain PASS=3
328 lfsmake2 zlib
329 lfsmake2 binutils
330 lfsmake2 gmp
331 lfsmake2 gmp-compat
332 lfsmake2 mpfr
333 lfsmake2 file
334 lfsmake2 gcc
335 lfsmake2 sed
336 lfsmake2 berkeley
337 lfsmake2 coreutils
338 lfsmake2 iana-etc
339 lfsmake2 m4
340 lfsmake2 bison
341 lfsmake2 ncurses
342 lfsmake2 procps
343 lfsmake2 libtool
344 lfsmake2 perl
345 lfsmake2 readline
346 lfsmake2 readline-compat
347 lfsmake2 pcre
348 lfsmake2 pcre-compat
349 lfsmake2 autoconf
350 lfsmake2 automake
351 lfsmake2 bash
352 lfsmake2 bzip2
353 lfsmake2 diffutils
354 lfsmake2 e2fsprogs
355 lfsmake2 ed
356 lfsmake2 findutils
357 lfsmake2 flex
358 lfsmake2 gawk
359 lfsmake2 gettext
360 lfsmake2 grep
361 lfsmake2 groff
362 lfsmake2 gperf
363 lfsmake2 gzip
364 lfsmake2 hostname
365 lfsmake2 iproute2
366 lfsmake2 jwhois
367 lfsmake2 kbd
368 lfsmake2 less
369 lfsmake2 make
370 lfsmake2 man
371 lfsmake2 kmod
372 lfsmake2 net-tools
373 lfsmake2 patch
374 lfsmake2 psmisc
375 lfsmake2 shadow
376 lfsmake2 sysklogd
377 lfsmake2 sysvinit
378 lfsmake2 tar
379 lfsmake2 texinfo
380 lfsmake2 util-linux
381 lfsmake2 udev
382 lfsmake2 vim
383 lfsmake2 xz
384 lfsmake2 paxctl
385 }
386
387 buildipfire() {
388 LOGFILE="$BASEDIR/log/_build.ipfire.log"
389 export LOGFILE
390 ipfiremake configroot
391 ipfiremake backup
392 ipfiremake pkg-config
393 ipfiremake libusb
394 ipfiremake libusb-compat
395 ipfiremake libpcap
396 ipfiremake ppp
397 ipfiremake pptp
398 ipfiremake unzip
399 ipfiremake which
400 ipfiremake linux-firmware
401 ipfiremake dvb-firmwares
402 ipfiremake zd1211-firmware
403 ipfiremake rpi-firmware
404 ipfiremake bc
405 ipfiremake u-boot
406 ipfiremake cpio
407 ipfiremake mdadm
408 ipfiremake dracut
409 ipfiremake lvm2
410 ipfiremake multipath-tools
411 ipfiremake freetype
412 ipfiremake grub
413 ipfiremake libmnl
414 ipfiremake libnfnetlink
415 ipfiremake libnetfilter_queue
416 ipfiremake libnetfilter_conntrack
417 ipfiremake libnetfilter_cthelper
418 ipfiremake libnetfilter_cttimeout
419 ipfiremake iptables
420
421 case "${TARGET_ARCH}" in
422 x86_64)
423 ipfiremake linux KCFG=""
424 ipfiremake backports KCFG=""
425 ipfiremake e1000e KCFG=""
426 ipfiremake igb KCFG=""
427 ipfiremake ixgbe KCFG=""
428 ipfiremake xtables-addons KCFG=""
429 ipfiremake linux-initrd KCFG=""
430 ;;
431 i586)
432 # x86-pae (Native and new XEN) kernel build
433 ipfiremake linux KCFG="-pae"
434 ipfiremake backports KCFG="-pae"
435 ipfiremake e1000e KCFG="-pae"
436 ipfiremake igb KCFG="-pae"
437 ipfiremake ixgbe KCFG="-pae"
438 ipfiremake xtables-addons KCFG="-pae"
439 ipfiremake linux-initrd KCFG="-pae"
440
441 # x86 kernel build
442 ipfiremake linux KCFG=""
443 ipfiremake backports KCFG=""
444 ipfiremake e1000e KCFG=""
445 ipfiremake igb KCFG=""
446 ipfiremake ixgbe KCFG=""
447 ipfiremake xtables-addons KCFG=""
448 ipfiremake linux-initrd KCFG=""
449 ;;
450
451 armv5tel)
452 # arm-rpi (Raspberry Pi) kernel build
453 ipfiremake linux KCFG="-rpi"
454 ipfiremake backports KCFG="-rpi"
455 ipfiremake xtables-addons KCFG="-rpi"
456 ipfiremake linux-initrd KCFG="-rpi"
457
458 # arm multi platform (Panda, Wandboard ...) kernel build
459 ipfiremake linux KCFG="-multi"
460 ipfiremake backports KCFG="-multi"
461 ipfiremake e1000e KCFG="-multi"
462 ipfiremake igb KCFG="-multi"
463 ipfiremake ixgbe KCFG="-multi"
464 ipfiremake xtables-addons KCFG="-multi"
465 ipfiremake linux-initrd KCFG="-multi"
466
467 # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build
468 ipfiremake linux KCFG="-kirkwood"
469 ipfiremake backports KCFG="-kirkwood"
470 ipfiremake e1000e KCFG="-kirkwood"
471 ipfiremake igb KCFG="-kirkwood"
472 ipfiremake ixgbe KCFG="-kirkwood"
473 ipfiremake xtables-addons KCFG="-kirkwood"
474 ipfiremake linux-initrd KCFG="-kirkwood"
475 ;;
476 esac
477 ipfiremake xtables-addons USPACE="1"
478 ipfiremake openssl
479 [ "${TARGET_ARCH}" = "i586" ] && ipfiremake openssl KCFG='-sse2'
480 ipfiremake libgpg-error
481 ipfiremake libgcrypt
482 ipfiremake libassuan
483 ipfiremake bind
484 ipfiremake dhcp
485 ipfiremake dhcpcd
486 ipfiremake boost
487 ipfiremake linux-atm
488 ipfiremake expat
489 ipfiremake gdbm
490 ipfiremake pam
491 ipfiremake curl
492 ipfiremake tcl
493 ipfiremake sqlite
494 ipfiremake libffi
495 ipfiremake python
496 ipfiremake ca-certificates
497 ipfiremake fireinfo
498 ipfiremake libnet
499 ipfiremake libnl
500 ipfiremake libnl-3
501 ipfiremake libidn
502 ipfiremake nasm
503 ipfiremake libjpeg
504 ipfiremake libexif
505 ipfiremake libpng
506 ipfiremake libtiff
507 ipfiremake libart
508 ipfiremake gd
509 ipfiremake popt
510 ipfiremake pcre
511 ipfiremake slang
512 ipfiremake newt
513 ipfiremake libsmooth
514 ipfiremake attr
515 ipfiremake acl
516 ipfiremake libcap
517 ipfiremake pciutils
518 ipfiremake usbutils
519 ipfiremake libxml2
520 ipfiremake libxslt
521 ipfiremake BerkeleyDB
522 ipfiremake mysql
523 ipfiremake cyrus-sasl
524 ipfiremake openldap
525 ipfiremake apache2
526 ipfiremake php
527 ipfiremake web-user-interface
528 ipfiremake flag-icons
529 ipfiremake jquery
530 ipfiremake arping
531 ipfiremake beep
532 ipfiremake dvdrtools
533 ipfiremake nettle
534 ipfiremake dnsmasq
535 ipfiremake dosfstools
536 ipfiremake reiserfsprogs
537 ipfiremake xfsprogs
538 ipfiremake sysfsutils
539 ipfiremake fuse
540 ipfiremake ntfs-3g
541 ipfiremake ethtool
542 ipfiremake ez-ipupdate
543 ipfiremake fcron
544 ipfiremake perl-GD
545 ipfiremake GD-Graph
546 ipfiremake GD-TextUtil
547 ipfiremake perl-Device-SerialPort
548 ipfiremake perl-Device-Modem
549 ipfiremake gnupg
550 ipfiremake hdparm
551 ipfiremake sdparm
552 ipfiremake mtools
553 ipfiremake initscripts
554 ipfiremake whatmask
555 ipfiremake conntrack-tools
556 ipfiremake libupnp
557 ipfiremake ipaddr
558 ipfiremake iputils
559 ipfiremake l7-protocols
560 ipfiremake mISDNuser
561 ipfiremake capi4k-utils
562 ipfiremake hwdata
563 ipfiremake logrotate
564 ipfiremake logwatch
565 ipfiremake misc-progs
566 ipfiremake nano
567 ipfiremake URI
568 ipfiremake HTML-Tagset
569 ipfiremake HTML-Parser
570 ipfiremake HTML-Template
571 ipfiremake Compress-Zlib
572 ipfiremake Digest
573 ipfiremake Digest-SHA1
574 ipfiremake Digest-HMAC
575 ipfiremake libwww-perl
576 ipfiremake Net-DNS
577 ipfiremake Net-IPv4Addr
578 ipfiremake Net_SSLeay
579 ipfiremake IO-Stringy
580 ipfiremake IO-Socket-SSL
581 ipfiremake Unix-Syslog
582 ipfiremake Mail-Tools
583 ipfiremake MIME-Tools
584 ipfiremake Net-Server
585 ipfiremake Convert-TNEF
586 ipfiremake Convert-UUlib
587 ipfiremake Archive-Tar
588 ipfiremake Archive-Zip
589 ipfiremake Text-Tabs+Wrap
590 ipfiremake Locale-Country
591 ipfiremake XML-Parser
592 ipfiremake Crypt-PasswdMD5
593 ipfiremake Net-Telnet
594 ipfiremake python-setuptools
595 ipfiremake python-clientform
596 ipfiremake python-mechanize
597 ipfiremake python-feedparser
598 ipfiremake python-rssdler
599 ipfiremake glib
600 ipfiremake GeoIP
601 ipfiremake fwhits
602 ipfiremake noip_updater
603 ipfiremake ntp
604 ipfiremake openssh
605 ipfiremake fontconfig
606 ipfiremake dejavu-fonts-ttf
607 ipfiremake freefont
608 ipfiremake pixman
609 ipfiremake cairo
610 ipfiremake pango
611 ipfiremake rrdtool
612 ipfiremake setserial
613 ipfiremake setup
614 ipfiremake libdnet
615 ipfiremake daq
616 ipfiremake snort
617 ipfiremake oinkmaster
618 ipfiremake squid
619 ipfiremake squidguard
620 ipfiremake calamaris
621 ipfiremake tcpdump
622 ipfiremake traceroute
623 ipfiremake vlan
624 ipfiremake wireless
625 ipfiremake pakfire
626 ipfiremake spandsp
627 ipfiremake lzo
628 ipfiremake openvpn
629 ipfiremake pammysql
630 ipfiremake mpage
631 ipfiremake dbus
632 ipfiremake cups
633 ipfiremake ghostscript
634 ipfiremake foomatic
635 ipfiremake hplip
636 ipfiremake cifs-utils
637 ipfiremake krb5
638 ipfiremake samba
639 ipfiremake sudo
640 ipfiremake mc
641 ipfiremake wget
642 ipfiremake bridge-utils
643 ipfiremake screen
644 ipfiremake smartmontools
645 ipfiremake htop
646 ipfiremake chkconfig
647 ipfiremake postfix
648 ipfiremake fetchmail
649 ipfiremake cyrus-imapd
650 ipfiremake openmailadmin
651 ipfiremake clamav
652 ipfiremake spamassassin
653 ipfiremake amavisd
654 ipfiremake dma
655 ipfiremake alsa
656 ipfiremake mpfire
657 ipfiremake guardian
658 ipfiremake libid3tag
659 ipfiremake libmad
660 ipfiremake libogg
661 ipfiremake libvorbis
662 ipfiremake libdvbpsi
663 ipfiremake flac
664 ipfiremake lame
665 ipfiremake sox
666 ipfiremake libshout
667 ipfiremake xvid
668 ipfiremake libmpeg2
669 ipfiremake libarchive
670 ipfiremake cmake
671 ipfiremake gnump3d
672 ipfiremake rsync
673 ipfiremake tcpwrapper
674 ipfiremake libevent
675 ipfiremake libevent2
676 ipfiremake portmap
677 ipfiremake nfs
678 ipfiremake nmap
679 ipfiremake ncftp
680 ipfiremake etherwake
681 ipfiremake bwm-ng
682 ipfiremake sysstat
683 ipfiremake vsftpd
684 ipfiremake strongswan
685 ipfiremake rng-tools
686 ipfiremake lsof
687 ipfiremake br2684ctl
688 ipfiremake pcmciautils
689 ipfiremake lm_sensors
690 ipfiremake liboping
691 ipfiremake collectd
692 ipfiremake elinks
693 ipfiremake igmpproxy
694 ipfiremake fbset
695 ipfiremake sdl
696 ipfiremake qemu
697 ipfiremake sane
698 ipfiremake netpbm
699 ipfiremake phpSANE
700 ipfiremake tunctl
701 ipfiremake netsnmpd
702 ipfiremake nagios
703 ipfiremake nagios_nrpe
704 ipfiremake icinga
705 ipfiremake ebtables
706 ipfiremake directfb
707 ipfiremake dfb++
708 ipfiremake faad2
709 ipfiremake ffmpeg
710 ipfiremake vdr
711 ipfiremake vdr_streamdev
712 ipfiremake vdr_vnsiserver5
713 ipfiremake vdr_vnsiserver3
714 ipfiremake vdr_epgsearch
715 ipfiremake vdr_dvbapi
716 ipfiremake vdr_eepg
717 ipfiremake w_scan
718 ipfiremake icecast
719 ipfiremake icegenerator
720 ipfiremake mpd
721 ipfiremake libmpdclient
722 ipfiremake mpc
723 ipfiremake perl-Net-SMTP-SSL
724 ipfiremake perl-MIME-Base64
725 ipfiremake perl-Authen-SASL
726 ipfiremake perl-MIME-Lite
727 ipfiremake perl-Email-Date-Format
728 ipfiremake git
729 ipfiremake squidclamav
730 ipfiremake vnstat
731 ipfiremake iw
732 ipfiremake wpa_supplicant
733 ipfiremake hostapd
734 ipfiremake pycurl
735 ipfiremake urlgrabber
736 ipfiremake syslinux
737 ipfiremake tftpd
738 ipfiremake cpufrequtils
739 ipfiremake bluetooth
740 ipfiremake gutenprint
741 ipfiremake apcupsd
742 ipfiremake iperf
743 ipfiremake netcat
744 ipfiremake 7zip
745 ipfiremake lynis
746 ipfiremake streamripper
747 ipfiremake sshfs
748 ipfiremake taglib
749 ipfiremake mediatomb
750 ipfiremake sslh
751 ipfiremake perl-gettext
752 ipfiremake perl-Sort-Naturally
753 ipfiremake vdradmin
754 ipfiremake miau
755 ipfiremake perl-DBI
756 ipfiremake perl-DBD-mysql
757 ipfiremake perl-DBD-SQLite
758 ipfiremake perl-File-ReadBackwards
759 ipfiremake cacti
760 ipfiremake openvmtools
761 ipfiremake nagiosql
762 ipfiremake iftop
763 ipfiremake motion
764 ipfiremake joe
765 ipfiremake monit
766 ipfiremake nut
767 ipfiremake watchdog
768 ipfiremake libpri
769 ipfiremake libsrtp
770 ipfiremake asterisk
771 ipfiremake lcr
772 ipfiremake usb_modeswitch
773 ipfiremake usb_modeswitch_data
774 ipfiremake zerofree
775 ipfiremake pound
776 ipfiremake minicom
777 ipfiremake ddrescue
778 ipfiremake imspector
779 ipfiremake miniupnpd
780 ipfiremake client175
781 ipfiremake powertop
782 ipfiremake parted
783 ipfiremake swig
784 ipfiremake python-m2crypto
785 ipfiremake wireless-regdb
786 ipfiremake crda
787 ipfiremake libsolv
788 ipfiremake python-distutils-extra
789 ipfiremake python-lzma
790 ipfiremake python-progressbar
791 ipfiremake python-xattr
792 ipfiremake intltool
793 ipfiremake ddns
794 ipfiremake transmission
795 ipfiremake dpfhack
796 ipfiremake lcd4linux
797 ipfiremake mtr
798 ipfiremake tcpick
799 ipfiremake minidlna
800 ipfiremake acpid
801 ipfiremake fping
802 ipfiremake telnet
803 ipfiremake xinetd
804 ipfiremake gpgme
805 ipfiremake pygpgme
806 ipfiremake pakfire3
807 ipfiremake stress
808 ipfiremake libstatgrab
809 ipfiremake sarg
810 ipfiremake check_mk_agent
811 ipfiremake libdaemon
812 ipfiremake avahi
813 ipfiremake nginx
814 ipfiremake sendEmail
815 ipfiremake sysbench
816 ipfiremake strace
817 ipfiremake ipfire-netboot
818 ipfiremake lcdproc
819 ipfiremake bitstream
820 ipfiremake multicat
821 ipfiremake keepalived
822 ipfiremake ipvsadm
823 ipfiremake perl-Carp-Clan
824 ipfiremake perl-Date-Calc
825 ipfiremake perl-Date-Manip
826 ipfiremake perl-File-Tail
827 ipfiremake perl-TimeDate
828 ipfiremake swatch
829 ipfiremake tor
830 ipfiremake arm
831 ipfiremake wavemon
832 ipfiremake iptraf-ng
833 ipfiremake iotop
834 ipfiremake stunnel
835 ipfiremake sslscan
836 ipfiremake owncloud
837 ipfiremake bacula
838 ipfiremake batctl
839 ipfiremake perl-PDF-API2
840 ipfiremake squid-accounting
841 ipfiremake pigz
842 ipfiremake tmux
843 ipfiremake perl-Text-CSV_XS
844 ipfiremake swconfig
845 ipfiremake haproxy
846 ipfiremake ipset
847 }
848
849 buildinstaller() {
850 # Run installer scripts one by one
851 LOGFILE="$BASEDIR/log/_build.installer.log"
852 export LOGFILE
853 ipfiremake memtest
854 ipfiremake installer
855 installmake strip
856 }
857
858 buildpackages() {
859 LOGFILE="$BASEDIR/log/_build.packages.log"
860 export LOGFILE
861 echo "... see detailed log in _build.*.log files" >> $LOGFILE
862
863
864 # Generating list of packages used
865 echo -n "Generating packages list from logs" | tee -a $LOGFILE
866 rm -f $BASEDIR/doc/packages-list
867 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
868 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
869 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
870 fi
871 done
872 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
873 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
874 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
875 rm -f $BASEDIR/doc/packages-list
876 # packages-list.txt is ready to be displayed for wiki page
877 beautify message DONE
878
879 # Update changelog
880 cd $BASEDIR
881 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
882 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
883 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
884
885 # Create images for install
886 ipfiremake cdrom
887
888 # Check if there is a loop device for building in virtual environments
889 modprobe loop 2>/dev/null
890 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
891 ipfiremake flash-images
892 ipfiremake flash-images SCON=1
893 fi
894
895 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
896
897 ipfirepackages
898
899 ipfiremake xen-image
900 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
901
902 cd $BASEDIR
903
904 # remove not useable iso on armv5tel (needed to build flash images)
905 [ "${TARGET_ARCH}" = "armv5tel" ] && rm -rf *.iso
906
907 for i in `ls *.bz2 *.img.gz *.iso`; do
908 md5sum $i > $i.md5
909 done
910 cd $PWD
911
912 # Cleanup
913 stdumount
914 rm -rf $BASEDIR/build/tmp/*
915
916 # Generating total list of files
917 echo -n "Generating files list from logs" | tee -a $LOGFILE
918 rm -f $BASEDIR/log/FILES
919 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
920 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
921 echo "##" >>$BASEDIR/log/FILES
922 echo "## `basename $i`" >>$BASEDIR/log/FILES
923 echo "##" >>$BASEDIR/log/FILES
924 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
925 fi
926 done
927 beautify message DONE
928
929 cd $PWD
930 }
931
932 ipfirepackages() {
933 ipfiremake core-updates
934
935 local i
936 for i in $(find $BASEDIR/config/rootfiles/packages{/${MACHINE},} -maxdepth 1 -type f); do
937 i=$(basename ${i})
938 if [ -e $BASEDIR/lfs/$i ]; then
939 ipfiredist $i
940 else
941 echo -n $i
942 beautify message SKIP
943 fi
944 done
945 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
946 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
947 rm -rf $BASEDIR/build/install/packages/*
948 }
949
950 while [ $# -gt 0 ]; do
951 case "${1}" in
952 --target=*)
953 configure_target "${1#--target=}"
954 ;;
955 -*)
956 exiterror "Unknown configuration option: ${1}"
957 ;;
958 *)
959 # Found a command, so exit options parsing.
960 break
961 ;;
962 esac
963 shift
964 done
965
966 # See what we're supposed to do
967 case "$1" in
968 build)
969 clear
970 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
971 #only restore on a clean disk
972 if [ ! -f log/cleanup-toolchain-2-tools ]; then
973 if [ ! -n "$PACKAGE" ]; then
974 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
975 prepareenv
976 buildtoolchain
977 else
978 PACKAGENAME=${PACKAGE%.tar.gz}
979 beautify build_stage "Packaged toolchain compilation"
980 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
981 tar zxf $PACKAGE
982 prepareenv
983 else
984 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
985 fi
986 fi
987 else
988 echo -n "Using installed toolchain" | tee -a $LOGFILE
989 beautify message SKIP
990 prepareenv
991 fi
992
993 beautify build_start
994 beautify build_stage "Building LFS"
995 buildbase
996
997 beautify build_stage "Building IPFire"
998 buildipfire
999
1000 beautify build_stage "Building installer"
1001 buildinstaller
1002
1003 beautify build_stage "Building packages"
1004 buildpackages
1005
1006 beautify build_stage "Checking Logfiles for new Files"
1007
1008 cd $BASEDIR
1009 tools/checknewlog.pl
1010 tools/checkrootfiles
1011 cd $PWD
1012
1013 beautify build_end
1014 ;;
1015 shell)
1016 # enter a shell inside LFS chroot
1017 # may be used to changed kernel settings
1018 prepareenv
1019 entershell
1020 ;;
1021 clean)
1022 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
1023 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1024 $LOSETUP -d $i 2>/dev/null
1025 done
1026 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1027 umount $i
1028 done
1029 stdumount
1030 for i in `seq 0 7`; do
1031 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1032 umount /dev/loop${i} 2>/dev/null;
1033 losetup -d /dev/loop${i} 2>/dev/null;
1034 fi;
1035 done
1036 rm -rf $BASEDIR/build
1037 rm -rf $BASEDIR/cdrom
1038 rm -rf $BASEDIR/packages
1039 rm -rf $BASEDIR/log
1040 if [ -h /tools ]; then
1041 rm -f /tools
1042 fi
1043 rm -f $BASEDIR/ipfire-*
1044 beautify message DONE
1045 ;;
1046 downloadsrc)
1047 if [ ! -d $BASEDIR/cache ]; then
1048 mkdir $BASEDIR/cache
1049 fi
1050 mkdir -p $BASEDIR/log
1051 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
1052 FINISHED=0
1053 cd $BASEDIR/lfs
1054 for c in `seq $MAX_RETRIES`; do
1055 if (( FINISHED==1 )); then
1056 break
1057 fi
1058 FINISHED=1
1059 cd $BASEDIR/lfs
1060 for i in *; do
1061 if [ -f "$i" -a "$i" != "Config" ]; then
1062 lfsmakecommoncheck ${i} || continue
1063
1064 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1065 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1066 if [ $? -ne 0 ]; then
1067 beautify message FAIL
1068 FINISHED=0
1069 else
1070 if [ $c -eq 1 ]; then
1071 beautify message DONE
1072 fi
1073 fi
1074 fi
1075 done
1076 done
1077 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1078 ERROR=0
1079 for i in *; do
1080 if [ -f "$i" -a "$i" != "Config" ]; then
1081 lfsmakecommoncheck ${i} > /dev/null || continue
1082 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1083 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1084 if [ $? -ne 0 ]; then
1085 echo -ne "MD5 difference in lfs/$i"
1086 beautify message FAIL
1087 ERROR=1
1088 fi
1089 fi
1090 done
1091 if [ $ERROR -eq 0 ]; then
1092 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1093 beautify message DONE
1094 else
1095 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1096 beautify message FAIL
1097 fi
1098 cd - >/dev/null 2>&1
1099 ;;
1100 toolchain)
1101 clear
1102 prepareenv
1103 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1104 buildtoolchain
1105 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1106 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1107 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1108 build/tools build/bin/sh log >> $LOGFILE
1109 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1110 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1111 stdumount
1112 ;;
1113 gettoolchain)
1114 # arbitrary name to be updated in case of new toolchain package upload
1115 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1116 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1117 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1118 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1119 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1120 cd $BASEDIR/cache/toolchains
1121 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1122 if [ $? -ne 0 ]; then
1123 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1124 else
1125 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1126 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1127 else
1128 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1129 fi
1130 fi
1131 else
1132 echo "Toolchain is already downloaded. Exiting..."
1133 fi
1134 ;;
1135 othersrc)
1136 prepareenv
1137 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1138 chroot $LFS /tools/bin/env -i HOME=/root \
1139 TERM=$TERM PS1='\u:\w\$ ' \
1140 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1141 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1142 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1143 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1144 if [ $? -eq "0" ]; then
1145 beautify message DONE
1146 else
1147 beautify message FAIL
1148 fi
1149 stdumount
1150 ;;
1151 uploadsrc)
1152 PWD=`pwd`
1153 if [ -z $IPFIRE_USER ]; then
1154 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1155 beautify message FAIL
1156 exit 1
1157 fi
1158
1159 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1160 REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1161
1162 for file in ${BASEDIR}/cache/*; do
1163 [ -d "${file}" ] && continue
1164 grep -q "$(basename ${file})" <<<$REMOTE_FILES && continue
1165 NEW_FILES="$NEW_FILES $file"
1166 done
1167 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1168 cd $BASEDIR
1169 cd $PWD
1170 exit 0
1171 ;;
1172 lang)
1173 update_langs
1174 ;;
1175 *)
1176 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1177 cat doc/make.sh-usage
1178 ;;
1179 esac