]> git.ipfire.org Git - ipfire-2.x.git/blob - make.sh
Revert "Drop paxctl"
[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-2017 IPFire Team <info@ipfire.org>. #
21 # #
22 ############################################################################
23 #
24
25 NAME="IPFire" # Software name
26 SNAME="ipfire" # Short name
27 VERSION="2.19" # Version number
28 CORE="111" # Core Level (Filename)
29 PAKFIRE_CORE="111" # Core Level (PAKFIRE)
30 GIT_BRANCH=`git rev-parse --abbrev-ref HEAD` # 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 # Flash and Xen Downloader
36 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
37 GIT_TAG=$(git tag | tail -1) # Git Tag
38 GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8) # Last commit
39
40 TOOLCHAINVER=20170518
41
42 # New architecture variables
43 HOST_ARCH="$(uname -m)"
44
45 # Debian specific settings
46 if [ ! -e /etc/debian_version ]; then
47 FULLPATH=`which $0`
48 else
49 if [ -x /usr/bin/realpath ]; then
50 FULLPATH=`/usr/bin/realpath $0`
51 else
52 echo "ERROR: Need to do apt-get install realpath"
53 exit 1
54 fi
55 fi
56
57 PWD=`pwd`
58 BASENAME=`basename $0`
59 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
60 LOGFILE=$BASEDIR/log/_build.preparation.log
61 export BASEDIR LOGFILE
62 DIR_CHK=$BASEDIR/cache/check
63 mkdir $BASEDIR/log/ 2>/dev/null
64
65 # Include funtions
66 . tools/make-functions
67
68 if [ -f .config ]; then
69 . .config
70 fi
71
72 if [ -n "${BUILD_ARCH}" ]; then
73 configure_build "${BUILD_ARCH}"
74 elif [ -n "${TARGET_ARCH}" ]; then
75 configure_build "${TARGET_ARCH}"
76 unset TARGET_ARCH
77 else
78 configure_build "default"
79 fi
80
81 if [ -z $EDITOR ]; then
82 for i in nano emacs vi; do
83 EDITOR=$(which $i 2>/dev/null)
84 if ! [ -z $EDITOR ]; then
85 export EDITOR=$EDITOR
86 break
87 fi
88 done
89 [ -z $EDITOR ] && exiterror "You should have installed an editor."
90 fi
91
92
93 prepareenv() {
94 ############################################################################
95 # #
96 # Are we running the right shell? #
97 # #
98 ############################################################################
99 if [ ! "$BASH" ]; then
100 exiterror "BASH environment variable is not set. You're probably running the wrong shell."
101 fi
102
103 if [ -z "${BASH_VERSION}" ]; then
104 exiterror "Not running BASH shell."
105 fi
106
107
108 ############################################################################
109 # #
110 # Trap on emergency exit #
111 # #
112 ############################################################################
113 trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
114
115
116 ############################################################################
117 # #
118 # Resetting our nice level #
119 # #
120 ############################################################################
121 echo -ne "Resetting our nice level to $NICE" | tee -a $LOGFILE
122 renice $NICE $$ > /dev/null
123 if [ `nice` != "$NICE" ]; then
124 beautify message FAIL
125 exiterror "Failed to set correct nice level"
126 else
127 beautify message DONE
128 fi
129
130
131 ############################################################################
132 # #
133 # Checking if running as root user #
134 # #
135 ############################################################################
136 echo -ne "Checking if we're running as root user" | tee -a $LOGFILE
137 if [ `id -u` != 0 ]; then
138 beautify message FAIL
139 exiterror "Not building as root"
140 else
141 beautify message DONE
142 fi
143
144
145 ############################################################################
146 # #
147 # Checking for necessary temporary space #
148 # #
149 ############################################################################
150 echo -ne "Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
151 BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
152 BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
153 if (( 2048000 > $BASE_ASPACE )); then
154 BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
155 if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
156 beautify message FAIL
157 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
158 fi
159 else
160 beautify message DONE
161 fi
162
163 ############################################################################
164 # #
165 # Building Linux From Scratch system #
166 # #
167 ############################################################################
168 # Set umask
169 umask 022
170
171 # Set LFS Directory
172 LFS=$BASEDIR/build
173
174 # Check /tools symlink
175 if [ -h /tools ]; then
176 rm -f /tools
177 fi
178 if [ ! -a /tools ]; then
179 ln -s $BASEDIR/build/tools /
180 fi
181 if [ ! -h /tools ]; then
182 exiterror "Could not create /tools symbolic link."
183 fi
184
185 # Setup environment
186 set +h
187 LC_ALL=POSIX
188 if [ -z $MAKETUNING ]; then
189 CPU_COUNT="$(getconf _NPROCESSORS_ONLN 2>/dev/null)"
190 if [ -z "${CPU_COUNT}" ]; then
191 CPU_COUNT=1
192 fi
193
194 MAKETUNING="-j$(( ${CPU_COUNT} * 2 + 1 ))"
195 fi
196 export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
197 unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
198
199 # Make some extra directories
200 mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
201 mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
202 mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
203 mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
204
205 mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
206 mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
207
208 # Make all sources and proc available under lfs build
209 mount --bind /dev $BASEDIR/build/dev
210 mount --bind /dev/pts $BASEDIR/build/dev/pts
211 mount --bind /dev/shm $BASEDIR/build/dev/shm
212 mount --bind /proc $BASEDIR/build/proc
213 mount --bind /sys $BASEDIR/build/sys
214 mount --bind $BASEDIR/cache $BASEDIR/build/usr/src/cache
215 mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
216 mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
217 mount --bind $BASEDIR/doc $BASEDIR/build/usr/src/doc
218 mount --bind $BASEDIR/html $BASEDIR/build/usr/src/html
219 mount --bind $BASEDIR/langs $BASEDIR/build/usr/src/langs
220 mount --bind $BASEDIR/lfs $BASEDIR/build/usr/src/lfs
221 mount --bind $BASEDIR/log $BASEDIR/build/usr/src/log
222 mount --bind $BASEDIR/src $BASEDIR/build/usr/src/src
223
224 # Run LFS static binary creation scripts one by one
225 export CCACHE_DIR=$BASEDIR/ccache
226 export CCACHE_COMPRESS=1
227 export CCACHE_COMPILERCHECK="string:toolchain-${TOOLCHAINVER} ${BUILD_ARCH}"
228
229 # Remove pre-install list of installed files in case user erase some files before rebuild
230 rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
231
232 # Prepare string for /etc/system-release.
233 SYSTEM_RELEASE="${NAME} ${VERSION} (${BUILD_ARCH})"
234 if [ "$(git status -s | wc -l)" == "0" ]; then
235 GIT_STATUS=""
236 else
237 GIT_STATUS="-dirty"
238 fi
239 case "$GIT_BRANCH" in
240 core*|beta?|rc?)
241 SYSTEM_RELEASE="${SYSTEM_RELEASE} - $GIT_BRANCH$GIT_STATUS"
242 ;;
243 *)
244 SYSTEM_RELEASE="${SYSTEM_RELEASE} - Development Build: $GIT_BRANCH/$GIT_LASTCOMMIT$GIT_STATUS"
245 ;;
246 esac
247 }
248
249 buildtoolchain() {
250 local error=false
251 case "${BUILD_ARCH}:${HOST_ARCH}" in
252 # x86_64
253 x86_64:x86_64)
254 # This is working.
255 ;;
256
257 # x86
258 i586:i586|i586:i686|i586:x86_64)
259 # These are working.
260 ;;
261 i586:*)
262 error=true
263 ;;
264
265 # ARM
266 arvm7hl:armv7hl|armv7hl:armv7l)
267 # These are working.
268 ;;
269
270 armv5tel:armv5tel|armv5tel:armv5tejl|armv5tel:armv6l|armv5tel:armv7l|armv5tel:aarch64)
271 # These are working.
272 ;;
273 armv5tel:*)
274 error=true
275 ;;
276 esac
277
278 ${error} && \
279 exiterror "Cannot build ${BUILD_ARCH} toolchain on $(uname -m). Please use the download if any."
280
281 local gcc=$(type -p gcc)
282 if [ -z "${gcc}" ]; then
283 exiterror "Could not find GCC. You will need a working build enviroment in order to build the toolchain."
284 fi
285
286 LOGFILE="$BASEDIR/log/_build.toolchain.log"
287 export LOGFILE
288
289 lfsmake1 stage1
290 lfsmake1 ccache PASS=1
291 lfsmake1 binutils PASS=1
292 lfsmake1 gcc PASS=1
293 lfsmake1 linux KCFG="-headers"
294 lfsmake1 glibc
295 lfsmake1 gcc PASS=L
296 lfsmake1 binutils PASS=2
297 lfsmake1 gcc PASS=2
298 lfsmake1 ccache PASS=2
299 lfsmake1 tcl
300 lfsmake1 expect
301 lfsmake1 dejagnu
302 lfsmake1 pkg-config
303 lfsmake1 ncurses
304 lfsmake1 bash
305 lfsmake1 bzip2
306 lfsmake1 automake
307 lfsmake1 coreutils
308 lfsmake1 diffutils
309 lfsmake1 findutils
310 lfsmake1 gawk
311 lfsmake1 gettext
312 lfsmake1 grep
313 lfsmake1 gzip
314 lfsmake1 m4
315 lfsmake1 make
316 lfsmake1 patch
317 lfsmake1 perl
318 lfsmake1 sed
319 lfsmake1 tar
320 lfsmake1 texinfo
321 lfsmake1 xz
322 lfsmake1 fake-environ
323 lfsmake1 cleanup-toolchain
324 }
325
326 buildbase() {
327 LOGFILE="$BASEDIR/log/_build.base.log"
328 export LOGFILE
329 lfsmake2 stage2
330 lfsmake2 linux KCFG="-headers"
331 lfsmake2 man-pages
332 lfsmake2 glibc
333 lfsmake2 tzdata
334 lfsmake2 cleanup-toolchain
335 lfsmake2 zlib
336 lfsmake2 binutils
337 lfsmake2 gmp
338 lfsmake2 gmp-compat
339 lfsmake2 mpfr
340 lfsmake2 libmpc
341 lfsmake2 file
342 lfsmake2 gcc
343 lfsmake2 sed
344 lfsmake2 autoconf
345 lfsmake2 automake
346 lfsmake2 berkeley
347 lfsmake2 coreutils
348 lfsmake2 iana-etc
349 lfsmake2 m4
350 lfsmake2 bison
351 lfsmake2 ncurses-compat
352 lfsmake2 ncurses
353 lfsmake2 procps
354 lfsmake2 libtool
355 lfsmake2 perl
356 lfsmake2 readline
357 lfsmake2 readline-compat
358 lfsmake2 bzip2
359 lfsmake2 pcre
360 lfsmake2 pcre-compat
361 lfsmake2 bash
362 lfsmake2 diffutils
363 lfsmake2 e2fsprogs
364 lfsmake2 ed
365 lfsmake2 findutils
366 lfsmake2 flex
367 lfsmake2 gawk
368 lfsmake2 gettext
369 lfsmake2 grep
370 lfsmake2 groff
371 lfsmake2 gperf
372 lfsmake2 gzip
373 lfsmake2 hostname
374 lfsmake2 iproute2
375 lfsmake2 jwhois
376 lfsmake2 kbd
377 lfsmake2 less
378 lfsmake2 make
379 lfsmake2 man
380 lfsmake2 kmod
381 lfsmake2 net-tools
382 lfsmake2 patch
383 lfsmake2 psmisc
384 lfsmake2 shadow
385 lfsmake2 sysklogd
386 lfsmake2 sysvinit
387 lfsmake2 tar
388 lfsmake2 texinfo
389 lfsmake2 util-linux
390 lfsmake2 udev
391 lfsmake2 vim
392 lfsmake2 xz
393 lfsmake2 paxctl
394 }
395
396 buildipfire() {
397 LOGFILE="$BASEDIR/log/_build.ipfire.log"
398 export LOGFILE
399 lfsmake2 configroot
400 lfsmake2 initscripts
401 lfsmake2 backup
402 lfsmake2 pkg-config
403 lfsmake2 libusb
404 lfsmake2 libusb-compat
405 lfsmake2 libpcap
406 lfsmake2 ppp
407 lfsmake2 pptp
408 lfsmake2 unzip
409 lfsmake2 which
410 lfsmake2 linux-firmware
411 lfsmake2 ath10k-firmware
412 lfsmake2 dvb-firmwares
413 lfsmake2 mt7601u-firmware
414 lfsmake2 zd1211-firmware
415 lfsmake2 rpi-firmware
416 lfsmake2 bc
417 lfsmake2 u-boot
418 lfsmake2 cpio
419 lfsmake2 mdadm
420 lfsmake2 dracut
421 lfsmake2 lvm2
422 lfsmake2 multipath-tools
423 lfsmake2 freetype
424 lfsmake2 grub
425 lfsmake2 libmnl
426 lfsmake2 libnfnetlink
427 lfsmake2 libnetfilter_queue
428 lfsmake2 libnetfilter_conntrack
429 lfsmake2 libnetfilter_cthelper
430 lfsmake2 libnetfilter_cttimeout
431 lfsmake2 iptables
432
433 case "${BUILD_ARCH}" in
434 x86_64)
435 lfsmake2 linux KCFG=""
436 lfsmake2 backports KCFG=""
437 lfsmake2 e1000e KCFG=""
438 lfsmake2 igb KCFG=""
439 lfsmake2 ixgbe KCFG=""
440 lfsmake2 xtables-addons KCFG=""
441 lfsmake2 linux-initrd KCFG=""
442 ;;
443 i586)
444 # x86-pae (Native and new XEN) kernel build
445 lfsmake2 linux KCFG="-pae"
446 lfsmake2 backports KCFG="-pae"
447 lfsmake2 e1000e KCFG="-pae"
448 lfsmake2 igb KCFG="-pae"
449 lfsmake2 ixgbe KCFG="-pae"
450 lfsmake2 xtables-addons KCFG="-pae"
451 lfsmake2 linux-initrd KCFG="-pae"
452
453 # x86 kernel build
454 lfsmake2 linux KCFG=""
455 lfsmake2 backports KCFG=""
456 lfsmake2 e1000e KCFG=""
457 lfsmake2 igb KCFG=""
458 lfsmake2 ixgbe KCFG=""
459 lfsmake2 xtables-addons KCFG=""
460 lfsmake2 linux-initrd KCFG=""
461 ;;
462
463 armv5tel)
464 # arm-rpi (Raspberry Pi) kernel build
465 lfsmake2 linux KCFG="-rpi"
466 lfsmake2 backports KCFG="-rpi"
467 lfsmake2 xtables-addons KCFG="-rpi"
468 lfsmake2 linux-initrd KCFG="-rpi"
469
470 # arm multi platform (Panda, Wandboard ...) kernel build
471 lfsmake2 linux KCFG="-multi"
472 lfsmake2 backports KCFG="-multi"
473 lfsmake2 e1000e KCFG="-multi"
474 lfsmake2 igb KCFG="-multi"
475 lfsmake2 ixgbe KCFG="-multi"
476 lfsmake2 xtables-addons KCFG="-multi"
477 lfsmake2 linux-initrd KCFG="-multi"
478
479 # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build
480 lfsmake2 linux KCFG="-kirkwood"
481 lfsmake2 backports KCFG="-kirkwood"
482 lfsmake2 e1000e KCFG="-kirkwood"
483 lfsmake2 igb KCFG="-kirkwood"
484 lfsmake2 ixgbe KCFG="-kirkwood"
485 lfsmake2 xtables-addons KCFG="-kirkwood"
486 lfsmake2 linux-initrd KCFG="-kirkwood"
487 ;;
488 esac
489 lfsmake2 xtables-addons USPACE="1"
490 lfsmake2 openssl
491 [ "${BUILD_ARCH}" = "i586" ] && lfsmake2 openssl KCFG='-sse2'
492 lfsmake2 libgpg-error
493 lfsmake2 libgcrypt
494 lfsmake2 libassuan
495 lfsmake2 nettle
496 lfsmake2 libevent
497 lfsmake2 libevent2
498 lfsmake2 libevent2-compat
499 lfsmake2 expat
500 lfsmake2 unbound
501 lfsmake2 gnutls
502 lfsmake2 bind
503 lfsmake2 dhcp
504 lfsmake2 dhcpcd
505 lfsmake2 boost
506 lfsmake2 linux-atm
507 lfsmake2 gdbm
508 lfsmake2 pam
509 lfsmake2 curl
510 lfsmake2 tcl
511 lfsmake2 sqlite
512 lfsmake2 libffi
513 lfsmake2 python
514 lfsmake2 python3
515 lfsmake2 ca-certificates
516 lfsmake2 fireinfo
517 lfsmake2 libnet
518 lfsmake2 libnl
519 lfsmake2 libnl-3
520 lfsmake2 libidn
521 lfsmake2 nasm
522 lfsmake2 libjpeg
523 lfsmake2 libjpeg-compat
524 lfsmake2 libexif
525 lfsmake2 libpng
526 lfsmake2 libtiff
527 lfsmake2 libart
528 lfsmake2 gd
529 lfsmake2 popt
530 lfsmake2 pcre
531 lfsmake2 slang
532 lfsmake2 newt
533 lfsmake2 libsmooth
534 lfsmake2 attr
535 lfsmake2 acl
536 lfsmake2 libcap
537 lfsmake2 pciutils
538 lfsmake2 usbutils
539 lfsmake2 libxml2
540 lfsmake2 libxslt
541 lfsmake2 BerkeleyDB
542 lfsmake2 mysql
543 lfsmake2 cyrus-sasl
544 lfsmake2 openldap
545 lfsmake2 apache2
546 lfsmake2 php
547 lfsmake2 web-user-interface
548 lfsmake2 flag-icons
549 lfsmake2 jquery
550 lfsmake2 arping
551 lfsmake2 beep
552 lfsmake2 dvdrtools
553 lfsmake2 dosfstools
554 lfsmake2 reiserfsprogs
555 lfsmake2 xfsprogs
556 lfsmake2 sysfsutils
557 lfsmake2 fuse
558 lfsmake2 ntfs-3g
559 lfsmake2 ethtool
560 lfsmake2 ez-ipupdate
561 lfsmake2 fcron
562 lfsmake2 perl-GD
563 lfsmake2 GD-Graph
564 lfsmake2 GD-TextUtil
565 lfsmake2 perl-Device-SerialPort
566 lfsmake2 perl-Device-Modem
567 lfsmake2 perl-Apache-Htpasswd
568 lfsmake2 gnupg
569 lfsmake2 hdparm
570 lfsmake2 sdparm
571 lfsmake2 mtools
572 lfsmake2 whatmask
573 lfsmake2 conntrack-tools
574 lfsmake2 libupnp
575 lfsmake2 ipaddr
576 lfsmake2 iputils
577 lfsmake2 l7-protocols
578 lfsmake2 mISDNuser
579 lfsmake2 capi4k-utils
580 lfsmake2 hwdata
581 lfsmake2 logrotate
582 lfsmake2 logwatch
583 lfsmake2 misc-progs
584 lfsmake2 nano
585 lfsmake2 URI
586 lfsmake2 HTML-Tagset
587 lfsmake2 HTML-Parser
588 lfsmake2 HTML-Template
589 lfsmake2 Compress-Zlib
590 lfsmake2 Digest
591 lfsmake2 Digest-SHA1
592 lfsmake2 Digest-HMAC
593 lfsmake2 libwww-perl
594 lfsmake2 Net-DNS
595 lfsmake2 Net-IPv4Addr
596 lfsmake2 Net_SSLeay
597 lfsmake2 IO-Stringy
598 lfsmake2 IO-Socket-SSL
599 lfsmake2 Unix-Syslog
600 lfsmake2 Mail-Tools
601 lfsmake2 MIME-Tools
602 lfsmake2 Net-Server
603 lfsmake2 Convert-TNEF
604 lfsmake2 Convert-UUlib
605 lfsmake2 Archive-Tar
606 lfsmake2 Archive-Zip
607 lfsmake2 Text-Tabs+Wrap
608 lfsmake2 Locale-Country
609 lfsmake2 XML-Parser
610 lfsmake2 Crypt-PasswdMD5
611 lfsmake2 Net-Telnet
612 lfsmake2 python-setuptools
613 lfsmake2 python-clientform
614 lfsmake2 python-mechanize
615 lfsmake2 python-feedparser
616 lfsmake2 python-rssdler
617 lfsmake2 python-inotify
618 lfsmake2 python-docutils
619 lfsmake2 python-daemon
620 lfsmake2 python-ipaddress
621 lfsmake2 glib
622 lfsmake2 GeoIP
623 lfsmake2 fwhits
624 lfsmake2 noip_updater
625 lfsmake2 ntp
626 lfsmake2 openssh
627 lfsmake2 fontconfig
628 lfsmake2 dejavu-fonts-ttf
629 lfsmake2 freefont
630 lfsmake2 pixman
631 lfsmake2 cairo
632 lfsmake2 pango
633 lfsmake2 rrdtool
634 lfsmake2 setserial
635 lfsmake2 setup
636 lfsmake2 libdnet
637 lfsmake2 daq
638 lfsmake2 snort
639 lfsmake2 oinkmaster
640 lfsmake2 squid
641 lfsmake2 squidguard
642 lfsmake2 calamaris
643 lfsmake2 tcpdump
644 lfsmake2 traceroute
645 lfsmake2 vlan
646 lfsmake2 wireless
647 lfsmake2 pakfire
648 lfsmake2 spandsp
649 lfsmake2 lzo
650 lfsmake2 openvpn
651 lfsmake2 pammysql
652 lfsmake2 mpage
653 lfsmake2 dbus
654 lfsmake2 intltool
655 lfsmake2 libdaemon
656 lfsmake2 cups
657 lfsmake2 lcms2
658 lfsmake2 ghostscript
659 lfsmake2 qpdf
660 lfsmake2 poppler
661 lfsmake2 cups-filters
662 lfsmake2 epson-inkjet-printer-escpr
663 lfsmake2 foomatic
664 lfsmake2 hplip
665 lfsmake2 cifs-utils
666 lfsmake2 krb5
667 lfsmake2 samba
668 lfsmake2 sudo
669 lfsmake2 mc
670 lfsmake2 wget
671 lfsmake2 bridge-utils
672 lfsmake2 screen
673 lfsmake2 smartmontools
674 lfsmake2 htop
675 lfsmake2 chkconfig
676 lfsmake2 postfix
677 lfsmake2 fetchmail
678 lfsmake2 cyrus-imapd
679 lfsmake2 openmailadmin
680 lfsmake2 clamav
681 lfsmake2 spamassassin
682 lfsmake2 amavisd
683 lfsmake2 dma
684 lfsmake2 alsa
685 lfsmake2 mpfire
686 lfsmake2 guardian
687 lfsmake2 libid3tag
688 lfsmake2 libmad
689 lfsmake2 libogg
690 lfsmake2 libvorbis
691 lfsmake2 libdvbpsi
692 lfsmake2 flac
693 lfsmake2 lame
694 lfsmake2 sox
695 lfsmake2 libshout
696 lfsmake2 xvid
697 lfsmake2 libmpeg2
698 lfsmake2 libarchive
699 lfsmake2 cmake
700 lfsmake2 gnump3d
701 lfsmake2 rsync
702 lfsmake2 tcpwrapper
703 lfsmake2 libtirpc
704 lfsmake2 rpcbind
705 lfsmake2 nfs
706 lfsmake2 gnu-netcat
707 lfsmake2 ncat
708 lfsmake2 nmap
709 lfsmake2 ncftp
710 lfsmake2 etherwake
711 lfsmake2 bwm-ng
712 lfsmake2 sysstat
713 lfsmake2 vsftpd
714 lfsmake2 strongswan
715 lfsmake2 rng-tools
716 lfsmake2 lsof
717 lfsmake2 br2684ctl
718 lfsmake2 pcmciautils
719 lfsmake2 lm_sensors
720 lfsmake2 liboping
721 lfsmake2 collectd
722 lfsmake2 elinks
723 lfsmake2 igmpproxy
724 lfsmake2 fbset
725 lfsmake2 opus
726 lfsmake2 python-six
727 lfsmake2 python-pyparsing
728 lfsmake2 spice-protocol
729 lfsmake2 spice
730 lfsmake2 sdl
731 lfsmake2 libusbredir
732 lfsmake2 qemu
733 lfsmake2 sane
734 lfsmake2 netpbm
735 lfsmake2 phpSANE
736 lfsmake2 tunctl
737 lfsmake2 netsnmpd
738 lfsmake2 nagios
739 lfsmake2 nagios_nrpe
740 lfsmake2 icinga
741 lfsmake2 ebtables
742 lfsmake2 directfb
743 lfsmake2 faad2
744 lfsmake2 ffmpeg
745 lfsmake2 vdr
746 lfsmake2 vdr_streamdev
747 lfsmake2 vdr_epgsearch
748 lfsmake2 vdr_dvbapi
749 lfsmake2 vdr_eepg
750 lfsmake2 w_scan
751 lfsmake2 icecast
752 lfsmake2 icegenerator
753 lfsmake2 mpd
754 lfsmake2 libmpdclient
755 lfsmake2 mpc
756 lfsmake2 perl-Net-SMTP-SSL
757 lfsmake2 perl-MIME-Base64
758 lfsmake2 perl-Authen-SASL
759 lfsmake2 perl-MIME-Lite
760 lfsmake2 perl-Email-Date-Format
761 lfsmake2 git
762 lfsmake2 squidclamav
763 lfsmake2 vnstat
764 lfsmake2 iw
765 lfsmake2 wpa_supplicant
766 lfsmake2 hostapd
767 lfsmake2 pycurl
768 lfsmake2 urlgrabber
769 lfsmake2 syslinux
770 lfsmake2 tftpd
771 lfsmake2 cpufrequtils
772 lfsmake2 bluetooth
773 lfsmake2 gutenprint
774 lfsmake2 apcupsd
775 lfsmake2 iperf
776 lfsmake2 iperf3
777 lfsmake2 7zip
778 lfsmake2 lynis
779 lfsmake2 streamripper
780 lfsmake2 sshfs
781 lfsmake2 taglib
782 #lfsmake2 mediatomb
783 lfsmake2 sslh
784 lfsmake2 perl-gettext
785 lfsmake2 perl-Sort-Naturally
786 lfsmake2 vdradmin
787 lfsmake2 miau
788 lfsmake2 perl-DBI
789 lfsmake2 perl-DBD-mysql
790 lfsmake2 perl-DBD-SQLite
791 lfsmake2 perl-File-ReadBackwards
792 lfsmake2 cacti
793 lfsmake2 openvmtools
794 lfsmake2 nagiosql
795 lfsmake2 motion
796 lfsmake2 joe
797 lfsmake2 monit
798 lfsmake2 nut
799 lfsmake2 watchdog
800 lfsmake2 libpri
801 lfsmake2 libsrtp
802 lfsmake2 asterisk
803 lfsmake2 lcr
804 lfsmake2 usb_modeswitch
805 lfsmake2 usb_modeswitch_data
806 lfsmake2 zerofree
807 lfsmake2 pound
808 lfsmake2 minicom
809 lfsmake2 ddrescue
810 lfsmake2 miniupnpd
811 lfsmake2 client175
812 lfsmake2 powertop
813 lfsmake2 parted
814 lfsmake2 swig
815 lfsmake2 python-m2crypto
816 lfsmake2 wireless-regdb
817 lfsmake2 crda
818 lfsmake2 libsolv
819 lfsmake2 python-distutils-extra
820 lfsmake2 python-lzma
821 lfsmake2 python-progressbar
822 lfsmake2 python-xattr
823 lfsmake2 ddns
824 lfsmake2 transmission
825 lfsmake2 dpfhack
826 lfsmake2 lcd4linux
827 lfsmake2 mtr
828 lfsmake2 minidlna
829 lfsmake2 acpid
830 lfsmake2 fping
831 lfsmake2 telnet
832 lfsmake2 xinetd
833 lfsmake2 gpgme
834 lfsmake2 pygpgme
835 lfsmake2 pakfire3
836 lfsmake2 stress
837 lfsmake2 libstatgrab
838 lfsmake2 sarg
839 lfsmake2 check_mk_agent
840 lfsmake2 nginx
841 lfsmake2 sendEmail
842 lfsmake2 sysbench
843 lfsmake2 strace
844 lfsmake2 elfutils
845 lfsmake2 ltrace
846 lfsmake2 ipfire-netboot
847 lfsmake2 lcdproc
848 lfsmake2 bitstream
849 lfsmake2 multicat
850 lfsmake2 keepalived
851 lfsmake2 ipvsadm
852 lfsmake2 perl-Carp-Clan
853 lfsmake2 perl-Date-Calc
854 lfsmake2 perl-Date-Manip
855 lfsmake2 perl-File-Tail
856 lfsmake2 perl-TimeDate
857 lfsmake2 swatch
858 lfsmake2 tor
859 lfsmake2 arm
860 lfsmake2 wavemon
861 lfsmake2 iptraf-ng
862 lfsmake2 iotop
863 lfsmake2 stunnel
864 lfsmake2 sslscan
865 lfsmake2 owncloud
866 lfsmake2 bacula
867 lfsmake2 batctl
868 lfsmake2 perl-PDF-API2
869 lfsmake2 squid-accounting
870 lfsmake2 pigz
871 lfsmake2 tmux
872 lfsmake2 perl-Text-CSV_XS
873 lfsmake2 swconfig
874 lfsmake2 haproxy
875 lfsmake2 ipset
876 lfsmake2 lua
877 lfsmake2 dnsdist
878 lfsmake2 bird
879 lfsmake2 dmidecode
880 lfsmake2 mcelog
881 lfsmake2 rtpproxy
882 lfsmake2 util-macros
883 lfsmake2 libpciaccess
884 lfsmake2 libyajl
885 lfsmake2 libvirt
886 lfsmake2 python3-libvirt
887 lfsmake2 freeradius
888 lfsmake2 perl-common-sense
889 lfsmake2 perl-inotify2
890 lfsmake2 perl-Net-IP
891 }
892
893 buildinstaller() {
894 # Run installer scripts one by one
895 LOGFILE="$BASEDIR/log/_build.installer.log"
896 export LOGFILE
897 lfsmake2 memtest
898 lfsmake2 installer
899 lfsmake1 strip
900 }
901
902 buildpackages() {
903 LOGFILE="$BASEDIR/log/_build.packages.log"
904 export LOGFILE
905 echo "... see detailed log in _build.*.log files" >> $LOGFILE
906
907
908 # Generating list of packages used
909 echo -n "Generating packages list from logs" | tee -a $LOGFILE
910 rm -f $BASEDIR/doc/packages-list
911 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
912 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
913 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
914 fi
915 done
916 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
917 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
918 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
919 rm -f $BASEDIR/doc/packages-list
920 # packages-list.txt is ready to be displayed for wiki page
921 beautify message DONE
922
923 # Update changelog
924 cd $BASEDIR
925 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
926 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
927 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
928
929 # Create images for install
930 lfsmake2 cdrom
931
932 # Check if there is a loop device for building in virtual environments
933 modprobe loop 2>/dev/null
934 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
935 lfsmake2 flash-images
936 lfsmake2 flash-images SCON=1
937 fi
938
939 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
940
941 ipfirepackages
942
943 lfsmake2 xen-image
944 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
945
946 cd $BASEDIR
947
948 # remove not useable iso on armv5tel (needed to build flash images)
949 [ "${BUILD_ARCH}" = "armv5tel" ] && rm -rf *.iso
950
951 for i in `ls *.bz2 *.img.gz *.iso`; do
952 md5sum $i > $i.md5
953 done
954 cd $PWD
955
956 # Cleanup
957 stdumount
958 rm -rf $BASEDIR/build/tmp/*
959
960 # Generating total list of files
961 echo -n "Generating files list from logs" | tee -a $LOGFILE
962 rm -f $BASEDIR/log/FILES
963 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
964 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
965 echo "##" >>$BASEDIR/log/FILES
966 echo "## `basename $i`" >>$BASEDIR/log/FILES
967 echo "##" >>$BASEDIR/log/FILES
968 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
969 fi
970 done
971 beautify message DONE
972
973 cd $PWD
974 }
975
976 ipfirepackages() {
977 lfsmake2 core-updates
978
979 local i
980 for i in $(find $BASEDIR/config/rootfiles/packages{/${BUILD_ARCH},} -maxdepth 1 -type f); do
981 i=$(basename ${i})
982 if [ -e $BASEDIR/lfs/$i ]; then
983 ipfiredist $i
984 else
985 echo -n $i
986 beautify message SKIP
987 fi
988 done
989 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
990 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
991 rm -rf $BASEDIR/build/install/packages/*
992 }
993
994 while [ $# -gt 0 ]; do
995 case "${1}" in
996 --target=*)
997 configure_build "${1#--target=}"
998 ;;
999 -*)
1000 exiterror "Unknown configuration option: ${1}"
1001 ;;
1002 *)
1003 # Found a command, so exit options parsing.
1004 break
1005 ;;
1006 esac
1007 shift
1008 done
1009
1010 # See what we're supposed to do
1011 case "$1" in
1012 build)
1013 clear
1014 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-${BUILD_ARCH}.tar.gz 2> /dev/null | head -n 1`
1015 #only restore on a clean disk
1016 if [ ! -e "${BASEDIR}/build/tools/.toolchain-successful" ]; then
1017 if [ ! -n "$PACKAGE" ]; then
1018 beautify build_stage "Full toolchain compilation"
1019 prepareenv
1020 buildtoolchain
1021 else
1022 PACKAGENAME=${PACKAGE%.tar.gz}
1023 beautify build_stage "Packaged toolchain compilation"
1024 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
1025 tar zxf $PACKAGE
1026 prepareenv
1027 else
1028 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
1029 fi
1030 fi
1031 else
1032 echo -n "Using installed toolchain" | tee -a $LOGFILE
1033 beautify message SKIP
1034 prepareenv
1035 fi
1036
1037 beautify build_start
1038 beautify build_stage "Building LFS"
1039 buildbase
1040
1041 beautify build_stage "Building IPFire"
1042 buildipfire
1043
1044 beautify build_stage "Building installer"
1045 buildinstaller
1046
1047 beautify build_stage "Building packages"
1048 buildpackages
1049
1050 beautify build_stage "Checking Logfiles for new Files"
1051
1052 cd $BASEDIR
1053 tools/checknewlog.pl
1054 tools/checkrootfiles
1055 cd $PWD
1056
1057 beautify build_end
1058 ;;
1059 shell)
1060 # enter a shell inside LFS chroot
1061 # may be used to changed kernel settings
1062 prepareenv
1063 entershell
1064 ;;
1065 clean)
1066 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
1067 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1068 $LOSETUP -d $i 2>/dev/null
1069 done
1070 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1071 umount $i
1072 done
1073 stdumount
1074 for i in `seq 0 7`; do
1075 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1076 umount /dev/loop${i} 2>/dev/null;
1077 losetup -d /dev/loop${i} 2>/dev/null;
1078 fi;
1079 done
1080 rm -rf $BASEDIR/build
1081 rm -rf $BASEDIR/cdrom
1082 rm -rf $BASEDIR/packages
1083 rm -rf $BASEDIR/log
1084 if [ -h /tools ]; then
1085 rm -f /tools
1086 fi
1087 rm -f $BASEDIR/ipfire-*
1088 beautify message DONE
1089 ;;
1090 downloadsrc)
1091 if [ ! -d $BASEDIR/cache ]; then
1092 mkdir $BASEDIR/cache
1093 fi
1094 mkdir -p $BASEDIR/log
1095 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
1096 FINISHED=0
1097 cd $BASEDIR/lfs
1098 for c in `seq $MAX_RETRIES`; do
1099 if (( FINISHED==1 )); then
1100 break
1101 fi
1102 FINISHED=1
1103 cd $BASEDIR/lfs
1104 for i in *; do
1105 if [ -f "$i" -a "$i" != "Config" ]; then
1106 lfsmakecommoncheck ${i} || continue
1107
1108 make -s -f $i LFS_BASEDIR=$BASEDIR BUILD_ARCH="${BUILD_ARCH}" \
1109 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1110 if [ $? -ne 0 ]; then
1111 beautify message FAIL
1112 FINISHED=0
1113 else
1114 if [ $c -eq 1 ]; then
1115 beautify message DONE
1116 fi
1117 fi
1118 fi
1119 done
1120 done
1121 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1122 ERROR=0
1123 for i in *; do
1124 if [ -f "$i" -a "$i" != "Config" ]; then
1125 lfsmakecommoncheck ${i} > /dev/null || continue
1126 make -s -f $i LFS_BASEDIR=$BASEDIR BUILD_ARCH="${BUILD_ARCH}" \
1127 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1128 if [ $? -ne 0 ]; then
1129 echo -ne "MD5 difference in lfs/$i"
1130 beautify message FAIL
1131 ERROR=1
1132 fi
1133 fi
1134 done
1135 if [ $ERROR -eq 0 ]; then
1136 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1137 beautify message DONE
1138 else
1139 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1140 beautify message FAIL
1141 fi
1142 cd - >/dev/null 2>&1
1143 ;;
1144 toolchain)
1145 clear
1146 prepareenv
1147 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1148 buildtoolchain
1149 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for ${BUILD_ARCH}" | tee -a $LOGFILE
1150 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1151 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-${BUILD_ARCH}.tar.gz \
1152 build/tools build/bin/sh log >> $LOGFILE
1153 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-${BUILD_ARCH}.tar.gz \
1154 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-${BUILD_ARCH}.md5
1155 stdumount
1156 ;;
1157 gettoolchain)
1158 # arbitrary name to be updated in case of new toolchain package upload
1159 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-${BUILD_ARCH}
1160 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1161 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1162 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1163 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for ${BUILD_ARCH}" | tee -a $LOGFILE
1164 cd $BASEDIR/cache/toolchains
1165 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1166 if [ $? -ne 0 ]; then
1167 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for ${BUILD_ARCH} machine" | tee -a $LOGFILE
1168 else
1169 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1170 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1171 else
1172 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1173 fi
1174 fi
1175 else
1176 echo "Toolchain is already downloaded. Exiting..."
1177 fi
1178 ;;
1179 othersrc)
1180 prepareenv
1181 echo -ne "`date -u '+%b %e %T'`: Build sources iso for ${BUILD_ARCH}" | tee -a $LOGFILE
1182 chroot $LFS /tools/bin/env -i HOME=/root \
1183 TERM=$TERM PS1='\u:\w\$ ' \
1184 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1185 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" BUILD_ARCH="${BUILD_ARCH}" \
1186 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1187 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1188 if [ $? -eq "0" ]; then
1189 beautify message DONE
1190 else
1191 beautify message FAIL
1192 fi
1193 stdumount
1194 ;;
1195 uploadsrc)
1196 PWD=`pwd`
1197 if [ -z $IPFIRE_USER ]; then
1198 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1199 beautify message FAIL
1200 exit 1
1201 fi
1202
1203 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1204 REMOTE_FILES=$(echo "ls -1" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1205
1206 for file in ${BASEDIR}/cache/*; do
1207 [ -d "${file}" ] && continue
1208 grep -q "$(basename ${file})" <<<$REMOTE_FILES && continue
1209 NEW_FILES="$NEW_FILES $file"
1210 done
1211 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1212 cd $BASEDIR
1213 cd $PWD
1214 exit 0
1215 ;;
1216 lang)
1217 update_langs
1218 ;;
1219 *)
1220 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1221 cat doc/make.sh-usage
1222 ;;
1223 esac