1 From b9df9bcf058e072e4c67dc8cc6ab41c3db745cbf Mon Sep 17 00:00:00 2001
2 From: Scott Murray <scott.murray@konsulko.com>
3 Date: Thu, 6 Oct 2022 15:42:51 -0400
4 Subject: [PATCH] Make install locations configurable
6 Make binary, certificate, and configuration file install locations
7 configurable, including generation and installation of an accurate
8 default config.ini as well as a header file so that the server
9 binary uses the specified defaults. This allows configuring a
10 build that installs files into locations more along the lines of
11 the Linux FHS. An effort has been made to ensure that the previous
12 default locations are maintained.
14 Upstream-Status: Pending
16 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
18 kuksa-val-server/config.ini | 7 ----
19 kuksa-val-server/config.ini.in | 7 ++++
20 kuksa-val-server/src/CMakeLists.txt | 54 ++++++++++++++++++++++-------
21 kuksa-val-server/src/config.hpp.in | 27 +++++++++++++++
22 kuksa-val-server/src/main.cpp | 5 +--
23 5 files changed, 79 insertions(+), 21 deletions(-)
24 delete mode 100644 kuksa-val-server/config.ini
25 create mode 100644 kuksa-val-server/config.ini.in
26 create mode 100644 kuksa-val-server/src/config.hpp.in
28 diff --git a/kuksa-val-server/config.ini b/kuksa-val-server/config.ini
29 deleted file mode 100644
30 index 34326aa..0000000
31 --- a/kuksa-val-server/config.ini
34 -vss = vss_release_3.0.json
41 diff --git a/kuksa-val-server/config.ini.in b/kuksa-val-server/config.ini.in
43 index 0000000..3d888e5
45 +++ b/kuksa-val-server/config.ini.in
47 +vss = @KUKSA_DEFAULT_DATADIR@/vss_release_3.0.json
49 +cert-path = @KUKSA_DEFAULT_CERTDIR@
54 diff --git a/kuksa-val-server/src/CMakeLists.txt b/kuksa-val-server/src/CMakeLists.txt
55 index ea75ef7..e791a13 100644
56 --- a/kuksa-val-server/src/CMakeLists.txt
57 +++ b/kuksa-val-server/src/CMakeLists.txt
58 @@ -161,6 +161,35 @@ if(BUILD_EXE)
60 # Setup server install and packaging
62 + set(KUKSA_INSTALL_BINDIR "bin/${SERVER_EXE_NAME}" CACHE STRING "Server binary install directory")
64 + if(DEFINED KUKSA_INSTALL_DATADIR)
65 + set(KUKSA_DEFAULT_DATADIR_INTERNAL "${KUKSA_INSTALL_DATADIR}")
67 + set(KUKSA_DEFAULT_DATADIR_INTERNAL ".")
69 + set(KUKSA_INSTALL_DATADIR "${KUKSA_INSTALL_BINDIR}" CACHE STRING "Data install directory")
70 + set(KUKSA_DEFAULT_DATADIR "${KUKSA_DEFAULT_DATADIR_INTERNAL}" CACHE STRING "Default data location")
72 + if(DEFINED KUKSA_INSTALL_CONFIGDIR)
73 + set(KUKSA_DEFAULT_CONFIG "${KUKSA_INSTALL_CONFIGDIR}/config.ini" CACHE STRING "Default config.ini location")
75 + set(KUKSA_DEFAULT_CONFIG "config.ini" CACHE STRING "Default config.ini location")
77 + set(KUKSA_INSTALL_CONFIGDIR "${KUKSA_INSTALL_BINDIR}" CACHE STRING "config.ini install directory")
79 + if(DEFINED KUKSA_INSTALL_CERTDIR)
80 + set(KUKSA_DEFAULT_CERTDIR_INTERNAL "${KUKSA_INSTALL_CERTDIR}")
82 + set(KUKSA_DEFAULT_CERTDIR_INTERNAL ".")
84 + set(KUKSA_INSTALL_CERTDIR "${KUKSA_INSTALL_BINDIR}" CACHE STRING "Certificate install directory")
85 + set(KUKSA_DEFAULT_CERTDIR "${KUKSA_DEFAULT_CERTDIR_INTERNAL}" CACHE STRING "Default certificate location")
87 + # Generate header for main.cpp to pick up default locations
88 + configure_file(config.hpp.in config.hpp @ONLY)
89 + include_directories(${CMAKE_CURRENT_BINARY_DIR})
91 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/jwt/jwt.key.pub ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
92 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.pem ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
93 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.key ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
94 @@ -171,20 +200,21 @@ if(BUILD_EXE)
95 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.1.json ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
96 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.2.json ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
97 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_3.0.json ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
98 - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../config.ini ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
99 + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../config.ini.in ${CMAKE_CURRENT_BINARY_DIR}/config.ini @COPY)
100 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../config_grpc_client.ini ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
102 - install( TARGETS ${SERVER_EXE_NAME} DESTINATION bin/${SERVER_EXE_NAME})
103 - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/jwt/jwt.key.pub DESTINATION bin/${SERVER_EXE_NAME})
104 - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.pem DESTINATION bin/${SERVER_EXE_NAME})
105 - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.key DESTINATION bin/${SERVER_EXE_NAME})
106 - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Client.pem DESTINATION bin/${SERVER_EXE_NAME})
107 - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Client.key DESTINATION bin/${SERVER_EXE_NAME})
108 - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/CA.pem DESTINATION bin/${SERVER_EXE_NAME})
109 - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.0.json DESTINATION bin/${SERVER_EXE_NAME})
110 - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.1.json DESTINATION bin/${SERVER_EXE_NAME})
111 - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.2.json DESTINATION bin/${SERVER_EXE_NAME})
112 - install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_3.0.json DESTINATION bin/${SERVER_EXE_NAME})
113 + install( TARGETS ${SERVER_EXE_NAME} DESTINATION ${KUKSA_INSTALL_BINDIR})
114 + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/jwt/jwt.key.pub DESTINATION ${KUKSA_INSTALL_CERTDIR})
115 + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.pem DESTINATION ${KUKSA_INSTALL_CERTDIR})
116 + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Server.key DESTINATION ${KUKSA_INSTALL_CERTDIR})
117 + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Client.pem DESTINATION ${KUKSA_INSTALL_CERTDIR})
118 + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/Client.key DESTINATION ${KUKSA_INSTALL_CERTDIR})
119 + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../kuksa_certificates/CA.pem DESTINATION ${KUKSA_INSTALL_CERTDIR})
120 + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.0.json DESTINATION ${KUKSA_INSTALL_DATADIR})
121 + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.1.json DESTINATION ${KUKSA_INSTALL_DATADIR})
122 + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_2.2.json DESTINATION ${KUKSA_INSTALL_DATADIR})
123 + install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../data/vss-core/vss_release_3.0.json DESTINATION ${KUKSA_INSTALL_DATADIR})
124 + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/config.ini DESTINATION ${KUKSA_INSTALL_CONFIGDIR})
128 diff --git a/kuksa-val-server/src/config.hpp.in b/kuksa-val-server/src/config.hpp.in
130 index 0000000..24226d2
132 +++ b/kuksa-val-server/src/config.hpp.in
134 +/**********************************************************************
135 + * Copyright (c) 2022 Konsulko Group
137 + * Licensed under the Apache License, Version 2.0 (the "License");
138 + * you may not use this file except in compliance with the License.
139 + * You may obtain a copy of the License at
141 + * http://www.apache.org/licenses/LICENSE-2.0
143 + * Unless required by applicable law or agreed to in writing, software
144 + * distributed under the License is distributed on an "AS IS" BASIS,
145 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
146 + * See the License for the specific language governing permissions and
147 + * limitations under the License.
149 + * SPDX-License-Identifier: Apache-2.0
150 + **********************************************************************/
152 +#ifndef __CONFIG_H___
154 +// Default configuration file location
155 +#cmakedefine KUKSA_DEFAULT_CONFIG "@KUKSA_DEFAULT_CONFIG@"
157 +// Default Certificate directory
158 +#cmakedefine KUKSA_DEFAULT_CERTDIR "@KUKSA_DEFAULT_CERTDIR@"
161 diff --git a/kuksa-val-server/src/main.cpp b/kuksa-val-server/src/main.cpp
162 index 234171a..2f7011a 100644
163 --- a/kuksa-val-server/src/main.cpp
164 +++ b/kuksa-val-server/src/main.cpp
166 #include "exception.hpp"
167 #include "grpcHandler.hpp"
168 #include "OverlayLoader.hpp"
169 +#include "config.hpp"
172 #include "../buildinfo.h"
173 @@ -106,7 +107,7 @@ int main(int argc, const char *argv[]) {
174 program_options::options_description desc{"OPTIONS"};
176 ("help,h", "Help screen")
177 - ("config-file,c", program_options::value<boost::filesystem::path>()->default_value(boost::filesystem::path{"config.ini"}),
178 + ("config-file,c", program_options::value<boost::filesystem::path>()->default_value(boost::filesystem::path{KUKSA_DEFAULT_CONFIG}),
179 "Configuration file with `kuksa-val-server` input parameters."
180 "Configuration file can replace command-line parameters and through different files multiple configurations can be handled more easily (e.g. test and production setup)."
181 "Sample of configuration file parameters looks like:\n"
182 @@ -115,7 +116,7 @@ int main(int argc, const char *argv[]) {
184 ("vss", program_options::value<boost::filesystem::path>()->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)")
185 ("overlays", program_options::value<boost::filesystem::path>(), "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")
186 - ("cert-path", program_options::value<boost::filesystem::path>()->required()->default_value(boost::filesystem::path(".")),
187 + ("cert-path", program_options::value<boost::filesystem::path>()->required()->default_value(boost::filesystem::path(KUKSA_DEFAULT_CERTDIR)),
188 "[mandatory] Directory path where 'Server.pem', 'Server.key' and 'jwt.key.pub' are located. ")
189 ("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.")
190 ("use-keycloak", "Use KeyCloak for permission management")