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