perl-Text-CSV_XS: 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-2014 IPFire Team <info@ipfire.org>.                   #
21 #                                                                          #
22 ############################################################################
23 #
24
25 NAME="IPFire"                                                   # Software name
26 SNAME="ipfire"                                                  # Short name
27 VERSION="2.17"                                                  # Version number
28 CORE="86"                                                       # Core Level (Filename)
29 PAKFIRE_CORE="85"                                               # Core Level (PAKFIRE)
30 GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`                    # Git Branch
31 SLOGAN="www.ipfire.org"                                         # Software slogan
32 CONFIG_ROOT=/var/ipfire                                         # Configuration rootdir
33 NICE=10                                                         # Nice level
34 MAX_RETRIES=1                                                   # prefetch/check loop
35 BUILD_IMAGES=1                                                  # Flash and Xen Downloader
36 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
37 GIT_TAG=$(git tag | tail -1)                                    # Git Tag
38 GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8)  # Last commit
39 TOOLCHAINVER=8
40
41 # New architecture variables
42 BUILD_ARCH="$(uname -m)"
43 BUILDMACHINE="${BUILD_ARCH}"
44
45 # Debian specific settings
46 if [ ! -e /etc/debian_version ]; then
47         FULLPATH=`which $0`
48 else
49         if [ -x /usr/bin/realpath ]; then
50                 FULLPATH=`/usr/bin/realpath $0`
51         else
52                 echo "ERROR: Need to do apt-get install realpath"
53                 exit 1
54         fi
55 fi
56
57 PWD=`pwd`
58 BASENAME=`basename $0`
59 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
60 LOGFILE=$BASEDIR/log/_build.preparation.log
61 export BASEDIR LOGFILE
62 DIR_CHK=$BASEDIR/cache/check
63 mkdir $BASEDIR/log/ 2>/dev/null
64
65 # Include funtions
66 . tools/make-functions
67
68 if [ -f .config ]; then
69         . .config
70 fi
71
72 if [ -n "${TARGET_ARCH}" ]; then
73         configure_target "${TARGET_ARCH}"
74 else
75         configure_target "default"
76 fi
77
78 if [ -z $EDITOR ]; then
79         for i in nano emacs vi; do
80                 EDITOR=$(which $i 2>/dev/null)
81                 if ! [ -z $EDITOR ]; then
82                         export EDITOR=$EDITOR
83                         break
84                 fi
85         done
86         [ -z $EDITOR ] && exiterror "You should have installed an editor."
87 fi
88
89 # Prepare string for /etc/system-release.
90 SYSTEM_RELEASE="${NAME} ${VERSION} (${MACHINE})"
91 if [ "$(git status -s | wc -l)" == "0" ]; then
92         GIT_STATUS=""
93 else
94         GIT_STATUS="-dirty"
95 fi
96 case "$GIT_BRANCH" in
97         core*|beta?|rc?)
98                 SYSTEM_RELEASE="${SYSTEM_RELEASE} - $GIT_BRANCH$GIT_STATUS"
99                 ;;
100         *)
101                 SYSTEM_RELEASE="${SYSTEM_RELEASE} - Development Build: $GIT_BRANCH/$GIT_LASTCOMMIT$GIT_STATUS"
102                 ;;
103 esac
104
105 prepareenv() {
106     ############################################################################
107     #                                                                          #
108     # Are we running the right shell?                                          #
109     #                                                                          #
110     ############################################################################
111     if [ ! "$BASH" ]; then
112                         exiterror "BASH environment variable is not set.  You're probably running the wrong shell."
113     fi
114
115     if [ -z "${BASH_VERSION}" ]; then
116                         exiterror "Not running BASH shell."
117     fi
118
119
120     ############################################################################
121     #                                                                          #
122     # Trap on emergency exit                                                   #
123     #                                                                          #
124     ############################################################################
125     trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
126
127
128     ############################################################################
129     #                                                                          #
130     # Resetting our nice level                                                 #
131     #                                                                          #
132     ############################################################################
133     echo -ne "Resetting our nice level to $NICE" | tee -a $LOGFILE
134     renice $NICE $$ > /dev/null
135     if [ `nice` != "$NICE" ]; then
136                         beautify message FAIL
137                         exiterror "Failed to set correct nice level"
138     else
139                         beautify message DONE
140     fi
141
142
143     ############################################################################
144     #                                                                          #
145     # Checking if running as root user                                         #
146     #                                                                          #
147     ############################################################################
148     echo -ne "Checking if we're running as root user" | tee -a $LOGFILE
149     if [ `id -u` != 0 ]; then
150                         beautify message FAIL
151                         exiterror "Not building as root"
152     else
153                         beautify message DONE
154     fi
155
156
157     ############################################################################
158     #                                                                          #
159     # Checking for necessary temporary space                                   #
160     #                                                                          #
161     ############################################################################
162     echo -ne "Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
163     BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
164     BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
165     if (( 2048000 > $BASE_ASPACE )); then
166                         BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
167                         if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
168                                 beautify message FAIL
169                                 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
170                         fi
171     else
172                         beautify message DONE
173     fi
174
175     ############################################################################
176     #                                                                          #
177     # Building Linux From Scratch system                                       #
178     #                                                                          #
179     ############################################################################
180     # Set umask
181     umask 022
182
183     # Set LFS Directory
184     LFS=$BASEDIR/build
185
186     # Check /tools symlink
187     if [ -h /tools ]; then
188         rm -f /tools
189     fi
190     if [ ! -a /tools ]; then
191                         ln -s $BASEDIR/build/tools /
192     fi
193     if [ ! -h /tools ]; then
194                         exiterror "Could not create /tools symbolic link."
195     fi
196
197     # Setup environment
198     set +h
199     LC_ALL=POSIX
200     if [ -z $MAKETUNING ]; then
201         CPU_COUNT="$(getconf _NPROCESSORS_ONLN 2>/dev/null)"
202         if [ -z "${CPU_COUNT}" ]; then
203                 CPU_COUNT=1
204         fi
205
206         MAKETUNING="-j$(( ${CPU_COUNT} * 2 + 1 ))"
207     fi
208     export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
209     unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
210
211     # Make some extra directories
212     mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
213     mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
214     mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
215     mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
216
217     mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
218     mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
219
220     # Make all sources and proc available under lfs build
221     mount --bind /dev            $BASEDIR/build/dev
222     mount --bind /dev/pts        $BASEDIR/build/dev/pts
223     mount --bind /dev/shm        $BASEDIR/build/dev/shm
224     mount --bind /proc           $BASEDIR/build/proc
225     mount --bind /sys            $BASEDIR/build/sys
226     mount --bind $BASEDIR/cache  $BASEDIR/build/usr/src/cache
227     mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
228     mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
229     mount --bind $BASEDIR/doc    $BASEDIR/build/usr/src/doc
230     mount --bind $BASEDIR/html   $BASEDIR/build/usr/src/html
231     mount --bind $BASEDIR/langs  $BASEDIR/build/usr/src/langs
232     mount --bind $BASEDIR/lfs    $BASEDIR/build/usr/src/lfs
233     mount --bind $BASEDIR/log    $BASEDIR/build/usr/src/log
234     mount --bind $BASEDIR/src    $BASEDIR/build/usr/src/src
235
236     # Run LFS static binary creation scripts one by one
237     export CCACHE_DIR=$BASEDIR/ccache
238     export CCACHE_COMPRESS=1
239     export CCACHE_COMPILERCHECK="none"
240
241     # Remove pre-install list of installed files in case user erase some files before rebuild
242     rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
243 }
244
245 buildtoolchain() {
246     local error=false
247     case "${TARGET_ARCH}:${BUILD_ARCH}" in
248         # x86
249         i586:i586|i586:i686|i586:x86_64)
250             # These are working.
251             ;;
252         i586:*)
253             error=true
254             ;;
255
256         # ARM
257         armv5tel:armv5tel|armv5tel:armv5tejl|armv5tel:armv6l|armv5tel:armv7l)
258             # These are working.
259             ;;
260         armv5tel:*)
261             error=true
262             ;;
263     esac
264
265     ${error} && \
266         exiterror "Cannot build ${MACHINE} toolchain on $(uname -m). Please use the download if any."
267
268     local gcc=$(type -p gcc)
269     if [ -z "${gcc}" ]; then
270         exiterror "Could not find GCC. You will need a working build enviroment in order to build the toolchain."
271     fi
272
273     LOGFILE="$BASEDIR/log/_build.toolchain.log"
274     export LOGFILE
275
276     local ORG_PATH=$PATH
277     export PATH="/tools/ccache/bin:/tools/bin:$PATH"
278     lfsmake1 ccache                     PASS=1
279     lfsmake1 binutils                   PASS=1
280     lfsmake1 gcc                        PASS=1
281     lfsmake1 linux                      TOOLS=1 KCFG="-headers"
282     lfsmake1 glibc
283     lfsmake1 cleanup-toolchain          PASS=1
284     lfsmake1 binutils                   PASS=2
285     lfsmake1 gcc                        PASS=2
286     lfsmake1 ccache                     PASS=2
287     lfsmake1 tcl
288     lfsmake1 expect
289     lfsmake1 dejagnu
290     lfsmake1 ncurses
291     lfsmake1 bash
292     lfsmake1 bzip2
293     lfsmake1 coreutils
294     lfsmake1 diffutils
295     lfsmake1 findutils
296     lfsmake1 gawk
297     lfsmake1 gettext
298     lfsmake1 grep
299     lfsmake1 gzip
300     lfsmake1 m4
301     lfsmake1 make
302     lfsmake1 patch
303     lfsmake1 perl
304     lfsmake1 sed
305     lfsmake1 tar
306     lfsmake1 texinfo
307     lfsmake1 xz
308     lfsmake1 fake-environ
309     lfsmake1 cleanup-toolchain          PASS=2
310     export PATH=$ORG_PATH
311 }
312
313 buildbase() {
314     LOGFILE="$BASEDIR/log/_build.base.log"
315     export LOGFILE
316     lfsmake2 stage2
317     lfsmake2 linux                      KCFG="-headers"
318     lfsmake2 man-pages
319     lfsmake2 glibc
320     lfsmake2 tzdata
321     lfsmake2 cleanup-toolchain          PASS=3
322     lfsmake2 zlib
323     lfsmake2 binutils
324     lfsmake2 gmp
325     lfsmake2 gmp-compat
326     lfsmake2 mpfr
327     lfsmake2 file
328     lfsmake2 gcc
329     lfsmake2 sed
330     lfsmake2 berkeley
331     lfsmake2 coreutils
332     lfsmake2 iana-etc
333     lfsmake2 m4
334     lfsmake2 bison
335     lfsmake2 ncurses
336     lfsmake2 procps
337     lfsmake2 libtool
338     lfsmake2 perl
339     lfsmake2 readline
340     lfsmake2 readline-compat
341     lfsmake2 pcre
342     lfsmake2 pcre-compat
343     lfsmake2 autoconf
344     lfsmake2 automake
345     lfsmake2 bash
346     lfsmake2 bzip2
347     lfsmake2 diffutils
348     lfsmake2 e2fsprogs
349     lfsmake2 ed
350     lfsmake2 findutils
351     lfsmake2 flex
352     lfsmake2 gawk
353     lfsmake2 gettext
354     lfsmake2 grep
355     lfsmake2 groff
356     lfsmake2 gperf
357     lfsmake2 gzip
358     lfsmake2 hostname
359     lfsmake2 iproute2
360     lfsmake2 jwhois
361     lfsmake2 kbd
362     lfsmake2 less
363     lfsmake2 make
364     lfsmake2 man
365     lfsmake2 kmod
366     lfsmake2 net-tools
367     lfsmake2 patch
368     lfsmake2 psmisc
369     lfsmake2 shadow
370     lfsmake2 sysklogd
371     lfsmake2 sysvinit
372     lfsmake2 tar
373     lfsmake2 texinfo
374     lfsmake2 util-linux
375     lfsmake2 udev
376     lfsmake2 vim
377     lfsmake2 xz
378     lfsmake2 paxctl
379 }
380
381 buildipfire() {
382   LOGFILE="$BASEDIR/log/_build.ipfire.log"
383   export LOGFILE
384   ipfiremake configroot
385   ipfiremake backup
386   ipfiremake libusb
387   ipfiremake libusbx
388   ipfiremake libpcap
389   ipfiremake ppp
390   ipfiremake pptp
391   ipfiremake unzip
392   ipfiremake which
393   ipfiremake linux-firmware
394   ipfiremake dvb-firmwares
395   ipfiremake zd1211-firmware
396   ipfiremake rpi-firmware
397   ipfiremake bc
398   ipfiremake u-boot
399   ipfiremake cpio
400   ipfiremake mdadm
401   ipfiremake dracut
402   ipfiremake lvm2
403   ipfiremake multipath-tools
404   ipfiremake freetype
405   ipfiremake grub
406
407   case "${TARGET_ARCH}" in
408         i586)
409                 # x86-pae (Native and new XEN) kernel build
410                 ipfiremake linux                        KCFG="-pae"
411                 ipfiremake cryptodev                    KCFG="-pae"
412                 ipfiremake e1000e                       KCFG="-pae"
413                 ipfiremake igb                          KCFG="-pae"
414                 ipfiremake ixgbe                        KCFG="-pae"
415                 ipfiremake linux-initrd                 KCFG="-pae"
416
417                 # x86 kernel build
418                 ipfiremake linux                        KCFG=""
419                 ipfiremake cryptodev                    KCFG=""
420                 ipfiremake e1000e                       KCFG=""
421                 ipfiremake igb                          KCFG=""
422                 ipfiremake ixgbe                        KCFG=""
423                 ipfiremake linux-initrd                 KCFG=""
424                 ;;
425
426         armv5tel)
427                 # arm-rpi (Raspberry Pi) kernel build
428                 ipfiremake linux                        KCFG="-rpi"
429                 ipfiremake cryptodev                    KCFG="-rpi"
430                 ipfiremake linux-initrd                 KCFG="-rpi"
431
432                 # arm multi platform (Panda, Wandboard ...) kernel build
433                 ipfiremake linux                        KCFG="-multi"
434                 ipfiremake cryptodev                    KCFG="-multi"
435                 ipfiremake e1000e                       KCFG="-multi"
436                 ipfiremake igb                          KCFG="-multi"
437                 ipfiremake ixgbe                        KCFG="-multi"
438                 ipfiremake linux-initrd                 KCFG="-multi"
439
440                 # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build
441                 ipfiremake linux                        KCFG="-kirkwood"
442                 ipfiremake cryptodev                    KCFG="-kirkwood"
443                 ipfiremake e1000e                       KCFG="-kirkwood"
444                 ipfiremake igb                          KCFG="-kirkwood"
445                 ipfiremake ixgbe                        KCFG="-kirkwood"
446                 ipfiremake linux-initrd                 KCFG="-kirkwood"
447                 ;;
448   esac
449   ipfiremake pkg-config
450   ipfiremake openssl
451   ipfiremake openssl-compat
452   ipfiremake libgpg-error
453   ipfiremake libgcrypt
454   ipfiremake libassuan
455   ipfiremake bind
456   ipfiremake dhcp
457   ipfiremake dhcpcd
458   ipfiremake boost
459   ipfiremake linux-atm
460   ipfiremake expat
461   ipfiremake gdbm
462   ipfiremake pam
463   ipfiremake curl
464   ipfiremake tcl
465   ipfiremake sqlite
466   ipfiremake python
467   ipfiremake fireinfo
468   ipfiremake libnet
469   ipfiremake libnl
470   ipfiremake libnl-3
471   ipfiremake libidn
472   ipfiremake nasm
473   ipfiremake libjpeg
474   ipfiremake libexif
475   ipfiremake libpng
476   ipfiremake libtiff
477   ipfiremake libart
478   ipfiremake gd
479   ipfiremake popt
480   ipfiremake pcre
481   ipfiremake slang
482   ipfiremake newt
483   ipfiremake libsmooth
484   ipfiremake attr
485   ipfiremake acl
486   ipfiremake libcap
487   ipfiremake pciutils
488   ipfiremake usbutils
489   ipfiremake libxml2
490   ipfiremake libxslt
491   ipfiremake BerkeleyDB
492   ipfiremake mysql
493   ipfiremake cyrus-sasl
494   ipfiremake openldap
495   ipfiremake apache2
496   ipfiremake php
497   ipfiremake apache2                    PASS=C
498   ipfiremake jquery
499   ipfiremake arping
500   ipfiremake beep
501   ipfiremake dvdrtools
502   ipfiremake nettle
503   ipfiremake dnsmasq
504   ipfiremake dosfstools
505   ipfiremake reiserfsprogs
506   ipfiremake xfsprogs
507   ipfiremake sysfsutils
508   ipfiremake fuse
509   ipfiremake ntfs-3g
510   ipfiremake ethtool
511   ipfiremake ez-ipupdate
512   ipfiremake fcron
513   ipfiremake perl-GD
514   ipfiremake GD-Graph
515   ipfiremake GD-TextUtil
516   ipfiremake perl-Device-SerialPort
517   ipfiremake perl-Device-Modem
518   ipfiremake gnupg
519   ipfiremake hdparm
520   ipfiremake sdparm
521   ipfiremake mtools
522   ipfiremake initscripts
523   ipfiremake whatmask
524   ipfiremake libmnl
525   ipfiremake iptables
526   ipfiremake conntrack-tools
527   ipfiremake libupnp
528   ipfiremake ipaddr
529   ipfiremake iputils
530   ipfiremake l7-protocols
531   ipfiremake mISDNuser
532   ipfiremake capi4k-utils
533   ipfiremake hwdata
534   ipfiremake logrotate
535   ipfiremake logwatch
536   ipfiremake misc-progs
537   ipfiremake nano
538   ipfiremake URI
539   ipfiremake HTML-Tagset
540   ipfiremake HTML-Parser
541   ipfiremake HTML-Template
542   ipfiremake Compress-Zlib
543   ipfiremake Digest
544   ipfiremake Digest-SHA1
545   ipfiremake Digest-HMAC
546   ipfiremake libwww-perl
547   ipfiremake Net-DNS
548   ipfiremake Net-IPv4Addr
549   ipfiremake Net_SSLeay
550   ipfiremake IO-Stringy
551   ipfiremake IO-Socket-SSL
552   ipfiremake Unix-Syslog
553   ipfiremake Mail-Tools
554   ipfiremake MIME-Tools
555   ipfiremake Net-Server
556   ipfiremake Convert-TNEF
557   ipfiremake Convert-UUlib
558   ipfiremake Archive-Tar
559   ipfiremake Archive-Zip
560   ipfiremake Text-Tabs+Wrap
561   ipfiremake Locale-Country
562   ipfiremake XML-Parser
563   ipfiremake Crypt-PasswdMD5
564   ipfiremake Net-Telnet
565   ipfiremake python-setuptools
566   ipfiremake python-clientform
567   ipfiremake python-mechanize
568   ipfiremake python-feedparser
569   ipfiremake python-rssdler
570   ipfiremake libffi
571   ipfiremake glib
572   ipfiremake GeoIP
573   ipfiremake fwhits
574   ipfiremake noip_updater
575   ipfiremake ntp
576   ipfiremake openssh
577   ipfiremake fontconfig
578   ipfiremake dejavu-fonts-ttf
579   ipfiremake freefont
580   ipfiremake pixman
581   ipfiremake cairo
582   ipfiremake pango
583   ipfiremake rrdtool
584   ipfiremake setserial
585   ipfiremake setup
586   ipfiremake libdnet
587   ipfiremake daq
588   ipfiremake snort
589   ipfiremake oinkmaster
590   ipfiremake squid
591   ipfiremake squidguard
592   ipfiremake calamaris
593   ipfiremake tcpdump
594   ipfiremake traceroute
595   ipfiremake vlan
596   ipfiremake wireless
597   ipfiremake pakfire
598   ipfiremake spandsp
599   ipfiremake lzo
600   ipfiremake openvpn
601   ipfiremake pammysql
602   ipfiremake mpage
603   ipfiremake dbus
604   ipfiremake cups
605   ipfiremake ghostscript
606   ipfiremake foomatic
607   ipfiremake hplip
608   ipfiremake cifs-utils
609   ipfiremake krb5
610   ipfiremake samba
611   ipfiremake sudo
612   ipfiremake mc
613   ipfiremake wget
614   ipfiremake bridge-utils
615   ipfiremake screen
616   ipfiremake smartmontools
617   ipfiremake htop
618   ipfiremake postfix
619   ipfiremake fetchmail
620   ipfiremake cyrus-imapd
621   ipfiremake openmailadmin
622   ipfiremake clamav
623   ipfiremake spamassassin
624   ipfiremake amavisd
625   ipfiremake alsa
626   ipfiremake mpfire
627   ipfiremake guardian
628   ipfiremake libid3tag
629   ipfiremake libmad
630   ipfiremake libogg
631   ipfiremake libvorbis
632   ipfiremake libdvbpsi
633   ipfiremake flac
634   ipfiremake lame
635   ipfiremake sox
636   ipfiremake libshout
637   ipfiremake xvid
638   ipfiremake libmpeg2
639   ipfiremake cmake
640   ipfiremake gnump3d
641   ipfiremake rsync
642   ipfiremake tcpwrapper
643   ipfiremake libevent
644   ipfiremake libevent2
645   ipfiremake portmap
646   ipfiremake nfs
647   ipfiremake nmap
648   ipfiremake ncftp
649   ipfiremake etherwake
650   ipfiremake bwm-ng
651   ipfiremake tripwire
652   ipfiremake sysstat
653   ipfiremake vsftpd
654   ipfiremake strongswan
655   ipfiremake rng-tools
656   ipfiremake lsof
657   ipfiremake br2684ctl
658   ipfiremake pcmciautils
659   ipfiremake lm_sensors
660   ipfiremake liboping
661   ipfiremake collectd
662   ipfiremake teamspeak
663   ipfiremake elinks
664   ipfiremake igmpproxy
665   ipfiremake fbset
666   ipfiremake sdl
667   ipfiremake qemu
668   ipfiremake sane
669   ipfiremake netpbm
670   ipfiremake phpSANE
671   ipfiremake tunctl
672   ipfiremake netsnmpd
673   ipfiremake nagios
674   ipfiremake nagios_nrpe
675   ipfiremake icinga
676   ipfiremake ebtables
677   ipfiremake directfb
678   ipfiremake dfb++
679   ipfiremake faad2
680   ipfiremake ffmpeg
681   ipfiremake vdr
682   ipfiremake vdr_streamdev
683   ipfiremake vdr_vnsiserver5
684   ipfiremake vdr_vnsiserver3
685   ipfiremake vdr_epgsearch
686   ipfiremake vdr_dvbapi
687   ipfiremake vdr_eepg
688   ipfiremake w_scan
689   ipfiremake icecast
690   ipfiremake icegenerator
691   ipfiremake mpd
692   ipfiremake libmpdclient
693   ipfiremake mpc
694   ipfiremake git
695   ipfiremake squidclamav
696   ipfiremake vnstat
697   ipfiremake iw
698   ipfiremake wpa_supplicant
699   ipfiremake hostapd
700   ipfiremake pycurl
701   ipfiremake urlgrabber
702   ipfiremake syslinux
703   ipfiremake tftpd
704   ipfiremake cpufrequtils
705   ipfiremake bluetooth
706   ipfiremake gutenprint
707   ipfiremake apcupsd
708   ipfiremake iperf
709   ipfiremake netcat
710   ipfiremake 7zip
711   ipfiremake lynis
712   ipfiremake streamripper
713   ipfiremake sshfs
714   ipfiremake taglib
715   ipfiremake mediatomb
716   ipfiremake sslh
717   ipfiremake perl-gettext
718   ipfiremake perl-Sort-Naturally
719   ipfiremake vdradmin
720   ipfiremake miau
721   ipfiremake perl-DBI
722   ipfiremake perl-DBD-mysql
723   ipfiremake perl-DBD-SQLite
724   ipfiremake perl-File-ReadBackwards
725   ipfiremake cacti
726   ipfiremake openvmtools
727   ipfiremake nagiosql
728   ipfiremake iftop
729   ipfiremake motion
730   ipfiremake joe
731   ipfiremake nut
732   ipfiremake watchdog
733   ipfiremake libpri
734   ipfiremake asterisk
735   ipfiremake lcr
736   ipfiremake usb_modeswitch
737   ipfiremake usb_modeswitch_data
738   ipfiremake zerofree
739   ipfiremake pound
740   ipfiremake minicom
741   ipfiremake ddrescue
742   ipfiremake imspector
743   ipfiremake miniupnpd
744   ipfiremake client175
745   ipfiremake powertop
746   ipfiremake parted
747   ipfiremake swig
748   ipfiremake python-m2crypto
749   ipfiremake wireless-regdb
750   ipfiremake crda
751   ipfiremake libsolv
752   ipfiremake python-distutils-extra
753   ipfiremake python-lzma
754   ipfiremake python-progressbar
755   ipfiremake python-xattr
756   ipfiremake intltool
757   ipfiremake ddns
758   ipfiremake transmission
759   ipfiremake dpfhack
760   ipfiremake lcd4linux
761   ipfiremake mtr
762   ipfiremake tcpick
763   ipfiremake minidlna
764   ipfiremake acpid
765   ipfiremake fping
766   ipfiremake telnet
767   ipfiremake xinetd
768   ipfiremake gpgme
769   ipfiremake pygpgme
770   ipfiremake pakfire3
771   ipfiremake stress
772   ipfiremake libstatgrab
773   ipfiremake sarg
774   ipfiremake check_mk_agent
775   ipfiremake libdaemon
776   ipfiremake avahi
777   ipfiremake nginx
778   ipfiremake sendEmail
779   ipfiremake sysbench
780   ipfiremake strace
781   ipfiremake ipfire-netboot
782   ipfiremake lcdproc
783   ipfiremake bitstream
784   ipfiremake multicat
785   ipfiremake keepalived
786   ipfiremake ipvsadm
787   ipfiremake perl-Carp-Clan
788   ipfiremake perl-Date-Calc
789   ipfiremake perl-Date-Manip
790   ipfiremake perl-File-Tail
791   ipfiremake perl-TimeDate
792   ipfiremake swatch
793   ipfiremake tor
794   ipfiremake arm
795   ipfiremake wavemon
796   ipfiremake iptraf-ng
797   ipfiremake iotop
798   ipfiremake stunnel
799   ipfiremake sslscan
800   ipfiremake owncloud
801   ipfiremake bacula
802   ipfiremake batctl
803   ipfiremake perl-PDF-API2
804   ipfiremake squid-accounting
805   ipfiremake pigz
806   ipfiremake tmux
807   ipfiremake perl-Text-CSV_XS
808 }
809
810 buildinstaller() {
811   # Run installer scripts one by one
812   LOGFILE="$BASEDIR/log/_build.installer.log"
813   export LOGFILE
814   ipfiremake memtest
815   ipfiremake installer
816   installmake strip
817 }
818
819 buildpackages() {
820   LOGFILE="$BASEDIR/log/_build.packages.log"
821   export LOGFILE
822   echo "... see detailed log in _build.*.log files" >> $LOGFILE
823
824   
825   # Generating list of packages used
826   echo -n "Generating packages list from logs" | tee -a $LOGFILE
827   rm -f $BASEDIR/doc/packages-list
828   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
829         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
830                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
831         fi
832   done
833   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
834   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
835         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
836   rm -f $BASEDIR/doc/packages-list
837   # packages-list.txt is ready to be displayed for wiki page
838   beautify message DONE
839   
840   # Update changelog
841   cd $BASEDIR
842   [ -z $GIT_TAG ]  || LAST_TAG=$GIT_TAG
843   [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
844   git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
845
846   # Create images for install
847   ipfiremake cdrom
848
849   # Check if there is a loop device for building in virtual environments
850   modprobe loop 2>/dev/null
851   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
852         ipfiremake flash-images
853         ipfiremake flash-images SCON=1
854   fi
855
856   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
857
858   ipfirepackages
859
860   ipfiremake xen-image
861   mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
862
863   cd $BASEDIR
864   for i in `ls *.bz2 *.img.gz *.iso`; do
865         md5sum $i > $i.md5
866   done
867   cd $PWD
868
869   # Cleanup
870   stdumount
871   rm -rf $BASEDIR/build/tmp/*
872
873   # Generating total list of files
874   echo -n "Generating files list from logs" | tee -a $LOGFILE
875   rm -f $BASEDIR/log/FILES
876   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
877         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
878                 echo "##" >>$BASEDIR/log/FILES
879                 echo "## `basename $i`" >>$BASEDIR/log/FILES
880                 echo "##" >>$BASEDIR/log/FILES
881                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
882         fi
883   done
884   beautify message DONE
885
886   cd $PWD
887 }
888
889 ipfirepackages() {
890         ipfiremake core-updates
891
892         local i
893         for i in $(find $BASEDIR/config/rootfiles/packages{/${MACHINE},} -maxdepth 1 -type f); do
894                 i=$(basename ${i})
895                 if [ -e $BASEDIR/lfs/$i ]; then
896                         ipfiredist $i
897                 else
898                         echo -n $i
899                         beautify message SKIP
900                 fi
901         done
902   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
903   mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
904   rm -rf  $BASEDIR/build/install/packages/*
905 }
906
907 while [ $# -gt 0 ]; do
908         case "${1}" in
909                 --target=*)
910                         configure_target "${1#--target=}"
911                         ;;
912                 -*)
913                         exiterror "Unknown configuration option: ${1}"
914                         ;;
915                 *)
916                         # Found a command, so exit options parsing.
917                         break
918                         ;;
919         esac
920         shift
921 done
922
923 # See what we're supposed to do
924 case "$1" in 
925 build)
926         clear
927         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
928         #only restore on a clean disk
929         if [ ! -f log/cleanup-toolchain-2-tools ]; then
930                 if [ ! -n "$PACKAGE" ]; then
931                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
932                         prepareenv
933                         buildtoolchain
934                 else
935                         PACKAGENAME=${PACKAGE%.tar.gz}
936                         beautify build_stage "Packaged toolchain compilation"
937                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
938                                 tar zxf $PACKAGE
939                                 prepareenv
940                         else
941                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
942                         fi
943                 fi
944         else
945                 echo -n "Using installed toolchain" | tee -a $LOGFILE
946                 beautify message SKIP
947                 prepareenv
948         fi
949
950         beautify build_start
951         beautify build_stage "Building LFS"
952         buildbase
953
954         beautify build_stage "Building IPFire"
955         buildipfire
956
957         beautify build_stage "Building installer"
958         buildinstaller
959
960         beautify build_stage "Building packages"
961         buildpackages
962         
963         beautify build_stage "Checking Logfiles for new Files"
964
965         cd $BASEDIR
966         tools/checknewlog.pl
967         tools/checkwronginitlinks
968         cd $PWD
969
970         beautify build_end
971         ;;
972 shell)
973         # enter a shell inside LFS chroot
974         # may be used to changed kernel settings
975         prepareenv
976         entershell
977         ;;
978 clean)
979         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
980         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
981                 $LOSETUP -d $i 2>/dev/null
982         done
983         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
984                 umount $i
985         done
986         stdumount
987         for i in `seq 0 7`; do
988             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
989                 umount /dev/loop${i}     2>/dev/null;
990                 losetup -d /dev/loop${i} 2>/dev/null;
991             fi;
992         done
993         rm -rf $BASEDIR/build
994         rm -rf $BASEDIR/cdrom
995         rm -rf $BASEDIR/packages
996         rm -rf $BASEDIR/log
997         if [ -h /tools ]; then
998                 rm -f /tools
999         fi
1000         rm -f $BASEDIR/ipfire-*
1001         beautify message DONE
1002         ;;
1003 downloadsrc)
1004         if [ ! -d $BASEDIR/cache ]; then
1005                 mkdir $BASEDIR/cache
1006         fi
1007         mkdir -p $BASEDIR/log
1008         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
1009         FINISHED=0
1010         cd $BASEDIR/lfs
1011         for c in `seq $MAX_RETRIES`; do
1012                 if (( FINISHED==1 )); then 
1013                         break
1014                 fi
1015                 FINISHED=1
1016                 cd $BASEDIR/lfs
1017                 for i in *; do
1018                         if [ -f "$i" -a "$i" != "Config" ]; then
1019                                 lfsmakecommoncheck ${i} || continue
1020
1021                                 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1022                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1023                                 if [ $? -ne 0 ]; then
1024                                         beautify message FAIL
1025                                         FINISHED=0
1026                                 else
1027                                         if [ $c -eq 1 ]; then
1028                                         beautify message DONE
1029                                         fi
1030                                 fi
1031                         fi
1032                 done
1033         done
1034         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1035         ERROR=0
1036         for i in *; do
1037                 if [ -f "$i" -a "$i" != "Config" ]; then
1038                         lfsmakecommoncheck ${i} > /dev/null || continue
1039                         make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1040                                 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1041                         if [ $? -ne 0 ]; then
1042                                 echo -ne "MD5 difference in lfs/$i"
1043                                 beautify message FAIL
1044                                 ERROR=1
1045                         fi
1046                 fi
1047         done
1048         if [ $ERROR -eq 0 ]; then
1049                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1050                 beautify message DONE
1051         else
1052                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1053                 beautify message FAIL
1054         fi
1055         cd - >/dev/null 2>&1
1056         ;;
1057 toolchain)
1058         clear
1059         prepareenv
1060         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1061         buildtoolchain
1062         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1063         test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1064         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1065                 build/tools build/bin/sh log >> $LOGFILE
1066         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1067                 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1068         stdumount
1069         ;;
1070 gettoolchain)
1071         # arbitrary name to be updated in case of new toolchain package upload
1072         PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1073         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1074                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1075                 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1076                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1077                 cd $BASEDIR/cache/toolchains
1078                 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1079                 if [ $? -ne 0 ]; then
1080                         echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1081                 else
1082                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1083                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1084                         else
1085                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1086                         fi
1087                 fi
1088         else
1089                 echo "Toolchain is already downloaded. Exiting..."
1090         fi
1091         ;;
1092 othersrc)
1093         prepareenv
1094         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1095         chroot $LFS /tools/bin/env -i   HOME=/root \
1096         TERM=$TERM PS1='\u:\w\$ ' \
1097         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1098         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1099         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1100         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1101         if [ $? -eq "0" ]; then
1102                 beautify message DONE
1103         else
1104                 beautify message FAIL
1105         fi
1106         stdumount
1107         ;;
1108 uploadsrc)
1109         PWD=`pwd`
1110         if [ -z $IPFIRE_USER ]; then
1111                 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1112                 beautify message FAIL
1113                 exit 1
1114         fi
1115
1116         URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1117         REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1118
1119         for file in ${BASEDIR}/cache/*; do
1120                 [ -d "${file}" ] && continue
1121                 grep -q "$(basename ${file})" <<<$REMOTE_FILES && continue
1122                 NEW_FILES="$NEW_FILES $file"
1123         done
1124         [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1125         cd $BASEDIR
1126         cd $PWD
1127         exit 0
1128         ;;
1129 lang)
1130         update_langs
1131         ;;
1132 *)
1133         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1134         cat doc/make.sh-usage
1135         ;;
1136 esac