@@ -34,7 +34,8 @@ if (NOT OPENSSL_EXECUTABLE)
3434 endif ()
3535endif ()
3636
37- configure_file ("${PROJECT_SOURCE_DIR} /config.h.in" "${PROJECT_SOURCE_DIR} /config.h" ESCAPE_QUOTES @ONLY)
37+ configure_file ("${PROJECT_SOURCE_DIR} /config.h.in" "${PROJECT_BINARY_DIR} /config.h" ESCAPE_QUOTES @ONLY)
38+ include_directories (${PROJECT_BINARY_DIR} )
3839
3940# keystored plugin
4041add_library (keystored SHARED keystored.c)
@@ -101,74 +102,48 @@ if (NOT CHMOD_EXECUTABLE)
101102 message (FATAL_ERROR "Unable to find chmod, set CHMOD_EXECUTABLE manually." )
102103endif ()
103104
105+ # Command line options to be passed to `sysrepoctl` when working with modules
106+ # which should only be accessible by an administrator
107+ if (NOT SYSREPOCTL_ROOT_PERMS)
108+ set (SYSREPOCTL_ROOT_PERMS "-o root:root -p 600" )
109+ endif ()
110+
104111# create the keys directory with correct permissions
105112install (DIRECTORY DESTINATION ${KEYSTORED_KEYS_DIR}
106113 DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE)
107114
108- # install all the required modules and enable features
109- install (CODE "
110- execute_process(COMMAND ${SYSREPOCTL_EXECUTABLE} -l RESULT_VARIABLE RET OUTPUT_VARIABLE INSTALLED_MODULES ERROR_VARIABLE OUT)
111- if (RET)
112- string(REPLACE \"\\ n\" \"\\ n \" OUT \"\$ {OUT}\" )
113- message(FATAL_ERROR \" Command sysrepoctl list failed:\n \$ {OUT}\" )
114- endif()
115-
116- string(REGEX MATCH \" ietf-x509-cert-to-name[^|]*[|][^|]*[|] Installed[^\n ]*\" INSTALLED_MODULE_LINE \"\$ {INSTALLED_MODULES}\" )
117- if (NOT INSTALLED_MODULE_LINE)
118- message(STATUS \" Importing module ietf-x509-cert-to-name into sysrepo...\" )
119-
120- execute_process(COMMAND ${SYSREPOCTL_EXECUTABLE} -i -g ${CMAKE_SOURCE_DIR} /../modules/ietf-x509-cert-to-name.yang -o root:root -p 600 RESULT_VARIABLE RET OUTPUT_VARIABLE OUT ERROR_VARIABLE OUT)
121- if (RET)
122- string(REPLACE \"\\ n\" \"\\ n \" OUT \"\$ {OUT}\" )
123- message(FATAL_ERROR \" Command sysrepoctl install failed:\\ n \$ {OUT}\" )
124- endif()
125-
126- else()
127- message(STATUS \" Module ietf-x509-cert-to-name already in sysrepo.\" )
128- endif()
129-
130- string(REGEX MATCH \" ietf-keystore [^\n ]*\" INSTALLED_MODULE_LINE \"\$ {INSTALLED_MODULES}\" )
131- if (NOT INSTALLED_MODULE_LINE)
132- message(STATUS \" Importing module ietf-keystore into sysrepo...\" )
133-
134- execute_process(COMMAND ${SYSREPOCTL_EXECUTABLE} -i -g ${CMAKE_SOURCE_DIR} /../modules/ietf-keystore.yang -o root:root -p 600 RESULT_VARIABLE RET OUTPUT_VARIABLE OUT ERROR_VARIABLE OUT)
135- if (RET)
136- string(REPLACE \"\\ n\" \"\\ n \" OUT \"\$ {OUT}\" )
137- message(FATAL_ERROR \" Command sysrepoctl install failed:\\ n \$ {OUT}\" )
138- endif()
115+ option (MODEL_INSTALL "Enable yang model installation" ON )
116+ if (MODEL_INSTALL)
117+ install (CODE "
118+ set(ENV{SYSREPOCTL} ${SYSREPOCTL_EXECUTABLE} )
119+ set(ENV{SYSREPOCTL_ROOT_PERMS} SYSREPOCTL_ROOT_PERMS)
120+ execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR} /scripts/model-install.sh)" )
121+ endif ()
139122
140- else()
141- message(STATUS \" Module ietf-keystore already in sysrepo.\" )
142- endif()" )
123+ # Use KEYSTORED_DEFER_SSH_KEY=ON to skip automatic key conversion.
124+ # Some external build/deploy script is then responsible for providing an SSH
125+ # host key in a PEM format at runtime.
126+ if (NOT KEYSTORED_DEFER_SSH_KEY)
127+ set (KEYSTORED_CHECK_SSH_KEY 1)
128+ else ()
129+ set (KEYSTORED_CHECK_SSH_KEY 0)
130+ endif ()
143131
144- # import stock OpenSSH RSA key
145- install (CODE "
146- execute_process(COMMAND ${SYSREPOCFG_EXECUTABLE} -d startup --export ietf-keystore RESULT_VARIABLE RET OUTPUT_VARIABLE OUT ERROR_VARIABLE OUT)
147- if (RET)
148- string(REPLACE \"\\ n\" \"\\ n \" OUT \"\$ {OUT}\" )
149- message(FATAL_ERROR \" Command sysrepocfg export failed:\\ n \$ {OUT}\" )
150- endif()
132+ option (SSH_KEY_INSTALL "Enable ssh key import" ON )
133+ if (SSH_KEY_INSTALL)
134+ install (CODE "
135+ set(ENV{SYSREPOCFG} ${SYSREPOCFG_EXECUTABLE} )
136+ set(ENV{CHMOD} ${CHMOD_EXECUTABLE} )
137+ set(ENV{OPENSSL} ${OPENSSL_EXECUTABLE} )
138+ set(ENV{KEYSTORED_KEYS_DIR} ${KEYSTORED_KEYS_DIR} )
139+ set(ENV{KEYSTORED_CHECK_SSH_KEY} ${KEYSTORED_CHECK_SSH_KEY} )
140+ execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR} /scripts/ssh-key-import.sh)" )
141+ endif ()
151142
152- if (OUT)
153- message(STATUS \" Some ietf-keystore configuration set, no keys will be imported.\" )
154- elseif(NOT EXISTS \" /etc/ssh/ssh_host_rsa_key\" )
155- message(WARNING \" Default OpenSSH RSA host key \\\" /etc/ssh/ssh_host_rsa_key\\\" not found so a key will have to be imported or generated manually for netopeer2-server to use.\" )
156- else()
157- message(STATUS \" Importing stock OpenSSH RSA key.\" )
158- file(READ /etc/ssh/ssh_host_rsa_key RSA_KEY)
159- file(WRITE ${KEYSTORED_KEYS_DIR} /ssh_host_rsa_key.pem \$ {RSA_KEY})
160- execute_process(COMMAND ${CHMOD_EXECUTABLE} go-rw ${KEYSTORED_KEYS_DIR} /ssh_host_rsa_key.pem)
161- execute_process(COMMAND ${OPENSSL_EXECUTABLE} rsa -pubout -in ${KEYSTORED_KEYS_DIR} /ssh_host_rsa_key.pem -out ${KEYSTORED_KEYS_DIR} /ssh_host_rsa_key.pub.pem RESULT_VARIABLE RET OUTPUT_VARIABLE OUT ERROR_VARIABLE OUT)
162- if (RET)
163- string(REPLACE \"\\ n\" \"\\ n \" OUT \"\$ {OUT}\" )
164- message(FATAL_ERROR \" Command openssl generate public key failed:\\ n \$ {OUT}\" )
165- endif()
166- execute_process(COMMAND ${SYSREPOCFG_EXECUTABLE} -d startup -i ${CMAKE_SOURCE_DIR} /stock_key_config.xml ietf-keystore RESULT_VARIABLE RET OUTPUT_VARIABLE OUT ERROR_VARIABLE OUT)
167- if (RET)
168- string(REPLACE \"\\ n\" \"\\ n \" OUT \"\$ {OUT}\" )
169- message(FATAL_ERROR \" Command sysrepocfg import failed:\\ n \$ {OUT}\" )
170- endif()
171- endif()" )
143+ add_custom_target (install -scripts-ide
144+ scripts/model-install .sh
145+ scripts/ssh-key-import.sh
146+ )
172147
173148# plugins should be installed into sysrepo plugins dir
174149install (TARGETS keystored DESTINATION ${SR_PLUGINS_DIR} )
0 commit comments