Update CUPS to 2.2.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-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 intltool
649   ipfiremake libdaemon
650   ipfiremake avahi
651   ipfiremake cups
652   ipfiremake ghostscript
653   ipfiremake lcms2
654   ipfiremake qpdf
655   ipfiremake poppler
656   ipfiremake cups-filters
657   ipfiremake epson-inkjet-printer-escpr
658   ipfiremake foomatic
659   ipfiremake hplip
660   ipfiremake cifs-utils
661   ipfiremake krb5
662   ipfiremake samba
663   ipfiremake sudo
664   ipfiremake mc
665   ipfiremake wget
666   ipfiremake bridge-utils
667   ipfiremake screen
668   ipfiremake smartmontools
669   ipfiremake htop
670   ipfiremake chkconfig
671   ipfiremake postfix
672   ipfiremake fetchmail
673   ipfiremake cyrus-imapd
674   ipfiremake openmailadmin
675   ipfiremake clamav
676   ipfiremake spamassassin
677   ipfiremake amavisd
678   ipfiremake dma
679   ipfiremake alsa
680   ipfiremake mpfire
681   ipfiremake guardian
682   ipfiremake libid3tag
683   ipfiremake libmad
684   ipfiremake libogg
685   ipfiremake libvorbis
686   ipfiremake libdvbpsi
687   ipfiremake flac
688   ipfiremake lame
689   ipfiremake sox
690   ipfiremake libshout
691   ipfiremake xvid
692   ipfiremake libmpeg2
693   ipfiremake libarchive
694   ipfiremake cmake
695   ipfiremake gnump3d
696   ipfiremake rsync
697   ipfiremake tcpwrapper
698   ipfiremake libtirpc
699   ipfiremake rpcbind
700   ipfiremake nfs
701   ipfiremake gnu-netcat
702   ipfiremake ncat
703   ipfiremake nmap
704   ipfiremake ncftp
705   ipfiremake etherwake
706   ipfiremake bwm-ng
707   ipfiremake sysstat
708   ipfiremake vsftpd
709   ipfiremake strongswan
710   ipfiremake rng-tools
711   ipfiremake lsof
712   ipfiremake br2684ctl
713   ipfiremake pcmciautils
714   ipfiremake lm_sensors
715   ipfiremake liboping
716   ipfiremake collectd
717   ipfiremake elinks
718   ipfiremake igmpproxy
719   ipfiremake fbset
720   ipfiremake opus
721   ipfiremake python-six
722   ipfiremake python-pyparsing
723   ipfiremake spice-protocol
724   ipfiremake spice
725   ipfiremake sdl
726   ipfiremake libusbredir
727   ipfiremake qemu
728   ipfiremake sane
729   ipfiremake netpbm
730   ipfiremake phpSANE
731   ipfiremake tunctl
732   ipfiremake netsnmpd
733   ipfiremake nagios
734   ipfiremake nagios_nrpe
735   ipfiremake icinga
736   ipfiremake ebtables
737   ipfiremake directfb
738   ipfiremake dfb++
739   ipfiremake faad2
740   ipfiremake ffmpeg
741   ipfiremake vdr
742   ipfiremake vdr_streamdev
743   ipfiremake vdr_vnsiserver5
744   ipfiremake vdr_epgsearch
745   ipfiremake vdr_dvbapi
746   ipfiremake vdr_eepg
747   ipfiremake w_scan
748   ipfiremake icecast
749   ipfiremake icegenerator
750   ipfiremake mpd
751   ipfiremake libmpdclient
752   ipfiremake mpc
753   ipfiremake perl-Net-SMTP-SSL
754   ipfiremake perl-MIME-Base64
755   ipfiremake perl-Authen-SASL
756   ipfiremake perl-MIME-Lite
757   ipfiremake perl-Email-Date-Format
758   ipfiremake git
759   ipfiremake squidclamav
760   ipfiremake vnstat
761   ipfiremake iw
762   ipfiremake wpa_supplicant
763   ipfiremake hostapd
764   ipfiremake pycurl
765   ipfiremake urlgrabber
766   ipfiremake syslinux
767   ipfiremake tftpd
768   ipfiremake cpufrequtils
769   ipfiremake bluetooth
770   ipfiremake gutenprint
771   ipfiremake apcupsd
772   ipfiremake iperf
773   ipfiremake iperf3
774   ipfiremake 7zip
775   ipfiremake lynis
776   ipfiremake streamripper
777   ipfiremake sshfs
778   ipfiremake taglib
779   #ipfiremake mediatomb
780   ipfiremake sslh
781   ipfiremake perl-gettext
782   ipfiremake perl-Sort-Naturally
783   ipfiremake vdradmin
784   ipfiremake miau
785   ipfiremake perl-DBI
786   ipfiremake perl-DBD-mysql
787   ipfiremake perl-DBD-SQLite
788   ipfiremake perl-File-ReadBackwards
789   ipfiremake cacti
790   ipfiremake openvmtools
791   ipfiremake nagiosql
792   ipfiremake iftop
793   ipfiremake motion
794   ipfiremake joe
795   ipfiremake monit
796   ipfiremake nut
797   ipfiremake watchdog
798   ipfiremake libpri
799   ipfiremake libsrtp
800   ipfiremake asterisk
801   ipfiremake lcr
802   ipfiremake usb_modeswitch
803   ipfiremake usb_modeswitch_data
804   ipfiremake zerofree
805   ipfiremake pound
806   ipfiremake minicom
807   ipfiremake ddrescue
808   ipfiremake imspector
809   ipfiremake miniupnpd
810   ipfiremake client175
811   ipfiremake powertop
812   ipfiremake parted
813   ipfiremake swig
814   ipfiremake python-m2crypto
815   ipfiremake wireless-regdb
816   ipfiremake crda
817   ipfiremake libsolv
818   ipfiremake python-distutils-extra
819   ipfiremake python-lzma
820   ipfiremake python-progressbar
821   ipfiremake python-xattr
822   ipfiremake ddns
823   ipfiremake transmission
824   ipfiremake dpfhack
825   ipfiremake lcd4linux
826   ipfiremake mtr
827   ipfiremake tcpick
828   ipfiremake minidlna
829   ipfiremake acpid
830   ipfiremake fping
831   ipfiremake telnet
832   ipfiremake xinetd
833   ipfiremake gpgme
834   ipfiremake pygpgme
835   ipfiremake pakfire3
836   ipfiremake stress
837   ipfiremake libstatgrab
838   ipfiremake sarg
839   ipfiremake check_mk_agent
840   ipfiremake nginx
841   ipfiremake sendEmail
842   ipfiremake sysbench
843   ipfiremake strace
844   ipfiremake ipfire-netboot
845   ipfiremake lcdproc
846   ipfiremake bitstream
847   ipfiremake multicat
848   ipfiremake keepalived
849   ipfiremake ipvsadm
850   ipfiremake perl-Carp-Clan
851   ipfiremake perl-Date-Calc
852   ipfiremake perl-Date-Manip
853   ipfiremake perl-File-Tail
854   ipfiremake perl-TimeDate
855   ipfiremake swatch
856   ipfiremake tor
857   ipfiremake arm
858   ipfiremake wavemon
859   ipfiremake iptraf-ng
860   ipfiremake iotop
861   ipfiremake stunnel
862   ipfiremake sslscan
863   ipfiremake owncloud
864   ipfiremake bacula
865   ipfiremake batctl
866   ipfiremake perl-PDF-API2
867   ipfiremake squid-accounting
868   ipfiremake pigz
869   ipfiremake tmux
870   ipfiremake perl-Text-CSV_XS
871   ipfiremake swconfig
872   ipfiremake haproxy
873   ipfiremake ipset
874   ipfiremake lua
875   ipfiremake dnsdist
876   ipfiremake bird
877   ipfiremake dmidecode
878   ipfiremake mcelog
879   ipfiremake rtpproxy
880   ipfiremake util-macros
881   ipfiremake libpciaccess
882   ipfiremake libyajl
883   ipfiremake libvirt
884   ipfiremake freeradius
885   ipfiremake perl-common-sense
886   ipfiremake perl-inotify2
887   ipfiremake perl-Net-IP
888 }
889
890 buildinstaller() {
891   # Run installer scripts one by one
892   LOGFILE="$BASEDIR/log/_build.installer.log"
893   export LOGFILE
894   ipfiremake memtest
895   ipfiremake installer
896   installmake strip
897 }
898
899 buildpackages() {
900   LOGFILE="$BASEDIR/log/_build.packages.log"
901   export LOGFILE
902   echo "... see detailed log in _build.*.log files" >> $LOGFILE
903
904   
905   # Generating list of packages used
906   echo -n "Generating packages list from logs" | tee -a $LOGFILE
907   rm -f $BASEDIR/doc/packages-list
908   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
909         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
910                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
911         fi
912   done
913   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
914   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
915         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
916   rm -f $BASEDIR/doc/packages-list
917   # packages-list.txt is ready to be displayed for wiki page
918   beautify message DONE
919   
920   # Update changelog
921   cd $BASEDIR
922   [ -z $GIT_TAG ]  || LAST_TAG=$GIT_TAG
923   [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
924   git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
925
926   # Create images for install
927   ipfiremake cdrom
928
929   # Check if there is a loop device for building in virtual environments
930   modprobe loop 2>/dev/null
931   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
932         ipfiremake flash-images
933         ipfiremake flash-images SCON=1
934   fi
935
936   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
937
938   ipfirepackages
939
940   ipfiremake xen-image
941   mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
942
943   cd $BASEDIR
944
945   # remove not useable iso on armv5tel (needed to build flash images)
946   [ "${TARGET_ARCH}" = "armv5tel" ] && rm -rf *.iso
947
948   for i in `ls *.bz2 *.img.gz *.iso`; do
949         md5sum $i > $i.md5
950   done
951   cd $PWD
952
953   # Cleanup
954   stdumount
955   rm -rf $BASEDIR/build/tmp/*
956
957   # Generating total list of files
958   echo -n "Generating files list from logs" | tee -a $LOGFILE
959   rm -f $BASEDIR/log/FILES
960   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
961         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
962                 echo "##" >>$BASEDIR/log/FILES
963                 echo "## `basename $i`" >>$BASEDIR/log/FILES
964                 echo "##" >>$BASEDIR/log/FILES
965                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
966         fi
967   done
968   beautify message DONE
969
970   cd $PWD
971 }
972
973 ipfirepackages() {
974         ipfiremake core-updates
975
976         local i
977         for i in $(find $BASEDIR/config/rootfiles/packages{/${MACHINE},} -maxdepth 1 -type f); do
978                 i=$(basename ${i})
979                 if [ -e $BASEDIR/lfs/$i ]; then
980                         ipfiredist $i
981                 else
982                         echo -n $i
983                         beautify message SKIP
984                 fi
985         done
986   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
987   mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
988   rm -rf  $BASEDIR/build/install/packages/*
989 }
990
991 while [ $# -gt 0 ]; do
992         case "${1}" in
993                 --target=*)
994                         configure_target "${1#--target=}"
995                         ;;
996                 -*)
997                         exiterror "Unknown configuration option: ${1}"
998                         ;;
999                 *)
1000                         # Found a command, so exit options parsing.
1001                         break
1002                         ;;
1003         esac
1004         shift
1005 done
1006
1007 # See what we're supposed to do
1008 case "$1" in 
1009 build)
1010         clear
1011         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
1012         #only restore on a clean disk
1013         if [ ! -f log/cleanup-toolchain-2-tools ]; then
1014                 if [ ! -n "$PACKAGE" ]; then
1015                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1016                         prepareenv
1017                         buildtoolchain
1018                 else
1019                         PACKAGENAME=${PACKAGE%.tar.gz}
1020                         beautify build_stage "Packaged toolchain compilation"
1021                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
1022                                 tar zxf $PACKAGE
1023                                 prepareenv
1024                         else
1025                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
1026                         fi
1027                 fi
1028         else
1029                 echo -n "Using installed toolchain" | tee -a $LOGFILE
1030                 beautify message SKIP
1031                 prepareenv
1032         fi
1033
1034         beautify build_start
1035         beautify build_stage "Building LFS"
1036         buildbase
1037
1038         beautify build_stage "Building IPFire"
1039         buildipfire
1040
1041         beautify build_stage "Building installer"
1042         buildinstaller
1043
1044         beautify build_stage "Building packages"
1045         buildpackages
1046         
1047         beautify build_stage "Checking Logfiles for new Files"
1048
1049         cd $BASEDIR
1050         tools/checknewlog.pl
1051         tools/checkrootfiles
1052         cd $PWD
1053
1054         beautify build_end
1055         ;;
1056 shell)
1057         # enter a shell inside LFS chroot
1058         # may be used to changed kernel settings
1059         prepareenv
1060         entershell
1061         ;;
1062 clean)
1063         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
1064         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1065                 $LOSETUP -d $i 2>/dev/null
1066         done
1067         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1068                 umount $i
1069         done
1070         stdumount
1071         for i in `seq 0 7`; do
1072             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1073                 umount /dev/loop${i}     2>/dev/null;
1074                 losetup -d /dev/loop${i} 2>/dev/null;
1075             fi;
1076         done
1077         rm -rf $BASEDIR/build
1078         rm -rf $BASEDIR/cdrom
1079         rm -rf $BASEDIR/packages
1080         rm -rf $BASEDIR/log
1081         if [ -h /tools ]; then
1082                 rm -f /tools
1083         fi
1084         rm -f $BASEDIR/ipfire-*
1085         beautify message DONE
1086         ;;
1087 downloadsrc)
1088         if [ ! -d $BASEDIR/cache ]; then
1089                 mkdir $BASEDIR/cache
1090         fi
1091         mkdir -p $BASEDIR/log
1092         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
1093         FINISHED=0
1094         cd $BASEDIR/lfs
1095         for c in `seq $MAX_RETRIES`; do
1096                 if (( FINISHED==1 )); then 
1097                         break
1098                 fi
1099                 FINISHED=1
1100                 cd $BASEDIR/lfs
1101                 for i in *; do
1102                         if [ -f "$i" -a "$i" != "Config" ]; then
1103                                 lfsmakecommoncheck ${i} || continue
1104
1105                                 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1106                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1107                                 if [ $? -ne 0 ]; then
1108                                         beautify message FAIL
1109                                         FINISHED=0
1110                                 else
1111                                         if [ $c -eq 1 ]; then
1112                                         beautify message DONE
1113                                         fi
1114                                 fi
1115                         fi
1116                 done
1117         done
1118         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1119         ERROR=0
1120         for i in *; do
1121                 if [ -f "$i" -a "$i" != "Config" ]; then
1122                         lfsmakecommoncheck ${i} > /dev/null || continue
1123                         make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1124                                 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1125                         if [ $? -ne 0 ]; then
1126                                 echo -ne "MD5 difference in lfs/$i"
1127                                 beautify message FAIL
1128                                 ERROR=1
1129                         fi
1130                 fi
1131         done
1132         if [ $ERROR -eq 0 ]; then
1133                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1134                 beautify message DONE
1135         else
1136                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1137                 beautify message FAIL
1138         fi
1139         cd - >/dev/null 2>&1
1140         ;;
1141 toolchain)
1142         clear
1143         prepareenv
1144         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1145         buildtoolchain
1146         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1147         test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1148         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1149                 build/tools build/bin/sh log >> $LOGFILE
1150         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1151                 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1152         stdumount
1153         ;;
1154 gettoolchain)
1155         # arbitrary name to be updated in case of new toolchain package upload
1156         PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1157         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1158                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1159                 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1160                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1161                 cd $BASEDIR/cache/toolchains
1162                 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1163                 if [ $? -ne 0 ]; then
1164                         echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1165                 else
1166                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1167                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1168                         else
1169                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1170                         fi
1171                 fi
1172         else
1173                 echo "Toolchain is already downloaded. Exiting..."
1174         fi
1175         ;;
1176 othersrc)
1177         prepareenv
1178         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1179         chroot $LFS /tools/bin/env -i   HOME=/root \
1180         TERM=$TERM PS1='\u:\w\$ ' \
1181         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1182         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1183         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1184         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1185         if [ $? -eq "0" ]; then
1186                 beautify message DONE
1187         else
1188                 beautify message FAIL
1189         fi
1190         stdumount
1191         ;;
1192 uploadsrc)
1193         PWD=`pwd`
1194         if [ -z $IPFIRE_USER ]; then
1195                 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1196                 beautify message FAIL
1197                 exit 1
1198         fi
1199
1200         URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1201         REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1202
1203         for file in ${BASEDIR}/cache/*; do
1204                 [ -d "${file}" ] && continue
1205                 grep -q "$(basename ${file})" <<<$REMOTE_FILES && continue
1206                 NEW_FILES="$NEW_FILES $file"
1207         done
1208         [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1209         cd $BASEDIR
1210         cd $PWD
1211         exit 0
1212         ;;
1213 lang)
1214         update_langs
1215         ;;
1216 *)
1217         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1218         cat doc/make.sh-usage
1219         ;;
1220 esac