miniupnpd: move initscript to src/initscripts/packages and use new macro
[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="110"                                                      # 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 nettle
491   ipfiremake libevent
492   ipfiremake libevent2
493   ipfiremake expat
494   ipfiremake unbound
495   ipfiremake gnutls
496   ipfiremake bind
497   ipfiremake dhcp
498   ipfiremake dhcpcd
499   ipfiremake boost
500   ipfiremake linux-atm
501   ipfiremake gdbm
502   ipfiremake pam
503   ipfiremake curl
504   ipfiremake tcl
505   ipfiremake sqlite
506   ipfiremake libffi
507   ipfiremake python
508   ipfiremake python3
509   ipfiremake ca-certificates
510   ipfiremake fireinfo
511   ipfiremake libnet
512   ipfiremake libnl
513   ipfiremake libnl-3
514   ipfiremake libidn
515   ipfiremake nasm
516   ipfiremake libjpeg
517   ipfiremake libjpeg-compat
518   ipfiremake libexif
519   ipfiremake libpng
520   ipfiremake libtiff
521   ipfiremake libart
522   ipfiremake gd
523   ipfiremake popt
524   ipfiremake pcre
525   ipfiremake slang
526   ipfiremake newt
527   ipfiremake libsmooth
528   ipfiremake attr
529   ipfiremake acl
530   ipfiremake libcap
531   ipfiremake pciutils
532   ipfiremake usbutils
533   ipfiremake libxml2
534   ipfiremake libxslt
535   ipfiremake BerkeleyDB
536   ipfiremake mysql
537   ipfiremake cyrus-sasl
538   ipfiremake openldap
539   ipfiremake apache2
540   ipfiremake php
541   ipfiremake web-user-interface
542   ipfiremake flag-icons
543   ipfiremake jquery
544   ipfiremake arping
545   ipfiremake beep
546   ipfiremake dvdrtools
547   ipfiremake dosfstools
548   ipfiremake reiserfsprogs
549   ipfiremake xfsprogs
550   ipfiremake sysfsutils
551   ipfiremake fuse
552   ipfiremake ntfs-3g
553   ipfiremake ethtool
554   ipfiremake ez-ipupdate
555   ipfiremake fcron
556   ipfiremake perl-GD
557   ipfiremake GD-Graph
558   ipfiremake GD-TextUtil
559   ipfiremake perl-Device-SerialPort
560   ipfiremake perl-Device-Modem
561   ipfiremake perl-Apache-Htpasswd
562   ipfiremake gnupg
563   ipfiremake hdparm
564   ipfiremake sdparm
565   ipfiremake mtools
566   ipfiremake initscripts
567   ipfiremake whatmask
568   ipfiremake conntrack-tools
569   ipfiremake libupnp
570   ipfiremake ipaddr
571   ipfiremake iputils
572   ipfiremake l7-protocols
573   ipfiremake mISDNuser
574   ipfiremake capi4k-utils
575   ipfiremake hwdata
576   ipfiremake logrotate
577   ipfiremake logwatch
578   ipfiremake misc-progs
579   ipfiremake nano
580   ipfiremake URI
581   ipfiremake HTML-Tagset
582   ipfiremake HTML-Parser
583   ipfiremake HTML-Template
584   ipfiremake Compress-Zlib
585   ipfiremake Digest
586   ipfiremake Digest-SHA1
587   ipfiremake Digest-HMAC
588   ipfiremake libwww-perl
589   ipfiremake Net-DNS
590   ipfiremake Net-IPv4Addr
591   ipfiremake Net_SSLeay
592   ipfiremake IO-Stringy
593   ipfiremake IO-Socket-SSL
594   ipfiremake Unix-Syslog
595   ipfiremake Mail-Tools
596   ipfiremake MIME-Tools
597   ipfiremake Net-Server
598   ipfiremake Convert-TNEF
599   ipfiremake Convert-UUlib
600   ipfiremake Archive-Tar
601   ipfiremake Archive-Zip
602   ipfiremake Text-Tabs+Wrap
603   ipfiremake Locale-Country
604   ipfiremake XML-Parser
605   ipfiremake Crypt-PasswdMD5
606   ipfiremake Net-Telnet
607   ipfiremake python-setuptools
608   ipfiremake python-clientform
609   ipfiremake python-mechanize
610   ipfiremake python-feedparser
611   ipfiremake python-rssdler
612   ipfiremake python-inotify
613   ipfiremake python-docutils
614   ipfiremake python-daemon
615   ipfiremake python-ipaddress
616   ipfiremake glib
617   ipfiremake GeoIP
618   ipfiremake fwhits
619   ipfiremake noip_updater
620   ipfiremake ntp
621   ipfiremake openssh
622   ipfiremake fontconfig
623   ipfiremake dejavu-fonts-ttf
624   ipfiremake freefont
625   ipfiremake pixman
626   ipfiremake cairo
627   ipfiremake pango
628   ipfiremake rrdtool
629   ipfiremake setserial
630   ipfiremake setup
631   ipfiremake libdnet
632   ipfiremake daq
633   ipfiremake snort
634   ipfiremake oinkmaster
635   ipfiremake squid
636   ipfiremake squidguard
637   ipfiremake calamaris
638   ipfiremake tcpdump
639   ipfiremake traceroute
640   ipfiremake vlan
641   ipfiremake wireless
642   ipfiremake pakfire
643   ipfiremake spandsp
644   ipfiremake lzo
645   ipfiremake openvpn
646   ipfiremake pammysql
647   ipfiremake mpage
648   ipfiremake dbus
649   ipfiremake intltool
650   ipfiremake libdaemon
651   ipfiremake avahi
652   ipfiremake cups
653   ipfiremake ghostscript
654   ipfiremake lcms2
655   ipfiremake qpdf
656   ipfiremake poppler
657   ipfiremake cups-filters
658   ipfiremake epson-inkjet-printer-escpr
659   ipfiremake foomatic
660   ipfiremake hplip
661   ipfiremake cifs-utils
662   ipfiremake krb5
663   ipfiremake samba
664   ipfiremake sudo
665   ipfiremake mc
666   ipfiremake wget
667   ipfiremake bridge-utils
668   ipfiremake screen
669   ipfiremake smartmontools
670   ipfiremake htop
671   ipfiremake chkconfig
672   ipfiremake postfix
673   ipfiremake fetchmail
674   ipfiremake cyrus-imapd
675   ipfiremake openmailadmin
676   ipfiremake clamav
677   ipfiremake spamassassin
678   ipfiremake amavisd
679   ipfiremake dma
680   ipfiremake alsa
681   ipfiremake mpfire
682   ipfiremake guardian
683   ipfiremake libid3tag
684   ipfiremake libmad
685   ipfiremake libogg
686   ipfiremake libvorbis
687   ipfiremake libdvbpsi
688   ipfiremake flac
689   ipfiremake lame
690   ipfiremake sox
691   ipfiremake libshout
692   ipfiremake xvid
693   ipfiremake libmpeg2
694   ipfiremake libarchive
695   ipfiremake cmake
696   ipfiremake gnump3d
697   ipfiremake rsync
698   ipfiremake tcpwrapper
699   ipfiremake libtirpc
700   ipfiremake rpcbind
701   ipfiremake nfs
702   ipfiremake gnu-netcat
703   ipfiremake ncat
704   ipfiremake nmap
705   ipfiremake ncftp
706   ipfiremake etherwake
707   ipfiremake bwm-ng
708   ipfiremake sysstat
709   ipfiremake vsftpd
710   ipfiremake strongswan
711   ipfiremake rng-tools
712   ipfiremake lsof
713   ipfiremake br2684ctl
714   ipfiremake pcmciautils
715   ipfiremake lm_sensors
716   ipfiremake liboping
717   ipfiremake collectd
718   ipfiremake elinks
719   ipfiremake igmpproxy
720   ipfiremake fbset
721   ipfiremake opus
722   ipfiremake python-six
723   ipfiremake python-pyparsing
724   ipfiremake spice-protocol
725   ipfiremake spice
726   ipfiremake sdl
727   ipfiremake libusbredir
728   ipfiremake qemu
729   ipfiremake sane
730   ipfiremake netpbm
731   ipfiremake phpSANE
732   ipfiremake tunctl
733   ipfiremake netsnmpd
734   ipfiremake nagios
735   ipfiremake nagios_nrpe
736   ipfiremake icinga
737   ipfiremake ebtables
738   ipfiremake directfb
739   ipfiremake dfb++
740   ipfiremake faad2
741   ipfiremake ffmpeg
742   ipfiremake vdr
743   ipfiremake vdr_streamdev
744   ipfiremake vdr_vnsiserver5
745   ipfiremake vdr_epgsearch
746   ipfiremake vdr_dvbapi
747   ipfiremake vdr_eepg
748   ipfiremake w_scan
749   ipfiremake icecast
750   ipfiremake icegenerator
751   ipfiremake mpd
752   ipfiremake libmpdclient
753   ipfiremake mpc
754   ipfiremake perl-Net-SMTP-SSL
755   ipfiremake perl-MIME-Base64
756   ipfiremake perl-Authen-SASL
757   ipfiremake perl-MIME-Lite
758   ipfiremake perl-Email-Date-Format
759   ipfiremake git
760   ipfiremake squidclamav
761   ipfiremake vnstat
762   ipfiremake iw
763   ipfiremake wpa_supplicant
764   ipfiremake hostapd
765   ipfiremake pycurl
766   ipfiremake urlgrabber
767   ipfiremake syslinux
768   ipfiremake tftpd
769   ipfiremake cpufrequtils
770   ipfiremake bluetooth
771   ipfiremake gutenprint
772   ipfiremake apcupsd
773   ipfiremake iperf
774   ipfiremake iperf3
775   ipfiremake 7zip
776   ipfiremake lynis
777   ipfiremake streamripper
778   ipfiremake sshfs
779   ipfiremake taglib
780   #ipfiremake mediatomb
781   ipfiremake sslh
782   ipfiremake perl-gettext
783   ipfiremake perl-Sort-Naturally
784   ipfiremake vdradmin
785   ipfiremake miau
786   ipfiremake perl-DBI
787   ipfiremake perl-DBD-mysql
788   ipfiremake perl-DBD-SQLite
789   ipfiremake perl-File-ReadBackwards
790   ipfiremake cacti
791   ipfiremake openvmtools
792   ipfiremake nagiosql
793   ipfiremake iftop
794   ipfiremake motion
795   ipfiremake joe
796   ipfiremake monit
797   ipfiremake nut
798   ipfiremake watchdog
799   ipfiremake libpri
800   ipfiremake libsrtp
801   ipfiremake asterisk
802   ipfiremake lcr
803   ipfiremake usb_modeswitch
804   ipfiremake usb_modeswitch_data
805   ipfiremake zerofree
806   ipfiremake pound
807   ipfiremake minicom
808   ipfiremake ddrescue
809   ipfiremake imspector
810   ipfiremake miniupnpd
811   ipfiremake client175
812   ipfiremake powertop
813   ipfiremake parted
814   ipfiremake swig
815   ipfiremake python-m2crypto
816   ipfiremake wireless-regdb
817   ipfiremake crda
818   ipfiremake libsolv
819   ipfiremake python-distutils-extra
820   ipfiremake python-lzma
821   ipfiremake python-progressbar
822   ipfiremake python-xattr
823   ipfiremake ddns
824   ipfiremake transmission
825   ipfiremake dpfhack
826   ipfiremake lcd4linux
827   ipfiremake mtr
828   ipfiremake tcpick
829   ipfiremake minidlna
830   ipfiremake acpid
831   ipfiremake fping
832   ipfiremake telnet
833   ipfiremake xinetd
834   ipfiremake gpgme
835   ipfiremake pygpgme
836   ipfiremake pakfire3
837   ipfiremake stress
838   ipfiremake libstatgrab
839   ipfiremake sarg
840   ipfiremake check_mk_agent
841   ipfiremake nginx
842   ipfiremake sendEmail
843   ipfiremake sysbench
844   ipfiremake strace
845   ipfiremake ipfire-netboot
846   ipfiremake lcdproc
847   ipfiremake bitstream
848   ipfiremake multicat
849   ipfiremake keepalived
850   ipfiremake ipvsadm
851   ipfiremake perl-Carp-Clan
852   ipfiremake perl-Date-Calc
853   ipfiremake perl-Date-Manip
854   ipfiremake perl-File-Tail
855   ipfiremake perl-TimeDate
856   ipfiremake swatch
857   ipfiremake tor
858   ipfiremake arm
859   ipfiremake wavemon
860   ipfiremake iptraf-ng
861   ipfiremake iotop
862   ipfiremake stunnel
863   ipfiremake sslscan
864   ipfiremake owncloud
865   ipfiremake bacula
866   ipfiremake batctl
867   ipfiremake perl-PDF-API2
868   ipfiremake squid-accounting
869   ipfiremake pigz
870   ipfiremake tmux
871   ipfiremake perl-Text-CSV_XS
872   ipfiremake swconfig
873   ipfiremake haproxy
874   ipfiremake ipset
875   ipfiremake lua
876   ipfiremake dnsdist
877   ipfiremake bird
878   ipfiremake dmidecode
879   ipfiremake mcelog
880   ipfiremake rtpproxy
881   ipfiremake util-macros
882   ipfiremake libpciaccess
883   ipfiremake libyajl
884   ipfiremake libvirt
885   ipfiremake freeradius
886   ipfiremake perl-common-sense
887   ipfiremake perl-inotify2
888   ipfiremake perl-Net-IP
889 }
890
891 buildinstaller() {
892   # Run installer scripts one by one
893   LOGFILE="$BASEDIR/log/_build.installer.log"
894   export LOGFILE
895   ipfiremake memtest
896   ipfiremake installer
897   installmake strip
898 }
899
900 buildpackages() {
901   LOGFILE="$BASEDIR/log/_build.packages.log"
902   export LOGFILE
903   echo "... see detailed log in _build.*.log files" >> $LOGFILE
904
905   
906   # Generating list of packages used
907   echo -n "Generating packages list from logs" | tee -a $LOGFILE
908   rm -f $BASEDIR/doc/packages-list
909   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
910         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
911                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
912         fi
913   done
914   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
915   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
916         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
917   rm -f $BASEDIR/doc/packages-list
918   # packages-list.txt is ready to be displayed for wiki page
919   beautify message DONE
920   
921   # Update changelog
922   cd $BASEDIR
923   [ -z $GIT_TAG ]  || LAST_TAG=$GIT_TAG
924   [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
925   git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
926
927   # Create images for install
928   ipfiremake cdrom
929
930   # Check if there is a loop device for building in virtual environments
931   modprobe loop 2>/dev/null
932   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
933         ipfiremake flash-images
934         ipfiremake flash-images SCON=1
935   fi
936
937   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
938
939   ipfirepackages
940
941   ipfiremake xen-image
942   mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
943
944   cd $BASEDIR
945
946   # remove not useable iso on armv5tel (needed to build flash images)
947   [ "${TARGET_ARCH}" = "armv5tel" ] && rm -rf *.iso
948
949   for i in `ls *.bz2 *.img.gz *.iso`; do
950         md5sum $i > $i.md5
951   done
952   cd $PWD
953
954   # Cleanup
955   stdumount
956   rm -rf $BASEDIR/build/tmp/*
957
958   # Generating total list of files
959   echo -n "Generating files list from logs" | tee -a $LOGFILE
960   rm -f $BASEDIR/log/FILES
961   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
962         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
963                 echo "##" >>$BASEDIR/log/FILES
964                 echo "## `basename $i`" >>$BASEDIR/log/FILES
965                 echo "##" >>$BASEDIR/log/FILES
966                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
967         fi
968   done
969   beautify message DONE
970
971   cd $PWD
972 }
973
974 ipfirepackages() {
975         ipfiremake core-updates
976
977         local i
978         for i in $(find $BASEDIR/config/rootfiles/packages{/${MACHINE},} -maxdepth 1 -type f); do
979                 i=$(basename ${i})
980                 if [ -e $BASEDIR/lfs/$i ]; then
981                         ipfiredist $i
982                 else
983                         echo -n $i
984                         beautify message SKIP
985                 fi
986         done
987   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
988   mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
989   rm -rf  $BASEDIR/build/install/packages/*
990 }
991
992 while [ $# -gt 0 ]; do
993         case "${1}" in
994                 --target=*)
995                         configure_target "${1#--target=}"
996                         ;;
997                 -*)
998                         exiterror "Unknown configuration option: ${1}"
999                         ;;
1000                 *)
1001                         # Found a command, so exit options parsing.
1002                         break
1003                         ;;
1004         esac
1005         shift
1006 done
1007
1008 # See what we're supposed to do
1009 case "$1" in 
1010 build)
1011         clear
1012         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
1013         #only restore on a clean disk
1014         if [ ! -f log/cleanup-toolchain-2-tools ]; then
1015                 if [ ! -n "$PACKAGE" ]; then
1016                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1017                         prepareenv
1018                         buildtoolchain
1019                 else
1020                         PACKAGENAME=${PACKAGE%.tar.gz}
1021                         beautify build_stage "Packaged toolchain compilation"
1022                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
1023                                 tar zxf $PACKAGE
1024                                 prepareenv
1025                         else
1026                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
1027                         fi
1028                 fi
1029         else
1030                 echo -n "Using installed toolchain" | tee -a $LOGFILE
1031                 beautify message SKIP
1032                 prepareenv
1033         fi
1034
1035         beautify build_start
1036         beautify build_stage "Building LFS"
1037         buildbase
1038
1039         beautify build_stage "Building IPFire"
1040         buildipfire
1041
1042         beautify build_stage "Building installer"
1043         buildinstaller
1044
1045         beautify build_stage "Building packages"
1046         buildpackages
1047         
1048         beautify build_stage "Checking Logfiles for new Files"
1049
1050         cd $BASEDIR
1051         tools/checknewlog.pl
1052         tools/checkrootfiles
1053         cd $PWD
1054
1055         beautify build_end
1056         ;;
1057 shell)
1058         # enter a shell inside LFS chroot
1059         # may be used to changed kernel settings
1060         prepareenv
1061         entershell
1062         ;;
1063 clean)
1064         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
1065         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1066                 $LOSETUP -d $i 2>/dev/null
1067         done
1068         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1069                 umount $i
1070         done
1071         stdumount
1072         for i in `seq 0 7`; do
1073             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1074                 umount /dev/loop${i}     2>/dev/null;
1075                 losetup -d /dev/loop${i} 2>/dev/null;
1076             fi;
1077         done
1078         rm -rf $BASEDIR/build
1079         rm -rf $BASEDIR/cdrom
1080         rm -rf $BASEDIR/packages
1081         rm -rf $BASEDIR/log
1082         if [ -h /tools ]; then
1083                 rm -f /tools
1084         fi
1085         rm -f $BASEDIR/ipfire-*
1086         beautify message DONE
1087         ;;
1088 downloadsrc)
1089         if [ ! -d $BASEDIR/cache ]; then
1090                 mkdir $BASEDIR/cache
1091         fi
1092         mkdir -p $BASEDIR/log
1093         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
1094         FINISHED=0
1095         cd $BASEDIR/lfs
1096         for c in `seq $MAX_RETRIES`; do
1097                 if (( FINISHED==1 )); then 
1098                         break
1099                 fi
1100                 FINISHED=1
1101                 cd $BASEDIR/lfs
1102                 for i in *; do
1103                         if [ -f "$i" -a "$i" != "Config" ]; then
1104                                 lfsmakecommoncheck ${i} || continue
1105
1106                                 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1107                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1108                                 if [ $? -ne 0 ]; then
1109                                         beautify message FAIL
1110                                         FINISHED=0
1111                                 else
1112                                         if [ $c -eq 1 ]; then
1113                                         beautify message DONE
1114                                         fi
1115                                 fi
1116                         fi
1117                 done
1118         done
1119         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1120         ERROR=0
1121         for i in *; do
1122                 if [ -f "$i" -a "$i" != "Config" ]; then
1123                         lfsmakecommoncheck ${i} > /dev/null || continue
1124                         make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1125                                 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1126                         if [ $? -ne 0 ]; then
1127                                 echo -ne "MD5 difference in lfs/$i"
1128                                 beautify message FAIL
1129                                 ERROR=1
1130                         fi
1131                 fi
1132         done
1133         if [ $ERROR -eq 0 ]; then
1134                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1135                 beautify message DONE
1136         else
1137                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1138                 beautify message FAIL
1139         fi
1140         cd - >/dev/null 2>&1
1141         ;;
1142 toolchain)
1143         clear
1144         prepareenv
1145         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1146         buildtoolchain
1147         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1148         test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1149         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1150                 build/tools build/bin/sh log >> $LOGFILE
1151         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1152                 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1153         stdumount
1154         ;;
1155 gettoolchain)
1156         # arbitrary name to be updated in case of new toolchain package upload
1157         PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1158         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1159                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1160                 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1161                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1162                 cd $BASEDIR/cache/toolchains
1163                 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1164                 if [ $? -ne 0 ]; then
1165                         echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1166                 else
1167                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1168                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1169                         else
1170                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1171                         fi
1172                 fi
1173         else
1174                 echo "Toolchain is already downloaded. Exiting..."
1175         fi
1176         ;;
1177 othersrc)
1178         prepareenv
1179         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1180         chroot $LFS /tools/bin/env -i   HOME=/root \
1181         TERM=$TERM PS1='\u:\w\$ ' \
1182         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1183         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1184         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1185         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1186         if [ $? -eq "0" ]; then
1187                 beautify message DONE
1188         else
1189                 beautify message FAIL
1190         fi
1191         stdumount
1192         ;;
1193 uploadsrc)
1194         PWD=`pwd`
1195         if [ -z $IPFIRE_USER ]; then
1196                 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1197                 beautify message FAIL
1198                 exit 1
1199         fi
1200
1201         URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1202         REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1203
1204         for file in ${BASEDIR}/cache/*; do
1205                 [ -d "${file}" ] && continue
1206                 grep -q "$(basename ${file})" <<<$REMOTE_FILES && continue
1207                 NEW_FILES="$NEW_FILES $file"
1208         done
1209         [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1210         cd $BASEDIR
1211         cd $PWD
1212         exit 0
1213         ;;
1214 lang)
1215         update_langs
1216         ;;
1217 *)
1218         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1219         cat doc/make.sh-usage
1220         ;;
1221 esac