/************************************************************************* * * Copyright 2021 highstreet technologies GmbH and others * * 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. ***************************************************************************/ #define _GNU_SOURCE #include "blank.h" #include "utils/log_utils.h" #include "utils/sys_utils.h" #include "utils/nts_utils.h" #include #include #include "core/framework.h" #include "core/container.h" #include "core/session.h" #include "core/nc_config.h" #define DOCKER_DEPLOY_ZIP "/opt/dev/deploy.zip" #define FTP_DEPLOY_ZIP "/ftp/deploy.zip" //checkAL: see all todos if doing also YANG-install through netopeer int blank_run(void) { log_add_verbose(1, LOG_COLOR_BOLD_YELLOW"running as BLANK NTS daemon...\n"LOG_COLOR_RESET); log_add_verbose(1, LOG_COLOR_BOLD_YELLOW"Docker IP:"LOG_COLOR_RESET" %s\n", framework_environment.settings.ip_v6_enabled ? framework_environment.settings.ip_v6 : framework_environment.settings.ip_v4); char shell_command[512]; if(session_init() != NTS_ERR_OK) { log_error("session_init() failed\n"); return NTS_ERR_FAILED; } if(netconf_configure() != NTS_ERR_OK) { log_error("netconf_configure() failed\n") return NTS_ERR_FAILED; } session_free(); vsftp_daemon_init(); sftp_daemon_init(); //todo: run netopeer char *zipfile = DOCKER_DEPLOY_ZIP; if(file_exists(zipfile)) { goto blank_install_zip; } else { log_add_verbose(2, "%s was not found, waiting for deploy.zip on other means...\n"); } blank_run_wait_for_file: while(!framework_sigint) { zipfile = FTP_DEPLOY_ZIP; if(file_exists(zipfile)) { goto blank_install_zip; } //todo: check netopeer for data sleep(1); } vsftp_daemon_deinit(); sftp_daemon_deinit(); log_error("blank image daemon was called to stop before installing anything\n"); return NTS_ERR_FAILED; blank_install_zip: { log_add_verbose(1, "found deploy.zip in "LOG_COLOR_BOLD_BLUE"%s"LOG_COLOR_RESET"\n", zipfile); log_add_verbose(1, "starting install...\n"); //check if zip is ok sprintf(shell_command, "unzip -qq -t %s", zipfile); if(system(shell_command) != 0) { log_error("%s invalid ZIP file\n", zipfile); goto blank_install_failed; } //unzip to /opt/dev/deploy sprintf(shell_command, "unzip -qq %s -d /opt/dev/deploy", zipfile); if(system(shell_command) != 0) { log_error("unzip filed for unknown reason\n", zipfile); goto blank_install_failed; } if(strcmp(zipfile, FTP_DEPLOY_ZIP) == 0) { sprintf(shell_command, "rm -f %s", zipfile); if(system(shell_command) != 0) { log_error("failed to remove %s\n", zipfile); } } if(!file_exists("/opt/dev/deploy/config.json")) { log_error("/opt/dev/deploy/config.json not found!\n"); goto blank_install_failed; } //move /opt/dev/deploy/config.json to /opt/dev/ntsim-ng/config/config.json system("mv /opt/dev/deploy/config.json /opt/dev/ntsim-ng/config/config.json"); //todo: kill netopeer //run container_self_init() if(!container_self_init()) { log_error("container_self_init() error\n"); goto blank_install_failed; } //send SIGUSR1 to supervisor to reload everything and start fresh kill(1, SIGUSR1); log_add_verbose(1, LOG_COLOR_BOLD_GREEN"blank image successfully replaced!"LOG_COLOR_RESET"\n"); vsftp_daemon_deinit(); sftp_daemon_deinit(); return NTS_ERR_OK; } blank_install_failed: { //remove zipfile sprintf(shell_command, "rm -rf %s", zipfile); system(shell_command); system("rm -rf /opt/dev/deploy"); log_error("%s failed to install...\n", zipfile); log_error("try again with new file...\n"); goto blank_run_wait_for_file; } }