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