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