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