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