perl-Net-SMTP-SSL: New package
[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-2015 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="91"                                                       # Core Level (Filename)
29 PAKFIRE_CORE="91"                                               # 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=9
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 backports                    KCFG="-pae"
415                 ipfiremake cryptodev                    KCFG="-pae"
416                 ipfiremake e1000e                       KCFG="-pae"
417 #               ipfiremake igb                          KCFG="-pae"
418                 ipfiremake ixgbe                        KCFG="-pae"
419                 ipfiremake xtables-addons               KCFG="-pae"
420                 ipfiremake linux-initrd                 KCFG="-pae"
421
422                 # x86 kernel build
423                 ipfiremake linux                        KCFG=""
424                 ipfiremake backports                    KCFG=""
425                 ipfiremake cryptodev                    KCFG=""
426                 ipfiremake e1000e                       KCFG=""
427 #               ipfiremake igb                          KCFG=""
428                 ipfiremake ixgbe                        KCFG=""
429                 ipfiremake xtables-addons               KCFG=""
430                 ipfiremake linux-initrd                 KCFG=""
431                 ;;
432
433         armv5tel)
434                 # arm-rpi (Raspberry Pi) kernel build
435                 ipfiremake linux                        KCFG="-rpi"
436                 ipfiremake backports                    KCFG="-rpi"
437                 ipfiremake cryptodev                    KCFG="-rpi"
438                 ipfiremake xtables-addons               KCFG="-rpi"
439                 ipfiremake linux-initrd                 KCFG="-rpi"
440
441                 # arm multi platform (Panda, Wandboard ...) kernel build
442                 ipfiremake linux                        KCFG="-multi"
443                 ipfiremake backports                    KCFG="-multi"
444                 ipfiremake cryptodev                    KCFG="-multi"
445                 ipfiremake e1000e                       KCFG="-multi"
446 #               ipfiremake igb                          KCFG="-multi"
447                 ipfiremake ixgbe                        KCFG="-multi"
448                 ipfiremake xtables-addons               KCFG="-multi"
449                 ipfiremake linux-initrd                 KCFG="-multi"
450
451                 # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build
452                 ipfiremake linux                        KCFG="-kirkwood"
453                 ipfiremake backports                    KCFG="-kirkwood"
454                 ipfiremake cryptodev                    KCFG="-kirkwood"
455                 ipfiremake e1000e                       KCFG="-kirkwood"
456 #               ipfiremake igb                          KCFG="-kirkwood"
457                 ipfiremake ixgbe                        KCFG="-kirkwood"
458                 ipfiremake xtables-addons               KCFG="-kirkwood"
459                 ipfiremake linux-initrd                 KCFG="-kirkwood"
460                 ;;
461   esac
462   ipfiremake xtables-addons                     USPACE="1"
463   ipfiremake openssl
464   [ "${TARGET_ARCH}" = "i586" ] && ipfiremake openssl KCFG='-sse2'
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 gd
492   ipfiremake popt
493   ipfiremake pcre
494   ipfiremake slang
495   ipfiremake newt
496   ipfiremake libsmooth
497   ipfiremake attr
498   ipfiremake acl
499   ipfiremake libcap
500   ipfiremake pciutils
501   ipfiremake usbutils
502   ipfiremake libxml2
503   ipfiremake libxslt
504   ipfiremake BerkeleyDB
505   ipfiremake mysql
506   ipfiremake cyrus-sasl
507   ipfiremake openldap
508   ipfiremake apache2
509   ipfiremake php
510   ipfiremake web-user-interface
511   ipfiremake flag-icons
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 conntrack-tools
539   ipfiremake libupnp
540   ipfiremake ipaddr
541   ipfiremake iputils
542   ipfiremake l7-protocols
543   ipfiremake mISDNuser
544   ipfiremake capi4k-utils
545   ipfiremake hwdata
546   ipfiremake logrotate
547   ipfiremake logwatch
548   ipfiremake misc-progs
549   ipfiremake nano
550   ipfiremake URI
551   ipfiremake HTML-Tagset
552   ipfiremake HTML-Parser
553   ipfiremake HTML-Template
554   ipfiremake Compress-Zlib
555   ipfiremake Digest
556   ipfiremake Digest-SHA1
557   ipfiremake Digest-HMAC
558   ipfiremake libwww-perl
559   ipfiremake Net-DNS
560   ipfiremake Net-IPv4Addr
561   ipfiremake Net_SSLeay
562   ipfiremake IO-Stringy
563   ipfiremake IO-Socket-SSL
564   ipfiremake Unix-Syslog
565   ipfiremake Mail-Tools
566   ipfiremake MIME-Tools
567   ipfiremake Net-Server
568   ipfiremake Convert-TNEF
569   ipfiremake Convert-UUlib
570   ipfiremake Archive-Tar
571   ipfiremake Archive-Zip
572   ipfiremake Text-Tabs+Wrap
573   ipfiremake Locale-Country
574   ipfiremake XML-Parser
575   ipfiremake Crypt-PasswdMD5
576   ipfiremake Net-Telnet
577   ipfiremake python-setuptools
578   ipfiremake python-clientform
579   ipfiremake python-mechanize
580   ipfiremake python-feedparser
581   ipfiremake python-rssdler
582   ipfiremake libffi
583   ipfiremake glib
584   ipfiremake GeoIP
585   ipfiremake fwhits
586   ipfiremake noip_updater
587   ipfiremake ntp
588   ipfiremake openssh
589   ipfiremake fontconfig
590   ipfiremake dejavu-fonts-ttf
591   ipfiremake freefont
592   ipfiremake pixman
593   ipfiremake cairo
594   ipfiremake pango
595   ipfiremake rrdtool
596   ipfiremake setserial
597   ipfiremake setup
598   ipfiremake libdnet
599   ipfiremake daq
600   ipfiremake snort
601   ipfiremake oinkmaster
602   ipfiremake squid
603   ipfiremake squidguard
604   ipfiremake calamaris
605   ipfiremake tcpdump
606   ipfiremake traceroute
607   ipfiremake vlan
608   ipfiremake wireless
609   ipfiremake pakfire
610   ipfiremake spandsp
611   ipfiremake lzo
612   ipfiremake openvpn
613   ipfiremake pammysql
614   ipfiremake mpage
615   ipfiremake dbus
616   ipfiremake cups
617   ipfiremake ghostscript
618   ipfiremake foomatic
619   ipfiremake hplip
620   ipfiremake cifs-utils
621   ipfiremake krb5
622   ipfiremake samba
623   ipfiremake sudo
624   ipfiremake mc
625   ipfiremake wget
626   ipfiremake bridge-utils
627   ipfiremake screen
628   ipfiremake smartmontools
629   ipfiremake htop
630   ipfiremake postfix
631   ipfiremake fetchmail
632   ipfiremake cyrus-imapd
633   ipfiremake openmailadmin
634   ipfiremake clamav
635   ipfiremake spamassassin
636   ipfiremake amavisd
637   ipfiremake alsa
638   ipfiremake mpfire
639   ipfiremake guardian
640   ipfiremake libid3tag
641   ipfiremake libmad
642   ipfiremake libogg
643   ipfiremake libvorbis
644   ipfiremake libdvbpsi
645   ipfiremake flac
646   ipfiremake lame
647   ipfiremake sox
648   ipfiremake libshout
649   ipfiremake xvid
650   ipfiremake libmpeg2
651   ipfiremake cmake
652   ipfiremake gnump3d
653   ipfiremake rsync
654   ipfiremake tcpwrapper
655   ipfiremake libevent
656   ipfiremake libevent2
657   ipfiremake portmap
658   ipfiremake nfs
659   ipfiremake nmap
660   ipfiremake ncftp
661   ipfiremake etherwake
662   ipfiremake bwm-ng
663   ipfiremake tripwire
664   ipfiremake sysstat
665   ipfiremake vsftpd
666   ipfiremake strongswan
667   ipfiremake rng-tools
668   ipfiremake lsof
669   ipfiremake br2684ctl
670   ipfiremake pcmciautils
671   ipfiremake lm_sensors
672   ipfiremake liboping
673   ipfiremake collectd
674   ipfiremake elinks
675   ipfiremake igmpproxy
676   ipfiremake fbset
677   ipfiremake sdl
678   ipfiremake qemu
679   ipfiremake sane
680   ipfiremake netpbm
681   ipfiremake phpSANE
682   ipfiremake tunctl
683   ipfiremake netsnmpd
684   ipfiremake nagios
685   ipfiremake nagios_nrpe
686   ipfiremake icinga
687   ipfiremake ebtables
688   ipfiremake directfb
689   ipfiremake dfb++
690   ipfiremake faad2
691   ipfiremake ffmpeg
692   ipfiremake vdr
693   ipfiremake vdr_streamdev
694   ipfiremake vdr_vnsiserver5
695   ipfiremake vdr_vnsiserver3
696   ipfiremake vdr_epgsearch
697   ipfiremake vdr_dvbapi
698   ipfiremake vdr_eepg
699   ipfiremake w_scan
700   ipfiremake icecast
701   ipfiremake icegenerator
702   ipfiremake mpd
703   ipfiremake libmpdclient
704   ipfiremake mpc
705   ipfiremake perl-Net-SMTP-SSL
706   ipfiremake git
707   ipfiremake squidclamav
708   ipfiremake vnstat
709   ipfiremake iw
710   ipfiremake wpa_supplicant
711   ipfiremake hostapd
712   ipfiremake pycurl
713   ipfiremake urlgrabber
714   ipfiremake syslinux
715   ipfiremake tftpd
716   ipfiremake cpufrequtils
717   ipfiremake bluetooth
718   ipfiremake gutenprint
719   ipfiremake apcupsd
720   ipfiremake iperf
721   ipfiremake netcat
722   ipfiremake 7zip
723   ipfiremake lynis
724   ipfiremake streamripper
725   ipfiremake sshfs
726   ipfiremake taglib
727   ipfiremake mediatomb
728   ipfiremake sslh
729   ipfiremake perl-gettext
730   ipfiremake perl-Sort-Naturally
731   ipfiremake vdradmin
732   ipfiremake miau
733   ipfiremake perl-DBI
734   ipfiremake perl-DBD-mysql
735   ipfiremake perl-DBD-SQLite
736   ipfiremake perl-File-ReadBackwards
737   ipfiremake cacti
738   ipfiremake openvmtools
739   ipfiremake nagiosql
740   ipfiremake iftop
741   ipfiremake motion
742   ipfiremake joe
743   ipfiremake monit
744   ipfiremake nut
745   ipfiremake watchdog
746   ipfiremake libpri
747   ipfiremake libsrtp
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   ipfiremake tmux
821   ipfiremake perl-Text-CSV_XS
822   ipfiremake swconfig
823   ipfiremake haproxy
824 }
825
826 buildinstaller() {
827   # Run installer scripts one by one
828   LOGFILE="$BASEDIR/log/_build.installer.log"
829   export LOGFILE
830   ipfiremake memtest
831   ipfiremake installer
832   installmake strip
833 }
834
835 buildpackages() {
836   LOGFILE="$BASEDIR/log/_build.packages.log"
837   export LOGFILE
838   echo "... see detailed log in _build.*.log files" >> $LOGFILE
839
840   
841   # Generating list of packages used
842   echo -n "Generating packages list from logs" | tee -a $LOGFILE
843   rm -f $BASEDIR/doc/packages-list
844   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
845         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
846                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
847         fi
848   done
849   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
850   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
851         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
852   rm -f $BASEDIR/doc/packages-list
853   # packages-list.txt is ready to be displayed for wiki page
854   beautify message DONE
855   
856   # Update changelog
857   cd $BASEDIR
858   [ -z $GIT_TAG ]  || LAST_TAG=$GIT_TAG
859   [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
860   git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
861
862   # Create images for install
863   ipfiremake cdrom
864
865   # Check if there is a loop device for building in virtual environments
866   modprobe loop 2>/dev/null
867   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
868         ipfiremake flash-images
869         ipfiremake flash-images SCON=1
870   fi
871
872   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
873
874   ipfirepackages
875
876   ipfiremake xen-image
877   mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
878
879   cd $BASEDIR
880   for i in `ls *.bz2 *.img.gz *.iso`; do
881         md5sum $i > $i.md5
882   done
883   cd $PWD
884
885   # Cleanup
886   stdumount
887   rm -rf $BASEDIR/build/tmp/*
888
889   # Generating total list of files
890   echo -n "Generating files list from logs" | tee -a $LOGFILE
891   rm -f $BASEDIR/log/FILES
892   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
893         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
894                 echo "##" >>$BASEDIR/log/FILES
895                 echo "## `basename $i`" >>$BASEDIR/log/FILES
896                 echo "##" >>$BASEDIR/log/FILES
897                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
898         fi
899   done
900   beautify message DONE
901
902   cd $PWD
903 }
904
905 ipfirepackages() {
906         ipfiremake core-updates
907
908         local i
909         for i in $(find $BASEDIR/config/rootfiles/packages{/${MACHINE},} -maxdepth 1 -type f); do
910                 i=$(basename ${i})
911                 if [ -e $BASEDIR/lfs/$i ]; then
912                         ipfiredist $i
913                 else
914                         echo -n $i
915                         beautify message SKIP
916                 fi
917         done
918   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
919   mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
920   rm -rf  $BASEDIR/build/install/packages/*
921 }
922
923 while [ $# -gt 0 ]; do
924         case "${1}" in
925                 --target=*)
926                         configure_target "${1#--target=}"
927                         ;;
928                 -*)
929                         exiterror "Unknown configuration option: ${1}"
930                         ;;
931                 *)
932                         # Found a command, so exit options parsing.
933                         break
934                         ;;
935         esac
936         shift
937 done
938
939 # See what we're supposed to do
940 case "$1" in 
941 build)
942         clear
943         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
944         #only restore on a clean disk
945         if [ ! -f log/cleanup-toolchain-2-tools ]; then
946                 if [ ! -n "$PACKAGE" ]; then
947                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
948                         prepareenv
949                         buildtoolchain
950                 else
951                         PACKAGENAME=${PACKAGE%.tar.gz}
952                         beautify build_stage "Packaged toolchain compilation"
953                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
954                                 tar zxf $PACKAGE
955                                 prepareenv
956                         else
957                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
958                         fi
959                 fi
960         else
961                 echo -n "Using installed toolchain" | tee -a $LOGFILE
962                 beautify message SKIP
963                 prepareenv
964         fi
965
966         beautify build_start
967         beautify build_stage "Building LFS"
968         buildbase
969
970         beautify build_stage "Building IPFire"
971         buildipfire
972
973         beautify build_stage "Building installer"
974         buildinstaller
975
976         beautify build_stage "Building packages"
977         buildpackages
978         
979         beautify build_stage "Checking Logfiles for new Files"
980
981         cd $BASEDIR
982         tools/checknewlog.pl
983         tools/checkrootfiles
984         cd $PWD
985
986         beautify build_end
987         ;;
988 shell)
989         # enter a shell inside LFS chroot
990         # may be used to changed kernel settings
991         prepareenv
992         entershell
993         ;;
994 clean)
995         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
996         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
997                 $LOSETUP -d $i 2>/dev/null
998         done
999         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1000                 umount $i
1001         done
1002         stdumount
1003         for i in `seq 0 7`; do
1004             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1005                 umount /dev/loop${i}     2>/dev/null;
1006                 losetup -d /dev/loop${i} 2>/dev/null;
1007             fi;
1008         done
1009         rm -rf $BASEDIR/build
1010         rm -rf $BASEDIR/cdrom
1011         rm -rf $BASEDIR/packages
1012         rm -rf $BASEDIR/log
1013         if [ -h /tools ]; then
1014                 rm -f /tools
1015         fi
1016         rm -f $BASEDIR/ipfire-*
1017         beautify message DONE
1018         ;;
1019 downloadsrc)
1020         if [ ! -d $BASEDIR/cache ]; then
1021                 mkdir $BASEDIR/cache
1022         fi
1023         mkdir -p $BASEDIR/log
1024         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
1025         FINISHED=0
1026         cd $BASEDIR/lfs
1027         for c in `seq $MAX_RETRIES`; do
1028                 if (( FINISHED==1 )); then 
1029                         break
1030                 fi
1031                 FINISHED=1
1032                 cd $BASEDIR/lfs
1033                 for i in *; do
1034                         if [ -f "$i" -a "$i" != "Config" ]; then
1035                                 lfsmakecommoncheck ${i} || continue
1036
1037                                 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1038                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1039                                 if [ $? -ne 0 ]; then
1040                                         beautify message FAIL
1041                                         FINISHED=0
1042                                 else
1043                                         if [ $c -eq 1 ]; then
1044                                         beautify message DONE
1045                                         fi
1046                                 fi
1047                         fi
1048                 done
1049         done
1050         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1051         ERROR=0
1052         for i in *; do
1053                 if [ -f "$i" -a "$i" != "Config" ]; then
1054                         lfsmakecommoncheck ${i} > /dev/null || continue
1055                         make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1056                                 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1057                         if [ $? -ne 0 ]; then
1058                                 echo -ne "MD5 difference in lfs/$i"
1059                                 beautify message FAIL
1060                                 ERROR=1
1061                         fi
1062                 fi
1063         done
1064         if [ $ERROR -eq 0 ]; then
1065                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1066                 beautify message DONE
1067         else
1068                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1069                 beautify message FAIL
1070         fi
1071         cd - >/dev/null 2>&1
1072         ;;
1073 toolchain)
1074         clear
1075         prepareenv
1076         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1077         buildtoolchain
1078         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1079         test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1080         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1081                 build/tools build/bin/sh log >> $LOGFILE
1082         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1083                 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1084         stdumount
1085         ;;
1086 gettoolchain)
1087         # arbitrary name to be updated in case of new toolchain package upload
1088         PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1089         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1090                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1091                 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1092                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1093                 cd $BASEDIR/cache/toolchains
1094                 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1095                 if [ $? -ne 0 ]; then
1096                         echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1097                 else
1098                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1099                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1100                         else
1101                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1102                         fi
1103                 fi
1104         else
1105                 echo "Toolchain is already downloaded. Exiting..."
1106         fi
1107         ;;
1108 othersrc)
1109         prepareenv
1110         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1111         chroot $LFS /tools/bin/env -i   HOME=/root \
1112         TERM=$TERM PS1='\u:\w\$ ' \
1113         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1114         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1115         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1116         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1117         if [ $? -eq "0" ]; then
1118                 beautify message DONE
1119         else
1120                 beautify message FAIL
1121         fi
1122         stdumount
1123         ;;
1124 uploadsrc)
1125         PWD=`pwd`
1126         if [ -z $IPFIRE_USER ]; then
1127                 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1128                 beautify message FAIL
1129                 exit 1
1130         fi
1131
1132         URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1133         REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1134
1135         for file in ${BASEDIR}/cache/*; do
1136                 [ -d "${file}" ] && continue
1137                 grep -q "$(basename ${file})" <<<$REMOTE_FILES && continue
1138                 NEW_FILES="$NEW_FILES $file"
1139         done
1140         [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1141         cd $BASEDIR
1142         cd $PWD
1143         exit 0
1144         ;;
1145 lang)
1146         update_langs
1147         ;;
1148 *)
1149         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1150         cat doc/make.sh-usage
1151         ;;
1152 esac