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