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