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