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