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