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