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