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