This is an automated email from the ASF dual-hosted git repository. szaszm pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 857ed5bf20112e8d4a15e7d22fbc8cb912060be9 Author: Martin Zink <[email protected]> AuthorDate: Tue Sep 16 14:46:11 2025 +0200 MINIFICPP-2627 Fix ${MINIFI_HOME} in config files Closes #2027 Signed-off-by: Marton Szasz <[email protected]> --- CONFIGURE.md | 2 +- bin/CMakeLists.txt | 4 +++- bin/minifi.service.in | 1 + controller/MiNiFiController.cpp | 2 +- core-framework/include/Defaults.h | 4 ++-- core-framework/include/utils/Locations.h | 14 +++++++++++--- docker/installed/rpm.Dockerfile | 2 +- minifi_main/MainHelper.cpp | 10 +++------- minifi_main/MiNiFiMain.cpp | 2 +- 9 files changed, 24 insertions(+), 17 deletions(-) diff --git a/CONFIGURE.md b/CONFIGURE.md index 40df3bbb8..1745d6d7f 100644 --- a/CONFIGURE.md +++ b/CONFIGURE.md @@ -80,7 +80,7 @@ The `MINIFI_HOME` environment variable should point to the installation directory, if `MINIFI_HOME` is not defined, MiNiFi will try to infer it from binary's location. ### Filesystem Hierarchy Standard installation (from .rpm package) -The `MINIFI_HOME` environment variable should be set to `FHS`. If `MINIFI_HOME` is not defined but the binary is in the `/usr/bin` directory it will try to run as an FHS application. +The `MINIFI_INSTALLATION_TYPE` environment variable should be set to `FHS`. If `MINIFI_HOME` and `MINIFI_INSTALLATION_TYPE` are both undefined but the binary is in the `/usr/bin` directory it will try to run as an FHS application. ## Configuring diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index f1869fbdd..0f6efb680 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -25,9 +25,11 @@ endif() if (MINIFI_PACKAGING_TYPE STREQUAL "RPM") - set(MINIFI_HOME_ENV_VALUE "FHS") + set(MINIFI_INSTALLATION_TYPE_ENV_VALUE "FHS") + set(MINIFI_HOME_ENV_VALUE "") set(MINIFI_EXEC_PATH "/usr/bin/minifi") elseif (MINIFI_PACKAGING_TYPE STREQUAL "TGZ") + set(MINIFI_INSTALLATION_TYPE_ENV_VALUE "") set(MINIFI_HOME_ENV_VALUE "/opt/minifi-cpp") set(MINIFI_EXEC_PATH "/opt/minifi-cpp/bin/minifi") else() diff --git a/bin/minifi.service.in b/bin/minifi.service.in index eb78573ce..2c7f84068 100644 --- a/bin/minifi.service.in +++ b/bin/minifi.service.in @@ -5,6 +5,7 @@ After=network.target [Service] Type=simple Environment=MINIFI_HOME=@MINIFI_HOME_ENV_VALUE@ +Environment=MINIFI_INSTALLATION_TYPE=@MINIFI_INSTALLATION_TYPE_ENV_VALUE@ ExecStart=@MINIFI_EXEC_PATH@ Restart=on-failure RestartSec=3 diff --git a/controller/MiNiFiController.cpp b/controller/MiNiFiController.cpp index c2542e331..3b52599be 100644 --- a/controller/MiNiFiController.cpp +++ b/controller/MiNiFiController.cpp @@ -98,7 +98,7 @@ int main(int argc, char **argv) { // determineLocations already logged everything we need return -1; } - minifi::utils::Environment::setEnvironmentVariable(std::string(MINIFI_WORKING_DIR).c_str(), locations->working_dir_.string().c_str()); + minifi::utils::Environment::setEnvironmentVariable(std::string(MINIFI_HOME_ENV_KEY).c_str(), locations->working_dir_.string().c_str()); const auto configuration = std::make_shared<minifi::ConfigureImpl>(); diff --git a/core-framework/include/Defaults.h b/core-framework/include/Defaults.h index 2f809914c..899566297 100644 --- a/core-framework/include/Defaults.h +++ b/core-framework/include/Defaults.h @@ -28,5 +28,5 @@ const inline std::filesystem::path DEFAULT_UID_PROPERTIES_FILE = std::filesystem const inline std::filesystem::path DEFAULT_BOOTSTRAP_FILE = std::filesystem::path("conf") / "bootstrap.conf"; constexpr inline std::string_view MINIFI_HOME_ENV_KEY = "MINIFI_HOME"; -constexpr inline std::string_view MINIFI_WORKING_DIR = "MINIFI_WORKING_DIR"; -constexpr inline std::string_view MINIFI_HOME_ENV_VALUE_FHS = "FHS"; +constexpr inline std::string_view MINIFI_INSTALLATION_TYPE_ENV_KEY = "MINIFI_INSTALLATION_TYPE"; +constexpr inline std::string_view MINIFI_INSTALLATION_TYPE_FHS = "FHS"; diff --git a/core-framework/include/utils/Locations.h b/core-framework/include/utils/Locations.h index 89e127422..0083acdd5 100644 --- a/core-framework/include/utils/Locations.h +++ b/core-framework/include/utils/Locations.h @@ -18,22 +18,30 @@ #include <filesystem> +#include "Defaults.h" #include "Environment.h" #include "file/FileUtils.h" -#include "Defaults.h" namespace org::apache::nifi::minifi::utils { +inline bool isFhsMode() { + const auto minifi_installation_type_env = utils::Environment::getEnvironmentVariable(std::string(MINIFI_INSTALLATION_TYPE_ENV_KEY).c_str()); + const auto minifi_home_env = utils::Environment::getEnvironmentVariable(std::string(MINIFI_HOME_ENV_KEY).c_str()); + const auto executable_path = utils::file::get_executable_path(); + return minifi_installation_type_env == MINIFI_INSTALLATION_TYPE_FHS + || (!minifi_home_env.has_value() && executable_path.parent_path() == "/usr/bin"); +} + inline std::string_view getDefaultExtensionsPattern() { static constexpr std::string_view DEFAULT_EXTENSION_PATH = "../extensions/*"; static constexpr std::string_view DEFAULT_EXTENSION_PATH_RPM = RPM_LIB_DIR "/extensions/*"; - if (Environment::getEnvironmentVariable(std::string(MINIFI_HOME_ENV_KEY).c_str()) == MINIFI_HOME_ENV_VALUE_FHS || file::get_executable_path().parent_path() == "/usr/bin") { + if (isFhsMode()) { return DEFAULT_EXTENSION_PATH_RPM; } return DEFAULT_EXTENSION_PATH; } inline std::filesystem::path getMinifiDir() { - if (const auto working_dir_from_env = Environment::getEnvironmentVariable(std::string(MINIFI_WORKING_DIR).c_str())) { + if (const auto working_dir_from_env = Environment::getEnvironmentVariable(std::string(MINIFI_HOME_ENV_KEY).c_str())) { return *working_dir_from_env; } diff --git a/docker/installed/rpm.Dockerfile b/docker/installed/rpm.Dockerfile index 374aebcf5..e17371c3f 100644 --- a/docker/installed/rpm.Dockerfile +++ b/docker/installed/rpm.Dockerfile @@ -27,7 +27,7 @@ ARG UID=1001 ARG GID=1001 ENV USER minificpp -ENV MINIFI_HOME="FHS" +ENV MINIFI_INSTALLATION_TYPE="FHS" COPY ${ARCHIVE_LOCATION} /tmp/minifi.rpm diff --git a/minifi_main/MainHelper.cpp b/minifi_main/MainHelper.cpp index a2bb8af61..bf6842acd 100644 --- a/minifi_main/MainHelper.cpp +++ b/minifi_main/MainHelper.cpp @@ -18,12 +18,11 @@ #include "MainHelper.h" -#include "utils/Environment.h" -#include "utils/StringUtils.h" #include "Defaults.h" +#include "utils/Environment.h" +#include "utils/Locations.h" #include "utils/file/FileUtils.h" - namespace org::apache::nifi::minifi { bool validHome(const std::filesystem::path& home_path) { return utils::file::exists(home_path / DEFAULT_NIFI_PROPERTIES_FILE); @@ -134,10 +133,7 @@ Locations getFromFHS() { } std::optional<Locations> determineLocations(const std::shared_ptr<core::logging::Logger>& logger) { - const auto minifi_home_env = utils::Environment::getEnvironmentVariable(std::string(MINIFI_HOME_ENV_KEY).c_str()); - const auto executable_path = utils::file::get_executable_path(); - - if (minifi_home_env == MINIFI_HOME_ENV_VALUE_FHS || (!minifi_home_env && executable_path.parent_path() == "/usr/bin")) { + if (utils::isFhsMode()) { return getFromFHS(); } diff --git a/minifi_main/MiNiFiMain.cpp b/minifi_main/MiNiFiMain.cpp index 6588bbd06..e7891d83c 100644 --- a/minifi_main/MiNiFiMain.cpp +++ b/minifi_main/MiNiFiMain.cpp @@ -272,7 +272,7 @@ int main(int argc, char **argv) { // determineLocations already logged everything we need return -1; } - minifi::utils::Environment::setEnvironmentVariable(std::string(MINIFI_WORKING_DIR).c_str(), locations->working_dir_.string().c_str()); + minifi::utils::Environment::setEnvironmentVariable(std::string(MINIFI_HOME_ENV_KEY).c_str(), locations->working_dir_.string().c_str()); logger->log_info("MiNiFi Locations={}", *locations); utils::FileMutex minifi_home_mtx(locations->lock_path_);
