]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - make.sh
Merge commit 'origin/master' into next
[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.8test" # Version number
28 CORE="41" # Core Level (Filename)
29 PAKFIRE_CORE="40" # Core Level (PAKFIRE)
30 GIT_BRANCH=`git status | head -n1 | cut -d" " -f4` # Git Branch
31 SLOGAN="www.ipfire.org" # Software slogan
32 CONFIG_ROOT=/var/ipfire # Configuration rootdir
33 NICE=10 # Nice level
34 MAX_RETRIES=1 # prefetch/check loop
35 BUILD_IMAGES=1 # Build USB, Flash and Xen Images
36 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
37 MACHINE=`uname -m`
38 GIT_TAG=$(git tag | tail -1) # Git Tag
39 GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8) # Last commit
40 TOOLCHAINVER=1
41 IPFVER="full" # Which versions should be compiled? (full|devel)
42
43 # Debian specific settings
44 if [ ! -e /etc/debian_version ]; then
45 FULLPATH=`which $0`
46 else
47 if [ -x /usr/bin/realpath ]; then
48 FULLPATH=`/usr/bin/realpath $0`
49 else
50 echo "ERROR: Need to do apt-get install realpath"
51 exit 1
52 fi
53 fi
54
55 PWD=`pwd`
56 BASENAME=`basename $0`
57 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
58 LOGFILE=$BASEDIR/log/_build.preparation.log
59 export BASEDIR LOGFILE
60 DIR_CHK=$BASEDIR/cache/check
61 mkdir $BASEDIR/log/ 2>/dev/null
62
63 # Include funtions
64 . tools/make-functions
65
66 if [ -f .config ]; then
67 . .config
68 else
69 echo -e "${BOLD}No configuration found!${NORMAL}"
70 echo -ne "Do you want to create one (y/N)?"
71 read CREATE_CONFIG
72 echo ""
73 if [ "$CREATE_CONFIG" == "y" ]; then
74 make_config
75 fi
76 fi
77
78 if [ -z $EDITOR ]; then
79 for i in nano emacs vi; do
80 EDITOR=$(which $i 2>/dev/null)
81 if ! [ -z $EDITOR ]; then
82 export EDITOR=$EDITOR
83 break
84 fi
85 done
86 [ -z $EDITOR ] && exiterror "You should have installed an editor."
87 fi
88
89 prepareenv() {
90 ############################################################################
91 # #
92 # Are we running the right shell? #
93 # #
94 ############################################################################
95 if [ ! "$BASH" ]; then
96 exiterror "BASH environment variable is not set. You're probably running the wrong shell."
97 fi
98
99 if [ -z "${BASH_VERSION}" ]; then
100 exiterror "Not running BASH shell."
101 fi
102
103
104 ############################################################################
105 # #
106 # Trap on emergency exit #
107 # #
108 ############################################################################
109 trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
110
111
112 ############################################################################
113 # #
114 # Resetting our nice level #
115 # #
116 ############################################################################
117 echo -ne "Resetting our nice level to $NICE" | tee -a $LOGFILE
118 renice $NICE $$ > /dev/null
119 if [ `nice` != "$NICE" ]; then
120 beautify message FAIL
121 exiterror "Failed to set correct nice level"
122 else
123 beautify message DONE
124 fi
125
126
127 ############################################################################
128 # #
129 # Checking if running as root user #
130 # #
131 ############################################################################
132 echo -ne "Checking if we're running as root user" | tee -a $LOGFILE
133 if [ `id -u` != 0 ]; then
134 beautify message FAIL
135 exiterror "Not building as root"
136 else
137 beautify message DONE
138 fi
139
140
141 ############################################################################
142 # #
143 # Checking for necessary temporary space #
144 # #
145 ############################################################################
146 echo -ne "Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
147 BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
148 BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
149 if (( 2048000 > $BASE_ASPACE )); then
150 BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
151 if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
152 beautify message FAIL
153 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
154 fi
155 else
156 beautify message DONE
157 fi
158
159 ############################################################################
160 # #
161 # Building Linux From Scratch system #
162 # #
163 ############################################################################
164 # Set umask
165 umask 022
166
167 # Set LFS Directory
168 LFS=$BASEDIR/build
169
170 # Check /tools symlink
171 if [ -h /tools ]; then
172 rm -f /tools
173 fi
174 if [ ! -a /tools ]; then
175 ln -s $BASEDIR/build/tools /
176 fi
177 if [ ! -h /tools ]; then
178 exiterror "Could not create /tools symbolic link."
179 fi
180
181 # Setup environment
182 set +h
183 LC_ALL=POSIX
184 if [ -z $MAKETUNING ]; then
185 MAKETUNING="-j6"
186 fi
187 export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
188 unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
189
190 # Make some extra directories
191 mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
192 mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
193 mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
194 mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
195
196 mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
197 mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
198
199 # Make all sources and proc available under lfs build
200 mount --bind /dev $BASEDIR/build/dev
201 mount --bind /dev/pts $BASEDIR/build/dev/pts
202 mount --bind /dev/shm $BASEDIR/build/dev/shm
203 mount --bind /proc $BASEDIR/build/proc
204 mount --bind /sys $BASEDIR/build/sys
205 mount --bind $BASEDIR/cache $BASEDIR/build/usr/src/cache
206 mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
207 mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
208 mount --bind $BASEDIR/doc $BASEDIR/build/usr/src/doc
209 mount --bind $BASEDIR/html $BASEDIR/build/usr/src/html
210 mount --bind $BASEDIR/langs $BASEDIR/build/usr/src/langs
211 mount --bind $BASEDIR/lfs $BASEDIR/build/usr/src/lfs
212 mount --bind $BASEDIR/log $BASEDIR/build/usr/src/log
213 mount --bind $BASEDIR/src $BASEDIR/build/usr/src/src
214
215 # This is a temporary hack!!!
216 if [ ! -f /tools/bin/hostname ]; then
217 cp -f /bin/hostname /tools/bin/hostname 2>/dev/null
218 fi
219
220 # Run LFS static binary creation scripts one by one
221 export CCACHE_DIR=$BASEDIR/ccache
222 export CCACHE_HASHDIR=1
223
224 # Remove pre-install list of installed files in case user erase some files before rebuild
225 rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
226 }
227
228 buildtoolchain() {
229 LOGFILE="$BASEDIR/log/_build.toolchain.log"
230 export LOGFILE
231 ORG_PATH=$PATH
232 NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
233 export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
234 lfsmake1 ccache PASS=1
235 lfsmake1 binutils PASS=1
236 lfsmake1 gcc PASS=1
237 export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
238 lfsmake1 linux-libc-header
239 lfsmake1 glibc
240 lfsmake1 cleanup-toolchain PASS=1
241 lfsmake1 tcl
242 lfsmake1 expect
243 lfsmake1 dejagnu
244 lfsmake1 gcc PASS=2
245 lfsmake1 binutils PASS=2
246 lfsmake1 ccache PASS=2
247 lfsmake1 ncurses
248 lfsmake1 bash
249 lfsmake1 bzip2
250 lfsmake1 coreutils
251 lfsmake1 diffutils
252 lfsmake1 findutils
253 lfsmake1 gawk
254 lfsmake1 gettext
255 lfsmake1 grep
256 lfsmake1 gzip
257 lfsmake1 m4
258 lfsmake1 make
259 lfsmake1 patch
260 lfsmake1 perl
261 lfsmake1 sed
262 lfsmake1 tar
263 lfsmake1 texinfo
264 lfsmake1 util-linux
265 lfsmake1 cleanup-toolchain PASS=2
266 export PATH=$ORG_PATH
267 }
268
269 buildbase() {
270 LOGFILE="$BASEDIR/log/_build.base.log"
271 export LOGFILE
272 lfsmake2 stage2
273 lfsmake2 linux-libc-header
274 lfsmake2 man-pages
275 lfsmake2 glibc
276 lfsmake2 cleanup-toolchain PASS=3
277 lfsmake2 binutils
278 lfsmake2 gcc
279 lfsmake2 berkeley
280 lfsmake2 coreutils
281 lfsmake2 iana-etc
282 lfsmake2 m4
283 lfsmake2 bison
284 lfsmake2 ncurses
285 lfsmake2 procps
286 lfsmake2 sed
287 lfsmake2 libtool
288 lfsmake2 perl
289 lfsmake2 readline
290 lfsmake2 zlib
291 lfsmake2 autoconf
292 lfsmake2 automake
293 lfsmake2 bash
294 lfsmake2 bzip2
295 lfsmake2 diffutils
296 lfsmake2 e2fsprogs
297 lfsmake2 ed
298 lfsmake2 file
299 lfsmake2 findutils
300 lfsmake2 flex
301 lfsmake2 gawk
302 lfsmake2 gettext
303 lfsmake2 grep
304 lfsmake2 groff
305 lfsmake2 gzip
306 lfsmake2 inetutils
307 lfsmake2 iproute2
308 lfsmake2 kbd
309 lfsmake2 less
310 lfsmake2 libaal
311 lfsmake2 make
312 lfsmake2 man
313 lfsmake2 mktemp
314 lfsmake2 module-init-tools
315 lfsmake2 mtd
316 lfsmake2 net-tools
317 lfsmake2 patch
318 lfsmake2 psmisc
319 lfsmake2 reiser4progs
320 lfsmake2 shadow
321 lfsmake2 sysklogd
322 lfsmake2 sysvinit
323 lfsmake2 tar
324 lfsmake2 texinfo
325 lfsmake2 udev
326 lfsmake2 util-linux
327 lfsmake2 vim
328 lfsmake2 grub
329 }
330
331 buildipfire() {
332 LOGFILE="$BASEDIR/log/_build.ipfire.log"
333 export LOGFILE
334 ipfiremake configroot
335 ipfiremake backup
336 ipfiremake dhcp
337 ipfiremake dhcpcd
338 ipfiremake libusb
339 ipfiremake libpcap
340 ipfiremake ppp
341 ipfiremake pptp
342 ipfiremake unzip
343 ipfiremake which
344 ipfiremake xz
345 ipfiremake linux-firmware
346 ipfiremake linux XEN=1
347 ipfiremake kqemu XEN=1
348 ipfiremake v4l-dvb XEN=1
349 ipfiremake madwifi XEN=1
350 ipfiremake mISDN XEN=1
351 ipfiremake dahdi XEN=1 KMOD=1
352 ipfiremake cryptodev XEN=1
353 ipfiremake compat-wireless XEN=1
354 ipfiremake r8169 XEN=1
355 ipfiremake r8168 XEN=1
356 ipfiremake r8101 XEN=1
357 ipfiremake e1000 XEN=1
358 ipfiremake e1000e XEN=1
359 ipfiremake igb XEN=1
360 ipfiremake linux PAE=1
361 ipfiremake kqemu PAE=1
362 ipfiremake kvm-kmod PAE=1
363 ipfiremake v4l-dvb PAE=1
364 ipfiremake madwifi PAE=1
365 ipfiremake alsa PAE=1 KMOD=1
366 ipfiremake mISDN PAE=1
367 ipfiremake dahdi PAE=1 KMOD=1
368 ipfiremake cryptodev PAE=1
369 ipfiremake compat-wireless PAE=1
370 ipfiremake r8169 PAE=1
371 ipfiremake r8168 PAE=1
372 ipfiremake r8101 PAE=1
373 ipfiremake e1000 PAE=1
374 ipfiremake e1000e PAE=1
375 ipfiremake igb PAE=1
376 ipfiremake linux
377 ipfiremake kqemu
378 ipfiremake kvm-kmod
379 ipfiremake v4l-dvb
380 ipfiremake madwifi
381 ipfiremake alsa KMOD=1
382 ipfiremake mISDN
383 ipfiremake dahdi KMOD=1
384 ipfiremake cryptodev
385 ipfiremake compat-wireless
386 ipfiremake r8169
387 ipfiremake r8168
388 ipfiremake r8101
389 ipfiremake e1000
390 ipfiremake e1000e
391 ipfiremake igb
392 ipfiremake pkg-config
393 ipfiremake linux-atm
394 ipfiremake cpio
395
396 installmake strip
397
398 ipfiremake dracut
399 ipfiremake expat
400 ipfiremake gdbm
401 ipfiremake gmp
402 ipfiremake pam
403 ipfiremake openssl
404 ipfiremake curl
405 ipfiremake python
406 ipfiremake libnet
407 ipfiremake libnl
408 ipfiremake libidn
409 ipfiremake libjpeg
410 ipfiremake libpng
411 ipfiremake libtiff
412 ipfiremake libart
413 ipfiremake freetype
414 ipfiremake gd
415 ipfiremake popt
416 ipfiremake pcre
417 ipfiremake slang
418 ipfiremake newt
419 ipfiremake attr
420 ipfiremake libcap
421 ipfiremake pciutils
422 ipfiremake usbutils
423 ipfiremake libxml2
424 ipfiremake libxslt
425 ipfiremake BerkeleyDB
426 ipfiremake mysql
427 ipfiremake cyrus-sasl
428 ipfiremake openldap
429 ipfiremake apache2
430 ipfiremake php
431 ipfiremake apache2 PASS=C
432 ipfiremake arping
433 ipfiremake beep
434 ipfiremake bind
435 ipfiremake cdrtools
436 ipfiremake dnsmasq
437 ipfiremake dosfstools
438 ipfiremake reiserfsprogs
439 ipfiremake xfsprogs
440 ipfiremake sysfsutils
441 ipfiremake fuse
442 ipfiremake ntfs-3g
443 ipfiremake ethtool
444 ipfiremake ez-ipupdate
445 ipfiremake fcron
446 ipfiremake perl-GD
447 ipfiremake GD-Graph
448 ipfiremake GD-TextUtil
449 ipfiremake gnupg
450 ipfiremake hdparm
451 ipfiremake sdparm
452 ipfiremake mtools
453 ipfiremake initscripts
454 ipfiremake whatmask
455 ipfiremake iptables
456 ipfiremake libupnp
457 ipfiremake ipaddr
458 ipfiremake iptstate
459 ipfiremake iputils
460 ipfiremake l7-protocols
461 ipfiremake mISDNuser
462 ipfiremake capi4k-utils
463 ipfiremake hwdata
464 ipfiremake kudzu
465 ipfiremake logrotate
466 ipfiremake logwatch
467 ipfiremake misc-progs
468 ipfiremake nano
469 ipfiremake nasm
470 ipfiremake URI
471 ipfiremake HTML-Tagset
472 ipfiremake HTML-Parser
473 ipfiremake Compress-Zlib
474 ipfiremake Digest
475 ipfiremake Digest-SHA1
476 ipfiremake Digest-HMAC
477 ipfiremake libwww-perl
478 ipfiremake Net-DNS
479 ipfiremake Net-IPv4Addr
480 ipfiremake Net_SSLeay
481 ipfiremake IO-Stringy
482 ipfiremake Unix-Syslog
483 ipfiremake Mail-Tools
484 ipfiremake MIME-Tools
485 ipfiremake Net-Server
486 ipfiremake Convert-TNEF
487 ipfiremake Convert-UUlib
488 ipfiremake Archive-Tar
489 ipfiremake Archive-Zip
490 ipfiremake Text-Tabs+Wrap
491 ipfiremake Locale-Country
492 ipfiremake XML-Parser
493 ipfiremake python-setuptools
494 ipfiremake python-clientform
495 ipfiremake python-mechanize
496 ipfiremake python-feedparser
497 ipfiremake python-rssdler
498 ipfiremake glib
499 ipfiremake GeoIP
500 ipfiremake fwhits
501 ipfiremake noip_updater
502 ipfiremake ntp
503 ipfiremake openssh
504 ipfiremake rrdtool
505 ipfiremake setserial
506 ipfiremake setup
507 ipfiremake snort
508 ipfiremake oinkmaster
509 ipfiremake squid
510 ipfiremake squidguard
511 ipfiremake calamaris
512 ipfiremake tcpdump
513 ipfiremake traceroute
514 ipfiremake vlan
515 ipfiremake wireless
516 ipfiremake libsafe
517 ipfiremake pakfire
518 ipfiremake java
519 ipfiremake spandsp
520 ipfiremake lzo
521 ipfiremake openvpn
522 ipfiremake pammysql
523 ipfiremake cups
524 ipfiremake ghostscript
525 ipfiremake foomatic
526 ipfiremake hplip
527 ipfiremake samba
528 ipfiremake sudo
529 ipfiremake mc
530 ipfiremake wget
531 ipfiremake bridge-utils
532 ipfiremake screen
533 ipfiremake hddtemp
534 ipfiremake smartmontools
535 ipfiremake htop
536 ipfiremake postfix
537 ipfiremake fetchmail
538 ipfiremake cyrus-imapd
539 ipfiremake openmailadmin
540 ipfiremake clamav
541 ipfiremake spamassassin
542 ipfiremake amavisd
543 ipfiremake alsa
544 ipfiremake mpfire
545 ipfiremake guardian
546 ipfiremake libid3tag
547 ipfiremake libmad
548 ipfiremake libogg
549 ipfiremake libvorbis
550 ipfiremake libdvbpsi
551 ipfiremake lame
552 ipfiremake sox
553 ipfiremake libshout
554 ipfiremake xvid
555 ipfiremake libmpeg2
556 ipfiremake cmake
557 ipfiremake gnump3d
558 ipfiremake libsigc++
559 ipfiremake applejuice
560 ipfiremake ocaml
561 ipfiremake mldonkey
562 ipfiremake libtorrent
563 ipfiremake rtorrent
564 ipfiremake ipfireseeder
565 ipfiremake rsync
566 ipfiremake tcpwrapper
567 ipfiremake libevent
568 ipfiremake portmap
569 ipfiremake nfs
570 ipfiremake nmap
571 ipfiremake ncftp
572 ipfiremake etherwake
573 ipfiremake bwm-ng
574 ipfiremake tripwire
575 ipfiremake sysstat
576 ipfiremake vsftpd
577 ipfiremake strongswan
578 ipfiremake lsof
579 ipfiremake centerim
580 ipfiremake br2684ctl
581 ipfiremake pcmciautils
582 ipfiremake lm_sensors
583 ipfiremake liboping
584 ipfiremake collectd
585 ipfiremake lcd4linux
586 ipfiremake teamspeak
587 ipfiremake elinks
588 ipfiremake igmpproxy
589 ipfiremake fbset
590 ipfiremake sdl
591 ipfiremake qemu
592 ipfiremake qemu-kqemu
593 ipfiremake sane
594 ipfiremake netpbm
595 ipfiremake phpSANE
596 ipfiremake tunctl
597 ipfiremake nagios
598 ipfiremake ebtables
599 ipfiremake fontconfig
600 ipfiremake freefont
601 ipfiremake directfb
602 ipfiremake dfb++
603 ipfiremake faad2
604 ipfiremake ffmpeg
605 ipfiremake videolan
606 ipfiremake vdr
607 ipfiremake w_scan
608 ipfiremake icecast
609 ipfiremake icegenerator
610 ipfiremake mpd
611 ipfiremake libmpdclient
612 ipfiremake mpc
613 ipfiremake git
614 ipfiremake squidclamav
615 ipfiremake bc
616 ipfiremake vnstat
617 ipfiremake vnstati
618 ipfiremake iw
619 ipfiremake wpa_supplicant
620 ipfiremake hostapd
621 ipfiremake urlgrabber
622 ipfiremake syslinux
623 ipfiremake tftpd
624 ipfiremake cpufrequtils
625 ipfiremake dbus
626 ipfiremake bluetooth
627 ipfiremake gutenprint
628 ipfiremake apcupsd
629 ipfiremake iperf
630 ipfiremake netcat
631 ipfiremake 7zip
632 ipfiremake lynis
633 ipfiremake splix
634 ipfiremake streamripper
635 ipfiremake sshfs
636 ipfiremake sqlite
637 ipfiremake taglib
638 ipfiremake mediatomb
639 ipfiremake sslh
640 ipfiremake perl-gettext
641 ipfiremake vdradmin
642 ipfiremake miau
643 ipfiremake netsnmpd
644 ipfiremake perl-DBI
645 ipfiremake perl-DBD-mysql
646 ipfiremake cacti
647 ipfiremake icecc
648 ipfiremake openvmtools
649 ipfiremake nagiosql
650 ipfiremake iftop
651 ipfiremake motion
652 ipfiremake joe
653 ipfiremake nut
654 ipfiremake watchdog
655 ipfiremake libpri
656 ipfiremake dahdi
657 ipfiremake asterisk
658 ipfiremake lcr
659 ipfiremake usb_modeswitch
660 ipfiremake usb_modeswitch_data
661 ipfiremake zerofree
662 ipfiremake mdadm
663 ipfiremake eject
664 ipfiremake pound
665 ipfiremake minicom
666 ipfiremake ddrescue
667 ipfiremake tcl
668 ipfiremake imspector
669 echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
670 cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
671 echo >> $BASEDIR/build/var/ipfire/firebuild
672 git log -1 >> $BASEDIR/build/var/ipfire/firebuild
673 echo >> $BASEDIR/build/var/ipfire/firebuild
674 git status >> $BASEDIR/build/var/ipfire/firebuild
675 echo >> $BASEDIR/build/var/ipfire/firebuild
676 cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
677 echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
678 if [ "$GIT_BRANCH" = "master" ]; then
679 echo "$NAME $VERSION - (Development Build: $GIT_LASTCOMMIT)" > $BASEDIR/build/etc/system-release
680 else
681 echo "$NAME $VERSION - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
682 fi
683 }
684
685 buildinstaller() {
686 # Run installer scripts one by one
687 LOGFILE="$BASEDIR/log/_build.installer.log"
688 export LOGFILE
689 ipfiremake as86
690 ipfiremake mbr
691 ipfiremake memtest
692 ipfiremake installer
693 cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
694 installmake strip
695 ipfiremake initrd
696 }
697
698 buildpackages() {
699 LOGFILE="$BASEDIR/log/_build.packages.log"
700 export LOGFILE
701 echo "... see detailed log in _build.*.log files" >> $LOGFILE
702
703
704 # Generating list of packages used
705 echo -n "Generating packages list from logs" | tee -a $LOGFILE
706 rm -f $BASEDIR/doc/packages-list
707 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
708 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
709 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
710 fi
711 done
712 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
713 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
714 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
715 rm -f $BASEDIR/doc/packages-list
716 # packages-list.txt is ready to be displayed for wiki page
717 beautify message DONE
718
719 # Update changelog
720 cd $BASEDIR
721 $0 git log
722
723 # Create images for install
724 ipfiremake cdrom ED=$IPFVER
725
726 # Check if there is a loop device for building in virtual environments
727 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
728 ipfiremake usb-stick ED=$IPFVER
729 ipfiremake flash-images ED=$IPFVER
730 fi
731
732 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
733
734 ipfirepackages
735
736 # Check if there is a loop device for building in virtual environments
737 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
738 cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
739 cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
740 ipfiremake xen-image ED=$IPFVER
741 rm -rf $LFS/install/packages/linux-xen-*.ipfire
742 rm -rf $LFS/install/packages/meta-linux-xen
743 fi
744 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
745
746 # Cleanup
747 stdumount
748 rm -rf $BASEDIR/build/tmp/*
749
750 # Generating total list of files
751 echo -n "Generating files list from logs" | tee -a $LOGFILE
752 rm -f $BASEDIR/log/FILES
753 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
754 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
755 echo "##" >>$BASEDIR/log/FILES
756 echo "## `basename $i`" >>$BASEDIR/log/FILES
757 echo "##" >>$BASEDIR/log/FILES
758 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
759 fi
760 done
761 beautify message DONE
762
763 cd $PWD
764 }
765
766 ipfirepackages() {
767 ipfiremake core-updates
768 for i in $(ls -1 $BASEDIR/config/rootfiles/packages); do
769 if [ -e $BASEDIR/lfs/$i ]; then
770 ipfiredist $i
771 else
772 echo -n $i
773 beautify message SKIP
774 fi
775 done
776 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
777 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
778 rm -rf $BASEDIR/build/install/packages/*
779 }
780
781 # See what we're supposed to do
782 case "$1" in
783 build)
784 clear
785 BUILDMACHINE=`uname -m`
786 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
787 #only restore on a clean disk
788 if [ ! -f log/cleanup-toolchain-2-tools ]; then
789 if [ ! -n "$PACKAGE" ]; then
790 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
791 prepareenv
792 buildtoolchain
793 else
794 PACKAGENAME=${PACKAGE%.tar.gz}
795 beautify build_stage "Packaged toolchain compilation"
796 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
797 tar zxf $PACKAGE
798 prepareenv
799 else
800 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
801 fi
802 fi
803 else
804 echo -n "Using installed toolchain" | tee -a $LOGFILE
805 beautify message SKIP
806 prepareenv
807 fi
808
809 beautify build_start
810 beautify build_stage "Building LFS"
811 buildbase
812
813 beautify build_stage "Building IPFire"
814 buildipfire
815
816 beautify build_stage "Building installer"
817 buildinstaller
818
819 beautify build_stage "Building packages"
820 buildpackages
821
822 beautify build_stage "Checking Logfiles for new Files"
823 cd ..
824 tools/checknewlog.pl
825
826 beautify build_end
827 ;;
828 shell)
829 # enter a shell inside LFS chroot
830 # may be used to changed kernel settings
831 prepareenv
832 entershell
833 ;;
834 clean)
835 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
836 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
837 $LOSETUP -d $i 2>/dev/null
838 done
839 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
840 umount $i
841 done
842 stdumount
843 for i in `seq 0 7`; do
844 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
845 umount /dev/loop${i} 2>/dev/null;
846 losetup -d /dev/loop${i} 2>/dev/null;
847 fi;
848 done
849 rm -rf $BASEDIR/build
850 rm -rf $BASEDIR/cdrom
851 rm -rf $BASEDIR/packages
852 rm -rf $BASEDIR/log
853 if [ -h /tools ]; then
854 rm -f /tools
855 fi
856 beautify message DONE
857 ;;
858 downloadsrc)
859 if [ ! -d $BASEDIR/cache ]; then
860 mkdir $BASEDIR/cache
861 fi
862 mkdir -p $BASEDIR/log
863 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
864 FINISHED=0
865 cd $BASEDIR/lfs
866 for c in `seq $MAX_RETRIES`; do
867 if (( FINISHED==1 )); then
868 break
869 fi
870 FINISHED=1
871 cd $BASEDIR/lfs
872 for i in *; do
873 if [ -f "$i" -a "$i" != "Config" ]; then
874 echo -ne "Loading $i"
875 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
876 if [ $? -ne 0 ]; then
877 beautify message FAIL
878 FINISHED=0
879 else
880 if [ $c -eq 1 ]; then
881 beautify message DONE
882 fi
883 fi
884 fi
885 done
886 done
887 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
888 ERROR=0
889 for i in *; do
890 if [ -f "$i" -a "$i" != "Config" ]; then
891 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
892 if [ $? -ne 0 ]; then
893 echo -ne "MD5 difference in lfs/$i"
894 beautify message FAIL
895 ERROR=1
896 fi
897 fi
898 done
899 if [ $ERROR -eq 0 ]; then
900 echo -ne "${BOLD}all files md5sum match${NORMAL}"
901 beautify message DONE
902 else
903 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
904 beautify message FAIL
905 fi
906 cd - >/dev/null 2>&1
907 ;;
908 toolchain)
909 clear
910 prepareenv
911 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
912 buildtoolchain
913 BUILDMACHINE=`uname -m`
914 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
915 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
916 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.tar.gz \
917 build/{bin,etc,usr/bin,usr/local} \
918 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
919 log >> $LOGFILE
920 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.tar.gz \
921 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.md5
922 stdumount
923 ;;
924 gettoolchain)
925 BUILDMACHINE=`uname -m`
926 # arbitrary name to be updated in case of new toolchain package upload
927 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE
928 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
929 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
930 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
931 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
932 cd $BASEDIR/cache/toolchains
933 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
934 if [ $? -ne 0 ]; then
935 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
936 else
937 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
938 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
939 else
940 exiterror "$PACKAGE.md5 did not match, check downloaded package"
941 fi
942 fi
943 else
944 echo "Toolchain is already downloaded. Exiting..."
945 fi
946 ;;
947 othersrc)
948 prepareenv
949 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
950 chroot $LFS /tools/bin/env -i HOME=/root \
951 TERM=$TERM PS1='\u:\w\$ ' \
952 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
953 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
954 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
955 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
956 if [ $? -eq "0" ]; then
957 beautify message DONE
958 else
959 beautify message FAIL
960 fi
961 stdumount
962 ;;
963 git)
964 case "$2" in
965 update|up)
966 ## REMOVES ALL UNCOMMITTED CHANGES!
967 [ "$3" == "--force" ] && git checkout -f
968 git pull
969 ;;
970 commit|ci)
971 shift 2
972 git commit $*
973
974 [ "$?" -eq "0" ] || exiterror "git commit $* failed."
975
976 echo -e "${BOLD}Do you want to push, too? [y/N]${NORMAL}"
977 read
978 [ -z $REPLY ] && exit 0
979 for i in y Y j J; do
980 if [ "$i" == "$REPLY" ]; then
981 $0 git push
982 exit $?
983 fi
984 done
985 exiterror "\"$REPLY\" is not a valid answer."
986 ;;
987 dist)
988 git archive HEAD | gzip -9 > ${SNAME}-${VERSION}.tar.gz
989 ;;
990 diff|di)
991 echo -ne "Make a local diff to last revision"
992 git diff HEAD > ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff
993 evaluate 1
994 echo "Diff was successfully saved to ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff"
995 git diff --stat
996 ;;
997 push)
998 [ -z $GIT_USER ] && exiterror "You have to setup GIT_USER first."
999 GIT_URL="ssh://${GIT_USER}@git.ipfire.org/pub/git/ipfire-2.x"
1000
1001 git push ${GIT_URL} $3
1002 ;;
1003 log)
1004 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
1005 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
1006
1007 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
1008 ;;
1009 esac
1010 ;;
1011 uploadsrc)
1012 PWD=`pwd`
1013 if [ -z $IPFIRE_USER ]; then
1014 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1015 beautify message FAIL
1016 exit 1
1017 fi
1018
1019 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1020 REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1021
1022 cd $BASEDIR/cache/
1023 for file in $(ls -1 --ignore=toolchains); do
1024 grep -q "$file" <<<$REMOTE_FILES && continue
1025 NEW_FILES="$NEW_FILES $file"
1026 done
1027 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1028 cd $BASEDIR
1029 cd $PWD
1030 exit 0
1031 ;;
1032 batch)
1033 if [ "$2" = "--background" ]; then
1034 batch_script
1035 exit $?
1036 fi
1037 if [ `screen -ls | grep -q ipfire` ]; then
1038 echo "Build is already running, sorry!"
1039 exit 1
1040 else
1041 if [ "$2" = "--rebuild" ]; then
1042 export IPFIRE_REBUILD=1
1043 echo "REBUILD!"
1044 else
1045 export IPFIRE_REBUILD=0
1046 fi
1047 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1048 screen -dmS ipfire $0 batch --background
1049 evaluate 1
1050 exit 0
1051 fi
1052 ;;
1053 watch)
1054 watch_screen
1055 ;;
1056 pxe)
1057 case "$2" in
1058 start)
1059 start_tftpd
1060 ;;
1061 stop)
1062 stop_tftpd
1063 ;;
1064 reload|restart)
1065 reload_tftpd
1066 ;;
1067 esac
1068 exit 0
1069 ;;
1070 lang)
1071 update_langs
1072 ;;
1073 "")
1074 clear
1075 select name in "Exit" "IPFIRE: Downloadsrc" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "LOG: Tail" "Help"
1076 do
1077 case $name in
1078 "IPFIRE: Downloadsrc")
1079 $0 downloadsrc
1080 ;;
1081 "IPFIRE: Build (silent)")
1082 $0 build-silent
1083 ;;
1084 "IPFIRE: Watch Build")
1085 $0 watch
1086 ;;
1087 "IPFIRE: Batch")
1088 $0 batch
1089 ;;
1090 "IPFIRE: Clean")
1091 $0 clean
1092 ;;
1093 "Help")
1094 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1095 cat doc/make.sh-usage
1096 ;;
1097 "LOG: Tail")
1098 tail -f log/_*
1099 ;;
1100 "Exit")
1101 break
1102 ;;
1103 esac
1104 done
1105 ;;
1106 config)
1107 make_config
1108 ;;
1109 *)
1110 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1111 cat doc/make.sh-usage
1112 ;;
1113 esac