]> git.ipfire.org Git - ipfire-2.x.git/blob - make.sh
38179866987ec5db3125264dbf2da5647443dd93
[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 ipfiremake dnsdist
850 }
851
852 buildinstaller() {
853 # Run installer scripts one by one
854 LOGFILE="$BASEDIR/log/_build.installer.log"
855 export LOGFILE
856 ipfiremake memtest
857 ipfiremake installer
858 installmake strip
859 }
860
861 buildpackages() {
862 LOGFILE="$BASEDIR/log/_build.packages.log"
863 export LOGFILE
864 echo "... see detailed log in _build.*.log files" >> $LOGFILE
865
866
867 # Generating list of packages used
868 echo -n "Generating packages list from logs" | tee -a $LOGFILE
869 rm -f $BASEDIR/doc/packages-list
870 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
871 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
872 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
873 fi
874 done
875 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
876 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
877 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
878 rm -f $BASEDIR/doc/packages-list
879 # packages-list.txt is ready to be displayed for wiki page
880 beautify message DONE
881
882 # Update changelog
883 cd $BASEDIR
884 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
885 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
886 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
887
888 # Create images for install
889 ipfiremake cdrom
890
891 # Check if there is a loop device for building in virtual environments
892 modprobe loop 2>/dev/null
893 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
894 ipfiremake flash-images
895 ipfiremake flash-images SCON=1
896 fi
897
898 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
899
900 ipfirepackages
901
902 ipfiremake xen-image
903 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
904
905 cd $BASEDIR
906
907 # remove not useable iso on armv5tel (needed to build flash images)
908 [ "${TARGET_ARCH}" = "armv5tel" ] && rm -rf *.iso
909
910 for i in `ls *.bz2 *.img.gz *.iso`; do
911 md5sum $i > $i.md5
912 done
913 cd $PWD
914
915 # Cleanup
916 stdumount
917 rm -rf $BASEDIR/build/tmp/*
918
919 # Generating total list of files
920 echo -n "Generating files list from logs" | tee -a $LOGFILE
921 rm -f $BASEDIR/log/FILES
922 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
923 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
924 echo "##" >>$BASEDIR/log/FILES
925 echo "## `basename $i`" >>$BASEDIR/log/FILES
926 echo "##" >>$BASEDIR/log/FILES
927 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
928 fi
929 done
930 beautify message DONE
931
932 cd $PWD
933 }
934
935 ipfirepackages() {
936 ipfiremake core-updates
937
938 local i
939 for i in $(find $BASEDIR/config/rootfiles/packages{/${MACHINE},} -maxdepth 1 -type f); do
940 i=$(basename ${i})
941 if [ -e $BASEDIR/lfs/$i ]; then
942 ipfiredist $i
943 else
944 echo -n $i
945 beautify message SKIP
946 fi
947 done
948 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
949 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
950 rm -rf $BASEDIR/build/install/packages/*
951 }
952
953 while [ $# -gt 0 ]; do
954 case "${1}" in
955 --target=*)
956 configure_target "${1#--target=}"
957 ;;
958 -*)
959 exiterror "Unknown configuration option: ${1}"
960 ;;
961 *)
962 # Found a command, so exit options parsing.
963 break
964 ;;
965 esac
966 shift
967 done
968
969 # See what we're supposed to do
970 case "$1" in
971 build)
972 clear
973 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
974 #only restore on a clean disk
975 if [ ! -f log/cleanup-toolchain-2-tools ]; then
976 if [ ! -n "$PACKAGE" ]; then
977 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
978 prepareenv
979 buildtoolchain
980 else
981 PACKAGENAME=${PACKAGE%.tar.gz}
982 beautify build_stage "Packaged toolchain compilation"
983 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
984 tar zxf $PACKAGE
985 prepareenv
986 else
987 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
988 fi
989 fi
990 else
991 echo -n "Using installed toolchain" | tee -a $LOGFILE
992 beautify message SKIP
993 prepareenv
994 fi
995
996 beautify build_start
997 beautify build_stage "Building LFS"
998 buildbase
999
1000 beautify build_stage "Building IPFire"
1001 buildipfire
1002
1003 beautify build_stage "Building installer"
1004 buildinstaller
1005
1006 beautify build_stage "Building packages"
1007 buildpackages
1008
1009 beautify build_stage "Checking Logfiles for new Files"
1010
1011 cd $BASEDIR
1012 tools/checknewlog.pl
1013 tools/checkrootfiles
1014 cd $PWD
1015
1016 beautify build_end
1017 ;;
1018 shell)
1019 # enter a shell inside LFS chroot
1020 # may be used to changed kernel settings
1021 prepareenv
1022 entershell
1023 ;;
1024 clean)
1025 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
1026 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1027 $LOSETUP -d $i 2>/dev/null
1028 done
1029 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1030 umount $i
1031 done
1032 stdumount
1033 for i in `seq 0 7`; do
1034 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1035 umount /dev/loop${i} 2>/dev/null;
1036 losetup -d /dev/loop${i} 2>/dev/null;
1037 fi;
1038 done
1039 rm -rf $BASEDIR/build
1040 rm -rf $BASEDIR/cdrom
1041 rm -rf $BASEDIR/packages
1042 rm -rf $BASEDIR/log
1043 if [ -h /tools ]; then
1044 rm -f /tools
1045 fi
1046 rm -f $BASEDIR/ipfire-*
1047 beautify message DONE
1048 ;;
1049 downloadsrc)
1050 if [ ! -d $BASEDIR/cache ]; then
1051 mkdir $BASEDIR/cache
1052 fi
1053 mkdir -p $BASEDIR/log
1054 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
1055 FINISHED=0
1056 cd $BASEDIR/lfs
1057 for c in `seq $MAX_RETRIES`; do
1058 if (( FINISHED==1 )); then
1059 break
1060 fi
1061 FINISHED=1
1062 cd $BASEDIR/lfs
1063 for i in *; do
1064 if [ -f "$i" -a "$i" != "Config" ]; then
1065 lfsmakecommoncheck ${i} || continue
1066
1067 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1068 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1069 if [ $? -ne 0 ]; then
1070 beautify message FAIL
1071 FINISHED=0
1072 else
1073 if [ $c -eq 1 ]; then
1074 beautify message DONE
1075 fi
1076 fi
1077 fi
1078 done
1079 done
1080 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1081 ERROR=0
1082 for i in *; do
1083 if [ -f "$i" -a "$i" != "Config" ]; then
1084 lfsmakecommoncheck ${i} > /dev/null || continue
1085 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1086 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1087 if [ $? -ne 0 ]; then
1088 echo -ne "MD5 difference in lfs/$i"
1089 beautify message FAIL
1090 ERROR=1
1091 fi
1092 fi
1093 done
1094 if [ $ERROR -eq 0 ]; then
1095 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1096 beautify message DONE
1097 else
1098 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1099 beautify message FAIL
1100 fi
1101 cd - >/dev/null 2>&1
1102 ;;
1103 toolchain)
1104 clear
1105 prepareenv
1106 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1107 buildtoolchain
1108 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1109 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1110 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1111 build/tools build/bin/sh log >> $LOGFILE
1112 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1113 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1114 stdumount
1115 ;;
1116 gettoolchain)
1117 # arbitrary name to be updated in case of new toolchain package upload
1118 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1119 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1120 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1121 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1122 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1123 cd $BASEDIR/cache/toolchains
1124 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1125 if [ $? -ne 0 ]; then
1126 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1127 else
1128 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1129 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1130 else
1131 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1132 fi
1133 fi
1134 else
1135 echo "Toolchain is already downloaded. Exiting..."
1136 fi
1137 ;;
1138 othersrc)
1139 prepareenv
1140 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1141 chroot $LFS /tools/bin/env -i HOME=/root \
1142 TERM=$TERM PS1='\u:\w\$ ' \
1143 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1144 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1145 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1146 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1147 if [ $? -eq "0" ]; then
1148 beautify message DONE
1149 else
1150 beautify message FAIL
1151 fi
1152 stdumount
1153 ;;
1154 uploadsrc)
1155 PWD=`pwd`
1156 if [ -z $IPFIRE_USER ]; then
1157 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1158 beautify message FAIL
1159 exit 1
1160 fi
1161
1162 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1163 REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1164
1165 for file in ${BASEDIR}/cache/*; do
1166 [ -d "${file}" ] && continue
1167 grep -q "$(basename ${file})" <<<$REMOTE_FILES && continue
1168 NEW_FILES="$NEW_FILES $file"
1169 done
1170 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1171 cd $BASEDIR
1172 cd $PWD
1173 exit 0
1174 ;;
1175 lang)
1176 update_langs
1177 ;;
1178 *)
1179 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1180 cat doc/make.sh-usage
1181 ;;
1182 esac