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