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