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