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