# along with IPFire; if not, write to the Free Software #
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
# #
-# Copyright (C) 2007-2018 IPFire Team <info@ipfire.org>. #
+# Copyright (C) 2007-2019 IPFire Team <info@ipfire.org>. #
# #
############################################################################
#
NAME="IPFire" # Software name
SNAME="ipfire" # Short name
-VERSION="2.21" # Version number
-CORE="125" # Core Level (Filename)
-PAKFIRE_CORE="124" # Core Level (PAKFIRE)
+# If you update the version don't forget to update backupiso and add it to core update
+VERSION="2.23" # Version number
+CORE="137" # Core Level (Filename)
+PAKFIRE_CORE="137" # Core Level (PAKFIRE)
GIT_BRANCH=`git rev-parse --abbrev-ref HEAD` # Git Branch
SLOGAN="www.ipfire.org" # Software slogan
CONFIG_ROOT=/var/ipfire # Configuration rootdir
GIT_TAG=$(git tag | tail -1) # Git Tag
GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8) # Last commit
-TOOLCHAINVER=20181030
+TOOLCHAINVER=20190814
###############################################################################
#
CXXFLAGS="${CFLAGS}"
# Determine parallelism
- if [ -z "${MAKETUNING}" ]; then
- # We assume that each process consumes about
- # 192MB of memory. Therefore we find out how
- # many processes fit into memory.
- local mem_max=$(( ${HOST_MEM} / 192 ))
-
- local processors="$(system_processors)"
- local cpu_max=$(( ${processors} + 1 ))
-
- local parallelism
- if [ ${mem_max} -lt ${cpu_max} ]; then
- parallelism=${mem_max}
- else
- parallelism=${cpu_max}
- fi
-
- # limit to -j23 because perl will not build
- # more
- if [ ${parallelism} -gt 23 ]; then
- parallelism=23
- fi
-
- MAKETUNING="-j${parallelism}"
+ # We assume that each process consumes about
+ # 128MB of memory. Therefore we find out how
+ # many processes fit into memory.
+ local mem_max=$(( ${SYSTEM_MEMORY} / 128 ))
+ local cpu_max=$(( ${SYSTEM_PROCESSORS} + 1 ))
+
+ local parallelism
+ if [ ${mem_max} -lt ${cpu_max} ]; then
+ parallelism=${mem_max}
+ else
+ parallelism=${cpu_max}
fi
+ # Use this as default PARALLELISM
+ DEFAULT_PARALLELISM="${parallelism}"
+
# Compression parameters
# We use mode 8 for reasonable memory usage when decompressing
# but with overall good compression
# We need to limit memory because XZ uses too much when running
# in parallel and it isn't very smart in limiting itself.
# We allow XZ to use up to 70% of all system memory.
- local xz_memory=$(( HOST_MEM * 7 / 10 ))
+ local xz_memory=$(( SYSTEM_MEMORY * 7 / 10 ))
# XZ memory cannot be larger than 2GB on 32 bit systems
case "${build_arch}" in
configure_build_guess() {
case "${HOST_ARCH}" in
- x86_64|i686|i586)
+ x86_64)
+ echo "x86_64"
+ ;;
+ i?86)
echo "i586"
;;
umount $BASEDIR/build/usr/src/lfs 2>/dev/null;
umount $BASEDIR/build/usr/src/log 2>/dev/null;
umount $BASEDIR/build/usr/src/src 2>/dev/null;
+ umount $BASEDIR/build/usr/src 2>/dev/null;
}
now() {
# Setup environment
set +h
LC_ALL=POSIX
- export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
+ export LFS LC_ALL CFLAGS CXXFLAGS DEFAULT_PARALLELISM
unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
# Make some extra directories
mkdir -p "${BASEDIR}/build${TOOLS_DIR}" 2>/dev/null
mkdir -p $BASEDIR/build/{etc,usr/src} 2>/dev/null
mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
- mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
+ mkdir -p $BASEDIR/{cache,ccache/${BUILD_ARCH}} 2>/dev/null
+
+ if [ "${ENABLE_RAMDISK}" = "on" ]; then
+ mkdir -p $BASEDIR/build/usr/src
+ mount -t tmpfs tmpfs -o size=4G,nr_inodes=1M,mode=1777 $BASEDIR/build/usr/src
+ fi
+
mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
mount --bind /proc $BASEDIR/build/proc
mount --bind /sys $BASEDIR/build/sys
mount --bind $BASEDIR/cache $BASEDIR/build/usr/src/cache
- mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
+ mount --bind $BASEDIR/ccache/${BUILD_ARCH} $BASEDIR/build/usr/src/ccache
mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
mount --bind $BASEDIR/doc $BASEDIR/build/usr/src/doc
mount --bind $BASEDIR/html $BASEDIR/build/usr/src/html
SYSTEM_RELEASE="${SYSTEM_RELEASE} - Development Build: $GIT_BRANCH/$GIT_LASTCOMMIT$GIT_STATUS"
;;
esac
+
+ # Setup ccache cache size
+ enterchroot ccache --max-size="${CCACHE_CACHE_SIZE}" >/dev/null
}
enterchroot() {
CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \
KVER="${KVER}" \
XZ_OPT="${XZ_OPT}" \
+ DEFAULT_PARALLELISM="${DEFAULT_PARALLELISM}" \
+ SYSTEM_PROCESSORS="${SYSTEM_PROCESSORS}" \
+ SYSTEM_MEMORY="${SYSTEM_MEMORY}" \
$(fake_environ) \
$(qemu_environ) \
"$@"
CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK}" \
CFLAGS="${CFLAGS}" \
CXXFLAGS="${CXXFLAGS}" \
- MAKETUNING="${MAKETUNING}" \
+ DEFAULT_PARALLELISM="${DEFAULT_PARALLELISM}" \
+ SYSTEM_PROCESSORS="${SYSTEM_PROCESSORS}" \
+ SYSTEM_MEMORY="${SYSTEM_MEMORY}" \
make -f $* \
TOOLCHAIN=1 \
TOOLS_DIR="${TOOLS_DIR}" \
enterchroot \
${EXTRA_PATH}bash -x -c "cd /usr/src/lfs && \
- MAKETUNING=${MAKETUNING} \
make -f $* \
LFS_BASEDIR=/usr/src install" \
>> ${LOGFILE} 2>&1 &
# Fake kernel version, because some of the packages do not compile
# with kernel 3.0 and later.
- env="${env} UTS_RELEASE=${KVER}"
+ env="${env} UTS_RELEASE=${KVER}-ipfire"
# Fake machine version.
env="${env} UTS_MACHINE=${BUILD_ARCH}"
return 0
}
+# Default settings
+CCACHE_CACHE_SIZE="4G"
+ENABLE_RAMDISK="auto"
+
# Load configuration file
if [ -f .config ]; then
. .config
unset TARGET_ARCH
fi
-# Get the amount of memory in this build system
-HOST_MEM=$(system_memory)
+# Get some information about the host system
+SYSTEM_PROCESSORS="$(system_processors)"
+SYSTEM_MEMORY="$(system_memory)"
if [ -n "${BUILD_ARCH}" ]; then
configure_build "${BUILD_ARCH}"
configure_build "default"
fi
+# Automatically enable/disable ramdisk usage
+if [ "${ENABLE_RAMDISK}" = "auto" ]; then
+ # Enable only when the host system has 4GB of RAM or more
+ if [ ${SYSTEM_MEMORY} -ge 3900 ]; then
+ ENABLE_RAMDISK="on"
+ fi
+fi
+
buildtoolchain() {
local error=false
case "${BUILD_ARCH}:${HOST_ARCH}" in
lfsmake1 make
lfsmake1 patch
lfsmake1 perl
+ lfsmake1 python3
lfsmake1 sed
lfsmake1 tar
lfsmake1 texinfo
lfsmake2 backup
lfsmake2 openssl
[ "${BUILD_ARCH}" = "i586" ] && lfsmake2 openssl KCFG='-sse2'
- lfsmake2 openssl-compat
lfsmake2 popt
+ lfsmake2 libedit
lfsmake2 libusb
lfsmake2 libusb-compat
lfsmake2 libpcap
lfsmake2 xr819-firmware
lfsmake2 zd1211-firmware
lfsmake2 rpi-firmware
+ lfsmake2 intel-microcode
+ lfsmake2 pcengines-apu-firmware
lfsmake2 bc
lfsmake2 u-boot MKIMAGE=1
lfsmake2 cpio
lfsmake2 linux-initrd KCFG="-multi"
;;
esac
- lfsmake2 intel-microcode
lfsmake2 xtables-addons USPACE="1"
lfsmake2 libgpg-error
lfsmake2 libgcrypt
lfsmake2 libassuan
lfsmake2 nettle
lfsmake2 json-c
+ lfsmake2 libconfig
lfsmake2 libevent
lfsmake2 libevent2
lfsmake2 expat
lfsmake2 attr
lfsmake2 acl
lfsmake2 libcap
+ lfsmake2 libcap-ng
lfsmake2 pciutils
lfsmake2 usbutils
lfsmake2 libxml2
lfsmake2 beep
lfsmake2 libarchive
lfsmake2 cmake
+ lfsmake2 libssh
lfsmake2 cdrkit
lfsmake2 dosfstools
lfsmake2 reiserfsprogs
lfsmake2 misc-progs
lfsmake2 nano
lfsmake2 URI
+ lfsmake2 perl-CGI
+ lfsmake2 perl-Switch
lfsmake2 HTML-Tagset
lfsmake2 HTML-Parser
lfsmake2 HTML-Template
lfsmake2 setserial
lfsmake2 setup
lfsmake2 libdnet
- lfsmake2 daq
- lfsmake2 snort
+ lfsmake2 rust
+ lfsmake2 jansson
+ lfsmake2 yaml
+ lfsmake2 libhtp
+ lfsmake2 colm
+ lfsmake2 ragel
+ lfsmake2 hyperscan
+ lfsmake2 suricata
lfsmake2 oinkmaster
+ lfsmake2 ids-ruleset-sources
lfsmake2 squid
lfsmake2 squidguard
lfsmake2 calamaris
lfsmake2 fetchmail
lfsmake2 cyrus-imapd
lfsmake2 clamav
+ lfsmake2 perl-NetAddr-IP
lfsmake2 spamassassin
+ lfsmake2 perl-Net-LibIDN
lfsmake2 amavisd
lfsmake2 dma
lfsmake2 alsa
lfsmake2 flac
lfsmake2 lame
lfsmake2 sox
+ lfsmake2 soxr
lfsmake2 libshout
lfsmake2 xvid
lfsmake2 libmpeg2
lfsmake2 spice
lfsmake2 sdl
lfsmake2 libusbredir
+ lfsmake2 libseccomp
lfsmake2 qemu
lfsmake2 sane
lfsmake2 netpbm
lfsmake2 nagios_nrpe
lfsmake2 nagios-plugins
lfsmake2 icinga
+ lfsmake2 observium-agent
lfsmake2 ebtables
lfsmake2 directfb
lfsmake2 faad2
+ lfsmake2 alac
lfsmake2 ffmpeg
lfsmake2 vdr
lfsmake2 vdr_streamdev
lfsmake2 mpd
lfsmake2 libmpdclient
lfsmake2 mpc
+ lfsmake2 perl-Net-CIDR-Lite
lfsmake2 perl-Net-SMTP-SSL
lfsmake2 perl-MIME-Base64
lfsmake2 perl-Authen-SASL
lfsmake2 perl-gettext
lfsmake2 perl-Sort-Naturally
lfsmake2 vdradmin
- lfsmake2 miau
lfsmake2 perl-DBI
lfsmake2 perl-DBD-SQLite
lfsmake2 perl-File-ReadBackwards
lfsmake2 watchdog
lfsmake2 libpri
lfsmake2 libsrtp
- lfsmake2 jansson
lfsmake2 asterisk
lfsmake2 usb_modeswitch
lfsmake2 usb_modeswitch_data
lfsmake2 swig
lfsmake2 u-boot
lfsmake2 u-boot-kirkwood
+ lfsmake2 u-boot-friendlyarm
lfsmake2 python-typing
lfsmake2 python-m2crypto
lfsmake2 wireless-regdb
lfsmake2 python-progressbar
lfsmake2 python-xattr
lfsmake2 ddns
+ lfsmake2 python3-setuptools
+ lfsmake2 python3-setuptools-scm
lfsmake2 python3-six
lfsmake2 python3-dateutil
lfsmake2 python3-jmespath
lfsmake2 python3-rsa
lfsmake2 python3-pyasn1
lfsmake2 python3-botocore
+ lfsmake2 python3-llfuse
+ lfsmake2 python3-msgpack
lfsmake2 aws-cli
lfsmake2 transmission
lfsmake2 dpfhack
lfsmake2 mdns-repeater
lfsmake2 i2c-tools
lfsmake2 nss-myhostname
+ lfsmake2 dehydrated
+ lfsmake2 shairport-sync
+ lfsmake2 borgbackup
+ lfsmake2 knot
+ lfsmake2 spectre-meltdown-checker
+ lfsmake2 zabbix_agentd
+ lfsmake2 flashrom
+ lfsmake2 firmware-update
+ lfsmake2 tshark
+ lfsmake2 geoip-generator
+ lfsmake2 speedtest-cli
}
buildinstaller() {
rm -f $BASEDIR/ipfire-*
print_status DONE
;;
+docker)
+ # Build the docker image if it does not exist, yet
+ if ! docker images -a | grep -q ^ipfire-builder; then
+ if docker build -t ipfire-builder ${BASEDIR}/tools/docker; then
+ print_status DONE
+ else
+ print_status FAIL
+ exit 1
+ fi
+ fi
+
+ # Run the container and enter a shell
+ docker run -it --privileged -v "${BASEDIR}:/build" -w "/build" ipfire-builder bash -l
+ ;;
downloadsrc)
if [ ! -d $BASEDIR/cache ]; then
mkdir $BASEDIR/cache