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