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