]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - make.sh
lcd4linux: update to svn1158 and add hacked digital-photo-frame driver.
[people/teissler/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 teamspeak
646 ipfiremake elinks
647 ipfiremake igmpproxy
648 ipfiremake fbset
649 ipfiremake sdl
650 ipfiremake qemu
651 ipfiremake qemu-kqemu
652 ipfiremake sane
653 ipfiremake netpbm
654 ipfiremake phpSANE
655 ipfiremake tunctl
656 ipfiremake nagios
657 ipfiremake nagios_nrpe
658 ipfiremake ebtables
659 ipfiremake fontconfig
660 ipfiremake freefont
661 ipfiremake directfb
662 ipfiremake dfb++
663 ipfiremake faad2
664 ipfiremake ffmpeg
665 ipfiremake videolan
666 ipfiremake vdr
667 ipfiremake w_scan
668 ipfiremake icecast
669 ipfiremake icegenerator
670 ipfiremake mpd
671 ipfiremake libmpdclient
672 ipfiremake mpc
673 ipfiremake git
674 ipfiremake squidclamav
675 ipfiremake bc
676 ipfiremake vnstat
677 ipfiremake vnstati
678 ipfiremake iw
679 ipfiremake wpa_supplicant
680 ipfiremake hostapd
681 ipfiremake urlgrabber
682 ipfiremake syslinux
683 ipfiremake tftpd
684 ipfiremake cpufrequtils
685 ipfiremake dbus
686 ipfiremake bluetooth
687 ipfiremake gutenprint
688 ipfiremake apcupsd
689 ipfiremake iperf
690 ipfiremake netcat
691 ipfiremake 7zip
692 ipfiremake lynis
693 ipfiremake splix
694 ipfiremake streamripper
695 ipfiremake sshfs
696 ipfiremake taglib
697 ipfiremake mediatomb
698 ipfiremake sslh
699 ipfiremake perl-gettext
700 ipfiremake vdradmin
701 ipfiremake miau
702 ipfiremake netsnmpd
703 ipfiremake perl-DBI
704 ipfiremake perl-DBD-mysql
705 ipfiremake cacti
706 ipfiremake icecc
707 ipfiremake openvmtools
708 ipfiremake nagiosql
709 ipfiremake iftop
710 ipfiremake motion
711 ipfiremake joe
712 ipfiremake nut
713 ipfiremake watchdog
714 ipfiremake libpri
715 ipfiremake dahdi
716 ipfiremake asterisk
717 ipfiremake lcr
718 ipfiremake usb_modeswitch
719 ipfiremake usb_modeswitch_data
720 ipfiremake zerofree
721 ipfiremake mdadm
722 ipfiremake eject
723 ipfiremake pound
724 ipfiremake minicom
725 ipfiremake ddrescue
726 ipfiremake imspector
727 ipfiremake miniupnpd
728 ipfiremake client175
729 ipfiremake powertop
730 ipfiremake parted
731 ipfiremake swig
732 ipfiremake python-m2crypto
733 ipfiremake wireless-regdb
734 ipfiremake crda
735 ipfiremake libsolv
736 ipfiremake python-distutils-extra
737 ipfiremake python-lzma
738 ipfiremake python-progressbar
739 ipfiremake python-xattr
740 ipfiremake intltool
741 ipfiremake pakfire3-deps
742 ipfiremake transmission
743 ipfiremake dpfhack
744 ipfiremake lcd4linux
745 echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
746 cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
747 echo >> $BASEDIR/build/var/ipfire/firebuild
748 git log -1 >> $BASEDIR/build/var/ipfire/firebuild
749 echo >> $BASEDIR/build/var/ipfire/firebuild
750 git status >> $BASEDIR/build/var/ipfire/firebuild
751 echo >> $BASEDIR/build/var/ipfire/firebuild
752 cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
753 echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
754 if [ "$GIT_BRANCH" = "next" ]; then
755 echo "$NAME $VERSION ($MACHINE) - Development Build: $GIT_LASTCOMMIT" > $BASEDIR/build/etc/system-release
756 else
757 echo "$NAME $VERSION ($MACHINE) - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
758 fi
759 }
760
761 buildinstaller() {
762 # Run installer scripts one by one
763 LOGFILE="$BASEDIR/log/_build.installer.log"
764 export LOGFILE
765 ipfiremake as86
766 ipfiremake mbr
767 ipfiremake memtest
768 ipfiremake installer
769 cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
770 installmake strip
771 ipfiremake initrd
772 }
773
774 buildpackages() {
775 LOGFILE="$BASEDIR/log/_build.packages.log"
776 export LOGFILE
777 echo "... see detailed log in _build.*.log files" >> $LOGFILE
778
779
780 # Generating list of packages used
781 echo -n "Generating packages list from logs" | tee -a $LOGFILE
782 rm -f $BASEDIR/doc/packages-list
783 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
784 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
785 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
786 fi
787 done
788 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
789 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
790 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
791 rm -f $BASEDIR/doc/packages-list
792 # packages-list.txt is ready to be displayed for wiki page
793 beautify message DONE
794
795 # Update changelog
796 cd $BASEDIR
797 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
798 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
799 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
800
801 # Create images for install
802 ipfiremake cdrom
803
804 # Check if there is a loop device for building in virtual environments
805 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
806 if [ "${MACHINE_TYPE}" != "arm" ]; then
807 ipfiremake usb-stick
808 fi
809 ipfiremake flash-images
810 fi
811
812 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
813
814 ipfirepackages
815
816 # Check if there is a loop device for building in virtual environments
817 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]) && [ "${MACHINE_TYPE}" != "arm" ]; then
818 cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
819 cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
820 ipfiremake xen-image
821 rm -rf $LFS/install/packages/linux-xen-*.ipfire
822 rm -rf $LFS/install/packages/meta-linux-xen
823 fi
824 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
825
826 cd $BASEDIR
827 for i in `ls *.bz2 *.img.gz *.iso`; do
828 md5sum $i > $i.md5
829 done
830 cd $PWD
831
832 # Cleanup
833 stdumount
834 rm -rf $BASEDIR/build/tmp/*
835
836 # Generating total list of files
837 echo -n "Generating files list from logs" | tee -a $LOGFILE
838 rm -f $BASEDIR/log/FILES
839 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
840 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
841 echo "##" >>$BASEDIR/log/FILES
842 echo "## `basename $i`" >>$BASEDIR/log/FILES
843 echo "##" >>$BASEDIR/log/FILES
844 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
845 fi
846 done
847 beautify message DONE
848
849 cd $PWD
850 }
851
852 ipfirepackages() {
853 ipfiremake core-updates
854
855 local i
856 for i in $(find $BASEDIR/config/rootfiles/packages{${machine},} -maxdepth 1 -type f); do
857 i=$(basename ${i})
858 if [ -e $BASEDIR/lfs/$i ]; then
859 ipfiredist $i
860 else
861 echo -n $i
862 beautify message SKIP
863 fi
864 done
865 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
866 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
867 rm -rf $BASEDIR/build/install/packages/*
868 }
869
870 # See what we're supposed to do
871 case "$1" in
872 build)
873 clear
874 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
875 #only restore on a clean disk
876 if [ ! -f log/cleanup-toolchain-2-tools ]; then
877 if [ ! -n "$PACKAGE" ]; then
878 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
879 prepareenv
880 buildtoolchain
881 else
882 PACKAGENAME=${PACKAGE%.tar.gz}
883 beautify build_stage "Packaged toolchain compilation"
884 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
885 tar zxf $PACKAGE
886 prepareenv
887 else
888 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
889 fi
890 fi
891 else
892 echo -n "Using installed toolchain" | tee -a $LOGFILE
893 beautify message SKIP
894 prepareenv
895 fi
896
897 beautify build_start
898 beautify build_stage "Building LFS"
899 buildbase
900
901 beautify build_stage "Building IPFire"
902 buildipfire
903
904 beautify build_stage "Building installer"
905 buildinstaller
906
907 beautify build_stage "Building packages"
908 buildpackages
909
910 beautify build_stage "Checking Logfiles for new Files"
911
912 cd $BASEDIR
913 tools/checknewlog.pl
914 cd $PWD
915
916 beautify build_end
917 ;;
918 shell)
919 # enter a shell inside LFS chroot
920 # may be used to changed kernel settings
921 prepareenv
922 entershell
923 ;;
924 clean)
925 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
926 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
927 $LOSETUP -d $i 2>/dev/null
928 done
929 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
930 umount $i
931 done
932 stdumount
933 for i in `seq 0 7`; do
934 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
935 umount /dev/loop${i} 2>/dev/null;
936 losetup -d /dev/loop${i} 2>/dev/null;
937 fi;
938 done
939 rm -rf $BASEDIR/build
940 rm -rf $BASEDIR/cdrom
941 rm -rf $BASEDIR/packages
942 rm -rf $BASEDIR/log
943 if [ -h /tools ]; then
944 rm -f /tools
945 fi
946 rm -f $BASEDIR/ipfire-*
947 beautify message DONE
948 ;;
949 downloadsrc)
950 if [ ! -d $BASEDIR/cache ]; then
951 mkdir $BASEDIR/cache
952 fi
953 mkdir -p $BASEDIR/log
954 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
955 FINISHED=0
956 cd $BASEDIR/lfs
957 for c in `seq $MAX_RETRIES`; do
958 if (( FINISHED==1 )); then
959 break
960 fi
961 FINISHED=1
962 cd $BASEDIR/lfs
963 for i in *; do
964 if [ -f "$i" -a "$i" != "Config" ]; then
965 lfsmakecommoncheck ${i} || continue
966
967 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
968 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
969 if [ $? -ne 0 ]; then
970 beautify message FAIL
971 FINISHED=0
972 else
973 if [ $c -eq 1 ]; then
974 beautify message DONE
975 fi
976 fi
977 fi
978 done
979 done
980 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
981 ERROR=0
982 for i in *; do
983 if [ -f "$i" -a "$i" != "Config" ]; then
984 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
985 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
986 if [ $? -ne 0 ]; then
987 echo -ne "MD5 difference in lfs/$i"
988 beautify message FAIL
989 ERROR=1
990 fi
991 fi
992 done
993 if [ $ERROR -eq 0 ]; then
994 echo -ne "${BOLD}all files md5sum match${NORMAL}"
995 beautify message DONE
996 else
997 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
998 beautify message FAIL
999 fi
1000 cd - >/dev/null 2>&1
1001 ;;
1002 toolchain)
1003 clear
1004 prepareenv
1005 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1006 buildtoolchain
1007 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1008 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1009 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1010 build/{bin,etc,usr/bin,usr/local} \
1011 build/tools/{bin,etc,*-linux-gnu*,include,lib,libexec,sbin,share,var} \
1012 log >> $LOGFILE
1013 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1014 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1015 stdumount
1016 ;;
1017 gettoolchain)
1018 # arbitrary name to be updated in case of new toolchain package upload
1019 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1020 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1021 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1022 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1023 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1024 cd $BASEDIR/cache/toolchains
1025 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1026 if [ $? -ne 0 ]; then
1027 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1028 else
1029 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1030 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1031 else
1032 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1033 fi
1034 fi
1035 else
1036 echo "Toolchain is already downloaded. Exiting..."
1037 fi
1038 ;;
1039 othersrc)
1040 prepareenv
1041 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1042 chroot $LFS /tools/bin/env -i HOME=/root \
1043 TERM=$TERM PS1='\u:\w\$ ' \
1044 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1045 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1046 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1047 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1048 if [ $? -eq "0" ]; then
1049 beautify message DONE
1050 else
1051 beautify message FAIL
1052 fi
1053 stdumount
1054 ;;
1055 uploadsrc)
1056 PWD=`pwd`
1057 if [ -z $IPFIRE_USER ]; then
1058 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1059 beautify message FAIL
1060 exit 1
1061 fi
1062
1063 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1064 REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1065
1066 cd $BASEDIR/cache/
1067 for file in $(ls -1 --ignore=toolchains); do
1068 grep -q "$file" <<<$REMOTE_FILES && continue
1069 NEW_FILES="$NEW_FILES $file"
1070 done
1071 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1072 cd $BASEDIR
1073 cd $PWD
1074 exit 0
1075 ;;
1076 lang)
1077 update_langs
1078 ;;
1079 *)
1080 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1081 cat doc/make.sh-usage
1082 ;;
1083 esac