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