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