]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - make.sh
madwifi: removed.
[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-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=3
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_HASHDIR=1
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)
236 # These are working.
237 ;;
238 i586:*)
239 error=true
240 ;;
241
242 # ARM
243 armv5tel:armv5tel|armv5tel:armv5tejl|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 if [ "$(uname -r | grep ipfire)" ]; then
255 exiterror "Cannot build toolchain on ipfire. Please use the download."
256 fi
257
258 LOGFILE="$BASEDIR/log/_build.toolchain.log"
259 export LOGFILE
260 NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
261 export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
262 ORG_PATH=$PATH
263 lfsmake1 ccache PASS=1
264 lfsmake1 make PASS=1
265 lfsmake1 binutils PASS=1
266 lfsmake1 gcc PASS=1
267 export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
268 lfsmake1 linux2 TOOLS=1 HEADERS=1
269 lfsmake1 glibc
270 lfsmake1 cleanup-toolchain PASS=1
271 lfsmake1 fake-environ
272 lfsmake1 tcl
273 lfsmake1 expect
274 lfsmake1 dejagnu
275 lfsmake1 gcc PASS=2
276 lfsmake1 binutils PASS=2
277 lfsmake1 ccache PASS=2
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 PASS=2
290 lfsmake1 patch
291 lfsmake1 perl
292 lfsmake1 sed
293 lfsmake1 tar
294 lfsmake1 texinfo
295 lfsmake1 util-linux
296 lfsmake1 strip
297 lfsmake1 cleanup-toolchain PASS=2
298 export PATH=$ORG_PATH
299 }
300
301 buildbase() {
302 LOGFILE="$BASEDIR/log/_build.base.log"
303 export LOGFILE
304 lfsmake2 stage2
305 lfsmake2 linux2 HEADERS=1
306 lfsmake2 man-pages
307 lfsmake2 glibc
308 lfsmake2 tzdata
309 lfsmake2 cleanup-toolchain PASS=3
310 lfsmake2 binutils
311 lfsmake2 gcc
312 lfsmake2 berkeley
313 lfsmake2 coreutils
314 lfsmake2 iana-etc
315 lfsmake2 m4
316 lfsmake2 bison
317 lfsmake2 ncurses
318 lfsmake2 procps
319 lfsmake2 sed
320 lfsmake2 libtool
321 lfsmake2 perl
322 lfsmake2 readline
323 lfsmake2 zlib
324 lfsmake2 autoconf
325 lfsmake2 automake
326 lfsmake2 bash
327 lfsmake2 bzip2
328 lfsmake2 diffutils
329 lfsmake2 e2fsprogs
330 lfsmake2 ed
331 lfsmake2 file
332 lfsmake2 findutils
333 lfsmake2 flex
334 lfsmake2 gawk
335 lfsmake2 gettext
336 lfsmake2 grep
337 lfsmake2 groff
338 lfsmake2 gzip
339 lfsmake2 inetutils
340 lfsmake2 iproute2
341 lfsmake2 kbd
342 lfsmake2 less
343 lfsmake2 libaal
344 lfsmake2 make
345 lfsmake2 man
346 lfsmake2 mktemp
347 lfsmake2 module-init-tools
348 lfsmake2 net-tools
349 lfsmake2 patch
350 lfsmake2 psmisc
351 lfsmake2 reiser4progs
352 lfsmake2 shadow
353 lfsmake2 sysklogd
354 lfsmake2 sysvinit
355 lfsmake2 tar
356 lfsmake2 texinfo
357 lfsmake2 udev
358 lfsmake2 util-linux
359 lfsmake2 vim
360 lfsmake2 grub
361 }
362
363 buildipfire() {
364 LOGFILE="$BASEDIR/log/_build.ipfire.log"
365 export LOGFILE
366 ipfiremake configroot
367 ipfiremake backup
368 ipfiremake dhcp
369 ipfiremake dhcpcd
370 ipfiremake libusb
371 ipfiremake libpcap
372 ipfiremake ppp
373 ipfiremake pptp
374 ipfiremake unzip
375 ipfiremake which
376 ipfiremake xz
377 ipfiremake linux-firmware
378 ipfiremake zd1211-firmware
379 ipfiremake rpi-firmware
380 ipfiremake fw_ath9k_htc
381 ipfiremake u-boot
382
383 # The xen and PAE kernels are only available for x86
384 if [ "${MACHINE_TYPE}" != "arm" ]; then
385 ipfiremake linux2 KCFG="-xen"
386 ipfiremake kqemu 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 kqemu KCFG="-pae"
401 ipfiremake kvm-kmod KCFG="-pae"
402 ipfiremake v4l-dvb KCFG="-pae"
403 ipfiremake alsa KCFG="-pae" KMOD=1
404 ipfiremake mISDN KCFG="-pae"
405 ipfiremake dahdi KCFG="-pae" KMOD=1
406 ipfiremake cryptodev KCFG="-pae"
407 ipfiremake compat-wireless KCFG="-pae"
408 # ipfiremake r8169 KCFG="-pae"
409 # ipfiremake r8168 KCFG="-pae"
410 # ipfiremake r8101 KCFG="-pae"
411 ipfiremake e1000 KCFG="-pae"
412 ipfiremake e1000e KCFG="-pae"
413 ipfiremake igb KCFG="-pae"
414
415 ipfiremake linux KCFG=""
416 ipfiremake v4l-dvb KCFG=""
417 ipfiremake kqemu KCFG=""
418 ipfiremake kvm-kmod KCFG=""
419 ipfiremake alsa KCFG="" KMOD=1
420 ipfiremake mISDN KCFG=""
421 ipfiremake dahdi KCFG="" KMOD=1
422 ipfiremake cryptodev KCFG=""
423 ipfiremake compat-wireless KCFG=""
424 # ipfiremake r8169 KCFG=""
425 # ipfiremake r8168 KCFG=""
426 # ipfiremake r8101 KCFG=""
427 ipfiremake e1000 KCFG=""
428 ipfiremake e1000e KCFG=""
429 ipfiremake igb KCFG=""
430 else
431 # arm-omap kernel build
432 ipfiremake linux3 KCFG="-rpi"
433
434 ipfiremake linux3 KCFG="-omap"
435
436 # arm-versatile kernel build
437 ipfiremake linux KCFG="-versatile"
438 ipfiremake v4l-dvb KCFG="-versatile"
439 ipfiremake kqemu KCFG="-versatile"
440 ipfiremake kvm-kmod KCFG="-versatile"
441 ipfiremake mISDN KCFG="-versatile"
442 ipfiremake dahdi KCFG="-versatile" KMOD=1
443 ipfiremake cryptodev KCFG="-versatile"
444 ipfiremake compat-wireless KCFG="-versatile"
445 # ipfiremake r8169 KCFG="-versatile"
446 # ipfiremake r8168 KCFG="-versatile"
447 # ipfiremake r8101 KCFG="-versatile"
448 ipfiremake e1000 KCFG="-versatile"
449 ipfiremake e1000e KCFG="-versatile"
450 ipfiremake igb KCFG="-versatile"
451 # arm-kirkwood kernel build
452 ipfiremake linux KCFG="-kirkwood"
453 ipfiremake v4l-dvb KCFG="-kirkwood"
454 ipfiremake kqemu KCFG="-kirkwood"
455 ipfiremake kvm-kmod KCFG="-kirkwood"
456 ipfiremake mISDN KCFG="-kirkwood"
457 ipfiremake dahdi KCFG="-kirkwood" KMOD=1
458 ipfiremake cryptodev KCFG="-kirkwood"
459 ipfiremake compat-wireless KCFG="-kirkwood"
460 # ipfiremake r8169 KCFG="-kirkwood"
461 # ipfiremake r8168 KCFG="-kirkwood"
462 # ipfiremake r8101 KCFG="-kirkwood"
463 ipfiremake e1000 KCFG="-kirkwood"
464 ipfiremake e1000e KCFG="-kirkwood"
465 ipfiremake igb KCFG="-kirkwood"
466 fi
467 ipfiremake pkg-config
468 ipfiremake linux-atm
469 ipfiremake cpio
470 ipfiremake dracut
471 ipfiremake expat
472 ipfiremake gdbm
473 ipfiremake gmp
474 ipfiremake pam
475 ipfiremake openssl
476 ipfiremake curl
477 ipfiremake tcl
478 ipfiremake sqlite
479 ipfiremake python
480 ipfiremake fireinfo
481 ipfiremake libnet
482 ipfiremake libnl
483 ipfiremake libidn
484 ipfiremake libjpeg
485 ipfiremake libpng
486 ipfiremake libtiff
487 ipfiremake libart
488 ipfiremake freetype
489 ipfiremake gd
490 ipfiremake popt
491 ipfiremake pcre
492 ipfiremake slang
493 ipfiremake newt
494 ipfiremake attr
495 ipfiremake acl
496 ipfiremake libcap
497 ipfiremake pciutils
498 ipfiremake usbutils
499 ipfiremake libxml2
500 ipfiremake libxslt
501 ipfiremake BerkeleyDB
502 ipfiremake mysql
503 ipfiremake cyrus-sasl
504 ipfiremake openldap
505 ipfiremake apache2
506 ipfiremake php
507 ipfiremake apache2 PASS=C
508 ipfiremake arping
509 ipfiremake beep
510 ipfiremake bind
511 ipfiremake dvdrtools
512 ipfiremake dnsmasq
513 ipfiremake dosfstools
514 ipfiremake reiserfsprogs
515 ipfiremake xfsprogs
516 ipfiremake sysfsutils
517 ipfiremake fuse
518 ipfiremake ntfs-3g
519 ipfiremake ethtool
520 ipfiremake ez-ipupdate
521 ipfiremake fcron
522 ipfiremake perl-GD
523 ipfiremake GD-Graph
524 ipfiremake GD-TextUtil
525 ipfiremake gnupg
526 ipfiremake hdparm
527 ipfiremake sdparm
528 ipfiremake mtools
529 ipfiremake initscripts
530 ipfiremake whatmask
531 ipfiremake iptables
532 ipfiremake libupnp
533 ipfiremake ipaddr
534 ipfiremake iptstate
535 ipfiremake iputils
536 ipfiremake l7-protocols
537 ipfiremake mISDNuser
538 ipfiremake capi4k-utils
539 ipfiremake hwdata
540 ipfiremake kudzu
541 ipfiremake logrotate
542 ipfiremake logwatch
543 ipfiremake misc-progs
544 ipfiremake nano
545 ipfiremake nasm
546 ipfiremake URI
547 ipfiremake HTML-Tagset
548 ipfiremake HTML-Parser
549 ipfiremake Compress-Zlib
550 ipfiremake Digest
551 ipfiremake Digest-SHA1
552 ipfiremake Digest-HMAC
553 ipfiremake libwww-perl
554 ipfiremake Net-DNS
555 ipfiremake Net-IPv4Addr
556 ipfiremake Net_SSLeay
557 ipfiremake IO-Stringy
558 ipfiremake Unix-Syslog
559 ipfiremake Mail-Tools
560 ipfiremake MIME-Tools
561 ipfiremake Net-Server
562 ipfiremake Convert-TNEF
563 ipfiremake Convert-UUlib
564 ipfiremake Archive-Tar
565 ipfiremake Archive-Zip
566 ipfiremake Text-Tabs+Wrap
567 ipfiremake Locale-Country
568 ipfiremake XML-Parser
569 ipfiremake Crypt-PasswdMD5
570 ipfiremake Net-Telnet
571 ipfiremake python-setuptools
572 ipfiremake python-clientform
573 ipfiremake python-mechanize
574 ipfiremake python-feedparser
575 ipfiremake python-rssdler
576 ipfiremake glib
577 ipfiremake GeoIP
578 ipfiremake fwhits
579 ipfiremake noip_updater
580 ipfiremake ntp
581 ipfiremake openssh
582 ipfiremake rrdtool
583 ipfiremake setserial
584 ipfiremake setup
585 ipfiremake libdnet
586 ipfiremake daq
587 ipfiremake snort
588 ipfiremake oinkmaster
589 ipfiremake squid
590 ipfiremake squidguard
591 ipfiremake calamaris
592 ipfiremake tcpdump
593 ipfiremake traceroute
594 ipfiremake vlan
595 ipfiremake wireless
596 ipfiremake libsafe
597 ipfiremake pakfire
598 ipfiremake spandsp
599 ipfiremake lzo
600 ipfiremake openvpn
601 ipfiremake pammysql
602 ipfiremake cups
603 ipfiremake ghostscript
604 ipfiremake foomatic
605 ipfiremake hplip
606 ipfiremake samba
607 ipfiremake sudo
608 ipfiremake mc
609 ipfiremake wget
610 ipfiremake bridge-utils
611 ipfiremake screen
612 ipfiremake hddtemp
613 ipfiremake smartmontools
614 ipfiremake htop
615 ipfiremake postfix
616 ipfiremake fetchmail
617 ipfiremake cyrus-imapd
618 ipfiremake openmailadmin
619 ipfiremake clamav
620 ipfiremake spamassassin
621 ipfiremake amavisd
622 ipfiremake alsa
623 ipfiremake mpfire
624 ipfiremake guardian
625 ipfiremake libid3tag
626 ipfiremake libmad
627 ipfiremake libogg
628 ipfiremake libvorbis
629 ipfiremake libdvbpsi
630 ipfiremake lame
631 ipfiremake sox
632 ipfiremake libshout
633 ipfiremake xvid
634 ipfiremake libmpeg2
635 ipfiremake cmake
636 ipfiremake gnump3d
637 ipfiremake libsigc++
638 ipfiremake applejuice
639 ipfiremake libtorrent
640 ipfiremake rtorrent
641 ipfiremake ipfireseeder
642 ipfiremake rsync
643 ipfiremake tcpwrapper
644 ipfiremake libevent
645 ipfiremake libevent2
646 ipfiremake portmap
647 ipfiremake nfs
648 ipfiremake nmap
649 ipfiremake ncftp
650 ipfiremake etherwake
651 ipfiremake bwm-ng
652 ipfiremake tripwire
653 ipfiremake sysstat
654 ipfiremake vsftpd
655 ipfiremake strongswan
656 ipfiremake lsof
657 ipfiremake centerim
658 ipfiremake br2684ctl
659 ipfiremake pcmciautils
660 ipfiremake lm_sensors
661 ipfiremake liboping
662 ipfiremake collectd
663 ipfiremake teamspeak
664 ipfiremake elinks
665 ipfiremake igmpproxy
666 ipfiremake fbset
667 ipfiremake sdl
668 ipfiremake qemu
669 ipfiremake qemu-kqemu
670 ipfiremake sane
671 ipfiremake netpbm
672 ipfiremake phpSANE
673 ipfiremake tunctl
674 ipfiremake nagios
675 ipfiremake nagios_nrpe
676 ipfiremake ebtables
677 ipfiremake fontconfig
678 ipfiremake freefont
679 ipfiremake directfb
680 ipfiremake dfb++
681 ipfiremake faad2
682 ipfiremake ffmpeg
683 ipfiremake videolan
684 ipfiremake vdr
685 ipfiremake w_scan
686 ipfiremake icecast
687 ipfiremake icegenerator
688 ipfiremake mpd
689 ipfiremake libmpdclient
690 ipfiremake mpc
691 ipfiremake git
692 ipfiremake squidclamav
693 ipfiremake bc
694 ipfiremake vnstat
695 ipfiremake vnstati
696 ipfiremake iw
697 ipfiremake wpa_supplicant
698 ipfiremake hostapd
699 ipfiremake urlgrabber
700 ipfiremake syslinux
701 ipfiremake tftpd
702 ipfiremake cpufrequtils
703 ipfiremake dbus
704 ipfiremake bluetooth
705 ipfiremake gutenprint
706 ipfiremake apcupsd
707 ipfiremake iperf
708 ipfiremake netcat
709 ipfiremake 7zip
710 ipfiremake lynis
711 ipfiremake splix
712 ipfiremake streamripper
713 ipfiremake sshfs
714 ipfiremake taglib
715 ipfiremake mediatomb
716 ipfiremake sslh
717 ipfiremake perl-gettext
718 ipfiremake vdradmin
719 ipfiremake miau
720 ipfiremake netsnmpd
721 ipfiremake perl-DBI
722 ipfiremake perl-DBD-mysql
723 ipfiremake cacti
724 ipfiremake icecc
725 ipfiremake openvmtools
726 ipfiremake nagiosql
727 ipfiremake iftop
728 ipfiremake motion
729 ipfiremake joe
730 ipfiremake nut
731 ipfiremake watchdog
732 ipfiremake libpri
733 ipfiremake dahdi
734 ipfiremake asterisk
735 ipfiremake lcr
736 ipfiremake usb_modeswitch
737 ipfiremake usb_modeswitch_data
738 ipfiremake zerofree
739 ipfiremake mdadm
740 ipfiremake eject
741 ipfiremake pound
742 ipfiremake minicom
743 ipfiremake ddrescue
744 ipfiremake imspector
745 ipfiremake miniupnpd
746 ipfiremake client175
747 ipfiremake powertop
748 ipfiremake parted
749 ipfiremake swig
750 ipfiremake python-m2crypto
751 ipfiremake wireless-regdb
752 ipfiremake crda
753 ipfiremake libsolv
754 ipfiremake python-distutils-extra
755 ipfiremake python-lzma
756 ipfiremake python-progressbar
757 ipfiremake python-xattr
758 ipfiremake intltool
759 ipfiremake pakfire3-deps
760 ipfiremake transmission
761 ipfiremake dpfhack
762 ipfiremake lcd4linux
763 ipfiremake mtr
764 ipfiremake tcpick
765 echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
766 cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
767 echo >> $BASEDIR/build/var/ipfire/firebuild
768 git log -1 >> $BASEDIR/build/var/ipfire/firebuild
769 echo >> $BASEDIR/build/var/ipfire/firebuild
770 git status >> $BASEDIR/build/var/ipfire/firebuild
771 echo >> $BASEDIR/build/var/ipfire/firebuild
772 cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
773 echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
774 if [ "$GIT_BRANCH" = "master" -o "$GIT_BRANCH" = "next" ]; then
775 echo "$NAME $VERSION ($MACHINE) - Development Build: $GIT_LASTCOMMIT" > $BASEDIR/build/etc/system-release
776 else
777 echo "$NAME $VERSION ($MACHINE) - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
778 fi
779 }
780
781 buildinstaller() {
782 # Run installer scripts one by one
783 LOGFILE="$BASEDIR/log/_build.installer.log"
784 export LOGFILE
785 ipfiremake as86
786 ipfiremake mbr
787 ipfiremake memtest
788 ipfiremake installer
789 cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
790 installmake strip
791 ipfiremake initrd
792 }
793
794 buildpackages() {
795 LOGFILE="$BASEDIR/log/_build.packages.log"
796 export LOGFILE
797 echo "... see detailed log in _build.*.log files" >> $LOGFILE
798
799
800 # Generating list of packages used
801 echo -n "Generating packages list from logs" | tee -a $LOGFILE
802 rm -f $BASEDIR/doc/packages-list
803 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
804 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
805 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
806 fi
807 done
808 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
809 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
810 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
811 rm -f $BASEDIR/doc/packages-list
812 # packages-list.txt is ready to be displayed for wiki page
813 beautify message DONE
814
815 # Update changelog
816 cd $BASEDIR
817 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
818 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
819 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
820
821 # Create images for install
822 ipfiremake cdrom
823
824 # Check if there is a loop device for building in virtual environments
825 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
826 if [ "${MACHINE_TYPE}" != "arm" ]; then
827 ipfiremake usb-stick
828 fi
829 ipfiremake flash-images
830 fi
831
832 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
833
834 ipfirepackages
835
836 # Check if there is a loop device for building in virtual environments
837 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]) && [ "${MACHINE_TYPE}" != "arm" ]; then
838 cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
839 cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
840 ipfiremake xen-image
841 rm -rf $LFS/install/packages/linux-xen-*.ipfire
842 rm -rf $LFS/install/packages/meta-linux-xen
843 fi
844 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
845
846 cd $BASEDIR
847 for i in `ls *.bz2 *.img.gz *.iso`; do
848 md5sum $i > $i.md5
849 done
850 cd $PWD
851
852 # Cleanup
853 stdumount
854 rm -rf $BASEDIR/build/tmp/*
855
856 # Generating total list of files
857 echo -n "Generating files list from logs" | tee -a $LOGFILE
858 rm -f $BASEDIR/log/FILES
859 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
860 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
861 echo "##" >>$BASEDIR/log/FILES
862 echo "## `basename $i`" >>$BASEDIR/log/FILES
863 echo "##" >>$BASEDIR/log/FILES
864 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
865 fi
866 done
867 beautify message DONE
868
869 cd $PWD
870 }
871
872 ipfirepackages() {
873 ipfiremake core-updates
874
875 local i
876 for i in $(find $BASEDIR/config/rootfiles/packages{${machine},} -maxdepth 1 -type f); do
877 i=$(basename ${i})
878 if [ -e $BASEDIR/lfs/$i ]; then
879 ipfiredist $i
880 else
881 echo -n $i
882 beautify message SKIP
883 fi
884 done
885 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
886 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
887 rm -rf $BASEDIR/build/install/packages/*
888 }
889
890 # See what we're supposed to do
891 case "$1" in
892 build)
893 clear
894 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
895 #only restore on a clean disk
896 if [ ! -f log/cleanup-toolchain-2-tools ]; then
897 if [ ! -n "$PACKAGE" ]; then
898 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
899 prepareenv
900 buildtoolchain
901 else
902 PACKAGENAME=${PACKAGE%.tar.gz}
903 beautify build_stage "Packaged toolchain compilation"
904 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
905 tar zxf $PACKAGE
906 prepareenv
907 else
908 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
909 fi
910 fi
911 else
912 echo -n "Using installed toolchain" | tee -a $LOGFILE
913 beautify message SKIP
914 prepareenv
915 fi
916
917 beautify build_start
918 beautify build_stage "Building LFS"
919 buildbase
920
921 beautify build_stage "Building IPFire"
922 buildipfire
923
924 beautify build_stage "Building installer"
925 buildinstaller
926
927 beautify build_stage "Building packages"
928 buildpackages
929
930 beautify build_stage "Checking Logfiles for new Files"
931
932 cd $BASEDIR
933 tools/checknewlog.pl
934 cd $PWD
935
936 beautify build_end
937 ;;
938 shell)
939 # enter a shell inside LFS chroot
940 # may be used to changed kernel settings
941 prepareenv
942 entershell
943 ;;
944 clean)
945 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
946 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
947 $LOSETUP -d $i 2>/dev/null
948 done
949 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
950 umount $i
951 done
952 stdumount
953 for i in `seq 0 7`; do
954 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
955 umount /dev/loop${i} 2>/dev/null;
956 losetup -d /dev/loop${i} 2>/dev/null;
957 fi;
958 done
959 rm -rf $BASEDIR/build
960 rm -rf $BASEDIR/cdrom
961 rm -rf $BASEDIR/packages
962 rm -rf $BASEDIR/log
963 if [ -h /tools ]; then
964 rm -f /tools
965 fi
966 rm -f $BASEDIR/ipfire-*
967 beautify message DONE
968 ;;
969 downloadsrc)
970 if [ ! -d $BASEDIR/cache ]; then
971 mkdir $BASEDIR/cache
972 fi
973 mkdir -p $BASEDIR/log
974 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
975 FINISHED=0
976 cd $BASEDIR/lfs
977 for c in `seq $MAX_RETRIES`; do
978 if (( FINISHED==1 )); then
979 break
980 fi
981 FINISHED=1
982 cd $BASEDIR/lfs
983 for i in *; do
984 if [ -f "$i" -a "$i" != "Config" ]; then
985 lfsmakecommoncheck ${i} || continue
986
987 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
988 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
989 if [ $? -ne 0 ]; then
990 beautify message FAIL
991 FINISHED=0
992 else
993 if [ $c -eq 1 ]; then
994 beautify message DONE
995 fi
996 fi
997 fi
998 done
999 done
1000 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1001 ERROR=0
1002 for i in *; do
1003 if [ -f "$i" -a "$i" != "Config" ]; then
1004 lfsmakecommoncheck ${i} > /dev/null || continue
1005 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1006 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1007 if [ $? -ne 0 ]; then
1008 echo -ne "MD5 difference in lfs/$i"
1009 beautify message FAIL
1010 ERROR=1
1011 fi
1012 fi
1013 done
1014 if [ $ERROR -eq 0 ]; then
1015 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1016 beautify message DONE
1017 else
1018 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1019 beautify message FAIL
1020 fi
1021 cd - >/dev/null 2>&1
1022 ;;
1023 toolchain)
1024 clear
1025 prepareenv
1026 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1027 buildtoolchain
1028 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1029 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1030 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1031 build/{bin,etc,usr/bin,usr/local} \
1032 build/tools/{bin,etc,*-linux-gnu*,include,lib,libexec,sbin,share,var} \
1033 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