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