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