kuksa-val: add recipe
[AGL/meta-agl-demo.git] / recipes-connectivity / kuksa-val / kuksa-val / 0003-Make-install-locations-configurable.patch
1 From 535993001d8a24162e972b4a4e88387f94c9f539 Mon Sep 17 00:00:00 2001
2 From: Scott Murray <scott.murray@konsulko.com>
3 Date: Mon, 23 May 2022 15:21:07 -0400
4 Subject: [PATCH 3/4] Make install locations configurable
5
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.
13
14 Upstream-Status: Pending
15
16 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
17 ---
18  config.ini         |  7 -------
19  config.ini.in      |  7 +++++++
20  src/CMakeLists.txt | 52 ++++++++++++++++++++++++++++++++++++----------
21  src/config.hpp.in  | 21 +++++++++++++++++++
22  src/main.cpp       |  5 +++--
23  5 files changed, 72 insertions(+), 20 deletions(-)
24  delete mode 100644 config.ini
25  create mode 100644 config.ini.in
26  create mode 100644 src/config.hpp.in
27
28 diff --git a/config.ini b/config.ini
29 deleted file mode 100644
30 index f3162d4..0000000
31 --- a/config.ini
32 +++ /dev/null
33 @@ -1,7 +0,0 @@
34 -vss = vss_release_2.2.json
35 -log-level = ALL
36 -cert-path = .
37 -
38 -[mqtt]
39 -    publish = 
40 -    topic-prefix = vss
41 diff --git a/config.ini.in b/config.ini.in
42 new file mode 100644
43 index 0000000..5bdce91
44 --- /dev/null
45 +++ b/config.ini.in
46 @@ -0,0 +1,7 @@
47 +vss = @KUKSA_DEFAULT_DATADIR@/vss_release_2.2.json
48 +log-level = ALL
49 +cert-path = @KUKSA_DEFAULT_CERTDIR@
50 +
51 +[mqtt]
52 +    publish = 
53 +    topic-prefix = vss
54 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
55 index 0ff5f9c..b7d4d4f 100644
56 --- a/src/CMakeLists.txt
57 +++ b/src/CMakeLists.txt
58 @@ -162,6 +162,35 @@ if(BUILD_EXE)
59    ######
60    # Setup server install and packaging
61  
62 +  set(KUKSA_INSTALL_BINDIR "bin/${SERVER_EXE_NAME}" CACHE STRING "Server binary install directory")
63 +
64 +  if(DEFINED KUKSA_INSTALL_DATADIR)
65 +    set(KUKSA_DEFAULT_DATADIR_INTERNAL "${KUKSA_INSTALL_DATADIR}")
66 +  else()
67 +    set(KUKSA_DEFAULT_DATADIR_INTERNAL ".")
68 +  endif()
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")
71 +
72 +  if(DEFINED KUKSA_INSTALL_CONFIGDIR)
73 +    set(KUKSA_DEFAULT_CONFIG "${KUKSA_INSTALL_CONFIGDIR}/config.ini" CACHE STRING "Default config.ini location")
74 +  else()
75 +    set(KUKSA_DEFAULT_CONFIG "config.ini" CACHE STRING "Default config.ini location")
76 +  endif()
77 +  set(KUKSA_INSTALL_CONFIGDIR "${KUKSA_INSTALL_BINDIR}" CACHE STRING "config.ini install directory")
78 +
79 +  if(DEFINED KUKSA_INSTALL_CERTDIR)
80 +    set(KUKSA_DEFAULT_CERTDIR_INTERNAL "${KUKSA_INSTALL_CERTDIR}")
81 +  else()
82 +    set(KUKSA_DEFAULT_CERTDIR_INTERNAL ".")
83 +  endif()
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")
86 +
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})
90 +
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,19 +200,20 @@ if(BUILD_EXE)
95    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../data/vss-core/vss_release_2.0.json ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
96    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../data/vss-core/vss_release_2.1.json ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
97    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../data/vss-core/vss_release_2.2.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)
101  
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( TARGETS ${SERVER_EXE_NAME} DESTINATION ${KUKSA_INSTALL_BINDIR})
113 +  install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../kuksa_certificates/jwt/jwt.key.pub DESTINATION ${KUKSA_INSTALL_CERTDIR})
114 +  install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../kuksa_certificates/Server.pem DESTINATION ${KUKSA_INSTALL_CERTDIR})
115 +  install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../kuksa_certificates/Server.key DESTINATION ${KUKSA_INSTALL_CERTDIR})
116 +  install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../kuksa_certificates/Client.pem DESTINATION ${KUKSA_INSTALL_CERTDIR})
117 +  install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../kuksa_certificates/Client.key DESTINATION ${KUKSA_INSTALL_CERTDIR})
118 +  install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../kuksa_certificates/CA.pem DESTINATION ${KUKSA_INSTALL_CERTDIR})
119 +  install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../data/vss-core/vss_release_2.0.json DESTINATION ${KUKSA_INSTALL_DATADIR})
120 +  install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../data/vss-core/vss_release_2.1.json DESTINATION ${KUKSA_INSTALL_DATADIR})
121 +  install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/../data/vss-core/vss_release_2.2.json DESTINATION ${KUKSA_INSTALL_DATADIR})
122 +  install( FILES ${CMAKE_CURRENT_BINARY_DIR}/config.ini DESTINATION ${KUKSA_INSTALL_CONFIGDIR})
123  
124  
125    #GRPC client
126 diff --git a/src/config.hpp.in b/src/config.hpp.in
127 new file mode 100644
128 index 0000000..89586c2
129 --- /dev/null
130 +++ b/src/config.hpp.in
131 @@ -0,0 +1,21 @@
132 +/*
133 + * ******************************************************************************
134 + * Copyright (c) 2022 Konsulko Group
135 + *
136 + * All rights reserved. This program and the accompanying materials
137 + * are made available under the terms of the Eclipse Public License v2.0
138 + * which accompanies this distribution, and is available at
139 + * https://www.eclipse.org/org/documents/epl-2.0/index.php
140 + *
141 + * *****************************************************************************
142 + */
143 +
144 +#ifndef __CONFIG_H___
145 +
146 +// Default configuration file location
147 +#cmakedefine KUKSA_DEFAULT_CONFIG "@KUKSA_DEFAULT_CONFIG@"
148 +
149 +// Default Certificate directory
150 +#cmakedefine KUKSA_DEFAULT_CERTDIR "@KUKSA_DEFAULT_CERTDIR@"
151 +
152 +#endif
153 diff --git a/src/main.cpp b/src/main.cpp
154 index 417e2e8..fdfeacd 100644
155 --- a/src/main.cpp
156 +++ b/src/main.cpp
157 @@ -40,6 +40,7 @@
158  #include "exception.hpp"
159  #include "grpcHandler.hpp"
160  #include "OverlayLoader.hpp"
161 +#include "config.hpp"
162  
163  
164  #include "../buildinfo.h"
165 @@ -101,7 +102,7 @@ int main(int argc, const char *argv[]) {
166    program_options::options_description desc{"OPTIONS"};
167    desc.add_options()
168      ("help,h", "Help screen")
169 -    ("config-file,c", program_options::value<boost::filesystem::path>()->default_value(boost::filesystem::path{"config.ini"}),
170 +    ("config-file,c", program_options::value<boost::filesystem::path>()->default_value(boost::filesystem::path{KUKSA_DEFAULT_CONFIG}),
171        "Configuration file with `kuksa-val-server` input parameters."
172        "Configuration file can replace command-line parameters and through different files multiple configurations can be handled more easily (e.g. test and production setup)."
173        "Sample of configuration file parameters looks like:\n"
174 @@ -110,7 +111,7 @@ int main(int argc, const char *argv[]) {
175        "log-level = ALL\n")
176      ("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_2.1.json' file can be found under [data](./data/vss-core/vss_release_2.1.json)")
177      ("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")
178 -    ("cert-path", program_options::value<boost::filesystem::path>()->required()->default_value(boost::filesystem::path(".")),
179 +    ("cert-path", program_options::value<boost::filesystem::path>()->required()->default_value(boost::filesystem::path(KUKSA_DEFAULT_CERTDIR)),
180        "[mandatory] Directory path where 'Server.pem', 'Server.key' and 'jwt.key.pub' are located. ")
181      ("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 REST API connections, and also shall not fail connections due to self-signed certificates.")
182      ("use-keycloak", "Use KeyCloak for permission management")
183 -- 
184 2.35.1
185