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