]> git.ipfire.org Git - ipfire-2.x.git/blob - make.sh
start core55.
[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="55" # Core Level (Filename)
29 PAKFIRE_CORE="54" # 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 fw_ath9k_htc
368 ipfiremake u-boot
369
370 # The xen and PAE kernels are only available for x86
371 if [ "${MACHINE_TYPE}" != "arm" ]; then
372 ipfiremake linux KCFG="-xen"
373 ipfiremake kqemu KCFG="-xen"
374 ipfiremake v4l-dvb KCFG="-xen"
375 ipfiremake madwifi KCFG="-xen"
376 ipfiremake mISDN KCFG="-xen"
377 ipfiremake dahdi KCFG="-xen" KMOD=1
378 ipfiremake cryptodev KCFG="-xen"
379 ipfiremake compat-wireless KCFG="-xen"
380 ipfiremake r8169 KCFG="-xen"
381 ipfiremake r8168 KCFG="-xen"
382 ipfiremake r8101 KCFG="-xen"
383 ipfiremake e1000 KCFG="-xen"
384 ipfiremake e1000e KCFG="-xen"
385 ipfiremake igb KCFG="-xen"
386 ipfiremake linux KCFG="-pae"
387 ipfiremake kqemu KCFG="-pae"
388 ipfiremake kvm-kmod KCFG="-pae"
389 ipfiremake v4l-dvb KCFG="-pae"
390 ipfiremake madwifi KCFG="-pae"
391 ipfiremake alsa KCFG="-pae" KMOD=1
392 ipfiremake mISDN KCFG="-pae"
393 ipfiremake dahdi KCFG="-pae" KMOD=1
394 ipfiremake cryptodev KCFG="-pae"
395 ipfiremake compat-wireless KCFG="-pae"
396 # ipfiremake r8169 KCFG="-pae"
397 # ipfiremake r8168 KCFG="-pae"
398 # ipfiremake r8101 KCFG="-pae"
399 ipfiremake e1000 KCFG="-pae"
400 ipfiremake e1000e KCFG="-pae"
401 ipfiremake igb KCFG="-pae"
402 ipfiremake linux KCFG=""
403 ipfiremake v4l-dvb KCFG=""
404 ipfiremake kqemu KCFG=""
405 ipfiremake kvm-kmod KCFG=""
406 ipfiremake madwifi KCFG=""
407 ipfiremake alsa KCFG="" KMOD=1
408 ipfiremake mISDN KCFG=""
409 ipfiremake dahdi KCFG="" KMOD=1
410 ipfiremake cryptodev KCFG=""
411 ipfiremake compat-wireless KCFG=""
412 # ipfiremake r8169 KCFG=""
413 # ipfiremake r8168 KCFG=""
414 # ipfiremake r8101 KCFG=""
415 ipfiremake e1000 KCFG=""
416 ipfiremake e1000e KCFG=""
417 ipfiremake igb KCFG=""
418 else
419 # arm-versatile kernel build
420 ipfiremake linux KCFG="-versatile"
421 ipfiremake v4l-dvb KCFG="-versatile"
422 ipfiremake kqemu KCFG="-versatile"
423 ipfiremake kvm-kmod KCFG="-versatile"
424 ipfiremake madwifi KCFG="-versatile"
425 ipfiremake mISDN KCFG="-versatile"
426 ipfiremake dahdi KCFG="-versatile" KMOD=1
427 ipfiremake cryptodev KCFG="-versatile"
428 ipfiremake compat-wireless KCFG="-versatile"
429 # ipfiremake r8169 KCFG="-versatile"
430 # ipfiremake r8168 KCFG="-versatile"
431 # ipfiremake r8101 KCFG="-versatile"
432 ipfiremake e1000 KCFG="-versatile"
433 ipfiremake e1000e KCFG="-versatile"
434 ipfiremake igb KCFG="-versatile"
435 # arm-kirkwood kernel build
436 ipfiremake linux KCFG="-kirkwood"
437 ipfiremake v4l-dvb KCFG="-kirkwood"
438 ipfiremake kqemu KCFG="-kirkwood"
439 ipfiremake kvm-kmod KCFG="-kirkwood"
440 ipfiremake madwifi KCFG="-kirkwood"
441 ipfiremake mISDN KCFG="-kirkwood"
442 ipfiremake dahdi KCFG="-kirkwood" KMOD=1
443 ipfiremake cryptodev KCFG="-kirkwood"
444 ipfiremake compat-wireless KCFG="-kirkwood"
445 # ipfiremake r8169 KCFG="-kirkwood"
446 # ipfiremake r8168 KCFG="-kirkwood"
447 # ipfiremake r8101 KCFG="-kirkwood"
448 ipfiremake e1000 KCFG="-kirkwood"
449 ipfiremake e1000e KCFG="-kirkwood"
450 ipfiremake igb KCFG="-kirkwood"
451 fi
452 ipfiremake pkg-config
453 ipfiremake linux-atm
454 ipfiremake cpio
455 ipfiremake dracut
456 ipfiremake expat
457 ipfiremake gdbm
458 ipfiremake gmp
459 ipfiremake pam
460 ipfiremake openssl
461 ipfiremake curl
462 ipfiremake tcl
463 ipfiremake sqlite
464 ipfiremake python
465 ipfiremake fireinfo
466 ipfiremake libnet
467 ipfiremake libnl
468 ipfiremake libidn
469 ipfiremake libjpeg
470 ipfiremake libpng
471 ipfiremake libtiff
472 ipfiremake libart
473 ipfiremake freetype
474 ipfiremake gd
475 ipfiremake popt
476 ipfiremake pcre
477 ipfiremake slang
478 ipfiremake newt
479 ipfiremake attr
480 ipfiremake acl
481 ipfiremake libcap
482 ipfiremake pciutils
483 ipfiremake usbutils
484 ipfiremake libxml2
485 ipfiremake libxslt
486 ipfiremake BerkeleyDB
487 ipfiremake mysql
488 ipfiremake cyrus-sasl
489 ipfiremake openldap
490 ipfiremake apache2
491 ipfiremake php
492 ipfiremake apache2 PASS=C
493 ipfiremake arping
494 ipfiremake beep
495 ipfiremake bind
496 ipfiremake dvdrtools
497 ipfiremake dnsmasq
498 ipfiremake dosfstools
499 ipfiremake reiserfsprogs
500 ipfiremake xfsprogs
501 ipfiremake sysfsutils
502 ipfiremake fuse
503 ipfiremake ntfs-3g
504 ipfiremake ethtool
505 ipfiremake ez-ipupdate
506 ipfiremake fcron
507 ipfiremake perl-GD
508 ipfiremake GD-Graph
509 ipfiremake GD-TextUtil
510 ipfiremake gnupg
511 ipfiremake hdparm
512 ipfiremake sdparm
513 ipfiremake mtools
514 ipfiremake initscripts
515 ipfiremake whatmask
516 ipfiremake iptables
517 ipfiremake libupnp
518 ipfiremake ipaddr
519 ipfiremake iptstate
520 ipfiremake iputils
521 ipfiremake l7-protocols
522 ipfiremake mISDNuser
523 ipfiremake capi4k-utils
524 ipfiremake hwdata
525 ipfiremake kudzu
526 ipfiremake logrotate
527 ipfiremake logwatch
528 ipfiremake misc-progs
529 ipfiremake nano
530 ipfiremake nasm
531 ipfiremake URI
532 ipfiremake HTML-Tagset
533 ipfiremake HTML-Parser
534 ipfiremake Compress-Zlib
535 ipfiremake Digest
536 ipfiremake Digest-SHA1
537 ipfiremake Digest-HMAC
538 ipfiremake libwww-perl
539 ipfiremake Net-DNS
540 ipfiremake Net-IPv4Addr
541 ipfiremake Net_SSLeay
542 ipfiremake IO-Stringy
543 ipfiremake Unix-Syslog
544 ipfiremake Mail-Tools
545 ipfiremake MIME-Tools
546 ipfiremake Net-Server
547 ipfiremake Convert-TNEF
548 ipfiremake Convert-UUlib
549 ipfiremake Archive-Tar
550 ipfiremake Archive-Zip
551 ipfiremake Text-Tabs+Wrap
552 ipfiremake Locale-Country
553 ipfiremake XML-Parser
554 ipfiremake python-setuptools
555 ipfiremake python-clientform
556 ipfiremake python-mechanize
557 ipfiremake python-feedparser
558 ipfiremake python-rssdler
559 ipfiremake glib
560 ipfiremake GeoIP
561 ipfiremake fwhits
562 ipfiremake noip_updater
563 ipfiremake ntp
564 ipfiremake openssh
565 ipfiremake rrdtool
566 ipfiremake setserial
567 ipfiremake setup
568 ipfiremake libdnet
569 ipfiremake daq
570 ipfiremake snort
571 ipfiremake oinkmaster
572 ipfiremake squid
573 ipfiremake squidguard
574 ipfiremake calamaris
575 ipfiremake tcpdump
576 ipfiremake traceroute
577 ipfiremake vlan
578 ipfiremake wireless
579 ipfiremake libsafe
580 ipfiremake pakfire
581 ipfiremake spandsp
582 ipfiremake lzo
583 ipfiremake openvpn
584 ipfiremake pammysql
585 ipfiremake cups
586 ipfiremake ghostscript
587 ipfiremake foomatic
588 ipfiremake hplip
589 ipfiremake samba
590 ipfiremake sudo
591 ipfiremake mc
592 ipfiremake wget
593 ipfiremake bridge-utils
594 ipfiremake screen
595 ipfiremake hddtemp
596 ipfiremake smartmontools
597 ipfiremake htop
598 ipfiremake postfix
599 ipfiremake fetchmail
600 ipfiremake cyrus-imapd
601 ipfiremake openmailadmin
602 ipfiremake clamav
603 ipfiremake spamassassin
604 ipfiremake amavisd
605 ipfiremake alsa
606 ipfiremake mpfire
607 ipfiremake guardian
608 ipfiremake libid3tag
609 ipfiremake libmad
610 ipfiremake libogg
611 ipfiremake libvorbis
612 ipfiremake libdvbpsi
613 ipfiremake lame
614 ipfiremake sox
615 ipfiremake libshout
616 ipfiremake xvid
617 ipfiremake libmpeg2
618 ipfiremake cmake
619 ipfiremake gnump3d
620 ipfiremake libsigc++
621 ipfiremake applejuice
622 ipfiremake libtorrent
623 ipfiremake rtorrent
624 ipfiremake ipfireseeder
625 ipfiremake rsync
626 ipfiremake tcpwrapper
627 ipfiremake libevent
628 ipfiremake libevent2
629 ipfiremake portmap
630 ipfiremake nfs
631 ipfiremake nmap
632 ipfiremake ncftp
633 ipfiremake etherwake
634 ipfiremake bwm-ng
635 ipfiremake tripwire
636 ipfiremake sysstat
637 ipfiremake vsftpd
638 ipfiremake strongswan
639 ipfiremake lsof
640 ipfiremake centerim
641 ipfiremake br2684ctl
642 ipfiremake pcmciautils
643 ipfiremake lm_sensors
644 ipfiremake liboping
645 ipfiremake collectd
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 ipfiremake dpfhack
745 ipfiremake lcd4linux
746 echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
747 cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
748 echo >> $BASEDIR/build/var/ipfire/firebuild
749 git log -1 >> $BASEDIR/build/var/ipfire/firebuild
750 echo >> $BASEDIR/build/var/ipfire/firebuild
751 git status >> $BASEDIR/build/var/ipfire/firebuild
752 echo >> $BASEDIR/build/var/ipfire/firebuild
753 cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
754 echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
755 if [ "$GIT_BRANCH" = "master" -o "$GIT_BRANCH" = "next" ]; then
756 echo "$NAME $VERSION ($MACHINE) - Development Build: $GIT_LASTCOMMIT" > $BASEDIR/build/etc/system-release
757 else
758 echo "$NAME $VERSION ($MACHINE) - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
759 fi
760 }
761
762 buildinstaller() {
763 # Run installer scripts one by one
764 LOGFILE="$BASEDIR/log/_build.installer.log"
765 export LOGFILE
766 ipfiremake as86
767 ipfiremake mbr
768 ipfiremake memtest
769 ipfiremake installer
770 cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
771 installmake strip
772 ipfiremake initrd
773 }
774
775 buildpackages() {
776 LOGFILE="$BASEDIR/log/_build.packages.log"
777 export LOGFILE
778 echo "... see detailed log in _build.*.log files" >> $LOGFILE
779
780
781 # Generating list of packages used
782 echo -n "Generating packages list from logs" | tee -a $LOGFILE
783 rm -f $BASEDIR/doc/packages-list
784 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
785 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
786 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
787 fi
788 done
789 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
790 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
791 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
792 rm -f $BASEDIR/doc/packages-list
793 # packages-list.txt is ready to be displayed for wiki page
794 beautify message DONE
795
796 # Update changelog
797 cd $BASEDIR
798 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
799 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
800 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
801
802 # Create images for install
803 ipfiremake cdrom
804
805 # Check if there is a loop device for building in virtual environments
806 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
807 if [ "${MACHINE_TYPE}" != "arm" ]; then
808 ipfiremake usb-stick
809 fi
810 ipfiremake flash-images
811 fi
812
813 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
814
815 ipfirepackages
816
817 # Check if there is a loop device for building in virtual environments
818 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]) && [ "${MACHINE_TYPE}" != "arm" ]; then
819 cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
820 cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
821 ipfiremake xen-image
822 rm -rf $LFS/install/packages/linux-xen-*.ipfire
823 rm -rf $LFS/install/packages/meta-linux-xen
824 fi
825 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
826
827 cd $BASEDIR
828 for i in `ls *.bz2 *.img.gz *.iso`; do
829 md5sum $i > $i.md5
830 done
831 cd $PWD
832
833 # Cleanup
834 stdumount
835 rm -rf $BASEDIR/build/tmp/*
836
837 # Generating total list of files
838 echo -n "Generating files list from logs" | tee -a $LOGFILE
839 rm -f $BASEDIR/log/FILES
840 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
841 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
842 echo "##" >>$BASEDIR/log/FILES
843 echo "## `basename $i`" >>$BASEDIR/log/FILES
844 echo "##" >>$BASEDIR/log/FILES
845 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
846 fi
847 done
848 beautify message DONE
849
850 cd $PWD
851 }
852
853 ipfirepackages() {
854 ipfiremake core-updates
855
856 local i
857 for i in $(find $BASEDIR/config/rootfiles/packages{${machine},} -maxdepth 1 -type f); do
858 i=$(basename ${i})
859 if [ -e $BASEDIR/lfs/$i ]; then
860 ipfiredist $i
861 else
862 echo -n $i
863 beautify message SKIP
864 fi
865 done
866 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
867 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
868 rm -rf $BASEDIR/build/install/packages/*
869 }
870
871 # See what we're supposed to do
872 case "$1" in
873 build)
874 clear
875 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
876 #only restore on a clean disk
877 if [ ! -f log/cleanup-toolchain-2-tools ]; then
878 if [ ! -n "$PACKAGE" ]; then
879 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
880 prepareenv
881 buildtoolchain
882 else
883 PACKAGENAME=${PACKAGE%.tar.gz}
884 beautify build_stage "Packaged toolchain compilation"
885 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
886 tar zxf $PACKAGE
887 prepareenv
888 else
889 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
890 fi
891 fi
892 else
893 echo -n "Using installed toolchain" | tee -a $LOGFILE
894 beautify message SKIP
895 prepareenv
896 fi
897
898 beautify build_start
899 beautify build_stage "Building LFS"
900 buildbase
901
902 beautify build_stage "Building IPFire"
903 buildipfire
904
905 beautify build_stage "Building installer"
906 buildinstaller
907
908 beautify build_stage "Building packages"
909 buildpackages
910
911 beautify build_stage "Checking Logfiles for new Files"
912
913 cd $BASEDIR
914 tools/checknewlog.pl
915 cd $PWD
916
917 beautify build_end
918 ;;
919 shell)
920 # enter a shell inside LFS chroot
921 # may be used to changed kernel settings
922 prepareenv
923 entershell
924 ;;
925 clean)
926 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
927 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
928 $LOSETUP -d $i 2>/dev/null
929 done
930 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
931 umount $i
932 done
933 stdumount
934 for i in `seq 0 7`; do
935 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
936 umount /dev/loop${i} 2>/dev/null;
937 losetup -d /dev/loop${i} 2>/dev/null;
938 fi;
939 done
940 rm -rf $BASEDIR/build
941 rm -rf $BASEDIR/cdrom
942 rm -rf $BASEDIR/packages
943 rm -rf $BASEDIR/log
944 if [ -h /tools ]; then
945 rm -f /tools
946 fi
947 rm -f $BASEDIR/ipfire-*
948 beautify message DONE
949 ;;
950 downloadsrc)
951 if [ ! -d $BASEDIR/cache ]; then
952 mkdir $BASEDIR/cache
953 fi
954 mkdir -p $BASEDIR/log
955 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
956 FINISHED=0
957 cd $BASEDIR/lfs
958 for c in `seq $MAX_RETRIES`; do
959 if (( FINISHED==1 )); then
960 break
961 fi
962 FINISHED=1
963 cd $BASEDIR/lfs
964 for i in *; do
965 if [ -f "$i" -a "$i" != "Config" ]; then
966 lfsmakecommoncheck ${i} || continue
967
968 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
969 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
970 if [ $? -ne 0 ]; then
971 beautify message FAIL
972 FINISHED=0
973 else
974 if [ $c -eq 1 ]; then
975 beautify message DONE
976 fi
977 fi
978 fi
979 done
980 done
981 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
982 ERROR=0
983 for i in *; do
984 if [ -f "$i" -a "$i" != "Config" ]; then
985 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
986 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
987 if [ $? -ne 0 ]; then
988 echo -ne "MD5 difference in lfs/$i"
989 beautify message FAIL
990 ERROR=1
991 fi
992 fi
993 done
994 if [ $ERROR -eq 0 ]; then
995 echo -ne "${BOLD}all files md5sum match${NORMAL}"
996 beautify message DONE
997 else
998 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
999 beautify message FAIL
1000 fi
1001 cd - >/dev/null 2>&1
1002 ;;
1003 toolchain)
1004 clear
1005 prepareenv
1006 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1007 buildtoolchain
1008 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1009 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1010 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1011 build/{bin,etc,usr/bin,usr/local} \
1012 build/tools/{bin,etc,*-linux-gnu*,include,lib,libexec,sbin,share,var} \
1013 log >> $LOGFILE
1014 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1015 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1016 stdumount
1017 ;;
1018 gettoolchain)
1019 # arbitrary name to be updated in case of new toolchain package upload
1020 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1021 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1022 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1023 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1024 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1025 cd $BASEDIR/cache/toolchains
1026 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1027 if [ $? -ne 0 ]; then
1028 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1029 else
1030 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1031 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1032 else
1033 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1034 fi
1035 fi
1036 else
1037 echo "Toolchain is already downloaded. Exiting..."
1038 fi
1039 ;;
1040 othersrc)
1041 prepareenv
1042 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1043 chroot $LFS /tools/bin/env -i HOME=/root \
1044 TERM=$TERM PS1='\u:\w\$ ' \
1045 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1046 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1047 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1048 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1049 if [ $? -eq "0" ]; then
1050 beautify message DONE
1051 else
1052 beautify message FAIL
1053 fi
1054 stdumount
1055 ;;
1056 uploadsrc)
1057 PWD=`pwd`
1058 if [ -z $IPFIRE_USER ]; then
1059 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1060 beautify message FAIL
1061 exit 1
1062 fi
1063
1064 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1065 REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1066
1067 cd $BASEDIR/cache/
1068 for file in $(ls -1 --ignore=toolchains); do
1069 grep -q "$file" <<<$REMOTE_FILES && continue
1070 NEW_FILES="$NEW_FILES $file"
1071 done
1072 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1073 cd $BASEDIR
1074 cd $PWD
1075 exit 0
1076 ;;
1077 lang)
1078 update_langs
1079 ;;
1080 *)
1081 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1082 cat doc/make.sh-usage
1083 ;;
1084 esac