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