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