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