avahi: Drop package
[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="110"                                              # 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 initscripts
397   ipfiremake backup
398   ipfiremake pkg-config
399   ipfiremake libusb
400   ipfiremake libusb-compat
401   ipfiremake libpcap
402   ipfiremake ppp
403   ipfiremake pptp
404   ipfiremake unzip
405   ipfiremake which
406   ipfiremake linux-firmware
407   ipfiremake ath10k-firmware
408   ipfiremake dvb-firmwares
409   ipfiremake mt7601u-firmware
410   ipfiremake zd1211-firmware
411   ipfiremake rpi-firmware
412   ipfiremake bc
413   ipfiremake u-boot
414   ipfiremake cpio
415   ipfiremake mdadm
416   ipfiremake dracut
417   ipfiremake lvm2
418   ipfiremake multipath-tools
419   ipfiremake freetype
420   ipfiremake grub
421   ipfiremake libmnl
422   ipfiremake libnfnetlink
423   ipfiremake libnetfilter_queue
424   ipfiremake libnetfilter_conntrack
425   ipfiremake libnetfilter_cthelper
426   ipfiremake libnetfilter_cttimeout
427   ipfiremake iptables
428
429   case "${TARGET_ARCH}" in
430         x86_64)
431                 ipfiremake linux                        KCFG=""
432                 ipfiremake backports                    KCFG=""
433                 ipfiremake e1000e                       KCFG=""
434                 ipfiremake igb                          KCFG=""
435                 ipfiremake ixgbe                        KCFG=""
436                 ipfiremake xtables-addons               KCFG=""
437                 ipfiremake linux-initrd                 KCFG=""
438                 ;;
439         i586)
440                 # x86-pae (Native and new XEN) kernel build
441                 ipfiremake linux                        KCFG="-pae"
442                 ipfiremake backports                    KCFG="-pae"
443                 ipfiremake e1000e                       KCFG="-pae"
444                 ipfiremake igb                          KCFG="-pae"
445                 ipfiremake ixgbe                        KCFG="-pae"
446                 ipfiremake xtables-addons               KCFG="-pae"
447                 ipfiremake linux-initrd                 KCFG="-pae"
448
449                 # x86 kernel build
450                 ipfiremake linux                        KCFG=""
451                 ipfiremake backports                    KCFG=""
452                 ipfiremake e1000e                       KCFG=""
453                 ipfiremake igb                          KCFG=""
454                 ipfiremake ixgbe                        KCFG=""
455                 ipfiremake xtables-addons               KCFG=""
456                 ipfiremake linux-initrd                 KCFG=""
457                 ;;
458
459         armv5tel)
460                 # arm-rpi (Raspberry Pi) kernel build
461                 ipfiremake linux                        KCFG="-rpi"
462                 ipfiremake backports                    KCFG="-rpi"
463                 ipfiremake xtables-addons               KCFG="-rpi"
464                 ipfiremake linux-initrd                 KCFG="-rpi"
465
466                 # arm multi platform (Panda, Wandboard ...) kernel build
467                 ipfiremake linux                        KCFG="-multi"
468                 ipfiremake backports                    KCFG="-multi"
469                 ipfiremake e1000e                       KCFG="-multi"
470                 ipfiremake igb                          KCFG="-multi"
471                 ipfiremake ixgbe                        KCFG="-multi"
472                 ipfiremake xtables-addons               KCFG="-multi"
473                 ipfiremake linux-initrd                 KCFG="-multi"
474
475                 # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build
476                 ipfiremake linux                        KCFG="-kirkwood"
477                 ipfiremake backports                    KCFG="-kirkwood"
478                 ipfiremake e1000e                       KCFG="-kirkwood"
479                 ipfiremake igb                          KCFG="-kirkwood"
480                 ipfiremake ixgbe                        KCFG="-kirkwood"
481                 ipfiremake xtables-addons               KCFG="-kirkwood"
482                 ipfiremake linux-initrd                 KCFG="-kirkwood"
483                 ;;
484   esac
485   ipfiremake xtables-addons                     USPACE="1"
486   ipfiremake openssl
487   [ "${TARGET_ARCH}" = "i586" ] && ipfiremake openssl KCFG='-sse2'
488   ipfiremake libgpg-error
489   ipfiremake libgcrypt
490   ipfiremake libassuan
491   ipfiremake nettle
492   ipfiremake libevent
493   ipfiremake libevent2
494   ipfiremake expat
495   ipfiremake unbound
496   ipfiremake gnutls
497   ipfiremake bind
498   ipfiremake dhcp
499   ipfiremake dhcpcd
500   ipfiremake boost
501   ipfiremake linux-atm
502   ipfiremake gdbm
503   ipfiremake pam
504   ipfiremake curl
505   ipfiremake tcl
506   ipfiremake sqlite
507   ipfiremake libffi
508   ipfiremake python
509   ipfiremake python3
510   ipfiremake ca-certificates
511   ipfiremake fireinfo
512   ipfiremake libnet
513   ipfiremake libnl
514   ipfiremake libnl-3
515   ipfiremake libidn
516   ipfiremake nasm
517   ipfiremake libjpeg
518   ipfiremake libjpeg-compat
519   ipfiremake libexif
520   ipfiremake libpng
521   ipfiremake libtiff
522   ipfiremake libart
523   ipfiremake gd
524   ipfiremake popt
525   ipfiremake pcre
526   ipfiremake slang
527   ipfiremake newt
528   ipfiremake libsmooth
529   ipfiremake attr
530   ipfiremake acl
531   ipfiremake libcap
532   ipfiremake pciutils
533   ipfiremake usbutils
534   ipfiremake libxml2
535   ipfiremake libxslt
536   ipfiremake BerkeleyDB
537   ipfiremake mysql
538   ipfiremake cyrus-sasl
539   ipfiremake openldap
540   ipfiremake apache2
541   ipfiremake php
542   ipfiremake web-user-interface
543   ipfiremake flag-icons
544   ipfiremake jquery
545   ipfiremake arping
546   ipfiremake beep
547   ipfiremake dvdrtools
548   ipfiremake dosfstools
549   ipfiremake reiserfsprogs
550   ipfiremake xfsprogs
551   ipfiremake sysfsutils
552   ipfiremake fuse
553   ipfiremake ntfs-3g
554   ipfiremake ethtool
555   ipfiremake ez-ipupdate
556   ipfiremake fcron
557   ipfiremake perl-GD
558   ipfiremake GD-Graph
559   ipfiremake GD-TextUtil
560   ipfiremake perl-Device-SerialPort
561   ipfiremake perl-Device-Modem
562   ipfiremake perl-Apache-Htpasswd
563   ipfiremake gnupg
564   ipfiremake hdparm
565   ipfiremake sdparm
566   ipfiremake mtools
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 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 elfutils
845   ipfiremake ltrace
846   ipfiremake ipfire-netboot
847   ipfiremake lcdproc
848   ipfiremake bitstream
849   ipfiremake multicat
850   ipfiremake keepalived
851   ipfiremake ipvsadm
852   ipfiremake perl-Carp-Clan
853   ipfiremake perl-Date-Calc
854   ipfiremake perl-Date-Manip
855   ipfiremake perl-File-Tail
856   ipfiremake perl-TimeDate
857   ipfiremake swatch
858   ipfiremake tor
859   ipfiremake arm
860   ipfiremake wavemon
861   ipfiremake iptraf-ng
862   ipfiremake iotop
863   ipfiremake stunnel
864   ipfiremake sslscan
865   ipfiremake owncloud
866   ipfiremake bacula
867   ipfiremake batctl
868   ipfiremake perl-PDF-API2
869   ipfiremake squid-accounting
870   ipfiremake pigz
871   ipfiremake tmux
872   ipfiremake perl-Text-CSV_XS
873   ipfiremake swconfig
874   ipfiremake haproxy
875   ipfiremake ipset
876   ipfiremake lua
877   ipfiremake dnsdist
878   ipfiremake bird
879   ipfiremake dmidecode
880   ipfiremake mcelog
881   ipfiremake rtpproxy
882   ipfiremake util-macros
883   ipfiremake libpciaccess
884   ipfiremake libyajl
885   ipfiremake libvirt
886   ipfiremake freeradius
887   ipfiremake perl-common-sense
888   ipfiremake perl-inotify2
889   ipfiremake perl-Net-IP
890 }
891
892 buildinstaller() {
893   # Run installer scripts one by one
894   LOGFILE="$BASEDIR/log/_build.installer.log"
895   export LOGFILE
896   ipfiremake memtest
897   ipfiremake installer
898   installmake strip
899 }
900
901 buildpackages() {
902   LOGFILE="$BASEDIR/log/_build.packages.log"
903   export LOGFILE
904   echo "... see detailed log in _build.*.log files" >> $LOGFILE
905
906   
907   # Generating list of packages used
908   echo -n "Generating packages list from logs" | tee -a $LOGFILE
909   rm -f $BASEDIR/doc/packages-list
910   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
911         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
912                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
913         fi
914   done
915   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
916   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
917         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
918   rm -f $BASEDIR/doc/packages-list
919   # packages-list.txt is ready to be displayed for wiki page
920   beautify message DONE
921   
922   # Update changelog
923   cd $BASEDIR
924   [ -z $GIT_TAG ]  || LAST_TAG=$GIT_TAG
925   [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
926   git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
927
928   # Create images for install
929   ipfiremake cdrom
930
931   # Check if there is a loop device for building in virtual environments
932   modprobe loop 2>/dev/null
933   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
934         ipfiremake flash-images
935         ipfiremake flash-images SCON=1
936   fi
937
938   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
939
940   ipfirepackages
941
942   ipfiremake xen-image
943   mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
944
945   cd $BASEDIR
946
947   # remove not useable iso on armv5tel (needed to build flash images)
948   [ "${TARGET_ARCH}" = "armv5tel" ] && rm -rf *.iso
949
950   for i in `ls *.bz2 *.img.gz *.iso`; do
951         md5sum $i > $i.md5
952   done
953   cd $PWD
954
955   # Cleanup
956   stdumount
957   rm -rf $BASEDIR/build/tmp/*
958
959   # Generating total list of files
960   echo -n "Generating files list from logs" | tee -a $LOGFILE
961   rm -f $BASEDIR/log/FILES
962   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
963         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
964                 echo "##" >>$BASEDIR/log/FILES
965                 echo "## `basename $i`" >>$BASEDIR/log/FILES
966                 echo "##" >>$BASEDIR/log/FILES
967                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
968         fi
969   done
970   beautify message DONE
971
972   cd $PWD
973 }
974
975 ipfirepackages() {
976         ipfiremake core-updates
977
978         local i
979         for i in $(find $BASEDIR/config/rootfiles/packages{/${MACHINE},} -maxdepth 1 -type f); do
980                 i=$(basename ${i})
981                 if [ -e $BASEDIR/lfs/$i ]; then
982                         ipfiredist $i
983                 else
984                         echo -n $i
985                         beautify message SKIP
986                 fi
987         done
988   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
989   mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
990   rm -rf  $BASEDIR/build/install/packages/*
991 }
992
993 while [ $# -gt 0 ]; do
994         case "${1}" in
995                 --target=*)
996                         configure_target "${1#--target=}"
997                         ;;
998                 -*)
999                         exiterror "Unknown configuration option: ${1}"
1000                         ;;
1001                 *)
1002                         # Found a command, so exit options parsing.
1003                         break
1004                         ;;
1005         esac
1006         shift
1007 done
1008
1009 # See what we're supposed to do
1010 case "$1" in 
1011 build)
1012         clear
1013         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
1014         #only restore on a clean disk
1015         if [ ! -f log/cleanup-toolchain-2-tools ]; then
1016                 if [ ! -n "$PACKAGE" ]; then
1017                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1018                         prepareenv
1019                         buildtoolchain
1020                 else
1021                         PACKAGENAME=${PACKAGE%.tar.gz}
1022                         beautify build_stage "Packaged toolchain compilation"
1023                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
1024                                 tar zxf $PACKAGE
1025                                 prepareenv
1026                         else
1027                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
1028                         fi
1029                 fi
1030         else
1031                 echo -n "Using installed toolchain" | tee -a $LOGFILE
1032                 beautify message SKIP
1033                 prepareenv
1034         fi
1035
1036         beautify build_start
1037         beautify build_stage "Building LFS"
1038         buildbase
1039
1040         beautify build_stage "Building IPFire"
1041         buildipfire
1042
1043         beautify build_stage "Building installer"
1044         buildinstaller
1045
1046         beautify build_stage "Building packages"
1047         buildpackages
1048         
1049         beautify build_stage "Checking Logfiles for new Files"
1050
1051         cd $BASEDIR
1052         tools/checknewlog.pl
1053         tools/checkrootfiles
1054         cd $PWD
1055
1056         beautify build_end
1057         ;;
1058 shell)
1059         # enter a shell inside LFS chroot
1060         # may be used to changed kernel settings
1061         prepareenv
1062         entershell
1063         ;;
1064 clean)
1065         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
1066         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1067                 $LOSETUP -d $i 2>/dev/null
1068         done
1069         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1070                 umount $i
1071         done
1072         stdumount
1073         for i in `seq 0 7`; do
1074             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1075                 umount /dev/loop${i}     2>/dev/null;
1076                 losetup -d /dev/loop${i} 2>/dev/null;
1077             fi;
1078         done
1079         rm -rf $BASEDIR/build
1080         rm -rf $BASEDIR/cdrom
1081         rm -rf $BASEDIR/packages
1082         rm -rf $BASEDIR/log
1083         if [ -h /tools ]; then
1084                 rm -f /tools
1085         fi
1086         rm -f $BASEDIR/ipfire-*
1087         beautify message DONE
1088         ;;
1089 downloadsrc)
1090         if [ ! -d $BASEDIR/cache ]; then
1091                 mkdir $BASEDIR/cache
1092         fi
1093         mkdir -p $BASEDIR/log
1094         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
1095         FINISHED=0
1096         cd $BASEDIR/lfs
1097         for c in `seq $MAX_RETRIES`; do
1098                 if (( FINISHED==1 )); then 
1099                         break
1100                 fi
1101                 FINISHED=1
1102                 cd $BASEDIR/lfs
1103                 for i in *; do
1104                         if [ -f "$i" -a "$i" != "Config" ]; then
1105                                 lfsmakecommoncheck ${i} || continue
1106
1107                                 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1108                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1109                                 if [ $? -ne 0 ]; then
1110                                         beautify message FAIL
1111                                         FINISHED=0
1112                                 else
1113                                         if [ $c -eq 1 ]; then
1114                                         beautify message DONE
1115                                         fi
1116                                 fi
1117                         fi
1118                 done
1119         done
1120         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1121         ERROR=0
1122         for i in *; do
1123                 if [ -f "$i" -a "$i" != "Config" ]; then
1124                         lfsmakecommoncheck ${i} > /dev/null || continue
1125                         make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1126                                 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1127                         if [ $? -ne 0 ]; then
1128                                 echo -ne "MD5 difference in lfs/$i"
1129                                 beautify message FAIL
1130                                 ERROR=1
1131                         fi
1132                 fi
1133         done
1134         if [ $ERROR -eq 0 ]; then
1135                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1136                 beautify message DONE
1137         else
1138                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1139                 beautify message FAIL
1140         fi
1141         cd - >/dev/null 2>&1
1142         ;;
1143 toolchain)
1144         clear
1145         prepareenv
1146         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1147         buildtoolchain
1148         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1149         test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1150         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1151                 build/tools build/bin/sh log >> $LOGFILE
1152         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1153                 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1154         stdumount
1155         ;;
1156 gettoolchain)
1157         # arbitrary name to be updated in case of new toolchain package upload
1158         PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1159         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1160                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1161                 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1162                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1163                 cd $BASEDIR/cache/toolchains
1164                 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1165                 if [ $? -ne 0 ]; then
1166                         echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1167                 else
1168                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1169                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1170                         else
1171                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1172                         fi
1173                 fi
1174         else
1175                 echo "Toolchain is already downloaded. Exiting..."
1176         fi
1177         ;;
1178 othersrc)
1179         prepareenv
1180         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1181         chroot $LFS /tools/bin/env -i   HOME=/root \
1182         TERM=$TERM PS1='\u:\w\$ ' \
1183         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1184         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1185         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1186         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1187         if [ $? -eq "0" ]; then
1188                 beautify message DONE
1189         else
1190                 beautify message FAIL
1191         fi
1192         stdumount
1193         ;;
1194 uploadsrc)
1195         PWD=`pwd`
1196         if [ -z $IPFIRE_USER ]; then
1197                 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1198                 beautify message FAIL
1199                 exit 1
1200         fi
1201
1202         URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1203         REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1204
1205         for file in ${BASEDIR}/cache/*; do
1206                 [ -d "${file}" ] && continue
1207                 grep -q "$(basename ${file})" <<<$REMOTE_FILES && continue
1208                 NEW_FILES="$NEW_FILES $file"
1209         done
1210         [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1211         cd $BASEDIR
1212         cd $PWD
1213         exit 0
1214         ;;
1215 lang)
1216         update_langs
1217         ;;
1218 *)
1219         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1220         cat doc/make.sh-usage
1221         ;;
1222 esac