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