]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - make.sh
e229b98fa959515014a8abb8544ed7b5b502e4d8
[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 portmap
609 ipfiremake nfs
610 ipfiremake nmap
611 ipfiremake ncftp
612 ipfiremake etherwake
613 ipfiremake bwm-ng
614 ipfiremake tripwire
615 ipfiremake sysstat
616 ipfiremake vsftpd
617 ipfiremake strongswan
618 ipfiremake lsof
619 ipfiremake centerim
620 ipfiremake br2684ctl
621 ipfiremake pcmciautils
622 ipfiremake lm_sensors
623 ipfiremake liboping
624 ipfiremake collectd
625 ipfiremake lcd4linux
626 ipfiremake teamspeak
627 ipfiremake elinks
628 ipfiremake igmpproxy
629 ipfiremake fbset
630 ipfiremake sdl
631 ipfiremake qemu
632 ipfiremake qemu-kqemu
633 ipfiremake sane
634 ipfiremake netpbm
635 ipfiremake phpSANE
636 ipfiremake tunctl
637 ipfiremake nagios
638 ipfiremake nagios_nrpe
639 ipfiremake ebtables
640 ipfiremake fontconfig
641 ipfiremake freefont
642 ipfiremake directfb
643 ipfiremake dfb++
644 ipfiremake faad2
645 ipfiremake ffmpeg
646 ipfiremake videolan
647 ipfiremake vdr
648 ipfiremake w_scan
649 ipfiremake icecast
650 ipfiremake icegenerator
651 ipfiremake mpd
652 ipfiremake libmpdclient
653 ipfiremake mpc
654 ipfiremake git
655 ipfiremake squidclamav
656 ipfiremake bc
657 ipfiremake vnstat
658 ipfiremake vnstati
659 ipfiremake iw
660 ipfiremake wpa_supplicant
661 ipfiremake hostapd
662 ipfiremake urlgrabber
663 ipfiremake syslinux
664 ipfiremake tftpd
665 ipfiremake cpufrequtils
666 ipfiremake dbus
667 ipfiremake bluetooth
668 ipfiremake gutenprint
669 ipfiremake apcupsd
670 ipfiremake iperf
671 ipfiremake netcat
672 ipfiremake 7zip
673 ipfiremake lynis
674 ipfiremake splix
675 ipfiremake streamripper
676 ipfiremake sshfs
677 ipfiremake taglib
678 ipfiremake mediatomb
679 ipfiremake sslh
680 ipfiremake perl-gettext
681 ipfiremake vdradmin
682 ipfiremake miau
683 ipfiremake netsnmpd
684 ipfiremake perl-DBI
685 ipfiremake perl-DBD-mysql
686 ipfiremake cacti
687 ipfiremake icecc
688 ipfiremake openvmtools
689 ipfiremake nagiosql
690 ipfiremake iftop
691 ipfiremake motion
692 ipfiremake joe
693 ipfiremake nut
694 ipfiremake watchdog
695 ipfiremake libpri
696 ipfiremake dahdi
697 ipfiremake asterisk
698 ipfiremake lcr
699 ipfiremake usb_modeswitch
700 ipfiremake usb_modeswitch_data
701 ipfiremake zerofree
702 ipfiremake mdadm
703 ipfiremake eject
704 ipfiremake pound
705 ipfiremake minicom
706 ipfiremake ddrescue
707 ipfiremake imspector
708 ipfiremake miniupnpd
709 ipfiremake client175
710 ipfiremake powertop
711 ipfiremake parted
712 ipfiremake swig
713 ipfiremake python-m2crypto
714 ipfiremake wireless-regdb
715 ipfiremake crda
716 ipfiremake libsolv
717 ipfiremake python-distutils-extra
718 ipfiremake python-lzma
719 ipfiremake python-progressbar
720 ipfiremake python-xattr
721 ipfiremake intltool
722 ipfiremake pakfire3-deps
723 echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
724 cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
725 echo >> $BASEDIR/build/var/ipfire/firebuild
726 git log -1 >> $BASEDIR/build/var/ipfire/firebuild
727 echo >> $BASEDIR/build/var/ipfire/firebuild
728 git status >> $BASEDIR/build/var/ipfire/firebuild
729 echo >> $BASEDIR/build/var/ipfire/firebuild
730 cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
731 echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
732 if [ "$GIT_BRANCH" = "next" ]; then
733 echo "$NAME $VERSION - (Development Build: $GIT_LASTCOMMIT)" > $BASEDIR/build/etc/system-release
734 else
735 echo "$NAME $VERSION - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
736 fi
737 }
738
739 buildinstaller() {
740 # Run installer scripts one by one
741 LOGFILE="$BASEDIR/log/_build.installer.log"
742 export LOGFILE
743 ipfiremake as86
744 ipfiremake mbr
745 ipfiremake memtest
746 ipfiremake installer
747 cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
748 installmake strip
749 ipfiremake initrd
750 }
751
752 buildpackages() {
753 LOGFILE="$BASEDIR/log/_build.packages.log"
754 export LOGFILE
755 echo "... see detailed log in _build.*.log files" >> $LOGFILE
756
757
758 # Generating list of packages used
759 echo -n "Generating packages list from logs" | tee -a $LOGFILE
760 rm -f $BASEDIR/doc/packages-list
761 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
762 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
763 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
764 fi
765 done
766 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
767 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
768 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
769 rm -f $BASEDIR/doc/packages-list
770 # packages-list.txt is ready to be displayed for wiki page
771 beautify message DONE
772
773 # Update changelog
774 cd $BASEDIR
775 $0 git log
776
777 # Create images for install
778 ipfiremake cdrom ED=$IPFVER
779
780 # Check if there is a loop device for building in virtual environments
781 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
782 if [ "${MACHINE_TYPE}" != "arm" ]; then
783 ipfiremake usb-stick ED=$IPFVER
784 fi
785 ipfiremake flash-images ED=$IPFVER
786 fi
787
788 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
789
790 ipfirepackages
791
792 # Check if there is a loop device for building in virtual environments
793 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
794 cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
795 cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
796 ipfiremake xen-image ED=$IPFVER
797 rm -rf $LFS/install/packages/linux-xen-*.ipfire
798 rm -rf $LFS/install/packages/meta-linux-xen
799 fi
800 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
801
802 cd $BASEDIR
803 for i in `ls *.bz2 *.img.gz *.iso`; do
804 md5sum $i > $i.md5
805 done
806 cd $PWD
807
808 # Cleanup
809 stdumount
810 rm -rf $BASEDIR/build/tmp/*
811
812 # Generating total list of files
813 echo -n "Generating files list from logs" | tee -a $LOGFILE
814 rm -f $BASEDIR/log/FILES
815 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
816 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
817 echo "##" >>$BASEDIR/log/FILES
818 echo "## `basename $i`" >>$BASEDIR/log/FILES
819 echo "##" >>$BASEDIR/log/FILES
820 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
821 fi
822 done
823 beautify message DONE
824
825 cd $PWD
826 }
827
828 ipfirepackages() {
829 ipfiremake core-updates
830 for i in $(ls -1 $BASEDIR/config/rootfiles/packages); do
831 if [ -e $BASEDIR/lfs/$i ]; then
832 ipfiredist $i
833 else
834 echo -n $i
835 beautify message SKIP
836 fi
837 done
838 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
839 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
840 rm -rf $BASEDIR/build/install/packages/*
841 }
842
843 # See what we're supposed to do
844 case "$1" in
845 build)
846 clear
847 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
848 #only restore on a clean disk
849 if [ ! -f log/cleanup-toolchain-2-tools ]; then
850 if [ ! -n "$PACKAGE" ]; then
851 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
852 prepareenv
853 buildtoolchain
854 else
855 PACKAGENAME=${PACKAGE%.tar.gz}
856 beautify build_stage "Packaged toolchain compilation"
857 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
858 tar zxf $PACKAGE
859 prepareenv
860 else
861 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
862 fi
863 fi
864 else
865 echo -n "Using installed toolchain" | tee -a $LOGFILE
866 beautify message SKIP
867 prepareenv
868 fi
869
870 beautify build_start
871 beautify build_stage "Building LFS"
872 buildbase
873
874 beautify build_stage "Building IPFire"
875 buildipfire
876
877 beautify build_stage "Building installer"
878 buildinstaller
879
880 beautify build_stage "Building packages"
881 buildpackages
882
883 beautify build_stage "Checking Logfiles for new Files"
884
885 cd $BASEDIR
886 tools/checknewlog.pl
887 cd $PWD
888
889 beautify build_end
890 ;;
891 shell)
892 # enter a shell inside LFS chroot
893 # may be used to changed kernel settings
894 prepareenv
895 entershell
896 ;;
897 clean)
898 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
899 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
900 $LOSETUP -d $i 2>/dev/null
901 done
902 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
903 umount $i
904 done
905 stdumount
906 for i in `seq 0 7`; do
907 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
908 umount /dev/loop${i} 2>/dev/null;
909 losetup -d /dev/loop${i} 2>/dev/null;
910 fi;
911 done
912 rm -rf $BASEDIR/build
913 rm -rf $BASEDIR/cdrom
914 rm -rf $BASEDIR/packages
915 rm -rf $BASEDIR/log
916 if [ -h /tools ]; then
917 rm -f /tools
918 fi
919 rm -f $BASEDIR/ipfire-*
920 beautify message DONE
921 ;;
922 downloadsrc)
923 if [ ! -d $BASEDIR/cache ]; then
924 mkdir $BASEDIR/cache
925 fi
926 mkdir -p $BASEDIR/log
927 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
928 FINISHED=0
929 cd $BASEDIR/lfs
930 for c in `seq $MAX_RETRIES`; do
931 if (( FINISHED==1 )); then
932 break
933 fi
934 FINISHED=1
935 cd $BASEDIR/lfs
936 for i in *; do
937 if [ -f "$i" -a "$i" != "Config" ]; then
938 lfsmakecommoncheck ${i} || continue
939
940 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
941 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
942 if [ $? -ne 0 ]; then
943 beautify message FAIL
944 FINISHED=0
945 else
946 if [ $c -eq 1 ]; then
947 beautify message DONE
948 fi
949 fi
950 fi
951 done
952 done
953 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
954 ERROR=0
955 for i in *; do
956 if [ -f "$i" -a "$i" != "Config" ]; then
957 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
958 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
959 if [ $? -ne 0 ]; then
960 echo -ne "MD5 difference in lfs/$i"
961 beautify message FAIL
962 ERROR=1
963 fi
964 fi
965 done
966 if [ $ERROR -eq 0 ]; then
967 echo -ne "${BOLD}all files md5sum match${NORMAL}"
968 beautify message DONE
969 else
970 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
971 beautify message FAIL
972 fi
973 cd - >/dev/null 2>&1
974 ;;
975 toolchain)
976 clear
977 prepareenv
978 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
979 buildtoolchain
980 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
981 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
982 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
983 build/{bin,etc,usr/bin,usr/local} \
984 build/tools/{bin,etc,*-linux-gnu*,include,lib,libexec,sbin,share,var} \
985 log >> $LOGFILE
986 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
987 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
988 stdumount
989 ;;
990 gettoolchain)
991 # arbitrary name to be updated in case of new toolchain package upload
992 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
993 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
994 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
995 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
996 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
997 cd $BASEDIR/cache/toolchains
998 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
999 if [ $? -ne 0 ]; then
1000 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1001 else
1002 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1003 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1004 else
1005 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1006 fi
1007 fi
1008 else
1009 echo "Toolchain is already downloaded. Exiting..."
1010 fi
1011 ;;
1012 othersrc)
1013 prepareenv
1014 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1015 chroot $LFS /tools/bin/env -i HOME=/root \
1016 TERM=$TERM PS1='\u:\w\$ ' \
1017 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1018 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1019 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1020 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1021 if [ $? -eq "0" ]; then
1022 beautify message DONE
1023 else
1024 beautify message FAIL
1025 fi
1026 stdumount
1027 ;;
1028 git)
1029 case "$2" in
1030 update|up)
1031 ## REMOVES ALL UNCOMMITTED CHANGES!
1032 [ "$3" == "--force" ] && git checkout -f
1033 git pull
1034 ;;
1035 commit|ci)
1036 shift 2
1037 git commit $*
1038
1039 [ "$?" -eq "0" ] || exiterror "git commit $* failed."
1040
1041 echo -e "${BOLD}Do you want to push, too? [y/N]${NORMAL}"
1042 read
1043 [ -z $REPLY ] && exit 0
1044 for i in y Y j J; do
1045 if [ "$i" == "$REPLY" ]; then
1046 $0 git push
1047 exit $?
1048 fi
1049 done
1050 exiterror "\"$REPLY\" is not a valid answer."
1051 ;;
1052 dist)
1053 git archive HEAD | gzip -9 > ${SNAME}-${VERSION}.tar.gz
1054 ;;
1055 diff|di)
1056 echo -ne "Make a local diff to last revision"
1057 git diff HEAD > ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff
1058 evaluate 1
1059 echo "Diff was successfully saved to ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff"
1060 git diff --stat
1061 ;;
1062 push)
1063 [ -z $GIT_USER ] && exiterror "You have to setup GIT_USER first."
1064 GIT_URL="ssh://${GIT_USER}@git.ipfire.org/pub/git/ipfire-2.x"
1065
1066 git push ${GIT_URL} $3
1067 ;;
1068 log)
1069 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
1070 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
1071
1072 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
1073 ;;
1074 esac
1075 ;;
1076 uploadsrc)
1077 PWD=`pwd`
1078 if [ -z $IPFIRE_USER ]; then
1079 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1080 beautify message FAIL
1081 exit 1
1082 fi
1083
1084 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1085 REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1086
1087 cd $BASEDIR/cache/
1088 for file in $(ls -1 --ignore=toolchains); do
1089 grep -q "$file" <<<$REMOTE_FILES && continue
1090 NEW_FILES="$NEW_FILES $file"
1091 done
1092 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1093 cd $BASEDIR
1094 cd $PWD
1095 exit 0
1096 ;;
1097 batch)
1098 if [ "$2" = "--background" ]; then
1099 batch_script
1100 exit $?
1101 fi
1102 if [ `screen -ls | grep -q ipfire` ]; then
1103 echo "Build is already running, sorry!"
1104 exit 1
1105 else
1106 if [ "$2" = "--rebuild" ]; then
1107 export IPFIRE_REBUILD=1
1108 echo "REBUILD!"
1109 else
1110 export IPFIRE_REBUILD=0
1111 fi
1112 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1113 screen -dmS ipfire $0 batch --background
1114 evaluate 1
1115 exit 0
1116 fi
1117 ;;
1118 watch)
1119 watch_screen
1120 ;;
1121 pxe)
1122 case "$2" in
1123 start)
1124 start_tftpd
1125 ;;
1126 stop)
1127 stop_tftpd
1128 ;;
1129 reload|restart)
1130 reload_tftpd
1131 ;;
1132 esac
1133 exit 0
1134 ;;
1135 lang)
1136 update_langs
1137 ;;
1138 "")
1139 clear
1140 select name in "Exit" "IPFIRE: Downloadsrc" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "LOG: Tail" "Help"
1141 do
1142 case $name in
1143 "IPFIRE: Downloadsrc")
1144 $0 downloadsrc
1145 ;;
1146 "IPFIRE: Build (silent)")
1147 $0 build-silent
1148 ;;
1149 "IPFIRE: Watch Build")
1150 $0 watch
1151 ;;
1152 "IPFIRE: Batch")
1153 $0 batch
1154 ;;
1155 "IPFIRE: Clean")
1156 $0 clean
1157 ;;
1158 "Help")
1159 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1160 cat doc/make.sh-usage
1161 ;;
1162 "LOG: Tail")
1163 tail -f log/_*
1164 ;;
1165 "Exit")
1166 break
1167 ;;
1168 esac
1169 done
1170 ;;
1171 config)
1172 make_config
1173 ;;
1174 *)
1175 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1176 cat doc/make.sh-usage
1177 ;;
1178 esac