From: Yi Zhao Date: Fri, 21 Feb 2025 08:12:06 +0000 (+0800) Subject: kea: make kea environment available to lfc process X-Git-Tag: 2025-04-walnascar~412 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=34f1392aef4d5fa402600b21f6d7a47cd735cfd4;p=thirdparty%2Fopenembedded%2Fopenembedded-core.git kea: make kea environment available to lfc process If the location of the log lock file is changed using the environment variable KEA_LOCKFILE_DIR, the kea-dhcp process will work properly, but the lfc (lease file cleanup) process spawned by it will not inherit this value and use the default path[1], which will cause the kea server to print the following message when running: kea-dhcp4[6767]: Unable to use interprocess sync lockfile (No such file or directory): /var/run/kea/logger_lockfile Backport a patch to fix this issue[2]. [1] https://gitlab.isc.org/isc-projects/kea/-/issues/3450 [2] https://gitlab.isc.org/isc-projects/kea/-/commit/f477e8ebcc8b8e1f1adaad4d55031084c0ff6f40 Signed-off-by: Yi Zhao Signed-off-by: Mathieu Dubois-Briand Signed-off-by: Richard Purdie --- diff --git a/meta/recipes-connectivity/kea/files/0001-make-kea-environment-available-to-lfc.patch b/meta/recipes-connectivity/kea/files/0001-make-kea-environment-available-to-lfc.patch new file mode 100644 index 00000000000..15c09d4c411 --- /dev/null +++ b/meta/recipes-connectivity/kea/files/0001-make-kea-environment-available-to-lfc.patch @@ -0,0 +1,96 @@ +From 72d7e6c0b6b5af4fea2e4db9ed33757984ccdc5b Mon Sep 17 00:00:00 2001 +From: Razvan Becheriu +Date: Fri, 14 Jun 2024 17:09:50 +0300 +Subject: [PATCH] make kea environment available to lfc + +Upstream-Status: Backport +[https://gitlab.isc.org/isc-projects/kea/-/commit/f477e8ebcc8b8e1f1adaad4d55031084c0ff6f40] + +Signed-off-by: Yi Zhao +--- + configure.ac | 2 ++ + src/lib/dhcpsrv/memfile_lease_mgr.cc | 3 ++- + .../tests/memfile_lease_mgr_unittest.cc | 26 +++++++++++++++++++ + src/lib/dhcpsrv/tests/test_kea_lfc_env.sh.in | 6 +++++ + 4 files changed, 36 insertions(+), 1 deletion(-) + create mode 100644 src/lib/dhcpsrv/tests/test_kea_lfc_env.sh.in + +diff --git a/configure.ac b/configure.ac +index c00edb5..7b572b0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1629,6 +1629,8 @@ AC_CONFIG_FILES([src/lib/dhcp_ddns/tests/Makefile]) + AC_CONFIG_FILES([src/lib/dhcpsrv/Makefile]) + AC_CONFIG_FILES([src/lib/dhcpsrv/tests/Makefile]) + AC_CONFIG_FILES([src/lib/dhcpsrv/tests/test_libraries.h]) ++AC_CONFIG_FILES([src/lib/dhcpsrv/tests/test_kea_lfc_env.sh], ++ [chmod +x src/lib/dhcpsrv/tests/test_kea_lfc_env.sh]) + AC_CONFIG_FILES([src/lib/dhcpsrv/testutils/Makefile]) + AC_CONFIG_FILES([src/lib/dns/Makefile]) + AC_CONFIG_FILES([src/lib/dns/tests/Makefile]) +diff --git a/src/lib/dhcpsrv/memfile_lease_mgr.cc b/src/lib/dhcpsrv/memfile_lease_mgr.cc +index db4f5d5..0ecf3e7 100644 +--- a/src/lib/dhcpsrv/memfile_lease_mgr.cc ++++ b/src/lib/dhcpsrv/memfile_lease_mgr.cc +@@ -209,7 +209,8 @@ LFCSetup::setup(const uint32_t lfc_interval, + args.push_back("ignored-path"); + + // Create the process (do not start it yet). +- process_.reset(new ProcessSpawn(ProcessSpawn::ASYNC, executable, args)); ++ process_.reset(new ProcessSpawn(ProcessSpawn::ASYNC, executable, args, ++ ProcessEnvVars(), true)); + + // If we've been told to run it once now, invoke the callback directly. + if (run_once_now) { +diff --git a/src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc b/src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc +index 034f1f5..9edf637 100644 +--- a/src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc ++++ b/src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc +@@ -534,6 +534,32 @@ TEST_F(MemfileLeaseMgrTest, lfcTimer) { + EXPECT_EQ(2, lease_mgr->getLFCCount()); + } + ++/// @brief Check that the kea environment is accesible to the Lease ++/// File Cleanup process. ++TEST_F(MemfileLeaseMgrTest, lfcEnv) { ++ DatabaseConnection::ParameterMap pmap; ++ pmap["type"] = "memfile"; ++ pmap["universe"] = "4"; ++ pmap["name"] = getLeaseFilePath("leasefile4_0.csv"); ++ pmap["lfc-interval"] = "1"; ++ ++ std::ostringstream s; ++ s << DHCP_DATA_DIR << "/test_kea_lfc_env.sh"; ++ setenv("KEA_LFC_EXECUTABLE", s.str().c_str(), 1); ++ ++ boost::scoped_ptr lease_mgr(new NakedMemfileLeaseMgr(pmap)); ++ ++ // Try to run the lease file cleanup. ++ ASSERT_NO_THROW(lease_mgr->lfcCallback()); ++ ++ // Wait for the LFC process to complete. ++ ASSERT_TRUE(waitForProcess(*lease_mgr, 1)); ++ ++ // And make sure it has returned an exit status of 0. ++ EXPECT_EQ(0, lease_mgr->getLFCExitStatus()) ++ << "environment not available to LFC"; ++} ++ + /// @brief This test checks if the LFC timer is disabled (doesn't trigger) + /// cleanups when the lfc-interval is set to 0. + TEST_F(MemfileLeaseMgrTest, lfcTimerDisabled) { +diff --git a/src/lib/dhcpsrv/tests/test_kea_lfc_env.sh.in b/src/lib/dhcpsrv/tests/test_kea_lfc_env.sh.in +new file mode 100644 +index 0000000..3eb71d5 +--- /dev/null ++++ b/src/lib/dhcpsrv/tests/test_kea_lfc_env.sh.in +@@ -0,0 +1,6 @@ ++#!/bin/sh ++ ++if [ $(env | grep -c KEA_LFC_EXECUTABLE) != 0 ]; then ++ exit 0 ++fi ++exit 1 +-- +2.25.1 + diff --git a/meta/recipes-connectivity/kea/kea_2.6.1.bb b/meta/recipes-connectivity/kea/kea_2.6.1.bb index 19e07f5da39..c2818c33860 100644 --- a/meta/recipes-connectivity/kea/kea_2.6.1.bb +++ b/meta/recipes-connectivity/kea/kea_2.6.1.bb @@ -20,6 +20,7 @@ SRC_URI = "http://ftp.isc.org/isc/kea/${PV}/${BP}.tar.gz \ file://0001-Replace-Name-NameString-with-vector-of-uint8_t.patch \ file://0002-Fix-unittests-Typo-in-Name-Name-append-to-ndata_-not.patch \ file://0001-Update-asiolink-for-boost-1.87.patch \ + file://0001-make-kea-environment-available-to-lfc.patch \ " SRC_URI[sha256sum] = "d2ce14a91c2e248ad2876e29152d647bcc5e433bc68dafad0ee96ec166fcfad1"