From: Michal Nowak Date: Tue, 13 Apr 2021 16:58:22 +0000 (+0200) Subject: Install BIND with "make DESTDIR= install" X-Git-Tag: v9.17.14~27^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=823bf3e79ba8f287b63d2e6ec5006d091c8c54e8;p=thirdparty%2Fbind9.git Install BIND with "make DESTDIR= install" BIND installation should be done by setting DESTDIR during "make install" not by setting prefix via ./configure. Make sure that installation with DESTDIR= works by checking that named binary and it's respective man page were installed and that well-known BIND9 directories - and only them - are present in DESTDIR. Also rename install path variable from BIND_INSTALL_PATH to INSTALL_PATH to avoid namespace clash in stress tests which use BIND_INSTALL_PATH variable to configure path to BIND9 binaries. --- diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 81f74328a5d..affa686c98c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -34,7 +34,7 @@ variables: WITH_READLINE_LIBEDIT: "--with-readline=libedit" WITH_READLINE_READLINE: "--with-readline=readline" - BIND_INSTALL_PATH: "${CI_PROJECT_DIR}/.local" + INSTALL_PATH: "${CI_PROJECT_DIR}/.local" # In multithreaded unit tests, abort on the first failure CMOCKA_TEST_ABORT: 1 @@ -233,7 +233,6 @@ stages: --with-cmocka \ --with-libxml2 \ --with-json-c \ - --prefix="${BIND_INSTALL_PATH}" \ $EXTRA_CONFIGURE \ || (test -s config.log && cat config.log; exit 1) @@ -274,8 +273,8 @@ stages: - *configure - *check_readline_setup - make -j${BUILD_PARALLEL_JOBS:-1} -k all V=1 - - test -z "${RUN_MAKE_INSTALL}" || make install - - test -z "${RUN_MAKE_INSTALL}" || sh util/check-make-install + - test -z "${RUN_MAKE_INSTALL}" || make DESTDIR="${INSTALL_PATH}" install + - test -z "${RUN_MAKE_INSTALL}" || DESTDIR="${INSTALL_PATH}" sh util/check-make-install - if [[ "${CFLAGS}" == *"-fsanitize=address"* ]]; then ( ! grep -F AddressSanitizer config.log ); fi - if test -z "${OUT_OF_TREE_WORKSPACE}" && test "$(git status --porcelain | grep -Ev '\?\?' | wc -l)" -gt "0"; then git status --short; exit 1; fi after_script: @@ -1420,10 +1419,10 @@ respdiff: - *setup_interfaces - *setup_softhsm - make -j${BUILD_PARALLEL_JOBS:-1} -k all V=1 - - make install + - make DESTDIR="${INSTALL_PATH}" install - git clone --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.isc.org/isc-private/bind-qa.git - cd bind-qa/bind9/stress - - DIG="${BIND_INSTALL_PATH}/bin/dig" WORKSPACE="${CI_PROJECT_DIR}" bash stress.sh + - LD_LIBRARY_PATH="${INSTALL_PATH}/usr/local/lib" BIND_INSTALL_PATH="${INSTALL_PATH}/usr/local" WORKSPACE="${CI_PROJECT_DIR}" bash stress.sh needs: - job: autoreconf artifacts: true diff --git a/util/check-make-install.in b/util/check-make-install.in index 061a9300e61..ed4c827e4b0 100644 --- a/util/check-make-install.in +++ b/util/check-make-install.in @@ -10,8 +10,10 @@ # information regarding copyright ownership. abs_top_srcdir=@abs_top_srcdir@ +abs_builddir=@abs_builddir@ prefix=@prefix@ includedir=@includedir@ +install_dir="${DESTDIR}@prefix@" headers_to_install() { find "${abs_top_srcdir}/lib" -name "*.h" -or -name "*.h.in" | @@ -31,4 +33,28 @@ for header in $(headers_to_install); do fi done +named_binary_path="${install_dir}/sbin/named" +if [ ! -x "${named_binary_path}" ]; then + echo "ERROR: ${named_binary_path} does not exist or is not executable" + status=1 +fi + +named_man_page_path="${install_dir}/share/man/man8/named.8" +if [ ! -f "${named_man_page_path}" ]; then + echo "ERROR: ${named_man_page_path} does not exist" + status=1 +fi + +if [ -n "${DESTDIR}" ]; then + for expected_subdir in bin etc include lib sbin share; do + echo "${install_dir}/${expected_subdir}" >> "${abs_builddir}/expected_dirs" + done + find "${install_dir}" -maxdepth 1 -mindepth 1 -type d | sort > "${abs_builddir}/existing_dirs" + if ! diff -u "${abs_builddir}/expected_dirs" "${abs_builddir}/existing_dirs"; then + echo "ERROR: Contents of DESTDIR do not match expectations" + status=1 + fi + rm -f "${abs_builddir}/expected_dirs" "${abs_builddir}/existing_dirs" +fi + exit $status