From b9df9bcf058e072e4c67dc8cc6ab41c3db745cbf Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Thu, 6 Oct 2022 15:42:51 -0400 Subject: [PATCH] Make install locations configurable Make binary, certificate, and configuration file install locations configurable, including generation and installation of an accurate default config.ini as well as a header file so that the server binary uses the specified defaults. This allows configuring a build that installs files into locations more along the lines of the Linux FHS. An effort has been made to ensure that the previous default locations are maintained. Upstream-Status: Pending Signed-off-by: Scott Murray --- kuksa-val-server/config.ini | 7 ---- kuksa-val-server/config.ini.in | 7 ++++ kuksa-val-server/src/CMakeLists.txt | 54 ++++++++++++++++++++++------- kuksa-val-server/src/config.hpp.in | 27 +++++++++++++++ kuksa-val-server/src/main.cpp | 5 +-- 5 files changed, 79 insertions(+), 21 deletions(-) delete mode 100644 kuksa-val-server/config.ini create mode 100644 kuksa-val-server/config.ini.in create mode 100644 kuksa-val-server/src/config.hpp.in diff --git a/kuksa-val-server/config.ini b/kuksa-val-server/config.ini deleted file mode 100644 index 34326aa..0000000 --- a/kuksa-val-server/config.ini +++ /dev/null @@ -1,7 +0,0 @@ -vss = vss_release_3.0.json -log-level = ALL -cert-path = . - -[mqtt] - publish = - topic-prefix = vss diff --git a/kuksa-val-server/config.ini.in b/kuksa-val-server/config.ini.in new file mode 100644 index 0000000..3d888e5 --- /dev/null +++ b/kuksa-val-server/config.ini.in @@ -0,0 +1,7 @@ +vss = @KUKSA_DEFAULT_DATADIR@/vss_release_3.0.json +log-level = ALL +cert-path = @KUKSA_DEFAULT_CERTDIR@ + +[mqtt] + publish = + topic-prefix = vss diff --git a/kuksa-val-server/src/CMakeLists.txt b/kuksa-val-server/src/CMakeLists.txt index ea75ef7..e791a13 100644 --- a/kuksa-val-server/src/CMakeLists.txt +++ b/kuksa-val-server/src/CMakeLists.txt @@ -161,6 +161,35 @@ if(BUILD_EXE) ###### # Setup server install and packaging + set(KUKSA_INSTALL_BINDIR "bin/${SERVER_EXE_NAME}" CACHE STRING "Server binary install directory") + + if(DEFINED KUKSA_INSTALL_DATADIR) + set(KUKSA_DEFAULT_DATADIR_INTERNAL "${KUKSA_INSTALL_DATADIR}") + else() + set(KUKSA_DEFAULT_DATADIR_INTERNAL ".") + endif() + set(KUKSA_INSTALL_DATADIR "${KUKSA_INSTALL_BINDIR}" CACHE STRING "Data install directory") + set(KUKSA_DEFAULT_DATADIR "${KUKSA_DEFAULT_DATADIR_INTERNAL}" CACHE STRING "Default data location") + + if(DEFINED KUKSA_INSTALL_CONFIGDIR) + set(KUKSA_DEFAULT_CONFIG "${KUKSA_INSTALL_CONFIGDIR}/config.ini" CACHE STRING "Default config.ini location") + else() + set(KUKSA_DEFAULT_CONFIG "config.ini" CACHE STRING "Default config.ini location") + endif() + set(KUKSA_INSTALL_CONFIGDIR "${KUKSA_INSTALL_BINDIR}" CACHE STRING "config.ini install directory") + + if(DEFINED KUKSA_INSTALL_CERTDIR) + set(KUKSA_DEFAULT_CERTDIR_INTERNAL "${KUKSA_INSTALL_CERTDIR}") + else() + set(KUKSA_DEFAULT_CERTDIR_INTERNAL ".") + endif() + set(KUKSA_INSTALL_CERTDIR "${KUKSA_INSTALL_BINDIR}" CACHE STRING "Certificate install directory") + set(KUKSA_DEFAULT_CERTDIR "${KUKSA_DEFAULT_CERTDIR_INTERNAL}" CACHE STRING "Default certificate location") + + # Generate header for main.cpp to pick up default locations + configure_file(config.hpp.in config.hpp @ONLY) + include_directories(${CMAKE_CURRENT_BINARY_DIR}) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/jwt/jwt.key.pub ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.pem ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.key ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) @@ -171,20 +200,21 @@ if(BUILD_EXE) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.1.json ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.2.json ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_3.0.json ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../config.ini ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../config.ini.in ${CMAKE_CURRENT_BINARY_DIR}/config.ini @COPY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../config_grpc_client.ini ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) - install( TARGETS ${SERVER_EXE_NAME} DESTINATION bin/${SERVER_EXE_NAME}) - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/jwt/jwt.key.pub DESTINATION bin/${SERVER_EXE_NAME}) - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.pem DESTINATION bin/${SERVER_EXE_NAME}) - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.key DESTINATION bin/${SERVER_EXE_NAME}) - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Client.pem DESTINATION bin/${SERVER_EXE_NAME}) - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Client.key DESTINATION bin/${SERVER_EXE_NAME}) - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/CA.pem DESTINATION bin/${SERVER_EXE_NAME}) - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.0.json DESTINATION bin/${SERVER_EXE_NAME}) - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.1.json DESTINATION bin/${SERVER_EXE_NAME}) - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.2.json DESTINATION bin/${SERVER_EXE_NAME}) - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_3.0.json DESTINATION bin/${SERVER_EXE_NAME}) + install( TARGETS ${SERVER_EXE_NAME} DESTINATION ${KUKSA_INSTALL_BINDIR}) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/jwt/jwt.key.pub DESTINATION ${KUKSA_INSTALL_CERTDIR}) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.pem DESTINATION ${KUKSA_INSTALL_CERTDIR}) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.key DESTINATION ${KUKSA_INSTALL_CERTDIR}) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Client.pem DESTINATION ${KUKSA_INSTALL_CERTDIR}) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Client.key DESTINATION ${KUKSA_INSTALL_CERTDIR}) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/CA.pem DESTINATION ${KUKSA_INSTALL_CERTDIR}) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.0.json DESTINATION ${KUKSA_INSTALL_DATADIR}) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.1.json DESTINATION ${KUKSA_INSTALL_DATADIR}) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.2.json DESTINATION ${KUKSA_INSTALL_DATADIR}) + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_3.0.json DESTINATION ${KUKSA_INSTALL_DATADIR}) + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/config.ini DESTINATION ${KUKSA_INSTALL_CONFIGDIR}) # CPack diff --git a/kuksa-val-server/src/config.hpp.in b/kuksa-val-server/src/config.hpp.in new file mode 100644 index 0000000..24226d2 --- /dev/null +++ b/kuksa-val-server/src/config.hpp.in @@ -0,0 +1,27 @@ +/********************************************************************** + * Copyright (c) 2022 Konsulko Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + **********************************************************************/ + +#ifndef __CONFIG_H___ + +// Default configuration file location +#cmakedefine KUKSA_DEFAULT_CONFIG "@KUKSA_DEFAULT_CONFIG@" + +// Default Certificate directory +#cmakedefine KUKSA_DEFAULT_CERTDIR "@KUKSA_DEFAULT_CERTDIR@" + +#endif diff --git a/kuksa-val-server/src/main.cpp b/kuksa-val-server/src/main.cpp index 234171a..2f7011a 100644 --- a/kuksa-val-server/src/main.cpp +++ b/kuksa-val-server/src/main.cpp @@ -47,6 +47,7 @@ #include "exception.hpp" #include "grpcHandler.hpp" #include "OverlayLoader.hpp" +#include "config.hpp" #include "../buildinfo.h" @@ -106,7 +107,7 @@ int main(int argc, const char *argv[]) { program_options::options_description desc{"OPTIONS"}; desc.add_options() ("help,h", "Help screen") - ("config-file,c", program_options::value()->default_value(boost::filesystem::path{"config.ini"}), + ("config-file,c", program_options::value()->default_value(boost::filesystem::path{KUKSA_DEFAULT_CONFIG}), "Configuration file with `kuksa-val-server` input parameters." "Configuration file can replace command-line parameters and through different files multiple configurations can be handled more easily (e.g. test and production setup)." "Sample of configuration file parameters looks like:\n" @@ -115,7 +116,7 @@ int main(int argc, const char *argv[]) { "log-level = ALL\n") ("vss", program_options::value()->required(), "[mandatory] Path to VSS data file describing VSS data tree structure which `kuksa-val-server` shall handle. Sample 'vss_release_3.0.json' file can be found under [data](./data/vss-core/vss_release_3.0.json)") ("overlays", program_options::value(), "Path to a directory cotaiing additional VSS models. All json files will be applied on top of the main vss file given by the -vss parameter in alphanumerical order") - ("cert-path", program_options::value()->required()->default_value(boost::filesystem::path(".")), + ("cert-path", program_options::value()->required()->default_value(boost::filesystem::path(KUKSA_DEFAULT_CERTDIR)), "[mandatory] Directory path where 'Server.pem', 'Server.key' and 'jwt.key.pub' are located. ") ("insecure", program_options::bool_switch()->default_value(false), "By default, `kuksa-val-server` shall accept only SSL (TLS) secured connections. If provided, `kuksa-val-server` shall also accept plain un-secured connections for Web-Socket and GRPC API connections, and also shall not fail connections due to self-signed certificates.") ("use-keycloak", "Use KeyCloak for permission management") -- 2.37.3