]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - make.sh
Applied packages to make.sh.
[people/teissler/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 pkg-config
349 ipfiremake linux-atm
350 ipfiremake cpio
351 ipfiremake klibc
352 ipfiremake mkinitcpio
353 ipfiremake udev KLIBC=1
354 ipfiremake expat
355 ipfiremake gdbm
356 ipfiremake gmp
357 ipfiremake pam
358 ipfiremake openssl
359 ipfiremake curl
360 ipfiremake python
361 ipfiremake libnet
362 ipfiremake libidn
363 ipfiremake libjpeg
364 ipfiremake libpng
365 ipfiremake libtiff
366 ipfiremake libart
367 ipfiremake freetype
368 ipfiremake gd
369 ipfiremake popt
370 ipfiremake pcre
371 ipfiremake slang
372 ipfiremake newt
373 ipfiremake libcap
374 ipfiremake pciutils
375 ipfiremake usbutils
376 ipfiremake libxml2
377 ipfiremake libxslt
378 ipfiremake BerkeleyDB
379 ipfiremake mysql
380 ipfiremake cyrus-sasl
381 ipfiremake openldap
382 ipfiremake apache2
383 ipfiremake php
384 ipfiremake apache2 PASS=C
385 ipfiremake arping
386 ipfiremake beep
387 ipfiremake bind
388 ipfiremake cdrtools
389 ipfiremake dnsmasq
390 ipfiremake dosfstools
391 ipfiremake squashfstools
392 ipfiremake reiserfsprogs
393 ipfiremake xfsprogs
394 ipfiremake sysfsutils
395 ipfiremake fuse
396 ipfiremake ntfs-3g
397 ipfiremake ethtool
398 ipfiremake ez-ipupdate
399 ipfiremake fcron
400 ipfiremake perl-GD
401 ipfiremake GD-Graph
402 ipfiremake GD-TextUtil
403 ipfiremake gnupg
404 ipfiremake hdparm
405 ipfiremake sdparm
406 ipfiremake mtools
407 ipfiremake initscripts
408 ipfiremake whatmask
409 ipfiremake iptables
410 ipfiremake libupnp
411 ipfiremake ipaddr
412 ipfiremake iptstate
413 ipfiremake iputils
414 ipfiremake l7-protocols
415 ipfiremake mISDNuser
416 ipfiremake capi4k-utils
417 ipfiremake hwdata
418 ipfiremake kudzu
419 ipfiremake logrotate
420 ipfiremake logwatch
421 ipfiremake misc-progs
422 ipfiremake nano
423 ipfiremake nasm
424 ipfiremake URI
425 ipfiremake HTML-Tagset
426 ipfiremake HTML-Parser
427 ipfiremake Compress-Zlib
428 ipfiremake Digest
429 ipfiremake Digest-SHA1
430 ipfiremake Digest-HMAC
431 ipfiremake libwww-perl
432 ipfiremake Net-DNS
433 ipfiremake Net-IPv4Addr
434 ipfiremake Net_SSLeay
435 ipfiremake IO-Stringy
436 ipfiremake Unix-Syslog
437 ipfiremake Mail-Tools
438 ipfiremake MIME-Tools
439 ipfiremake Net-Server
440 ipfiremake Convert-TNEF
441 ipfiremake Convert-UUlib
442 ipfiremake Archive-Tar
443 ipfiremake Archive-Zip
444 ipfiremake Text-Tabs+Wrap
445 ipfiremake Locale-Country
446 ipfiremake XML-Parser
447 ipfiremake python-setuptools
448 ipfiremake python-clientform
449 ipfiremake python-mechanize
450 ipfiremake python-feedparser
451 ipfiremake python-rssdler
452 ipfiremake glib
453 ipfiremake GeoIP
454 ipfiremake fwhits
455 ipfiremake noip_updater
456 ipfiremake ntp
457 ipfiremake openssh
458 ipfiremake rrdtool
459 ipfiremake setserial
460 ipfiremake setup
461 ipfiremake snort
462 ipfiremake oinkmaster
463 ipfiremake squid
464 ipfiremake squidguard
465 ipfiremake calamaris
466 ipfiremake tcpdump
467 ipfiremake traceroute
468 ipfiremake vlan
469 ipfiremake wireless
470 ipfiremake libsafe
471 ipfiremake pakfire
472 ipfiremake java
473 ipfiremake spandsp
474 ipfiremake lzo
475 ipfiremake openvpn
476 ipfiremake pammysql
477 ipfiremake cups
478 ipfiremake ghostscript
479 ipfiremake foomatic
480 ipfiremake hplip
481 ipfiremake samba
482 ipfiremake sudo
483 ipfiremake mc
484 ipfiremake wget
485 ipfiremake bridge-utils
486 ipfiremake screen
487 ipfiremake hddtemp
488 ipfiremake smartmontools
489 ipfiremake htop
490 ipfiremake postfix
491 ipfiremake fetchmail
492 ipfiremake cyrus-imapd
493 ipfiremake openmailadmin
494 ipfiremake clamav
495 ipfiremake spamassassin
496 ipfiremake amavisd
497 ipfiremake alsa
498 ipfiremake mpfire
499 ipfiremake guardian
500 ipfiremake libid3tag
501 ipfiremake libmad
502 ipfiremake libogg
503 ipfiremake libvorbis
504 ipfiremake libdvbpsi
505 ipfiremake lame
506 ipfiremake sox
507 ipfiremake libshout
508 ipfiremake xvid
509 ipfiremake libmpeg2
510 ipfiremake cmake
511 ipfiremake libpri
512 ipfiremake asterisk
513 ipfiremake gnump3d
514 ipfiremake libsigc++
515 ipfiremake applejuice
516 ipfiremake ocaml
517 ipfiremake mldonkey
518 ipfiremake libtorrent
519 ipfiremake rtorrent
520 ipfiremake ipfireseeder
521 ipfiremake rsync
522 ipfiremake tcpwrapper
523 ipfiremake portmap
524 ipfiremake nfs
525 ipfiremake nmap
526 ipfiremake ncftp
527 ipfiremake etherwake
528 ipfiremake bwm-ng
529 ipfiremake tripwire
530 ipfiremake sysstat
531 ipfiremake vsftpd
532 ipfiremake which
533 ipfiremake openswan
534 ipfiremake lsof
535 ipfiremake centerim
536 ipfiremake br2684ctl
537 ipfiremake pcmciautils
538 ipfiremake lm_sensors
539 ipfiremake collectd
540 ipfiremake lcd4linux
541 ipfiremake tcptrack
542 ipfiremake teamspeak
543 ipfiremake elinks
544 ipfiremake igmpproxy
545 ipfiremake fbset
546 ipfiremake sdl
547 ipfiremake qemu
548 ipfiremake sane
549 ipfiremake netpbm
550 ipfiremake phpSANE
551 ipfiremake tunctl
552 ipfiremake nagios
553 ipfiremake ebtables
554 ipfiremake fontconfig
555 ipfiremake freefont
556 ipfiremake directfb
557 ipfiremake dfb++
558 ipfiremake ffmpeg
559 ipfiremake videolan
560 ipfiremake vdr
561 ipfiremake w_scan
562 ipfiremake icecast
563 ipfiremake icegenerator
564 ipfiremake mpd
565 ipfiremake mpc
566 ipfiremake git
567 ipfiremake squidclamav
568 ipfiremake bc
569 ipfiremake esniper
570 ipfiremake vnstat
571 ipfiremake vnstati
572 ipfiremake wpa_supplicant
573 ipfiremake hostapd
574 ipfiremake urlgrabber
575 ipfiremake syslinux
576 ipfiremake tftpd
577 ipfiremake cpufrequtils
578 ipfiremake dbus
579 ipfiremake bluetooth
580 ipfiremake gutenprint
581 ipfiremake apcupsd
582 ipfiremake iperf
583 ipfiremake netcat
584 ipfiremake 7zip
585 ipfiremake lynis
586 ipfiremake cryptsetup
587 ipfiremake splix
588 ipfiremake streamripper
589 ipfiremake sshfs
590 ipfiremake sqlite
591 ipfiremake taglib
592 # ipfiremake mediatomb
593 ipfiremake sslh
594 ipfiremake perl-gettext
595 ipfiremake vdradmin
596 ipfiremake linux-xen
597 ipfiremake x11libs
598 ipfiremake xen
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