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