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