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