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