Remove non working SSH1 checkbox.
[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.6" # Version number
28 CORE="37" # Core Level (Filename)
29 PAKFIRE_CORE="36" # 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 xz
344 ipfiremake linux XEN=1
345 ipfiremake kqemu XEN=1
346 #ipfiremake kvm-kmod XEN=1
347 ipfiremake v4l-dvb XEN=1
348 ipfiremake madwifi XEN=1
349 #ipfiremake alsa XEN=1 KMOD=1
350 ipfiremake dahdi XEN=1 KMOD=1
351 ipfiremake openswan XEN=1 KMOD=1
352 #ipfiremake mISDN XEN=1
353 #ipfiremake compat-wireless XEN=1
354 ipfiremake cryptodev XEN=1
355 ipfiremake linux
356 ipfiremake kqemu
357 #ipfiremake kvm-kmod
358 ipfiremake v4l-dvb
359 ipfiremake madwifi
360 ipfiremake alsa KMOD=1
361 ipfiremake dahdi KMOD=1
362 ipfiremake openswan KMOD=1
363 #ipfiremake mISDN
364 #ipfiremake compat-wireless
365 ipfiremake cryptodev
366 ipfiremake pkg-config
367 ipfiremake linux-atm
368 ipfiremake cpio
369 ipfiremake klibc
370 ipfiremake mkinitcpio
371 ipfiremake udev KLIBC=1
372 ipfiremake expat
373 ipfiremake gdbm
374 ipfiremake gmp
375 ipfiremake pam
376 ipfiremake openssl
377 ipfiremake curl
378 ipfiremake python
379 ipfiremake libnet
380 ipfiremake libnl
381 ipfiremake libidn
382 ipfiremake libjpeg
383 ipfiremake libpng
384 ipfiremake libtiff
385 ipfiremake libart
386 ipfiremake freetype
387 ipfiremake gd
388 ipfiremake popt
389 ipfiremake pcre
390 ipfiremake slang
391 ipfiremake newt
392 ipfiremake libcap
393 ipfiremake pciutils
394 ipfiremake usbutils
395 ipfiremake libxml2
396 ipfiremake libxslt
397 ipfiremake BerkeleyDB
398 ipfiremake mysql
399 ipfiremake cyrus-sasl
400 ipfiremake openldap
401 ipfiremake apache2
402 ipfiremake php
403 ipfiremake apache2 PASS=C
404 ipfiremake arping
405 ipfiremake beep
406 ipfiremake bind
407 ipfiremake cdrtools
408 ipfiremake dnsmasq
409 ipfiremake dosfstools
410 ipfiremake squashfstools
411 ipfiremake reiserfsprogs
412 ipfiremake xfsprogs
413 ipfiremake sysfsutils
414 ipfiremake fuse
415 ipfiremake ntfs-3g
416 ipfiremake ethtool
417 ipfiremake ez-ipupdate
418 ipfiremake fcron
419 ipfiremake perl-GD
420 ipfiremake GD-Graph
421 ipfiremake GD-TextUtil
422 ipfiremake gnupg
423 ipfiremake hdparm
424 ipfiremake sdparm
425 ipfiremake mtools
426 ipfiremake initscripts
427 ipfiremake whatmask
428 ipfiremake iptables
429 ipfiremake libupnp
430 ipfiremake ipaddr
431 ipfiremake iptstate
432 ipfiremake iputils
433 ipfiremake l7-protocols
434 ipfiremake mISDNuser
435 ipfiremake capi4k-utils
436 ipfiremake hwdata
437 ipfiremake kudzu
438 ipfiremake logrotate
439 ipfiremake logwatch
440 ipfiremake misc-progs
441 ipfiremake nano
442 ipfiremake nasm
443 ipfiremake URI
444 ipfiremake HTML-Tagset
445 ipfiremake HTML-Parser
446 ipfiremake Compress-Zlib
447 ipfiremake Digest
448 ipfiremake Digest-SHA1
449 ipfiremake Digest-HMAC
450 ipfiremake libwww-perl
451 ipfiremake Net-DNS
452 ipfiremake Net-IPv4Addr
453 ipfiremake Net_SSLeay
454 ipfiremake IO-Stringy
455 ipfiremake Unix-Syslog
456 ipfiremake Mail-Tools
457 ipfiremake MIME-Tools
458 ipfiremake Net-Server
459 ipfiremake Convert-TNEF
460 ipfiremake Convert-UUlib
461 ipfiremake Archive-Tar
462 ipfiremake Archive-Zip
463 ipfiremake Text-Tabs+Wrap
464 ipfiremake Locale-Country
465 ipfiremake XML-Parser
466 ipfiremake python-setuptools
467 ipfiremake python-clientform
468 ipfiremake python-mechanize
469 ipfiremake python-feedparser
470 ipfiremake python-rssdler
471 ipfiremake glib
472 ipfiremake GeoIP
473 ipfiremake fwhits
474 ipfiremake noip_updater
475 ipfiremake ntp
476 ipfiremake openssh
477 ipfiremake rrdtool
478 ipfiremake setserial
479 ipfiremake setup
480 ipfiremake snort
481 ipfiremake oinkmaster
482 ipfiremake squid
483 ipfiremake squidguard
484 ipfiremake calamaris
485 ipfiremake tcpdump
486 ipfiremake traceroute
487 ipfiremake vlan
488 ipfiremake wireless
489 ipfiremake libsafe
490 ipfiremake pakfire
491 ipfiremake java
492 ipfiremake spandsp
493 ipfiremake lzo
494 ipfiremake openvpn
495 ipfiremake pammysql
496 ipfiremake cups
497 ipfiremake ghostscript
498 ipfiremake foomatic
499 ipfiremake hplip
500 ipfiremake samba
501 ipfiremake sudo
502 ipfiremake mc
503 ipfiremake wget
504 ipfiremake bridge-utils
505 ipfiremake screen
506 ipfiremake hddtemp
507 ipfiremake smartmontools
508 ipfiremake htop
509 ipfiremake postfix
510 ipfiremake fetchmail
511 ipfiremake cyrus-imapd
512 ipfiremake openmailadmin
513 ipfiremake clamav
514 ipfiremake spamassassin
515 ipfiremake amavisd
516 ipfiremake alsa
517 ipfiremake mpfire
518 ipfiremake guardian
519 ipfiremake libid3tag
520 ipfiremake libmad
521 ipfiremake libogg
522 ipfiremake libvorbis
523 ipfiremake libdvbpsi
524 ipfiremake lame
525 ipfiremake sox
526 ipfiremake libshout
527 ipfiremake xvid
528 ipfiremake libmpeg2
529 ipfiremake cmake
530 ipfiremake gnump3d
531 ipfiremake libsigc++
532 ipfiremake applejuice
533 ipfiremake ocaml
534 ipfiremake mldonkey
535 ipfiremake libtorrent
536 ipfiremake rtorrent
537 ipfiremake ipfireseeder
538 ipfiremake rsync
539 ipfiremake tcpwrapper
540 ipfiremake portmap
541 ipfiremake nfs
542 ipfiremake nmap
543 ipfiremake ncftp
544 ipfiremake etherwake
545 ipfiremake bwm-ng
546 ipfiremake tripwire
547 ipfiremake sysstat
548 ipfiremake vsftpd
549 ipfiremake openswan
550 ipfiremake lsof
551 ipfiremake centerim
552 ipfiremake br2684ctl
553 ipfiremake pcmciautils
554 ipfiremake lm_sensors
555 ipfiremake liboping
556 ipfiremake collectd
557 ipfiremake lcd4linux
558 ipfiremake tcptrack
559 ipfiremake teamspeak
560 ipfiremake elinks
561 ipfiremake igmpproxy
562 ipfiremake fbset
563 ipfiremake sdl
564 ipfiremake qemu
565 ipfiremake sane
566 ipfiremake netpbm
567 ipfiremake phpSANE
568 ipfiremake tunctl
569 ipfiremake nagios
570 ipfiremake ebtables
571 ipfiremake fontconfig
572 ipfiremake freefont
573 ipfiremake directfb
574 ipfiremake dfb++
575 ipfiremake faad2
576 ipfiremake ffmpeg
577 ipfiremake videolan
578 ipfiremake vdr
579 ipfiremake w_scan
580 ipfiremake icecast
581 ipfiremake icegenerator
582 ipfiremake mpd
583 ipfiremake libmpdclient
584 ipfiremake mpc
585 ipfiremake git
586 ipfiremake squidclamav
587 ipfiremake bc
588 ipfiremake esniper
589 ipfiremake vnstat
590 ipfiremake vnstati
591 ipfiremake iw
592 ipfiremake wpa_supplicant
593 ipfiremake hostapd
594 ipfiremake urlgrabber
595 ipfiremake syslinux
596 ipfiremake tftpd
597 ipfiremake cpufrequtils
598 ipfiremake dbus
599 ipfiremake bluetooth
600 ipfiremake gutenprint
601 ipfiremake apcupsd
602 ipfiremake iperf
603 ipfiremake netcat
604 ipfiremake 7zip
605 ipfiremake lynis
606 #ipfiremake cryptsetup
607 ipfiremake splix
608 ipfiremake streamripper
609 ipfiremake sshfs
610 ipfiremake sqlite
611 ipfiremake taglib
612 ipfiremake mediatomb
613 ipfiremake sslh
614 ipfiremake perl-gettext
615 ipfiremake vdradmin
616 # ipfiremake x11libs
617 # ipfiremake xen
618 ipfiremake miau
619 ipfiremake netsnmpd
620 ipfiremake perl-DBI
621 ipfiremake perl-DBD-mysql
622 ipfiremake cacti
623 ipfiremake icecc
624 ipfiremake open-vm-tools
625 ipfiremake nagiosql
626 ipfiremake iftop
627 ipfiremake motion
628 ipfiremake joe
629 ipfiremake nut
630 ipfiremake watchdog
631 ipfiremake libpri
632 ipfiremake dahdi
633 ipfiremake asterisk
634 ipfiremake lcr
635 ipfiremake usb_modeswitch
636 ipfiremake zerofree
637 ipfiremake mdadm
638 ipfiremake eject
639 echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
640 cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
641 echo >> $BASEDIR/build/var/ipfire/firebuild
642 git log -1 >> $BASEDIR/build/var/ipfire/firebuild
643 echo >> $BASEDIR/build/var/ipfire/firebuild
644 git status >> $BASEDIR/build/var/ipfire/firebuild
645 echo >> $BASEDIR/build/var/ipfire/firebuild
646 cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
647 echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
648 if [ "$GIT_BRANCH" = "next" ]; then
649 echo "$NAME $VERSION - (Development Build: $GIT_LASTCOMMIT)" > $BASEDIR/build/etc/system-release
650 else
651 echo "$NAME $VERSION - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
652 fi
653 }
654
655 buildinstaller() {
656 # Run installer scripts one by one
657 LOGFILE="$BASEDIR/log/_build.installer.log"
658 export LOGFILE
659 ipfiremake as86
660 ipfiremake mbr
661 ipfiremake memtest
662 installmake linux-libc-header
663 installmake binutils
664 ipfiremake uClibc PASS=1
665 ipfiremake gcc INST=1
666 installmake uClibc PASS=2
667 installmake gcc INST=2
668 installmake uClibc PASS=3
669 installmake busybox
670 installmake udev
671 installmake slang
672 installmake newt
673 installmake gettext
674 installmake kbd
675 installmake popt
676 installmake sysvinit
677 installmake misc-progs
678 installmake libaal
679 installmake reiser4progs
680 installmake reiserfsprogs
681 installmake sysfsutils
682 installmake util-linux
683 installmake pciutils
684 installmake zlib
685 installmake mtd
686 installmake wget
687 installmake hwdata
688 installmake kudzu
689 installmake pcmciautils
690 installmake installer
691 installmake initrd
692 }
693
694 buildpackages() {
695 LOGFILE="$BASEDIR/log/_build.packages.log"
696 export LOGFILE
697 echo "... see detailed log in _build.*.log files" >> $LOGFILE
698
699 installmake strip
700
701 # Generating list of packages used
702 echo -n "Generating packages list from logs" | tee -a $LOGFILE
703 rm -f $BASEDIR/doc/packages-list
704 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
705 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
706 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
707 fi
708 done
709 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
710 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
711 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
712 rm -f $BASEDIR/doc/packages-list
713 # packages-list.txt is ready to be displayed for wiki page
714 beautify message DONE
715
716 # Update changelog
717 cd $BASEDIR
718 $0 git log
719
720 # Create images for install
721 ipfiremake cdrom ED=$IPFVER
722
723 # Check if there is a loop device for building in virtual environments
724 if [ -e /dev/loop/0 ] || [ -e /dev/loop0 ]; then
725 ipfiremake usb-stick ED=$IPFVER
726 ipfiremake flash-images ED=$IPFVER
727 fi
728
729 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
730
731 ipfirepackages
732
733 # Check if there is a loop device for building in virtual environments
734 if [ -e /dev/loop/0 ] || [ -e /dev/loop0 ]; then
735 cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
736 cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
737 ipfiremake xen-image ED=$IPFVER
738 rm -rf $LFS/install/packages/linux-xen-*.ipfire
739 rm -rf $LFS/install/packages/meta-linux-xen
740 fi
741 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
742
743 # Cleanup
744 stdumount
745 rm -rf $BASEDIR/build/tmp/*
746
747 # Generating total list of files
748 echo -n "Generating files list from logs" | tee -a $LOGFILE
749 rm -f $BASEDIR/log/FILES
750 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
751 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
752 echo "##" >>$BASEDIR/log/FILES
753 echo "## `basename $i`" >>$BASEDIR/log/FILES
754 echo "##" >>$BASEDIR/log/FILES
755 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
756 fi
757 done
758 beautify message DONE
759
760 cd $PWD
761 }
762
763 ipfirepackages() {
764 ipfiremake core-updates
765 for i in $(ls -1 $BASEDIR/config/rootfiles/packages); do
766 if [ -e $BASEDIR/lfs/$i ]; then
767 ipfiredist $i
768 else
769 echo -n $i
770 beautify message SKIP
771 fi
772 done
773 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
774 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
775 rm -rf $BASEDIR/build/install/packages/*
776 }
777
778 # See what we're supposed to do
779 case "$1" in
780 build)
781 clear
782 BUILDMACHINE=`uname -m`
783 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
784 #only restore on a clean disk
785 if [ ! -f log/cleanup-toolchain-2-tools ]; then
786 if [ ! -n "$PACKAGE" ]; then
787 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
788 prepareenv
789 buildtoolchain
790 else
791 PACKAGENAME=${PACKAGE%.tar.gz}
792 beautify build_stage "Packaged toolchain compilation"
793 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
794 tar zxf $PACKAGE
795 prepareenv
796 else
797 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
798 fi
799 fi
800 else
801 echo -n "Using installed toolchain" | tee -a $LOGFILE
802 beautify message SKIP
803 prepareenv
804 fi
805
806 beautify build_start
807 beautify build_stage "Building LFS"
808 buildbase
809
810 beautify build_stage "Building IPFire"
811 buildipfire
812
813 beautify build_stage "Building installer"
814 buildinstaller
815
816 beautify build_stage "Building packages"
817 buildpackages
818
819 beautify build_stage "Checking Logfiles for new Files"
820 cd ..
821 tools/checknewlog.pl
822
823 beautify build_end
824 ;;
825 shell)
826 # enter a shell inside LFS chroot
827 # may be used to changed kernel settings
828 prepareenv
829 entershell
830 ;;
831 clean)
832 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
833 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
834 $LOSETUP -d $i 2>/dev/null
835 done
836 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
837 umount $i
838 done
839 stdumount
840 for i in `seq 0 7`; do
841 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
842 umount /dev/loop${i} 2>/dev/null;
843 losetup -d /dev/loop${i} 2>/dev/null;
844 fi;
845 done
846 rm -rf $BASEDIR/build
847 rm -rf $BASEDIR/cdrom
848 rm -rf $BASEDIR/packages
849 rm -rf $BASEDIR/log
850 if [ -h /tools ]; then
851 rm -f /tools
852 fi
853 beautify message DONE
854 ;;
855 downloadsrc)
856 if [ ! -d $BASEDIR/cache ]; then
857 mkdir $BASEDIR/cache
858 fi
859 mkdir -p $BASEDIR/log
860 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
861 FINISHED=0
862 cd $BASEDIR/lfs
863 for c in `seq $MAX_RETRIES`; do
864 if (( FINISHED==1 )); then
865 break
866 fi
867 FINISHED=1
868 cd $BASEDIR/lfs
869 for i in *; do
870 if [ -f "$i" -a "$i" != "Config" ]; then
871 echo -ne "Loading $i"
872 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
873 if [ $? -ne 0 ]; then
874 beautify message FAIL
875 FINISHED=0
876 else
877 if [ $c -eq 1 ]; then
878 beautify message DONE
879 fi
880 fi
881 fi
882 done
883 done
884 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
885 ERROR=0
886 for i in *; do
887 if [ -f "$i" -a "$i" != "Config" ]; then
888 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
889 if [ $? -ne 0 ]; then
890 echo -ne "MD5 difference in lfs/$i"
891 beautify message FAIL
892 ERROR=1
893 fi
894 fi
895 done
896 if [ $ERROR -eq 0 ]; then
897 echo -ne "${BOLD}all files md5sum match${NORMAL}"
898 beautify message DONE
899 else
900 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
901 beautify message FAIL
902 fi
903 cd - >/dev/null 2>&1
904 ;;
905 toolchain)
906 clear
907 prepareenv
908 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
909 buildtoolchain
910 BUILDMACHINE=`uname -m`
911 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
912 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
913 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.tar.gz \
914 build/{bin,etc,usr/bin,usr/local} \
915 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
916 log >> $LOGFILE
917 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.tar.gz \
918 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.md5
919 stdumount
920 ;;
921 gettoolchain)
922 BUILDMACHINE=`uname -m`
923 # arbitrary name to be updated in case of new toolchain package upload
924 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE
925 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
926 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
927 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
928 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
929 cd $BASEDIR/cache/toolchains
930 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
931 if [ $? -ne 0 ]; then
932 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
933 else
934 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
935 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
936 else
937 exiterror "$PACKAGE.md5 did not match, check downloaded package"
938 fi
939 fi
940 else
941 echo "Toolchain is already downloaded. Exiting..."
942 fi
943 ;;
944 othersrc)
945 prepareenv
946 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
947 chroot $LFS /tools/bin/env -i HOME=/root \
948 TERM=$TERM PS1='\u:\w\$ ' \
949 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
950 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
951 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
952 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
953 if [ $? -eq "0" ]; then
954 beautify message DONE
955 else
956 beautify message FAIL
957 fi
958 stdumount
959 ;;
960 git)
961 case "$2" in
962 update|up)
963 ## REMOVES ALL UNCOMMITTED CHANGES!
964 [ "$3" == "--force" ] && git checkout -f
965 git pull
966 ;;
967 commit|ci)
968 shift 2
969 git commit $*
970
971 [ "$?" -eq "0" ] || exiterror "git commit $* failed."
972
973 echo -e "${BOLD}Do you want to push, too? [y/N]${NORMAL}"
974 read
975 [ -z $REPLY ] && exit 0
976 for i in y Y j J; do
977 if [ "$i" == "$REPLY" ]; then
978 $0 git push
979 exit $?
980 fi
981 done
982 exiterror "\"$REPLY\" is not a valid answer."
983 ;;
984 dist)
985 git archive HEAD | gzip -9 > ${SNAME}-${VERSION}.tar.gz
986 ;;
987 diff|di)
988 echo -ne "Make a local diff to last revision"
989 git diff HEAD > ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff
990 evaluate 1
991 echo "Diff was successfully saved to ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff"
992 git diff --stat
993 ;;
994 push)
995 [ -z $GIT_USER ] && exiterror "You have to setup GIT_USER first."
996 GIT_URL="ssh://${GIT_USER}@git.ipfire.org/pub/git/ipfire-2.x"
997
998 git push ${GIT_URL} $3
999 ;;
1000 log)
1001 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
1002 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
1003
1004 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
1005 ;;
1006 esac
1007 ;;
1008 uploadsrc)
1009 PWD=`pwd`
1010 if [ -z $IPFIRE_USER ]; then
1011 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1012 beautify message FAIL
1013 exit 1
1014 fi
1015 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1016 REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1017
1018 cd $BASEDIR/cache/
1019 for file in $(ls -1); do
1020 grep -q "$file" <<<$REMOTE_FILES && continue
1021 NEW_FILES="$NEW_FILES $file"
1022 done
1023 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1024 cd $BASEDIR
1025 cd $PWD
1026 exit 0
1027 ;;
1028 batch)
1029 if [ "$2" = "--background" ]; then
1030 batch_script
1031 exit $?
1032 fi
1033 if [ `screen -ls | grep -q ipfire` ]; then
1034 echo "Build is already running, sorry!"
1035 exit 1
1036 else
1037 if [ "$2" = "--rebuild" ]; then
1038 export IPFIRE_REBUILD=1
1039 echo "REBUILD!"
1040 else
1041 export IPFIRE_REBUILD=0
1042 fi
1043 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1044 screen -dmS ipfire $0 batch --background
1045 evaluate 1
1046 exit 0
1047 fi
1048 ;;
1049 watch)
1050 watch_screen
1051 ;;
1052 pxe)
1053 case "$2" in
1054 start)
1055 start_tftpd
1056 ;;
1057 stop)
1058 stop_tftpd
1059 ;;
1060 reload|restart)
1061 reload_tftpd
1062 ;;
1063 esac
1064 exit 0
1065 ;;
1066 lang)
1067 update_langs
1068 ;;
1069 "")
1070 clear
1071 select name in "Exit" "IPFIRE: Downloadsrc" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "LOG: Tail" "Help"
1072 do
1073 case $name in
1074 "IPFIRE: Downloadsrc")
1075 $0 downloadsrc
1076 ;;
1077 "IPFIRE: Build (silent)")
1078 $0 build-silent
1079 ;;
1080 "IPFIRE: Watch Build")
1081 $0 watch
1082 ;;
1083 "IPFIRE: Batch")
1084 $0 batch
1085 ;;
1086 "IPFIRE: Clean")
1087 $0 clean
1088 ;;
1089 "Help")
1090 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1091 cat doc/make.sh-usage
1092 ;;
1093 "LOG: Tail")
1094 tail -f log/_*
1095 ;;
1096 "Exit")
1097 break
1098 ;;
1099 esac
1100 done
1101 ;;
1102 config)
1103 make_config
1104 ;;
1105 *)
1106 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1107 cat doc/make.sh-usage
1108 ;;
1109 esac