#!/bin/bash #tool/distro specific functions for fetching, building and installing dependencies fetch_source () { # systemd download_untar "$REQUIRED_URL" "src/" # starting with systemd 212 a new way of setting global environment is supported # meaning we don't have to apply the patch needed til that version. # patch src/core/socket.c if activated in the config file if [ "x$REQUIRED_XATTR_PATCH" = "xyes" ]; then pinfo "Patching 'src/core/socket.c' ..." # patch it if [ -e "src/$REQUIRED_VERSION/src/core/socket.c" ]; then sed -i 's/^#include $/#include \n#include /g' "src/$REQUIRED_VERSION/src/core/socket.c" \ || perror "Could not patch 'src/$REQUIRED_VERSION/src/core/socket.c'" else perror "'src/$REQUIRED_VERSION/src/core/socket.c' does not exist." fi fi # now check if the old fix needs to be applied # NOTE: only for systemd-204 if [ "x${REQUIRED_VERSION#systemd-}" = "x204" ]; then # Patch PATH, HOME, USER environment # TODO: Newer systemd versions support DefaultEnvironment=xxx in /etc/systemd/system.conf # However, there were lots of changes after systemd 204, so we didn't update yet # See http://cgit.freedesktop.org/systemd/systemd/tree/NEWS for changes. patch -p0 src/systemd-*/src/core/main.c < ${MODULE_DIR}/systemd-openslx.patch || perror "Failed to apply openslx systemd patch." # fix mtd_probe.h missing an include for stdint.h, those types probably used to # be defined elsewhere and that was change with newer libc versions patch -p0 src/systemd-*/src/udev/mtd_probe/mtd_probe.h < ${MODULE_DIR}/systemd-204-mtd_probe.patch || perror "Failed to apply mtd_probe.h patch." # systemd-204 requires gperf 3.0.4 for generating internal code, # starting with ubuntu 17.10, gperf is only available in version 3.1.1. # launchpad has the correct version: https://launchpad.net/ubuntu/artful/amd64/gperf/3.0.4-2 if which gperf &> /dev/null; then LOCAL_GPERF_VER="$(gperf --version | head -1 | awk '{print $3}')" if [ "x${LOCAL_GPERF_VER}" != "x3.0.4" ]; then # bad version, no force removal perror "gperf version '3.0.4' expected but '${LOCAL_GPERF_VER}' is installed. Please remove it and try again." fi else # no gperf installed, install it from launchpad REQUIRED_GPERF_URL="http://launchpadlibrarian.net/214035609/gperf_3.0.4-2_amd64.deb" pinfo "Downloading gperf from '${REQUIRED_GPERF_URL}'..." if ! wget -P "${MODULE_WORK_DIR}" "${REQUIRED_GPERF_URL}"; then perror "Failed to download '${REQUIRED_GPERF_URL}'." fi pinfo "Installing gperf from '${MODULE_WORK_DIR}/${REQUIRED_GPERF_URL##*/}'..." if ! dpkg -i "${MODULE_WORK_DIR}/${REQUIRED_GPERF_URL##*/}"; then perror "Failed to install '${MODULE_WORK_DIR}/${REQUIRED_GPERF_URL##*/}'." fi fi elif [ "x${REQUIRED_VERSION#systemd-}" = "x229" ]; then patch -p0 src/systemd-*/src/basic/path-util.h < ${MODULE_DIR}/systemd-openslx-229.patch || perror "Failed to apply openslx systemd patch." else # TODO use the above hint for setting environmenet through /etc/systemd/system.conf pinfo "Missing..." fi # libkmod download_untar "$REQUIRED_LIBKMOD_URL" "src/" } build () { #build libkmod pinfo "Building libkmod" cd "${MODULE_WORK_DIR}/src/$REQUIRED_LIBKMOD_VERSION" ./configure || perror "./configure kmod failed." make || perror "kmod make failed." DESTDIR="${MODULE_BUILD_DIR}" make install || perror "kmod make install failed." cd - &> /dev/null #build systemd pinfo "Building systemd" cd "${MODULE_WORK_DIR}/src/$REQUIRED_VERSION" pinfo "calling configure in ${MODULE_WORK_DIR}/src/$REQUIRED_VERSION" # Save potentially pre-used paths/flages OLDLDFLAGS="$LDFLAGS" OLDCPPFLAGS="$CPPFLAGS" OLDPKG_CONFIG_PATH="$PKG_CONFIG_PATH" OLDLD_LIBRARY_PATH="$LD_LIBRARY_PATH" export LDFLAGS="$LDFLAGS -L${MODULE_BUILD_DIR}/usr/lib" export CPPFLAGS="-I${MODULE_BUILD_DIR}/usr/include" export PKG_CONFIG_PATH="${MODULE_BUILD_DIR}/usr/lib64/pkgconfig:${MODULE_BUILD_DIR}/usr/lib/pkgconfig" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${MODULE_BUILD_DIR}/usr/lib:${MODULE_BUILD_DIR}/usr/lib64" [ ! -e "./configure" ] && ./autogen.sh ./configure \ --disable-manpages \ --enable-split-usr \ --sysconfdir="/etc" \ --enable-gtk-doc-html=no \ --disable-nls \ --disable-microhttpd \ --disable-bootchart \ --disable-quotacheck \ --disable-hostnamed \ --disable-timedated \ --disable-localed \ --disable-coredump \ --disable-keymap \ --without-python \ --enable-blkid \ --enable-acl \ --enable-pam \ --enable-kmod \ --with-pamlibdir="$SYS_PAM_MODULES_PATH" \ || perror "configure failed." pinfo "calling make" make || perror "make failed." pinfo "calling make install" DESTDIR="${MODULE_BUILD_DIR}" make install || perror "make install failed." cd - &> /dev/null # Restore used flags/paths: export LDFLAGS="$OLDLDFLAGS" export CPPFLAGS="$OLDCPPFLAGS" export PKG_CONFIG_PATH="$OLDPKG_CONFIG_PATH" export LD_LIBRARY_PATH="$OLDLD_LIBRARY_PATH" } post_copy() { : }