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