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