]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Install BIND with "make DESTDIR=<PATH> install"
authorMichal Nowak <mnowak@isc.org>
Tue, 13 Apr 2021 16:58:22 +0000 (18:58 +0200)
committerMichal Nowak <mnowak@isc.org>
Tue, 25 May 2021 09:21:33 +0000 (11:21 +0200)
BIND installation should be done by setting DESTDIR during "make
install" not by setting prefix via ./configure.

Make sure that installation with DESTDIR=<PATH> 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.

.gitlab-ci.yml
util/check-make-install.in

index 81f74328a5d65a4edb97eddce7a1895b826d5efc..affa686c98cb4f6bad60f036c228fb08e47ba65f 100644 (file)
@@ -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
index 061a9300e61b7e54cd25461b64334117381c2a10..ed4c827e4b0cb4ad95707aea5acf8769dd77b949 100644 (file)
 # 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