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