From c6b78a7921d5a40327f8166467c99f5ab7a48d95 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 22 Oct 2025 14:04:58 +0000 Subject: [PATCH 001/111] added deployments/ for docker-compose implementation --- deployments/.gitignore | 5 + deployments/Dockerfile | 76 ++ deployments/Makefile | 170 ++++ deployments/README.md | 213 +++++ deployments/Taskfile.yml | 145 ++++ deployments/docker/42/Dockerfile | 139 +++ deployments/docker/42/entrypoint.sh | 41 + deployments/docker/42/ivvtc/Dockerfile | 51 ++ deployments/docker/42/ivvtc/entrypoint.sh | 0 .../docker/42/kubernetes/deployment.yaml | 64 ++ deployments/docker/42/kubernetes/ingress.yaml | 0 .../docker/42/kubernetes/kubernetes.sh | 26 + .../docker/42/kubernetes/kustomization.yaml | 8 + deployments/docker/42/kubernetes/pv.yaml | 26 + deployments/docker/42/kubernetes/service.yaml | 22 + deployments/docker/42/nos3.yaml | 101 +++ deployments/docker/42/startapp.sh | 22 + deployments/docker/docker-compose.yaml | 758 +++++++++++++++++ deployments/docker/docker-compose_new.yaml | 805 ++++++++++++++++++ deployments/docker/docker-compose_orig.yaml | 220 +++++ .../docker/entrypoint_nos_engine_server.sh | 7 + deployments/docker/env.sh | 52 ++ deployments/docker/fsw/Dockerfile | 63 ++ deployments/docker/fsw/entrypoint.sh | 34 + deployments/docker/fsw/libuart.c | 230 +++++ .../docker/hw-components/entrypoint.sh | 82 ++ deployments/docker/radio-sim/entrypoint.sh | 7 + deployments/docker/radio-sim/entrypoint2.sh | 13 + deployments/docker/sidecar/commanding.py | 16 + deployments/docker/sidecar/entrypoint.sh | 51 ++ deployments/docker/sidecar/sidecar.sh | 157 ++++ deployments/docker/yamcs/Dockerfile | 85 ++ deployments/docker/yamcs/display.par | 25 + deployments/docker/yamcs/entrypoint.sh | 28 + deployments/entrypoint.sh | 77 ++ .../kubernetes/fortytwo/configmap.yaml | 47 + .../kubernetes/fortytwo/deployment.yaml | 93 ++ .../kubernetes/fortytwo/kustomization.yaml | 7 + deployments/kubernetes/fortytwo/service.yaml | 35 + deployments/kubernetes/fsw/configmap.yaml | 15 + deployments/kubernetes/fsw/deployment.yaml | 67 ++ deployments/kubernetes/fsw/kustomization.yaml | 7 + deployments/kubernetes/fsw/service.yaml | 19 + deployments/kubernetes/gps/deployment.yaml | 47 + deployments/kubernetes/gps/kustomization.yaml | 7 + deployments/kubernetes/gps/service.yaml | 19 + deployments/kubernetes/kubernetes.sh | 29 + deployments/kubernetes/kustomization.yaml | 10 + .../nos-engine-server/configmap.yaml | 14 + .../nos-engine-server/deployment.yaml | 68 ++ .../nos-engine-server/kustomization.yaml | 7 + .../kubernetes/nos-engine-server/service.yaml | 28 + deployments/kubernetes/time/deployment.yaml | 50 ++ .../kubernetes/time/kustomization.yaml | 7 + deployments/kubernetes/time/service.yaml | 19 + deployments/nos3/cfg/InOut/Inp_IPC.txt | 21 + deployments/nos3/cfg/InOut/Inp_IPC.txt.orig | 161 ++++ deployments/nos3/cfg/nos3-mission.xml | 23 + deployments/nos3/cfg/sc-fprime-config.xml | 84 ++ deployments/nos3/cfg/sc-full-config.xml | 84 ++ deployments/nos3/cfg/sc-minimal-config.xml | 84 ++ deployments/nos3/cfg/sims/nos3-simulator.xml | 658 ++++++++++++++ .../cfg/sims/nos_engine_server_config.json | 17 + deployments/nos3/cfg/sims/sim_log_config.xml | 24 + deployments/scripts/generate-k8s.sh | 551 ++++++++++++ deployments/scripts/nos3.yaml | 201 +++++ deployments/scripts/nos3_new.yml | 39 + 67 files changed, 6361 insertions(+) create mode 100644 deployments/.gitignore create mode 100644 deployments/Dockerfile create mode 100644 deployments/Makefile create mode 100644 deployments/README.md create mode 100644 deployments/Taskfile.yml create mode 100644 deployments/docker/42/Dockerfile create mode 100755 deployments/docker/42/entrypoint.sh create mode 100644 deployments/docker/42/ivvtc/Dockerfile create mode 100755 deployments/docker/42/ivvtc/entrypoint.sh create mode 100644 deployments/docker/42/kubernetes/deployment.yaml create mode 100644 deployments/docker/42/kubernetes/ingress.yaml create mode 100755 deployments/docker/42/kubernetes/kubernetes.sh create mode 100644 deployments/docker/42/kubernetes/kustomization.yaml create mode 100644 deployments/docker/42/kubernetes/pv.yaml create mode 100644 deployments/docker/42/kubernetes/service.yaml create mode 100644 deployments/docker/42/nos3.yaml create mode 100755 deployments/docker/42/startapp.sh create mode 100644 deployments/docker/docker-compose.yaml create mode 100644 deployments/docker/docker-compose_new.yaml create mode 100644 deployments/docker/docker-compose_orig.yaml create mode 100755 deployments/docker/entrypoint_nos_engine_server.sh create mode 100755 deployments/docker/env.sh create mode 100644 deployments/docker/fsw/Dockerfile create mode 100755 deployments/docker/fsw/entrypoint.sh create mode 100644 deployments/docker/fsw/libuart.c create mode 100755 deployments/docker/hw-components/entrypoint.sh create mode 100755 deployments/docker/radio-sim/entrypoint.sh create mode 100755 deployments/docker/radio-sim/entrypoint2.sh create mode 100755 deployments/docker/sidecar/commanding.py create mode 100755 deployments/docker/sidecar/entrypoint.sh create mode 100755 deployments/docker/sidecar/sidecar.sh create mode 100644 deployments/docker/yamcs/Dockerfile create mode 100644 deployments/docker/yamcs/display.par create mode 100755 deployments/docker/yamcs/entrypoint.sh create mode 100755 deployments/entrypoint.sh create mode 100644 deployments/kubernetes/fortytwo/configmap.yaml create mode 100644 deployments/kubernetes/fortytwo/deployment.yaml create mode 100644 deployments/kubernetes/fortytwo/kustomization.yaml create mode 100644 deployments/kubernetes/fortytwo/service.yaml create mode 100644 deployments/kubernetes/fsw/configmap.yaml create mode 100644 deployments/kubernetes/fsw/deployment.yaml create mode 100644 deployments/kubernetes/fsw/kustomization.yaml create mode 100644 deployments/kubernetes/fsw/service.yaml create mode 100644 deployments/kubernetes/gps/deployment.yaml create mode 100644 deployments/kubernetes/gps/kustomization.yaml create mode 100644 deployments/kubernetes/gps/service.yaml create mode 100755 deployments/kubernetes/kubernetes.sh create mode 100644 deployments/kubernetes/kustomization.yaml create mode 100644 deployments/kubernetes/nos-engine-server/configmap.yaml create mode 100644 deployments/kubernetes/nos-engine-server/deployment.yaml create mode 100644 deployments/kubernetes/nos-engine-server/kustomization.yaml create mode 100644 deployments/kubernetes/nos-engine-server/service.yaml create mode 100644 deployments/kubernetes/time/deployment.yaml create mode 100644 deployments/kubernetes/time/kustomization.yaml create mode 100644 deployments/kubernetes/time/service.yaml create mode 100644 deployments/nos3/cfg/InOut/Inp_IPC.txt create mode 100644 deployments/nos3/cfg/InOut/Inp_IPC.txt.orig create mode 100644 deployments/nos3/cfg/nos3-mission.xml create mode 100644 deployments/nos3/cfg/sc-fprime-config.xml create mode 100644 deployments/nos3/cfg/sc-full-config.xml create mode 100644 deployments/nos3/cfg/sc-minimal-config.xml create mode 100644 deployments/nos3/cfg/sims/nos3-simulator.xml create mode 100644 deployments/nos3/cfg/sims/nos_engine_server_config.json create mode 100644 deployments/nos3/cfg/sims/sim_log_config.xml create mode 100755 deployments/scripts/generate-k8s.sh create mode 100644 deployments/scripts/nos3.yaml create mode 100644 deployments/scripts/nos3_new.yml diff --git a/deployments/.gitignore b/deployments/.gitignore new file mode 100644 index 000000000..d2fdb96a5 --- /dev/null +++ b/deployments/.gitignore @@ -0,0 +1,5 @@ +environments/* +.DS_Store +*.42 +.env +settings.xml diff --git a/deployments/Dockerfile b/deployments/Dockerfile new file mode 100644 index 000000000..c668eb886 --- /dev/null +++ b/deployments/Dockerfile @@ -0,0 +1,76 @@ +ARG REGISTRY_HOST=docker.io +ARG IMAGE_USERNAME=ivvitc +ARG IMAGE_NAME=nos3-64 +ARG IMAGE_TAG=20250217 + +# ARG REGISTRY_HOST=docker.io +# ARG IMAGE_USERNAME=library +# ARG IMAGE_NAME=ubuntu +# ARG IMAGE_TAG=25.04 + +ARG IMAGE_URI=${REGISTRY_HOST}/${IMAGE_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG} + +ARG GIT_URL=https://github.com/nasa/nos3 +ARG GIT_BRANCH=main + +ARG BUILD_DIR=/builds +ARG BASE_DIR=${BUILD_DIR}/nos3 + +#------------------------------------------------------------------------------ +FROM ${IMAGE_URI} +#------------------------------------------------------------------------------ + +#--- PROXY CONFIG (if needed) +ARG MAVEN_HTTPS_PROXY +ARG HTTPS_PROXY +ARG HTTP_PROXY +ARG DEPLOYMENT_ENVIRO + +ENV MAVEN_HTTPS_PROXY=$MAVEN_HTTPS_PROXY +ENV HTTPS_PROXY=$HTTPS_PROXY +ENV HTTP_PROXY=$HTTP_PROXY +ENV DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} +#--- + +#--- GIT CONFIGs +ARG GIT_URL +ARG GIT_BRANCH + +ENV GIT_URL=${GIT_URL} +ENV GIT_BRANCH=${GIT_BRANCH} +#--- + +#--- NOS3 CONFIGs +ARG BUILD_DIR +ARG BASE_DIR + +ENV BUILD_DIR=${BUILD_DIR} +ENV BASE_DIR=${BASE_DIR} +#--- + +RUN apt-get update && \ + apt-get -y install \ + sudo git curl vim make cmake tmux tree python3 pip iputils-ping dnsutils libgcrypt20-dev && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +RUN mkdir -p ${BUILD_DIR} + +WORKDIR ${BUILD_DIR} + +RUN git clone --recurse-submodules -b ${GIT_BRANCH} -j2 ${GIT_URL} + +WORKDIR ${BASE_DIR} + +RUN make -j2 clean + +RUN make -j2 config +RUN make -j2 build-cryptolib +RUN make -j2 build-fsw +RUN make -j2 build-sim + +RUN make -j2 build-test + +COPY entrypoint.sh /entrypoint.sh + +CMD ["/entrypoint.sh"] diff --git a/deployments/Makefile b/deployments/Makefile new file mode 100644 index 000000000..94072a3c8 --- /dev/null +++ b/deployments/Makefile @@ -0,0 +1,170 @@ +.DEFAULT_GOAL := help +.ONESHELL: + +.PHONY: clean delete + +SHELL=bash +export DIFF_PROGRAM:=vimdiff + +# Containerization Parameters +export CONTAINER_BIN=docker +export CONTAINER_COMPOSE=${CONTAINER_BIN} compose + +ifeq (${CONTAINER_BIN},podman) +export CONTAINER_COMPOSE=${CONTAINER_BIN}-compose +endif + +export DEFAULT_IMAGE_REGISTRY=docker.io/library/ + +export CONTAINER_FILE=./Dockerfile + +GIT_BRANCH=$(shell git rev-parse --abbrev-ref HEAD) + +CONTAINER_DIR=./docker +K8S_DIR=./kubernetes + +# Generally this is empty unless in specific environments +ENVIRO_FILE=./.env + +# ./.env file content would be something like: +# # DO NOT PUT ANY SENSITIVE CONFIGURATIONS HERE +# MAVEN_SETTINGS_FILE= +# MAVEN_HTTPS_PROXY= +# HTTPS_PROXY= +# HTTP_PROXY= +# NO_PROXY= +# HEALTHCHECK_PORT=60000 + +VOLUME_MAVEN_SETTINGS_PATH="" + +# To set default settings.xml and essentially empty for mvn, unless in vmmoc +$(shell echo "" > ${CONTAINER_DIR}/yamcs/settings.xml) +export MAVEN_HTTPS_PROXY=-s./settings.xml + +#--- +ifndef DEPLOYMENT_ENVIRO +$(warning DEPLOYMENT_ENVIRO is not set. Therefore, assuming not in vmmoc, and proceeding without vmmoc specific definitions) +else +ifeq (${DEPLOYMENT_ENVIRO},vmmoc) +$(info DEPLOYMENT_ENVIRO is set to vmmoc. Proceeding with vmmoc specific configurations) +export ENVIRO_FILE=/opt/neo/etc/environment +$(shell cp -f ${MAVEN_SETTINGS_FILE} ${CONTAINER_DIR}/yamcs/settings.xml) +else +$(error DEPLOYMENT_ENVIRO is set to ${DEPLOYMENT_ENVIRO}, which is not expected. Exiting!) +endif +endif +#--- + +env_create: ## create ./docker/.env file + ${CONTAINER_DIR}/env.sh > ${CONTAINER_DIR}/.env + +env_export: env_create ## export ./docker/.env file variables to shell + set -o allexport && source ${CONTAINER_DIR}/.env && set +o allexport + +env_unset: ## create ./docker/.env file + unset $(sed '/^#/d' ${CONTAINER_DIR}/.env | cut -d= -f1) + +down: ## Bring down nos3 + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} down --remove-orphans || true + +down-new: ## Bring down nos3 + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} -f docker-compose_new.yaml down --remove-orphans || true + +build-fortytwo: | env_export set-permissions ## build-fortytwo + cd ${CONTAINER_DIR}/ ; \ + ${CONTAINER_COMPOSE} build --pull nos3-fortytwo + +build-yamcs: | env_export set-permissions ## build-yamcs + cd ${CONTAINER_DIR}/ ; \ + ${CONTAINER_COMPOSE} build --pull nos3-gsw + +build: | set-permissions## build essentials + $(MAKE) build-fortytwo + $(MAKE) build-yamcs + +set-permissions: ## set filesystem permissions, needed for restricted accounts + find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable + find . -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable + find . -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable + find . -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable + find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable + +up: | build ## Bring up nos3 in detached state (attached state doesn't work for some reason) + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} \ + --env-file ./.env \ + -f ./docker-compose.yaml up -d --remove-orphans + +export MINIMAL_PATH=.. + +up-minimum: | build ## Bring up nos3 in detached state (attached state doesn't work for some reason) + export MINIMAL_PATH=nos3; \ + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} \ + --env-file ./.env \ + -f ./docker-compose.yaml up -d \ + nos3-fortytwo \ + nos3-nos-engine-server \ + nos3-fsw \ + nos3-gps-sim \ + nos3-time \ + nos3-radio-sim-cryptolib \ + nos3-truth42sim \ + nos3-gsw \ + --remove-orphans + +doitminimally: ## do it minimally + $(MAKE) down down-new; sleep 5; \ + $(MAKE) up-minimum; sleep 15; \ + ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true && \ + $(MAKE) --silent sidecar + +up-new: | build ## Bring up nos3 in detached state (attached state doesn't work for some reason) + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} \ + --env-file ./.env \ + -f ./docker-compose_new.yaml up -d --remove-orphans + +doitall-new: ## do it all + $(MAKE) down-new down; sleep 5; $(MAKE) up-new; sleep 15; ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true && \ + $(MAKE) --silent sidecar + +logs-%: ## logs-gps, logs-imu as examples + ${CONTAINER_BIN} exec -it sc01-hw-components bash -c "tail -f /home/nos3/$*.log" + +logs-all: + ${CONTAINER_BIN} exec -it sc01-hw-components bash -c "tail -f /home/nos3/hw-components.log" + +sidecar: ## sidecar + cd ${CONTAINER_DIR}/ && ./sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" + +doitall: ## do it all + $(MAKE) down down-new; sleep 5; $(MAKE) up; sleep 15; ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true && \ + $(MAKE) --silent sidecar + +clean: | down down-new ## clean images, cache, volumes, and networks + yes | ${CONTAINER_BIN} image prune --filter "dangling=true" + yes | ${CONTAINER_BIN} system prune -a + yes | ${CONTAINER_BIN} volume prune + yes | ${CONTAINER_BIN} network prune + +up-attached: down + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} --env-file ./.env --remove-orphans + +up-kubernetes: + cd ${K8S_DIR} && ./kubernetes.sh + +#--- +RESET = \033[0m +PURPLE = \033[0;35m +GREEN = \033[0;32m +LINE = $(PURPLE)----------------------------------------------------------------------------------------$(RESET) + +help: + @echo + @printf "\033[37m%-30s\033[0m %s\n" "#----------------------------------------------------------------------------------------" + @printf "\033[37m%-30s\033[0m %s\n" "# Makefile targets " + @printf "\033[37m%-30s\033[0m %s\n" "#----------------------------------------------------------------------------------------" + @echo + @printf "\033[37m%-30s\033[0m %s\n" "#-target-----------------------description-----------------------------------------------" + @grep -E '^[a-zA-Z_-].+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' + @echo + +print-% : ; @echo $* = $($*) diff --git a/deployments/README.md b/deployments/README.md new file mode 100644 index 000000000..1a3a13aad --- /dev/null +++ b/deployments/README.md @@ -0,0 +1,213 @@ +# + +```mermaid +graph TD; + %% client([client])-. Ingress-managed
load balancer .->ingress[Ingress]; + %% ingress-->|routing rule|service[Service]; + + subgraph namespace + %% ingress; + %% gps-->|tcp:4245|fortytwo[fortytwo] + %% time-->message_bus + + rw0-->|rx:4278|fortytwo + fortytwo[fortytwo]-->|tx:4277|rw0 + %% rw0-->|uart:2|uart-bus + + rw1-->|rx:4378|fortytwo + fortytwo[fortytwo]-->|tx:4377|rw1 + %% rw1-->|uart:3|uart-bus + + rw2-->|rx:4478|fortytwo + fortytwo[fortytwo]-->|tx:4477|rw2 + %% rw2-->|uart:4|uart-bus + + torquer-->|rx:4279|fortytwo[fortytwo] + thruster-->|rx:4280|fortytwo[fortytwo] + %% thruster-->|uart:29|uart-bus + + fortytwo[fortytwo]-->|tx:4245|gps + gps-sim-->|s|gps-app-->cfs + css-sim-->|s|css-app-->cfs + gps-->|uart:1|uart-bus + + subgraph gps + gps-sim + end + + subgraph cfs + gps-app; + end + + fortytwo[fortytwo]-->|tx:4277|css + %% css-->|64|i2c:2 + + fortytwo[fortytwo]-->|tx:4279|mag + + fortytwo[fortytwo]-->|tx:9999|truth42sim + truth42sim-->|tx:5111|yamcs + + fortytwo[fortytwo]-->|tx:4284|fss + + fortytwo[fortytwo]-->|tx:4281|imu + + fortytwo[fortytwo]-->|tx:4282|star-tracker + + fortytwo[fortytwo]-->|tx:4283|eps + + radio-->|ci:5010|nos_fsw + radio-->|to:5011|nos_fsw + radio-->|radio:5015|nos_fsw + + yamcs-->|tc:6010|cryptolib-->radio + + nos_fsw-->|command:5014|radio + + radio-->|tm:6011|yamcs + yamcs-->|tc:8010|radio + + %% camsim-->|60|i2c:2 + %% camsim-->|0|spi + + nos_engine_server-->|tcp:12001|time-->gps + stdio-terminal-->|udp:5555|x + udp-terminal-->|udp:5556|x + %% sample-sim-->|uart:16|uart-bus + + %% actuators + %% sensors + + subgraph time_sync + time + +end + + + subgraph reaction_wheels + rw0; + rw1; + rw2; + end + + subgraph actuators + reaction_wheels + thruster; + torquer; + end + + subgraph ground_segment + yamcs; + terminals; + cryptolib; + end + + subgraph physics_engine + fortytwo + end + + subgraph terminals + stdio-terminal; + udp-terminal; + end + + subgraph fsw + actuators + mag + mag + fss + css + camsim + eps + gps + star-tracker + imu + thruster + torquer + radio + sample-sim + uart-bus + nos_fsw + end + + subgraph space_segment + physics_engine + fsw + truth42sim + end + %% subgraph sensors + %% start-tracker + %% end + + end + + classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000; + classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff; + classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5; + classDef rw fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff; + + class fortytwo,gps,stdio-terminal,udp-terminal,sample-sim,eps,torquer,thruster,camsim,yamcs,cryptolib,css,mag,fss,imu,eps,star-tracker k8s; + + class truth42sim k8s; + class nos_engine_server k8s; + class nos_fsw k8s; + + class rw0,rw1,rw2 rw; + + class client plain; + class cluster cluster; +``` + +## docker ps + +```bash +docker ps | grep -v 'CONTAINER ID' |wc -l +24 + +``` + +```bash +docker ps + +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +3a130fadaea9 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 41 seconds ago Up 40 seconds nos_time_driver +9661c0fa0ac8 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 49 seconds ago Up 47 seconds sc_1_torquer_sim +4ff3a142614a ivvitc/nos3-64:20250217 "./nos3-single-simul…" 50 seconds ago Up 47 seconds sc_1_thruster_sim +277b46405250 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 50 seconds ago Up 48 seconds sc_1_startrk_sim +44d1809986f5 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 50 seconds ago Up 48 seconds sc_1_sample_sim +dcde3f725275 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 51 seconds ago Up 47 seconds 0.0.0.0:16010->6010/tcp, 0.0.0.0:16010->6010/udp, 0.0.0.0:16011->6011/tcp, 0.0.0.0:16011->6011/udp sc_1_radio_sim +1e0a92b988c3 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 51 seconds ago Up 48 seconds sc_1_rw_sim2 +eb3bc34fcc2f ivvitc/nos3-64:20250217 "./nos3-single-simul…" 51 seconds ago Up 49 seconds sc_1_rw_sim1 +0c327e64ef4e ivvitc/nos3-64:20250217 "./nos3-single-simul…" 52 seconds ago Up 50 seconds sc_1_rw_sim0 +9c6166335f7f ivvitc/nos3-64:20250217 "./nos3-single-simul…" 52 seconds ago Up 50 seconds sc_1_mag_sim +523b92a28e7f ivvitc/nos3-64:20250217 "./nos3-single-simul…" 53 seconds ago Up 50 seconds sc_1_imu_sim +82dfa03e9c62 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 53 seconds ago Up 51 seconds sc_1_gps_sim +af58b5d09af2 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 53 seconds ago Up 51 seconds sc_1_fss_sim +42fe85609195 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 54 seconds ago Up 51 seconds sc_1_eps_sim +ac7787f9cf7a ivvitc/nos3-64:20250217 "./nos3-single-simul…" 54 seconds ago Up 51 seconds sc_1_css_sim +5aedf4c0a619 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 56 seconds ago Up 53 seconds sc_1_truth42sim +0282c8fb48e2 ivvitc/nos3-64:20250217 "/usr/bin/nos_engine…" 57 seconds ago Up 53 seconds sc_1_nos_engine_server +14e98992d60b ivvitc/nos3-64:20250217 "./support/standalone" 57 seconds ago Up 54 seconds sc_1_cryptolib +0c06e9b85d03 ivvitc/nos3-64:20250217 "/opt/neo/nos3/scrip…" 57 seconds ago Up 53 seconds sc_1_nos_fsw +1e84eafbabe1 ivvitc/nos3-64:20250217 "/opt/neo/nos3/scrip…" 58 seconds ago Up 54 seconds sc_1_onair +2365e959b0c6 ivvitc/nos3-64:20250217 "/home/neo/.nos3/42/…" 58 seconds ago Up 55 seconds sc_1_fortytwo +72c26bc3690a ivvitc/nos3-64:20250217 "./nos3-single-simul…" 59 seconds ago Up 58 seconds nos_udp_terminal +96c8948f8b01 ivvitc/nos3-64:20250217 "./nos3-single-simul…" 59 seconds ago Up 58 seconds nos_terminal +f78f9bda0e0a ivvitc/nos3-64:20250217 "mvn -Dmaven.repo.lo…" About a minute ago Up 58 seconds 0.0.0.0:5012->5012/tcp, 0.0.0.0:8090->8090/tcp cosmos_openc3-operator_1 + +``` + +## docker network list + +```bash + +docker network list + +NETWORK ID NAME DRIVER SCOPE +2a772b648d00 bridge bridge local +5fe825f9aaa9 docker_quickstart bridge local +6652439bc0af host host local +8cd5a6aac2de none null local +6c6e8d8284e4 nos3_core bridge local +cca8286b3dd6 nos3_sc_1 bridge local + +``` diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml new file mode 100644 index 000000000..d8f871a22 --- /dev/null +++ b/deployments/Taskfile.yml @@ -0,0 +1,145 @@ +version: "3" + +vars: + IMAGE_TAG: foobar + +dotenv: + - ./.env + +env: + CONTAINERFILE: ./Dockerfile + CONTAINER_BIN: docker + CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " + CONTAINER_DIR: ./docker + + ENVIRO_FILE: ./.env + + DEPLOYMENT_ENVIRO: '{{.DEPLOYMENT_ENVIRO | default ""}}' + HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' + HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' + + MAVEN_HTTPS_PROXY: '-s./settings.xml' + +tasks: + default: + desc: Shows this help message + cmds: + - task --list-all + silent: true + + env_create: + desc: Create .env file for docker compose + cmds: + - | + ${CONTAINER_DIR}/env.sh > ${CONTAINER_DIR}/.env + + down: + desc: Bring down nos3 + cmds: + - | + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} \ + -f ./docker-compose.yaml down --remove-orphans + + down-new: + desc: Bring down nos3 + cmds: + - | + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} \ + -f ./docker-compose_new.yaml down --remove-orphans + + build-fortytwo: + desc: Build yamcs + deps: + - env_create + - set-permissions + cmds: + - | + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-fortytwo + + build-yamcs: + desc: Build yamcs + deps: + - env_create + - set-permissions + cmds: + - | + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-gsw + + build: + desc: Build all containers + cmds: + - task build-yamcs + - task build-fortytwo + + set-permissions: ## + desc: set filesystem permissions, needed for restricted accounts + cmds: + - find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable + - find . -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable + - find . -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable + - find . -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable + - find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable + + up: + desc: Bring up nos3 in detached state + deps: + - build + cmds: + - | + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} \ + --env-file ${ENVIRO_FILE} \ + -f ./docker-compose.yaml up -d --remove-orphans + + up-new: + desc: Bring up nos3 in detached state + deps: + - build + cmds: + - | + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} \ + --env-file ${ENVIRO_FILE} \ + -f ./docker-compose_new.yaml up -d --remove-orphans + + sidecar: + desc: Run sidecar to enable output + cmds: + - | + ${CONTAINER_DIR}/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" + + doitall: + desc: Do it all for nos3 + cmds: + - task down ; sleep 5 + - task up ; sleep 15 + - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true + - task sidecar + + doitall-new: + desc: Do it all for nos3 + cmds: + - task down-new ; sleep 5 + - task up-new ; sleep 15 + - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true + - task sidecar + + clean: + desc: clean images, cache, volumes, and networks + deps: + - down + - down-new + cmds: + - yes | ${CONTAINER_BIN} image prune --filter "dangling=true" + - yes | ${CONTAINER_BIN} system prune -a + - yes | ${CONTAINER_BIN} volume prune + - yes | ${CONTAINER_BIN} network prune + + setup-maven: + desc: Setup maven repository + cmds: + - echo "" > ${CONTAINER_DIR}/yamcs/settings.xml diff --git a/deployments/docker/42/Dockerfile b/deployments/docker/42/Dockerfile new file mode 100644 index 000000000..2a74b0d87 --- /dev/null +++ b/deployments/docker/42/Dockerfile @@ -0,0 +1,139 @@ +ARG REGISTRY_HOST=ghcr.io +ARG IMAGE_USERNAME=haisamido +ARG IMAGE_NAME=nos3-base +ARG IMAGE_TAG=dev + +ARG IMAGE_URI=${REGISTRY_HOST}/${IMAGE_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG} + +ARG GIT_URL=https://github.com/nasa-itc/42.git +ARG GIT_COMMIT=nos3-main + +ARG VNC_PASSWORD=0123456789 + +################################################################################ +FROM ${IMAGE_URI} AS x-vnc +################################################################################ +USER root + +ARG DEBIAN_FRONTEND=noninteractive + +ARG DEPLOYMENT_ENVIRO +ARG HTTPS_PROXY +ARG HTTP_PROXY +ARG NO_PROXY + +ENV DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} +ENV HTTPS_PROXY=${HTTPS_PROXY} +ENV HTTP_PROXY=${HTTP_PROXY} +ENV NO_PROXY=${NO_PROXY} + +ARG VNC_PASSWORD +ENV VNC_PASSWORD=${VNC_PASSWORD} + +RUN apt-get update && \ + apt-get install -y \ + gnupg \ + wget \ + apt-transport-https \ + software-properties-common \ + novnc \ + websockify \ + libxv1 \ + libglu1-mesa \ + xauth \ + x11-utils \ + xterm \ + xorg \ + tightvncserver && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# turbovnc: https://turbovnc.org/ +RUN wget -q -O- https://packagecloud.io/dcommander/turbovnc/gpgkey | gpg --dearmor >/etc/apt/trusted.gpg.d/TurboVNC.gpg +RUN wget -P /etc/apt/sources.list.d/ https://raw.githubusercontent.com/TurboVNC/repo/main/TurboVNC.list + +# virtualgl: https://virtualgl.org/ +RUN wget -q -O- https://packagecloud.io/dcommander/virtualgl/gpgkey | gpg --dearmor >/etc/apt/trusted.gpg.d/VirtualGL.gpg +RUN wget -P /etc/apt/sources.list.d/ https://raw.githubusercontent.com/VirtualGL/repo/main/VirtualGL.list + +# Install virtualgl and turbovnc +RUN apt-get update && \ + apt-get install -y \ + virtualgl \ + turbovnc && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Install and configure Display Manager(s) - https://fluxbox.org/ +RUN apt-get update && \ + apt-get install -y \ + fluxbox && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# TODO: need to figure out why this is needed +RUN ln -sf /usr/share/xsessions/fluxbox.desktop /usr/share/xsessions/gnome.desktop + +# Install tools for git cloning and development, etc. +RUN apt-get update && \ + apt install -y curl git build-essential vim jq tree tmux htop bash-completion dos2unix netcat-traditional iputils-ping && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Install https://taskfile.dev/ (Taskfile.yaml) +RUN sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d + +# Install some useful .bashrc-isms +# COPY .bashrc.local /root/.bashrc.local +# RUN cat /root/.bashrc.local >> /root/.bashrc + +# VNC Config +RUN mkdir -p ~/.vnc/ +RUN echo ${VNC_PASSWORD} | vncpasswd -f > ~/.vnc/passwd +RUN chmod 0600 ~/.vnc/passwd +RUN openssl req -x509 -nodes -newkey rsa:2048 -keyout ~/novnc.pem -out ~/novnc.pem -days 3650 -subj "/C=US/ST=NY/L=NY/O=NY/OU=NY/CN=NY emailAddress=email@example.com" + +################################################################################ +FROM x-vnc AS fortytwo +################################################################################ +ARG GIT_URL +ARG GIT_COMMIT + +ENV GIT_URL=${GIT_URL} +ENV GIT_COMMIT=${GIT_COMMIT} + +# VNC Config +RUN mkdir -p ~/.vnc/ +RUN echo ${VNC_PASSWORD} | vncpasswd -f > ~/.vnc/passwd +RUN chmod 0600 ~/.vnc/passwd +RUN openssl req -x509 -nodes -newkey rsa:2048 -keyout ~/novnc.pem -out ~/novnc.pem -days 3650 -subj "/C=US/ST=NY/L=NY/O=NY/OU=NY/CN=NY emailAddress=email@example.com" + +# Install 42's dependencies +RUN apt-get update && \ + apt-get -y install libglu1-mesa-dev freeglut3-dev mesa-common-dev libglfw3-dev && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# 42's MonteCarlo dependencies +RUN apt-get update && \ + apt-get -y install octave tshark && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# install Julia +RUN curl -fsSL https://install.julialang.org | sh -s -- --yes + +# Clone the 42 repo for a specific branch + +RUN mkdir -p /opt/nasa-itc && \ + cd /opt/nasa-itc && \ + git clone --recurse-submodules -b ${GIT_COMMIT} -j4 ${GIT_URL} && \ + cd ./42 &&\ + make clean && \ + make -j7 + +COPY entrypoint.sh /entrypoint.sh + +COPY startapp.sh /startapp.sh + +CMD ["/entrypoint.sh"] diff --git a/deployments/docker/42/entrypoint.sh b/deployments/docker/42/entrypoint.sh new file mode 100755 index 000000000..48057b74a --- /dev/null +++ b/deployments/docker/42/entrypoint.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +rm -f /tmp/.X1-lock || true +rm -f /tmp/.X11-unix/X1 || true + +pkill -9 -f vncserver || true +pkill -9 -f Xvnc || true +pkill -9 -f websockify || true + +/opt/TurboVNC/bin/vncserver -securitytypes tlsnone,x509none,none && \ + sleep 5 && \ + websockify -D \ + --web=/usr/share/novnc/ \ + --cert=~/novnc.pem 80 localhost:5901 + +export DISPLAY=${DISPLAY:-:1} +export DIR=/opt/nasa-itc +export GIT_FOLDER=${GIT_FOLDER} + +xterm & + +rm -rf /opt/nasa-itc/42/NO3InOut/{*.42,*.csv} + +if [ "$RECOMPILE" == "true" ]; then + cd /opt/nasa-itc/42 && \ + git fetch && \ + git checkout ${GIT_COMMIT} && \ + git pull origin && \ + git submodule update && \ + make clean && \ + make -j2 +fi + +STARTUP_FOLDER=${STARTUP_FOLDER:-NO3InOut} + +cd /opt/nasa-itc/42 && \ + xterm -e "./42 ${STARTUP_FOLDER}" & + +echo "Started 42 with PID $!" + +tail -f /dev/null diff --git a/deployments/docker/42/ivvtc/Dockerfile b/deployments/docker/42/ivvtc/Dockerfile new file mode 100644 index 000000000..00b340717 --- /dev/null +++ b/deployments/docker/42/ivvtc/Dockerfile @@ -0,0 +1,51 @@ +ARG REGISTRY_HOST=docker.io +ARG IMAGE_USERNAME=ivvitc +ARG IMAGE_NAME=nos3-64 +ARG IMAGE_TAG=20250217 + +ARG IMAGE_URI=${REGISTRY_HOST}/${IMAGE_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG} + +ARG GIT_URL=https://github.com/nasa-itc/42.git +ARG GIT_BRANCH=nos3-main + +ARG BUILD_DIR=/builds +ARG BASE_DIR=${BUILD_DIR}/nos3 + +#------------------------------------------------------------------------------ +FROM ${IMAGE_URI} +#------------------------------------------------------------------------------ +ARG DEBIAN_FRONTEND=noninteractive + +#--- GIT CONFIGs +ARG GIT_URL +ARG GIT_BRANCH + +ENV GIT_URL=${GIT_URL} +ENV GIT_BRANCH=${GIT_BRANCH} +#--- + +#--- NOS3 CONFIGs +ARG BUILD_DIR +ARG BASE_DIR + +ENV BUILD_DIR=${BUILD_DIR} +ENV BASE_DIR=${BASE_DIR} +#--- + +RUN apt-get update && \ + apt-get -y install tmux tree iputils-ping dnsutils tshark && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +RUN mkdir -p ${BUILD_DIR} + +WORKDIR ${BUILD_DIR} + +RUN git clone https://github.com/nasa-itc/42.git --depth 1 -b nos3-main +RUN cd ./42 && make -j2 + +WORKDIR ${BASE_DIR} + +COPY ./entrypoint.sh /entrypoint.sh + +CMD ["/entrypoint.sh"] diff --git a/deployments/docker/42/ivvtc/entrypoint.sh b/deployments/docker/42/ivvtc/entrypoint.sh new file mode 100755 index 000000000..e69de29bb diff --git a/deployments/docker/42/kubernetes/deployment.yaml b/deployments/docker/42/kubernetes/deployment.yaml new file mode 100644 index 000000000..0b4943c50 --- /dev/null +++ b/deployments/docker/42/kubernetes/deployment.yaml @@ -0,0 +1,64 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: myorg-dev-missions-exp-m01-sc1-fortytwo + namespace: myorg-dev-missions-exp-m01-sc1 + labels: + app: myorg-dev-missions-exp-m01-sc1-fortytwo +spec: + selector: + matchLabels: + app: myorg-dev-missions-exp-m01-sc1-fortytwo + replicas: 1 + template: + metadata: + labels: + app: myorg-dev-missions-exp-m01-sc1-fortytwo + spec: + containers: + - name: fortytwo + # 3d4e07bc4ab994e4824e95810aa2d70916d7bba4 + image: ghcr.io/ericstoneking/42:latest + imagePullPolicy: Always + resources: + requests: + memory: "2Gi" + cpu: "1" + limits: + memory: "2Gi" + cpu: "3" + ports: + - name: x-vnc-pod + containerPort: 80 +# --- +# apiVersion: apps/v1 +# kind: Deployment +# metadata: +# name: myorg-dev-missions-exp-m01-sc1-fortytwo-x-vnc +# namespace: myorg-dev-missions-exp-m01-sc1 +# labels: +# app: myorg-dev-missions-exp-m01-sc1-fortytwo-x-vnc +# spec: +# selector: +# matchLabels: +# app: myorg-dev-missions-exp-m01-sc1-fortytwo-x-vnc +# replicas: 1 +# template: +# metadata: +# labels: +# app: myorg-dev-missions-exp-m01-sc1-fortytwo-x-vnc +# spec: +# containers: +# - name: fortytwo-x-vnc +# image: ghcr.io/haisamido/x-vnc:latest +# imagePullPolicy: Always +# resources: +# requests: +# memory: "2Gi" +# cpu: "1" +# limits: +# memory: "2Gi" +# cpu: "3" +# ports: +# - name: x-vnc-pod-1 +# containerPort: 81 diff --git a/deployments/docker/42/kubernetes/ingress.yaml b/deployments/docker/42/kubernetes/ingress.yaml new file mode 100644 index 000000000..e69de29bb diff --git a/deployments/docker/42/kubernetes/kubernetes.sh b/deployments/docker/42/kubernetes/kubernetes.sh new file mode 100755 index 000000000..e30edba20 --- /dev/null +++ b/deployments/docker/42/kubernetes/kubernetes.sh @@ -0,0 +1,26 @@ + +REALM=myorg-dev-missions-exp +K8S_CONTEXT=kind-${REALM} + +K8S_CONTEXT=docker-desktop +K8S_NAMESPACE=${REALM}-m01-sc1 + +COMPONENT=fortytwo + +echo; echo Creating namespace ${K8S_NAMESPACE} in context ${K8S_CONTEXT}... +kubectl create namespace ${K8S_NAMESPACE} --context ${K8S_CONTEXT} || true + +kubectl --context ${K8S_CONTEXT} apply -k . + +K8S_POD=$(kubectl get pods --context ${K8S_CONTEXT} --namespace ${K8S_NAMESPACE} | grep ${COMPONENT} | cut -d' ' -f1) + +x=${HOME}/development/github.com/haisamido/nos3/cfg/InOut + +kubectl --context ${K8S_CONTEXT} --namespace ${K8S_NAMESPACE} cp ${x} ${K8S_POD}:/42/X + +# K8S_POD=myorg-dev-missions-exp-m01-sc1-fortytwo-7dcfdc6446-z96md +# K8S_CONTEXT=kind-myorg-dev-missions-exp +# K8S_NAMESPACE=myorg-dev-missions-exp-m01-sc1 + +sleep 10 +kubectl port-forward pod/${K8S_POD} 30003:80 --context ${K8S_CONTEXT} --namespace ${K8S_NAMESPACE} diff --git a/deployments/docker/42/kubernetes/kustomization.yaml b/deployments/docker/42/kubernetes/kustomization.yaml new file mode 100644 index 000000000..ff2d3285b --- /dev/null +++ b/deployments/docker/42/kubernetes/kustomization.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./deployment.yaml + - ./service.yaml +# - ./ingress.yaml +# - ./pv.yaml \ No newline at end of file diff --git a/deployments/docker/42/kubernetes/pv.yaml b/deployments/docker/42/kubernetes/pv.yaml new file mode 100644 index 000000000..99f28c1c0 --- /dev/null +++ b/deployments/docker/42/kubernetes/pv.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: mysql-pv-volume + labels: + type: local +spec: + storageClassName: manual + capacity: + storage: 20Gi + accessModes: + - ReadWriteOnce + hostPath: + path: "/mnt/data" +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: fortytwo +spec: + storageClassName: manual + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi \ No newline at end of file diff --git a/deployments/docker/42/kubernetes/service.yaml b/deployments/docker/42/kubernetes/service.yaml new file mode 100644 index 000000000..5f7dc245b --- /dev/null +++ b/deployments/docker/42/kubernetes/service.yaml @@ -0,0 +1,22 @@ + apiVersion: v1 + kind: Service + metadata: + name: fortytwo + namespace: myorg-dev-missions-exp-m01-sc1 + spec: + selector: + app: myorg-dev-missions-exp-m01-sc1-fortytwo + ports: + - name: fortytwo + protocol: TCP + port: 80 + targetPort: 30001 + - name: healthcheck-tcp + protocol: TCP + port: 60000 + targetPort: 60000 + - name: healthcheck-udp + protocol: UDP + port: 60000 + targetPort: 60000 + type: ClusterIP diff --git a/deployments/docker/42/nos3.yaml b/deployments/docker/42/nos3.yaml new file mode 100644 index 000000000..4d98248f1 --- /dev/null +++ b/deployments/docker/42/nos3.yaml @@ -0,0 +1,101 @@ +metadata: + OU: myorg + ENVIRO: dev + TENANT: tenant + CONTEXT: missions # -exp must exist to match remote AWS EKS cluster + PURPOSE: -exp + +defaults: + spec: + HEALTHCHECK_PORT: &HEALTHCHECK_PORT + 60000 + PATHS: &PATHS + BASE_DIR: &BASE_DIR + /builds/nos3 + SIM_BIN: &SIM_BIN + /builds/nos3/sims/build/bin + SIMULATOR_BIN: &SIMULATOR_BIN + /builds/nos3/sims/build/bin/nos3-single-simulator + LOG_CONFIG: &LOG_CONFIG + /builds/nos3/sims/build/bin/sim_log_config.xml + # CFG_FILE: &CFG_FILE + # /builds/nos3/sims/build/bin/nos3-simulator.xml + SC_CFG_FILE: &SC_CFG_FILE + /builds/nos3/sims/build/bin/nos3-simulator.xml + GND_CFG_FILE: &GND_CFG_FILE + /builds/nos3/sims/build/bin/nos3-simulator.xml + IMAGE_REGISTRY: &IMAGE_REGISTRY + ghcr.io + IMAGE_URI: &IMAGE_URI + ghcr.io/ericstoneking/42:latest + container: &container + PATHS: + << : *PATHS + resources: &resources + limits: &limits + memory: "128Mi" + cpu: "100m" + requests: &requests + memory: "128Mi" + cpu: "100m" + nodes: &nodes + min_size: 1 + max_size: 1 + desired_size: 1 + instance_types: m6i.xlarge + nodeSelector: "" + imagePullPolicy: IfNotPresent + components: &hw_components + fortytwo: + name: fortytwo + host: fortytwo + replicas: 1 + container: + PATHS: + BASE_DIR: &BASE_DIR + /builds/nos3 + SIM_BIN: &SIM_BIN + /builds/nos3/sims/build/bin + SIMULATOR_BIN: &SIMULATOR_BIN + /builds/nos3/sims/build/bin/nos3-single-simulator + LOG_CONFIG: &LOG_CONFIG + /builds/nos3/sims/build/bin/sim_log_config.xml + # CFG_FILE: &CFG_FILE + # /builds/nos3/sims/build/bin/nos3-simulator.xml + SC_CFG_FILE: &SC_CFG_FILE + /builds/nos3/sims/build/bin/nos3-simulator.xml + GND_CFG_FILE: &GND_CFG_FILE + /builds/nos3/sims/build/bin/nos3-simulator.xml + IMAGE_REGISTRY: &IMAGE_REGISTRY + ghcr.io + IMAGE_URI: &IMAGE_URI + ghcr.io/ericstoneking/42:latest + resources: &resources + limits: &limits + memory: "128Mi" + cpu: "100m" + requests: &requests + memory: "128Mi" + cpu: "100m" + + +missions: + - m01: + enabled: true + spacecraft: + - sc1: + enabled: true + components: + << : *hw_components + + - m02: + enabled: false + spacecraft: + - sc1: + enabled: true + components: + << : *hw_components + - sc2: + enabled: false + components: + << : *hw_components \ No newline at end of file diff --git a/deployments/docker/42/startapp.sh b/deployments/docker/42/startapp.sh new file mode 100755 index 000000000..70b8c2b0e --- /dev/null +++ b/deployments/docker/42/startapp.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +export DISPLAY=:1 + +DIR=/opt/nasa-itc + +xterm& + +cd ${DIR} && git clone https://github.com/nasa-itc/42.git || true && \ +cd ${DIR}/42 && \ + git fetch && \ + git checkout nos3-main && \ + make clean && \ + make -j7 + +cd ${DIR}/42 && xterm -e ./42 & +echo "Started 42 in xterm with PID $!" + +xterm & + +tail -f /dev/null + diff --git a/deployments/docker/docker-compose.yaml b/deployments/docker/docker-compose.yaml new file mode 100644 index 000000000..1321465a1 --- /dev/null +++ b/deployments/docker/docker-compose.yaml @@ -0,0 +1,758 @@ +#name: nos3-m01-sc01 + +services: + nos3-fortytwo: + image: ghcr.io/haisamido/nos3-base-fortytwo:dev + env_file: + - .env + build: + context: ./42 + dockerfile: Dockerfile + args: + DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} + HTTPS_PROXY: ${HTTPS_PROXY} + HTTP_PROXY: ${HTTP_PROXY} + NO_PROXY: ${NO_PROXY} + MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + GIT_URL: ${FORTYTWO_GIT_URL} + GIT_COMMIT: ${FORTYTWO_GIT_COMMIT} + GIT_FOLDER: ${FORTYTWO_GIT_FOLDER:-42} + STARTUP_FOLDER: ${FORTYTWO_STARTUP_FOLDER} + RECOMPILE: ${FORTYTWO_RECOMPILE:-false} + BASE_DIR: ${FORTYTWO_BASE_DIR} + VNC_PASSWORD: ${FORTYTWO_VNC_PASSWORD} + healthcheck: + test: ["CMD-SHELL", "/usr/bin/pgrep 42"] + interval: 10s + timeout: 5s + retries: 5 + attach: true + container_name: sc01-fortytwo + hostname: fortytwo + working_dir: "/opt/nasa-itc/" + command: '/entrypoint.sh' + volumes: + - ${PWD}/../../cfg/InOut/:/opt/nasa-itc/42/NOS3InOut/ + - ${PWD}/../${MINIMAL_PATH}/cfg/InOut/Inp_IPC.txt:/opt/nasa-itc/42/NOS3InOut/Inp_IPC.txt + - ${PWD}/42/entrypoint.sh:/entrypoint.sh + - ${PWD}/42/startapp.sh:/startapp.sh + ports: + - "127.0.0.1:30090:80" + environment: + DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} + HTTPS_PROXY: ${HTTPS_PROXY} + HTTP_PROXY: ${HTTP_PROXY} + NO_PROXY: ${NO_PROXY} + MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + GIT_URL: ${FORTYTWO_GIT_URL} + GIT_COMMIT: ${FORTYTWO_GIT_COMMIT} + GIT_FOLDER: ${FORTYTWO_GIT_FOLDER:-42} + STARTUP_FOLDER: ${FORTYTWO_STARTUP_FOLDER} + RECOMPILE: ${FORTYTWO_RECOMPILE:-false} + BASE_DIR: ${FORTYTWO_BASE_DIR} + VNC_PASSWORD: ${FORTYTWO_VNC_PASSWORD} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-gsw: + image: ghcr.io/haisamido/nos3-base-yamcs:dev + env_file: + - .env + build: + context: ./yamcs + dockerfile: Dockerfile + args: + DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + HTTPS_PROXY: ${HTTPS_PROXY} + HTTP_PROXY: ${HTTP_PROXY} + NO_PROXY: ${NO_PROXY} + MAVEN_REPO_LOCAL: ${MAVEN_REPO_LOCAL} + MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + COMPONENT_DIR: ${COMPONENT_DIR} + YAMCS_DATA_DIR: ${YAMCS_DATA_DIR} + GSW_SOFTWARE: ${GSW_SOFTWARE} + GIT_URL: ${YAMCS_GIT_URL} + GIT_COMMIT: ${YAMCS_GIT_COMMIT} + healthcheck: + test: ["CMD-SHELL", "curl http://localhost:8090/api"] + interval: 10s + timeout: 5s + retries: 5 + attach: true + container_name: cosmos-openc3-operator-1 + hostname: cosmos + working_dir: "/home/nos3/.nos3/yamcs" + command: "/entrypoint.sh" + volumes: + - ${PWD}/yamcs/entrypoint.sh:/entrypoint.sh + - ${PWD}/yamcs/settings.xml:/home/nos3/.nos3/yamcs/settings.xml + ports: + - "127.0.0.1:8090:8090" + - "5012:5012" + tty: true + stdin_open: true + privileged: true + environment: + DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + HTTPS_PROXY: ${HTTPS_PROXY} + HTTP_PROXY: ${HTTP_PROXY} + NO_PROXY: ${NO_PROXY} + MAVEN_REPO_LOCAL: ${MAVEN_REPO_LOCAL} + MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + COMPONENT_DIR: ${COMPONENT_DIR} + YAMCS_DATA_DIR: ${YAMCS_DATA_DIR} + GSW_SOFTWARE: ${GSW_SOFTWARE} + GIT_URL: ${YAMCS_GIT_URL} + GIT_COMMIT: ${YAMCS_GIT_COMMIT} + networks: + nos3-sc01-00: + aliases: + - active-gs + - yamcs + nos3-core-00: + + nos3-sidecar: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + container_name: sc01-nos-sidecar + hostname: sc01-sidecar + working_dir: "/home/nos3/" + command: "/entrypoint.sh active-gs 8090" + volumes: + - ${PWD}/sidecar/entrypoint.sh:/entrypoint.sh + - ${PWD}/sidecar/commanding.py:/commanding.py + healthcheck: + test: ["CMD-SHELL", "curl http://active-gs:8090/api"] + interval: 10s + timeout: 5s + retries: 5 + depends_on: + nos3-gsw: + condition: service_healthy + nos3-truth42sim: + condition: service_started + nos3-radio-sim-cryptolib: + condition: service_started + # nos3-cryptolib: + # condition: service_started + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-onair: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + container_name: sc01-onair + working_dir: /home/nos3/builds/nos3/fsw/build/exe/cpu1 + command: "/home/nos3/builds/nos3/scripts/fsw/onair_launch.sh" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + BASE_DIR: /home/nos3/builds/nos3 + FSW_DIR: /home/nos3/builds/nos3/fsw/build/exe/cpu1 + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + SCRIPT_DIR: + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-fsw: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + healthcheck: + test: ["CMD-SHELL", "/usr/bin/pgrep core-cpu1"] + interval: 10s + timeout: 5s + retries: 5 + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-nos-engine-server: + condition: service_healthy + container_name: sc01-nos-fsw + hostname: nos-fsw + working_dir: /home/nos3/builds/nos3/ + volumes: + - ${PWD}/fsw/entrypoint.sh:/entrypoint.sh + command: "/entrypoint.sh" + sysctls: + fs.mqueue.msg_max: 10000 + ulimits: + rtprio: 99 + cap_add: + - sys_nice + environment: + BASE_DIR: /home/nos3/builds/nos3 + FSW_DIR: /home/nos3/builds/nos3/fsw/build/exe/cpu1 + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-nos-engine-server: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "/usr/bin/nc -vz nos-engine-server 12000 && /usr/bin/nc -vz nos-engine-server 12001"] + interval: 10s + timeout: 5s + retries: 5 + container_name: sc01-nos-engine-server + hostname: nos-engine-server + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "/usr/bin/nos_engine_server_standalone -f ./nos_engine_server_config.json" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos_engine_server_config.json:/home/nos3/builds/nos3/sims/build/bin/nos_engine_server_config.json + ports: + - "127.0.0.1:12000:12000" + - "127.0.0.1:12001:12001" + tty: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - sc01-nos-engine-server + nos3-core-00: + + nos3-truth42sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-gsw: + # condition: service_healthy + nos3-nos-engine-server: + condition: service_healthy + container_name: sc01-truth42sim + hostname: truth42sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml truth42sim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-nos-terminal: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + container_name: nos-terminal + hostname: nos-terminal + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml stdio-terminal" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-nos-udp-terminal: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + container_name: nos-udp-terminal + hostname: nos-udp-terminal + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml udp-terminal" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-nos-sim-bridge: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + container_name: nos-sim-bridge + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-sim-cmdbus-bridge -f ./nos3-simulator.xml" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-camsim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-cam-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml camsim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - camsim + - sc01-camsim + nos3-core-00: + + nos3-css-sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-css-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-css-sim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - css + nos3-core-00: + + nos3-eps-sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-nos-engine-server: + condition: service_healthy + nos3-fortytwo: + condition: service_started + nos3-fsw: + condition: service_healthy + container_name: sc01-eps-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-eps-sim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - eps + nos3-core-00: + + nos3-fss-sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-fss-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-fss-sim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - fss + nos3-core-00: + + nos3-gps-sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-gps-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml gps" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - gps + nos3-core-00: + + nos3-imu-sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-imu-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-imu-sim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - imu + nos3-core-00: + + nos3-mag-sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-mag-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-mag-sim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - mag + nos3-core-00: + + nos3-rw-sim0: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-rw-sim0 + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim0" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - rw0 + nos3-core-00: + + nos3-rw-sim1: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-rw-sim1 + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim1" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - rw1 + nos3-core-00: + + nos3-rw-sim2: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-rw-sim2 + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim2" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - rw2 + nos3-core-00: + + # nos3-radio-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # healthcheck: + # test: [ "CMD-SHELL", "/usr/bin/pgrep -f nos3-single-simulator" ] + # interval: 10s + # timeout: 5s + # retries: 7 + # depends_on: + # nos3-cryptolib: + # condition: service_started + # container_name: sc01-radio-sim + # hostname: radio-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "/entrypoint.sh" + # volumes: + # - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # - ${PWD}/radio-sim/entrypoint.sh:/entrypoint.sh + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # # aliases: + # # - radio-sim + # nos3-core-00: + +# nos3-cryptolib: +# image: ghcr.io/haisamido/nos3-base:dev +# env_file: +# - .env +# attach: true +# healthcheck: +# test: ["CMD-SHELL", "/usr/bin/pgrep -f ./support/standalone"] +# interval: 10s +# timeout: 5s +# retries: 5 +# depends_on: +# # nos3-radio-sim: +# # condition: service_started +# nos3-fsw: +# condition: service_healthy +# container_name: sc01_cryptolib-gsw +# # hostname: cryptolib +# working_dir: /home/nos3/builds/nos3/gsw/build +# command: "./support/standalone" +# volumes: +# - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml +# environment: +# HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} +# networks: +# nos3-sc01-00: +# aliases: +# - cryptolib +# nos3-core-00: + + nos3-radio-sim-cryptolib: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + healthcheck: + test: [ "CMD-SHELL", "/usr/bin/pgrep -f nos3-single-simulator && /usr/bin/pgrep -f ./support/standalone" ] + interval: 10s + timeout: 5s + retries: 7 + depends_on: + nos3-fsw: + condition: service_healthy + nos3-gsw: + condition: service_healthy + container_name: sc01-radio-sim-cryptolib + hostname: radio-sim-cryptolib + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "/entrypoint.sh" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/radio-sim/entrypoint2.sh:/entrypoint.sh + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - radio-sim + - cryptolib + nos3-core-00: + + nos3-sample-sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-sample-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml sample-sim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-startrk-sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-startrk-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-star-tracker-sim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-thruster-sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-thruster-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-thruster-sim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-torquer-sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-fsw: + condition: service_healthy + container_name: sc01-torquer-sim + hostname: trq-sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-torquer-sim" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-time: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-nos-engine-server: + condition: service_healthy + container_name: nos-time-driver + hostname: nos-time-driver + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml time" + volumes: + - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - sc01-nos-time-driver + nos3-core-00: + +networks: + nos3-core-00: + external: ${EXTERNAL_NETWORK_CORE:-false} + name: nos3-core + nos3-sc01-00: + external: ${EXTERNAL_NETWORK_SC01:-false} + name: nos3-sc01 diff --git a/deployments/docker/docker-compose_new.yaml b/deployments/docker/docker-compose_new.yaml new file mode 100644 index 000000000..d9727fa26 --- /dev/null +++ b/deployments/docker/docker-compose_new.yaml @@ -0,0 +1,805 @@ +#name: nos3-m01-sc01 + +services: + nos3-fortytwo: + image: ghcr.io/haisamido/nos3-base-fortytwo:dev + env_file: + - .env + build: + context: ./42 + dockerfile: Dockerfile + args: + DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} + HTTPS_PROXY: ${HTTPS_PROXY} + HTTP_PROXY: ${HTTP_PROXY} + NO_PROXY: ${NO_PROXY} + MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + GIT_URL: ${FORTYTWO_GIT_URL} + GIT_COMMIT: ${FORTYTWO_GIT_COMMIT} + GIT_FOLDER: ${FORTYTWO_GIT_FOLDER:-42} + STARTUP_FOLDER: ${FORTYTWO_STARTUP_FOLDER} + RECOMPILE: ${FORTYTWO_RECOMPILE:-false} + BASE_DIR: ${FORTYTWO_BASE_DIR} + VNC_PASSWORD: ${FORTYTWO_VNC_PASSWORD} + healthcheck: + test: ["CMD-SHELL", "/usr/bin/pgrep 42"] + interval: 10s + timeout: 5s + retries: 5 + attach: true + container_name: sc01-fortytwo + hostname: fortytwo + working_dir: "/opt/nasa-itc/" + command: '/entrypoint.sh' + volumes: + - ${PWD}/../../cfg/InOut/:/opt/nasa-itc/42/NOS3InOut/ + - ${PWD}/42/entrypoint.sh:/entrypoint.sh + - ${PWD}/42/startapp.sh:/startapp.sh + ports: + - "127.0.0.1:30090:80" + environment: + DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} + HTTPS_PROXY: ${HTTPS_PROXY} + HTTP_PROXY: ${HTTP_PROXY} + NO_PROXY: ${NO_PROXY} + MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + GIT_URL: ${FORTYTWO_GIT_URL} + GIT_COMMIT: ${FORTYTWO_GIT_COMMIT} + GIT_FOLDER: ${FORTYTWO_GIT_FOLDER:-42} + STARTUP_FOLDER: ${FORTYTWO_STARTUP_FOLDER} + RECOMPILE: ${FORTYTWO_RECOMPILE:-false} + BASE_DIR: ${FORTYTWO_BASE_DIR} + VNC_PASSWORD: ${FORTYTWO_VNC_PASSWORD} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-gsw: + image: ghcr.io/haisamido/nos3-base-yamcs:dev + env_file: + - .env + build: + context: ./yamcs + dockerfile: Dockerfile + args: + DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + HTTPS_PROXY: ${HTTPS_PROXY} + HTTP_PROXY: ${HTTP_PROXY} + NO_PROXY: ${NO_PROXY} + MAVEN_REPO_LOCAL: ${MAVEN_REPO_LOCAL} + MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + COMPONENT_DIR: ${COMPONENT_DIR} + YAMCS_DATA_DIR: ${YAMCS_DATA_DIR} + GSW_SOFTWARE: ${GSW_SOFTWARE} + GIT_URL: ${YAMCS_GIT_URL} + GIT_COMMIT: ${YAMCS_GIT_COMMIT} + healthcheck: + test: ["CMD-SHELL", "curl http://localhost:8090/api"] + interval: 10s + timeout: 5s + retries: 5 + attach: true + container_name: cosmos-openc3-operator-1 + hostname: cosmos + working_dir: "/home/nos3/.nos3/yamcs" + command: "/entrypoint.sh" + volumes: + - ${PWD}/yamcs/entrypoint.sh:/entrypoint.sh + - ${PWD}/yamcs/settings.xml:/home/nos3/.nos3/yamcs/settings.xml + ports: + - "127.0.0.1:8090:8090" + - "5012:5012" + tty: true + stdin_open: true + privileged: true + environment: + DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + HTTPS_PROXY: ${HTTPS_PROXY} + HTTP_PROXY: ${HTTP_PROXY} + NO_PROXY: ${NO_PROXY} + MAVEN_REPO_LOCAL: ${MAVEN_REPO_LOCAL} + MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + COMPONENT_DIR: ${COMPONENT_DIR} + YAMCS_DATA_DIR: ${YAMCS_DATA_DIR} + GSW_SOFTWARE: ${GSW_SOFTWARE} + GIT_URL: ${YAMCS_GIT_URL} + GIT_COMMIT: ${YAMCS_GIT_COMMIT} + networks: + nos3-sc01-00: + aliases: + - active-gs + - yamcs + nos3-core-00: + + nos3-sidecar: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + container_name: sc01-nos-sidecar + hostname: sc01-sidecar + working_dir: "/home/nos3/" + command: "/entrypoint.sh active-gs 8090" + volumes: + - ${PWD}/sidecar/entrypoint.sh:/entrypoint.sh + - ${PWD}/sidecar/commanding.py:/commanding.py + healthcheck: + test: ["CMD-SHELL", "curl http://active-gs:8090/api"] + interval: 10s + timeout: 5s + retries: 5 + depends_on: + nos3-gsw: + condition: service_healthy + # nos3-truth42sim: + # condition: service_started + nos3-hw-components: + condition: service_healthy + # nos3-cryptolib: + # condition: service_started + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-hw-components: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + container_name: sc01-hw-components + hostname: sc01-hw-components + command: "/entrypoint.sh" + volumes: + - ${PWD}/hw-components/entrypoint.sh:/entrypoint.sh + - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + healthcheck: + test: [ "CMD-SHELL", "/usr/bin/pgrep -f nos3-single-simulator && /usr/bin/pgrep -f ./support/standalone" ] + interval: 10s + timeout: 5s + retries: 7 + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-nos-engine-server: + condition: service_healthy + nos3-fsw: + condition: service_healthy + nos3-gsw: + condition: service_healthy + networks: + nos3-sc01-00: + aliases: + - camsim + - sc01-camsim + - css + - eps + - fss + - gps + - imu + - mag + - rw0 + - rw1 + - rw2 + - sample + - star-tracker + - thruster + - torquer + - radio-sim + - cryptolib +# - truth42sim + nos3-core-00: + + # nos3-onair: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # container_name: sc01-onair + # working_dir: /home/nos3/builds/nos3/fsw/build/exe/cpu1 + # command: "/home/nos3/builds/nos3/scripts/fsw/onair_launch.sh" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # tty: true + # stdin_open: true + # privileged: true + # environment: + # BASE_DIR: /home/nos3/builds/nos3 + # FSW_DIR: /home/nos3/builds/nos3/fsw/build/exe/cpu1 + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # SCRIPT_DIR: + # networks: + # nos3-sc01-00: + # nos3-core-00: + + nos3-fsw: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + healthcheck: + test: ["CMD-SHELL", "/usr/bin/pgrep core-cpu1"] + interval: 10s + timeout: 5s + retries: 5 + attach: true + depends_on: + nos3-fortytwo: + condition: service_healthy + nos3-nos-engine-server: + condition: service_healthy + container_name: sc01-nos-fsw + hostname: nos-fsw + working_dir: /home/nos3/builds/nos3/ + volumes: + - ${PWD}/fsw/entrypoint.sh:/entrypoint.sh + command: "/entrypoint.sh" + sysctls: + fs.mqueue.msg_max: 10000 + ulimits: + rtprio: 99 + cap_add: + - sys_nice + environment: + BASE_DIR: /home/nos3/builds/nos3 + FSW_DIR: /home/nos3/builds/nos3/fsw/build/exe/cpu1 + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-nos-engine-server: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "/usr/bin/nc -vz nos-engine-server 12000 && /usr/bin/nc -vz nos-engine-server 12001"] + interval: 10s + timeout: 5s + retries: 5 + container_name: sc01-nos-engine-server + hostname: nos-engine-server + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "/usr/bin/nos_engine_server_standalone -f ./nos_engine_server_config.json" + volumes: + - ${PWD}/../nos3/cfg/sims/nos_engine_server_config.json:/home/nos3/builds/nos3/sims/build/bin/nos_engine_server_config.json + ports: + - "127.0.0.1:12000:12000" + - "127.0.0.1:12001:12001" + tty: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - sc01-nos-engine-server + nos3-core-00: + + nos3-truth42sim: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-gsw: + # condition: service_healthy + nos3-nos-engine-server: + condition: service_healthy + container_name: sc01-truth42sim + hostname: truth42sim + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml truth42sim" + volumes: + - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-nos-terminal: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + container_name: nos-terminal + hostname: nos-terminal + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml stdio-terminal" + volumes: + - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-nos-udp-terminal: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + container_name: nos-udp-terminal + hostname: nos-udp-terminal + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml udp-terminal" + volumes: + - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + nos3-nos-sim-bridge: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + container_name: nos-sim-bridge + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-sim-cmdbus-bridge -f ./nos3-simulator.xml" + volumes: + - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + nos3-core-00: + + # nos3-camsim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-cam-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml camsim" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - camsim + # - sc01-camsim + # nos3-core-00: + + # nos3-css-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-css-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-css-sim" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - css + # nos3-core-00: + + # nos3-eps-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-nos-engine-server: + # condition: service_healthy + # nos3-fortytwo: + # condition: service_started + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-eps-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-eps-sim" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - eps + # nos3-core-00: + + # nos3-fss-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-fss-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-fss-sim" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - fss + # nos3-core-00: + + # nos3-gps-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-gps-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml gps" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - gps + # nos3-core-00: + + # nos3-imu-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-imu-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-imu-sim" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - imu + # nos3-core-00: + + # nos3-mag-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-mag-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-mag-sim" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - mag + # nos3-core-00: + + # nos3-rw-sim0: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-rw-sim0 + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim0" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - rw0 + # nos3-core-00: + + # nos3-rw-sim1: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-rw-sim1 + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim1" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - rw1 + # nos3-core-00: + + # nos3-rw-sim2: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-rw-sim2 + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim2" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - rw2 + # nos3-core-00: + + # nos3-radio-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # healthcheck: + # test: [ "CMD-SHELL", "/usr/bin/pgrep -f nos3-single-simulator" ] + # interval: 10s + # timeout: 5s + # retries: 7 + # depends_on: + # nos3-cryptolib: + # condition: service_started + # container_name: sc01-radio-sim + # hostname: radio-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "/entrypoint.sh" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # - ${PWD}/radio-sim/entrypoint.sh:/entrypoint.sh + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # # aliases: + # # - radio-sim + # nos3-core-00: + +# nos3-cryptolib: +# image: ghcr.io/haisamido/nos3-base:dev +# env_file: +# - .env +# attach: true +# healthcheck: +# test: ["CMD-SHELL", "/usr/bin/pgrep -f ./support/standalone"] +# interval: 10s +# timeout: 5s +# retries: 5 +# depends_on: +# # nos3-radio-sim: +# # condition: service_started +# nos3-fsw: +# condition: service_healthy +# container_name: sc01_cryptolib-gsw +# # hostname: cryptolib +# working_dir: /home/nos3/builds/nos3/gsw/build +# command: "./support/standalone" +# volumes: +# - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml +# environment: +# HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} +# networks: +# nos3-sc01-00: +# aliases: +# - cryptolib +# nos3-core-00: + + # nos3-radio-sim-cryptolib: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # healthcheck: + # test: [ "CMD-SHELL", "/usr/bin/pgrep -f nos3-single-simulator && /usr/bin/pgrep -f ./support/standalone" ] + # interval: 10s + # timeout: 5s + # retries: 7 + # depends_on: + # nos3-fsw: + # condition: service_healthy + # nos3-gsw: + # condition: service_healthy + # container_name: sc01-radio-sim-cryptolib + # hostname: radio-sim-cryptolib + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "/entrypoint.sh" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # - ${PWD}/radio-sim/entrypoint2.sh:/entrypoint.sh + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # aliases: + # - radio-sim + # - cryptolib + # nos3-core-00: + + # nos3-sample-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-sample-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml sample-sim" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # nos3-core-00: + + # nos3-startrk-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-startrk-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-star-tracker-sim" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # nos3-core-00: + + # nos3-thruster-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-thruster-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-thruster-sim" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # nos3-core-00: + + # nos3-torquer-sim: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # depends_on: + # nos3-fortytwo: + # condition: service_healthy + # nos3-fsw: + # condition: service_healthy + # container_name: sc01-torquer-sim + # hostname: trq-sim + # working_dir: /home/nos3/builds/nos3/sims/build/bin + # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-torquer-sim" + # volumes: + # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # environment: + # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + # networks: + # nos3-sc01-00: + # nos3-core-00: + + nos3-time: + image: ghcr.io/haisamido/nos3-base:dev + env_file: + - .env + attach: true + depends_on: + nos3-nos-engine-server: + condition: service_healthy + container_name: nos-time-driver + hostname: nos-time-driver + working_dir: /home/nos3/builds/nos3/sims/build/bin + command: "./nos3-single-simulator -f ./nos3-simulator.xml time" + volumes: + - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + tty: true + stdin_open: true + privileged: true + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + networks: + nos3-sc01-00: + aliases: + - sc01-nos-time-driver + nos3-core-00: + +networks: + nos3-core-00: + external: ${EXTERNAL_NETWORK_CORE:-false} + name: nos3-core + nos3-sc01-00: + external: ${EXTERNAL_NETWORK_SC01:-false} + name: nos3-sc01 diff --git a/deployments/docker/docker-compose_orig.yaml b/deployments/docker/docker-compose_orig.yaml new file mode 100644 index 000000000..719f812dc --- /dev/null +++ b/deployments/docker/docker-compose_orig.yaml @@ -0,0 +1,220 @@ +name: nos3-m01-sc01 + +services: + nos3-fortytwo: +# image: docker.io/haisamido/42:20250217 + image: localhost/library/42:master + deploy: + resources: + limits: + cpus: '3' + memory: "2048MB" + reservations: + cpus: '1' + memory: "2048MB" + container_name: 00_m01-sc01_fortytwo + hostname: fortytwo + command: /entrypoint.sh + # healthcheck: + # test: ["CMD-SHELL", "nc -vz localhost 10000"] + # interval: 5s + # timeout: 5s + # retries: 5 + volumes: + - /Users/hido/development/github.com/haisamido/nos3/deployments/docker/42/entrypoint.sh:/entrypoint.sh + - /Users/hido/development/github.com/haisamido/nos3/deployments/docker/42/startapp.sh:/startapp.sh + - ${HOME}/development/github.com/nasa-itc/42:/opt/nasa-itc/42 + tty: true + stdin_open: true + environment: + HEALTHCHECK_PORT: 60000 + BASE_DIR: /builds/nos3 + SIM_BIN: /builds/nos3/sims/build/bin + SIMULATOR_BIN: /builds/nos3/sims/build/bin/nos3-single-simulator + LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml + CFG_FILE: /builds/nos3/sims/build/bin/nos3-simulator.xml + COMPONENT_NAME: fortytwo + DISPLAY: ":1" + ports: + - 30060:80 + privileged: true + networks: + - nos3_m01-sc01 + - nos3_core + + nos3-fsw: +# image: nos3-64-base:dev + image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 + deploy: + resources: + limits: + memory: "128M" + cpus: ".100" + reservations: + memory: "128M" + cpus: ".100" + container_name: 01_m01-sc01_nos_fsw + hostname: nos_fsw + command: "/entrypoint.sh" + working_dir: /builds/nos3/fsw/build/exe/cpu1 + sysctls: + fs.mqueue.msg_max: 10000 + ulimits: + rtprio: 99 + cap_add: + - sys_nice + volumes: + - ${PWD}/entrypoint_fsw.sh:/entrypoint.sh + depends_on: + nos3-fortytwo: + condition: service_started + tty: true + stdin_open: true + environment: + HEALTHCHECK_PORT: 60000 + BASE_DIR: /builds/nos3 + SIM_BIN: /builds/nos3/sims/build/bin + SCRIPT_DIR: /builds/nos3/scripts + SIMULATOR_BIN: /usr/bin/nos_engine_server_standalone + LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml + CFG_FILE: /builds/nos3/sims/build/bin/nos_engine_server_config.json + COMPONENT_NAME: fsw + privileged: true + networks: + - nos3_m01-sc01 + - nos3_core + + nos3-nos_engine_server: +# image: nos3-64-base:dev + image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 + container_name: 02_m01-sc01_nos_engine_server +# hostname: nos-engine-server + hostname: nos-engine-server + command: "/entrypoint.sh" + working_dir: /builds/nos3/sims/build/bin + tty: true + stdin_open: true + volumes: + - ${PWD}/entrypoint_nos_engine_server.sh:/entrypoint.sh + # TODO: activating the below seems to make port 12000 unavailable!!! + # healthcheck: + # test: ["CMD-SHELL", "nc -vz localhost 12000"] + # interval: 5s + # timeout: 5s + # retries: 5 + depends_on: + nos3-fsw: + condition: service_started + environment: + HEALTHCHECK_PORT: 60000 + BASE_DIR: /builds/nos3 + SIM_BIN: /builds/nos3/sims/build/bin + SIMULATOR_BIN: /usr/bin/nos_engine_server_standalone + LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml + CFG_FILE: /builds/nos3/sims/build/bin/nos_engine_server_config.json + COMPONENT_NAME: + privileged: true + networks: + nos3_m01-sc01: + aliases: + - nos_engine_server + nos3_core: + + nos3-gps: + image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 + container_name: 03_m01-sc01_gps_sim + hostname: gps + depends_on: + nos3-nos_engine_server: + condition: service_started + tty: true + stdin_open: true + environment: + HEALTHCHECK_PORT: 60000 + BASE_DIR: /builds/nos3 + SIM_BIN: /builds/nos3/sims/build/bin + SIMULATOR_BIN: /builds/nos3/sims/build/bin/nos3-single-simulator + LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml + CFG_FILE: /builds/nos3/sims/build/bin/nos3-simulator.xml + COMPONENT_NAME: gps + privileged: true + networks: + - nos3_m01-sc01 + - nos3_core + + nos3-time: + image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 + container_name: 04_nos_time_driver + hostname: time + depends_on: + nos3-nos_engine_server: + condition: service_started + nos3-gps: + condition: service_started + tty: true + stdin_open: true + environment: + HEALTHCHECK_PORT: 60000 + BASE_DIR: /builds/nos3 + SIM_BIN: /builds/nos3/sims/build/bin + SIMULATOR_BIN: /builds/nos3/sims/build/bin/nos3-single-simulator + LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml + CFG_FILE: /builds/nos3/sims/build/bin/nos3-simulator.xml + COMPONENT_NAME: time + privileged: true + networks: + nos3_m01-sc01: + aliases: + - nos_time_driver + - nos-time-driver + nos3_core: + +# nos3-truth42sim: +# image: nos3-64-base:dev +# # image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 +# container_name: m01-sc01_truth42sim +# hostname: truth42sim +# depends_on: +# nos3-nos_engine_server: +# condition: service_started +# nos3-fortytwo: +# condition: service_healthy +# environment: +# HEALTHCHECK_PORT: 60000 +# BASE_DIR: /builds/nos3 +# SIM_BIN: /builds/nos3/sims/build/bin +# SIMULATOR_BIN: /builds/nos3/sims/build/bin/nos3-single-simulator +# LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml +# CFG_FILE: /builds/nos3/sims/build/bin/nos3-simulator.xml +# COMPONENT_NAME: truth42sim +# privileged: true +# networks: +# - nos3_m01-sc01 +# - nos3_core + +networks: + nos3_core: + driver: bridge + nos3_m01-sc01: + + # nos3-fortytwo-2: + # image: ghcr.io/ericstoneking/42:latest + # container_name: m01-sc01_fortytwo2 + # hostname: fortytwo2 + # volumes: + # - ${HOME}/development/github.com/haisamido/nos3/deployments/scripts/42/startapp.sh:/startapp.sh + # - ${HOME}/development/github.com/nasa-itc/42:/opt/nasa-itc/42 + # environment: + # HEALTHCHECK_PORT: 60000 + # BASE_DIR: /builds/nos3 + # SIM_BIN: /builds/nos3/sims/build/bin + # SIMULATOR_BIN: /builds/nos3/sims/build/bin/nos3-single-simulator + # LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml + # CFG_FILE: /builds/nos3/sims/build/bin/nos3-simulator.xml + # COMPONENT_NAME: fortytwo + # ports: + # - 30040:80 + # privileged: true + # networks: + # - nos3_m01-sc01 + # - nos3_core \ No newline at end of file diff --git a/deployments/docker/entrypoint_nos_engine_server.sh b/deployments/docker/entrypoint_nos_engine_server.sh new file mode 100755 index 000000000..c28a9182e --- /dev/null +++ b/deployments/docker/entrypoint_nos_engine_server.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +pkill -f nos_engine_server_standalone || true + +/usr/bin/nos_engine_server_standalone /builds/nos3/sims/build/bin/nos_engine_server_config.json + +tail -f /dev/null diff --git a/deployments/docker/env.sh b/deployments/docker/env.sh new file mode 100755 index 000000000..36aa50fcc --- /dev/null +++ b/deployments/docker/env.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +# A script to generate .env file for Docker deployments + +cat << EOF +# +# Auto-generated by ${PWD}/$(basename $0) on $(date -u +"%Y-%m-%dT%H:%M:%S%z") +# + +DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} +HEALTHCHECK_PORT=${HEALTHCHECK_PORT} + +# Proxy configurations, the proxy values come for the environment, +# which is important for the vmmoc +HTTPS_PROXY=${HTTPS_PROXY} +HTTP_PROXY=${HTTP_PROXY} +NO_PROXY=${NO_PROXY} + +# Maven/Java specific configurations +MAVEN_REPO_LOCAL=/home/nos3/.nos3/.m2/repository +MAVEN_HTTPS_PROXY="--settings ./settings.xml" + +# 42 specific configurations +FORTYTWO_DISPLAY=:1 +FORTYTWO_GIT_URL=https://github.com/nasa-itc/42.git +FORTYTWO_GIT_COMMIT=nos3-main +FORTYTWO_GIT_FOLDER=42 +FORTYTWO_STARTUP_FOLDER=NOS3InOut +FORTYTWO_RECOMPILE=false +FORTYTWO_BASE_DIR=/opt/nasa-itc +FORTYTWO_VNC_PASSWORD=$(echo -n "foobar" | shasum -a 256 | cut -d" " -f1) + +# gsw specific configurations +GSW_SOFTWARE=yamcs +COMPONENT_DIR=/home/nos3/builds/nos3/components + +# yamcs specific configurations +YAMCS_DATA_DIR=/home/nos3/.nos3/yamcs/target/yamcs/yamcs-data +# YAMCS_ETC_DIR=/home/nos3/.nos3/yamcs/target/yamcs/yamcs-etc +# YAMCS_CACHE_DIR=/home/nos3/.nos3/yamcs/target/yamcs/yam +YAMCS_GIT_URL=https://github.com/nasa-itc/nos3_yamcs_master.git +YAMCS_GIT_COMMIT=nos3-dev + +# nos3 specific configurations +NOS3_DIR=/home/nos3/.nos3 +NOS3_USER=nos3 +FLIGHT_SOFTWARE=cfs + +# nasa-itc specific configurations +BASE_DIR=/opt/nasa-itc + +EOF \ No newline at end of file diff --git a/deployments/docker/fsw/Dockerfile b/deployments/docker/fsw/Dockerfile new file mode 100644 index 000000000..6bc5a4a89 --- /dev/null +++ b/deployments/docker/fsw/Dockerfile @@ -0,0 +1,63 @@ +ARG REGISTRY_HOST=docker.io +ARG IMAGE_USERNAME=ivvitc +ARG IMAGE_NAME=nos3-64 +ARG IMAGE_TAG=20250217 + +#ARG IMAGE_URI=${REGISTRY_HOST}/${IMAGE_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG} + +ARG IMAGE_URI=ghcr.io/haisamido/nos3-base:dev + +ARG BASE_DIR=/home/nos3/builds/nos3 +ARG FLIGHT_SOFTWARE=cfs + +#------------------------------------------------------------------------------ +FROM ${IMAGE_URI} +#------------------------------------------------------------------------------ +ARG DEBIAN_FRONTEND=noninteractive + +#--- PROXY CONFIG (if needed) +ARG MAVEN_HTTPS_PROXY +ARG HTTPS_PROXY +ARG HTTP_PROXY +ARG DEPLOYMENT_ENVIRO + +ENV MAVEN_HTTPS_PROXY=$MAVEN_HTTPS_PROXY +ENV HTTPS_PROXY=$HTTPS_PROXY +ENV HTTP_PROXY=$HTTP_PROXY +ENV DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} +#--- + +#--- GIT CONFIGs +ARG GIT_URL +ARG GIT_BRANCH + +ENV GIT_URL=${GIT_URL} +ENV GIT_BRANCH=${GIT_BRANCH} +#--- + +#--- NOS3 CONFIGs +ARG BASE_DIR +ARG FLIGHT_SOFTWARE + +ENV BASE_DIR=${BASE_DIR} +ENV FLIGHT_SOFTWARE=${FLIGHT_SOFTWARE} + +#--- + +# COPY ./libuart.c ${BASE_DIR}/fsw/apps/hwlib/fsw/linux/libuart.c + +#RUN mv ${BASE_DIR}/fsw/apps/hwlib/fsw/linux/libuart.c ${BASE_DIR}/fsw/apps/hwlib/fsw/linux/libuart.c.orig + +WORKDIR ${BASE_DIR} + +RUN make -j8 clean +RUN make -j8 prep +RUN make -j8 config +RUN make -j8 build-cryptolib +RUN make -j8 -e FLIGHT_SOFTWARE=${FLIGHT_SOFTWARE} build-fsw +RUN make -j8 build-sim +RUN make -j8 build-test + +COPY entrypoint.sh /entrypoint.sh + +CMD ["/entrypoint.sh"] diff --git a/deployments/docker/fsw/entrypoint.sh b/deployments/docker/fsw/entrypoint.sh new file mode 100755 index 000000000..01030a8f4 --- /dev/null +++ b/deployments/docker/fsw/entrypoint.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# if [ -n "${HEALTHCHECK_PORT}" ]; then + +# if (( ${HEALTHCHECK_PORT} )); then # only if port is a number proceed +# pkill -f nc || +# while true; do (echo -e 'HTTP/1.1 200 OK\r\n'; echo -e "\n\tSuccess: health check port ${HEALTHCHECK_PORT}" ; echo -e "\t$(date -u +%FT%T)\n") | nc -lp ${HEALTHCHECK_PORT}; done & +# else +# echo "HEALTHCHECK_PORT variable is set but to a none number; therefore, not starting health check action" +# fi + +# else +# echo "HEALTHCHECK_PORT variable is not set; therefore, not starting health check action. Optional. Proceeding" +# fi + +pkill -f fsw_respawn.sh || true +pkill -f core-cpu1 || true + +export LD_LIBRARY_PATH=${FSW_DIR}/cf/:${LD_LIBRARY_PATH} + +mkdir -p $FSW_DIR/data +mkdir -p $FSW_DIR/data/cam +mkdir -p $FSW_DIR/data/evs +mkdir -p $FSW_DIR/data/hk +mkdir -p $FSW_DIR/data/inst +touch $FSW_DIR/data/dummy.txt +echo "1234567890" > $FSW_DIR/data/dummy.txt +truncate -s 1M $FSW_DIR/data/dummy.txt + +# +cd ${FSW_DIR} && \ + ./core-cpu1 -R PO 2>&1 | tee -a ${BASE_DIR}/core-cpu1.log & + +tail -f /dev/null diff --git a/deployments/docker/fsw/libuart.c b/deployments/docker/fsw/libuart.c new file mode 100644 index 000000000..495478abb --- /dev/null +++ b/deployments/docker/fsw/libuart.c @@ -0,0 +1,230 @@ +/* Copyright (C) 2009 - 2018 National Aeronautics and Space Administration. All Foreign Rights are Reserved to the U.S. Government. + +This software is provided "as is" without any warranty of any, kind either express, implied, or statutory, including, but not +limited to, any warranty that the software will conform to, specifications any implied warranties of merchantability, fitness +for a particular purpose, and freedom from infringement, and any warranty that the documentation will conform to the program, or +any warranty that the software will be error free. + +In no event shall NASA be liable for any damages, including, but not limited to direct, indirect, special or consequential damages, +arising out of, resulting from, or in any way connected with the software or its documentation. Whether or not based upon warranty, +contract, tort or otherwise, and whether or not loss was sustained from, or arose out of the results of, or use of, the software, +documentation or services provided hereunder + +ITC Team +NASA IV&V +ivv-itc@lists.nasa.gov +*/ + +#include "libuart.h" + +int32_t uart_init_port(uart_info_t* device) +{ + int32_t status = UART_SUCCESS; + speed_t speed; + + // Set the access flag. We default to O_RDWR if the specified access flag is + // out of range + int oflag = O_RDWR; + + if (device->access_option == uart_access_flag_RDONLY) + oflag = O_RDONLY; + else if (device->access_option == uart_access_flag_WRONLY) + oflag = O_WRONLY; + + device->handle = open(device->deviceString, oflag); + + if (device->handle >= 0) + { + // Set open flag + device->isOpen = PORT_OPEN; + + // Get current port options + if(tcgetattr(device->handle, &device->options)<0) + { + status = OS_ERR_FILE; + fprintf(stderr, "***************** ERROR: Something went wrong: 1\n"); + return status; + } + + // Set baud rate + switch(device->baud) + { + case 4800: + speed=B4800; + break; + case 9600: + speed=B9600; + break; + case 19200: + speed=B19200; + break; + case 38400: + speed=B38400; + break; + case 57600: + speed=B57600; + break; + case 115200: + speed=B115200; + break; + case 230400: + speed=B230400; + break; + case 460800: + speed=B460800; + break; + case 500000: + speed=B500000; + break; + case 576000: + speed=B576000; + break; + case 921600: + speed=B921600; + break; + case 1000000: + speed=B1000000; + break; + case 1152000: + speed=B1152000; + break; + case 2000000: + speed=B2000000; + break; + case 2500000: + speed=B2500000; + break; + case 3000000: + speed=B3000000; + break; + case 3500000: + speed=B3500000; + break; + case 4000000: + speed=B4000000; + break; + default: + status = OS_ERR_FILE; + fprintf(stderr, "***************** ERROR: Something went wrong: 2\n"); + return status; + } + if(cfsetispeed(&device->options,speed)<0) + { + status = OS_ERR_FILE; + fprintf(stderr, "***************** ERROR: Something went wrong: 3\n"); + return status; + } + if(cfsetospeed(&device->options,speed)<0) + { + status = OS_ERR_FILE; + fprintf(stderr, "***************** ERROR: Something went wrong: 4\n"); + return status; + } + + // Raw byte mode - no strings and no CRLF + device->options.c_iflag = IGNBRK | INPCK; + device->options.c_oflag = 0; + device->options.c_cflag = CREAD | CS8 | CLOCAL; + device->options.c_lflag = NOFLSH; + if(device->canonicalModeOn == 1) + { + device->options.c_lflag |= ICANON; + } + + // Set the port to blocking read with timeout of 0.1 sec + device->options.c_cc[VMIN] = 0; // min of bytes to read + device->options.c_cc[VTIME] = 1; // intra-byte time to wait - tenths of sec + fcntl(device->handle, F_SETFL, O_NONBLOCK); // Don't have serial port block + + // TODO - any other options needed like hw control? + tcflush(device->handle, TCIOFLUSH); + + // Set the options + if(tcsetattr(device->handle, TCSANOW, &device->options)<0) + { + status = OS_ERR_FILE; + fprintf(stderr, "***************** ERROR: Something went wrong: 5\n"); + return status; + } + } + else + { + printf("Oh no! Open \"%s\" failed and reported: %s \n", device->deviceString, strerror(device->handle)); + device->isOpen = PORT_CLOSED; + status = OS_ERR_FILE; + fprintf(stderr, "***************** ERROR: Something went wrong: 6\n"); + + } + + return status; +} + +int32_t uart_bytes_available(uart_info_t* device) +{ + int32_t bytes_available = 0; + + ioctl(device->handle, FIONREAD, &bytes_available); + + return bytes_available; +} + +int32_t uart_flush(uart_info_t* device) +{ + tcflush(device->handle,TCIOFLUSH); + + return UART_SUCCESS; +} + +int32_t uart_read_port(uart_info_t* device, uint8_t data[], const uint32_t numBytes) +{ + int32_t status = UART_SUCCESS; + + if (data != NULL) + { + // TODO - this read blocks forever if no serial data on the port. + // it should be timing out - need to look into this ASAP + status = read(device->handle, data, numBytes); + } + else + { + status = OS_ERR_FILE; + fprintf(stderr, "***************** ERROR: Something went wrong: 7\n"); + + } + + return status; +} + +int32_t uart_write_port(uart_info_t* device, uint8_t data[], const uint32_t numBytes) +{ + int32_t status = UART_SUCCESS; + + status = write(device->handle, data, numBytes); + + return status; +} + +int32_t uart_close_port(uart_info_t* device) +{ + int32_t status = UART_SUCCESS; + + if (device->handle >= 0) + { + status = close(device->handle); + if (0 == status) /* todo remove magic number */ + { + status = UART_SUCCESS; + } + else + { + status = OS_ERR_FILE; + fprintf(stderr, "***************** ERROR: Something went wrong: 8\n"); + } + } + else + { + status = OS_ERR_FILE; + fprintf(stderr, "***************** ERROR: Something went wrong: 9\n"); + } + return status; +} diff --git a/deployments/docker/hw-components/entrypoint.sh b/deployments/docker/hw-components/entrypoint.sh new file mode 100755 index 000000000..547c35fa0 --- /dev/null +++ b/deployments/docker/hw-components/entrypoint.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +DIR=/home/nos3 + +pkill -f ./nos3-single-simulator +pkill -f ./support/standalone + +# Radio Sim and Cryptolib +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-radio-sim 2>&1 \ + | tee -a ${DIR}/radio-sim.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/gsw/build && \ + ./support/standalone 2>&1 \ + | tee -a ${DIR}/cryptolib.log | tee -a ${DIR}/hw-components.log & + +# HW Components +cd /home/nos3/builds/nos3/fsw/build/exe/cpu1 && \ + /home/nos3/builds/nos3/scripts/fsw/onair_launch.sh 2>&1 \ + | tee -a ${DIR}/onair_launch.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml camsim 2>&1 \ + | tee -a ${DIR}/camsim.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-css-sim 2>&1 \ + | tee -a ${DIR}/css.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-eps-sim 2>&1 \ + | tee -a ${DIR}/eps.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-fss-sim 2>&1 \ + | tee -a ${DIR}/fss.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml gps 2>&1 \ + | tee -a ${DIR}/gps.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-imu-sim 2>&1 \ + | tee -a ${DIR}/imu.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-mag-sim 2>&1 \ + | tee -a ${DIR}/mag.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim0 2>&1 \ + | tee -a ${DIR}/rw0.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim1 2>&1 \ + | tee -a ${DIR}/rw1.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim2 2>&1 \ + | tee -a ${DIR}/rw2.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml sample-sim 2>&1 \ + | tee -a ${DIR}/sample-sim.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-star-tracker-sim 2>&1 \ + | tee -a ${DIR}/star-tracker.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-thruster-sim 2>&1 \ + | tee -a ${DIR}/thruster.log | tee -a ${DIR}/hw-components.log & + +cd /home/nos3/builds/nos3/sims/build/bin && \ + ./nos3-single-simulator -f ./nos3-simulator.xml generic-torquer-sim 2>&1 \ + | tee -a ${DIR}/torquer.log | tee -a ${DIR}/hw-components.log & + +# cd /home/nos3/builds/nos3/sims/build/bin && \ +# ./nos3-single-simulator -f ./nos3-simulator.xml truth42sim 2>&1 \ +# | tee -a ${DIR}/truth42.log | tee -a ${DIR}/hw-components.log & + +tail -f /dev/null diff --git a/deployments/docker/radio-sim/entrypoint.sh b/deployments/docker/radio-sim/entrypoint.sh new file mode 100755 index 000000000..4b269fce4 --- /dev/null +++ b/deployments/docker/radio-sim/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/bash -x + +cd /home/nos3/builds/nos3/sims/build/bin +pkill -f ./nos3-single-simulator +./nos3-single-simulator -f ./nos3-simulator.xml generic-radio-sim & + +tail -f /dev/null diff --git a/deployments/docker/radio-sim/entrypoint2.sh b/deployments/docker/radio-sim/entrypoint2.sh new file mode 100755 index 000000000..5b653d2e7 --- /dev/null +++ b/deployments/docker/radio-sim/entrypoint2.sh @@ -0,0 +1,13 @@ +#!/bin/bash -x + +cd /home/nos3/builds/nos3/sims/build/bin +pkill -f ./nos3-single-simulator +./nos3-single-simulator -f ./nos3-simulator.xml generic-radio-sim & + +cd /home/nos3/builds/nos3/gsw/build +pkill -f ./support/standalone +./support/standalone & + +cd - + +tail -f /dev/null diff --git a/deployments/docker/sidecar/commanding.py b/deployments/docker/sidecar/commanding.py new file mode 100755 index 000000000..e146437f8 --- /dev/null +++ b/deployments/docker/sidecar/commanding.py @@ -0,0 +1,16 @@ +import sys + +from yamcs.client import YamcsClient + +SERVER=sys.argv[1] +PORT=sys.argv[2] + +client = YamcsClient(f"{SERVER}:{PORT}") +processor = client.get_processor(instance='nos3', processor='realtime') + +command_name = "/CFS/CMD/TO_ENABLE_OUTPUT" +arguments = {} # Example arguments, NOT RELEVANT FOR NOOP command + +command_handle = processor.issue_command(command_name, args=arguments) + +print(f"Issued command: {command_handle}") diff --git a/deployments/docker/sidecar/entrypoint.sh b/deployments/docker/sidecar/entrypoint.sh new file mode 100755 index 000000000..58361ce45 --- /dev/null +++ b/deployments/docker/sidecar/entrypoint.sh @@ -0,0 +1,51 @@ +#!/bin/bash -x + +SERVER=$1 +SERVER=${SERVER:-localhost} + +PORT=$2 +PORT=${PORT:-8090} + +COMMAND=$3 +COMMAND=${COMMAND:-/CFS/CMD/TO_ENABLE_OUTPUT} + +INSTANCE=nos3 + +curl -X POST http://${SERVER}:${PORT}/api/links/nos3/radio-in:disable +curl -X POST http://${SERVER}:${PORT}/api/links/nos3/radio-out:disable +curl -X POST http://${SERVER}:${PORT}/api/links/nos3/truth42-in:disable + +sleep 5 + +curl -X POST http://${SERVER}:${PORT}/api/links/nos3/radio-in:enable +curl -X POST http://${SERVER}:${PORT}/api/links/nos3/radio-out:enable +curl -X POST http://${SERVER}:${PORT}/api/links/nos3/truth42-in:enable + +pip3 install --upgrade yamcs-client + +#python3 /commanding.py ${SERVER} ${PORT} + +python3 <, Default: http + -s | --server server's address, Default: localhost + -p | --port service's port, Default: 8090 + -i | --instance instance on server, Default: nos3 + -c | --command command to issue, Default: /CFS/CMD/CFE_ES_NOOP, invoke /CFS/CMD/TO_ENABLE_OUTPUT to enable telemetry outputs + -t | --tls_verify Default: False + -R | --processor Default: realtime + -w | --write Echo default values to stdout + +EOF +} + +params="$(getopt -o :h,d,P:s:p:i:c:t:R,w -l 'help,defaults,protocol:,server:,port:,instance:,command:,tls_verify:,processor,write' --name "$(basename $0)" -- "$@")" + +# Check if getopt encountered an error +if [ $? -ne 0 ]; then + echo + echo "ERROR: Invalid option or missing argument: $@" >&2 + usage + exit 1 +fi + +if [ $# -eq 0 ]; then + echo + echo "ERROR: no arguments provided: $@" >&2 + usage + exit 1 +fi + +eval set -- "$params" +unset params + +# Default values +PROTOCOL=http +SERVER=localhost +PORT=8090 +INSTANCE=nos3 +PROCESSOR=realtime +#COMMAND="/CFS/CMD/TO_ENABLE_OUTPUT" +COMMAND="/CFS/CMD/CFE_ES_NOOP" +TLS_VERIFY=False + +while true; do + case "$1" in + -h|--help) + usage + exit 0 + ;; + -d|--defaults) + echo; echo "[INFO] Will use default values. Other arguments will be ignored." + shift + break + ;; + -P|--protocol) + PROTOCOL="$2" + shift 2 + ;; + -s|--server) + SERVER="$2" + shift 2 + ;; + -p|--port) + PORT="$2" + shift 2 + ;; + -i|--instance) + INSTANCE="$2" + shift 2 + ;; + -c|--command) + COMMAND="$2" + shift 2 + ;; + -t|--tls_verify) + TLS_VERIFY="$2" + shift 2 + ;; + -w|--write) + echo + echo "[INFO] defaults are ${PROTOCOL}://${SERVER}:${PORT} on instance: $INSTANCE, with command: $COMMAND, using processor: $PROCESSOR" + echo + exit + ;; + --) + shift + break + ;; + *) + echo "Unrecognized option '$1'" + usage + exit + ;; + esac + +done + +echo +echo "Attempting to connect to yamcs on:" +echo " ${PROTOCOL}://${SERVER}:${PORT} on instance: $INSTANCE, with command: $COMMAND, using processor: $PROCESSOR" +echo + +curl -k -X POST ${PROTOCOL}://${SERVER}:${PORT}/api/links/nos3/radio-in:disable +curl -k -X POST ${PROTOCOL}://${SERVER}:${PORT}/api/links/nos3/radio-out:disable +curl -k -X POST ${PROTOCOL}://${SERVER}:${PORT}/api/links/nos3/truth42-in:disable + +sleep 5 + +curl -k -X POST ${PROTOCOL}://${SERVER}:${PORT}/api/links/nos3/radio-in:enable +curl -k -X POST ${PROTOCOL}://${SERVER}:${PORT}/api/links/nos3/radio-out:enable +curl -k -X POST ${PROTOCOL}://${SERVER}:${PORT}/api/links/nos3/truth42-in:enable + +pip3 install --break-system-packages --user --upgrade yamcs-client && \ + +python3 < ${RUN_DIR}/pid +#------------------------------------------------------------------------------------ + +# healthcheck on port ${HEALTHCHECK_PORT}, if set +HEALTHCHECK_PORT=${HEALTHCHECK_PORT} # environment variable + +if [ -n "${HEALTHCHECK_PORT}" ]; then + + if (( ${HEALTHCHECK_PORT} )); then # only if port is a number proceed + pkill -f nc || + while true; do (echo -e 'HTTP/1.1 200 OK\r\n'; echo -e "\n\tSuccess: health check port ${HEALTHCHECK_PORT}" ; echo -e "\t$(date -u +%FT%T)\n") | nc -lp ${HEALTHCHECK_PORT}; done & + else + echo "HEALTHCHECK_PORT variable is set but to a none number; therefore, not starting health check action" + fi + +else + echo "HEALTHCHECK_PORT variable is not set; therefore, not starting health check action. Optional. Proceeding" +fi + +tail -f /dev/null \ No newline at end of file diff --git a/deployments/kubernetes/fortytwo/configmap.yaml b/deployments/kubernetes/fortytwo/configmap.yaml new file mode 100644 index 000000000..e8f809377 --- /dev/null +++ b/deployments/kubernetes/fortytwo/configmap.yaml @@ -0,0 +1,47 @@ +--- +apiVersion: v1 +data: + entrypoint.sh: | + #!/bin/bash + + rm -f /tmp/.X1-lock || true + rm -f /tmp/.X11-unix/X1 || true + + pkill -f vncserver || true + pkill -f Xvnc || true + pkill -f websockify || true + + /opt/TurboVNC/bin/vncserver -securitytypes tlsnone,x509none,none && \ + websockify -D \ + --web=/usr/share/novnc/ \ + --cert=~/novnc.pem 80 localhost:5901 && /startapp.sh + + tail -f /dev/null + +kind: ConfigMap +metadata: + annotations: + use-subpath: "true" + labels: + app: nos3-m01-sc01-fortytwo + name: nos3-fortytwo-cm0 +--- +apiVersion: v1 +data: + startapp.sh: |+ + #!/bin/bash + export DISPLAY=:1 + DIR=/opt/nasa-itc + cd ${DIR}/42 + xterm & + xterm -e ./42 X & + echo "Started 42 in xterm with PID $!" + + tail -f /dev/null +kind: ConfigMap +metadata: + annotations: + use-subpath: "true" + labels: + app: nos3-m01-sc01-fortytwo + name: nos3-fortytwo-cm1 diff --git a/deployments/kubernetes/fortytwo/deployment.yaml b/deployments/kubernetes/fortytwo/deployment.yaml new file mode 100644 index 000000000..e64f7da6c --- /dev/null +++ b/deployments/kubernetes/fortytwo/deployment.yaml @@ -0,0 +1,93 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: nos3-m01-sc01 + name: nos3-fortytwo + labels: + app: nos3-m01-sc01-fortytwo +spec: + replicas: 1 + selector: + matchLabels: + app: nos3-m01-sc01-fortytwo + template: + metadata: + labels: + app: nos3-m01-sc01-fortytwo + spec: + containers: + - args: + - /entrypoint.sh + env: + - name: BASE_DIR + value: /builds/nos3 + - name: CFG_FILE + value: /builds/nos3/sims/build/bin/nos3-simulator.xml + - name: COMPONENT_NAME + value: fortytwo + - name: DISPLAY + value: :1 + - name: HEALTHCHECK_PORT + value: "60000" + - name: LOG_CONFIG + value: /builds/nos3/sims/build/bin/sim_log_config.xml + - name: SIMULATOR_BIN + value: /builds/nos3/sims/build/bin/nos3-single-simulator + - name: SIM_BIN + value: /builds/nos3/sims/build/bin + image: docker.io/haisamido/42:master + workingDir: /opt/nasa-itc/ + imagePullPolicy: IfNotPresent + # livenessProbe: + # exec: + # command: + # - /usr/bin/nc -vz localhost 10000 + # failureThreshold: 5 + # periodSeconds: 5 + # timeoutSeconds: 5 + name: 00-sc01-fortytwo + ports: + - containerPort: 80 + protocol: TCP + - containerPort: 4245 + protocol: TCP + - containerPort: 4245 + protocol: UDP + - containerPort: 9999 + protocol: TCP + - containerPort: 9999 + protocol: UDP + resources: + limits: + cpu: "3" + memory: "2048Mi" + requests: + cpu: "1" + memory: "2048Mi" + securityContext: + privileged: true + volumeMounts: + - mountPath: /entrypoint.sh + name: nos3-fortytwo-cm0 + subPath: entrypoint.sh + - mountPath: /startapp.sh + name: nos3-fortytwo-cm1 + subPath: startapp.sh + hostname: fortytwo + restartPolicy: Always + volumes: + - configMap: + items: + - key: entrypoint.sh + path: entrypoint.sh + name: nos3-fortytwo-cm0 + defaultMode: 0555 + name: nos3-fortytwo-cm0 + - configMap: + items: + - key: startapp.sh + path: startapp.sh + name: nos3-fortytwo-cm1 + defaultMode: 0555 + name: nos3-fortytwo-cm1 diff --git a/deployments/kubernetes/fortytwo/kustomization.yaml b/deployments/kubernetes/fortytwo/kustomization.yaml new file mode 100644 index 000000000..164db37ac --- /dev/null +++ b/deployments/kubernetes/fortytwo/kustomization.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./configmap.yaml + - ./deployment.yaml + - ./service.yaml diff --git a/deployments/kubernetes/fortytwo/service.yaml b/deployments/kubernetes/fortytwo/service.yaml new file mode 100644 index 000000000..103e0a2b4 --- /dev/null +++ b/deployments/kubernetes/fortytwo/service.yaml @@ -0,0 +1,35 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: fortytwo + namespace: nos3-m01-sc01 +spec: + selector: + app: nos3-m01-sc01-fortytwo + ports: + - name: gps-tcp + protocol: TCP + port: 4245 + targetPort: 4245 + - name: gps-udp + protocol: UDP + port: 4245 + targetPort: 4245 + - name: truth42sim-tcp + protocol: TCP + port: 9999 + targetPort: 9999 + - name: truth42sim-udp + protocol: UDP + port: 9999 + targetPort: 9999 + - name: healthcheck-tcp + protocol: TCP + port: 60000 + targetPort: 60000 + - name: healthcheck-udp + protocol: UDP + port: 60000 + targetPort: 60000 + type: ClusterIP diff --git a/deployments/kubernetes/fsw/configmap.yaml b/deployments/kubernetes/fsw/configmap.yaml new file mode 100644 index 000000000..020855f91 --- /dev/null +++ b/deployments/kubernetes/fsw/configmap.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: v1 +data: + entrypoint_fsw.sh: | + #!/bin/bash + pkill -f fsw_respawn.sh || true + pkill -f core-cpu1 || true + $SCRIPT_DIR/fsw/fsw_respawn.sh +kind: ConfigMap +metadata: + annotations: + use-subpath: "true" + labels: + io.kompose.service: nos3-fsw + name: nos3-fsw-cm0 diff --git a/deployments/kubernetes/fsw/deployment.yaml b/deployments/kubernetes/fsw/deployment.yaml new file mode 100644 index 000000000..43b18399c --- /dev/null +++ b/deployments/kubernetes/fsw/deployment.yaml @@ -0,0 +1,67 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: nos3-m01-sc01 + name: nos3-fsw + labels: + app: nos3-m01-sc01-fsw +spec: + replicas: 1 + selector: + matchLabels: + app: nos3-m01-sc01-fsw + template: + metadata: + labels: + app: nos3-m01-sc01-fsw + spec: + containers: + - args: + - /entrypoint.sh + env: + - name: BASE_DIR + value: /builds/nos3 + - name: CFG_FILE + value: /builds/nos3/sims/build/bin/nos_engine_server_config.json + - name: COMPONENT_NAME + value: fsw + - name: HEALTHCHECK_PORT + value: "60000" + - name: LOG_CONFIG + value: /builds/nos3/sims/build/bin/sim_log_config.xml + - name: SCRIPT_DIR + value: /builds/nos3/scripts + - name: SIMULATOR_BIN + value: /usr/bin/nos_engine_server_standalone + - name: SIM_BIN + value: /builds/nos3/sims/build/bin + image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 + imagePullPolicy: IfNotPresent + name: 01-sc01-nos-fsw + resources: + limits: + cpu: 100m + memory: "128Mi" + requests: + cpu: 100m + memory: "128Mi" + securityContext: + capabilities: + add: + - sys_nice + privileged: true + volumeMounts: + - mountPath: /entrypoint.sh + name: nos3-fsw-cm0 + subPath: entrypoint.sh + workingDir: /builds/nos3/fsw/build/exe/cpu1 + hostname: fsw + restartPolicy: Always + volumes: + - configMap: + items: + - key: entrypoint_fsw.sh + path: entrypoint.sh + name: nos3-fsw-cm0 + defaultMode: 0555 + name: nos3-fsw-cm0 diff --git a/deployments/kubernetes/fsw/kustomization.yaml b/deployments/kubernetes/fsw/kustomization.yaml new file mode 100644 index 000000000..164db37ac --- /dev/null +++ b/deployments/kubernetes/fsw/kustomization.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./configmap.yaml + - ./deployment.yaml + - ./service.yaml diff --git a/deployments/kubernetes/fsw/service.yaml b/deployments/kubernetes/fsw/service.yaml new file mode 100644 index 000000000..38a3f4928 --- /dev/null +++ b/deployments/kubernetes/fsw/service.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: fsw + namespace: nos3-m01-sc01 +spec: + selector: + app: nos3-m01-sc01-fsw + ports: + - name: healthcheck-tcp + protocol: TCP + port: 60000 + targetPort: 60000 + - name: healthcheck-udp + protocol: UDP + port: 60000 + targetPort: 60000 + type: ClusterIP diff --git a/deployments/kubernetes/gps/deployment.yaml b/deployments/kubernetes/gps/deployment.yaml new file mode 100644 index 000000000..651d55ef8 --- /dev/null +++ b/deployments/kubernetes/gps/deployment.yaml @@ -0,0 +1,47 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: nos3-m01-sc01 + name: nos3-gps + labels: + app: nos3-m01-sc01-gps +spec: + replicas: 1 + selector: + matchLabels: + app: nos3-m01-sc01-gps + template: + metadata: + labels: + app: nos3-m01-sc01-gps + spec: + containers: + - env: + - name: BASE_DIR + value: /builds/nos3 + - name: CFG_FILE + value: /builds/nos3/sims/build/bin/nos3-simulator.xml + - name: COMPONENT_NAME + value: gps + - name: HEALTHCHECK_PORT + value: "60000" + - name: LOG_CONFIG + value: /builds/nos3/sims/build/bin/sim_log_config.xml + - name: SIMULATOR_BIN + value: /builds/nos3/sims/build/bin/nos3-single-simulator + - name: SIM_BIN + value: /builds/nos3/sims/build/bin + image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 + name: 03-sc01-gps-sim + resources: + limits: + cpu: 100m + memory: "128Mi" + requests: + cpu: 100m + memory: "Mi" + securityContext: + privileged: true + hostname: gps + restartPolicy: Always diff --git a/deployments/kubernetes/gps/kustomization.yaml b/deployments/kubernetes/gps/kustomization.yaml new file mode 100644 index 000000000..318bab171 --- /dev/null +++ b/deployments/kubernetes/gps/kustomization.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +# - ./configmap.yaml + - ./deployment.yaml + - ./service.yaml diff --git a/deployments/kubernetes/gps/service.yaml b/deployments/kubernetes/gps/service.yaml new file mode 100644 index 000000000..338bbb405 --- /dev/null +++ b/deployments/kubernetes/gps/service.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: gps + namespace: nos3-m01-sc01 +spec: + selector: + app: nos3-m01-sc01-gps + ports: + - name: healthcheck-tcp + protocol: TCP + port: 60000 + targetPort: 60000 + - name: healthcheck-udp + protocol: UDP + port: 60000 + targetPort: 60000 + type: ClusterIP diff --git a/deployments/kubernetes/kubernetes.sh b/deployments/kubernetes/kubernetes.sh new file mode 100755 index 000000000..37bceb796 --- /dev/null +++ b/deployments/kubernetes/kubernetes.sh @@ -0,0 +1,29 @@ + +REALM=nos3 +#K8S_CONTEXT=kind-${REALM} + +# kompose convert --file ../../docker/docker-compose.yaml + +export K8S_CONTEXT=docker-desktop +export K8S_NAMESPACE=${REALM}-m01-sc01 + +COMPONENT=fortytwo + +echo; echo Creating namespace ${K8S_NAMESPACE} in context ${K8S_CONTEXT}... +kubectl create namespace ${K8S_NAMESPACE} --context ${K8S_CONTEXT} || true + +kubectl --context ${K8S_CONTEXT} --namespace ${K8S_NAMESPACE} apply -k . + +echo +echo "Waiting on fortytwo pod to be ready" +echo +sleep 10 + +K8S_POD=$(kubectl get pods --context ${K8S_CONTEXT} --namespace ${K8S_NAMESPACE} | grep ${COMPONENT} | cut -d' ' -f1) + +x=${HOME}/development/github.com/haisamido/nos3/cfg/InOut + +kubectl --context ${K8S_CONTEXT} --namespace ${K8S_NAMESPACE} cp ${x} ${K8S_POD}:/opt/nasa-itc/42/X + +sleep 10 +kubectl port-forward pod/${K8S_POD} 30003:80 --context ${K8S_CONTEXT} --namespace ${K8S_NAMESPACE} diff --git a/deployments/kubernetes/kustomization.yaml b/deployments/kubernetes/kustomization.yaml new file mode 100644 index 000000000..0ee2b4715 --- /dev/null +++ b/deployments/kubernetes/kustomization.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./fortytwo + - ./fsw + - ./nos-engine-server + - ./gps + - ./time + \ No newline at end of file diff --git a/deployments/kubernetes/nos-engine-server/configmap.yaml b/deployments/kubernetes/nos-engine-server/configmap.yaml new file mode 100644 index 000000000..05ae714ef --- /dev/null +++ b/deployments/kubernetes/nos-engine-server/configmap.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: v1 +data: + entrypoint_nos_engine_server.sh: | + #!/bin/bash + pkill -f nos_engine_server_standalone || true + /usr/bin/nos_engine_server_standalone /builds/nos3/sims/build/bin/nos_engine_server_config.json +kind: ConfigMap +metadata: + annotations: + use-subpath: "true" + labels: + io.kompose.service: nos3-nos-engine-server + name: nos3-nos-engine-server-cm0 diff --git a/deployments/kubernetes/nos-engine-server/deployment.yaml b/deployments/kubernetes/nos-engine-server/deployment.yaml new file mode 100644 index 000000000..2b3e4e464 --- /dev/null +++ b/deployments/kubernetes/nos-engine-server/deployment.yaml @@ -0,0 +1,68 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: nos3-m01-sc01 + name: nos3-nos-engine-server + labels: + app: nos3-m01-sc01-nos-engine-server +spec: + replicas: 1 + selector: + matchLabels: + app: nos3-m01-sc01-nos-engine-server + template: + metadata: + labels: + app: nos3-m01-sc01-nos-engine-server + spec: + containers: + - args: + - /entrypoint.sh + env: + - name: BASE_DIR + value: /builds/nos3 + - name: CFG_FILE + value: /builds/nos3/sims/build/bin/nos_engine_server_config.json + - name: HEALTHCHECK_PORT + value: "60000" + - name: LOG_CONFIG + value: /builds/nos3/sims/build/bin/sim_log_config.xml + - name: SIMULATOR_BIN + value: /usr/bin/nos_engine_server_standalone + - name: SIM_BIN + value: /builds/nos3/sims/build/bin + image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 + imagePullPolicy: IfNotPresent + name: 02-sc01-nos-engine-server + ports: + - containerPort: 12000 + protocol: TCP + - containerPort: 12001 + protocol: TCP + resources: + limits: + cpu: 100m + memory: "128Mi" + requests: + cpu: 100m + memory: "128Mi" + securityContext: + privileged: true + stdin: true + tty: true + volumeMounts: + - mountPath: /entrypoint.sh + name: nos3-nos-engine-server-cm0 + subPath: entrypoint.sh + workingDir: /builds/nos3/sims/build/bin + hostname: nos-engine-server + restartPolicy: Always + volumes: + - configMap: + items: + - key: entrypoint_nos_engine_server.sh + path: entrypoint.sh + defaultMode: 0555 + name: nos3-nos-engine-server-cm0 + name: nos3-nos-engine-server-cm0 diff --git a/deployments/kubernetes/nos-engine-server/kustomization.yaml b/deployments/kubernetes/nos-engine-server/kustomization.yaml new file mode 100644 index 000000000..164db37ac --- /dev/null +++ b/deployments/kubernetes/nos-engine-server/kustomization.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./configmap.yaml + - ./deployment.yaml + - ./service.yaml diff --git a/deployments/kubernetes/nos-engine-server/service.yaml b/deployments/kubernetes/nos-engine-server/service.yaml new file mode 100644 index 000000000..dd2ed634b --- /dev/null +++ b/deployments/kubernetes/nos-engine-server/service.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: nos-engine-server + namespace: nos3-m01-sc01 +spec: + selector: + app: nos3-m01-sc01-nos-engine-server + ports: + - name: fsw-tcp + protocol: TCP + port: 12000 + targetPort: 12000 + - name: nos3-tcp + protocol: TCP + port: 12001 + targetPort: 12001 + - name: healthcheck-tcp + protocol: TCP + port: 60000 + targetPort: 60000 + - name: healthcheck-udp + protocol: UDP + port: 60000 + targetPort: 60000 + type: ClusterIP + diff --git a/deployments/kubernetes/time/deployment.yaml b/deployments/kubernetes/time/deployment.yaml new file mode 100644 index 000000000..dabe9a4a0 --- /dev/null +++ b/deployments/kubernetes/time/deployment.yaml @@ -0,0 +1,50 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert --file ../../docker/docker-compose.yaml + kompose.version: 1.36.0 (HEAD) + labels: + io.kompose.service: nos3-time + name: nos3-time +spec: + replicas: 1 + selector: + matchLabels: + app: nos3-m01-sc01-time + template: + metadata: + labels: + app: nos3-m01-sc01-time + spec: + containers: + - env: + - name: BASE_DIR + value: /builds/nos3 + - name: CFG_FILE + value: /builds/nos3/sims/build/bin/nos3-simulator.xml + - name: COMPONENT_NAME + value: time + - name: HEALTHCHECK_PORT + value: "60000" + - name: LOG_CONFIG + value: /builds/nos3/sims/build/bin/sim_log_config.xml + - name: SIMULATOR_BIN + value: /builds/nos3/sims/build/bin/nos3-single-simulator + - name: SIM_BIN + value: /builds/nos3/sims/build/bin + image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 + name: 04-nos-time-driver + resources: + limits: + cpu: 100m + memory: "128Mi" + requests: + cpu: 100m + memory: "128Mi" + securityContext: + privileged: true + stdin: true + tty: true + hostname: time + restartPolicy: Always diff --git a/deployments/kubernetes/time/kustomization.yaml b/deployments/kubernetes/time/kustomization.yaml new file mode 100644 index 000000000..318bab171 --- /dev/null +++ b/deployments/kubernetes/time/kustomization.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +# - ./configmap.yaml + - ./deployment.yaml + - ./service.yaml diff --git a/deployments/kubernetes/time/service.yaml b/deployments/kubernetes/time/service.yaml new file mode 100644 index 000000000..81953c575 --- /dev/null +++ b/deployments/kubernetes/time/service.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: time + namespace: nos3-m01-sc01 +spec: + selector: + app: nos3-m01-sc01-time + ports: + - name: healthcheck-tcp + protocol: TCP + port: 60000 + targetPort: 60000 + - name: healthcheck-udp + protocol: UDP + port: 60000 + targetPort: 60000 + type: ClusterIP diff --git a/deployments/nos3/cfg/InOut/Inp_IPC.txt b/deployments/nos3/cfg/InOut/Inp_IPC.txt new file mode 100644 index 000000000..fe1505fcd --- /dev/null +++ b/deployments/nos3/cfg/InOut/Inp_IPC.txt @@ -0,0 +1,21 @@ +<<<<<<<<<<<<<<< 42: InterProcess Comm Configuration File >>>>>>>>>>>>>>>> +2 ! Number of Sockets +********************************** GPS IPC ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State03.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4245 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC[0].GPS[0]" ! Prefix 0 +********************************** Truth data to sim to pass to COSMOS ******************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 9999 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +2 ! Number of TX prefixes +"SC" ! Prefix 0 +"Orb" ! Prefix 1 diff --git a/deployments/nos3/cfg/InOut/Inp_IPC.txt.orig b/deployments/nos3/cfg/InOut/Inp_IPC.txt.orig new file mode 100644 index 000000000..6dcb7b493 --- /dev/null +++ b/deployments/nos3/cfg/InOut/Inp_IPC.txt.orig @@ -0,0 +1,161 @@ +<<<<<<<<<<<<<<< 42: InterProcess Comm Configuration File >>>>>>>>>>>>>>>> +17 ! Number of Sockets +********************************** RW 0 to 42 ***************************** +RX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State01.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4278 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC" ! Prefix 0 +********************************** RW 0 from 42 ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State02.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4277 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC[0].Whl[0].H" ! Prefix 0 +********************************** RW 1 to 42 ***************************** +RX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State01.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4378 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC" ! Prefix 0 +********************************** RW 1 from 42 ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State02.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4377 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC[0].Whl[1].H" ! Prefix 0 +********************************** RW 2 to 42 ***************************** +RX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State01.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4478 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC" ! Prefix 0 +********************************** RW 2 from 42 ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State02.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4477 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC[0].Whl[2].H" ! Prefix 0 +********************************** Torquer IPC ***************************** +RX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"Torquer.Rx" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4279 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC" ! Prefix 0 +********************************** Thruster IPC **************************** +RX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"Thruster.Rx" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4280 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC" ! Prefix 0 +********************************** GPS IPC ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State03.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4245 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC[0].GPS[0]" ! Prefix 0 +********************************** CSS IPC ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State04.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4227 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC[0].CSS" ! Prefix 0 +********************************** MAG IPC ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State05.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4234 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC[0].MAG" ! Prefix 0 +********************************** Truth data to sim to pass to COSMOS ******************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 9999 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +2 ! Number of TX prefixes +"SC" ! Prefix 0 +"Orb" ! Prefix 1 +********************************** Write to file for analysis ***************************** +WRITEFILE ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"State.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 6008 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +2 ! Number of TX prefixes +"SC" ! Prefix 0 +"Orb" ! Prefix 1 +********************************** FSS IPC ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"FSS.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4284 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC[0].FSS[0]" ! Prefix 0 +********************************** IMU IPC ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"IMU.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4281 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +2 ! Number of TX prefixes +"SC[0].Accel" ! Prefix 0 +"SC[0].Gyro" ! Prefix 1 +********************************** Star Tracker IPC ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"ST.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4282 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +1 ! Number of TX prefixes +"SC[0].ST" ! Prefix 0 +********************************** EPS IPC ***************************** +TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE) +"EPS.42" ! File name for WRITE or READ +SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT) +fortytwo 4283 ! Server Host Name, Port +FALSE ! Allow Blocking (i.e. wait on RX) +FALSE ! Echo to stdout +4 ! Number of TX prefixes +"SC[0].svb" ! Prefix 0 +"SC[0].PosR" ! Prefix 1 +"SC[0].qn" ! Prefix 2 +"Orb[0].PosN" ! Prefix 3 \ No newline at end of file diff --git a/deployments/nos3/cfg/nos3-mission.xml b/deployments/nos3/cfg/nos3-mission.xml new file mode 100644 index 000000000..c5008c114 --- /dev/null +++ b/deployments/nos3/cfg/nos3-mission.xml @@ -0,0 +1,23 @@ + + 814048200.0 + + + + + yamcs + + + + cfs + + + + 1 + + + + sc-full-config.xml + + + + diff --git a/deployments/nos3/cfg/sc-fprime-config.xml b/deployments/nos3/cfg/sc-fprime-config.xml new file mode 100644 index 000000000..b9b6eb4f6 --- /dev/null +++ b/deployments/nos3/cfg/sc-fprime-config.xml @@ -0,0 +1,84 @@ + + + + + false + + + false + + + false + + + false + + + false + + + false + + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + true + + + false + + + true + + + true + + + false + + + false + + + false + + + + true + + + -5.0 + -5.0 + 5.0 + + + false + + \ No newline at end of file diff --git a/deployments/nos3/cfg/sc-full-config.xml b/deployments/nos3/cfg/sc-full-config.xml new file mode 100644 index 000000000..f3fd5ebbd --- /dev/null +++ b/deployments/nos3/cfg/sc-full-config.xml @@ -0,0 +1,84 @@ + + + + + true + + + true + + + true + + + true + + + true + + + true + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + true + + + 0.1 + 1.0 + -1.0 + + + true + + \ No newline at end of file diff --git a/deployments/nos3/cfg/sc-minimal-config.xml b/deployments/nos3/cfg/sc-minimal-config.xml new file mode 100644 index 000000000..e7bfe0919 --- /dev/null +++ b/deployments/nos3/cfg/sc-minimal-config.xml @@ -0,0 +1,84 @@ + + + + + true + + + true + + + true + + + true + + + true + + + true + + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + true + + + false + + + false + + + false + + + false + + + + true + + + -5.0 + -5.0 + 5.0 + + + false + + \ No newline at end of file diff --git a/deployments/nos3/cfg/sims/nos3-simulator.xml b/deployments/nos3/cfg/sims/nos3-simulator.xml new file mode 100644 index 000000000..7d5f691d7 --- /dev/null +++ b/deployments/nos3/cfg/sims/nos3-simulator.xml @@ -0,0 +1,658 @@ + + + + + sim_log_config.xml + + + + + + 814254200.0 + 10000 + 10000 + tcp://nos-engine-server:12001 + + + + + time + true + libnos_time_driver.so + + TimeDriver + + + time + tcp://sc01-nos-engine-server:12001 + command + sc1-time-driver + + + command + command + time-command + + + + + + + stdio-terminal + true + libsim_terminal.so + + SimTerminal + + STDIO + 5555 + false + + + + + + command + command + + stdio-terminal + sample-command + ASCII + ASCII + + + + + + + + udp-terminal + true + libsim_terminal.so + + SimTerminal + + UDP + 5556 + false + + + + + + command + command + + udp-terminal + sample-command + ASCII + ASCII + + + + + + + + cmdbus-bridge + true + + SIM_CMDBUS_BRIDGE + + + command + command + sim-cmdbus-bridge-node + + + + + + + + + + + sample-sim + true + libsample_sim.so + + SAMPLE + + command + command + sample-command + + usart + usart_16 + 16 + + + + SAMPLE_PROVIDER + + + + + + + gps + true + libgps_sim.so + + OEM615 + + + usart + usart_1 + 1 + + + + GPS42SOCKET + fortytwo + 4245 + 30 + 1 + 0 + 0 + 37 + + + + + + + camsim + true + libcam_sim.so + + ARDUCAM_OV5640 + + commandcommandcam-command-node + + + +
60
+ i2c_2 +
+ + spi_0 + 0 + +
+
+ + + generic-eps-sim + true + libgeneric_eps_sim.so + + GENERIC_EPS + + + command + command + eps-command + + + i2c + i2c_1 + 0x2B + 10 + + + + + GENERIC_EPS_42_PROVIDER + fortytwo + 4283 + 30 + 1 + 0 + + + + 24.0 + 30.0 + 1.0 + 32.0 + 80.0 + + + sample-command + 1.23 + 4.56 + 0000 + + + star-tracker-command + 3.30 + 0.25 + 0000 + + + unknown-sim-command-node + 3.30 + 0.25 + 0000 + + + unknown-sim-command-node + 3.30 + 0.25 + 0000 + + + unknown-sim-command-node + 3.30 + 0.25 + 0000 + + + unknown-sim-command-node + 3.30 + 0.25 + 0000 + + + unknown-sim-command-node + 3.30 + 0.25 + 0000 + + + unknown-sim-command-node + 12.00 + 1.23 + 0000 + + + + + + + generic-reactionwheel-sim0 + true + libgeneric_rw_sim.so + + GENERICREACTIONWHEELHARDWARE + + commandcommandrw0-command + usart + usart_2 + 2 + + + + GENERICRWSIMDATA42SOCKETPROVIDER + fortytwo + 4277 + 4278 + 30 + 1 + 0 + 0 + + + + + + generic-reactionwheel-sim1 + true + libgeneric_rw_sim.so + + GENERICREACTIONWHEELHARDWARE + + commandcommandrw1-command + usart + usart_3 + 3 + + + + GENERICRWSIMDATA42SOCKETPROVIDER + fortytwo + 4377 + 4378 + 30 + 1 + 0 + 1 + + + + + + generic-reactionwheel-sim2 + true + libgeneric_rw_sim.so + + GENERICREACTIONWHEELHARDWARE + + commandcommandrw2-command + usart + usart_4 + 4 + + + + GENERICRWSIMDATA42SOCKETPROVIDER + fortytwo + 4477 + 4478 + 30 + 1 + 0 + 2 + + + + + + generic-css-sim + true + libgeneric_css_sim.so + + GENERIC_CSS + + + command + command + css-command + + + + GENERIC_CSS_42_PROVIDER + fortytwo + 4227 + 30 + 1 + 0 + <42-css-scale-factor>1.0 + + +
64
+ i2c_2 +
+
+
+ + + generic-torquer-sim + true + libgeneric_torquer_sim.so + + GENERIC_TORQUER + + + command + command + torquer-command + + + + GENERIC_TORQUER_42_PROVIDER + fortytwo + 4279 + 30 + 1 + + + 3 + + + 1.42 + 1.42 + 1.42 + + + + + + generic-thruster-sim + true + libgeneric_thruster_sim.so + + GENERIC_THRUSTER + + + command + command + thruster-command + + usart + usart_29 + 29 + + + + GENERIC_THRUSTER_42_PROVIDER + fortytwo + 4280 + 30 + 1 + + + + + + truth42sim + true + libtruth_42_sim.so + + TRUTH42 + cosmos + 5111 + 1.0 + 100 + + + commandcommandtruth42-sim-command-node + + + TRUTH42PROVIDER + fortytwo + 9999 + 30 + 1 + 0 + 0 + + + + + + generic-fss-sim + true + libgeneric_fss_sim.so + + GENERIC_FSS + + commandcommandfss-command + spi + spi_1 + 1 + + + + GENERIC_FSS_42_PROVIDER + fortytwo + 4284 + 30 + 1 + 0 + + + + + + generic-radio-sim + true + libgeneric_radio_sim.so + + GENERIC_RADIO + + + command + command + radio-sim-command-node + + + fsw + nos-fsw + 5010 + 5011 + 5015 + + + radio + radio-sim + 5014 + + + gsw + + + + + + cryptolib + 8010 + 8011 + + + prox + radio-sim + 7012 + 7010 + 7011 + 7012 + + + + GENERIC_RADIO_PROVIDER + + + + + + generic-imu-sim + true + libgeneric_imu_sim.so + + GENERIC_IMU + + command + command + imu-command + + can + can_0 + 15 + + + + GENERIC_IMU_42_PROVIDER + fortytwo + 4281 + 30 + 1 + 0 + + + + + + generic-mag-sim + true + libgeneric_mag_sim.so + + GENERIC_MAG + + command + command + mag-command + + spi + spi_2 + 2 + + + + GENERIC_MAG_42_PROVIDER + fortytwo + 4234 + 30 + 1 + 0 + + + + + + generic-star-tracker-sim + true + libgeneric_star_tracker_sim.so + + GENERIC_STAR_TRACKER + + command + command + star-tracker-command + + usart + usart_10 + 10 + + + + GENERIC_STAR_TRACKER_42_PROVIDER + fortytwo + 4282 + 30 + 1 + 0 + 0 + + + + +
+
diff --git a/deployments/nos3/cfg/sims/nos_engine_server_config.json b/deployments/nos3/cfg/sims/nos_engine_server_config.json new file mode 100644 index 000000000..aea5ced90 --- /dev/null +++ b/deployments/nos3/cfg/sims/nos_engine_server_config.json @@ -0,0 +1,17 @@ +{ + "plugins": [ + "uart" + ], + + "server_uris": [ + { + "name": "fsw", + "server_uri": "tcp://nos-engine-server:12000" + }, + { + "name": "nos3", + "server_uri": "tcp://nos-engine-server:12001" + } + ] +} + diff --git a/deployments/nos3/cfg/sims/sim_log_config.xml b/deployments/nos3/cfg/sims/sim_log_config.xml new file mode 100644 index 000000000..d1e5ea3d7 --- /dev/null +++ b/deployments/nos3/cfg/sims/sim_log_config.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/deployments/scripts/generate-k8s.sh b/deployments/scripts/generate-k8s.sh new file mode 100755 index 000000000..bdd0a9b13 --- /dev/null +++ b/deployments/scripts/generate-k8s.sh @@ -0,0 +1,551 @@ +#!/bin/bash -e + +RECREATE=${1:-no} # recreate namespaces, pods, etc. +PROVIDER=${2:-podman} # + +MY_PWD=${PWD} + +#source ./scripts/functions/deployment.sh + +#------------------------------------------------------------------------------ +# A script to generate k8s deployment, service... yaml files and apply them +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# TODO: figure out podman and arm64 for nos3 +export KIND_EXPERIMENTAL_PROVIDER=${PROVIDER} + +K8S_CONTEXT=docker-desktop +NODE_SELECTOR=docker-desktop + +K8S_MODE='docker-desktop' # if this value is different from K8S_CONTEXT, target remote k8s on aws + +# kubectl --context kind-myorg-dev-missions-exp apply -k . +#------------------------------------------------------------------------------ +NOS3_CONFIG=$(cat ./scripts/nos3.yaml | yq 'explode(.)' | grep -iv '^null$') +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Mission/SC/Component Arrays +#------------------------------------------------------------------------------ +OU=$(echo "${NOS3_CONFIG}" | yq '.metadata.OU') +ENVIRO=$(echo "${NOS3_CONFIG}" | yq '.metadata.ENVIRO') +TENANT=$(echo "${NOS3_CONFIG}" | yq '.metadata.TENANT') +PURPOSE=$(echo "${NOS3_CONFIG}" | yq '.metadata.PURPOSE') +CONTEXT=$(echo "${NOS3_CONFIG}" | yq '.metadata.CONTEXT')${PURPOSE} # -exp must exist to match remote cluster system + +REALM=${OU}-${ENVIRO}-${CONTEXT} + +nodeSelector=$(echo "${NOS3_CONFIG}" | yq '.defaults.spec.nodes.nodeSelector') # will be overridden if target k8s is remote +imagePullPolicy=$(echo "${NOS3_CONFIG}" | yq '.defaults.spec.nodes.imagePullPolicy') +HEALTHCHECK_PORT=$(echo "${NOS3_CONFIG}" | yq '.defaults.spec.HEALTHCHECK_PORT') + +MISSIONS=($(echo "$NOS3_CONFIG" | yq '.missions[] | keys[]')) +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Creds +#------------------------------------------------------------------------------ +MISSION_GIT_USER=$(cat ~/.appdat/personal_access_token) +MISSION_GIT_TOKEN=$(cat ~/.appdat/personal_access_token) +MISSION_GIT_SERVER=appdat.jsc.nasa.gov + +K8S_LOCAL=true # to know if k8s is local +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# K8s local or remote +#------------------------------------------------------------------------------ +if [ "${K8S_MODE}" != "${K8S_CONTEXT}" ]; then + + AWS_CLUSTER_NAME=${OU}-${ENVIRO}-${CONTEXT} + + ENVIRO=$(echo ${AWS_CLUSTER_NAME} | cut -d- -f2) + + # All this is to capitalize the first letter! + ENVIRO_USE=`echo ${ENVIRO:0:1} | tr '[a-z]' '[A-Z]'`${ENVIRO:1} + + echo; echo "Cluster name: $AWS_CLUSTER_NAME" + + mkdir -p /tmp/${HOME}/development/APPDAT/appdat.jsc.nasa.gov/ssmo/SSMO-APPDAT/ + cd /tmp/${HOME}/development/APPDAT/appdat.jsc.nasa.gov/ssmo/SSMO-APPDAT/ + + git clone git@appdat.jsc.nasa.gov:ssmo/SSMO-APPDAT/sysconf.git || true + cd ./sysconf/admin + + make kubeconfig AWS_CLUSTER_NAME=${AWS_CLUSTER_NAME} + source /tmp/aws-credentials_SSMO-Appdat-Hybrid-Gov${ENVIRO_USE}.sh + + cd ${MY_PWD} # critical + + K8S_CONTEXT=arn:aws-us-gov:eks:${AWS_REGION}:${AWS_ACCOUNT}:cluster/${AWS_CLUSTER_NAME} + + imagePullPolicy=Always + K8S_LOCAL=false +fi + +echo; echo Using and setting context ${K8S_CONTEXT}... +kubectl config use-context ${K8S_CONTEXT} +kubectl config set-context ${K8S_CONTEXT} +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Image URI with its creds +#------------------------------------------------------------------------------ +# TODO: put these in one file +IMAGE_REGISTRY=registry.appdat.jsc.nasa.gov +#IMAGE_URI=${IMAGE_REGISTRY}/ssmo/images/ssmo/nos3/nos3-base:20250217 + +IMAGE_REGISTRY_USER=${USER} +IMAGE_REGISTRY_PASSWORD=$(cat ~/.appdat/images/SSMO_IMAGES) + +IMAGE_SECRET_NAME=appdat-registry + +cat <<-EOF > /tmp/config.json +{ + "auths": { + "${IMAGE_REGISTRY}": { + "auth": "$(echo -n ${IMAGE_REGISTRY_USER}:${IMAGE_REGISTRY_PASSWORD} | base64 | tr -d '\n')", + "username": "${IMAGE_REGISTRY_USER}", + "password": "${IMAGE_REGISTRY_PASSWORD}" + } + } +} +EOF + +#------------------------------------------------------------------------------ +# Missions Loop +#------------------------------------------------------------------------------ +for MISSION in "${MISSIONS[@]}" +do + + _MISSION_ENABLED=$(echo "${NOS3_CONFIG}" | yq ".missions[].${MISSION}.enabled" | grep -iv '^null$') + + if [ "${_MISSION_ENABLED}" != "true" ]; then + echo; echo MISSION ${MISSION} is not enabled, add enabled: true, skipping... + continue + else + echo; echo MISSION ${MISSION} is enabled continuing. + fi + + MISSION_PATH=./environments/${OU}/${ENVIRO}/${CONTEXT}/${MISSION} + mkdir -p ${MISSION_PATH} + + KUSTOMIZATION_FILE_MISSION=${MISSION_PATH}/kustomization.yaml + touch ${KUSTOMIZATION_FILE_MISSION} + + # Printout preamble of kustomization file + cat <<-EOF > ${KUSTOMIZATION_FILE_MISSION} +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +EOF + + SPACECRAFT=($(echo "${NOS3_CONFIG}" | yq ".missions[].${MISSION}.spacecraft[] | keys[]")) + + #------------------------------------------------------------------------------ + # Generate deployment and service yaml files + # run is below that + #------------------------------------------------------------------------------ + for SC in "${SPACECRAFT[@]}" + do + + _SPACECRAFT_ENABLED=$(echo "${NOS3_CONFIG}" | yq ".missions[].${MISSION}.spacecraft[].${SC}.enabled" | grep -iv '^null$') + + if [ "${_SPACECRAFT_ENABLED}" != "true" ]; then + echo " MISSION ${MISSION} is enabled, but SPACECRAFT ${SC} is not enabled, add enabled: true, skipping..." + continue + else + echo " MISSION ${MISSION} is enabled, and SPACECRAFT ${SC} is enabled continuing." + fi + + if [ "${K8S_LOCAL}" != "true" ]; then + nodeSelector=$( + cat <> ${KUSTOMIZATION_FILE_MISSION} + - ./${SC}/kubernetes +EOF +echo " Created ${KUSTOMIZATION_FILE_MISSION}" + + SPACECRAFT_PATH=${MISSION_PATH}/${SC} + mkdir -p ${SPACECRAFT_PATH} + + SPACECRAFT_PATH_K8S=${SPACECRAFT_PATH}/kubernetes + mkdir -p ${SPACECRAFT_PATH_K8S} + + KUSTOMIZATION_FILE_SC=${SPACECRAFT_PATH_K8S}/kustomization.yaml + rm -f ${KUSTOMIZATION_FILE_SC} + touch ${KUSTOMIZATION_FILE_SC} + + SPACECRAFT_PATH_DOCKER=${SPACECRAFT_PATH}/docker/${K8S_NAMESPACE} + mkdir -p ${SPACECRAFT_PATH_DOCKER} + + #------------------------------------------------------------------------------ + # docker-compose + #------------------------------------------------------------------------------ + DOCKER_COMPOSE_FILE=${SPACECRAFT_PATH_DOCKER}/${K8S_NAMESPACE}_docker-compose.yaml + + rm -rf ${DOCKER_COMPOSE_FILE} + touch ${DOCKER_COMPOSE_FILE} + + cat <<-EOF > ${DOCKER_COMPOSE_FILE} +# generated on $(date -u "+%YT%T") + +services: +EOF +echo " Created ${DOCKER_COMPOSE_FILE}" + #------------------------------------------------------------------------------ + + # create configMap per namespace TODO: how to use +CONFIGMAP_FILE=${SPACECRAFT_PATH_K8S}/${K8S_NAMESPACE}_configmap.yaml + + cat <<-EOF > ${CONFIGMAP_FILE} +apiVersion: v1 +kind: ConfigMap +metadata: + name: ${K8S_NAMESPACE}-configmap + namespace: ${K8S_NAMESPACE} +data: + key1: value1 +EOF +echo " Created ${CONFIGMAP_FILE}.yaml" + + # Print preamble of kustomization file + cat <<-EOF > ${KUSTOMIZATION_FILE_SC} +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +EOF +echo " Created blank ${KUSTOMIZATION_FILE_SC}" + + #------------------------------------------------------------------------------ + # By component + #------------------------------------------------------------------------------ + COMPONENTS=($(echo "${NOS3_CONFIG}" | yq ".missions[].${MISSION}.spacecraft[].${SC}.components" | grep -iv '^null$' | yq ' keys[]')) + + THINGS=(${COMPONENTS[@]}) + + _COMPONENTS=$(echo "${NOS3_CONFIG}" | yq ".missions[].${MISSION}.spacecraft[].${SC}.components" | grep -iv '^null$') + + for COMPONENT in "${THINGS[@]}" + do + + COMPONENTS=($(echo "${_COMPONENTS}" | yq ' keys[]')) + + _CONTAINER=$(echo "${_COMPONENTS}" | yq ".${COMPONENT}.container" | grep -iv '^null$') + + # TODO: get replicas: value +# REPLICAS=$(echo "${_COMPONENTS}" | yq ".${COMPONENT}.container.replicas" | grep -iv '^null$') + + REPLICAS=1 + CONTAINER_RESOURCES=$(echo "${_CONTAINER}" | yq ".resources" | grep -iv '^null$') + + CONTAINER_LIMITS_MEMORY=$(echo "${CONTAINER_RESOURCES}"| yq ".limits.memory" | grep -iv '^null$' ) + CONTAINER_LIMITS_CPU=$(echo "${CONTAINER_RESOURCES}"| yq ".limits.cpu" | grep -iv '^null$' ) + + CONTAINER_REQUESTS_MEMORY=$(echo "${CONTAINER_RESOURCES}"| yq ".requests.memory" | grep -iv '^null$' ) + CONTAINER_REQUESTS_CPU=$(echo "${CONTAINER_RESOURCES}"| yq ".requests.cpu" | grep -iv '^null$' ) + + _PATHS=$(echo "${_CONTAINER}" | yq ".PATHS" | grep -iv '^null$') + CONTAINER_PATHS=($(echo "${_PATHS}")) + + BASE_DIR=$(echo "${_PATHS}" | yq '.BASE_DIR') + SIM_BIN=$(echo "${_PATHS}" | yq '.SIM_BIN') + SIMULATOR_BIN=$(echo "${_PATHS}" | yq '.SIMULATOR_BIN') + LOG_CONFIG=$(echo "${_PATHS}" | yq '.LOG_CONFIG') + +# TODO: note SC_CFG_FILE below + CFG_FILE=$(echo "${_PATHS}" | yq '.SC_CFG_FILE') +# TODO: TBD wrt to GND + GND_CFG_FILE=$(echo "${_PATHS}" | yq '.GND_CFG_FILE') + + IMAGE_URI=$(echo "${_PATHS}" | yq '.IMAGE_URI') + + METADATA_NAME=${MISSION}-${SC}-${COMPONENT} + DEPLOYMENT=${MISSION}-${SC}-${COMPONENT} + + COMPONENT_PATH=${SPACECRAFT_PATH_K8S}/${COMPONENT} + mkdir -p ${COMPONENT_PATH} + + KUSTOMIZATION_FILE_COMPONENT=${COMPONENT_PATH}/kustomization.yaml + rm -f ${KUSTOMIZATION_FILE_COMPONENT} + + #------------------------------------------------------------------------------ + # Generate Kustomization files + #------------------------------------------------------------------------------ + cat <<-EOF >> ${KUSTOMIZATION_FILE_COMPONENT} +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./deployment.yaml + - ./service.yaml +EOF +echo " Created ${KUSTOMIZATION_FILE_COMPONENT}" + + SERVICE_FILE_COMPONENT=${COMPONENT_PATH}/service.yaml + rm -f ${SERVICE_FILE_COMPONENT} + + cat <<-EOF >> ${KUSTOMIZATION_FILE_SC} + - ./${COMPONENT} +EOF +echo " Added component ${COMPONENT} to ${SERVICE_FILE_COMPONENT}" + + DEPLOYMENT_FILE_COMPONENT=${COMPONENT_PATH}/deployment.yaml + rm -f ${DEPLOYMENT_FILE_COMPONENT} + + #------------------------------------------------------------------------------ + # Generate Deployment files + #------------------------------------------------------------------------------ + cat <<-EOF >> ${DEPLOYMENT_FILE_COMPONENT} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: ${K8S_NAMESPACE} + name: ${K8S_NAMESPACE}-${COMPONENT} + labels: + app: ${K8S_NAMESPACE}-${COMPONENT} +spec: + replicas: 0 + selector: + matchLabels: + app: ${K8S_NAMESPACE}-${COMPONENT} + template: + metadata: + labels: + app: ${K8S_NAMESPACE}-${COMPONENT} + spec: + imagePullSecrets: + - name: appdat-registry +${nodeSelector} + containers: + - name: ${K8S_NAMESPACE}-${COMPONENT} + image: ${IMAGE_URI} + imagePullPolicy: ${imagePullPolicy} + resources: + limits: + memory: ${CONTAINER_LIMITS_MEMORY} + cpu: ${CONTAINER_LIMITS_CPU} + requests: + memory: ${CONTAINER_REQUESTS_MEMORY} + cpu: ${CONTAINER_REQUESTS_CPU} + ports: + - containerPort: ${HEALTHCHECK_PORT} + env: + - name: HEALTHCHECK_PORT + value: "${HEALTHCHECK_PORT}" + - name: OU + value: ${OU} + - name: TENANT + value: ${TENANT} + - name: ENVIRO + value: ${ENVIRO} + - name: CONTEXT + value: missions + - name: MISSION + value: ${MISSION} + - name: SPACECRAFT + value: ${SC} + - name: MISSION_GIT_USER + value: ${MISSION_GIT_USER} + - name: MISSION_GIT_TOKEN + value: ${MISSION_GIT_TOKEN} + - name: MISSION_GIT_SERVER + value: ${MISSION_GIT_SERVER} + - name: BASE_DIR + value: ${BASE_DIR} + - name: SIM_BIN + value: ${SIM_BIN} + - name: SIMULATOR_BIN + value: ${SIMULATOR_BIN} + - name: LOG_CONFIG + value: ${LOG_CONFIG} + - name: CFG_FILE + value: ${CFG_FILE} + # - name: SC_CFG_FILE + # value: ${SC_CFG_FILE} + # - name: GND_CFG_FILE + # value: ${GND_CFG_FILE} + - name: NETWORK + value: ${K8S_NAMESPACE} + - name: COMPONENT_NAME + value: ${COMPONENT} +EOF +echo " Created ${DEPLOYMENT_FILE_COMPONENT}" + + #------------------------------------------------------------------------------ + # Generate Service files + #------------------------------------------------------------------------------ + cat <<-EOF >> ${SERVICE_FILE_COMPONENT} +--- +apiVersion: v1 +kind: Service +metadata: + name: ${COMPONENT} + namespace: ${K8S_NAMESPACE} +spec: + selector: + app: ${K8S_NAMESPACE}-${COMPONENT} + ports: + - name: healthcheck-tcp + protocol: TCP + port: ${HEALTHCHECK_PORT} + targetPort: ${HEALTHCHECK_PORT} + - name: healthcheck-udp + protocol: UDP + port: ${HEALTHCHECK_PORT} + targetPort: ${HEALTHCHECK_PORT} + type: ClusterIP + +EOF +echo " Created ${SERVICE_FILE_COMPONENT}" + + #------------------------------------------------------------------------------ + # docker-compose: services + #------------------------------------------------------------------------------ + SERVICE_NAME=${K8S_NAMESPACE}-${COMPONENT} + + cat <<-EOF >> ${DOCKER_COMPOSE_FILE} + ${SERVICE_NAME}: + image: ${IMAGE_URI} + container_name: ${SERVICE_NAME} + hostname: ${SERVICE_NAME} + environment: + HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + OU: ${OU} + TENANT: ${TENANT} + ENVIRO: ${ENVIRO} + CONTEXT: missions + MISSION: ${MISSION} + SPACECRAFT: ${SC} + MISSION_GIT_USER: ${MISSION_GIT_USER} + MISSION_GIT_TOKEN: ${MISSION_GIT_TOKEN} + MISSION_GIT_SERVER: ${MISSION_GIT_SERVER} + BASE_DIR: ${BASE_DIR} + SIM_BIN: ${SIM_BIN} + NOS3_SIMULATOR_BIN: ${SIMULATOR_BIN} + LOG_CONFIG: ${LOG_CONFIG} + CFG_FILE: ${CFG_FILE} + # SC_CFG_FILE: ${SC_CFG_FILE} + # GND_CFG_FILE: ${GND_CFG_FILE} + COMPONENT_NAME: ${COMPONENT} + privileged: true + networks: + - ${K8S_NAMESPACE} +EOF + + echo $MISSION $SC $COMPONENT ${SPACECRAFT[@]} + + done # COMPONENT loop + + #------------------------------------------------------------------------------ + # docker-compose completion for sc + #------------------------------------------------------------------------------ + cat <<-EOF >> ${DOCKER_COMPOSE_FILE} + +networks: + ${K8S_NAMESPACE}: + driver: bridge + +EOF + #------------------------------------------------------------------------------ + + done # SC loop + +done # MISSIONS loop + +#------------------------------------------------------------------------------ +# Run kubectl on created yaml files +#------------------------------------------------------------------------------ +# Missions Loop +for MISSION in "${MISSIONS[@]}" +do + + MISSION_PATH=./environments/${OU}/${ENVIRO}/${CONTEXT}/${MISSION} + + _MISSION_ENABLED=$(echo "${NOS3_CONFIG}" | yq ".missions[].${MISSION}.enabled" | grep -iv '^null$') + + if [ "${_MISSION_ENABLED}" != "true" ]; then + echo; echo MISSION ${MISSION} is not enabled, add enabled: true, skipping... + continue + else + echo; echo MISSION ${MISSION} is enabled continuing. + fi + + # resource names, to be used with context, cluster, namespace, pods, and services + RESOURCE_NAME=${REALM}-${MISSION} + + REALM=docker-desktop + + # contexts/clusters + K8S_CONTEXT=${REALM} + K8S_CLUSTER=${K8S_CONTEXT} + K8S_USER=${K8S_CONTEXT} + +# kind delete cluster --name ${K8S_CLUSTER} || true +# kind create cluster --name ${K8S_CLUSTER} || true + +# K8S_CONTEXT_PREFIX=kind- + K8S_CONTEXT=${K8S_CONTEXT_PREFIX}${K8S_CONTEXT} + + # set and use context + kubectl config set-context ${K8S_CONTEXT} + kubectl config use-context ${K8S_CONTEXT} + SPACECRAFT=($(echo "${NOS3_CONFIG}" | yq ".missions[].${MISSION}.spacecraft[] | keys[]")) + + for SC in "${SPACECRAFT[@]}" + do + + _SPACECRAFT_ENABLED=$(echo "${NOS3_CONFIG}" | yq ".missions[].${MISSION}.spacecraft[].${SC}.enabled" | grep -iv '^null$') + + if [ "${_SPACECRAFT_ENABLED}" != "true" ]; then + echo " MISSION ${MISSION} is enabled, but SPACECRAFT ${SC} is not enabled, add enabled: true, skipping..." + continue + else + echo " MISSION ${MISSION} is enabled, and SPACECRAFT ${SC} is enabled continuing." + fi + + K8S_NAMESPACE=${OU}-${ENVIRO}-${CONTEXT}-${MISSION}-${SC} + + if [ "${RECREATE}" == "yes" ]; then + echo; echo Deleting namespace ${K8S_NAMESPACE} in context ${K8S_CONTEXT}... + kubectl delete namespace ${K8S_NAMESPACE} --context ${K8S_CONTEXT} || true + fi + + echo; echo Creating namespace ${K8S_NAMESPACE} in context ${K8S_CONTEXT}... + kubectl create namespace ${K8S_NAMESPACE} --context ${K8S_CONTEXT} || true + + echo; echo Creating secret ${IMAGE_SECRET_NAME} in namespace ${K8S_NAMESPACE} in context ${K8S_CONTEXT}... + kubectl delete secret ${IMAGE_SECRET_NAME} -n ${K8S_NAMESPACE} || true + kubectl create secret generic ${IMAGE_SECRET_NAME} \ + --from-file=.dockerconfigjson=/tmp/config.json \ + --type=kubernetes.io/dockerconfigjson \ + -n ${K8S_NAMESPACE} + kubectl get secret ${IMAGE_SECRET_NAME} --output=yaml -n ${K8S_NAMESPACE} + + SPACECRAFT_PATH=${MISSION_PATH}/${SC} + SPACECRAFT_PATH_K8S=${SPACECRAFT_PATH}/kubernetes + + KUSTOMIZATION_FILE_SC=${SPACECRAFT_PATH_K8S} + + echo; echo Applying ${KUSTOMIZATION_FILE_SC} in context ${K8S_CONTEXT}... + kubectl apply -k ${KUSTOMIZATION_FILE_SC} + kubectl get deployments -n ${K8S_NAMESPACE} + + echo; echo Get pods in namespace ${K8S_NAMESPACE} in context ${K8S_CONTEXT}... + kubectl get pods -o wide -n ${K8S_NAMESPACE} + + done # SC + +done # MISSIONS diff --git a/deployments/scripts/nos3.yaml b/deployments/scripts/nos3.yaml new file mode 100644 index 000000000..1cfed23ef --- /dev/null +++ b/deployments/scripts/nos3.yaml @@ -0,0 +1,201 @@ +metadata: + OU: myorg + ENVIRO: dev + TENANT: tenant + CONTEXT: missions # -exp must exist to match remote AWS EKS cluster + PURPOSE: -exp + +defaults: + spec: + HEALTHCHECK_PORT: &HEALTHCHECK_PORT + 60000 + PATHS: &PATHS + BASE_DIR: &BASE_DIR + /builds/nos3 + SIM_BIN: &SIM_BIN + /builds/nos3/sims/build/bin + SIMULATOR_BIN: &SIMULATOR_BIN + /builds/nos3/sims/build/bin/nos3-single-simulator + LOG_CONFIG: &LOG_CONFIG + /builds/nos3/sims/build/bin/sim_log_config.xml + # CFG_FILE: &CFG_FILE + # /builds/nos3/sims/build/bin/nos3-simulator.xml + SC_CFG_FILE: &SC_CFG_FILE + /builds/nos3/sims/build/bin/nos3-simulator.xml + GND_CFG_FILE: &GND_CFG_FILE + /builds/nos3/sims/build/bin/nos3-simulator.xml + IMAGE_REGISTRY: &IMAGE_REGISTRY + registry.appdat.jsc.nasa.gov + IMAGE_URI: &IMAGE_URI + registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 + container: &container + PATHS: + << : *PATHS + resources: &resources + limits: &limits + memory: "128Mi" + cpu: "100m" + requests: &requests + memory: "128Mi" + cpu: "100m" + nodes: &nodes + min_size: 1 + max_size: 1 + desired_size: 1 + instance_types: m6i.xlarge + nodeSelector: "" + imagePullPolicy: IfNotPresent + components: &hw_components + camsim: + name: camsim + replicas: 1 + container: + << : *container + generic-css-sim: + name: css + replicas: 1 + container: + << : *container + generic-eps-sim: + name: eps + replicas: 1 + container: + << : *container + generic-fss-sim: + name: fss + replicas: 1 + container: + << : *container + gps: + name: gps + replicas: 1 + container: + << : *container + generic-imu-sim: + name: imu + replicas: 1 + container: + << : *container + generic-mag-sim: + name: mag + replicas: 1 + container: + << : *container + generic-reactionwheel-sim0: + name: rw0 + replicas: 1 + container: + << : *container + generic-reactionwheel-sim1: + name: rw1 + replicas: 1 + container: + << : *container + generic-reactionwheel-sim2: + name: rw2 + replicas: 1 + container: + << : *container + generic-radio-sim: + name: radio_sim + replicas: 1 + container: + PATHS: + << : *PATHS + resources: + limits: + memory: "128Mi" + cpu: "125m" + requests: + memory: "128Mi" + cpu: "125m" + host: radio_sim + network-alias: radio_sim + generic-star-tracker-sim: + name: start-tracker + replicas: 1 + container: + << : *container + generic-torquer-sim: + name: torquer + replicas: 1 + container: + << : *container + generic-thruster-sim: + name: thruster + replicas: 1 + container: + << : *container + time: + name: time + replicas: 1 + container: + << : *container + stdio-terminal: + name: stdio-terminal + replicas: 1 + container: + << : *container + udp-terminal: + replicas: 2 + name: udp-terminal + container: + << : *container + # nos_engine: & nos_engine + # container: + # << : *container + # truth42: &truth42 + # container: + # << : *container + # flight_dynamics: &flight_dynamics + # fortytwo: &fortytwo + # container: + # << : *container + # encryption: &encryption + # cryptolib: + # container: + # << : *container + +missions: + - m01: + enabled: true + spacecraft: + - sc1: + enabled: true + components: + fortytwo: + name: fsw + replicas: 1 + container: + << : *container + fsw: + name: fsw + replicas: 1 + container: + << : *container + nos-engine-server: + name: nos-engine-server + replicas: 1 + container: + << : *container + time: + name: time + replicas: 1 + container: + << : *container + gps: + name: gps + replicas: 1 + container: + << : *container + - m02: + enabled: false + spacecraft: + - sc1: + enabled: true + components: + << : *hw_components + - sc2: + enabled: false + components: + << : *hw_components \ No newline at end of file diff --git a/deployments/scripts/nos3_new.yml b/deployments/scripts/nos3_new.yml new file mode 100644 index 000000000..50b46ec2a --- /dev/null +++ b/deployments/scripts/nos3_new.yml @@ -0,0 +1,39 @@ +# cat /Users/hido/development//yaml_anchors_aliases.yml | yq '. | explode(.)' + +metadata: + OU: myorg + ENVIRO: dev + TENANT: tenant + CONTEXT: missions # -exp must exist to match remote AWS EKS cluster + PURPOSE: '-exp' + +defaults: + spec: + HEALTHCHECK_PORT: 60000 + env: &env + IMAGE_REGISTRY: registry.appdat.jsc.nasa.gov + IMAGE_URI: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 + resources: &resources + replicas: 1 + limits: + memory: 128Mi + cpu: 100m + requests: + memory: 128Mi + cpu: 100m + components: + camsim1: + name: camsim1 + resources: + <<: *resources + camsim2: + name: camsim2 + +# missions: +# - m01: +# enabled: true +# spacecraft: +# - sc1: +# enabled: true +# components: +# << : *components \ No newline at end of file From 920f6f617e3986d6be0adff593f4adc3249b955b Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 22 Oct 2025 11:16:52 -0400 Subject: [PATCH 002/111] added openmct to compose file --- deployments/Makefile | 8 +- deployments/Taskfile.yml | 12 + deployments/docker/docker-compose.yaml | 41 ++++ deployments/docker/openmct/Containerfile | 63 +++++ deployments/docker/openmct/entrypoint.sh | 8 + deployments/docker/openmct/example/index.js | 229 ++++++++++++++++++ .../openmct/example/make-example-events.mjs | 127 ++++++++++ deployments/docker/openmct/webpack.dev.mjs | 71 ++++++ 8 files changed, 557 insertions(+), 2 deletions(-) create mode 100644 deployments/docker/openmct/Containerfile create mode 100755 deployments/docker/openmct/entrypoint.sh create mode 100644 deployments/docker/openmct/example/index.js create mode 100644 deployments/docker/openmct/example/make-example-events.mjs create mode 100644 deployments/docker/openmct/webpack.dev.mjs diff --git a/deployments/Makefile b/deployments/Makefile index 94072a3c8..41a8d0d2b 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -40,6 +40,7 @@ VOLUME_MAVEN_SETTINGS_PATH="" # To set default settings.xml and essentially empty for mvn, unless in vmmoc $(shell echo "" > ${CONTAINER_DIR}/yamcs/settings.xml) export MAVEN_HTTPS_PROXY=-s./settings.xml +export MINIMAL_PATH=.. #--- ifndef DEPLOYMENT_ENVIRO @@ -78,9 +79,14 @@ build-yamcs: | env_export set-permissions ## build-yamcs cd ${CONTAINER_DIR}/ ; \ ${CONTAINER_COMPOSE} build --pull nos3-gsw +build-openmct: | env_export set-permissions ## build-openmct + cd ${CONTAINER_DIR}/ ; \ + ${CONTAINER_COMPOSE} build --pull nos3-openmct + build: | set-permissions## build essentials $(MAKE) build-fortytwo $(MAKE) build-yamcs + $(MAKE) build-openmct set-permissions: ## set filesystem permissions, needed for restricted accounts find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable @@ -94,8 +100,6 @@ up: | build ## Bring up nos3 in detached state (attached state doesn't work for --env-file ./.env \ -f ./docker-compose.yaml up -d --remove-orphans -export MINIMAL_PATH=.. - up-minimum: | build ## Bring up nos3 in detached state (attached state doesn't work for some reason) export MINIMAL_PATH=nos3; \ cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} \ diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index d8f871a22..e1382b864 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -19,6 +19,7 @@ env: HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' MAVEN_HTTPS_PROXY: '-s./settings.xml' + MINIMAL_PATH: ".." tasks: default: @@ -69,11 +70,22 @@ tasks: cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-gsw + build-openmct: + desc: Build openmct + deps: + - env_create + - set-permissions + cmds: + - | + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-openmct + build: desc: Build all containers cmds: - task build-yamcs - task build-fortytwo + - task build-openmct set-permissions: ## desc: set filesystem permissions, needed for restricted accounts diff --git a/deployments/docker/docker-compose.yaml b/deployments/docker/docker-compose.yaml index 1321465a1..90914d90a 100644 --- a/deployments/docker/docker-compose.yaml +++ b/deployments/docker/docker-compose.yaml @@ -749,6 +749,47 @@ services: - sc01-nos-time-driver nos3-core-00: + nos3-openmct: + build: + context: ./openmct + dockerfile: Containerfile + args: + DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} + HTTPS_PROXY: ${HTTPS_PROXY} + HTTP_PROXY: ${HTTP_PROXY} + NO_PROXY: ${NO_PROXY} + MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + GIT_URL: https://github.com/akhenry/openmct-yamcs.git + GIT_COMMIT: master + attach: true + container_name: sc01-openmct + hostname: sc01-openmct + working_dir: "/opt/openmct" + volumes: + - "${PWD}/openmct/entrypoint.sh:/opt/openmct/entrypoint.sh" + - "${PWD}/openmct/webpack.dev.mjs:/opt/openmct/.webpack/webpack.dev.mjs" + - "${PWD}/openmct/example/index.js:/opt/openmct/example/index.js" + - "${PWD}/openmct/example/make-example-events.mjs:/opt/openmct/example/make-example-events.mjs" + command: '/opt/openmct/entrypoint.sh' + healthcheck: + test: ["CMD-SHELL", "curl http://localhost:9000/"] + interval: 10s + timeout: 5s + retries: 30 + start_period: 30s + depends_on: + nos3-gsw: + condition: service_healthy + ports: + - "127.0.0.1:9000:9000" + - "127.0.0.1:8080:8080" + networks: + nos3-sc01-00: + aliases: + - openmct + - sc01-openmct + nos3-core-00: + networks: nos3-core-00: external: ${EXTERNAL_NETWORK_CORE:-false} diff --git a/deployments/docker/openmct/Containerfile b/deployments/docker/openmct/Containerfile new file mode 100644 index 000000000..4f50f267a --- /dev/null +++ b/deployments/docker/openmct/Containerfile @@ -0,0 +1,63 @@ +FROM ubuntu:25.04 + +#--- PROXY CONFIG (if needed) +ARG MAVEN_HTTPS_PROXY +ARG HTTPS_PROXY +ARG HTTP_PROXY +ARG NO_PROXY +ARG DEPLOYMENT_ENVIRO + +ENV MAVEN_HTTPS_PROXY=${MAVEN_HTTPS_PROXY} +ENV HTTPS_PROXY=${HTTPS_PROXY} +ENV HTTP_PROXY=${HTTP_PROXY} +ENV NO_PROXY=${NO_PROXY} +ENV DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} + +# Install dependencies +RUN apt-get update && \ + apt-get -y install \ + sudo git curl && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Set working directory +WORKDIR /opt + +# Install nvm and node +ENV NVM_VERSION=v0.40.1 +ENV NVM_URL=https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh +ENV NVM_DIR=/opt/nvm +RUN mkdir -p $NVM_DIR + +ENV NODE_VERSION=v21.7.3 +ENV NODE_PATH=$NVM_DIR/versions/node/${NODE_VERSION}/bin +ENV PATH=${NVM_DIR}:${NODE_PATH}:${PATH} + +# Install nvm and node +WORKDIR /opt +RUN curl -o- ${NVM_URL} | bash +RUN . ${NVM_DIR}/nvm.sh && nvm install ${NODE_VERSION} + +# Clone openmct-yamcs repo +ARG GIT_URL +ARG GIT_COMMIT + +ENV GIT_URL=${GIT_URL} +ENV GIT_COMMIT=${GIT_COMMIT} + +RUN git clone --recurse-submodules -b ${GIT_COMMIT} -j2 ${GIT_URL} openmct + +# Set working directory to the cloned repo +WORKDIR /opt/openmct + +# Install dependencies and build openmct-yamcs +RUN ${NODE_PATH}/npm install -loglevel verbose +RUN ${NODE_PATH}/npm run build:example:master -loglevel verbose + +# Install dependencies +RUN apt-get update && \ + apt-get -y install \ + sudo iputils-ping vim netcat-traditional tmux tree && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + diff --git a/deployments/docker/openmct/entrypoint.sh b/deployments/docker/openmct/entrypoint.sh new file mode 100755 index 000000000..ba0d12884 --- /dev/null +++ b/deployments/docker/openmct/entrypoint.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +pkill -f node +pkill -f npm + +npm start + +tail -f /dev/null diff --git a/deployments/docker/openmct/example/index.js b/deployments/docker/openmct/example/index.js new file mode 100644 index 000000000..257bfa154 --- /dev/null +++ b/deployments/docker/openmct/example/index.js @@ -0,0 +1,229 @@ +import installYamcsPlugins from '../src/openmct-yamcs.js'; + +const config = { + yamcsDictionaryEndpoint: "http://localhost:9000/yamcs-proxy/", + yamcsHistoricalEndpoint: "http://localhost:9000/yamcs-proxy/", + yamcsWebsocketEndpoint: "ws://localhost:9000/yamcs-proxy-ws/", + yamcsUserEndpoint: "http://localhost:9000/yamcs-proxy/api/user/", + yamcsInstance: "nos3", + yamcsProcessor: "realtime", + yamcsFolder: "nos3", + throttleRate: 1000, + // Batch size is specified in characers as there is no performant way of calculating true + // memory usage of a string buffer in real-time. + // String characters can be 8 or 16 bits in JavaScript, depending on the code page used. + // Thus 500,000 characters requires up to 16MB of memory (1,000,000 * 16). + maxBufferSize: 1000000 +}; +const STATUS_STYLES = { + NO_STATUS: { + iconClass: "icon-question-mark", + iconClassPoll: "icon-status-poll-question-mark" + }, + GO: { + iconClass: "icon-check", + iconClassPoll: "icon-status-poll-question-mark", + statusClass: "s-status-ok", + statusBgColor: "#33cc33", + statusFgColor: "#000" + }, + MAYBE: { + iconClass: "icon-alert-triangle", + iconClassPoll: "icon-status-poll-question-mark", + statusClass: "s-status-warning", + statusBgColor: "#ffb66c", + statusFgColor: "#000" + }, + NO_GO: { + iconClass: "icon-circle-slash", + iconClassPoll: "icon-status-poll-question-mark", + statusClass: "s-status-error", + statusBgColor: "#9900cc", + statusFgColor: "#fff" + } +}; +const openmct = window.openmct; + +(() => { + const POLL_INTERVAL = 100; // ms + const MAX_POLL_TIME = 10000; // 10 seconds + const COMPOSITION_RETRY_DELAY = 250; // ms + const MAX_COMPOSITION_RETRIES = 20; // 5 seconds total with 250ms intervals + const ONE_SECOND = 1000; + const ONE_MINUTE = ONE_SECOND * 60; + const THIRTY_MINUTES = ONE_MINUTE * 30; + + openmct.setAssetPath("/node_modules/openmct/dist"); + + installDefaultPlugins(); + openmct.install(installYamcsPlugins(config)); + openmct.install( + openmct.plugins.OperatorStatus({ statusStyles: STATUS_STYLES }) + ); + + document.addEventListener("DOMContentLoaded", function () { + openmct.start(); + }); + openmct.install( + openmct.plugins.Conductor({ + menuOptions: [ + { + name: "Realtime", + timeSystem: "utc", + clock: "local", + clockOffsets: { + start: -THIRTY_MINUTES, + end: 0 + } + }, + { + name: "Fixed", + timeSystem: "utc", + bounds: { + start: Date.now() - THIRTY_MINUTES, + end: 0 + } + } + ] + }) + ); + + function installDefaultPlugins() { + openmct.install(openmct.plugins.LocalStorage()); + openmct.install(openmct.plugins.Espresso()); + openmct.install(openmct.plugins.MyItems()); + openmct.install(openmct.plugins.example.Generator()); + openmct.install(openmct.plugins.example.ExampleImagery()); + openmct.install(openmct.plugins.UTCTimeSystem()); + openmct.install(openmct.plugins.TelemetryMean()); + + openmct.install( + openmct.plugins.DisplayLayout({ + showAsView: ["summary-widget", "example.imagery", "yamcs.image"] + }) + ); + openmct.install(openmct.plugins.SummaryWidget()); + openmct.install(openmct.plugins.Notebook()); + openmct.install(openmct.plugins.LADTable()); + openmct.install( + openmct.plugins.ClearData([ + "table", + "telemetry.plot.overlay", + "telemetry.plot.stacked" + ]) + ); + + openmct.install(openmct.plugins.FaultManagement()); + openmct.install(openmct.plugins.BarChart()); + openmct.install(openmct.plugins.Timeline()); + openmct.install(openmct.plugins.EventTimestripPlugin()); + + // setup example display layout + openmct.on('start', async () => { + if (localStorage.getItem('exampleLayout') !== null) { + return; + } + + // try to import the example display layout, fail gracefully + try { + // Function to fetch JSON content as text + async function fetchJsonText(url) { + const response = await fetch(url); + const text = await response.text(); + + return text; + } + + async function getExampleLayoutPath() { + const objects = Object.values(JSON.parse(localStorage.getItem('mct'))); + const exampleLayout = objects.find(object => object.name === 'Example Flexible Layout'); + let path = await openmct.objects.getOriginalPath(exampleLayout.identifier); + + path.pop(); + path = path.reverse(); + path = path.reduce((prev, curr) => { + return prev + '/' + openmct.objects.makeKeyString(curr.identifier); + }, '#/browse'); + + return path; + } + + // poll for the localStorage item + function mctItemExists() { + return new Promise((resolve, reject) => { + const startTime = Date.now(); + + function checkItem() { + if (localStorage.getItem('mct') !== null) { + resolve(true); + + return; + } + + if (Date.now() - startTime > MAX_POLL_TIME) { + reject(new Error('Timeout waiting for mct localStorage item')); + + return; + } + + setTimeout(checkItem, POLL_INTERVAL); + } + + checkItem(); + }); + } + + // wait for the 'mct' item to exist + await mctItemExists(); + + // setup to use import as JSON action + const importAction = openmct.actions.getAction('import.JSON'); + const myItems = await openmct.objects.get('mine'); + const exampleDisplayText = await fetchJsonText('./example-display.json'); + const selectFile = { + body: exampleDisplayText + }; + + // import the example display layout + importAction.onSave(myItems, { selectFile }); + + // the importAction has asynchronous code, so we will need to check + // the composition of My Items to confirm the import was successful + const compositionCollection = openmct.composition.get(myItems); + let compositionLength = 0; + let composition; + + let retryCount = 0; + while (compositionLength === 0 && retryCount < MAX_COMPOSITION_RETRIES) { + composition = await compositionCollection.load(); + compositionLength = composition.length; + + if (compositionLength === 0) { + retryCount++; + await new Promise(resolve => setTimeout(resolve, COMPOSITION_RETRY_DELAY)); + } + } + + if (compositionLength === 0) { + throw new Error('Failed to load composition after maximum retries'); + } + + const exampleLayoutPath = await getExampleLayoutPath(); + + // give everything time to initialize + await new Promise(resolve => setTimeout(resolve, 250)); + + openmct.notifications.info('Navigated to Example Display Layout'); + + // navigate to the "Example Display Layout" + openmct.router.navigate(exampleLayoutPath); + + // set the localStorage item to prevent this from running again + localStorage.setItem('exampleLayout', 'true'); + } catch (error) { + console.error('Failed to set up example display layout:', error); + openmct.notifications.error('Failed to load example display layout: ' + error.message); + } + }); + } +})(); diff --git a/deployments/docker/openmct/example/make-example-events.mjs b/deployments/docker/openmct/example/make-example-events.mjs new file mode 100644 index 000000000..345a93c9f --- /dev/null +++ b/deployments/docker/openmct/example/make-example-events.mjs @@ -0,0 +1,127 @@ +import process from 'process'; + +const INSTANCE = "nos3"; +const URL = `http://localhost:8090/api/archive/${INSTANCE}/events`; + +const events = [ + { + type: "PRESSURE_ALERT", + message: "Pressure threshold exceeded", + severity: "CRITICAL", + source: "PressureModule", + sequenceNumber: 1, + extra: { + pressure: "150 PSI", + location: "Hydraulic System" + } + }, + { + type: "PRESSURE_WARNING", + message: "Pressure nearing critical level", + severity: "WARNING", + source: "PressureModule", + sequenceNumber: 2, + extra: { + pressure: "140 PSI", + location: "Hydraulic System" + } + }, + { + type: "PRESSURE_INFO", + message: "Pressure system check completed", + severity: "INFO", + source: "PressureModule", + sequenceNumber: 3, + extra: { + checkType: "Routine Inspection", + duration: "10m" + } + }, + { + type: "TEMPERATURE_ALERT", + message: "Temperature threshold exceeded", + severity: "CRITICAL", + source: "TemperatureModule", + sequenceNumber: 4, + extra: { + temperature: "100°C", + location: "Engine Room" + } + }, + { + type: "TEMPERATURE_WARNING", + message: "Temperature nearing critical level", + severity: "WARNING", + source: "TemperatureModule", + sequenceNumber: 5, + extra: { + temperature: "95°C", + location: "Engine Room" + } + }, + { + type: "TEMPERATURE_INFO", + message: "Temperature nominal", + severity: "INFO", + source: "TemperatureModule", + sequenceNumber: 6, + extra: { + temperature: "35°C", + location: "Life Support" + } + }, + { + type: "TEMPERATURE_INFO", + message: "Temperature nominal", + severity: "INFO", + source: "TemperatureModule", + sequenceNumber: 7, + extra: { + temperature: "30°C", + location: "Life Support" + } + }, + { + type: "TEMPERATURE_SEVERE", + message: "Temperature nominal", + severity: "SEVERE", + source: "TemperatureModule", + sequenceNumber: 8, + extra: { + temperature: "200°C", + location: "Engine Room" + } + } +]; + +async function postEvent(event, delaySeconds) { + const eventTime = new Date(Date.now() + delaySeconds * 1000).toISOString(); + event.time = eventTime; + + try { + const response = await fetch(URL, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(event) + }); + + if (response.ok) { + console.log(`Event posted successfully: ${event.type}`); + } else { + console.error(`Failed to post event: ${event.type}. HTTP Status: ${response.status}`); + } + } catch (error) { + console.error(`Error posting event: ${event.type}.`, error); + } +} + +export async function postAllEvents() { + for (let i = 0; i < events.length; i++) { + await postEvent(events[i], i * 5); + } +} + +// If you still want to run it standalone +if (import.meta.url === `file://${process.argv[1]}`) { + postAllEvents(); +} diff --git a/deployments/docker/openmct/webpack.dev.mjs b/deployments/docker/openmct/webpack.dev.mjs new file mode 100644 index 000000000..2d21c4e55 --- /dev/null +++ b/deployments/docker/openmct/webpack.dev.mjs @@ -0,0 +1,71 @@ +/***************************************************************************** + * Open MCT, Copyright (c) 2014-2020, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT is 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. + * + * Open MCT includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +// @ts-check +import path from "path"; +import { fileURLToPath } from "url"; +import { merge } from "webpack-merge"; +import commonConfig from "./webpack.common.mjs"; + +// Replicate __dirname functionality for ES modules +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +/** @type {import('webpack').Configuration} */ +const devConfig = { + mode: "development", + context: path.resolve(__dirname, "../"), + devtool: "eval-source-map", + entry: { + "openmct-yamcs-example": path.resolve(__dirname, "../example/index.js"), + }, + devServer: { + compress: true, + port: 9000, + static: [ + { + directory: path.join(__dirname, "../example"), + }, + { + directory: path.join(__dirname, "../node_modules/openmct/dist"), + publicPath: "/node_modules/openmct/dist", + }, + ], + proxy: [ + { + context: ["/yamcs-proxy/"], + target: "http://active-gs:8090/", + secure: false, + changeOrigin: true, + pathRewrite: { "^/yamcs-proxy/": "" }, + }, + { + context: ["/yamcs-proxy-ws/"], + target: "ws://active-gs:8090/api/websocket", + secure: false, + changeOrigin: true, + ws: true, + pathRewrite: { "^/yamcs-proxy-ws/": "" }, + }, + ], + }, +}; + +export default merge(commonConfig, devConfig); From 44918b8f586fd485bb74414faeed8a49c710a04c Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 22 Oct 2025 13:07:01 -0400 Subject: [PATCH 003/111] openmct now works with yamcs --- deployments/Makefile | 5 ++--- deployments/Taskfile.yml | 6 +++--- deployments/docker/docker-compose.yaml | 1 + 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 41a8d0d2b..446b7327d 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -84,9 +84,8 @@ build-openmct: | env_export set-permissions ## build-openmct ${CONTAINER_COMPOSE} build --pull nos3-openmct build: | set-permissions## build essentials - $(MAKE) build-fortytwo - $(MAKE) build-yamcs - $(MAKE) build-openmct + cd ${CONTAINER_DIR}/ ; \ + ${CONTAINER_COMPOSE} build --pull nos3-fortytwo nos3-gsw nos3-openmct set-permissions: ## set filesystem permissions, needed for restricted accounts find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index e1382b864..cf11ce3ae 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -83,9 +83,9 @@ tasks: build: desc: Build all containers cmds: - - task build-yamcs - - task build-fortytwo - - task build-openmct + - | + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-fortytwo nos3-gsw nos3-openmct set-permissions: ## desc: set filesystem permissions, needed for restricted accounts diff --git a/deployments/docker/docker-compose.yaml b/deployments/docker/docker-compose.yaml index 90914d90a..518c8c5ef 100644 --- a/deployments/docker/docker-compose.yaml +++ b/deployments/docker/docker-compose.yaml @@ -750,6 +750,7 @@ services: nos3-core-00: nos3-openmct: + image: ghcr.io/haisamido/nos3-openmct:dev build: context: ./openmct dockerfile: Containerfile From f3b040f6973191c185b7bf0d16b827b404460f00 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 22 Oct 2025 14:02:55 -0400 Subject: [PATCH 004/111] more refinements --- deployments/Makefile | 110 +++++++++++++-------------------------- deployments/Taskfile.yml | 83 ++++++++++++++++++++--------- 2 files changed, 95 insertions(+), 98 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 446b7327d..dcc075c2d 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -1,42 +1,20 @@ .DEFAULT_GOAL := help .ONESHELL: -.PHONY: clean delete - SHELL=bash -export DIFF_PROGRAM:=vimdiff # Containerization Parameters export CONTAINER_BIN=docker -export CONTAINER_COMPOSE=${CONTAINER_BIN} compose +export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN} compose +export COMPOSE_FILE=./docker-compose.yaml +export CONTAINER_DIR=./docker + +export ENVIRO_FILE=./.env ifeq (${CONTAINER_BIN},podman) -export CONTAINER_COMPOSE=${CONTAINER_BIN}-compose +export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN}-compose endif -export DEFAULT_IMAGE_REGISTRY=docker.io/library/ - -export CONTAINER_FILE=./Dockerfile - -GIT_BRANCH=$(shell git rev-parse --abbrev-ref HEAD) - -CONTAINER_DIR=./docker -K8S_DIR=./kubernetes - -# Generally this is empty unless in specific environments -ENVIRO_FILE=./.env - -# ./.env file content would be something like: -# # DO NOT PUT ANY SENSITIVE CONFIGURATIONS HERE -# MAVEN_SETTINGS_FILE= -# MAVEN_HTTPS_PROXY= -# HTTPS_PROXY= -# HTTP_PROXY= -# NO_PROXY= -# HEALTHCHECK_PORT=60000 - -VOLUME_MAVEN_SETTINGS_PATH="" - # To set default settings.xml and essentially empty for mvn, unless in vmmoc $(shell echo "" > ${CONTAINER_DIR}/yamcs/settings.xml) export MAVEN_HTTPS_PROXY=-s./settings.xml @@ -62,46 +40,40 @@ env_create: ## create ./docker/.env file env_export: env_create ## export ./docker/.env file variables to shell set -o allexport && source ${CONTAINER_DIR}/.env && set +o allexport -env_unset: ## create ./docker/.env file - unset $(sed '/^#/d' ${CONTAINER_DIR}/.env | cut -d= -f1) - down: ## Bring down nos3 - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} down --remove-orphans || true - -down-new: ## Bring down nos3 - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} -f docker-compose_new.yaml down --remove-orphans || true + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} down --remove-orphans || true -build-fortytwo: | env_export set-permissions ## build-fortytwo +build-fortytwo: | env_export set-permissions ## Build fortytwo (42) cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE} build --pull nos3-fortytwo + ${CONTAINER_COMPOSE_BIN} build --pull nos3-fortytwo -build-yamcs: | env_export set-permissions ## build-yamcs +build-yamcs: | env_export set-permissions ## Build yamcs cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE} build --pull nos3-gsw + ${CONTAINER_COMPOSE_BIN} build --pull nos3-gsw -build-openmct: | env_export set-permissions ## build-openmct +build-openmct: | env_export set-permissions ## Build openmct cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE} build --pull nos3-openmct + ${CONTAINER_COMPOSE_BIN} build --pull nos3-openmct -build: | set-permissions## build essentials +build: | set-permissions## Build all containers cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE} build --pull nos3-fortytwo nos3-gsw nos3-openmct + ${CONTAINER_COMPOSE_BIN} build --pull nos3-fortytwo nos3-gsw nos3-openmct set-permissions: ## set filesystem permissions, needed for restricted accounts find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable find . -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable find . -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable find . -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable - find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable + find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable -up: | build ## Bring up nos3 in detached state (attached state doesn't work for some reason) - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} \ +up: | build ## Bring up nos3 in detached state + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} \ --env-file ./.env \ - -f ./docker-compose.yaml up -d --remove-orphans + -f ./docker-compose.yaml up -d --remove-orphans -up-minimum: | build ## Bring up nos3 in detached state (attached state doesn't work for some reason) +up-minimum: | down build ## Bring up nos3 in detached state export MINIMAL_PATH=nos3; \ - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} \ + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} \ --env-file ./.env \ -f ./docker-compose.yaml up -d \ nos3-fortytwo \ @@ -112,35 +84,23 @@ up-minimum: | build ## Bring up nos3 in detached state (attached state doesn't w nos3-radio-sim-cryptolib \ nos3-truth42sim \ nos3-gsw \ - --remove-orphans - -doitminimally: ## do it minimally - $(MAKE) down down-new; sleep 5; \ - $(MAKE) up-minimum; sleep 15; \ - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true && \ - $(MAKE) --silent sidecar + nos3-openmct \ + --remove-orphans up-new: | build ## Bring up nos3 in detached state (attached state doesn't work for some reason) - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} \ + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} \ --env-file ./.env \ -f ./docker-compose_new.yaml up -d --remove-orphans -doitall-new: ## do it all - $(MAKE) down-new down; sleep 5; $(MAKE) up-new; sleep 15; ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true && \ - $(MAKE) --silent sidecar - -logs-%: ## logs-gps, logs-imu as examples - ${CONTAINER_BIN} exec -it sc01-hw-components bash -c "tail -f /home/nos3/$*.log" - -logs-all: - ${CONTAINER_BIN} exec -it sc01-hw-components bash -c "tail -f /home/nos3/hw-components.log" +down-new: ## Bring down nos3 + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} -f docker-compose_new.yaml down --remove-orphans || true sidecar: ## sidecar cd ${CONTAINER_DIR}/ && ./sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" -doitall: ## do it all - $(MAKE) down down-new; sleep 5; $(MAKE) up; sleep 15; ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true && \ - $(MAKE) --silent sidecar +doitall: ## Do it all for nos3 + @$(MAKE) down down-new; sleep 5; $(MAKE) up; sleep 15; ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true && \ + $(MAKE) --silent sidecar clean: | down down-new ## clean images, cache, volumes, and networks yes | ${CONTAINER_BIN} image prune --filter "dangling=true" @@ -148,11 +108,15 @@ clean: | down down-new ## clean images, cache, volumes, and networks yes | ${CONTAINER_BIN} volume prune yes | ${CONTAINER_BIN} network prune -up-attached: down - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE} --env-file ./.env --remove-orphans +setup-maven: ## setup maven settings.xml with proxy info + echo "" > ${CONTAINER_DIR}/yamcs/settings.xml -up-kubernetes: - cd ${K8S_DIR} && ./kubernetes.sh +info-services: ## Information on accessing various services + @echo; echo "accessing various services:"; echo + @echo "open http://localhost:8090 to access yamcs/gsw" + @echo "open http://localhost:30090 to access fortytwo (42)" + @echo "open http://localhost:9000 to access openmct" + @echo #--- RESET = \033[0m diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index cf11ce3ae..48f801f56 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -7,9 +7,9 @@ dotenv: - ./.env env: - CONTAINERFILE: ./Dockerfile CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " + COMPOSE_FILE: ./docker-compose.yaml CONTAINER_DIR: ./docker ENVIRO_FILE: ./.env @@ -40,18 +40,10 @@ tasks: - | cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} \ - -f ./docker-compose.yaml down --remove-orphans - - down-new: - desc: Bring down nos3 - cmds: - - | - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} \ - -f ./docker-compose_new.yaml down --remove-orphans + -f ./{{.COMPOSE_FILE}} down --remove-orphans || true build-fortytwo: - desc: Build yamcs + desc: Build fortytwo (42) deps: - env_create - set-permissions @@ -82,6 +74,9 @@ tasks: build: desc: Build all containers + deps: + - env_create + - set-permissions cmds: - | cd {{.CONTAINER_DIR}}/ && \ @@ -90,11 +85,11 @@ tasks: set-permissions: ## desc: set filesystem permissions, needed for restricted accounts cmds: - - find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable + - find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable - find . -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable - find . -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable - find . -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable - - find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable + - find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable up: desc: Bring up nos3 in detached state @@ -105,7 +100,32 @@ tasks: cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} \ --env-file ${ENVIRO_FILE} \ - -f ./docker-compose.yaml up -d --remove-orphans + -f ./{{.COMPOSE_FILE}} up -d --remove-orphans + - task info-services + + up-minimum: + desc: Bring up nos3 (minimum) in detached state + deps: + - down + - build + cmds: + - | + export MINIMAL_PATH="nos3" ; \ + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} \ + --env-file ${ENVIRO_FILE} \ + -f ./{{.COMPOSE_FILE}} up -d \ + nos3-fortytwo \ + nos3-nos-engine-server \ + nos3-fsw \ + nos3-gps-sim \ + nos3-time \ + nos3-radio-sim-cryptolib \ + nos3-truth42sim \ + nos3-gsw \ + nos3-openmct \ + --remove-orphans + - task info-services up-new: desc: Bring up nos3 in detached state @@ -116,7 +136,16 @@ tasks: cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} \ --env-file ${ENVIRO_FILE} \ - -f ./docker-compose_new.yaml up -d --remove-orphans + -f ./docker-compose_new.yaml up -d --remove-orphans + - task info-services + + down-new: + desc: Bring down nos3 + cmds: + - | + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} \ + -f ./docker-compose_new.yaml down --remove-orphans sidecar: desc: Run sidecar to enable output @@ -127,18 +156,12 @@ tasks: doitall: desc: Do it all for nos3 cmds: - - task down ; sleep 5 + - task down down-new ; sleep 5 - task up ; sleep 15 - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true - task sidecar - - doitall-new: - desc: Do it all for nos3 - cmds: - - task down-new ; sleep 5 - - task up-new ; sleep 15 - - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true - - task sidecar + - task info-services + silent: true clean: desc: clean images, cache, volumes, and networks @@ -152,6 +175,16 @@ tasks: - yes | ${CONTAINER_BIN} network prune setup-maven: - desc: Setup maven repository + desc: Setup maven settings.xml with proxy info-services cmds: - echo "" > ${CONTAINER_DIR}/yamcs/settings.xml + + info-services: + desc: info-servicesrmation on accessing various services + cmds: + - echo; echo "accessing various services:"; echo + - echo "open http://localhost:8090 to access yamcs/gsw" + - echo "open http://localhost:30090 to access fortytwo (42)" + - echo "open http://localhost:9000 to access openmct" + - echo + silent: true From 09cdd5dc6af7bd3984fb6a49a3734cec255f9143 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 22 Oct 2025 14:05:24 -0400 Subject: [PATCH 005/111] using COMPOSE_FILE in Makefile now --- deployments/Makefile | 6 +++--- deployments/Taskfile.yml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index dcc075c2d..ff871a8c7 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -6,7 +6,7 @@ SHELL=bash # Containerization Parameters export CONTAINER_BIN=docker export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN} compose -export COMPOSE_FILE=./docker-compose.yaml +export COMPOSE_FILE=./compose.yaml export CONTAINER_DIR=./docker export ENVIRO_FILE=./.env @@ -69,13 +69,13 @@ set-permissions: ## set filesystem permissions, needed for restricted accounts up: | build ## Bring up nos3 in detached state cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} \ --env-file ./.env \ - -f ./docker-compose.yaml up -d --remove-orphans + -f ${COMPOSE_FILE} up -d --remove-orphans up-minimum: | down build ## Bring up nos3 in detached state export MINIMAL_PATH=nos3; \ cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} \ --env-file ./.env \ - -f ./docker-compose.yaml up -d \ + -f ${COMPOSE_FILE} up -d \ nos3-fortytwo \ nos3-nos-engine-server \ nos3-fsw \ diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 48f801f56..f1035e7bb 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -9,7 +9,7 @@ dotenv: env: CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " - COMPOSE_FILE: ./docker-compose.yaml + COMPOSE_FILE: ./compose.yaml CONTAINER_DIR: ./docker ENVIRO_FILE: ./.env @@ -102,7 +102,7 @@ tasks: --env-file ${ENVIRO_FILE} \ -f ./{{.COMPOSE_FILE}} up -d --remove-orphans - task info-services - + up-minimum: desc: Bring up nos3 (minimum) in detached state deps: From 61d6894140a5e5309dabe4bdb460179f9954fc0f Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 22 Oct 2025 15:05:50 -0400 Subject: [PATCH 006/111] updates --- deployments/docker/{docker-compose.yaml => compose.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename deployments/docker/{docker-compose.yaml => compose.yaml} (100%) diff --git a/deployments/docker/docker-compose.yaml b/deployments/docker/compose.yaml similarity index 100% rename from deployments/docker/docker-compose.yaml rename to deployments/docker/compose.yaml From 368763c45cae66c8360efe1c671a43f5a330a13a Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 23 Oct 2025 13:52:01 -0400 Subject: [PATCH 007/111] improvements with parameters --- deployments/Makefile | 11 +++- deployments/Taskfile.yml | 78 +++++++++++++++--------- deployments/docker/compose.yaml | 14 +++-- deployments/docker/env.sh | 7 +++ deployments/docker/openmct/Containerfile | 14 +++-- 5 files changed, 83 insertions(+), 41 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index ff871a8c7..dd2071297 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -9,7 +9,8 @@ export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN} compose export COMPOSE_FILE=./compose.yaml export CONTAINER_DIR=./docker -export ENVIRO_FILE=./.env +export ENVIRO_SCRIPT="./env.sh" +export ENVIRO_FILE="${CONTAINER_DIR}/.env" ifeq (${CONTAINER_BIN},podman) export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN}-compose @@ -111,6 +112,14 @@ clean: | down down-new ## clean images, cache, volumes, and networks setup-maven: ## setup maven settings.xml with proxy info echo "" > ${CONTAINER_DIR}/yamcs/settings.xml +purge-containers: ## WARNING: purge docker/podman images, cache, volumes, and networks + @$(MAKE) all-down || true + @yes | ${CONTAINER_BIN} image prune --filter "dangling=true" || true + @yes | ${CONTAINER_BIN} system prune -a || true + @yes | ${CONTAINER_BIN} volume prune || true + @yes | ${CONTAINER_BIN} network prune || true + @echo + info-services: ## Information on accessing various services @echo; echo "accessing various services:"; echo @echo "open http://localhost:8090 to access yamcs/gsw" diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index f1035e7bb..6a954ac8a 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -1,8 +1,5 @@ version: "3" -vars: - IMAGE_TAG: foobar - dotenv: - ./.env @@ -12,12 +9,13 @@ env: COMPOSE_FILE: ./compose.yaml CONTAINER_DIR: ./docker - ENVIRO_FILE: ./.env - DEPLOYMENT_ENVIRO: '{{.DEPLOYMENT_ENVIRO | default ""}}' HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' + ENVIRO_SCRIPT: "{{.CONTAINER_DIR}}/env.sh" + ENVIRO_FILE: "./.env" + MAVEN_HTTPS_PROXY: '-s./settings.xml' MINIMAL_PATH: ".." @@ -28,57 +26,47 @@ tasks: - task --list-all silent: true - env_create: - desc: Create .env file for docker compose - cmds: - - | - ${CONTAINER_DIR}/env.sh > ${CONTAINER_DIR}/.env - - down: - desc: Bring down nos3 - cmds: - - | - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} \ - -f ./{{.COMPOSE_FILE}} down --remove-orphans || true - build-fortytwo: desc: Build fortytwo (42) deps: - - env_create + - env-create - set-permissions cmds: - - | + - | + source {{.ENVIRO_FILE}} && \ cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-fortytwo build-yamcs: desc: Build yamcs deps: - - env_create + - env-create - set-permissions cmds: - | - cd {{.CONTAINER_DIR}}/ && \ + source {{.ENVIRO_FILE}} && \ + cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-gsw build-openmct: desc: Build openmct deps: - - env_create + - env-create - set-permissions cmds: - | + source {{.ENVIRO_FILE}} && \ cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-openmct build: desc: Build all containers deps: - - env_create + - env-create - set-permissions cmds: - | + source {{.ENVIRO_FILE}} && \ cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-fortytwo nos3-gsw nos3-openmct @@ -94,27 +82,39 @@ tasks: up: desc: Bring up nos3 in detached state deps: + - env-create - build cmds: - | + source {{.ENVIRO_FILE}} && \ cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} \ --env-file ${ENVIRO_FILE} \ - -f ./{{.COMPOSE_FILE}} up -d --remove-orphans + -f {{.COMPOSE_FILE}} up -d --remove-orphans - task info-services + down: + desc: Bring down nos3 + cmds: + - | + cd {{.CONTAINER_DIR}}/ && \ + {{.CONTAINER_COMPOSE_BIN}} \ + -f {{.COMPOSE_FILE}} down --remove-orphans || true + up-minimum: desc: Bring up nos3 (minimum) in detached state deps: - down + - env-create - build cmds: - | + source {{.ENVIRO_FILE}} && \ export MINIMAL_PATH="nos3" ; \ cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} \ --env-file ${ENVIRO_FILE} \ - -f ./{{.COMPOSE_FILE}} up -d \ + -f {{.COMPOSE_FILE}} up -d \ nos3-fortytwo \ nos3-nos-engine-server \ nos3-fsw \ @@ -133,6 +133,7 @@ tasks: - build cmds: - | + source ./.env && \ cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} \ --env-file ${ENVIRO_FILE} \ @@ -157,7 +158,8 @@ tasks: desc: Do it all for nos3 cmds: - task down down-new ; sleep 5 - - task up ; sleep 15 + - task up + - sleep 15 - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true - task sidecar - task info-services @@ -179,12 +181,28 @@ tasks: cmds: - echo "" > ${CONTAINER_DIR}/yamcs/settings.xml + purge-containers: + desc: "WARNING: purge docker/podman images, cache, volumes, and networks" + cmds: + - task all-down || true + - yes | ${CONTAINER_BIN} image prune --filter "dangling=true" || true + - yes | ${CONTAINER_BIN} system prune -a || true + - yes | ${CONTAINER_BIN} volume prune || true + - yes | ${CONTAINER_BIN} network prune || true + - echo + info-services: - desc: info-servicesrmation on accessing various services + desc: info on accessing various services cmds: - echo; echo "accessing various services:"; echo - echo "open http://localhost:8090 to access yamcs/gsw" - - echo "open http://localhost:30090 to access fortytwo (42)" + - echo "open http://localhost:30090/vnc.html to access fortytwo (42)" - echo "open http://localhost:9000 to access openmct" - echo silent: true + + env-create: + desc: Create .env + cmds: + - | + ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} diff --git a/deployments/docker/compose.yaml b/deployments/docker/compose.yaml index 518c8c5ef..a1a8c7dbb 100644 --- a/deployments/docker/compose.yaml +++ b/deployments/docker/compose.yaml @@ -750,7 +750,8 @@ services: nos3-core-00: nos3-openmct: - image: ghcr.io/haisamido/nos3-openmct:dev + env_file: + - .env build: context: ./openmct dockerfile: Containerfile @@ -759,9 +760,14 @@ services: HTTPS_PROXY: ${HTTPS_PROXY} HTTP_PROXY: ${HTTP_PROXY} NO_PROXY: ${NO_PROXY} - MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} - GIT_URL: https://github.com/akhenry/openmct-yamcs.git - GIT_COMMIT: master + + IMAGE_URI: ${OPENMCT_IMAGE_URI} + NVM_VERSION: ${OPENMCT_NVM_VERSION} + NODE_VERSION: ${OPENMCT_NODE_VERSION} + + GIT_URL: ${OPENMCT_GIT_URL} + GIT_COMMIT: ${OPENMCT_GIT_COMMIT} + attach: true container_name: sc01-openmct hostname: sc01-openmct diff --git a/deployments/docker/env.sh b/deployments/docker/env.sh index 36aa50fcc..6b43e434b 100755 --- a/deployments/docker/env.sh +++ b/deployments/docker/env.sh @@ -41,6 +41,13 @@ YAMCS_DATA_DIR=/home/nos3/.nos3/yamcs/target/yamcs/yamcs-data YAMCS_GIT_URL=https://github.com/nasa-itc/nos3_yamcs_master.git YAMCS_GIT_COMMIT=nos3-dev +# openmct specific configurations +OPENMCT_IMAGE_URI=docker.io/library/ubuntu:25.04 +OPENMCT_GIT_URL=https://github.com/akhenry/openmct-yamcs.git +OPENMCT_GIT_COMMIT=master +OPENMCT_NVM_VERSION=v0.40.1 +OPENMCT_NODE_VERSION=v21.7.3 + # nos3 specific configurations NOS3_DIR=/home/nos3/.nos3 NOS3_USER=nos3 diff --git a/deployments/docker/openmct/Containerfile b/deployments/docker/openmct/Containerfile index 4f50f267a..a2fe91136 100644 --- a/deployments/docker/openmct/Containerfile +++ b/deployments/docker/openmct/Containerfile @@ -1,13 +1,13 @@ -FROM ubuntu:25.04 +ARG IMAGE_URI=docker.io/library/ubuntu:25.04 + +FROM ${IMAGE_URI} #--- PROXY CONFIG (if needed) -ARG MAVEN_HTTPS_PROXY ARG HTTPS_PROXY ARG HTTP_PROXY ARG NO_PROXY ARG DEPLOYMENT_ENVIRO -ENV MAVEN_HTTPS_PROXY=${MAVEN_HTTPS_PROXY} ENV HTTPS_PROXY=${HTTPS_PROXY} ENV HTTP_PROXY=${HTTP_PROXY} ENV NO_PROXY=${NO_PROXY} @@ -24,12 +24,15 @@ RUN apt-get update && \ WORKDIR /opt # Install nvm and node -ENV NVM_VERSION=v0.40.1 +ARG NVM_VERSION +ARG NODE_VERSION + +ENV NVM_VERSION=${NVM_VERSION} ENV NVM_URL=https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh ENV NVM_DIR=/opt/nvm RUN mkdir -p $NVM_DIR -ENV NODE_VERSION=v21.7.3 +ENV NODE_VERSION=${NODE_VERSION} ENV NODE_PATH=$NVM_DIR/versions/node/${NODE_VERSION}/bin ENV PATH=${NVM_DIR}:${NODE_PATH}:${PATH} @@ -60,4 +63,3 @@ RUN apt-get update && \ sudo iputils-ping vim netcat-traditional tmux tree && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* - From d862b0ff043267d8e4c798075891883c2f543589 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Mon, 27 Oct 2025 12:36:31 -0400 Subject: [PATCH 008/111] updates and refinements but now borken --- deployments/Makefile | 41 ++++++++++++++++++++-------------------- deployments/Taskfile.yml | 7 ++++++- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index dd2071297..584f506e3 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -35,30 +35,25 @@ endif endif #--- -env_create: ## create ./docker/.env file - ${CONTAINER_DIR}/env.sh > ${CONTAINER_DIR}/.env - -env_export: env_create ## export ./docker/.env file variables to shell - set -o allexport && source ${CONTAINER_DIR}/.env && set +o allexport - -down: ## Bring down nos3 - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} down --remove-orphans || true - build-fortytwo: | env_export set-permissions ## Build fortytwo (42) - cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE_BIN} build --pull nos3-fortytwo + source ${ENVIRO_FILE} && \ + cd ${CONTAINER_DIR}/ ; \ + ${CONTAINER_COMPOSE_BIN} build --pull nos3-fortytwo -build-yamcs: | env_export set-permissions ## Build yamcs +build-yamcs: | env-export set-permissions ## Build yamcs + source ${ENVIRO_FILE} && \ cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE_BIN} build --pull nos3-gsw + ${CONTAINER_COMPOSE_BIN} build --pull nos3-gsw -build-openmct: | env_export set-permissions ## Build openmct - cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE_BIN} build --pull nos3-openmct +build-openmct: | env-export set-permissions ## Build openmct + source ${ENVIRO_FILE} && \ + cd ${CONTAINER_DIR}/ ; \ + ${CONTAINER_COMPOSE_BIN} build --pull nos3-openmct -build: | set-permissions## Build all containers - cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE_BIN} build --pull nos3-fortytwo nos3-gsw nos3-openmct +build: | env-export set-permissions ## Build all containers + source ${ENVIRO_FILE} && \ + cd ${CONTAINER_DIR}/ ; \ + ${CONTAINER_COMPOSE_BIN} build --pull nos3-fortytwo nos3-gsw nos3-openmct set-permissions: ## set filesystem permissions, needed for restricted accounts find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable @@ -67,11 +62,14 @@ set-permissions: ## set filesystem permissions, needed for restricted accounts find . -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable -up: | build ## Bring up nos3 in detached state +up: | env-create build ## Bring up nos3 in detached state cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} \ --env-file ./.env \ -f ${COMPOSE_FILE} up -d --remove-orphans +down: ## Bring down nos3 + cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} down --remove-orphans || true + up-minimum: | down build ## Bring up nos3 in detached state export MINIMAL_PATH=nos3; \ cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} \ @@ -127,6 +125,9 @@ info-services: ## Information on accessing various services @echo "open http://localhost:9000 to access openmct" @echo +env-create: ## create ./docker/.env file + ${CONTAINER_DIR}/env.sh > ${CONTAINER_DIR}/.env + #--- RESET = \033[0m PURPLE = \033[0;35m diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 6a954ac8a..3fb59b8fa 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -48,6 +48,11 @@ tasks: cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-gsw + # pull-openmct: + # desc: Pull image to build openmct + # cmds: + # - {{.CONTAINER_BIN}} pull openmct/openmct:latest + build-openmct: desc: Build openmct deps: @@ -70,7 +75,7 @@ tasks: cd {{.CONTAINER_DIR}}/ && \ {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-fortytwo nos3-gsw nos3-openmct - set-permissions: ## + set-permissions: desc: set filesystem permissions, needed for restricted accounts cmds: - find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable From fdcabaddb2c41c82d6f70eae67bbd4659a57e6a5 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 12:08:31 -0400 Subject: [PATCH 009/111] reworked paths for services etc --- deployments/Makefile | 57 ++++++-------- deployments/Taskfile.yml | 69 +++++----------- deployments/docker/compose.yaml | 78 +++++++++---------- deployments/{docker => }/env.sh | 3 + .../{docker => scripts}/sidecar/commanding.py | 0 .../{docker => scripts}/sidecar/entrypoint.sh | 0 .../{docker => scripts}/sidecar/sidecar.sh | 0 .../{docker => services}/42/Dockerfile | 0 .../{docker => services}/42/entrypoint.sh | 0 .../{docker => services}/42/ivvtc/Dockerfile | 0 .../42/ivvtc/entrypoint.sh | 0 .../42/kubernetes/deployment.yaml | 0 .../42/kubernetes/ingress.yaml | 0 .../42/kubernetes/kubernetes.sh | 0 .../42/kubernetes/kustomization.yaml | 0 .../42/kubernetes/pv.yaml | 0 .../42/kubernetes/service.yaml | 0 deployments/{docker => services}/42/nos3.yaml | 0 .../{docker => services}/42/startapp.sh | 0 .../{docker => services}/fsw/Dockerfile | 0 .../{docker => services}/fsw/entrypoint.sh | 0 .../{docker => services}/fsw/libuart.c | 0 .../openmct/Containerfile | 0 .../openmct/entrypoint.sh | 0 .../openmct/example/index.js | 0 .../openmct/example/make-example-events.mjs | 0 .../openmct/webpack.dev.mjs | 0 .../radio-sim/entrypoint.sh | 0 .../radio-sim/entrypoint2.sh | 0 .../{docker => services}/yamcs/Dockerfile | 0 .../{docker => services}/yamcs/display.par | 0 .../{docker => services}/yamcs/entrypoint.sh | 0 32 files changed, 85 insertions(+), 122 deletions(-) rename deployments/{docker => }/env.sh (98%) rename deployments/{docker => scripts}/sidecar/commanding.py (100%) rename deployments/{docker => scripts}/sidecar/entrypoint.sh (100%) rename deployments/{docker => scripts}/sidecar/sidecar.sh (100%) rename deployments/{docker => services}/42/Dockerfile (100%) rename deployments/{docker => services}/42/entrypoint.sh (100%) rename deployments/{docker => services}/42/ivvtc/Dockerfile (100%) rename deployments/{docker => services}/42/ivvtc/entrypoint.sh (100%) rename deployments/{docker => services}/42/kubernetes/deployment.yaml (100%) rename deployments/{docker => services}/42/kubernetes/ingress.yaml (100%) rename deployments/{docker => services}/42/kubernetes/kubernetes.sh (100%) rename deployments/{docker => services}/42/kubernetes/kustomization.yaml (100%) rename deployments/{docker => services}/42/kubernetes/pv.yaml (100%) rename deployments/{docker => services}/42/kubernetes/service.yaml (100%) rename deployments/{docker => services}/42/nos3.yaml (100%) rename deployments/{docker => services}/42/startapp.sh (100%) rename deployments/{docker => services}/fsw/Dockerfile (100%) rename deployments/{docker => services}/fsw/entrypoint.sh (100%) rename deployments/{docker => services}/fsw/libuart.c (100%) rename deployments/{docker => services}/openmct/Containerfile (100%) rename deployments/{docker => services}/openmct/entrypoint.sh (100%) rename deployments/{docker => services}/openmct/example/index.js (100%) rename deployments/{docker => services}/openmct/example/make-example-events.mjs (100%) rename deployments/{docker => services}/openmct/webpack.dev.mjs (100%) rename deployments/{docker => services}/radio-sim/entrypoint.sh (100%) rename deployments/{docker => services}/radio-sim/entrypoint2.sh (100%) rename deployments/{docker => services}/yamcs/Dockerfile (100%) rename deployments/{docker => services}/yamcs/display.par (100%) rename deployments/{docker => services}/yamcs/entrypoint.sh (100%) diff --git a/deployments/Makefile b/deployments/Makefile index 584f506e3..dd2580393 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -6,8 +6,8 @@ SHELL=bash # Containerization Parameters export CONTAINER_BIN=docker export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN} compose -export COMPOSE_FILE=./compose.yaml export CONTAINER_DIR=./docker +export COMPOSE_FILE=${CONTAINER_DIR}/compose.yaml export ENVIRO_SCRIPT="./env.sh" export ENVIRO_FILE="${CONTAINER_DIR}/.env" @@ -35,25 +35,21 @@ endif endif #--- -build-fortytwo: | env_export set-permissions ## Build fortytwo (42) +build-fortytwo: | env-create set-permissions ## Build fortytwo (42) source ${ENVIRO_FILE} && \ - cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE_BIN} build --pull nos3-fortytwo + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo -build-yamcs: | env-export set-permissions ## Build yamcs +build-yamcs: | env-create set-permissions ## Build yamcs source ${ENVIRO_FILE} && \ - cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE_BIN} build --pull nos3-gsw + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-gsw -build-openmct: | env-export set-permissions ## Build openmct +build-openmct: | env-create set-permissions ## Build openmct source ${ENVIRO_FILE} && \ - cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE_BIN} build --pull nos3-openmct + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-openmct -build: | env-export set-permissions ## Build all containers +build: | env-create set-permissions ## Build all containers source ${ENVIRO_FILE} && \ - cd ${CONTAINER_DIR}/ ; \ - ${CONTAINER_COMPOSE_BIN} build --pull nos3-fortytwo nos3-gsw nos3-openmct + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct set-permissions: ## set filesystem permissions, needed for restricted accounts find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable @@ -63,17 +59,15 @@ set-permissions: ## set filesystem permissions, needed for restricted accounts find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable up: | env-create build ## Bring up nos3 in detached state - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} \ - --env-file ./.env \ - -f ${COMPOSE_FILE} up -d --remove-orphans + ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --remove-orphans down: ## Bring down nos3 - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} down --remove-orphans || true + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} down --remove-orphans || true up-minimum: | down build ## Bring up nos3 in detached state export MINIMAL_PATH=nos3; \ - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} \ - --env-file ./.env \ + ${CONTAINER_COMPOSE_BIN} \ + --env-file ${ENVIRO_FILE} \ -f ${COMPOSE_FILE} up -d \ nos3-fortytwo \ nos3-nos-engine-server \ @@ -86,20 +80,17 @@ up-minimum: | down build ## Bring up nos3 in detached state nos3-openmct \ --remove-orphans -up-new: | build ## Bring up nos3 in detached state (attached state doesn't work for some reason) - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} \ - --env-file ./.env \ - -f ./docker-compose_new.yaml up -d --remove-orphans - -down-new: ## Bring down nos3 - cd ${CONTAINER_DIR} && ${CONTAINER_COMPOSE_BIN} -f docker-compose_new.yaml down --remove-orphans || true - -sidecar: ## sidecar - cd ${CONTAINER_DIR}/ && ./sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" +sidecar: ## Run sidecar to enable output + ./scripts/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" doitall: ## Do it all for nos3 - @$(MAKE) down down-new; sleep 5; $(MAKE) up; sleep 15; ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true && \ - $(MAKE) --silent sidecar + @$(MAKE) down; \ + sleep 5; \ + $(MAKE) up; \ + sleep 15; \ + ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true && \ + $(MAKE) --silent sidecar + $(MAKE) info-services clean: | down down-new ## clean images, cache, volumes, and networks yes | ${CONTAINER_BIN} image prune --filter "dangling=true" @@ -107,7 +98,7 @@ clean: | down down-new ## clean images, cache, volumes, and networks yes | ${CONTAINER_BIN} volume prune yes | ${CONTAINER_BIN} network prune -setup-maven: ## setup maven settings.xml with proxy info +setup-maven: ## Setup maven settings.xml with proxy info-services echo "" > ${CONTAINER_DIR}/yamcs/settings.xml purge-containers: ## WARNING: purge docker/podman images, cache, volumes, and networks @@ -126,7 +117,7 @@ info-services: ## Information on accessing various services @echo env-create: ## create ./docker/.env file - ${CONTAINER_DIR}/env.sh > ${CONTAINER_DIR}/.env + ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} #--- RESET = \033[0m diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 3fb59b8fa..271aa444b 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -6,14 +6,14 @@ dotenv: env: CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " - COMPOSE_FILE: ./compose.yaml CONTAINER_DIR: ./docker + COMPOSE_FILE: "{{.CONTAINER_DIR}}/compose.yaml" DEPLOYMENT_ENVIRO: '{{.DEPLOYMENT_ENVIRO | default ""}}' HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' - ENVIRO_SCRIPT: "{{.CONTAINER_DIR}}/env.sh" + ENVIRO_SCRIPT: "./env.sh" ENVIRO_FILE: "./.env" MAVEN_HTTPS_PROXY: '-s./settings.xml' @@ -33,9 +33,8 @@ tasks: - set-permissions cmds: - | - source {{.ENVIRO_FILE}} && \ - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-fortytwo + source ${ENVIRO_FILE} && \ + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo build-yamcs: desc: Build yamcs @@ -44,9 +43,8 @@ tasks: - set-permissions cmds: - | - source {{.ENVIRO_FILE}} && \ - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-gsw + source ${ENVIRO_FILE} && \ + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-gsw # pull-openmct: # desc: Pull image to build openmct @@ -60,9 +58,8 @@ tasks: - set-permissions cmds: - | - source {{.ENVIRO_FILE}} && \ - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-openmct + source ${ENVIRO_FILE} && \ + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-openmct build: desc: Build all containers @@ -71,9 +68,8 @@ tasks: - set-permissions cmds: - | - source {{.ENVIRO_FILE}} && \ - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} build --pull nos3-fortytwo nos3-gsw nos3-openmct + source ${ENVIRO_FILE} && \ + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct set-permissions: desc: set filesystem permissions, needed for restricted accounts @@ -91,20 +87,15 @@ tasks: - build cmds: - | - source {{.ENVIRO_FILE}} && \ - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} \ - --env-file ${ENVIRO_FILE} \ - -f {{.COMPOSE_FILE}} up -d --remove-orphans + source ${ENVIRO_FILE} && \ + ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --remove-orphans - task info-services down: desc: Bring down nos3 cmds: - | - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} \ - -f {{.COMPOSE_FILE}} down --remove-orphans || true + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} down --remove-orphans || true up-minimum: desc: Bring up nos3 (minimum) in detached state @@ -114,12 +105,11 @@ tasks: - build cmds: - | - source {{.ENVIRO_FILE}} && \ + source ${ENVIRO_FILE} && \ export MINIMAL_PATH="nos3" ; \ - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} \ + ${CONTAINER_COMPOSE_BIN} \ --env-file ${ENVIRO_FILE} \ - -f {{.COMPOSE_FILE}} up -d \ + -f ${COMPOSE_FILE} up -d \ nos3-fortytwo \ nos3-nos-engine-server \ nos3-fsw \ @@ -132,37 +122,16 @@ tasks: --remove-orphans - task info-services - up-new: - desc: Bring up nos3 in detached state - deps: - - build - cmds: - - | - source ./.env && \ - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} \ - --env-file ${ENVIRO_FILE} \ - -f ./docker-compose_new.yaml up -d --remove-orphans - - task info-services - - down-new: - desc: Bring down nos3 - cmds: - - | - cd {{.CONTAINER_DIR}}/ && \ - {{.CONTAINER_COMPOSE_BIN}} \ - -f ./docker-compose_new.yaml down --remove-orphans - sidecar: desc: Run sidecar to enable output cmds: - - | - ${CONTAINER_DIR}/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" + - ./scripts/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" doitall: desc: Do it all for nos3 cmds: - - task down down-new ; sleep 5 + - task down + - sleep 5 - task up - sleep 15 - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true diff --git a/deployments/docker/compose.yaml b/deployments/docker/compose.yaml index a1a8c7dbb..58c0fe74d 100644 --- a/deployments/docker/compose.yaml +++ b/deployments/docker/compose.yaml @@ -6,7 +6,7 @@ services: env_file: - .env build: - context: ./42 + context: ../services/42 dockerfile: Dockerfile args: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} @@ -32,10 +32,10 @@ services: working_dir: "/opt/nasa-itc/" command: '/entrypoint.sh' volumes: - - ${PWD}/../../cfg/InOut/:/opt/nasa-itc/42/NOS3InOut/ - - ${PWD}/../${MINIMAL_PATH}/cfg/InOut/Inp_IPC.txt:/opt/nasa-itc/42/NOS3InOut/Inp_IPC.txt - - ${PWD}/42/entrypoint.sh:/entrypoint.sh - - ${PWD}/42/startapp.sh:/startapp.sh + - ${PWD}/../cfg/InOut/:/opt/nasa-itc/42/NOS3InOut/ + - ${PWD}/${MINIMAL_PATH}/cfg/InOut/Inp_IPC.txt:/opt/nasa-itc/42/NOS3InOut/Inp_IPC.txt + - ${PWD}/services/42/entrypoint.sh:/entrypoint.sh + - ${PWD}/services/42/startapp.sh:/startapp.sh ports: - "127.0.0.1:30090:80" environment: @@ -60,7 +60,7 @@ services: env_file: - .env build: - context: ./yamcs + context: ../services/yamcs dockerfile: Dockerfile args: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} @@ -86,8 +86,8 @@ services: working_dir: "/home/nos3/.nos3/yamcs" command: "/entrypoint.sh" volumes: - - ${PWD}/yamcs/entrypoint.sh:/entrypoint.sh - - ${PWD}/yamcs/settings.xml:/home/nos3/.nos3/yamcs/settings.xml + - ${PWD}/services/yamcs/entrypoint.sh:/entrypoint.sh + - ${PWD}/services/yamcs/settings.xml:/home/nos3/.nos3/yamcs/settings.xml ports: - "127.0.0.1:8090:8090" - "5012:5012" @@ -153,7 +153,7 @@ services: working_dir: /home/nos3/builds/nos3/fsw/build/exe/cpu1 command: "/home/nos3/builds/nos3/scripts/fsw/onair_launch.sh" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -185,7 +185,7 @@ services: hostname: nos-fsw working_dir: /home/nos3/builds/nos3/ volumes: - - ${PWD}/fsw/entrypoint.sh:/entrypoint.sh + - ${PWD}/services/fsw/entrypoint.sh:/entrypoint.sh command: "/entrypoint.sh" sysctls: fs.mqueue.msg_max: 10000 @@ -219,7 +219,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "/usr/bin/nos_engine_server_standalone -f ./nos_engine_server_config.json" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos_engine_server_config.json:/home/nos3/builds/nos3/sims/build/bin/nos_engine_server_config.json + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos_engine_server_config.json:/home/nos3/builds/nos3/sims/build/bin/nos_engine_server_config.json ports: - "127.0.0.1:12000:12000" - "127.0.0.1:12001:12001" @@ -249,7 +249,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml truth42sim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -269,7 +269,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml stdio-terminal" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -289,7 +289,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml udp-terminal" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -308,7 +308,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-sim-cmdbus-bridge -f ./nos3-simulator.xml" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -332,7 +332,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml camsim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -356,7 +356,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-css-sim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -381,7 +381,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-eps-sim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -404,7 +404,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-fss-sim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -427,7 +427,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml gps" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -450,7 +450,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-imu-sim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -473,7 +473,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-mag-sim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -496,7 +496,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim0" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -519,7 +519,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim1" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -542,7 +542,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim2" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -569,7 +569,7 @@ services: # working_dir: /home/nos3/builds/nos3/sims/build/bin # command: "/entrypoint.sh" # volumes: - # - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml # - ${PWD}/radio-sim/entrypoint.sh:/entrypoint.sh # environment: # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} @@ -599,7 +599,7 @@ services: # working_dir: /home/nos3/builds/nos3/gsw/build # command: "./support/standalone" # volumes: -# - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml +# - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml # environment: # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} # networks: @@ -628,8 +628,8 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "/entrypoint.sh" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - - ${PWD}/radio-sim/entrypoint2.sh:/entrypoint.sh + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/services/radio-sim/entrypoint2.sh:/entrypoint.sh environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -653,7 +653,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml sample-sim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -674,7 +674,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-star-tracker-sim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -695,7 +695,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-thruster-sim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -717,7 +717,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-torquer-sim" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -737,7 +737,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml time" volumes: - - ${PWD}/../${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -753,7 +753,7 @@ services: env_file: - .env build: - context: ./openmct + context: ../services/openmct dockerfile: Containerfile args: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} @@ -773,10 +773,10 @@ services: hostname: sc01-openmct working_dir: "/opt/openmct" volumes: - - "${PWD}/openmct/entrypoint.sh:/opt/openmct/entrypoint.sh" - - "${PWD}/openmct/webpack.dev.mjs:/opt/openmct/.webpack/webpack.dev.mjs" - - "${PWD}/openmct/example/index.js:/opt/openmct/example/index.js" - - "${PWD}/openmct/example/make-example-events.mjs:/opt/openmct/example/make-example-events.mjs" + - "${PWD}/services/openmct/entrypoint.sh:/opt/openmct/entrypoint.sh" + - "${PWD}/services/openmct/webpack.dev.mjs:/opt/openmct/.webpack/webpack.dev.mjs" + - "${PWD}/services/openmct/example/index.js:/opt/openmct/example/index.js" + - "${PWD}/services/openmct/example/make-example-events.mjs:/opt/openmct/example/make-example-events.mjs" command: '/opt/openmct/entrypoint.sh' healthcheck: test: ["CMD-SHELL", "curl http://localhost:9000/"] diff --git a/deployments/docker/env.sh b/deployments/env.sh similarity index 98% rename from deployments/docker/env.sh rename to deployments/env.sh index 6b43e434b..b9e9b6c53 100755 --- a/deployments/docker/env.sh +++ b/deployments/env.sh @@ -20,6 +20,9 @@ NO_PROXY=${NO_PROXY} MAVEN_REPO_LOCAL=/home/nos3/.nos3/.m2/repository MAVEN_HTTPS_PROXY="--settings ./settings.xml" +# +MINIMAL_PATH=.. + # 42 specific configurations FORTYTWO_DISPLAY=:1 FORTYTWO_GIT_URL=https://github.com/nasa-itc/42.git diff --git a/deployments/docker/sidecar/commanding.py b/deployments/scripts/sidecar/commanding.py similarity index 100% rename from deployments/docker/sidecar/commanding.py rename to deployments/scripts/sidecar/commanding.py diff --git a/deployments/docker/sidecar/entrypoint.sh b/deployments/scripts/sidecar/entrypoint.sh similarity index 100% rename from deployments/docker/sidecar/entrypoint.sh rename to deployments/scripts/sidecar/entrypoint.sh diff --git a/deployments/docker/sidecar/sidecar.sh b/deployments/scripts/sidecar/sidecar.sh similarity index 100% rename from deployments/docker/sidecar/sidecar.sh rename to deployments/scripts/sidecar/sidecar.sh diff --git a/deployments/docker/42/Dockerfile b/deployments/services/42/Dockerfile similarity index 100% rename from deployments/docker/42/Dockerfile rename to deployments/services/42/Dockerfile diff --git a/deployments/docker/42/entrypoint.sh b/deployments/services/42/entrypoint.sh similarity index 100% rename from deployments/docker/42/entrypoint.sh rename to deployments/services/42/entrypoint.sh diff --git a/deployments/docker/42/ivvtc/Dockerfile b/deployments/services/42/ivvtc/Dockerfile similarity index 100% rename from deployments/docker/42/ivvtc/Dockerfile rename to deployments/services/42/ivvtc/Dockerfile diff --git a/deployments/docker/42/ivvtc/entrypoint.sh b/deployments/services/42/ivvtc/entrypoint.sh similarity index 100% rename from deployments/docker/42/ivvtc/entrypoint.sh rename to deployments/services/42/ivvtc/entrypoint.sh diff --git a/deployments/docker/42/kubernetes/deployment.yaml b/deployments/services/42/kubernetes/deployment.yaml similarity index 100% rename from deployments/docker/42/kubernetes/deployment.yaml rename to deployments/services/42/kubernetes/deployment.yaml diff --git a/deployments/docker/42/kubernetes/ingress.yaml b/deployments/services/42/kubernetes/ingress.yaml similarity index 100% rename from deployments/docker/42/kubernetes/ingress.yaml rename to deployments/services/42/kubernetes/ingress.yaml diff --git a/deployments/docker/42/kubernetes/kubernetes.sh b/deployments/services/42/kubernetes/kubernetes.sh similarity index 100% rename from deployments/docker/42/kubernetes/kubernetes.sh rename to deployments/services/42/kubernetes/kubernetes.sh diff --git a/deployments/docker/42/kubernetes/kustomization.yaml b/deployments/services/42/kubernetes/kustomization.yaml similarity index 100% rename from deployments/docker/42/kubernetes/kustomization.yaml rename to deployments/services/42/kubernetes/kustomization.yaml diff --git a/deployments/docker/42/kubernetes/pv.yaml b/deployments/services/42/kubernetes/pv.yaml similarity index 100% rename from deployments/docker/42/kubernetes/pv.yaml rename to deployments/services/42/kubernetes/pv.yaml diff --git a/deployments/docker/42/kubernetes/service.yaml b/deployments/services/42/kubernetes/service.yaml similarity index 100% rename from deployments/docker/42/kubernetes/service.yaml rename to deployments/services/42/kubernetes/service.yaml diff --git a/deployments/docker/42/nos3.yaml b/deployments/services/42/nos3.yaml similarity index 100% rename from deployments/docker/42/nos3.yaml rename to deployments/services/42/nos3.yaml diff --git a/deployments/docker/42/startapp.sh b/deployments/services/42/startapp.sh similarity index 100% rename from deployments/docker/42/startapp.sh rename to deployments/services/42/startapp.sh diff --git a/deployments/docker/fsw/Dockerfile b/deployments/services/fsw/Dockerfile similarity index 100% rename from deployments/docker/fsw/Dockerfile rename to deployments/services/fsw/Dockerfile diff --git a/deployments/docker/fsw/entrypoint.sh b/deployments/services/fsw/entrypoint.sh similarity index 100% rename from deployments/docker/fsw/entrypoint.sh rename to deployments/services/fsw/entrypoint.sh diff --git a/deployments/docker/fsw/libuart.c b/deployments/services/fsw/libuart.c similarity index 100% rename from deployments/docker/fsw/libuart.c rename to deployments/services/fsw/libuart.c diff --git a/deployments/docker/openmct/Containerfile b/deployments/services/openmct/Containerfile similarity index 100% rename from deployments/docker/openmct/Containerfile rename to deployments/services/openmct/Containerfile diff --git a/deployments/docker/openmct/entrypoint.sh b/deployments/services/openmct/entrypoint.sh similarity index 100% rename from deployments/docker/openmct/entrypoint.sh rename to deployments/services/openmct/entrypoint.sh diff --git a/deployments/docker/openmct/example/index.js b/deployments/services/openmct/example/index.js similarity index 100% rename from deployments/docker/openmct/example/index.js rename to deployments/services/openmct/example/index.js diff --git a/deployments/docker/openmct/example/make-example-events.mjs b/deployments/services/openmct/example/make-example-events.mjs similarity index 100% rename from deployments/docker/openmct/example/make-example-events.mjs rename to deployments/services/openmct/example/make-example-events.mjs diff --git a/deployments/docker/openmct/webpack.dev.mjs b/deployments/services/openmct/webpack.dev.mjs similarity index 100% rename from deployments/docker/openmct/webpack.dev.mjs rename to deployments/services/openmct/webpack.dev.mjs diff --git a/deployments/docker/radio-sim/entrypoint.sh b/deployments/services/radio-sim/entrypoint.sh similarity index 100% rename from deployments/docker/radio-sim/entrypoint.sh rename to deployments/services/radio-sim/entrypoint.sh diff --git a/deployments/docker/radio-sim/entrypoint2.sh b/deployments/services/radio-sim/entrypoint2.sh similarity index 100% rename from deployments/docker/radio-sim/entrypoint2.sh rename to deployments/services/radio-sim/entrypoint2.sh diff --git a/deployments/docker/yamcs/Dockerfile b/deployments/services/yamcs/Dockerfile similarity index 100% rename from deployments/docker/yamcs/Dockerfile rename to deployments/services/yamcs/Dockerfile diff --git a/deployments/docker/yamcs/display.par b/deployments/services/yamcs/display.par similarity index 100% rename from deployments/docker/yamcs/display.par rename to deployments/services/yamcs/display.par diff --git a/deployments/docker/yamcs/entrypoint.sh b/deployments/services/yamcs/entrypoint.sh similarity index 100% rename from deployments/docker/yamcs/entrypoint.sh rename to deployments/services/yamcs/entrypoint.sh From 46a1b9904b64eb010b4c63627f7b533290516dd3 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 14:21:10 -0400 Subject: [PATCH 010/111] works again .... --- deployments/Makefile | 4 +-- deployments/Taskfile.yml | 2 +- deployments/docker/compose.yaml | 60 ++++++++++++++++----------------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index dd2580393..c6beb4b34 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -109,8 +109,8 @@ purge-containers: ## WARNING: purge docker/podman images, cache, volumes, and ne @yes | ${CONTAINER_BIN} network prune || true @echo -info-services: ## Information on accessing various services - @echo; echo "accessing various services:"; echo +info-services: ## info on accessing various services + @echo; echo "How to access various services:"; echo @echo "open http://localhost:8090 to access yamcs/gsw" @echo "open http://localhost:30090 to access fortytwo (42)" @echo "open http://localhost:9000 to access openmct" diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 271aa444b..3dec0a552 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -168,7 +168,7 @@ tasks: info-services: desc: info on accessing various services cmds: - - echo; echo "accessing various services:"; echo + - echo; echo "How to access various services:"; echo - echo "open http://localhost:8090 to access yamcs/gsw" - echo "open http://localhost:30090/vnc.html to access fortytwo (42)" - echo "open http://localhost:9000 to access openmct" diff --git a/deployments/docker/compose.yaml b/deployments/docker/compose.yaml index 58c0fe74d..8a06327de 100644 --- a/deployments/docker/compose.yaml +++ b/deployments/docker/compose.yaml @@ -114,36 +114,6 @@ services: - yamcs nos3-core-00: - nos3-sidecar: - image: ghcr.io/haisamido/nos3-base:dev - env_file: - - .env - attach: true - container_name: sc01-nos-sidecar - hostname: sc01-sidecar - working_dir: "/home/nos3/" - command: "/entrypoint.sh active-gs 8090" - volumes: - - ${PWD}/sidecar/entrypoint.sh:/entrypoint.sh - - ${PWD}/sidecar/commanding.py:/commanding.py - healthcheck: - test: ["CMD-SHELL", "curl http://active-gs:8090/api"] - interval: 10s - timeout: 5s - retries: 5 - depends_on: - nos3-gsw: - condition: service_healthy - nos3-truth42sim: - condition: service_started - nos3-radio-sim-cryptolib: - condition: service_started - # nos3-cryptolib: - # condition: service_started - networks: - nos3-sc01-00: - nos3-core-00: - nos3-onair: image: ghcr.io/haisamido/nos3-base:dev env_file: @@ -804,3 +774,33 @@ networks: nos3-sc01-00: external: ${EXTERNAL_NETWORK_SC01:-false} name: nos3-sc01 + + # nos3-sidecar: + # image: ghcr.io/haisamido/nos3-base:dev + # env_file: + # - .env + # attach: true + # container_name: sc01-nos-sidecar + # hostname: sc01-sidecar + # working_dir: "/home/nos3/" + # command: "/entrypoint.sh active-gs 8090" + # volumes: + # - ${PWD}/sidecar/entrypoint.sh:/entrypoint.sh + # - ${PWD}/sidecar/commanding.py:/commanding.py + # healthcheck: + # test: ["CMD-SHELL", "curl http://active-gs:8090/api"] + # interval: 10s + # timeout: 5s + # retries: 5 + # depends_on: + # nos3-gsw: + # condition: service_healthy + # nos3-truth42sim: + # condition: service_started + # nos3-radio-sim-cryptolib: + # condition: service_started + # # nos3-cryptolib: + # # condition: service_started + # networks: + # nos3-sc01-00: + # nos3-core-00: From 4c298aa7ea2d67b5a38a14237ca3c77f9c16ab03 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 14:23:25 -0400 Subject: [PATCH 011/111] removed commented out task --- deployments/Taskfile.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 3dec0a552..a2fee4a30 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -46,11 +46,6 @@ tasks: source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-gsw - # pull-openmct: - # desc: Pull image to build openmct - # cmds: - # - {{.CONTAINER_BIN}} pull openmct/openmct:latest - build-openmct: desc: Build openmct deps: From a5861c8be410309401f081d514a094a4251e2bc5 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 14:45:50 -0400 Subject: [PATCH 012/111] added SERVICES_DIR and changed MINIMAL_PATH to NOS3_CFG_PATH --- deployments/Makefile | 14 +++++---- deployments/Taskfile.yml | 11 +++++--- deployments/docker/compose.yaml | 50 ++++++++++++++++----------------- deployments/env.sh | 2 +- 4 files changed, 41 insertions(+), 36 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index c6beb4b34..0fb535730 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -9,8 +9,10 @@ export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN} compose export CONTAINER_DIR=./docker export COMPOSE_FILE=${CONTAINER_DIR}/compose.yaml +export SERVICES_DIR=./services + export ENVIRO_SCRIPT="./env.sh" -export ENVIRO_FILE="${CONTAINER_DIR}/.env" +export ENVIRO_FILE="./.env" ifeq (${CONTAINER_BIN},podman) export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN}-compose @@ -19,7 +21,7 @@ endif # To set default settings.xml and essentially empty for mvn, unless in vmmoc $(shell echo "" > ${CONTAINER_DIR}/yamcs/settings.xml) export MAVEN_HTTPS_PROXY=-s./settings.xml -export MINIMAL_PATH=.. +export NOS3_CFG_PATH=.. #--- ifndef DEPLOYMENT_ENVIRO @@ -39,7 +41,7 @@ build-fortytwo: | env-create set-permissions ## Build fortytwo (42) source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo -build-yamcs: | env-create set-permissions ## Build yamcs +build-yamcs: | env-create setup-maven set-permissions ## Build yamcs source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-gsw @@ -65,7 +67,7 @@ down: ## Bring down nos3 ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} down --remove-orphans || true up-minimum: | down build ## Bring up nos3 in detached state - export MINIMAL_PATH=nos3; \ + export NOS3_CFG_PATH=nos3; \ ${CONTAINER_COMPOSE_BIN} \ --env-file ${ENVIRO_FILE} \ -f ${COMPOSE_FILE} up -d \ @@ -99,7 +101,7 @@ clean: | down down-new ## clean images, cache, volumes, and networks yes | ${CONTAINER_BIN} network prune setup-maven: ## Setup maven settings.xml with proxy info-services - echo "" > ${CONTAINER_DIR}/yamcs/settings.xml + echo "" > ${SERVICES_DIR}/yamcs/settings.xml purge-containers: ## WARNING: purge docker/podman images, cache, volumes, and networks @$(MAKE) all-down || true @@ -116,7 +118,7 @@ info-services: ## info on accessing various services @echo "open http://localhost:9000 to access openmct" @echo -env-create: ## create ./docker/.env file +env-create: ## Create .env file from env.sh script ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} #--- diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index a2fee4a30..c1666384b 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -9,6 +9,8 @@ env: CONTAINER_DIR: ./docker COMPOSE_FILE: "{{.CONTAINER_DIR}}/compose.yaml" + SERVICES_DIR: ./services + DEPLOYMENT_ENVIRO: '{{.DEPLOYMENT_ENVIRO | default ""}}' HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' @@ -17,7 +19,7 @@ env: ENVIRO_FILE: "./.env" MAVEN_HTTPS_PROXY: '-s./settings.xml' - MINIMAL_PATH: ".." + NOS3_CFG_PATH: ".." tasks: default: @@ -40,6 +42,7 @@ tasks: desc: Build yamcs deps: - env-create + - setup-maven - set-permissions cmds: - | @@ -101,7 +104,7 @@ tasks: cmds: - | source ${ENVIRO_FILE} && \ - export MINIMAL_PATH="nos3" ; \ + export NOS3_CFG_PATH="nos3" ; \ ${CONTAINER_COMPOSE_BIN} \ --env-file ${ENVIRO_FILE} \ -f ${COMPOSE_FILE} up -d \ @@ -148,7 +151,7 @@ tasks: setup-maven: desc: Setup maven settings.xml with proxy info-services cmds: - - echo "" > ${CONTAINER_DIR}/yamcs/settings.xml + - echo "" > ${SERVICES_DIR}/yamcs/settings.xml purge-containers: desc: "WARNING: purge docker/podman images, cache, volumes, and networks" @@ -171,7 +174,7 @@ tasks: silent: true env-create: - desc: Create .env + desc: Create .env file from env.sh script cmds: - | ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} diff --git a/deployments/docker/compose.yaml b/deployments/docker/compose.yaml index 8a06327de..bc442dcc8 100644 --- a/deployments/docker/compose.yaml +++ b/deployments/docker/compose.yaml @@ -33,7 +33,7 @@ services: command: '/entrypoint.sh' volumes: - ${PWD}/../cfg/InOut/:/opt/nasa-itc/42/NOS3InOut/ - - ${PWD}/${MINIMAL_PATH}/cfg/InOut/Inp_IPC.txt:/opt/nasa-itc/42/NOS3InOut/Inp_IPC.txt + - ${PWD}/${NOS3_CFG_PATH}/cfg/InOut/Inp_IPC.txt:/opt/nasa-itc/42/NOS3InOut/Inp_IPC.txt - ${PWD}/services/42/entrypoint.sh:/entrypoint.sh - ${PWD}/services/42/startapp.sh:/startapp.sh ports: @@ -123,7 +123,7 @@ services: working_dir: /home/nos3/builds/nos3/fsw/build/exe/cpu1 command: "/home/nos3/builds/nos3/scripts/fsw/onair_launch.sh" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -189,7 +189,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "/usr/bin/nos_engine_server_standalone -f ./nos_engine_server_config.json" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos_engine_server_config.json:/home/nos3/builds/nos3/sims/build/bin/nos_engine_server_config.json + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos_engine_server_config.json:/home/nos3/builds/nos3/sims/build/bin/nos_engine_server_config.json ports: - "127.0.0.1:12000:12000" - "127.0.0.1:12001:12001" @@ -219,7 +219,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml truth42sim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -239,7 +239,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml stdio-terminal" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -259,7 +259,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml udp-terminal" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -278,7 +278,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-sim-cmdbus-bridge -f ./nos3-simulator.xml" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -302,7 +302,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml camsim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -326,7 +326,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-css-sim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -351,7 +351,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-eps-sim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -374,7 +374,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-fss-sim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -397,7 +397,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml gps" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -420,7 +420,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-imu-sim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -443,7 +443,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-mag-sim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -466,7 +466,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim0" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -489,7 +489,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim1" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -512,7 +512,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim2" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -539,7 +539,7 @@ services: # working_dir: /home/nos3/builds/nos3/sims/build/bin # command: "/entrypoint.sh" # volumes: - # - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml # - ${PWD}/radio-sim/entrypoint.sh:/entrypoint.sh # environment: # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} @@ -569,7 +569,7 @@ services: # working_dir: /home/nos3/builds/nos3/gsw/build # command: "./support/standalone" # volumes: -# - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml +# - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml # environment: # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} # networks: @@ -598,7 +598,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "/entrypoint.sh" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - ${PWD}/services/radio-sim/entrypoint2.sh:/entrypoint.sh environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} @@ -623,7 +623,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml sample-sim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -644,7 +644,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-star-tracker-sim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -665,7 +665,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-thruster-sim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -687,7 +687,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-torquer-sim" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -707,7 +707,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml time" volumes: - - ${PWD}/${MINIMAL_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true diff --git a/deployments/env.sh b/deployments/env.sh index b9e9b6c53..a892042ea 100755 --- a/deployments/env.sh +++ b/deployments/env.sh @@ -21,7 +21,7 @@ MAVEN_REPO_LOCAL=/home/nos3/.nos3/.m2/repository MAVEN_HTTPS_PROXY="--settings ./settings.xml" # -MINIMAL_PATH=.. +NOS3_CFG_PATH=.. # 42 specific configurations FORTYTWO_DISPLAY=:1 From 52b19fe17559908bab24e8c4fcabee916ff5cbb9 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 14:48:16 -0400 Subject: [PATCH 013/111] corrected all-down to down in purge-containers --- deployments/Makefile | 2 +- deployments/Taskfile.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 0fb535730..ed0b4927a 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -104,7 +104,7 @@ setup-maven: ## Setup maven settings.xml with proxy info-services echo "" > ${SERVICES_DIR}/yamcs/settings.xml purge-containers: ## WARNING: purge docker/podman images, cache, volumes, and networks - @$(MAKE) all-down || true + @$(MAKE) down || true @yes | ${CONTAINER_BIN} image prune --filter "dangling=true" || true @yes | ${CONTAINER_BIN} system prune -a || true @yes | ${CONTAINER_BIN} volume prune || true diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index c1666384b..507608ab7 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -156,7 +156,7 @@ tasks: purge-containers: desc: "WARNING: purge docker/podman images, cache, volumes, and networks" cmds: - - task all-down || true + - task down || true - yes | ${CONTAINER_BIN} image prune --filter "dangling=true" || true - yes | ${CONTAINER_BIN} system prune -a || true - yes | ${CONTAINER_BIN} volume prune || true From d7ec8b18d0f77405bd4dce256c7b87b752bc9490 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 18:55:23 +0000 Subject: [PATCH 014/111] added setup-maven for build task --- deployments/Makefile | 2 +- deployments/Taskfile.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/deployments/Makefile b/deployments/Makefile index ed0b4927a..15aa4ac08 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -49,7 +49,7 @@ build-openmct: | env-create set-permissions ## Build openmct source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-openmct -build: | env-create set-permissions ## Build all containers +build: | env-create setup-maven set-permissions ## Build all containers source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 507608ab7..1889bd72d 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -63,6 +63,7 @@ tasks: desc: Build all containers deps: - env-create + - setup-maven - set-permissions cmds: - | From 390c15c063607de1004e492e776362bb5ab0471a Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 19:47:50 +0000 Subject: [PATCH 015/111] got it to work in the vmmoc --- deployments/Makefile | 22 ++++++---------------- deployments/Taskfile.yml | 9 +++++++++ 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 15aa4ac08..d59cb8091 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -19,23 +19,9 @@ export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN}-compose endif # To set default settings.xml and essentially empty for mvn, unless in vmmoc -$(shell echo "" > ${CONTAINER_DIR}/yamcs/settings.xml) export MAVEN_HTTPS_PROXY=-s./settings.xml -export NOS3_CFG_PATH=.. -#--- -ifndef DEPLOYMENT_ENVIRO -$(warning DEPLOYMENT_ENVIRO is not set. Therefore, assuming not in vmmoc, and proceeding without vmmoc specific definitions) -else -ifeq (${DEPLOYMENT_ENVIRO},vmmoc) -$(info DEPLOYMENT_ENVIRO is set to vmmoc. Proceeding with vmmoc specific configurations) -export ENVIRO_FILE=/opt/neo/etc/environment -$(shell cp -f ${MAVEN_SETTINGS_FILE} ${CONTAINER_DIR}/yamcs/settings.xml) -else -$(error DEPLOYMENT_ENVIRO is set to ${DEPLOYMENT_ENVIRO}, which is not expected. Exiting!) -endif -endif -#--- +export NOS3_CFG_PATH=.. build-fortytwo: | env-create set-permissions ## Build fortytwo (42) source ${ENVIRO_FILE} && \ @@ -101,7 +87,11 @@ clean: | down down-new ## clean images, cache, volumes, and networks yes | ${CONTAINER_BIN} network prune setup-maven: ## Setup maven settings.xml with proxy info-services - echo "" > ${SERVICES_DIR}/yamcs/settings.xml + echo "" > $${SERVICES_DIR}/yamcs/settings.xml + if [ "$${DEPLOYMENT_ENVIRO}" == "vmmoc" ]; then \ + cp -f $${MAVEN_SETTINGS_FILE} $${HOME}/.nos3/yamcs/ || true \ + cp -f $${MAVEN_SETTINGS_FILE} $${SERVICES_DIR}/yamcs/ || true \ + fi purge-containers: ## WARNING: purge docker/podman images, cache, volumes, and networks @$(MAKE) down || true diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 1889bd72d..254000590 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -19,6 +19,8 @@ env: ENVIRO_FILE: "./.env" MAVEN_HTTPS_PROXY: '-s./settings.xml' + MAVEN_SETTINGS_FILE: '{{.MAVEN_SETTINGS_FILE | default ""}}' + NOS3_CFG_PATH: ".." tasks: @@ -55,6 +57,7 @@ tasks: - env-create - set-permissions cmds: + - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 - | source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-openmct @@ -66,6 +69,7 @@ tasks: - setup-maven - set-permissions cmds: + - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 - | source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct @@ -153,6 +157,11 @@ tasks: desc: Setup maven settings.xml with proxy info-services cmds: - echo "" > ${SERVICES_DIR}/yamcs/settings.xml + - | + if [ "${DEPLOYMENT_ENVIRO}" == "vmmoc" ]; then + cp ${MAVEN_SETTINGS_FILE} ${HOME}/.nos3/yamcs/ || true + cp ${MAVEN_SETTINGS_FILE} ${SERVICES_DIR}/yamcs/ || true + fi purge-containers: desc: "WARNING: purge docker/podman images, cache, volumes, and networks" From d2aa714e5829ef64e63a205f2190f90b5cf86493 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 16:29:57 -0400 Subject: [PATCH 016/111] moved ./docker to ./targets/docker and ./kubernetes to ./targets/kubernetes --- deployments/Makefile | 8 +++++--- deployments/Taskfile.yml | 8 +++++--- deployments/{ => targets}/docker/compose.yaml | 6 +++--- deployments/{ => targets}/docker/docker-compose_new.yaml | 0 deployments/{ => targets}/docker/docker-compose_orig.yaml | 0 .../{ => targets}/docker/entrypoint_nos_engine_server.sh | 0 .../{ => targets}/docker/hw-components/entrypoint.sh | 0 .../{ => targets}/kubernetes/fortytwo/configmap.yaml | 0 .../{ => targets}/kubernetes/fortytwo/deployment.yaml | 0 .../{ => targets}/kubernetes/fortytwo/kustomization.yaml | 0 .../{ => targets}/kubernetes/fortytwo/service.yaml | 0 deployments/{ => targets}/kubernetes/fsw/configmap.yaml | 0 deployments/{ => targets}/kubernetes/fsw/deployment.yaml | 0 .../{ => targets}/kubernetes/fsw/kustomization.yaml | 0 deployments/{ => targets}/kubernetes/fsw/service.yaml | 0 deployments/{ => targets}/kubernetes/gps/deployment.yaml | 0 .../{ => targets}/kubernetes/gps/kustomization.yaml | 0 deployments/{ => targets}/kubernetes/gps/service.yaml | 0 deployments/{ => targets}/kubernetes/kubernetes.sh | 0 deployments/{ => targets}/kubernetes/kustomization.yaml | 0 .../kubernetes/nos-engine-server/configmap.yaml | 0 .../kubernetes/nos-engine-server/deployment.yaml | 0 .../kubernetes/nos-engine-server/kustomization.yaml | 0 .../kubernetes/nos-engine-server/service.yaml | 0 deployments/{ => targets}/kubernetes/time/deployment.yaml | 0 .../{ => targets}/kubernetes/time/kustomization.yaml | 0 deployments/{ => targets}/kubernetes/time/service.yaml | 0 27 files changed, 13 insertions(+), 9 deletions(-) rename deployments/{ => targets}/docker/compose.yaml (99%) rename deployments/{ => targets}/docker/docker-compose_new.yaml (100%) rename deployments/{ => targets}/docker/docker-compose_orig.yaml (100%) rename deployments/{ => targets}/docker/entrypoint_nos_engine_server.sh (100%) rename deployments/{ => targets}/docker/hw-components/entrypoint.sh (100%) rename deployments/{ => targets}/kubernetes/fortytwo/configmap.yaml (100%) rename deployments/{ => targets}/kubernetes/fortytwo/deployment.yaml (100%) rename deployments/{ => targets}/kubernetes/fortytwo/kustomization.yaml (100%) rename deployments/{ => targets}/kubernetes/fortytwo/service.yaml (100%) rename deployments/{ => targets}/kubernetes/fsw/configmap.yaml (100%) rename deployments/{ => targets}/kubernetes/fsw/deployment.yaml (100%) rename deployments/{ => targets}/kubernetes/fsw/kustomization.yaml (100%) rename deployments/{ => targets}/kubernetes/fsw/service.yaml (100%) rename deployments/{ => targets}/kubernetes/gps/deployment.yaml (100%) rename deployments/{ => targets}/kubernetes/gps/kustomization.yaml (100%) rename deployments/{ => targets}/kubernetes/gps/service.yaml (100%) rename deployments/{ => targets}/kubernetes/kubernetes.sh (100%) rename deployments/{ => targets}/kubernetes/kustomization.yaml (100%) rename deployments/{ => targets}/kubernetes/nos-engine-server/configmap.yaml (100%) rename deployments/{ => targets}/kubernetes/nos-engine-server/deployment.yaml (100%) rename deployments/{ => targets}/kubernetes/nos-engine-server/kustomization.yaml (100%) rename deployments/{ => targets}/kubernetes/nos-engine-server/service.yaml (100%) rename deployments/{ => targets}/kubernetes/time/deployment.yaml (100%) rename deployments/{ => targets}/kubernetes/time/kustomization.yaml (100%) rename deployments/{ => targets}/kubernetes/time/service.yaml (100%) diff --git a/deployments/Makefile b/deployments/Makefile index d59cb8091..86cd68660 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -4,12 +4,14 @@ SHELL=bash # Containerization Parameters +export TARGETS_DIR=./targets +export SERVICES_DIR=./services + export CONTAINER_BIN=docker export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN} compose -export CONTAINER_DIR=./docker -export COMPOSE_FILE=${CONTAINER_DIR}/compose.yaml -export SERVICES_DIR=./services +export CONTAINER_DIR=${TARGETS_DIR}/docker +export COMPOSE_FILE=${CONTAINER_DIR}/compose.yaml export ENVIRO_SCRIPT="./env.sh" export ENVIRO_FILE="./.env" diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 254000590..0378f93e5 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -4,13 +4,15 @@ dotenv: - ./.env env: + TARGETS_DIR: ./targets + SERVICES_DIR: ./services + CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " - CONTAINER_DIR: ./docker + + CONTAINER_DIR: "{{.TARGETS_DIR}}/docker" COMPOSE_FILE: "{{.CONTAINER_DIR}}/compose.yaml" - SERVICES_DIR: ./services - DEPLOYMENT_ENVIRO: '{{.DEPLOYMENT_ENVIRO | default ""}}' HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' diff --git a/deployments/docker/compose.yaml b/deployments/targets/docker/compose.yaml similarity index 99% rename from deployments/docker/compose.yaml rename to deployments/targets/docker/compose.yaml index bc442dcc8..10820451e 100644 --- a/deployments/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -6,7 +6,7 @@ services: env_file: - .env build: - context: ../services/42 + context: ../../services/42 dockerfile: Dockerfile args: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} @@ -60,7 +60,7 @@ services: env_file: - .env build: - context: ../services/yamcs + context: ../../services/yamcs dockerfile: Dockerfile args: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} @@ -723,7 +723,7 @@ services: env_file: - .env build: - context: ../services/openmct + context: ../../services/openmct dockerfile: Containerfile args: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} diff --git a/deployments/docker/docker-compose_new.yaml b/deployments/targets/docker/docker-compose_new.yaml similarity index 100% rename from deployments/docker/docker-compose_new.yaml rename to deployments/targets/docker/docker-compose_new.yaml diff --git a/deployments/docker/docker-compose_orig.yaml b/deployments/targets/docker/docker-compose_orig.yaml similarity index 100% rename from deployments/docker/docker-compose_orig.yaml rename to deployments/targets/docker/docker-compose_orig.yaml diff --git a/deployments/docker/entrypoint_nos_engine_server.sh b/deployments/targets/docker/entrypoint_nos_engine_server.sh similarity index 100% rename from deployments/docker/entrypoint_nos_engine_server.sh rename to deployments/targets/docker/entrypoint_nos_engine_server.sh diff --git a/deployments/docker/hw-components/entrypoint.sh b/deployments/targets/docker/hw-components/entrypoint.sh similarity index 100% rename from deployments/docker/hw-components/entrypoint.sh rename to deployments/targets/docker/hw-components/entrypoint.sh diff --git a/deployments/kubernetes/fortytwo/configmap.yaml b/deployments/targets/kubernetes/fortytwo/configmap.yaml similarity index 100% rename from deployments/kubernetes/fortytwo/configmap.yaml rename to deployments/targets/kubernetes/fortytwo/configmap.yaml diff --git a/deployments/kubernetes/fortytwo/deployment.yaml b/deployments/targets/kubernetes/fortytwo/deployment.yaml similarity index 100% rename from deployments/kubernetes/fortytwo/deployment.yaml rename to deployments/targets/kubernetes/fortytwo/deployment.yaml diff --git a/deployments/kubernetes/fortytwo/kustomization.yaml b/deployments/targets/kubernetes/fortytwo/kustomization.yaml similarity index 100% rename from deployments/kubernetes/fortytwo/kustomization.yaml rename to deployments/targets/kubernetes/fortytwo/kustomization.yaml diff --git a/deployments/kubernetes/fortytwo/service.yaml b/deployments/targets/kubernetes/fortytwo/service.yaml similarity index 100% rename from deployments/kubernetes/fortytwo/service.yaml rename to deployments/targets/kubernetes/fortytwo/service.yaml diff --git a/deployments/kubernetes/fsw/configmap.yaml b/deployments/targets/kubernetes/fsw/configmap.yaml similarity index 100% rename from deployments/kubernetes/fsw/configmap.yaml rename to deployments/targets/kubernetes/fsw/configmap.yaml diff --git a/deployments/kubernetes/fsw/deployment.yaml b/deployments/targets/kubernetes/fsw/deployment.yaml similarity index 100% rename from deployments/kubernetes/fsw/deployment.yaml rename to deployments/targets/kubernetes/fsw/deployment.yaml diff --git a/deployments/kubernetes/fsw/kustomization.yaml b/deployments/targets/kubernetes/fsw/kustomization.yaml similarity index 100% rename from deployments/kubernetes/fsw/kustomization.yaml rename to deployments/targets/kubernetes/fsw/kustomization.yaml diff --git a/deployments/kubernetes/fsw/service.yaml b/deployments/targets/kubernetes/fsw/service.yaml similarity index 100% rename from deployments/kubernetes/fsw/service.yaml rename to deployments/targets/kubernetes/fsw/service.yaml diff --git a/deployments/kubernetes/gps/deployment.yaml b/deployments/targets/kubernetes/gps/deployment.yaml similarity index 100% rename from deployments/kubernetes/gps/deployment.yaml rename to deployments/targets/kubernetes/gps/deployment.yaml diff --git a/deployments/kubernetes/gps/kustomization.yaml b/deployments/targets/kubernetes/gps/kustomization.yaml similarity index 100% rename from deployments/kubernetes/gps/kustomization.yaml rename to deployments/targets/kubernetes/gps/kustomization.yaml diff --git a/deployments/kubernetes/gps/service.yaml b/deployments/targets/kubernetes/gps/service.yaml similarity index 100% rename from deployments/kubernetes/gps/service.yaml rename to deployments/targets/kubernetes/gps/service.yaml diff --git a/deployments/kubernetes/kubernetes.sh b/deployments/targets/kubernetes/kubernetes.sh similarity index 100% rename from deployments/kubernetes/kubernetes.sh rename to deployments/targets/kubernetes/kubernetes.sh diff --git a/deployments/kubernetes/kustomization.yaml b/deployments/targets/kubernetes/kustomization.yaml similarity index 100% rename from deployments/kubernetes/kustomization.yaml rename to deployments/targets/kubernetes/kustomization.yaml diff --git a/deployments/kubernetes/nos-engine-server/configmap.yaml b/deployments/targets/kubernetes/nos-engine-server/configmap.yaml similarity index 100% rename from deployments/kubernetes/nos-engine-server/configmap.yaml rename to deployments/targets/kubernetes/nos-engine-server/configmap.yaml diff --git a/deployments/kubernetes/nos-engine-server/deployment.yaml b/deployments/targets/kubernetes/nos-engine-server/deployment.yaml similarity index 100% rename from deployments/kubernetes/nos-engine-server/deployment.yaml rename to deployments/targets/kubernetes/nos-engine-server/deployment.yaml diff --git a/deployments/kubernetes/nos-engine-server/kustomization.yaml b/deployments/targets/kubernetes/nos-engine-server/kustomization.yaml similarity index 100% rename from deployments/kubernetes/nos-engine-server/kustomization.yaml rename to deployments/targets/kubernetes/nos-engine-server/kustomization.yaml diff --git a/deployments/kubernetes/nos-engine-server/service.yaml b/deployments/targets/kubernetes/nos-engine-server/service.yaml similarity index 100% rename from deployments/kubernetes/nos-engine-server/service.yaml rename to deployments/targets/kubernetes/nos-engine-server/service.yaml diff --git a/deployments/kubernetes/time/deployment.yaml b/deployments/targets/kubernetes/time/deployment.yaml similarity index 100% rename from deployments/kubernetes/time/deployment.yaml rename to deployments/targets/kubernetes/time/deployment.yaml diff --git a/deployments/kubernetes/time/kustomization.yaml b/deployments/targets/kubernetes/time/kustomization.yaml similarity index 100% rename from deployments/kubernetes/time/kustomization.yaml rename to deployments/targets/kubernetes/time/kustomization.yaml diff --git a/deployments/kubernetes/time/service.yaml b/deployments/targets/kubernetes/time/service.yaml similarity index 100% rename from deployments/kubernetes/time/service.yaml rename to deployments/targets/kubernetes/time/service.yaml From 63d947f62fd959a68328cabf963e62c789ba801d Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 16:43:15 -0400 Subject: [PATCH 017/111] corrected if clause in Makefile --- deployments/Makefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 86cd68660..e4c03a54a 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -50,6 +50,7 @@ set-permissions: ## set filesystem permissions, needed for restricted accounts up: | env-create build ## Bring up nos3 in detached state ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --remove-orphans + $(MAKE) info-services down: ## Bring down nos3 ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} down --remove-orphans || true @@ -69,7 +70,8 @@ up-minimum: | down build ## Bring up nos3 in detached state nos3-gsw \ nos3-openmct \ --remove-orphans - + $(MAKE) info-services + sidecar: ## Run sidecar to enable output ./scripts/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" @@ -91,8 +93,8 @@ clean: | down down-new ## clean images, cache, volumes, and networks setup-maven: ## Setup maven settings.xml with proxy info-services echo "" > $${SERVICES_DIR}/yamcs/settings.xml if [ "$${DEPLOYMENT_ENVIRO}" == "vmmoc" ]; then \ - cp -f $${MAVEN_SETTINGS_FILE} $${HOME}/.nos3/yamcs/ || true \ - cp -f $${MAVEN_SETTINGS_FILE} $${SERVICES_DIR}/yamcs/ || true \ + cp -f $${MAVEN_SETTINGS_FILE} $${HOME}/.nos3/yamcs/ || true; \ + cp -f $${MAVEN_SETTINGS_FILE} $${SERVICES_DIR}/yamcs/ || true; \ fi purge-containers: ## WARNING: purge docker/podman images, cache, volumes, and networks From 859b4d4232b9221e602b49a1fe8f805b3e9c019f Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 16:55:49 -0400 Subject: [PATCH 018/111] removed unused files --- deployments/Dockerfile | 76 -------------------------------------- deployments/Makefile | 4 +- deployments/entrypoint.sh | 77 --------------------------------------- deployments/env.sh | 1 + 4 files changed, 3 insertions(+), 155 deletions(-) delete mode 100644 deployments/Dockerfile delete mode 100755 deployments/entrypoint.sh diff --git a/deployments/Dockerfile b/deployments/Dockerfile deleted file mode 100644 index c668eb886..000000000 --- a/deployments/Dockerfile +++ /dev/null @@ -1,76 +0,0 @@ -ARG REGISTRY_HOST=docker.io -ARG IMAGE_USERNAME=ivvitc -ARG IMAGE_NAME=nos3-64 -ARG IMAGE_TAG=20250217 - -# ARG REGISTRY_HOST=docker.io -# ARG IMAGE_USERNAME=library -# ARG IMAGE_NAME=ubuntu -# ARG IMAGE_TAG=25.04 - -ARG IMAGE_URI=${REGISTRY_HOST}/${IMAGE_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG} - -ARG GIT_URL=https://github.com/nasa/nos3 -ARG GIT_BRANCH=main - -ARG BUILD_DIR=/builds -ARG BASE_DIR=${BUILD_DIR}/nos3 - -#------------------------------------------------------------------------------ -FROM ${IMAGE_URI} -#------------------------------------------------------------------------------ - -#--- PROXY CONFIG (if needed) -ARG MAVEN_HTTPS_PROXY -ARG HTTPS_PROXY -ARG HTTP_PROXY -ARG DEPLOYMENT_ENVIRO - -ENV MAVEN_HTTPS_PROXY=$MAVEN_HTTPS_PROXY -ENV HTTPS_PROXY=$HTTPS_PROXY -ENV HTTP_PROXY=$HTTP_PROXY -ENV DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} -#--- - -#--- GIT CONFIGs -ARG GIT_URL -ARG GIT_BRANCH - -ENV GIT_URL=${GIT_URL} -ENV GIT_BRANCH=${GIT_BRANCH} -#--- - -#--- NOS3 CONFIGs -ARG BUILD_DIR -ARG BASE_DIR - -ENV BUILD_DIR=${BUILD_DIR} -ENV BASE_DIR=${BASE_DIR} -#--- - -RUN apt-get update && \ - apt-get -y install \ - sudo git curl vim make cmake tmux tree python3 pip iputils-ping dnsutils libgcrypt20-dev && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - -RUN mkdir -p ${BUILD_DIR} - -WORKDIR ${BUILD_DIR} - -RUN git clone --recurse-submodules -b ${GIT_BRANCH} -j2 ${GIT_URL} - -WORKDIR ${BASE_DIR} - -RUN make -j2 clean - -RUN make -j2 config -RUN make -j2 build-cryptolib -RUN make -j2 build-fsw -RUN make -j2 build-sim - -RUN make -j2 build-test - -COPY entrypoint.sh /entrypoint.sh - -CMD ["/entrypoint.sh"] diff --git a/deployments/Makefile b/deployments/Makefile index e4c03a54a..e46d35ebb 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -71,7 +71,7 @@ up-minimum: | down build ## Bring up nos3 in detached state nos3-openmct \ --remove-orphans $(MAKE) info-services - + sidecar: ## Run sidecar to enable output ./scripts/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" @@ -108,7 +108,7 @@ purge-containers: ## WARNING: purge docker/podman images, cache, volumes, and ne info-services: ## info on accessing various services @echo; echo "How to access various services:"; echo @echo "open http://localhost:8090 to access yamcs/gsw" - @echo "open http://localhost:30090 to access fortytwo (42)" + @echo "open http://localhost:30090/vnc.html to access fortytwo (42)" @echo "open http://localhost:9000 to access openmct" @echo diff --git a/deployments/entrypoint.sh b/deployments/entrypoint.sh deleted file mode 100755 index 9942a34f4..000000000 --- a/deployments/entrypoint.sh +++ /dev/null @@ -1,77 +0,0 @@ -#! /bin/bash -x - -#set -e - -_ARGS="$@" - -DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} - -#------------------------------------------------------------------------------------ -# source of NOS3, ${PROVIDER_PATH}, ${GIT_SERVER}, ${GIT_PATH}, ${MISSION} are from .env files -#------------------------------------------------------------------------------------ -PROVIDER_PATH=${OU}-${ENVIRO} - -mkdir -p /${PROVIDER_PATH} -cd /${PROVIDER_PATH} - -# To clone mission and spacecraft centric configurations the below - -# variable assignments below are to allow external value to come from sources. -MISSION_GIT_USER=${MISSION_GIT_USER} -MISSION_GIT_TOKEN=${MISSION_GIT_TOKEN} -MISSION_GIT_SERVER=${MISSION_GIT_SERVER} -MISSION_GIT_CREDS=${MISSION_GIT_USER}:${MISSION_GIT_TOKEN} - -MISSION_GIT_PATH=${OU}/${CONTEXT}/${TENANT}/${ENVIRO} -MISSION_GIT_URL=https://${MISSION_GIT_CREDS}@${MISSION_GIT_SERVER}/${MISSION_GIT_PATH}/${MISSION}.git - -PROVIDER_GIT_PATH=/${PROVIDER_PATH}/git/${MISSION_GIT_SERVER}/${MISSION_GIT_PATH} -PROVIDER_MISSION_PATH=${PROVIDER_GIT_PATH}/${MISSION} - -mkdir -p ${PROVIDER_GIT_PATH} && cd ${PROVIDER_GIT_PATH} -# the || true permits the continuation even if it ${MISSION} folder exists, -# this would happen if path is a mounted docker volume instead. -#git clone ${MISSION_GIT_URL} || true - -#cd ${PROVIDER_MISSION_PATH} - -# Unique to image -SIM_BIN=${SIM_BIN} - -VAR_DIR=${SIM_BIN}/var -RUN_DIR=${VAR_DIR}/run - -SIMULATOR_BIN=${SIMULATOR_BIN} - -CFG_FILE=${CFG_FILE} -LOG_CONFIG=${LOG_CONFIG} -COMPONENT_NAME=${COMPONENT_NAME} - -#------------------------------------------------------------------------------------ -# run nos3 simulator in the background and capture pid -#------------------------------------------------------------------------------------ -mkdir -p ${RUN_DIR} - -pkill -f ${SIMULATOR_BIN} || true - -${SIMULATOR_BIN} --config-file ${CFG_FILE} --log-config-file ${LOG_CONFIG} ${COMPONENT_NAME} & -echo $! > ${RUN_DIR}/pid -#------------------------------------------------------------------------------------ - -# healthcheck on port ${HEALTHCHECK_PORT}, if set -HEALTHCHECK_PORT=${HEALTHCHECK_PORT} # environment variable - -if [ -n "${HEALTHCHECK_PORT}" ]; then - - if (( ${HEALTHCHECK_PORT} )); then # only if port is a number proceed - pkill -f nc || - while true; do (echo -e 'HTTP/1.1 200 OK\r\n'; echo -e "\n\tSuccess: health check port ${HEALTHCHECK_PORT}" ; echo -e "\t$(date -u +%FT%T)\n") | nc -lp ${HEALTHCHECK_PORT}; done & - else - echo "HEALTHCHECK_PORT variable is set but to a none number; therefore, not starting health check action" - fi - -else - echo "HEALTHCHECK_PORT variable is not set; therefore, not starting health check action. Optional. Proceeding" -fi - -tail -f /dev/null \ No newline at end of file diff --git a/deployments/env.sh b/deployments/env.sh index a892042ea..48a909e0e 100755 --- a/deployments/env.sh +++ b/deployments/env.sh @@ -19,6 +19,7 @@ NO_PROXY=${NO_PROXY} # Maven/Java specific configurations MAVEN_REPO_LOCAL=/home/nos3/.nos3/.m2/repository MAVEN_HTTPS_PROXY="--settings ./settings.xml" +MAVEN_SETTINGS_FILE=${MAVEN_SETTINGS_FILE} # NOS3_CFG_PATH=.. From fb5eb8f08de650d9c747410f5e33e59f9c3c5a7c Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 16:58:27 -0400 Subject: [PATCH 019/111] moved env.sh script to ./scripts folder --- deployments/Makefile | 2 +- deployments/Taskfile.yml | 4 ++-- deployments/{ => scripts}/env.sh | 0 3 files changed, 3 insertions(+), 3 deletions(-) rename deployments/{ => scripts}/env.sh (100%) diff --git a/deployments/Makefile b/deployments/Makefile index e46d35ebb..6450597da 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -13,7 +13,7 @@ export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN} compose export CONTAINER_DIR=${TARGETS_DIR}/docker export COMPOSE_FILE=${CONTAINER_DIR}/compose.yaml -export ENVIRO_SCRIPT="./env.sh" +export ENVIRO_SCRIPT="./scripts/env.sh" export ENVIRO_FILE="./.env" ifeq (${CONTAINER_BIN},podman) diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 0378f93e5..2e181c3d3 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -9,7 +9,7 @@ env: CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " - + CONTAINER_DIR: "{{.TARGETS_DIR}}/docker" COMPOSE_FILE: "{{.CONTAINER_DIR}}/compose.yaml" @@ -17,7 +17,7 @@ env: HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' - ENVIRO_SCRIPT: "./env.sh" + ENVIRO_SCRIPT: "./scripts/env.sh" ENVIRO_FILE: "./.env" MAVEN_HTTPS_PROXY: '-s./settings.xml' diff --git a/deployments/env.sh b/deployments/scripts/env.sh similarity index 100% rename from deployments/env.sh rename to deployments/scripts/env.sh From 5a4b3d548d40634af99425b6cd1a6bf7c85cefbd Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 28 Oct 2025 18:00:55 -0400 Subject: [PATCH 020/111] updates to up and up-minimum --- deployments/Makefile | 29 ++++++++++++++--------------- deployments/Taskfile.yml | 25 +++++++++++-------------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 6450597da..6d5e7bcdc 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -49,14 +49,19 @@ set-permissions: ## set filesystem permissions, needed for restricted accounts find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable up: | env-create build ## Bring up nos3 in detached state - ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --remove-orphans - $(MAKE) info-services + @source ${ENVIRO_FILE} && \ + ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --force-recreate --remove-orphans + sleep 15 + @$(MAKE) --silent sidecar + @$(MAKE) --silent info-services + @${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true down: ## Bring down nos3 ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} down --remove-orphans || true -up-minimum: | down build ## Bring up nos3 in detached state - export NOS3_CFG_PATH=nos3; \ +up-minimum: | down env-create build ## Bring up nos3 in detached state + @source ${ENVIRO_FILE} && \ + export NOS3_CFG_PATH=nos3; \ ${CONTAINER_COMPOSE_BIN} \ --env-file ${ENVIRO_FILE} \ -f ${COMPOSE_FILE} up -d \ @@ -70,19 +75,13 @@ up-minimum: | down build ## Bring up nos3 in detached state nos3-gsw \ nos3-openmct \ --remove-orphans - $(MAKE) info-services + sleep 15 + @$(MAKE) --silent sidecar + @$(MAKE) --silent info-services + @${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true sidecar: ## Run sidecar to enable output - ./scripts/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" - -doitall: ## Do it all for nos3 - @$(MAKE) down; \ - sleep 5; \ - $(MAKE) up; \ - sleep 15; \ - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true && \ - $(MAKE) --silent sidecar - $(MAKE) info-services + @./scripts/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" clean: | down down-new ## clean images, cache, volumes, and networks yes | ${CONTAINER_BIN} image prune --filter "dangling=true" diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 2e181c3d3..315ce9980 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -93,8 +93,12 @@ tasks: cmds: - | source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --remove-orphans + ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --force-recreate --remove-orphans + - sleep 15 + - task sidecar - task info-services + - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true + silent: true down: desc: Bring down nos3 @@ -125,23 +129,16 @@ tasks: nos3-gsw \ nos3-openmct \ --remove-orphans + - sleep 15 + - task sidecar - task info-services + - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true + silent: true sidecar: desc: Run sidecar to enable output cmds: - ./scripts/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" - - doitall: - desc: Do it all for nos3 - cmds: - - task down - - sleep 5 - - task up - - sleep 15 - - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true - - task sidecar - - task info-services silent: true clean: @@ -161,8 +158,8 @@ tasks: - echo "" > ${SERVICES_DIR}/yamcs/settings.xml - | if [ "${DEPLOYMENT_ENVIRO}" == "vmmoc" ]; then - cp ${MAVEN_SETTINGS_FILE} ${HOME}/.nos3/yamcs/ || true - cp ${MAVEN_SETTINGS_FILE} ${SERVICES_DIR}/yamcs/ || true + cp -f ${MAVEN_SETTINGS_FILE} ${HOME}/.nos3/yamcs/ || true + cp -f ${MAVEN_SETTINGS_FILE} ${SERVICES_DIR}/yamcs/ || true fi purge-containers: From c5bbe54c1b19a7cf709d2a9b9caaee9ab9673750 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 29 Oct 2025 11:02:27 -0400 Subject: [PATCH 021/111] changed NOS3_CFG_PATH to nos3 --- deployments/Makefile | 12 +++++++++--- deployments/Taskfile.yml | 19 +++++++++++++++---- deployments/nos3/cfg/nos3-mission.xml | 2 +- deployments/nos3/cfg/sims/nos3-simulator.xml | 2 +- deployments/scripts/env.sh | 2 +- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 6d5e7bcdc..3a46647bc 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -6,6 +6,7 @@ SHELL=bash # Containerization Parameters export TARGETS_DIR=./targets export SERVICES_DIR=./services +export SCRIPTS_DIR=./scripts export CONTAINER_BIN=docker export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN} compose @@ -13,7 +14,7 @@ export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN} compose export CONTAINER_DIR=${TARGETS_DIR}/docker export COMPOSE_FILE=${CONTAINER_DIR}/compose.yaml -export ENVIRO_SCRIPT="./scripts/env.sh" +export ENVIRO_SCRIPT="${SCRIPTS_DIR}/env.sh" export ENVIRO_FILE="./.env" ifeq (${CONTAINER_BIN},podman) @@ -23,7 +24,11 @@ endif # To set default settings.xml and essentially empty for mvn, unless in vmmoc export MAVEN_HTTPS_PROXY=-s./settings.xml +ifdef (NOS3_CFG_PATH) +export NOS3_CFG_PATH=${NOS3_CFG_PATH} +else export NOS3_CFG_PATH=.. +endif build-fortytwo: | env-create set-permissions ## Build fortytwo (42) source ${ENVIRO_FILE} && \ @@ -50,6 +55,7 @@ set-permissions: ## set filesystem permissions, needed for restricted accounts up: | env-create build ## Bring up nos3 in detached state @source ${ENVIRO_FILE} && \ + export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --force-recreate --remove-orphans sleep 15 @$(MAKE) --silent sidecar @@ -61,7 +67,7 @@ down: ## Bring down nos3 up-minimum: | down env-create build ## Bring up nos3 in detached state @source ${ENVIRO_FILE} && \ - export NOS3_CFG_PATH=nos3; \ + export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ ${CONTAINER_COMPOSE_BIN} \ --env-file ${ENVIRO_FILE} \ -f ${COMPOSE_FILE} up -d \ @@ -81,7 +87,7 @@ up-minimum: | down env-create build ## Bring up nos3 in detached state @${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true sidecar: ## Run sidecar to enable output - @./scripts/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" + @${SCRIPTS_DIR}/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" clean: | down down-new ## clean images, cache, volumes, and networks yes | ${CONTAINER_BIN} image prune --filter "dangling=true" diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 315ce9980..156a4a155 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -6,6 +6,7 @@ dotenv: env: TARGETS_DIR: ./targets SERVICES_DIR: ./services + SCRIPTS_DIR: ./scripts CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " @@ -17,13 +18,13 @@ env: HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' - ENVIRO_SCRIPT: "./scripts/env.sh" + ENVIRO_SCRIPT: "{{.SCRIPTS_DIR}}/env.sh" ENVIRO_FILE: "./.env" MAVEN_HTTPS_PROXY: '-s./settings.xml' MAVEN_SETTINGS_FILE: '{{.MAVEN_SETTINGS_FILE | default ""}}' - NOS3_CFG_PATH: ".." + NOS3_CFG_PATH: '{{.NOS3_CFG_PATH | default ".."}}' tasks: default: @@ -93,6 +94,7 @@ tasks: cmds: - | source ${ENVIRO_FILE} && \ + export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --force-recreate --remove-orphans - sleep 15 - task sidecar @@ -100,6 +102,15 @@ tasks: - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true silent: true + test: + desc: Bring up nos3 in detached state + deps: + - env-create + - build + cmds: + - | + source ${ENVIRO_FILE} && \ + export NOS3_CFG_PATH=${NOS3_CFG_PATH}; echo "NOS3_CFG_PATH is set to ${NOS3_CFG_PATH}"; down: desc: Bring down nos3 cmds: @@ -115,7 +126,7 @@ tasks: cmds: - | source ${ENVIRO_FILE} && \ - export NOS3_CFG_PATH="nos3" ; \ + export NOS3_CFG_PATH=${NOS3_CFG_PATH} ; \ ${CONTAINER_COMPOSE_BIN} \ --env-file ${ENVIRO_FILE} \ -f ${COMPOSE_FILE} up -d \ @@ -138,7 +149,7 @@ tasks: sidecar: desc: Run sidecar to enable output cmds: - - ./scripts/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" + - ${SCRIPTS_DIR}/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" silent: true clean: diff --git a/deployments/nos3/cfg/nos3-mission.xml b/deployments/nos3/cfg/nos3-mission.xml index c5008c114..221ecbf93 100644 --- a/deployments/nos3/cfg/nos3-mission.xml +++ b/deployments/nos3/cfg/nos3-mission.xml @@ -1,5 +1,5 @@ - 814048200.0 + 1767225600.0 diff --git a/deployments/nos3/cfg/sims/nos3-simulator.xml b/deployments/nos3/cfg/sims/nos3-simulator.xml index 7d5f691d7..e2f293ae0 100644 --- a/deployments/nos3/cfg/sims/nos3-simulator.xml +++ b/deployments/nos3/cfg/sims/nos3-simulator.xml @@ -8,7 +8,7 @@ - 814254200.0 + 1767225600.0 10000 10000 tcp://nos-engine-server:12001 diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index 48a909e0e..82c5f2f48 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -22,7 +22,7 @@ MAVEN_HTTPS_PROXY="--settings ./settings.xml" MAVEN_SETTINGS_FILE=${MAVEN_SETTINGS_FILE} # -NOS3_CFG_PATH=.. +NOS3_CFG_PATH=nos3 # 42 specific configurations FORTYTWO_DISPLAY=:1 From 82e20b28b904cf5803ac912a72798343c1559686 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 29 Oct 2025 11:10:33 -0400 Subject: [PATCH 022/111] corrected path to .env --- deployments/Makefile | 2 +- deployments/Taskfile.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 3a46647bc..06601452a 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -15,7 +15,7 @@ export CONTAINER_DIR=${TARGETS_DIR}/docker export COMPOSE_FILE=${CONTAINER_DIR}/compose.yaml export ENVIRO_SCRIPT="${SCRIPTS_DIR}/env.sh" -export ENVIRO_FILE="./.env" +export ENVIRO_FILE="${CONTAINER_DIR}/.env" ifeq (${CONTAINER_BIN},podman) export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN}-compose diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 156a4a155..67112a102 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -19,7 +19,7 @@ env: HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' ENVIRO_SCRIPT: "{{.SCRIPTS_DIR}}/env.sh" - ENVIRO_FILE: "./.env" + ENVIRO_FILE: "{{.CONTAINER_DIR}}/.env" MAVEN_HTTPS_PROXY: '-s./settings.xml' MAVEN_SETTINGS_FILE: '{{.MAVEN_SETTINGS_FILE | default ""}}' From 01e5c8bffcf6343c7e15cafac7ff8139de0fa602 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 09:05:43 -0400 Subject: [PATCH 023/111] added lazydocker install --- deployments/Makefile | 17 ++++++++++++++++- deployments/Taskfile.yml | 30 +++++++++++++++++++++--------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 06601452a..c9b21cd71 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -53,7 +53,8 @@ set-permissions: ## set filesystem permissions, needed for restricted accounts find . -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable -up: | env-create build ## Bring up nos3 in detached state +up: | down env-create build ## Bring up nos3 in detached state + sleep 5 @source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --force-recreate --remove-orphans @@ -66,6 +67,7 @@ down: ## Bring down nos3 ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} down --remove-orphans || true up-minimum: | down env-create build ## Bring up nos3 in detached state + @sleep 5 @source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ ${CONTAINER_COMPOSE_BIN} \ @@ -120,6 +122,19 @@ info-services: ## info on accessing various services env-create: ## Create .env file from env.sh script ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} +install-taskfile: ## Install Taskfile CLI tool + @sh -c "$$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin && \ + chmod +x ~/.local/bin/task && export PATH="${HOME}/.local/bin:${PATH}" + @echo; echo "add: ${HOME}/.local/bin:${PATH} to your ~/.bashrc or ~/.zshrc"; echo + +install-lazydocker: ## Install lazydocker CLI tool (to view logs, etc) + @curl --silent https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash + @echo; echo "don't forget to add: ${HOME}/.local/bin:${PATH} to your ~/.bashrc or ~/.zshrc"; echo + @echo "watch a Lazydocker demo here: https://www.youtube.com/watch?v=NICqQPxwJWw"; echo + +lazydocker: | install-lazydocker ## Run lazydocker CLI tool + @lazydocker + #--- RESET = \033[0m PURPLE = \033[0;35m diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 67112a102..8911bde71 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -89,9 +89,11 @@ tasks: up: desc: Bring up nos3 in detached state deps: + - down - env-create - build cmds: + - sleep 5 - | source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ @@ -102,15 +104,6 @@ tasks: - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true silent: true - test: - desc: Bring up nos3 in detached state - deps: - - env-create - - build - cmds: - - | - source ${ENVIRO_FILE} && \ - export NOS3_CFG_PATH=${NOS3_CFG_PATH}; echo "NOS3_CFG_PATH is set to ${NOS3_CFG_PATH}"; down: desc: Bring down nos3 cmds: @@ -124,6 +117,7 @@ tasks: - env-create - build cmds: + - sleep 5 - | source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH} ; \ @@ -198,3 +192,21 @@ tasks: cmds: - | ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} + + install-lazydocker: + desc: Install lazydocker CLI tool (to view logs, etc) + cmds: + - | + curl --silent https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash + - | + echo; echo "don't forget to add: ${HOME}/.local/bin:${PATH} to your ~/.bashrc or ~/.zshrc"; echo + - | + echo "watch a Lazydocker demo here: https://www.youtube.com/watch?v= + silent: true + + lazydocker: + desc: Run lazydocker CLI tool + deps: + - install-lazydocker + cmds: + - lazydocker From 69f8afdf155d73265f744327522edbd08164fc34 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 09:56:06 -0400 Subject: [PATCH 024/111] corrected taskfile.yaml for install-lazydocker --- deployments/Taskfile.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 8911bde71..624ecfb04 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -201,7 +201,7 @@ tasks: - | echo; echo "don't forget to add: ${HOME}/.local/bin:${PATH} to your ~/.bashrc or ~/.zshrc"; echo - | - echo "watch a Lazydocker demo here: https://www.youtube.com/watch?v= + echo "watch a Lazydocker demo here: https://www.youtube.com/watch?v=NICqQPxwJWw"; echo silent: true lazydocker: From 05bc8439e70134df01f4a258e4ca19e37c108e3b Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 10:17:03 -0400 Subject: [PATCH 025/111] updated README with steps on how to run --- deployments/README.md | 85 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-) diff --git a/deployments/README.md b/deployments/README.md index 1a3a13aad..edb343dd9 100644 --- a/deployments/README.md +++ b/deployments/README.md @@ -1,5 +1,88 @@ -# +# How to use +## prep: +```bash +make install-lazydocker install-taskfile +make env-create + +``` + +## run + +```bash +make + +``` + +returns + +```bash +#-target-----------------------description----------------------------------------------- +build-fortytwo Build fortytwo (42) +build-openmct Build openmct +build-yamcs Build yamcs +build Build all containers +clean clean images, cache, volumes, and networks +down Bring down nos3 +env-create Create .env file from env.sh script +info-services info on accessing various services +install-lazydocker Install lazydocker CLI tool (to view logs, etc) +install-taskfile Install Taskfile CLI tool +lazydocker Run lazydocker CLI tool +purge-containers WARNING: purge docker/podman images, cache, volumes, and networks +set-permissions set filesystem permissions, needed for restricted accounts +setup-maven Setup maven settings.xml with proxy info-services +sidecar Run sidecar to enable output +up-minimum Bring up nos3 in detached state +up Bring up nos3 in detached state + +``` + +```bash +make up + +``` + +or using `task` after you've done `make install-taskfile`: + +```bash +task + +``` + +returns: + +```bash +task: Available tasks for this project: +* build: Build all containers +* build-fortytwo: Build fortytwo (42) +* build-openmct: Build openmct +* build-yamcs: Build yamcs +* clean: clean images, cache, volumes, and networks +* default: Shows this help message +* down: Bring down nos3 +* env-create: Create .env file from env.sh script +* info-services: info on accessing various services +* install-lazydocker: Install lazydocker CLI tool (to view logs, etc) +* lazydocker: Run lazydocker CLI tool +* purge-containers: WARNING: purge docker/podman images, cache, volumes, and networks +* set-permissions: set filesystem permissions, needed for restricted accounts +* setup-maven: Setup maven settings.xml with proxy info-services +* sidecar: Run sidecar to enable output +* up: Bring up nos3 in detached state +* up-minimum: Bring up nos3 (minimum) in detached state + +``` + +```bash +task up + +``` + +more info on `task` can be found here https://taskfile.dev + + +## Diagram ```mermaid graph TD; %% client([client])-. Ingress-managed
load balancer .->ingress[Ingress]; From 3235437756f954ba9d3980b776c1c359074d11ed Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 11:10:48 -0400 Subject: [PATCH 026/111] added .DS_Store to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index d5ec74aca..b6d155b1c 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,5 @@ docs/wiki/_templates cfg/InOut/*.42 cfg/InOut/*.csv + +.DS_Store \ No newline at end of file From 410ed8cddabcf09b2423c1b689db8dbcabb92c53 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 11:23:30 -0400 Subject: [PATCH 027/111] added demo.gif from lazydocker --- deployments/README.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/deployments/README.md b/deployments/README.md index edb343dd9..ddc991208 100644 --- a/deployments/README.md +++ b/deployments/README.md @@ -1,6 +1,19 @@ # How to use -## prep: +## Dependencies + +- `gnu make` +- `bash` + +### Optional but very useful + +- `task` a contemporary version of `make` +- `lazydocker` + +Which can be installed via `make install-lazydocker install-taskfile` + +## prep + ```bash make install-lazydocker install-taskfile make env-create @@ -79,8 +92,21 @@ task up ``` +### Taskfile + more info on `task` can be found here https://taskfile.dev +### Lazydocker + +more info on `lazydocker` can be found here https://github.com/jesseduffield/lazydocker +![lazydocker](https://raw.githubusercontent.com/jesseduffield/lazydocker/refs/heads/master/docs/resources/demo3.gif) + + +## Test + +open http://localhost:8090/instance?c=nos3__realtime to access yamcs/gsw +open http://localhost:30090/vnc.html to access fortytwo (42) +open http://localhost:9000 to access openmct ## Diagram ```mermaid From 857312cc6aef21511417ac3f545b7671aaa5a6f1 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 12:21:35 -0400 Subject: [PATCH 028/111] added time input and conversions for ./deployments/scripts/env.sh for future use --- deployments/scripts/env.sh | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index 82c5f2f48..a9ded23cb 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -2,11 +2,40 @@ # A script to generate .env file for Docker deployments +# Simulation specific configurations +SIM_T0_DATETIME="2025-10-20 17:43:20 UTC" +J2000_REFERENCE_DATETIME="2000-01-01 12:00:00 UTC" +LEAP_SECONDS=37 + +# Time specific derivations +SIM_T0_DATETIME="${SIM_T0_DATETIME}" +J2000_REFERENCE_DATETIME="${J2000_REFERENCE_DATETIME}" + +SIM_T0_EPOCH_SECONDS=$(date -ud "${SIM_T0_DATETIME}" +"%s") +J2000_EPOCH_SECONDS=$(date -ud "${J2000_REFERENCE_DATETIME}" +"%s") + +START_TIME=$((${SIM_T0_EPOCH_SECONDS}-${J2000_EPOCH_SECONDS})) + +FORTYTWO_SIM_DATE=$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%m %d %Y") +FORTYTWO_SIM_TIME=$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%H %M %S.%2N") + cat << EOF # # Auto-generated by ${PWD}/$(basename $0) on $(date -u +"%Y-%m-%dT%H:%M:%S%z") # +# Simulation specific configurations +SIM_T0_DATETIME="${SIM_T0_DATETIME}" +J2000_REFERENCE_DATETIME="${J2000_REFERENCE_DATETIME}" + +# In epoch seconds +SIM_T0_EPOCH_SECONDS=${SIM_T0_EPOCH_SECONDS} +J2000_EPOCH_SECONDS=${J2000_EPOCH_SECONDS} + +# In J2000 seconds +START_TIME=${START_TIME} + +# Deployment specific configurations DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} HEALTHCHECK_PORT=${HEALTHCHECK_PORT} @@ -34,8 +63,13 @@ FORTYTWO_RECOMPILE=false FORTYTWO_BASE_DIR=/opt/nasa-itc FORTYTWO_VNC_PASSWORD=$(echo -n "foobar" | shasum -a 256 | cut -d" " -f1) -# gsw specific configurations +FORTYTWO_SIM_DATE="${FORTYTWO_SIM_DATE}" +FORTYTWO_SIM_TIME="${FORTYTWO_SIM_TIME}" + +# gsw+fsw specific configurations GSW_SOFTWARE=yamcs +FSW_SOFTWARE=cfs + COMPONENT_DIR=/home/nos3/builds/nos3/components # yamcs specific configurations From c6d2d2c336e664d617be8c80061ba909f677b986 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 13:36:12 -0400 Subject: [PATCH 029/111] altered env.sh --- deployments/scripts/env.sh | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index a9ded23cb..618edb036 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -8,17 +8,9 @@ J2000_REFERENCE_DATETIME="2000-01-01 12:00:00 UTC" LEAP_SECONDS=37 # Time specific derivations -SIM_T0_DATETIME="${SIM_T0_DATETIME}" -J2000_REFERENCE_DATETIME="${J2000_REFERENCE_DATETIME}" - SIM_T0_EPOCH_SECONDS=$(date -ud "${SIM_T0_DATETIME}" +"%s") J2000_EPOCH_SECONDS=$(date -ud "${J2000_REFERENCE_DATETIME}" +"%s") -START_TIME=$((${SIM_T0_EPOCH_SECONDS}-${J2000_EPOCH_SECONDS})) - -FORTYTWO_SIM_DATE=$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%m %d %Y") -FORTYTWO_SIM_TIME=$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%H %M %S.%2N") - cat << EOF # # Auto-generated by ${PWD}/$(basename $0) on $(date -u +"%Y-%m-%dT%H:%M:%S%z") @@ -33,7 +25,7 @@ SIM_T0_EPOCH_SECONDS=${SIM_T0_EPOCH_SECONDS} J2000_EPOCH_SECONDS=${J2000_EPOCH_SECONDS} # In J2000 seconds -START_TIME=${START_TIME} +START_TIME=$((${SIM_T0_EPOCH_SECONDS}-${J2000_EPOCH_SECONDS})) # Deployment specific configurations DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} @@ -63,8 +55,9 @@ FORTYTWO_RECOMPILE=false FORTYTWO_BASE_DIR=/opt/nasa-itc FORTYTWO_VNC_PASSWORD=$(echo -n "foobar" | shasum -a 256 | cut -d" " -f1) -FORTYTWO_SIM_DATE="${FORTYTWO_SIM_DATE}" -FORTYTWO_SIM_TIME="${FORTYTWO_SIM_TIME}" +FORTYTWO_SIM_DATE="$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%m %d %Y")" +FORTYTWO_SIM_TIME="$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%H %M %S.%2N")" +FORTYTWO_LEAP_SECONDS=${LEAP_SECONDS} # gsw+fsw specific configurations GSW_SOFTWARE=yamcs From 4c04cef20f464b6f37497bd365b6f4766a9597c2 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 13:46:06 -0400 Subject: [PATCH 030/111] added config target/task --- deployments/Makefile | 3 +++ deployments/Taskfile.yml | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/deployments/Makefile b/deployments/Makefile index c9b21cd71..f13d3712f 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -122,6 +122,9 @@ info-services: ## info on accessing various services env-create: ## Create .env file from env.sh script ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} +config: ## configure nos3 by running config.sh + @cd ../ && ./scripts/cfg/config.sh + install-taskfile: ## Install Taskfile CLI tool @sh -c "$$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin && \ chmod +x ~/.local/bin/task && export PATH="${HOME}/.local/bin:${PATH}" diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 624ecfb04..037c2d2e4 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -193,6 +193,11 @@ tasks: - | ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} + config: + desc: configure nos3 by running config.sh + cmds: + - cd ../ && ./scripts/cfg/config.sh + install-lazydocker: desc: Install lazydocker CLI tool (to view logs, etc) cmds: From 9cfbb7883a04301ddb0f8b14b48b8bf145cfe9dc Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 14:45:39 -0400 Subject: [PATCH 031/111] adding variable to possibly start sim time at current time --- deployments/Makefile | 12 +++++++++--- deployments/Taskfile.yml | 21 ++++++++++++++++----- deployments/scripts/env.sh | 17 ++++++++++++----- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index f13d3712f..5a0fa2fe0 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -122,9 +122,6 @@ info-services: ## info on accessing various services env-create: ## Create .env file from env.sh script ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} -config: ## configure nos3 by running config.sh - @cd ../ && ./scripts/cfg/config.sh - install-taskfile: ## Install Taskfile CLI tool @sh -c "$$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin && \ chmod +x ~/.local/bin/task && export PATH="${HOME}/.local/bin:${PATH}" @@ -138,6 +135,15 @@ install-lazydocker: ## Install lazydocker CLI tool (to view logs, etc) lazydocker: | install-lazydocker ## Run lazydocker CLI tool @lazydocker +config-nos3-mission: | env-create ## configure nos3-mission.xml to set start-time + @source ${ENVIRO_FILE} && \ + sed -Ei 's/(\s*)(\).*(\)/\1\2>'$${START_TIME}'<\/\3/g' ../cfg/nos3-mission.xml && \ + sed -Ei 's/(\s*)(\).*(\)/\1\2>'$${GSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml && \ + sed -Ei 's/(\s*)(\).*(\)/\1\2>'$${FSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml + +config: ## configure nos3 by running config.sh + @cd ../ && ./scripts/cfg/config.sh + #--- RESET = \033[0m PURPLE = \033[0;35m diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 037c2d2e4..c9e063422 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -193,11 +193,6 @@ tasks: - | ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} - config: - desc: configure nos3 by running config.sh - cmds: - - cd ../ && ./scripts/cfg/config.sh - install-lazydocker: desc: Install lazydocker CLI tool (to view logs, etc) cmds: @@ -215,3 +210,19 @@ tasks: - install-lazydocker cmds: - lazydocker + + config-nos3-mission: + desc: configure nos3-mission.xml to set start-time + deps: + - env-create + cmds: + - | + source ${ENVIRO_FILE} && \ + sed -Ei 's/(\s*)(\).*(\)/\1\2>'${START_TIME}'<\/\3/g' ../cfg/nos3-mission.xml && \ + sed -Ei 's/(\s*)(\).*(\)/\1\2>'${GSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml && \ + sed -Ei 's/(\s*)(\).*(\)/\1\2>'${FSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml + + config: + desc: configure nos3 by running config.sh + cmds: + - cd ../ && ./scripts/cfg/config.sh \ No newline at end of file diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index 618edb036..608aed5c2 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -1,12 +1,19 @@ #!/usr/bin/env bash -# A script to generate .env file for Docker deployments +# A script to generate .env file for container deployments -# Simulation specific configurations -SIM_T0_DATETIME="2025-10-20 17:43:20 UTC" +# Simulation specific inputs +NOW=$(date -u +"%Y-%m-%d %H:%M:%S UTC") +SIM_T0_DATETIME="2026-01-01 00:00:00 UTC" +#SIM_T0_DATETIME="${NOW}" J2000_REFERENCE_DATETIME="2000-01-01 12:00:00 UTC" LEAP_SECONDS=37 +GSW_SOFTWARE=yamcs +FSW_SOFTWARE=cfs + +# Avoid updating the below variables unless you know what you are doing + # Time specific derivations SIM_T0_EPOCH_SECONDS=$(date -ud "${SIM_T0_DATETIME}" +"%s") J2000_EPOCH_SECONDS=$(date -ud "${J2000_REFERENCE_DATETIME}" +"%s") @@ -60,8 +67,8 @@ FORTYTWO_SIM_TIME="$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%H %M %S.%2N")" FORTYTWO_LEAP_SECONDS=${LEAP_SECONDS} # gsw+fsw specific configurations -GSW_SOFTWARE=yamcs -FSW_SOFTWARE=cfs +GSW_SOFTWARE=${GSW_SOFTWARE} +FSW_SOFTWARE=${FSW_SOFTWARE} COMPONENT_DIR=/home/nos3/builds/nos3/components From d1ab523665ed41369416de1f821817b15b8fe844 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 16:19:24 -0400 Subject: [PATCH 032/111] now calucluating start time from calendar date/time, and updating openmct t0... --- deployments/Makefile | 15 +++---- deployments/Taskfile.yml | 16 +++++--- deployments/scripts/env.sh | 15 ++++++- deployments/scripts/sidecar/sidecar.sh | 4 +- deployments/targets/docker/compose.yaml | 53 +++++++++++++------------ 5 files changed, 61 insertions(+), 42 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 5a0fa2fe0..a4de14986 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -53,7 +53,7 @@ set-permissions: ## set filesystem permissions, needed for restricted accounts find . -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable -up: | down env-create build ## Bring up nos3 in detached state +up: | down env-create build config-nos3-mission config ## Bring up nos3 in detached state sleep 5 @source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ @@ -112,12 +112,13 @@ purge-containers: ## WARNING: purge docker/podman images, cache, volumes, and ne @yes | ${CONTAINER_BIN} network prune || true @echo -info-services: ## info on accessing various services - @echo; echo "How to access various services:"; echo - @echo "open http://localhost:8090 to access yamcs/gsw" - @echo "open http://localhost:30090/vnc.html to access fortytwo (42)" - @echo "open http://localhost:9000 to access openmct" - @echo +info-services: | env-create ## info on accessing various services + @source ${ENVIRO_FILE} && \ + echo; echo "How to access various services:"; echo; \ + echo "open http://localhost:8090 to access yamcs/gsw"; \ + echo "open http://localhost:30090/vnc.html to access fortytwo (42) and then click Connect"; \ + echo "open http://localhost:9000/#/browse/mine?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=$${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=$${SIM_TF_EPOCH_MILLISECONDS} to access openmct"; \ + echo env-create: ## Create .env file from env.sh script ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index c9e063422..011754467 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -92,6 +92,8 @@ tasks: - down - env-create - build + - config-nos3-mission + - config cmds: - sleep 5 - | @@ -180,11 +182,15 @@ tasks: info-services: desc: info on accessing various services cmds: - - echo; echo "How to access various services:"; echo - - echo "open http://localhost:8090 to access yamcs/gsw" - - echo "open http://localhost:30090/vnc.html to access fortytwo (42)" - - echo "open http://localhost:9000 to access openmct" - - echo + - task env-create + - | + source ${ENVIRO_FILE} + echo; echo "How to access various services:"; echo; \ + echo "open http://localhost:8090 to access yamcs/gsw"; \ + echo "open http://localhost:30090/vnc.html to access fortytwo (42) and then click Connect"; \ + echo "open http://localhost:9000/#/browse/mine?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=${SIM_TF_EPOCH_MILLISECONDS} to access openmct"; \ + echo + silent: true env-create: diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index 608aed5c2..f92fbf6e4 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -5,17 +5,26 @@ # Simulation specific inputs NOW=$(date -u +"%Y-%m-%d %H:%M:%S UTC") SIM_T0_DATETIME="2026-01-01 00:00:00 UTC" +TIME_INTERVAL=3600 # 1 hour in seconds + #SIM_T0_DATETIME="${NOW}" -J2000_REFERENCE_DATETIME="2000-01-01 12:00:00 UTC" LEAP_SECONDS=37 GSW_SOFTWARE=yamcs FSW_SOFTWARE=cfs +# This is to define either the standard path, i.e. ${PWD}/nos3, or a local definition +NOS3_CFG_PATH=.. + +######################################################################## # Avoid updating the below variables unless you know what you are doing +######################################################################## # Time specific derivations +J2000_REFERENCE_DATETIME="2000-01-01 12:00:00 UTC" SIM_T0_EPOCH_SECONDS=$(date -ud "${SIM_T0_DATETIME}" +"%s") +SIM_T0_EPOCH_MILLISECONDS=$( expr ${SIM_T0_EPOCH_SECONDS} \* 1000 ) +SIM_TF_EPOCH_MILLISECONDS=$( expr ${SIM_T0_EPOCH_MILLISECONDS} + ${TIME_INTERVAL} \* 1000 ) J2000_EPOCH_SECONDS=$(date -ud "${J2000_REFERENCE_DATETIME}" +"%s") cat << EOF @@ -29,6 +38,8 @@ J2000_REFERENCE_DATETIME="${J2000_REFERENCE_DATETIME}" # In epoch seconds SIM_T0_EPOCH_SECONDS=${SIM_T0_EPOCH_SECONDS} +SIM_T0_EPOCH_MILLISECONDS=${SIM_T0_EPOCH_MILLISECONDS} +SIM_TF_EPOCH_MILLISECONDS=${SIM_TF_EPOCH_MILLISECONDS} J2000_EPOCH_SECONDS=${J2000_EPOCH_SECONDS} # In J2000 seconds @@ -50,7 +61,7 @@ MAVEN_HTTPS_PROXY="--settings ./settings.xml" MAVEN_SETTINGS_FILE=${MAVEN_SETTINGS_FILE} # -NOS3_CFG_PATH=nos3 +NOS3_CFG_PATH=${NOS3_CFG_PATH} # 42 specific configurations FORTYTWO_DISPLAY=:1 diff --git a/deployments/scripts/sidecar/sidecar.sh b/deployments/scripts/sidecar/sidecar.sh index 3909cfa51..b052b0994 100755 --- a/deployments/scripts/sidecar/sidecar.sh +++ b/deployments/scripts/sidecar/sidecar.sh @@ -57,8 +57,8 @@ SERVER=localhost PORT=8090 INSTANCE=nos3 PROCESSOR=realtime -#COMMAND="/CFS/CMD/TO_ENABLE_OUTPUT" -COMMAND="/CFS/CMD/CFE_ES_NOOP" +COMMAND="/CFS/CMD/TO_ENABLE_OUTPUT" +#COMMAND="/CFS/CMD/CFE_ES_NOOP" TLS_VERIFY=False while true; do diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index 10820451e..8b75e32ee 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -32,8 +32,9 @@ services: working_dir: "/opt/nasa-itc/" command: '/entrypoint.sh' volumes: - - ${PWD}/../cfg/InOut/:/opt/nasa-itc/42/NOS3InOut/ - - ${PWD}/${NOS3_CFG_PATH}/cfg/InOut/Inp_IPC.txt:/opt/nasa-itc/42/NOS3InOut/Inp_IPC.txt + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/InOut/:/opt/nasa-itc/42/NOS3InOut/ + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/InOut/Inp_IPC.txt:/opt/nasa-itc/42/NOS3InOut/Inp_IPC.txt + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/InOut/Inp_Sim.txt:/opt/nasa-itc/42/NOS3InOut/Inp_Sim.txt - ${PWD}/services/42/entrypoint.sh:/entrypoint.sh - ${PWD}/services/42/startapp.sh:/startapp.sh ports: @@ -123,7 +124,7 @@ services: working_dir: /home/nos3/builds/nos3/fsw/build/exe/cpu1 command: "/home/nos3/builds/nos3/scripts/fsw/onair_launch.sh" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -189,7 +190,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "/usr/bin/nos_engine_server_standalone -f ./nos_engine_server_config.json" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos_engine_server_config.json:/home/nos3/builds/nos3/sims/build/bin/nos_engine_server_config.json + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos_engine_server_config.json:/home/nos3/builds/nos3/sims/build/bin/nos_engine_server_config.json ports: - "127.0.0.1:12000:12000" - "127.0.0.1:12001:12001" @@ -219,7 +220,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml truth42sim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -239,7 +240,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml stdio-terminal" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -259,7 +260,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml udp-terminal" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -278,7 +279,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-sim-cmdbus-bridge -f ./nos3-simulator.xml" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true @@ -302,7 +303,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml camsim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -326,7 +327,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-css-sim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -351,7 +352,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-eps-sim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -374,7 +375,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-fss-sim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -397,7 +398,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml gps" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -420,7 +421,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-imu-sim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -443,7 +444,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-mag-sim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -466,7 +467,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim0" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -489,7 +490,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim1" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -512,7 +513,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim2" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -539,7 +540,7 @@ services: # working_dir: /home/nos3/builds/nos3/sims/build/bin # command: "/entrypoint.sh" # volumes: - # - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + # - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml # - ${PWD}/radio-sim/entrypoint.sh:/entrypoint.sh # environment: # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} @@ -569,7 +570,7 @@ services: # working_dir: /home/nos3/builds/nos3/gsw/build # command: "./support/standalone" # volumes: -# - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml +# - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml # environment: # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} # networks: @@ -598,7 +599,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "/entrypoint.sh" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - ${PWD}/services/radio-sim/entrypoint2.sh:/entrypoint.sh environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} @@ -623,7 +624,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml sample-sim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -644,7 +645,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-star-tracker-sim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -665,7 +666,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-thruster-sim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -687,7 +688,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-torquer-sim" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} networks: @@ -707,7 +708,7 @@ services: working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml time" volumes: - - ${PWD}/${NOS3_CFG_PATH}/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml + - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml tty: true stdin_open: true privileged: true From 6d02861a8c08463ad0f51919ae11678217d122c2 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 30 Oct 2025 16:26:06 -0400 Subject: [PATCH 033/111] cleaned up path for sidecar.sh --- deployments/Makefile | 2 +- deployments/Taskfile.yml | 2 +- deployments/scripts/{sidecar => }/sidecar.sh | 0 deployments/scripts/sidecar/commanding.py | 16 ------ deployments/scripts/sidecar/entrypoint.sh | 51 -------------------- 5 files changed, 2 insertions(+), 69 deletions(-) rename deployments/scripts/{sidecar => }/sidecar.sh (100%) delete mode 100755 deployments/scripts/sidecar/commanding.py delete mode 100755 deployments/scripts/sidecar/entrypoint.sh diff --git a/deployments/Makefile b/deployments/Makefile index a4de14986..84e573105 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -89,7 +89,7 @@ up-minimum: | down env-create build ## Bring up nos3 in detached state @${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true sidecar: ## Run sidecar to enable output - @${SCRIPTS_DIR}/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" + @${SCRIPTS_DIR}/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" clean: | down down-new ## clean images, cache, volumes, and networks yes | ${CONTAINER_BIN} image prune --filter "dangling=true" diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 011754467..6fd940adf 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -145,7 +145,7 @@ tasks: sidecar: desc: Run sidecar to enable output cmds: - - ${SCRIPTS_DIR}/sidecar/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" + - ${SCRIPTS_DIR}/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" silent: true clean: diff --git a/deployments/scripts/sidecar/sidecar.sh b/deployments/scripts/sidecar.sh similarity index 100% rename from deployments/scripts/sidecar/sidecar.sh rename to deployments/scripts/sidecar.sh diff --git a/deployments/scripts/sidecar/commanding.py b/deployments/scripts/sidecar/commanding.py deleted file mode 100755 index e146437f8..000000000 --- a/deployments/scripts/sidecar/commanding.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -from yamcs.client import YamcsClient - -SERVER=sys.argv[1] -PORT=sys.argv[2] - -client = YamcsClient(f"{SERVER}:{PORT}") -processor = client.get_processor(instance='nos3', processor='realtime') - -command_name = "/CFS/CMD/TO_ENABLE_OUTPUT" -arguments = {} # Example arguments, NOT RELEVANT FOR NOOP command - -command_handle = processor.issue_command(command_name, args=arguments) - -print(f"Issued command: {command_handle}") diff --git a/deployments/scripts/sidecar/entrypoint.sh b/deployments/scripts/sidecar/entrypoint.sh deleted file mode 100755 index 58361ce45..000000000 --- a/deployments/scripts/sidecar/entrypoint.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -x - -SERVER=$1 -SERVER=${SERVER:-localhost} - -PORT=$2 -PORT=${PORT:-8090} - -COMMAND=$3 -COMMAND=${COMMAND:-/CFS/CMD/TO_ENABLE_OUTPUT} - -INSTANCE=nos3 - -curl -X POST http://${SERVER}:${PORT}/api/links/nos3/radio-in:disable -curl -X POST http://${SERVER}:${PORT}/api/links/nos3/radio-out:disable -curl -X POST http://${SERVER}:${PORT}/api/links/nos3/truth42-in:disable - -sleep 5 - -curl -X POST http://${SERVER}:${PORT}/api/links/nos3/radio-in:enable -curl -X POST http://${SERVER}:${PORT}/api/links/nos3/radio-out:enable -curl -X POST http://${SERVER}:${PORT}/api/links/nos3/truth42-in:enable - -pip3 install --upgrade yamcs-client - -#python3 /commanding.py ${SERVER} ${PORT} - -python3 < Date: Fri, 31 Oct 2025 13:52:22 -0400 Subject: [PATCH 034/111] fixed taskfile's env path --- deployments/Makefile | 5 ++++- deployments/Taskfile.yml | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 84e573105..ceb589a65 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -91,7 +91,10 @@ up-minimum: | down env-create build ## Bring up nos3 in detached state sidecar: ## Run sidecar to enable output @${SCRIPTS_DIR}/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" -clean: | down down-new ## clean images, cache, volumes, and networks +clean: | down ## clean nos3 configuration + @cd ../ && make clean + +clean-containers: | down ## clean images, cache, volumes, and networks yes | ${CONTAINER_BIN} image prune --filter "dangling=true" yes | ${CONTAINER_BIN} system prune -a yes | ${CONTAINER_BIN} volume prune diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 6fd940adf..bdb2b4687 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -1,7 +1,7 @@ version: "3" dotenv: - - ./.env + - ./targets/docker/.env env: TARGETS_DIR: ./targets @@ -149,10 +149,16 @@ tasks: silent: true clean: + desc: clean nos3 configuration + deps: + - down + cmds: + - cd ../ && make clean + + clean-containers: desc: clean images, cache, volumes, and networks deps: - down - - down-new cmds: - yes | ${CONTAINER_BIN} image prune --filter "dangling=true" - yes | ${CONTAINER_BIN} system prune -a From d085211378131ac4df0c8ac54bdbe6ab7a439d31 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Fri, 31 Oct 2025 14:42:15 -0400 Subject: [PATCH 035/111] increased yamcs's retries for healthcheck --- deployments/targets/docker/compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index 8b75e32ee..7ebaa0b7e 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -80,7 +80,7 @@ services: test: ["CMD-SHELL", "curl http://localhost:8090/api"] interval: 10s timeout: 5s - retries: 5 + retries: 10 attach: true container_name: cosmos-openc3-operator-1 hostname: cosmos From 2a710d035c262089db9054cefb38054d69acb3af Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 4 Nov 2025 09:32:14 -0500 Subject: [PATCH 036/111] added conditional in Makefile to check for existence of .env --- deployments/Makefile | 8 ++++++++ deployments/scripts/env.sh | 17 +++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index ceb589a65..5abb9e885 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -30,6 +30,14 @@ else export NOS3_CFG_PATH=.. endif +# Check if .env file exists and include it +ifneq (,$(wildcard ${ENVIRO_FILE})) +include ${ENVIRO_FILE} +export $(shell sed 's/=.*//' ${ENVIRO_FILE}) # Export all variables defined in .env +else +$(warning WARNING: ${ENVIRO_FILE} file not found. Please run 'make env-create' to create it.) +endif + build-fortytwo: | env-create set-permissions ## Build fortytwo (42) source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index f92fbf6e4..15ee8b471 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -15,6 +15,7 @@ FSW_SOFTWARE=cfs # This is to define either the standard path, i.e. ${PWD}/nos3, or a local definition NOS3_CFG_PATH=.. +NOS3_MISSION_CFG_FILE=../cfg/nos3-mission.xml ######################################################################## # Avoid updating the below variables unless you know what you are doing @@ -32,6 +33,14 @@ cat << EOF # Auto-generated by ${PWD}/$(basename $0) on $(date -u +"%Y-%m-%dT%H:%M:%S%z") # +# nos3 specific configurations +NOS3_DIR=/home/nos3/.nos3 +NOS3_USER=nos3 + +# This is to define either the standard path, i.e. ${PWD}/nos3, or a local definition +NOS3_CFG_PATH=${NOS3_CFG_PATH} +NOS3_MISSION_CFG_FILE=${NOS3_MISSION_CFG_FILE} + # Simulation specific configurations SIM_T0_DATETIME="${SIM_T0_DATETIME}" J2000_REFERENCE_DATETIME="${J2000_REFERENCE_DATETIME}" @@ -60,9 +69,6 @@ MAVEN_REPO_LOCAL=/home/nos3/.nos3/.m2/repository MAVEN_HTTPS_PROXY="--settings ./settings.xml" MAVEN_SETTINGS_FILE=${MAVEN_SETTINGS_FILE} -# -NOS3_CFG_PATH=${NOS3_CFG_PATH} - # 42 specific configurations FORTYTWO_DISPLAY=:1 FORTYTWO_GIT_URL=https://github.com/nasa-itc/42.git @@ -97,11 +103,6 @@ OPENMCT_GIT_COMMIT=master OPENMCT_NVM_VERSION=v0.40.1 OPENMCT_NODE_VERSION=v21.7.3 -# nos3 specific configurations -NOS3_DIR=/home/nos3/.nos3 -NOS3_USER=nos3 -FLIGHT_SOFTWARE=cfs - # nasa-itc specific configurations BASE_DIR=/opt/nasa-itc From 0156c5be4b1eed0e387351beee52553c649a4f4d Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 6 Nov 2025 16:32:21 -0500 Subject: [PATCH 037/111] success! using docker compose mode is functioning correctly, receiving tc and tm, and 42 is adjusting, plus openmct --- deployments/README.md | 13 ++- deployments/scripts/env.sh | 5 ++ deployments/services/fsw/Dockerfile | 114 +++++++++++++++++------- deployments/targets/docker/compose.yaml | 65 +++++++++----- 4 files changed, 137 insertions(+), 60 deletions(-) diff --git a/deployments/README.md b/deployments/README.md index ddc991208..d884d81a4 100644 --- a/deployments/README.md +++ b/deployments/README.md @@ -101,14 +101,23 @@ more info on `task` can be found here https://taskfile.dev more info on `lazydocker` can be found here https://github.com/jesseduffield/lazydocker ![lazydocker](https://raw.githubusercontent.com/jesseduffield/lazydocker/refs/heads/master/docs/resources/demo3.gif) - ## Test open http://localhost:8090/instance?c=nos3__realtime to access yamcs/gsw open http://localhost:30090/vnc.html to access fortytwo (42) open http://localhost:9000 to access openmct -## Diagram +## Diagrams + +```mermaid +graph TD + A[ubuntu:jammy-20250126]-->|FROM| B + B[nasa-itc/deployments/] -->|build-->push| C(docker.io/ivvitc/nos3-64:dev) + C-->|FROM| D[haisamido/nos3-64/] + D-->|build-->push| E(ghcr.io/haisamido/nos3-64:dev) + +``` + ```mermaid graph TD; %% client([client])-. Ingress-managed
load balancer .->ingress[Ingress]; diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index 15ee8b471..461f808f9 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -17,6 +17,9 @@ FSW_SOFTWARE=cfs NOS3_CFG_PATH=.. NOS3_MISSION_CFG_FILE=../cfg/nos3-mission.xml +NOS3_IMAGE_URI=docker.io/ivvitc/nos3-64:dev +NOS3_BASE_DIR=/home/nos3/.nos3 + ######################################################################## # Avoid updating the below variables unless you know what you are doing ######################################################################## @@ -36,6 +39,8 @@ cat << EOF # nos3 specific configurations NOS3_DIR=/home/nos3/.nos3 NOS3_USER=nos3 +NOS3_IMAGE_URI=${NOS3_IMAGE_URI} +NOS3_BASE_DIR=${NOS3_BASE_DIR} # This is to define either the standard path, i.e. ${PWD}/nos3, or a local definition NOS3_CFG_PATH=${NOS3_CFG_PATH} diff --git a/deployments/services/fsw/Dockerfile b/deployments/services/fsw/Dockerfile index 6bc5a4a89..b51efaa5b 100644 --- a/deployments/services/fsw/Dockerfile +++ b/deployments/services/fsw/Dockerfile @@ -1,63 +1,109 @@ -ARG REGISTRY_HOST=docker.io -ARG IMAGE_USERNAME=ivvitc +ARG REGISTRY_HOST=ghcr.io +ARG IMAGE_USERNAME=haisamido ARG IMAGE_NAME=nos3-64 -ARG IMAGE_TAG=20250217 - -#ARG IMAGE_URI=${REGISTRY_HOST}/${IMAGE_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG} +ARG IMAGE_TAG=dev +ARG IMAGE_URI=${REGISTRY_HOST}/${IMAGE_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG} +#------------------------------------------------------------------------------ -ARG IMAGE_URI=ghcr.io/haisamido/nos3-base:dev +#------------------------------------------------------------------------------ +ARG GIT_URL=https://github.com/nasa/nos3 +ARG GIT_BRANCH=dev -ARG BASE_DIR=/home/nos3/builds/nos3 -ARG FLIGHT_SOFTWARE=cfs +ARG NOS3_USER=nos3 +ARG FSW_SOFTWARE=cfs +ARG GSW_SOFTWARE=yamcs #------------------------------------------------------------------------------ -FROM ${IMAGE_URI} -#------------------------------------------------------------------------------ +FROM ${IMAGE_URI} AS nos3-base + ARG DEBIAN_FRONTEND=noninteractive -#--- PROXY CONFIG (if needed) +#------------------------------------------------------------------------------ +# Proxy configs +#------------------------------------------------------------------------------ ARG MAVEN_HTTPS_PROXY ARG HTTPS_PROXY ARG HTTP_PROXY +ARG NO_PROXY ARG DEPLOYMENT_ENVIRO -ENV MAVEN_HTTPS_PROXY=$MAVEN_HTTPS_PROXY -ENV HTTPS_PROXY=$HTTPS_PROXY -ENV HTTP_PROXY=$HTTP_PROXY +ENV MAVEN_HTTPS_PROXY=${MAVEN_HTTPS_PROXY} +ENV HTTPS_PROXY=${HTTPS_PROXY} +ENV HTTP_PROXY=${HTTP_PROXY} +ENV NO_PROXY=${NO_PROXY} ENV DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} -#--- -#--- GIT CONFIGs +#------------------------------------------------------------------------------ +# Git Configs +#------------------------------------------------------------------------------ ARG GIT_URL ARG GIT_BRANCH ENV GIT_URL=${GIT_URL} ENV GIT_BRANCH=${GIT_BRANCH} -#--- -#--- NOS3 CONFIGs -ARG BASE_DIR -ARG FLIGHT_SOFTWARE +#------------------------------------------------------------------------------ +# NOS3 Configs +#------------------------------------------------------------------------------ +ARG FSW_SOFTWARE +ARG GSW_SOFTWARE +ARG NOS3_USER + +ENV NOS3_USER=${NOS3_USER} +ENV FSW_SOFTWARE=${FSW_SOFTWARE} +ENV GSW_SOFTWARE=${GSW_SOFTWARE} +#------------------------------------------------------------------------------ -ENV BASE_DIR=${BASE_DIR} -ENV FLIGHT_SOFTWARE=${FLIGHT_SOFTWARE} +#------------------------------------------------------------------------------ +# Tools +#------------------------------------------------------------------------------ +RUN apt-get update && \ + apt-get install -y sudo git curl vim make cmake tmux tree python3 pip && \ + apt-get install -y iputils-ping dnsutils lsof net-tools tshark jq && \ + apt-get install -y libgcrypt20-dev && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +RUN git config --global http.sslVerify false + +#------------------------------------------------------------------------------ +# Create a new user named ${NOS3_USER} with a home directory +#------------------------------------------------------------------------------ +RUN useradd -m ${NOS3_USER} +RUN adduser ${NOS3_USER} sudo +RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +# Switch to the newly created user +USER ${NOS3_USER} + +# Create builds directory +RUN mkdir -p /home/${NOS3_USER}/builds/ + +WORKDIR /home/${NOS3_USER}/builds/ + +#------------------------------------------------------------------------------ +# Clone ${GIT_URL} +#------------------------------------------------------------------------------ +RUN git clone --recurse-submodules -b ${GIT_BRANCH} -j4 ${GIT_URL} -#--- +WORKDIR /home/${NOS3_USER}/builds/nos3 -# COPY ./libuart.c ${BASE_DIR}/fsw/apps/hwlib/fsw/linux/libuart.c +RUN chown -R ${NOS3_USER}:${NOS3_USER} /home/${NOS3_USER} -#RUN mv ${BASE_DIR}/fsw/apps/hwlib/fsw/linux/libuart.c ${BASE_DIR}/fsw/apps/hwlib/fsw/linux/libuart.c.orig +RUN make -j6 clean +RUN make -j6 prep +RUN make -j6 config +RUN make -j6 build-cryptolib -WORKDIR ${BASE_DIR} +RUN make -j6 -e FSW_SOFTWARE=${FSW_SOFTWARE} build-fsw +RUN make -j6 build-sim +#RUN make -j6 build-test -RUN make -j8 clean -RUN make -j8 prep -RUN make -j8 config -RUN make -j8 build-cryptolib -RUN make -j8 -e FLIGHT_SOFTWARE=${FLIGHT_SOFTWARE} build-fsw -RUN make -j8 build-sim -RUN make -j8 build-test +# #------------------------------------------------------------------------------ +# # Install the GSW Software +# #------------------------------------------------------------------------------ +RUN ./scripts/gsw/gsw_${GSW_SOFTWARE}_build.sh COPY entrypoint.sh /entrypoint.sh -CMD ["/entrypoint.sh"] +CMD ["/entrypoint.sh"] \ No newline at end of file diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index 7ebaa0b7e..83cb56a87 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -116,7 +116,7 @@ services: nos3-core-00: nos3-onair: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -138,9 +138,26 @@ services: nos3-core-00: nos3-fsw: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env + build: + context: ../../services/fsw + dockerfile: Dockerfile + args: + + DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} + HTTPS_PROXY: ${HTTPS_PROXY} + HTTP_PROXY: ${HTTP_PROXY} + NO_PROXY: ${NO_PROXY} + MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + + NOS3_USER: ${NOS3_USER} + BASE_DIR: ${NOS3_BASE_DIR} + IMAGE_URI: ${NOS3_IMAGE_URI} + FSW_SOFTWARE: ${FSW_SOFTWARE} + GSW_SOFTWARE: ${GSW_SOFTWARE} + healthcheck: test: ["CMD-SHELL", "/usr/bin/pgrep core-cpu1"] interval: 10s @@ -173,7 +190,7 @@ services: nos3-core-00: nos3-nos-engine-server: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -204,7 +221,7 @@ services: nos3-core-00: nos3-truth42sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -231,7 +248,7 @@ services: nos3-core-00: nos3-nos-terminal: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -251,7 +268,7 @@ services: nos3-core-00: nos3-nos-udp-terminal: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -271,7 +288,7 @@ services: nos3-core-00: nos3-nos-sim-bridge: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -290,7 +307,7 @@ services: nos3-core-00: nos3-camsim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -314,7 +331,7 @@ services: nos3-core-00: nos3-css-sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -337,7 +354,7 @@ services: nos3-core-00: nos3-eps-sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -362,7 +379,7 @@ services: nos3-core-00: nos3-fss-sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -385,7 +402,7 @@ services: nos3-core-00: nos3-gps-sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -408,7 +425,7 @@ services: nos3-core-00: nos3-imu-sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -431,7 +448,7 @@ services: nos3-core-00: nos3-mag-sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -454,7 +471,7 @@ services: nos3-core-00: nos3-rw-sim0: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -477,7 +494,7 @@ services: nos3-core-00: nos3-rw-sim1: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -500,7 +517,7 @@ services: nos3-core-00: nos3-rw-sim2: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -551,7 +568,7 @@ services: # nos3-core-00: # nos3-cryptolib: -# image: ghcr.io/haisamido/nos3-base:dev +# image: nos3-base-local:dev # env_file: # - .env # attach: true @@ -580,7 +597,7 @@ services: # nos3-core-00: nos3-radio-sim-cryptolib: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -611,7 +628,7 @@ services: nos3-core-00: nos3-sample-sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -632,7 +649,7 @@ services: nos3-core-00: nos3-startrk-sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -653,7 +670,7 @@ services: nos3-core-00: nos3-thruster-sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -674,7 +691,7 @@ services: nos3-core-00: nos3-torquer-sim: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true @@ -696,7 +713,7 @@ services: nos3-core-00: nos3-time: - image: ghcr.io/haisamido/nos3-base:dev + image: nos3-base-local:dev env_file: - .env attach: true From b68dff93ee49e46f04d81472b099c00316feef1b Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Mon, 10 Nov 2025 12:15:10 -0500 Subject: [PATCH 038/111] added build-fsw, which is really just locally building nos3-base, for now --- deployments/Taskfile.yml | 14 ++++++++++++-- deployments/scripts/env.sh | 5 +++++ deployments/services/fsw/Dockerfile | 16 ++++++++-------- deployments/targets/docker/compose.yaml | 7 +++++-- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index bdb2b4687..8f6a5c2fe 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -65,6 +65,16 @@ tasks: source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-openmct + build-fsw: + desc: Build nos3-base-local (fsw) + deps: + - env-create + - set-permissions + cmds: + - | + source ${ENVIRO_FILE} && \ + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fsw + build: desc: Build all containers deps: @@ -75,7 +85,7 @@ tasks: - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 - | source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct nos3-fsw set-permissions: desc: set filesystem permissions, needed for restricted accounts @@ -194,7 +204,7 @@ tasks: echo; echo "How to access various services:"; echo; \ echo "open http://localhost:8090 to access yamcs/gsw"; \ echo "open http://localhost:30090/vnc.html to access fortytwo (42) and then click Connect"; \ - echo "open http://localhost:9000/#/browse/mine?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=${SIM_TF_EPOCH_MILLISECONDS} to access openmct"; \ + echo "open http://localhost:9000/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=${SIM_TF_EPOCH_MILLISECONDS}&view=plot-single" echo silent: true diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index 461f808f9..ea3d47c1e 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -17,6 +17,9 @@ FSW_SOFTWARE=cfs NOS3_CFG_PATH=.. NOS3_MISSION_CFG_FILE=../cfg/nos3-mission.xml +NOS3_GIT_URL=https://github.com/nasa/nos3 +NOS3_GIT_COMMIT=dev + NOS3_IMAGE_URI=docker.io/ivvitc/nos3-64:dev NOS3_BASE_DIR=/home/nos3/.nos3 @@ -37,6 +40,8 @@ cat << EOF # # nos3 specific configurations +NOS3_GIT_URL=${NOS3_GIT_URL} +NOS3_GIT_COMMIT=${NOS3_GIT_COMMIT} NOS3_DIR=/home/nos3/.nos3 NOS3_USER=nos3 NOS3_IMAGE_URI=${NOS3_IMAGE_URI} diff --git a/deployments/services/fsw/Dockerfile b/deployments/services/fsw/Dockerfile index b51efaa5b..f36f637f6 100644 --- a/deployments/services/fsw/Dockerfile +++ b/deployments/services/fsw/Dockerfile @@ -7,7 +7,7 @@ ARG IMAGE_URI=${REGISTRY_HOST}/${IMAGE_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG} #------------------------------------------------------------------------------ ARG GIT_URL=https://github.com/nasa/nos3 -ARG GIT_BRANCH=dev +ARG GIT_COMMIT=dev ARG NOS3_USER=nos3 ARG FSW_SOFTWARE=cfs @@ -37,17 +37,17 @@ ENV DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} # Git Configs #------------------------------------------------------------------------------ ARG GIT_URL -ARG GIT_BRANCH +ARG GIT_COMMIT ENV GIT_URL=${GIT_URL} -ENV GIT_BRANCH=${GIT_BRANCH} +ENV GIT_COMMIT=${GIT_COMMIT} #------------------------------------------------------------------------------ # NOS3 Configs #------------------------------------------------------------------------------ +ARG NOS3_USER ARG FSW_SOFTWARE ARG GSW_SOFTWARE -ARG NOS3_USER ENV NOS3_USER=${NOS3_USER} ENV FSW_SOFTWARE=${FSW_SOFTWARE} @@ -84,7 +84,7 @@ WORKDIR /home/${NOS3_USER}/builds/ #------------------------------------------------------------------------------ # Clone ${GIT_URL} #------------------------------------------------------------------------------ -RUN git clone --recurse-submodules -b ${GIT_BRANCH} -j4 ${GIT_URL} +RUN git clone --recurse-submodules -b ${GIT_COMMIT} -j4 ${GIT_URL} WORKDIR /home/${NOS3_USER}/builds/nos3 @@ -99,9 +99,9 @@ RUN make -j6 -e FSW_SOFTWARE=${FSW_SOFTWARE} build-fsw RUN make -j6 build-sim #RUN make -j6 build-test -# #------------------------------------------------------------------------------ -# # Install the GSW Software -# #------------------------------------------------------------------------------ +#------------------------------------------------------------------------------ +# Install the relevant GSW Software +#------------------------------------------------------------------------------ RUN ./scripts/gsw/gsw_${GSW_SOFTWARE}_build.sh COPY entrypoint.sh /entrypoint.sh diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index 83cb56a87..907d0b3de 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -22,7 +22,7 @@ services: BASE_DIR: ${FORTYTWO_BASE_DIR} VNC_PASSWORD: ${FORTYTWO_VNC_PASSWORD} healthcheck: - test: ["CMD-SHELL", "/usr/bin/pgrep 42"] + test: ["CMD-SHELL", "/usr/bin/pgrep 42; sleep 2"] interval: 10s timeout: 5s retries: 5 @@ -152,6 +152,9 @@ services: NO_PROXY: ${NO_PROXY} MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} + GIT_URL: ${NOS3_GIT_URL} + GIT_COMMIT: ${NOS3_GIT_COMMIT} + NOS3_USER: ${NOS3_USER} BASE_DIR: ${NOS3_BASE_DIR} IMAGE_URI: ${NOS3_IMAGE_URI} @@ -362,7 +365,7 @@ services: nos3-nos-engine-server: condition: service_healthy nos3-fortytwo: - condition: service_started + condition: service_healthy nos3-fsw: condition: service_healthy container_name: sc01-eps-sim From 94853297644df5772866a24b50e191ce9c3ce578 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Mon, 10 Nov 2025 12:30:26 -0500 Subject: [PATCH 039/111] upated missing Makefile build-fsw, and added more variables to env.sh --- deployments/Makefile | 8 ++++++-- deployments/scripts/env.sh | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 5abb9e885..026a967fd 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -50,9 +50,13 @@ build-openmct: | env-create set-permissions ## Build openmct source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-openmct +build-fsw: | env-create set-permissions ## Build nos3-base-local (fsw) + source ${ENVIRO_FILE} && \ + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fsw + build: | env-create setup-maven set-permissions ## Build all containers source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct nos3-fsw set-permissions: ## set filesystem permissions, needed for restricted accounts find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable @@ -128,7 +132,7 @@ info-services: | env-create ## info on accessing various services echo; echo "How to access various services:"; echo; \ echo "open http://localhost:8090 to access yamcs/gsw"; \ echo "open http://localhost:30090/vnc.html to access fortytwo (42) and then click Connect"; \ - echo "open http://localhost:9000/#/browse/mine?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=$${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=$${SIM_TF_EPOCH_MILLISECONDS} to access openmct"; \ + echo "open http://localhost:9000/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=$${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=$${SIM_TF_EPOCH_MILLISECONDS}&view=plot-single"; \ echo env-create: ## Create .env file from env.sh script diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index ea3d47c1e..d56e4bb17 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -88,6 +88,7 @@ FORTYTWO_STARTUP_FOLDER=NOS3InOut FORTYTWO_RECOMPILE=false FORTYTWO_BASE_DIR=/opt/nasa-itc FORTYTWO_VNC_PASSWORD=$(echo -n "foobar" | shasum -a 256 | cut -d" " -f1) +FORTYTWO_PORT=30090 FORTYTWO_SIM_DATE="$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%m %d %Y")" FORTYTWO_SIM_TIME="$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%H %M %S.%2N")" @@ -102,16 +103,24 @@ COMPONENT_DIR=/home/nos3/builds/nos3/components # yamcs specific configurations YAMCS_DATA_DIR=/home/nos3/.nos3/yamcs/target/yamcs/yamcs-data # YAMCS_ETC_DIR=/home/nos3/.nos3/yamcs/target/yamcs/yamcs-etc + # YAMCS_CACHE_DIR=/home/nos3/.nos3/yamcs/target/yamcs/yam + YAMCS_GIT_URL=https://github.com/nasa-itc/nos3_yamcs_master.git YAMCS_GIT_COMMIT=nos3-dev +YAMCS_INSTANCES=nos3 +YAMCS_PORT=8090 + # openmct specific configurations OPENMCT_IMAGE_URI=docker.io/library/ubuntu:25.04 + OPENMCT_GIT_URL=https://github.com/akhenry/openmct-yamcs.git OPENMCT_GIT_COMMIT=master + OPENMCT_NVM_VERSION=v0.40.1 OPENMCT_NODE_VERSION=v21.7.3 +OPENMCT_PORT=9000 # nasa-itc specific configurations BASE_DIR=/opt/nasa-itc From dcc887d80638e6247419d5cd5659a5ce28aa010b Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 12 Nov 2025 11:30:22 -0500 Subject: [PATCH 040/111] now using COMPOSE_PROJECT_NAME --- deployments/Taskfile.yml | 20 +++--- deployments/scripts/env.sh | 7 +++ deployments/targets/docker/compose.yaml | 81 ++++++++++++++++++++++++- 3 files changed, 100 insertions(+), 8 deletions(-) diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 8f6a5c2fe..3b3c1ef8d 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -8,6 +8,8 @@ env: SERVICES_DIR: ./services SCRIPTS_DIR: ./scripts + COMPOSE_PROJECT_NAME: '{{.COMPOSE_PROJECT_NAME | default "nos3-m01-sc01"}}' + CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " @@ -90,11 +92,15 @@ tasks: set-permissions: desc: set filesystem permissions, needed for restricted accounts cmds: - - find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable - - find . -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable - - find . -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable - - find . -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable - - find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable + - find . -type f -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable + - find . -type f -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable + - find . -type f -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable + - find . -type f -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable + - find ../cfg/build -type f -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable + - find ../cfg/build -type f -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable + - find ../cfg/build -type f -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable + - find ../cfg/build -type f -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable + - find ${HOME}/.nos3/ -type f -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable up: desc: Bring up nos3 in detached state @@ -109,7 +115,7 @@ tasks: - | source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ - ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --force-recreate --remove-orphans + ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d --force-recreate --remove-orphans - sleep 15 - task sidecar - task info-services @@ -120,7 +126,7 @@ tasks: desc: Bring down nos3 cmds: - | - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} down --remove-orphans || true + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} down --remove-orphans || true up-minimum: desc: Bring up nos3 (minimum) in detached state diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index d56e4bb17..af7057fc2 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -22,6 +22,9 @@ NOS3_GIT_COMMIT=dev NOS3_IMAGE_URI=docker.io/ivvitc/nos3-64:dev NOS3_BASE_DIR=/home/nos3/.nos3 +MISSION=m01 +SPACECRAFT=sc01 +COMPOSE_PROJECT_NAME=nos3-${MISSION}-${SPACECRAFT} ######################################################################## # Avoid updating the below variables unless you know what you are doing @@ -39,6 +42,10 @@ cat << EOF # Auto-generated by ${PWD}/$(basename $0) on $(date -u +"%Y-%m-%dT%H:%M:%S%z") # +MISSION=${MISSION} +SPACECRAFT=${SPACECRAFT} +COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME} + # nos3 specific configurations NOS3_GIT_URL=${NOS3_GIT_URL} NOS3_GIT_COMMIT=${NOS3_GIT_COMMIT} diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index 907d0b3de..c84f7f97e 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -1,4 +1,4 @@ -#name: nos3-m01-sc01 +name: ${COMPOSE_PROJECT_NAME} services: nos3-fortytwo: @@ -52,6 +52,9 @@ services: RECOMPILE: ${FORTYTWO_RECOMPILE:-false} BASE_DIR: ${FORTYTWO_BASE_DIR} VNC_PASSWORD: ${FORTYTWO_VNC_PASSWORD} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -108,6 +111,9 @@ services: GSW_SOFTWARE: ${GSW_SOFTWARE} GIT_URL: ${YAMCS_GIT_URL} GIT_COMMIT: ${YAMCS_GIT_COMMIT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -133,6 +139,9 @@ services: FSW_DIR: /home/nos3/builds/nos3/fsw/build/exe/cpu1 HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} SCRIPT_DIR: + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -188,6 +197,9 @@ services: BASE_DIR: /home/nos3/builds/nos3 FSW_DIR: /home/nos3/builds/nos3/fsw/build/exe/cpu1 HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -217,6 +229,9 @@ services: tty: true environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -246,6 +261,9 @@ services: privileged: true environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -266,6 +284,9 @@ services: privileged: true environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -286,6 +307,9 @@ services: privileged: true environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -305,6 +329,9 @@ services: privileged: true environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -326,6 +353,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -350,6 +380,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -375,6 +408,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -398,6 +434,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -421,6 +460,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -444,6 +486,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -467,6 +512,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -490,6 +538,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -513,6 +564,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -536,6 +590,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -623,6 +680,9 @@ services: - ${PWD}/services/radio-sim/entrypoint2.sh:/entrypoint.sh environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -647,6 +707,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -668,6 +731,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -689,6 +755,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -711,6 +780,9 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -734,6 +806,9 @@ services: privileged: true environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -781,6 +856,10 @@ services: ports: - "127.0.0.1:9000:9000" - "127.0.0.1:8080:8080" + environment: + MISSION: ${MISSION} + SPACECRAFT: ${SPACECRAFT} + PROJECT_NAME: ${COMPOSE_PROJECT_NAME} networks: nos3-sc01-00: aliases: From c494d3fa9bb1bb71b92fcb636777abaf03ae0b1a Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 13 Nov 2025 11:40:42 -0500 Subject: [PATCH 041/111] updates but now radio-in is not receiving packets! --- deployments/Makefile | 31 ++++++++--- deployments/Taskfile.yml | 74 +++++++++++++++---------- deployments/scripts/env.sh | 5 +- deployments/targets/docker/compose.yaml | 56 +++++++++---------- 4 files changed, 99 insertions(+), 67 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 026a967fd..102b7ba4b 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -24,6 +24,18 @@ endif # To set default settings.xml and essentially empty for mvn, unless in vmmoc export MAVEN_HTTPS_PROXY=-s./settings.xml +ifdef (PROJECT_NAME) +export PROJECT_NAME=${PROJECT_NAME} +else +export PROJECT_NAME=nos3-m01-sc01 +endif + +ifdef (COMPOSE_PROJECT_NAME) +export COMPOSE_PROJECT_NAME=${PROJECT_NAME} +else +export COMPOSE_PROJECT_NAME=nos3-m01-sc01 +endif + ifdef (NOS3_CFG_PATH) export NOS3_CFG_PATH=${NOS3_CFG_PATH} else @@ -54,7 +66,7 @@ build-fsw: | env-create set-permissions ## Build nos3-base-local (fsw) source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fsw -build: | env-create setup-maven set-permissions ## Build all containers +build: | env-create setup-maven ## Build all containers source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct nos3-fsw @@ -63,28 +75,32 @@ set-permissions: ## set filesystem permissions, needed for restricted accounts find . -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable find . -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable find . -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable + find ../cfg/build -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable + find ../cfg/build -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable + find ../cfg/build -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable + find ../cfg/build -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable -up: | down env-create build config-nos3-mission config ## Bring up nos3 in detached state +up: | down env-create build config-nos3-mission config set-permissions ## Bring up nos3 in detached state sleep 5 @source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ - ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} up -d --force-recreate --remove-orphans + ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d --remove-orphans sleep 15 @$(MAKE) --silent sidecar @$(MAKE) --silent info-services @${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true down: ## Bring down nos3 - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} down --remove-orphans || true + ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} down --remove-orphans || true -up-minimum: | down env-create build ## Bring up nos3 in detached state +up-minimum: | down env-create build config-nos3-mission config set-permissions ## Bring up nos3 in detached state @sleep 5 @source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ ${CONTAINER_COMPOSE_BIN} \ --env-file ${ENVIRO_FILE} \ - -f ${COMPOSE_FILE} up -d \ + -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d \ nos3-fortytwo \ nos3-nos-engine-server \ nos3-fsw \ @@ -148,9 +164,6 @@ install-lazydocker: ## Install lazydocker CLI tool (to view logs, etc) @echo; echo "don't forget to add: ${HOME}/.local/bin:${PATH} to your ~/.bashrc or ~/.zshrc"; echo @echo "watch a Lazydocker demo here: https://www.youtube.com/watch?v=NICqQPxwJWw"; echo -lazydocker: | install-lazydocker ## Run lazydocker CLI tool - @lazydocker - config-nos3-mission: | env-create ## configure nos3-mission.xml to set start-time @source ${ENVIRO_FILE} && \ sed -Ei 's/(\s*)(\).*(\)/\1\2>'$${START_TIME}'<\/\3/g' ../cfg/nos3-mission.xml && \ diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 3b3c1ef8d..4866c44d1 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -8,7 +8,8 @@ env: SERVICES_DIR: ./services SCRIPTS_DIR: ./scripts - COMPOSE_PROJECT_NAME: '{{.COMPOSE_PROJECT_NAME | default "nos3-m01-sc01"}}' + PROJECT_NAME: '{{.PROJECT_NAME | default "nos3-m01-sc01"}}' +# COMPOSE_PROJECT_NAME: '{{.PROJECT_NAME | default "nos3-m01-sc01"}}' CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " @@ -82,7 +83,6 @@ tasks: deps: - env-create - setup-maven - - set-permissions cmds: - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 - | @@ -110,16 +110,16 @@ tasks: - build - config-nos3-mission - config + - set-permissions cmds: - - sleep 5 - | source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d --force-recreate --remove-orphans - - sleep 15 + - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 - task sidecar - task info-services - - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true + - task check-docker-ps silent: true down: @@ -134,28 +134,32 @@ tasks: - down - env-create - build + - config-nos3-mission + - config + - set-permissions cmds: - sleep 5 - | source ${ENVIRO_FILE} && \ - export NOS3_CFG_PATH=${NOS3_CFG_PATH} ; \ - ${CONTAINER_COMPOSE_BIN} \ - --env-file ${ENVIRO_FILE} \ - -f ${COMPOSE_FILE} up -d \ - nos3-fortytwo \ - nos3-nos-engine-server \ - nos3-fsw \ - nos3-gps-sim \ - nos3-time \ - nos3-radio-sim-cryptolib \ - nos3-truth42sim \ - nos3-gsw \ - nos3-openmct \ - --remove-orphans - - sleep 15 + export NOS3_CFG_PATH=${NOS3_CFG_PATH} ; \ + ${CONTAINER_COMPOSE_BIN} \ + --env-file ${ENVIRO_FILE} \ + -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d \ + nos3-fortytwo \ + nos3-nos-engine-server \ + nos3-fsw \ + nos3-gps-sim \ + nos3-time \ + nos3-radio-sim-cryptolib \ + nos3-truth42sim \ + nos3-gsw \ + nos3-openmct \ + --force-recreate \ + --remove-orphans + - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 - task sidecar - task info-services - - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true + - task check-docker-ps silent: true sidecar: @@ -191,6 +195,27 @@ tasks: cp -f ${MAVEN_SETTINGS_FILE} ${SERVICES_DIR}/yamcs/ || true fi + check-docker-ps: + desc: check docker ps for any exited|unhealthy|created|error containers + cmds: + - | + ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true + silent: true + + check-service-ready: + env: + SERVICE_HOST: '{{.SERVICE_HOST | default "localhost"}}' + SERVICE_PORT: '{{.SERVICE_PORT | default "8090"}}' + desc: wait for a service to be ready on a given port + cmds: + - | + echo "Waiting for service ${SERVICE_HOST}:${SERVICE_PORT} to be ready on port ${SERVICE_PORT}..." + until nc -z ${SERVICE_HOST} ${SERVICE_PORT}; do + sleep 1 + done + echo "Service ${SERVICE_HOST}:${SERVICE_PORT} is ready on port ${SERVICE_PORT}!" + silent: true + purge-containers: desc: "WARNING: purge docker/podman images, cache, volumes, and networks" cmds: @@ -232,13 +257,6 @@ tasks: echo "watch a Lazydocker demo here: https://www.youtube.com/watch?v=NICqQPxwJWw"; echo silent: true - lazydocker: - desc: Run lazydocker CLI tool - deps: - - install-lazydocker - cmds: - - lazydocker - config-nos3-mission: desc: configure nos3-mission.xml to set start-time deps: diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index af7057fc2..5f4039cca 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -24,7 +24,7 @@ NOS3_IMAGE_URI=docker.io/ivvitc/nos3-64:dev NOS3_BASE_DIR=/home/nos3/.nos3 MISSION=m01 SPACECRAFT=sc01 -COMPOSE_PROJECT_NAME=nos3-${MISSION}-${SPACECRAFT} +PROJECT_NAME=nos3-${MISSION}-${SPACECRAFT} ######################################################################## # Avoid updating the below variables unless you know what you are doing @@ -44,7 +44,8 @@ cat << EOF MISSION=${MISSION} SPACECRAFT=${SPACECRAFT} -COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME} +PROJECT_NAME=${PROJECT_NAME} +COMPOSE_PROJECT_NAME=${PROJECT_NAME} # nos3 specific configurations NOS3_GIT_URL=${NOS3_GIT_URL} diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index c84f7f97e..2a97e06e5 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -1,4 +1,4 @@ -name: ${COMPOSE_PROJECT_NAME} +#name: ${COMPOSE_PROJECT_NAME} services: nos3-fortytwo: @@ -22,7 +22,7 @@ services: BASE_DIR: ${FORTYTWO_BASE_DIR} VNC_PASSWORD: ${FORTYTWO_VNC_PASSWORD} healthcheck: - test: ["CMD-SHELL", "/usr/bin/pgrep 42; sleep 2"] + test: ["CMD-SHELL", "/usr/bin/pgrep -f 42 | grep -v xterm ; sleep 2"] interval: 10s timeout: 5s retries: 5 @@ -54,7 +54,7 @@ services: VNC_PASSWORD: ${FORTYTWO_VNC_PASSWORD} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -113,7 +113,7 @@ services: GIT_COMMIT: ${YAMCS_GIT_COMMIT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -141,7 +141,7 @@ services: SCRIPT_DIR: MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -199,7 +199,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -231,7 +231,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -263,7 +263,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -286,7 +286,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -309,7 +309,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -331,7 +331,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -355,7 +355,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -382,7 +382,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -410,7 +410,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -436,7 +436,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -462,7 +462,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -488,7 +488,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -514,7 +514,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -540,7 +540,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -566,7 +566,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -592,7 +592,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -682,7 +682,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -709,7 +709,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -733,7 +733,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -757,7 +757,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -782,7 +782,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: nos3-core-00: @@ -808,7 +808,7 @@ services: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: @@ -859,7 +859,7 @@ services: environment: MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} - PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + PROJECT_NAME: ${PROJECT_NAME} networks: nos3-sc01-00: aliases: From fa0a5765c5ef0a80139cf629d4d5671d14ac2681 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Fri, 14 Nov 2025 09:25:31 -0500 Subject: [PATCH 042/111] added cryptolib's standalone.c to local change to override printf(CRYPTO_PROMPT) --- deployments/services/cryptolib/standalone.c | 1071 +++++++++++++++++++ 1 file changed, 1071 insertions(+) create mode 100644 deployments/services/cryptolib/standalone.c diff --git a/deployments/services/cryptolib/standalone.c b/deployments/services/cryptolib/standalone.c new file mode 100644 index 000000000..b4c53e9e5 --- /dev/null +++ b/deployments/services/cryptolib/standalone.c @@ -0,0 +1,1071 @@ +/* Copyright (C) 2009 - 2022 National Aeronautics and Space Administration. + All Foreign Rights are Reserved to the U.S. Government. + + This software is provided "as is" without any warranty of any kind, either expressed, implied, or statutory, + including, but not limited to, any warranty that the software will conform to specifications, any implied warranties + of merchantability, fitness for a particular purpose, and freedom from infringement, and any warranty that the + documentation will conform to the program, or any warranty that the software will be error free. + + In no event shall NASA be liable for any damages, including, but not limited to direct, indirect, special or + consequential damages, arising out of, resulting from, or in any way connected with the software or its + documentation, whether or not based upon warranty, contract, tort or otherwise, and whether or not loss was sustained + from, or arose out of the results of, or use of, the software, documentation or services provided hereunder. + + ITC Team + NASA IV&V + jstar-development-team@mail.nasa.gov +*/ + +/******************************************************************************* +** Standalone CryptoLib Implementation +** UDP interfaces to apply / process each frame type and return the result. +*******************************************************************************/ + +#include "standalone.h" + +/* +** Global Variables +*/ +#define DYNAMIC_LENGTHS 1 + +static volatile uint8_t keepRunning = CRYPTO_LIB_SUCCESS; +static volatile uint8_t tc_seq_num = 0; +static volatile uint8_t tc_vcid = CRYPTO_STANDALONE_FRAMING_VCID; +static volatile uint8_t tc_debug = 1; +static volatile uint8_t tm_debug = 0; +static volatile uint8_t crypto_use_tcp = STANDALONE_TCP ? 1 : 0; + +/* +** Functions +*/ +int32_t crypto_standalone_check_number_arguments(int actual, int expected) +{ + int32_t status = CRYPTO_LIB_SUCCESS; + if (actual != expected) + { + status = CRYPTO_LIB_ERROR; + printf("Invalid command format or number of arguments, type 'help' for more info\n"); + } + return status; +} + +void crypto_standalone_to_lower(char *str) +{ + char *ptr = str; + while (*ptr) + { + *ptr = tolower((unsigned char)*ptr); + ptr++; + } + return; +} + +void crypto_standalone_print_help(void) +{ + printf(CRYPTO_PROMPT "command [args]\n" + "----------------------------------------------------------------------\n" + "exit - Exit app \n" + "help - Display help \n" + "noop - No operation command to device \n" + "reset - Reset CryptoLib \n" + "active - Displays all operational SAs \n" + "tc - Toggle TC debug prints \n" + "tm - Toggle TM debug prints \n" + "vcid # - Change active TC virtual channel \n" + "\n"); +} + +int32_t crypto_standalone_get_command(const char *str) +{ + int32_t status = CRYPTO_CMD_UNKNOWN; + char lcmd[CRYPTO_MAX_INPUT_TOKEN_SIZE]; + + strncpy(lcmd, str, CRYPTO_MAX_INPUT_TOKEN_SIZE); + crypto_standalone_to_lower(lcmd); + + if (strcmp(lcmd, "help") == 0) + { + status = CRYPTO_CMD_HELP; + } + else if (strcmp(lcmd, "exit") == 0) + { + status = CRYPTO_CMD_EXIT; + } + else if (strcmp(lcmd, "noop") == 0) + { + status = CRYPTO_CMD_NOOP; + } + else if (strcmp(lcmd, "reset") == 0) + { + status = CRYPTO_CMD_RESET; + } + else if (strcmp(lcmd, "vcid") == 0) + { + status = CRYPTO_CMD_VCID; + } + else if (strcmp(lcmd, "tc") == 0) + { + status = CRYPTO_CMD_TC_DEBUG; + } + else if (strcmp(lcmd, "tm") == 0) + { + status = CRYPTO_CMD_TM_DEBUG; + } + else if (strcmp(lcmd, "active") == 0) + { + status = CRYPTO_CMD_ACTIVE; + } + return status; +} + +int32_t crypto_standalone_process_command(int32_t cc, int32_t num_tokens, char *tokens) +{ + int32_t status = CRYPTO_LIB_SUCCESS; + + /* Process command */ + switch (cc) + { + case CRYPTO_CMD_HELP: + crypto_standalone_print_help(); + break; + + case CRYPTO_CMD_EXIT: + keepRunning = CRYPTO_LIB_ERROR; + break; + + case CRYPTO_CMD_NOOP: + if (crypto_standalone_check_number_arguments(num_tokens, 0) == CRYPTO_LIB_SUCCESS) + { + printf("NOOP command success\n"); + } + break; + + case CRYPTO_CMD_RESET: + if (crypto_standalone_check_number_arguments(num_tokens, 0) == CRYPTO_LIB_SUCCESS) + { + status = crypto_reset(); + printf("Reset command received\n"); + } + break; + + case CRYPTO_CMD_VCID: + if (crypto_standalone_check_number_arguments(num_tokens, 1) == CRYPTO_LIB_SUCCESS) + { + uint8_t vcid = (uint8_t)atoi(&tokens[0]); + /* Confirm new VCID valid */ + if (vcid < 64) + { + SaInterface sa_if = get_sa_interface_inmemory(); + SecurityAssociation_t *test_association = NULL; + int32_t status = CRYPTO_LIB_SUCCESS; + + status = sa_if->sa_get_operational_sa_from_gvcid(0, SCID, vcid, 0, &test_association); + if (status == CRYPTO_LIB_SUCCESS) + { + Crypto_saPrint(test_association); + } + printf("Get_SA_Status: %d\n", status); + if ((status == CRYPTO_LIB_SUCCESS) && (test_association->sa_state == SA_OPERATIONAL) && + (test_association->gvcid_blk.mapid == TYPE_TC) && (test_association->gvcid_blk.scid == SCID)) + { + tc_vcid = vcid; + printf("Changed active virtual channel (VCID) to %d \n", tc_vcid); + } + else + { + printf("Error - virtual channel (VCID) %d is invalid! Sticking with prior vcid %d \n", vcid, + tc_vcid); + status = CRYPTO_LIB_SUCCESS; + } + } + else + { + printf("Error - virtual channel (VCID) %d must be less than 64! Sticking with prior vcid %d \n", + vcid, tc_vcid); + } + } + break; + + case CRYPTO_CMD_TC_DEBUG: + if (crypto_standalone_check_number_arguments(num_tokens, 0) == CRYPTO_LIB_SUCCESS) + { + if (tc_debug == 0) + { + tc_debug = 1; + printf("Enabled TC debug prints! \n"); + } + else + { + tc_debug = 0; + printf("Disabled TC debug prints! \n"); + } + } + break; + + case CRYPTO_CMD_TM_DEBUG: + if (crypto_standalone_check_number_arguments(num_tokens, 0) == CRYPTO_LIB_SUCCESS) + { + if (tm_debug == 0) + { + tm_debug = 1; + printf("Enabled TM debug prints! \n"); + } + else + { + tm_debug = 0; + printf("Disabled TM debug prints! \n"); + } + } + break; + + case CRYPTO_CMD_ACTIVE: + if (crypto_standalone_check_number_arguments(num_tokens, 0) == CRYPTO_LIB_SUCCESS) + { + SaInterface sa_if = get_sa_interface_inmemory(); + SecurityAssociation_t *test_association = NULL; + + printf("Active SAs: \n\t"); + for (int i = 0; i < NUM_SA; i++) + { + sa_if->sa_get_from_spi(i, &test_association); + if (test_association->sa_state == SA_OPERATIONAL) + { + if (i < 5) + { + printf("TC - "); + } + if (i > 4 && i < 9) + { + printf("TM - "); + } + if (i > 8 && i < 13) + { + printf("AOS - "); + } + if (i == 63) + { + printf("ExProc - "); + } + + printf("SPI %d - VCID %d - EST %d - AST %d\n\t", i, test_association->gvcid_blk.vcid, + test_association->est, test_association->ast); + } + } + printf("\n"); + } + break; + + default: + printf("Invalid command format, type 'help' for more info\n"); + status = CRYPTO_LIB_ERROR; + break; + } + + return status; +} + +int32_t crypto_host_to_ip(const char *hostname, char *ip) +{ + struct addrinfo hints, *res, *p; + int status; + void *addr; + + memset(&hints, 0, sizeof hints); + hints.ai_family = AF_INET; // Uses IPV4 only. AF_UNSPEC for IPV6 Support + hints.ai_socktype = SOCK_STREAM; + + if ((status = getaddrinfo(hostname, NULL, &hints, &res)) != 0) + { + return 1; + } + + for (p = res; p != NULL; p = p->ai_next) + { + struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr; + addr = &(ipv4->sin_addr); + + // Convert IP to String + if (inet_ntop(p->ai_family, addr, ip, INET_ADDRSTRLEN) == NULL) + { + freeaddrinfo(res); + return 1; + } + + freeaddrinfo(res); + return 0; // IP Found + } + freeaddrinfo(res); + return 1; // IP NOT Found +} + +int32_t crypto_standalone_socket_init(udp_info_t *sock, int32_t port, uint8_t bind_sock, int connection) +{ + int status = CRYPTO_LIB_SUCCESS; + int optval; + socklen_t optlen; + + sock->port = port; + + if (connection == 1) + { + /* Creating TCP socket */ + sock->sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); + + if (sock->sockfd == -1) + { + printf("tcp_init: Socket create error on port %d\n", sock->port); + return CRYPTO_LIB_ERROR; + } + + /* Determine IP */ + sock->saddr.sin_family = AF_INET; + if (inet_addr(sock->ip_address) != INADDR_NONE) + { + sock->saddr.sin_addr.s_addr = inet_addr(sock->ip_address); + } + else + { + char ip[16]; + int check = crypto_host_to_ip(sock->ip_address, ip); + if (check == 0) + { + sock->saddr.sin_addr.s_addr = inet_addr(ip); + } + else + { + printf("socket_init: Failed to resolve hostname '%s'\n", sock->ip_address); + return CRYPTO_LIB_ERROR; + } + } + sock->saddr.sin_port = htons(sock->port); + } + else + { + /* Create UDP socket */ + sock->sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); + if (sock->sockfd == -1) + { + printf("udp_init: Socket create error port %d \n", sock->port); + } + + /* Determine IP */ + sock->saddr.sin_family = AF_INET; + if (inet_addr(sock->ip_address) != INADDR_NONE) + { + sock->saddr.sin_addr.s_addr = inet_addr(sock->ip_address); + } + else + { + char ip[16]; + int check = crypto_host_to_ip(sock->ip_address, ip); + if (check == 0) + { + sock->saddr.sin_addr.s_addr = inet_addr(ip); + } + } + sock->saddr.sin_port = htons(sock->port); + } + + if (crypto_use_tcp && ((sock->port == TC_APPLY_FWD_PORT || sock->port == TM_PROCESS_PORT))) + { + if (bind_sock != 0) + { + // TCP server: bind, listen, accept + if (bind(sock->sockfd, (struct sockaddr *)&sock->saddr, sizeof(sock->saddr)) != 0) + { + printf("tcp_init: Bind failed on port %d\n", sock->port); + return CRYPTO_LIB_ERROR; + } + + if (listen(sock->sockfd, 1) != 0) + { + printf("tcp_init: Listen failed on port %d\n", sock->port); + return CRYPTO_LIB_ERROR; + } + + int clientfd = accept(sock->sockfd, NULL, NULL); + if (clientfd < 0) + { + printf("tcp_init: Accept failed on port %d\n", sock->port); + return CRYPTO_LIB_ERROR; + } + + // Replace listener with connected client socket + // close(sock->sockfd); //may be needed + sock->sockfd = clientfd; + } + else + { + // TCP client: connect + if (connect(sock->sockfd, (struct sockaddr *)&sock->saddr, sizeof(sock->saddr)) < 0) + { + printf("tcp_init: Connect failed to %s:%d\n", sock->ip_address, sock->port); + return CRYPTO_LIB_ERROR; + } + } + } + else + { + // UDP: bind only if needed + if (bind_sock == 0 && sock->port != TM_PROCESS_FWD_PORT && sock->port != TC_APPLY_FWD_PORT) + { + status = bind(sock->sockfd, (struct sockaddr *)&sock->saddr, sizeof(sock->saddr)); + if (status != 0) + { + perror("bind"); + + printf("udp_init: Bind failed on port %d\n", sock->port); + return CRYPTO_LIB_ERROR; + } + // } + } + else + { + if (crypto_use_tcp == 0 && bind_sock == 1 && sock->port == TM_PROCESS_PORT) + { + status = bind(sock->sockfd, (struct sockaddr *)&sock->saddr, sizeof(sock->saddr)); + if (status != 0) + { + perror("bind"); + + printf("udp_init: Bind failed on port %d\n", sock->port); + return CRYPTO_LIB_ERROR; + } + } + } + } + + // Keep-alive socket option (not harmful for UDP, useful for TCP) + optval = 1; + optlen = sizeof(optval); + setsockopt(sock->sockfd, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen); + + return status; +} + +int32_t crypto_reset(void) +{ + int32_t status; + + status = Crypto_Shutdown(); + if (status != CRYPTO_LIB_SUCCESS) + { + printf("CryptoLib initialization failed with error %d \n", status); + } + + status = Crypto_SC_Init(); + if (status != CRYPTO_LIB_SUCCESS) + { + printf("CryptoLib initialization failed with error %d \n", status); + } + + return status; +} + +void crypto_standalone_tc_frame(uint8_t *in_data, uint16_t in_length, uint8_t *out_data, uint16_t *out_length) +{ + /* TC Length */ + if (DYNAMIC_LENGTHS) + { + uint8_t segment_hdr_len = 1; + uint8_t fecf_len = tc_current_managed_parameters_struct.has_fecf ? 2 : 0; + + *out_length = TC_FRAME_HEADER_SIZE + segment_hdr_len + in_length + fecf_len; + } + else + { + *out_length = CRYPTO_STANDALONE_FRAMING_TC_DATA_LEN + 6; + } + + /* TC Header */ + out_data[0] = 0x20; + out_data[1] = CRYPTO_STANDALONE_FRAMING_SCID; + out_data[2] = ((tc_vcid << 2) & 0xFC) | (((*out_length - 1) >> 8) & 0x03); + out_data[3] = (*out_length - 1) & 0xFF; + out_data[4] = tc_seq_num++; + + /* Segement Header */ + out_data[5] = 0xC0; + + /* SDLS Header */ + + /* TC Data */ + memcpy(&out_data[6], in_data, in_length); + + /* SDLS Trailer */ +} + +void *crypto_standalone_tc_apply(void *socks) +{ + int32_t status = CRYPTO_LIB_SUCCESS; + udp_interface_t *tc_socks = (udp_interface_t *)socks; + udp_info_t *tc_read_sock = &tc_socks->read; + udp_info_t *tc_write_sock = &tc_socks->write; + + uint8_t tc_apply_in[TC_MAX_FRAME_SIZE]; + uint16_t tc_in_len = 0; + uint8_t *tc_out_ptr; + uint16_t tc_out_len = 0; + +#ifdef CRYPTO_STANDALONE_HANDLE_FRAMING + uint8_t tc_framed[TC_MAX_FRAME_SIZE] = {0}; +#endif + + int sockaddr_size = sizeof(struct sockaddr_in); + + /* Prepare */ + memset(tc_apply_in, 0x00, sizeof(tc_apply_in)); + + while (keepRunning == CRYPTO_LIB_SUCCESS) + { + // /* Receive */ + status = recvfrom(tc_read_sock->sockfd, tc_apply_in, sizeof(tc_apply_in), 0, + (struct sockaddr *)&tc_read_sock->ip_address, (socklen_t *)&sockaddr_size); + if (status != -1) + { + tc_in_len = status; + if (tc_debug == 1) + { + printf("crypto_standalone_tc_apply - received[%d]: 0x", tc_in_len); + for (int i = 0; i < status; i++) + { + printf("%02x", tc_apply_in[i]); + } + printf("\n"); + } + +/* Frame */ +#ifdef CRYPTO_STANDALONE_HANDLE_FRAMING + crypto_standalone_tc_frame(tc_apply_in, tc_in_len, tc_framed, &tc_out_len); + memcpy(tc_apply_in, tc_framed, tc_out_len); + tc_in_len = tc_out_len; + tc_out_len = 0; + if (tc_debug == 1) + { + printf("crypto_standalone_tc_apply - framed[%d]: 0x", tc_in_len); + for (int i = 0; i < tc_in_len; i++) + { + printf("%02x", tc_apply_in[i]); + } + printf("\n"); + } +#endif + + /* Process */ + status = Crypto_TC_ApplySecurity(tc_apply_in, tc_in_len, &tc_out_ptr, &tc_out_len); + if (status == CRYPTO_LIB_SUCCESS) + { + if (tc_debug == 1) + { + printf("crypto_standalone_tc_apply - status = %d, encrypted[%d]: 0x", status, tc_out_len); + for (int i = 0; i < tc_out_len; i++) + { + printf("%02x", tc_out_ptr[i]); + } + printf("\n"); + } + // printf("About to write to port %d!\n", tc_write_sock->port); + /* Reply */ + if (crypto_use_tcp) + { + status = send(tc_write_sock->sockfd, tc_out_ptr, tc_out_len, 0); + } + else + { + status = sendto(tc_write_sock->sockfd, tc_out_ptr, tc_out_len, 0, + (struct sockaddr *)&tc_write_sock->saddr, sizeof(tc_write_sock->saddr)); + } + if ((status == -1) || (status != tc_out_len)) + { + printf("crypto_standalone_tc_apply - Reply error %d \n", status); + } + // printf("Allegedly wrote %d bytes to port %d!\n", tc_out_len, tc_write_sock->port); + } + else + { + printf("crypto_standalone_tc_apply - ApplySecurity error %d \n", status); + } + + /* Reset */ + memset(tc_apply_in, 0x00, sizeof(tc_apply_in)); + memset(tc_framed, 0x00, sizeof(tc_framed)); + tc_in_len = 0; + tc_out_len = 0; + if (!tc_out_ptr) + free(tc_out_ptr); + if (tc_debug == 1) + { +#ifdef CRYPTO_STANDALONE_TC_APPLY_DEBUG + printf("\n"); +#endif + } + } + + /* Delay */ + usleep(100); + } + close(tc_read_sock->sockfd); + close(tc_write_sock->sockfd); + return tc_read_sock; +} + +void crypto_standalone_tm_frame(uint8_t *in_data, uint16_t in_length, uint8_t *out_data, uint16_t *out_length, + uint16_t spi) +{ + SaInterface sa_if = get_sa_interface_inmemory(); + SecurityAssociation_t *sa_ptr = NULL; + int32_t status = CRYPTO_LIB_SUCCESS; + + status = sa_if->sa_get_from_spi(spi, &sa_ptr); + if (status != CRYPTO_LIB_SUCCESS) + { + printf("WARNING - SA IS NULL!\n"); + } + + // Calculate security headers and trailers + uint8_t header_length = + TM_PRI_HDR_LENGTH + SDLS_SPI_LENGTH + sa_ptr->shivf_len + sa_ptr->shplf_len + sa_ptr->shsnf_len; + + uint8_t trailer_length = sa_ptr->stmacf_len; + if (tm_current_managed_parameters_struct.has_fecf == TM_HAS_FECF) + { + trailer_length += 2; + } + if (tm_current_managed_parameters_struct.has_ocf == TM_HAS_OCF) + { + trailer_length += 4; + } + + /* TM Length */ + *out_length = (uint16_t)in_length - header_length - trailer_length; + + /* TM Header */ + memcpy(out_data, &in_data[header_length], in_length - header_length - trailer_length); +} + +void crypto_standalone_tm_debug_recv(int32_t status, int tm_process_len, uint8_t *tm_process_in) +{ + if (tm_debug == 1) + { + printf("crypto_standalone_tm_process - received[%d]: 0x", tm_process_len); + for (int i = 0; i < status; i++) + { + printf("%02x", tm_process_in[i]); + } + printf("\n"); + } +} + +void crypto_standalone_tm_debug_process(uint8_t *tm_process_in) +{ + if (tm_debug == 1) + { + printf("Printing first bytes of Tf Pri Hdr:\n\t"); + for (int i = 0; i < 6; i++) + { + printf("%02X", *(tm_process_in + 4 + i)); + } + printf("\n"); + printf("Processing frame WITH ASM...\n"); + } +} + +void crypto_standalone_spp_telem_or_idle(int32_t *status, uint8_t *tm_ptr, uint16_t *spp_len, udp_interface_t *tm_socks, + int *tm_process_len) +{ + udp_info_t *tm_write_sock = &tm_socks->write; + + if ((tm_ptr[0] == 0x08) || (tm_ptr[0] == 0x09) || ((tm_ptr[0] == 0x07) && (tm_ptr[1] == 0xff)) || + (tm_ptr[0] == 0x0F && tm_ptr[1] == 0xFD)) + { + *spp_len = (((0xFFFF & tm_ptr[4]) << 8) | tm_ptr[5]) + 7; +#ifdef CRYPTO_STANDALONE_TM_PROCESS_DEBUG + printf("crypto_standalone_tm_process - SPP[%d]: 0x", *spp_len); + for (int i = 0; i < *spp_len; i++) + { + printf("%02x", tm_ptr[i]); + } + printf("\n"); +#endif + // Send all SPP telemetry packets + // 0x09 for HK/Device TLM Packets (Generic Components) + // 0x0FFD = CFDP + if (tm_ptr[0] == 0x08 || tm_ptr[0] == 0x09 || (tm_ptr[0] == 0x0f && tm_ptr[1] == 0xfd)) + { + *status = sendto(tm_write_sock->sockfd, tm_ptr, *spp_len, 0, (struct sockaddr *)&tm_write_sock->saddr, + sizeof(tm_write_sock->saddr)); + } + // Only send idle packets if configured to do so + else + { +#ifdef CRYPTO_STANDALONE_DISCARD_IDLE_PACKETS + // Don't forward idle packets + *status = *spp_len; +#else + *status = sendto(tm_write_sock->sockfd, tm_ptr, *spp_len, 0, (struct sockaddr *)&tm_write_sock->saddr, + sizeof(tm_write_sock->saddr)); +#endif + } + + // Check status + if ((*status == -1) || (*status != *spp_len)) + { + printf("crypto_standalone_tm_process - Reply error %d \n", *status); + } + + *tm_process_len -= *spp_len; + } + else if ((tm_ptr[0] == 0xFF && tm_ptr[1] == 0x48) || (tm_ptr[0] == 0x00 && tm_ptr[1] == 0x00) || + (tm_ptr[0] == 0x02 && tm_ptr[1] == 0x00) || (tm_ptr[0] == 0xFF && tm_ptr[1] == 0xFF)) + { + // TODO: Why 0x0200? + // Idle Frame + // Idle Frame is entire length of remaining data +#ifdef CRYPTO_STANDALONE_DISCARD_IDLE_FRAMES + // Don't forward idle frame + *status = *spp_len; +#else + *status = sendto(tm_write_sock->sockfd, tm_ptr, *spp_len, 0, (struct sockaddr *)&tm_write_sock->saddr, + sizeof(tm_write_sock->saddr)); + if ((*status == -1) || (*status != *spp_len)) + { + printf("crypto_standalone_tm_process - Reply error %d \n", *status); + } +#endif + *tm_process_len = 0; + } + else + { + printf("crypto_standalone_tm_process - SPP loop error, expected idle packet or frame! tm_ptr = 0x%02x%02x \n", + tm_ptr[0], tm_ptr[1]); + *tm_process_len = 0; + } +} + +void *crypto_standalone_tm_process(void *socks) +{ + int32_t status = CRYPTO_LIB_SUCCESS; + udp_interface_t *tm_socks = (udp_interface_t *)socks; + udp_info_t *tm_read_sock = &tm_socks->read; + udp_info_t *tm_write_sock = &tm_socks->write; + + uint8_t tm_process_in[TM_CADU_SIZE]; // Accounts for ASM automatically based on #def + int tm_process_len = 0; + uint16_t spp_len = 0; + uint8_t *tm_ptr; + uint16_t tm_out_len = 0; + +#ifdef CRYPTO_STANDALONE_HANDLE_FRAMING + uint8_t tm_framed[TM_CADU_SIZE]; + uint16_t tm_framed_len = 0; +#endif + + int sockaddr_size = sizeof(struct sockaddr_in); + + while (keepRunning == CRYPTO_LIB_SUCCESS) + { + /* Receive */ + if (crypto_use_tcp) + { + status = recv(tm_read_sock->sockfd, tm_process_in, sizeof(tm_process_in), 0); + if (status == -1) + { + printf(" Problem with recv TCP tm_proccess: status = %d \n", status); + } + } + else + { + status = recvfrom(tm_read_sock->sockfd, tm_process_in, sizeof(tm_process_in), 0, + (struct sockaddr *)&tm_read_sock->ip_address, (socklen_t *)&sockaddr_size); + } + if (status != -1) + { + tm_process_len = status; + /* Receive */ + crypto_standalone_tm_debug_recv(status, tm_process_len, tm_process_in); + /* Process */ +#ifdef TM_CADU_HAS_ASM + // Process Security skipping prepended ASM + crypto_standalone_tm_debug_process(tm_process_in); + // Account for ASM length + if (tm_process_in[4] == 0x40) + { + status = Crypto_AOS_ProcessSecurity(tm_process_in + 4, (const uint16_t)tm_process_len - 4, &tm_ptr, + &tm_out_len); + if (status != 0) + { + printf("Crypto_AOS_ProcessSecurity Failed with status = %d\n", status); + } + } + else + { + status = Crypto_TM_ProcessSecurity(tm_process_in + 4, (const uint16_t)tm_process_len - 4, &tm_ptr, + &tm_out_len); + if (status != 0) + { + printf("Crypto_TM_ProcessSecurity Failed with status = %d\n", status); + } + } +#else + if (tm_debug == 1) + { + printf("Processing frame without ASM...\n"); + } + status = Crypto_TM_ProcessSecurity(tm_process_in, (const uint16_t)tm_process_len, &tm_ptr, &tm_out_len); + if (status != 0) + { + printf("Crypto_TM_ProcessSecurity Failed with status = %d\n", status); + } +#endif + if (status == CRYPTO_LIB_SUCCESS) + { + if (tm_debug == 1) + { + if ((tm_ptr[4] == 0x07) && (tm_ptr[5] == 0xFF)) + { + // OID Frame + } + else + { + printf("crypto_standalone_tm_process: 1 - status = %d, decrypted[%d]: 0x", status, tm_out_len); + for (int i = 0; i < tm_out_len; i++) + { + printf("%02x", tm_ptr[i]); + } + printf("\n"); + } + } + +/* Frame */ +#ifdef CRYPTO_STANDALONE_HANDLE_FRAMING +#ifdef TM_CADU_HAS_ASM + uint16_t spi = (tm_process_in[10] << 8) | tm_process_in[11]; + crypto_standalone_tm_frame(tm_ptr, tm_out_len, tm_framed, &tm_framed_len, spi); +#else + uint16_t spi = (tm_process_in[6] << 8) | tm_process_in[7]; + crypto_standalone_tm_frame(tm_process_in, tm_process_len, tm_framed, &tm_framed_len, spi); +#endif + memcpy(tm_process_in, tm_framed, tm_framed_len); + tm_process_len = tm_framed_len; + tm_framed_len = 0; + + if (tm_debug == 1) + // Note: Need logic to allow broken packet assembly + { + printf("crypto_standalone_tm_process: 2 - beginning after first header pointer - deframed[%d]: 0x", + tm_process_len); + for (int i = 0; i < tm_process_len; i++) + { + printf("%02x", tm_framed[i]); + } + printf("\n"); + } +#endif + + /* Space Packet Protocol Loop */ + tm_ptr = &tm_process_in[0]; + while (tm_process_len > 5) + { + // SPP Telemetry OR SPP Idle Packet + crypto_standalone_spp_telem_or_idle(&status, tm_ptr, &spp_len, tm_socks, &tm_process_len); + tm_ptr = &tm_ptr[spp_len]; + } + } + else + { + printf("crypto_standalone_tm_process - ProcessSecurity error %d \n", status); + } + + /* Reset */ + memset(tm_process_in, 0x00, sizeof(tm_process_in)); + tm_process_len = 0; + memset(tm_ptr, 0x00, sizeof(tm_process_in)); +#ifdef CRYPTO_STANDALONE_TM_PROCESS_DEBUG + printf("\n"); +#endif + } + + /* Delay */ + usleep(10); + } + close(tm_read_sock->sockfd); + close(tm_write_sock->sockfd); + return tm_read_sock; +} + +void crypto_standalone_cleanup(const int signal) +{ + if (signal == SIGINT) + { + printf("\n"); + printf("Received CTRL+C, cleaning up... \n"); + } + /* Signal threads to stop */ + keepRunning = CRYPTO_LIB_ERROR; + exit(signal); + return; +} + +int main(int argc, char *argv[]) +{ + int32_t status = CRYPTO_LIB_SUCCESS; + + char input_buf[CRYPTO_MAX_INPUT_BUF]; + char input_tokens[CRYPTO_MAX_INPUT_TOKENS][CRYPTO_MAX_INPUT_TOKEN_SIZE]; + int num_input_tokens; + int cmd; + char *token_ptr; + + udp_interface_t tc_apply; + udp_interface_t tm_process; + + pthread_t tc_apply_thread; + pthread_t tm_process_thread; + + tc_apply.read.ip_address = CRYPTOLIB_HOSTNAME; + tc_apply.read.port = TC_APPLY_PORT; + tc_apply.write.ip_address = SC_HOSTNAME; + tc_apply.write.port = TC_APPLY_FWD_PORT; + tm_process.read.ip_address = CRYPTOLIB_HOSTNAME; + tm_process.read.port = TM_PROCESS_PORT; + tm_process.write.ip_address = GSW_HOSTNAME; + tm_process.write.port = TM_PROCESS_FWD_PORT; + + printf("Starting CryptoLib in standalone mode! \n"); + if (argc != 1) + { + printf("Invalid number of arguments! \n"); + printf(" Expected zero but received: %s \n", argv[1]); + } + printf("CryptoLib using %s sockets\n", crypto_use_tcp ? "TCP" : "UDP"); + + /* Catch CTRL+C */ + signal(SIGINT, crypto_standalone_cleanup); + + /* Startup delay */ + sleep(10); + + /* Initialize CryptoLib */ + status = crypto_reset(); + if (status != CRYPTO_LIB_SUCCESS) + { + printf("CryptoLib initialization failed with error %d \n", status); + keepRunning = CRYPTO_LIB_ERROR; + } + + /* Initialize sockets */ + if (keepRunning == CRYPTO_LIB_SUCCESS) + { + status = crypto_standalone_socket_init(&tc_apply.read, TC_APPLY_PORT, 0, 0); // udp 6010 + if (status != CRYPTO_LIB_SUCCESS) + { + printf("crypto_standalone_socket_init tc_apply.read failed with status %d \n", status); + keepRunning = CRYPTO_LIB_ERROR; + } + else + { + status = crypto_standalone_socket_init(&tc_apply.write, TC_APPLY_FWD_PORT, 0, + crypto_use_tcp); // tcp, connect() 8010 + if (status != CRYPTO_LIB_SUCCESS) + { + printf("crypto_standalone_socket_init tc_apply.write failed with status %d \n", status); + keepRunning = CRYPTO_LIB_ERROR; + } + } + } + + if (keepRunning == CRYPTO_LIB_SUCCESS) + { + status = + crypto_standalone_socket_init(&tm_process.read, TM_PROCESS_PORT, 1, crypto_use_tcp); // tcp, accept() 8011 + if (status != CRYPTO_LIB_SUCCESS) + { + printf("crypto_standalone_socket_init tm_apply.read failed with status %d \n", status); + keepRunning = CRYPTO_LIB_ERROR; + } + else + { + status = crypto_standalone_socket_init(&tm_process.write, TM_PROCESS_FWD_PORT, 0, 0); // udp 6011 + if (status != CRYPTO_LIB_SUCCESS) + { + printf("crypto_standalone_socket_init tm_process.write failed with status %d \n", status); + keepRunning = CRYPTO_LIB_ERROR; + } + } + } + + /* Start threads */ + if (keepRunning == CRYPTO_LIB_SUCCESS) + { + printf(" TC Apply \n"); + printf(" Read, UDP - %s : %d \n", tc_apply.read.ip_address, tc_apply.read.port); + printf(" Write, %s - %s : %d \n", crypto_use_tcp ? "TCP" : "UDP", tc_apply.write.ip_address, + tc_apply.write.port); + printf(" TM Process \n"); + printf(" Read, %s - %s : %d \n", crypto_use_tcp ? "TCP" : "UDP", tm_process.read.ip_address, + tm_process.read.port); + printf(" Write, UDP - %s : %d \n", tm_process.write.ip_address, tm_process.write.port); + printf("\n"); + + status = pthread_create(&tc_apply_thread, NULL, *crypto_standalone_tc_apply, &tc_apply); + if (status < 0) + { + perror("Failed to create tc_apply_thread thread"); + keepRunning = CRYPTO_LIB_ERROR; + } + else + { + status = pthread_create(&tm_process_thread, NULL, *crypto_standalone_tm_process, &tm_process); + if (status < 0) + { + perror("Failed to create tm_process_thread thread"); + keepRunning = CRYPTO_LIB_ERROR; + } + } + } + + /* Main loop */ + while (keepRunning == CRYPTO_LIB_SUCCESS) + { + num_input_tokens = -1; + cmd = CRYPTO_CMD_UNKNOWN; + + /* Read user input */ + printf(CRYPTO_PROMPT); + fgets(input_buf, CRYPTO_MAX_INPUT_BUF, stdin); + + /* Tokenize line buffer */ + token_ptr = strtok(input_buf, " \t\n"); + while ((num_input_tokens < CRYPTO_MAX_INPUT_TOKENS) && (token_ptr != NULL)) + { + if (num_input_tokens == -1) + { + /* First token is command */ + cmd = crypto_standalone_get_command(token_ptr); + } + else + { + strncpy(input_tokens[num_input_tokens], token_ptr, CRYPTO_MAX_INPUT_TOKEN_SIZE); + } + token_ptr = strtok(NULL, " \t\n"); + num_input_tokens++; + } + + /* Process command if valid */ + if (num_input_tokens >= 0) + { + crypto_standalone_process_command(cmd, num_input_tokens, &input_tokens[0][0]); + } + } + + /* Cleanup */ + close(tc_apply.read.sockfd); + close(tc_apply.write.sockfd); + close(tm_process.read.sockfd); + close(tm_process.write.sockfd); + + Crypto_Shutdown(); + + printf("\n"); + exit(status); +} From 7f17a304fadde05c6a7119990081b061c07f26dc Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Fri, 14 Nov 2025 09:29:07 -0500 Subject: [PATCH 043/111] commented out printf(CRYPTO_PROMPT) --- deployments/services/cryptolib/standalone.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deployments/services/cryptolib/standalone.c b/deployments/services/cryptolib/standalone.c index b4c53e9e5..6323219d4 100644 --- a/deployments/services/cryptolib/standalone.c +++ b/deployments/services/cryptolib/standalone.c @@ -1031,7 +1031,8 @@ int main(int argc, char *argv[]) cmd = CRYPTO_CMD_UNKNOWN; /* Read user input */ - printf(CRYPTO_PROMPT); +/* commented this out because it fills up volume while the cryptolib container is running */ +/* printf(CRYPTO_PROMPT); */ fgets(input_buf, CRYPTO_MAX_INPUT_BUF, stdin); /* Tokenize line buffer */ From df5195f18cf1547abb6e25e5ae823e0137d8052b Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Fri, 14 Nov 2025 11:55:57 -0500 Subject: [PATCH 044/111] radio-in now works after re-adding sleep 15 --- deployments/Taskfile.yml | 5 +++-- deployments/targets/docker/compose.yaml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 4866c44d1..641323246 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -9,7 +9,7 @@ env: SCRIPTS_DIR: ./scripts PROJECT_NAME: '{{.PROJECT_NAME | default "nos3-m01-sc01"}}' -# COMPOSE_PROJECT_NAME: '{{.PROJECT_NAME | default "nos3-m01-sc01"}}' + COMPOSE_PROJECT_NAME: '{{.COMPOSE_PROJECT_NAME | default "nos3-m01-sc01"}}' CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " @@ -116,7 +116,8 @@ tasks: source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d --force-recreate --remove-orphans - - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 +# - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 + - sleep 15 - task sidecar - task info-services - task check-docker-ps diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index 2a97e06e5..aaea27c55 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -1,4 +1,4 @@ -#name: ${COMPOSE_PROJECT_NAME} +name: ${COMPOSE_PROJECT_NAME} services: nos3-fortytwo: From 19fdec66c85ae8ec752df9ad2dec52ce0679f833 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Fri, 14 Nov 2025 12:43:20 -0500 Subject: [PATCH 045/111] added a cryptolib standalone.c that suppressed printf(CRYPTO_PROMPT) --- deployments/services/fsw/Dockerfile | 3 +++ .../{cryptolib => fsw/cryptolib/standalone}/standalone.c | 0 2 files changed, 3 insertions(+) rename deployments/services/{cryptolib => fsw/cryptolib/standalone}/standalone.c (100%) diff --git a/deployments/services/fsw/Dockerfile b/deployments/services/fsw/Dockerfile index f36f637f6..c802c32dc 100644 --- a/deployments/services/fsw/Dockerfile +++ b/deployments/services/fsw/Dockerfile @@ -90,6 +90,9 @@ WORKDIR /home/${NOS3_USER}/builds/nos3 RUN chown -R ${NOS3_USER}:${NOS3_USER} /home/${NOS3_USER} +# commented printf(CRYPTO_PROMPT) because it fills up volume while the cryptolib is running +COPY cryptolib/standalone/standalone.c ./components/cryptolib/standalone/standalone.c + RUN make -j6 clean RUN make -j6 prep RUN make -j6 config diff --git a/deployments/services/cryptolib/standalone.c b/deployments/services/fsw/cryptolib/standalone/standalone.c similarity index 100% rename from deployments/services/cryptolib/standalone.c rename to deployments/services/fsw/cryptolib/standalone/standalone.c From 3e27ef5c00597df2f70cd69cd1f4f14b3b6daf42 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Fri, 14 Nov 2025 13:59:29 -0500 Subject: [PATCH 046/111] cryptolib> is still appearing --- deployments/services/fsw/cryptolib/standalone/standalone.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/services/fsw/cryptolib/standalone/standalone.c b/deployments/services/fsw/cryptolib/standalone/standalone.c index 6323219d4..d50da2ef3 100644 --- a/deployments/services/fsw/cryptolib/standalone/standalone.c +++ b/deployments/services/fsw/cryptolib/standalone/standalone.c @@ -256,7 +256,7 @@ int32_t crypto_standalone_process_command(int32_t cc, int32_t num_tokens, char * break; default: - printf("Invalid command format, type 'help' for more info\n"); + // printf("Invalid command format, type 'help' for more info\n"); status = CRYPTO_LIB_ERROR; break; } From 7354107e11310412021e85acce096c7625b9b5ff Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Fri, 14 Nov 2025 15:37:35 -0500 Subject: [PATCH 047/111] cryptolib> wip --- deployments/services/fsw/Dockerfile | 3 ++- .../cryptolib/standalone/standalone.c | 4 ++-- deployments/services/fsw/scripts/cfg/prepare.sh | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) rename deployments/services/fsw/{ => components}/cryptolib/standalone/standalone.c (99%) create mode 100755 deployments/services/fsw/scripts/cfg/prepare.sh diff --git a/deployments/services/fsw/Dockerfile b/deployments/services/fsw/Dockerfile index c802c32dc..9d6d632c1 100644 --- a/deployments/services/fsw/Dockerfile +++ b/deployments/services/fsw/Dockerfile @@ -91,7 +91,8 @@ WORKDIR /home/${NOS3_USER}/builds/nos3 RUN chown -R ${NOS3_USER}:${NOS3_USER} /home/${NOS3_USER} # commented printf(CRYPTO_PROMPT) because it fills up volume while the cryptolib is running -COPY cryptolib/standalone/standalone.c ./components/cryptolib/standalone/standalone.c +COPY components/cryptolib/standalone/standalone.c ./components/cryptolib/standalone/standalone.c +COPY scripts/cfg/prepare.sh ./scripts/cfg/prepare.sh RUN make -j6 clean RUN make -j6 prep diff --git a/deployments/services/fsw/cryptolib/standalone/standalone.c b/deployments/services/fsw/components/cryptolib/standalone/standalone.c similarity index 99% rename from deployments/services/fsw/cryptolib/standalone/standalone.c rename to deployments/services/fsw/components/cryptolib/standalone/standalone.c index d50da2ef3..de2b27007 100644 --- a/deployments/services/fsw/cryptolib/standalone/standalone.c +++ b/deployments/services/fsw/components/cryptolib/standalone/standalone.c @@ -257,7 +257,7 @@ int32_t crypto_standalone_process_command(int32_t cc, int32_t num_tokens, char * default: // printf("Invalid command format, type 'help' for more info\n"); - status = CRYPTO_LIB_ERROR; + // status = CRYPTO_LIB_ERROR; break; } @@ -1033,7 +1033,7 @@ int main(int argc, char *argv[]) /* Read user input */ /* commented this out because it fills up volume while the cryptolib container is running */ /* printf(CRYPTO_PROMPT); */ - fgets(input_buf, CRYPTO_MAX_INPUT_BUF, stdin); + // fgets(input_buf, CRYPTO_MAX_INPUT_BUF, stdin); /* Tokenize line buffer */ token_ptr = strtok(input_buf, " \t\n"); diff --git a/deployments/services/fsw/scripts/cfg/prepare.sh b/deployments/services/fsw/scripts/cfg/prepare.sh new file mode 100755 index 000000000..26a87143c --- /dev/null +++ b/deployments/services/fsw/scripts/cfg/prepare.sh @@ -0,0 +1,16 @@ +#!/bin/bash -i +# +# Convenience script for NOS3 development +# +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +source $SCRIPT_DIR/env.sh +echo "" + +echo "Create local user directory... ${USER_NOS3_DIR}" +mkdir -p $USER_NOS3_DIR +mkdir -p $USER_NOS3_DIR/42 +echo "" + +echo "Preparing Shared Folders for Fprime... ${$USER_FPRIME_PATH}" +mkdir -p $USER_FPRIME_PATH +echo "" \ No newline at end of file From 2f8bd5e8088cf7b8d6d76231e7922256d514da28 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Fri, 14 Nov 2025 16:00:30 -0500 Subject: [PATCH 048/111] cryptolib> (wip) --- deployments/services/fsw/Dockerfile | 1 + .../cryptolib/standalone/standalone.c | 36 ++--- .../cryptolib/standalone/standalone.h | 138 ++++++++++++++++++ 3 files changed, 157 insertions(+), 18 deletions(-) create mode 100644 deployments/services/fsw/components/cryptolib/standalone/standalone.h diff --git a/deployments/services/fsw/Dockerfile b/deployments/services/fsw/Dockerfile index 9d6d632c1..2ae9d2a7c 100644 --- a/deployments/services/fsw/Dockerfile +++ b/deployments/services/fsw/Dockerfile @@ -91,6 +91,7 @@ WORKDIR /home/${NOS3_USER}/builds/nos3 RUN chown -R ${NOS3_USER}:${NOS3_USER} /home/${NOS3_USER} # commented printf(CRYPTO_PROMPT) because it fills up volume while the cryptolib is running +COPY components/cryptolib/standalone/standalone.h ./components/cryptolib/standalone/standalone.h COPY components/cryptolib/standalone/standalone.c ./components/cryptolib/standalone/standalone.c COPY scripts/cfg/prepare.sh ./scripts/cfg/prepare.sh diff --git a/deployments/services/fsw/components/cryptolib/standalone/standalone.c b/deployments/services/fsw/components/cryptolib/standalone/standalone.c index de2b27007..f9b33c3b1 100644 --- a/deployments/services/fsw/components/cryptolib/standalone/standalone.c +++ b/deployments/services/fsw/components/cryptolib/standalone/standalone.c @@ -1037,26 +1037,26 @@ int main(int argc, char *argv[]) /* Tokenize line buffer */ token_ptr = strtok(input_buf, " \t\n"); - while ((num_input_tokens < CRYPTO_MAX_INPUT_TOKENS) && (token_ptr != NULL)) - { - if (num_input_tokens == -1) - { - /* First token is command */ - cmd = crypto_standalone_get_command(token_ptr); - } - else - { - strncpy(input_tokens[num_input_tokens], token_ptr, CRYPTO_MAX_INPUT_TOKEN_SIZE); - } - token_ptr = strtok(NULL, " \t\n"); - num_input_tokens++; - } + // while ((num_input_tokens < CRYPTO_MAX_INPUT_TOKENS) && (token_ptr != NULL)) + // { + // if (num_input_tokens == -1) + // { + // /* First token is command */ + // cmd = crypto_standalone_get_command(token_ptr); + // } + // else + // { + // strncpy(input_tokens[num_input_tokens], token_ptr, CRYPTO_MAX_INPUT_TOKEN_SIZE); + // } + // token_ptr = strtok(NULL, " \t\n"); + // num_input_tokens++; + // } /* Process command if valid */ - if (num_input_tokens >= 0) - { - crypto_standalone_process_command(cmd, num_input_tokens, &input_tokens[0][0]); - } + // if (num_input_tokens >= 0) + // { + // crypto_standalone_process_command(cmd, num_input_tokens, &input_tokens[0][0]); + // } } /* Cleanup */ diff --git a/deployments/services/fsw/components/cryptolib/standalone/standalone.h b/deployments/services/fsw/components/cryptolib/standalone/standalone.h new file mode 100644 index 000000000..c4857b5b3 --- /dev/null +++ b/deployments/services/fsw/components/cryptolib/standalone/standalone.h @@ -0,0 +1,138 @@ +/* Copyright (C) 2009 - 2022 National Aeronautics and Space Administration. + All Foreign Rights are Reserved to the U.S. Government. + + This software is provided "as is" without any warranty of any kind, either expressed, implied, or statutory, + including, but not limited to, any warranty that the software will conform to specifications, any implied warranties + of merchantability, fitness for a particular purpose, and freedom from infringement, and any warranty that the + documentation will conform to the program, or any warranty that the software will be error free. + + In no event shall NASA be liable for any damages, including, but not limited to direct, indirect, special or + consequential damages, arising out of, resulting from, or in any way connected with the software or its + documentation, whether or not based upon warranty, contract, tort or otherwise, and whether or not loss was sustained + from, or arose out of the results of, or use of, the software, documentation or services provided hereunder. + + ITC Team + NASA IV&V + jstar-development-team@mail.nasa.gov +*/ + +#ifndef CRYPTOLIB_STANDALONE_H +#define CRYPTOLIB_STANDALONE_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* +** Includes +*/ +#include +#include +#include +#include +#include //hostent +#include +#include +#include +#include +#include +#include +#include + +#include "crypto.h" +#include "crypto_config.h" + +/* +** Configuration +*/ +#define CRYPTOLIB_HOSTNAME "cryptolib" +#define GSW_HOSTNAME "cosmos" +#define SC_HOSTNAME "radio-sim" + +#ifndef CRYPTO_RX_GROUND_PORT +#define TC_APPLY_PORT 6010 +#endif +#ifndef CRYPTO_RX_GROUND_PORT +#define TC_APPLY_FWD_PORT 8010 +#endif +#ifndef CRYPTO_RX_GROUND_PORT +#define TM_PROCESS_PORT 8011 +#endif +#ifndef CRYPTO_RX_GROUND_PORT +#define TM_PROCESS_FWD_PORT 6011 +#endif + +#define CRYPTO_STANDALONE_HANDLE_FRAMING +#define CRYPTO_STANDALONE_FRAMING_SCID 3 +#define CRYPTO_STANDALONE_FRAMING_VCID 0x00 +#define CRYPTO_STANDALONE_FRAMING_TC_DATA_LEN 512 + +/* +** Can be used to reduce ground system error messages +*/ +#define CRYPTO_STANDALONE_DISCARD_IDLE_PACKETS +#define CRYPTO_STANDALONE_DISCARD_IDLE_FRAMES + +/* +** Defines +*/ +#define CRYPTO_PROMPT "cryptolib> " +#define CRYPTO_MAX_INPUT_BUF 512 +#define CRYPTO_MAX_INPUT_TOKENS 32 +#define CRYPTO_MAX_INPUT_TOKEN_SIZE 64 + +#define TM_PRI_HDR_LENGTH 6 +#define TM_ASM_LENGTH 4 +#define SDLS_SPI_LENGTH 2 + +#define CRYPTO_CMD_UNKNOWN (-1) +#define CRYPTO_CMD_HELP 0 +#define CRYPTO_CMD_EXIT 1 +#define CRYPTO_CMD_NOOP 2 +#define CRYPTO_CMD_RESET 3 +#define CRYPTO_CMD_VCID 4 +#define CRYPTO_CMD_TC_DEBUG 5 +#define CRYPTO_CMD_TM_DEBUG 6 +#define CRYPTO_CMD_ACTIVE 7 + + /* + ** Structures + */ + typedef struct + { + int sockfd; + char *ip_address; + int port; + struct sockaddr_in saddr; + } udp_info_t; + + typedef struct + { + udp_info_t read; + udp_info_t write; + } udp_interface_t; + + /* + ** Prototypes + */ + int32_t crypto_standalone_check_number_arguments(int actual, int expected); + void crypto_standalone_to_lower(char *str); + void crypto_standalone_print_help(void); + int32_t crypto_standalone_get_command(const char *str); + int32_t crypto_standalone_process_command(int32_t cc, int32_t num_tokens, char *tokens); + int32_t crypto_host_to_ip(const char *hostname, char *ip); + int32_t crypto_standalone_udp_init(udp_info_t *sock, int32_t port, uint8_t bind_sock); + int32_t crypto_reset(void); + void crypto_standalone_tc_frame(uint8_t *in_data, uint16_t in_length, uint8_t *out_data, uint16_t *out_length); + void *crypto_standalone_tc_apply(void *socks); + void crypto_standalone_tm_frame(uint8_t *in_data, uint16_t in_length, uint8_t *out_data, uint16_t *out_length, + uint16_t spi); + void *crypto_standalone_tm_process(void *socks); + void crypto_standalone_cleanup(const int signal); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif // CRYPTOLIB_STANDALONE_H From 5ee717a41af9eff12dd9782d11fdfc1889ce2dea Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 18 Nov 2025 10:19:18 -0500 Subject: [PATCH 049/111] seems stable (wip) --- deployments/services/fsw/Dockerfile | 6 ++++++ deployments/targets/docker/compose.yaml | 2 ++ 2 files changed, 8 insertions(+) diff --git a/deployments/services/fsw/Dockerfile b/deployments/services/fsw/Dockerfile index 2ae9d2a7c..e0b11344a 100644 --- a/deployments/services/fsw/Dockerfile +++ b/deployments/services/fsw/Dockerfile @@ -48,10 +48,15 @@ ENV GIT_COMMIT=${GIT_COMMIT} ARG NOS3_USER ARG FSW_SOFTWARE ARG GSW_SOFTWARE +ARG GROUND_SOFTWARE +ARG LD_LIBRARY_PATH ENV NOS3_USER=${NOS3_USER} ENV FSW_SOFTWARE=${FSW_SOFTWARE} ENV GSW_SOFTWARE=${GSW_SOFTWARE} +ENV GROUND_SOFTWARE=${GSW_SOFTWARE} +ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH} + #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ @@ -93,6 +98,7 @@ RUN chown -R ${NOS3_USER}:${NOS3_USER} /home/${NOS3_USER} # commented printf(CRYPTO_PROMPT) because it fills up volume while the cryptolib is running COPY components/cryptolib/standalone/standalone.h ./components/cryptolib/standalone/standalone.h COPY components/cryptolib/standalone/standalone.c ./components/cryptolib/standalone/standalone.c +#COPY components/cryptolib/standalone/standalone.c ./components/cryptolib/support/standalone/standalone.c COPY scripts/cfg/prepare.sh ./scripts/cfg/prepare.sh RUN make -j6 clean diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index aaea27c55..817a6eb09 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -169,6 +169,8 @@ services: IMAGE_URI: ${NOS3_IMAGE_URI} FSW_SOFTWARE: ${FSW_SOFTWARE} GSW_SOFTWARE: ${GSW_SOFTWARE} + LD_LIBRARY_PATH: /usr/local/lib + GROUND_SOFTWARE: ${GSW_SOFTWARE} healthcheck: test: ["CMD-SHELL", "/usr/bin/pgrep core-cpu1"] From c3885831e7775c66a44b4500dc5b5301184eafd7 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 19 Nov 2025 15:52:49 -0500 Subject: [PATCH 050/111] corrected path for cryptolib/support/standalone/standalone.c --- deployments/services/fsw/Dockerfile | 5 ++--- .../components/cryptolib/standalone/standalone.c | 16 ++++++++-------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/deployments/services/fsw/Dockerfile b/deployments/services/fsw/Dockerfile index e0b11344a..270eda61f 100644 --- a/deployments/services/fsw/Dockerfile +++ b/deployments/services/fsw/Dockerfile @@ -96,9 +96,8 @@ WORKDIR /home/${NOS3_USER}/builds/nos3 RUN chown -R ${NOS3_USER}:${NOS3_USER} /home/${NOS3_USER} # commented printf(CRYPTO_PROMPT) because it fills up volume while the cryptolib is running -COPY components/cryptolib/standalone/standalone.h ./components/cryptolib/standalone/standalone.h -COPY components/cryptolib/standalone/standalone.c ./components/cryptolib/standalone/standalone.c -#COPY components/cryptolib/standalone/standalone.c ./components/cryptolib/support/standalone/standalone.c +COPY components/cryptolib/standalone/standalone.h ./components/cryptolib/support/standalone/standalone.h +COPY components/cryptolib/standalone/standalone.c ./components/cryptolib/support/standalone/standalone.c COPY scripts/cfg/prepare.sh ./scripts/cfg/prepare.sh RUN make -j6 clean diff --git a/deployments/services/fsw/components/cryptolib/standalone/standalone.c b/deployments/services/fsw/components/cryptolib/standalone/standalone.c index f9b33c3b1..b9b189d5a 100644 --- a/deployments/services/fsw/components/cryptolib/standalone/standalone.c +++ b/deployments/services/fsw/components/cryptolib/standalone/standalone.c @@ -910,11 +910,11 @@ int main(int argc, char *argv[]) { int32_t status = CRYPTO_LIB_SUCCESS; - char input_buf[CRYPTO_MAX_INPUT_BUF]; - char input_tokens[CRYPTO_MAX_INPUT_TOKENS][CRYPTO_MAX_INPUT_TOKEN_SIZE]; - int num_input_tokens; - int cmd; - char *token_ptr; + // char input_buf[CRYPTO_MAX_INPUT_BUF]; + // char input_tokens[CRYPTO_MAX_INPUT_TOKENS][CRYPTO_MAX_INPUT_TOKEN_SIZE]; + // int num_input_tokens; + // int cmd; + // char *token_ptr; udp_interface_t tc_apply; udp_interface_t tm_process; @@ -1027,8 +1027,8 @@ int main(int argc, char *argv[]) /* Main loop */ while (keepRunning == CRYPTO_LIB_SUCCESS) { - num_input_tokens = -1; - cmd = CRYPTO_CMD_UNKNOWN; + // num_input_tokens = -1; + // cmd = CRYPTO_CMD_UNKNOWN; /* Read user input */ /* commented this out because it fills up volume while the cryptolib container is running */ @@ -1036,7 +1036,7 @@ int main(int argc, char *argv[]) // fgets(input_buf, CRYPTO_MAX_INPUT_BUF, stdin); /* Tokenize line buffer */ - token_ptr = strtok(input_buf, " \t\n"); + // token_ptr = strtok(input_buf, " \t\n"); // while ((num_input_tokens < CRYPTO_MAX_INPUT_TOKENS) && (token_ptr != NULL)) // { // if (num_input_tokens == -1) From 638468b0b3d3bbcc03dd77e8415dc4911c991b14 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 20 Nov 2025 16:17:59 -0500 Subject: [PATCH 051/111] update IMAGE URI to docker.io/ivvitc/nos3-64:20251107 --- deployments/scripts/env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index 5f4039cca..ae4b7ba3b 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -20,7 +20,7 @@ NOS3_MISSION_CFG_FILE=../cfg/nos3-mission.xml NOS3_GIT_URL=https://github.com/nasa/nos3 NOS3_GIT_COMMIT=dev -NOS3_IMAGE_URI=docker.io/ivvitc/nos3-64:dev +NOS3_IMAGE_URI=docker.io/ivvitc/nos3-64:20251107 NOS3_BASE_DIR=/home/nos3/.nos3 MISSION=m01 SPACECRAFT=sc01 From 2976995b050f204697d550e98a4038e8689a65b2 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Mon, 24 Nov 2025 11:28:48 -0500 Subject: [PATCH 052/111] added more permission changes to work in linux --- deployments/Makefile | 18 ++++++++++-------- deployments/Taskfile.yml | 18 ++++++++++-------- .../cryptolib/standalone/standalone.c | 0 .../cryptolib/standalone/standalone.h | 0 deployments/services/fsw/libuart.c | 0 5 files changed, 20 insertions(+), 16 deletions(-) mode change 100644 => 100755 deployments/services/fsw/components/cryptolib/standalone/standalone.c mode change 100644 => 100755 deployments/services/fsw/components/cryptolib/standalone/standalone.h mode change 100644 => 100755 deployments/services/fsw/libuart.c diff --git a/deployments/Makefile b/deployments/Makefile index 102b7ba4b..c865b738a 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -71,14 +71,16 @@ build: | env-create setup-maven ## Build all containers ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct nos3-fsw set-permissions: ## set filesystem permissions, needed for restricted accounts - find . -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable - find . -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable - find . -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable - find . -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable - find ../cfg/build -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable - find ../cfg/build -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable - find ../cfg/build -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable - find ../cfg/build -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable + find . -name '*.sh' -exec chmod 777 {} \; # Make sure all scripts are world executable + find . -name '*.py' -exec chmod 777 {} \; # Make sure all scripts are world executable + find . -name '*.json' -exec chmod 666 {} \; # Make sure all .json files are world readable + find . -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable + find . -type f -name '*.c' -exec chmod 555 {} \; # Make sure all .xml files are world readable + find . -type f -name '*.h' -exec chmod 555 {} \; # Make sure all .xml files are world readable + find ../cfg/build -name '*.sh' -exec chmod 777 {} \; # Make sure all scripts are world executable + find ../cfg/build -name '*.py' -exec chmod 777 {} \; # Make sure all scripts are world executable + find ../cfg/build -name '*.json' -exec chmod 666 {} \; # Make sure all .json files are world readable + find ../cfg/build -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable up: | down env-create build config-nos3-mission config set-permissions ## Bring up nos3 in detached state diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 641323246..b6747334e 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -92,14 +92,16 @@ tasks: set-permissions: desc: set filesystem permissions, needed for restricted accounts cmds: - - find . -type f -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable - - find . -type f -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable - - find . -type f -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable - - find . -type f -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable - - find ../cfg/build -type f -name '*.sh' -exec chmod 775 {} \; # Make sure all scripts are world executable - - find ../cfg/build -type f -name '*.py' -exec chmod 775 {} \; # Make sure all scripts are world executable - - find ../cfg/build -type f -name '*.json' -exec chmod 664 {} \; # Make sure all .json files are world readable - - find ../cfg/build -type f -name '*.xml' -exec chmod 664 {} \; # Make sure all .xml files are world readable + - find . -type f -name '*.sh' -exec chmod 777 {} \; # Make sure all scripts are world executable + - find . -type f -name '*.py' -exec chmod 777 {} \; # Make sure all scripts are world executable + - find . -type f -name '*.json' -exec chmod 666 {} \; # Make sure all .json files are world readable + - find . -type f -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable + - find . -type f -name '*.c' -exec chmod 555 {} \; # Make sure all .xml files are world readable + - find . -type f -name '*.h' -exec chmod 555 {} \; # Make sure all .xml files are world readable + - find ../cfg/build -type f -name '*.sh' -exec chmod 777 {} \; # Make sure all scripts are world executable + - find ../cfg/build -type f -name '*.py' -exec chmod 777 {} \; # Make sure all scripts are world executable + - find ../cfg/build -type f -name '*.json' -exec chmod 666 {} \; # Make sure all .json files are world readable + - find ../cfg/build -type f -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable - find ${HOME}/.nos3/ -type f -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable up: diff --git a/deployments/services/fsw/components/cryptolib/standalone/standalone.c b/deployments/services/fsw/components/cryptolib/standalone/standalone.c old mode 100644 new mode 100755 diff --git a/deployments/services/fsw/components/cryptolib/standalone/standalone.h b/deployments/services/fsw/components/cryptolib/standalone/standalone.h old mode 100644 new mode 100755 diff --git a/deployments/services/fsw/libuart.c b/deployments/services/fsw/libuart.c old mode 100644 new mode 100755 From bceb24e02f1eba062f4de14349ea17e9837b1f91 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Mon, 24 Nov 2025 11:33:42 -0500 Subject: [PATCH 053/111] added missing set-permissions taks --- deployments/Makefile | 2 +- deployments/Taskfile.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/deployments/Makefile b/deployments/Makefile index c865b738a..1a96cf6cf 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -66,7 +66,7 @@ build-fsw: | env-create set-permissions ## Build nos3-base-local (fsw) source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fsw -build: | env-create setup-maven ## Build all containers +build: | env-create set-permissions setup-maven ## Build all containers source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct nos3-fsw diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index b6747334e..94f7cfb43 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -82,6 +82,7 @@ tasks: desc: Build all containers deps: - env-create + - set-permissions - setup-maven cmds: - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 From 9cfa198dc683f1250ddd965503a45cbb38c4f11c Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Mon, 1 Dec 2025 17:46:17 -0500 Subject: [PATCH 054/111] closes#11: corrected this MAVEN_REPO_LOCAL --- deployments/Taskfile.yml | 9 ++++++++- deployments/scripts/env.sh | 2 +- deployments/services/yamcs/Dockerfile | 8 ++++---- deployments/services/yamcs/entrypoint.sh | 12 +----------- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 94f7cfb43..386136162 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -109,6 +109,7 @@ tasks: desc: Bring up nos3 in detached state deps: - down + - submodule-update - env-create - build - config-nos3-mission @@ -275,4 +276,10 @@ tasks: config: desc: configure nos3 by running config.sh cmds: - - cd ../ && ./scripts/cfg/config.sh \ No newline at end of file + - cd ../ && ./scripts/cfg/config.sh + + submodule-update: + desc: sync and update git submodules + cmds: + - git submodule sync; git submodule update --init --recursive; git submodule sync + silent: false \ No newline at end of file diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index ae4b7ba3b..222edf9e6 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -83,7 +83,7 @@ HTTP_PROXY=${HTTP_PROXY} NO_PROXY=${NO_PROXY} # Maven/Java specific configurations -MAVEN_REPO_LOCAL=/home/nos3/.nos3/.m2/repository +MAVEN_REPO_LOCAL=/home/nos3/.nos3/.m2 MAVEN_HTTPS_PROXY="--settings ./settings.xml" MAVEN_SETTINGS_FILE=${MAVEN_SETTINGS_FILE} diff --git a/deployments/services/yamcs/Dockerfile b/deployments/services/yamcs/Dockerfile index c17316f4c..d0574fcc6 100644 --- a/deployments/services/yamcs/Dockerfile +++ b/deployments/services/yamcs/Dockerfile @@ -25,7 +25,7 @@ ARG DEBIAN_FRONTEND=noninteractive # Proxy configs #------------------------------------------------------------------------------ ARG MAVEN_HTTPS_PROXY -ARG MAVEN_LOCAL_REPO +ARG MAVEN_REPO_LOCAL ARG COMPONENT_DIR ARG HTTPS_PROXY @@ -35,7 +35,7 @@ ARG DEPLOYMENT_ENVIRO # =/home/${NOS3_USER}/.m2/repository ENV MAVEN_HTTPS_PROXY=${MAVEN_HTTPS_PROXY} -ENV MAVEN_LOCAL_REPO=${MAVEN_LOCAL_REPO} +ENV MAVEN_REPO_LOCAL=${MAVEN_REPO_LOCAL} ENV COMPONENT_DIR=${COMPONENT_DIR} ENV HTTPS_PROXY=${HTTPS_PROXY} @@ -80,6 +80,6 @@ RUN git clone --recurse-submodules -b ${GIT_COMMIT} -j4 ${GIT_URL} ${GSW_SOFTWAR WORKDIR /home/${NOS3_USER}/.nos3/${GSW_SOFTWARE} COPY settings.xml ./settings.xml -#RUN mvn ${MAVEN_HTTPS_PROXY} package yamcs:bundle -RUN mvn ${MAVEN_HTTPS_PROXY} -DskipTests -Dmaven.repo.local=${MAVEN_REPO_LOCAL} -DCOMPONENT_DIR=${COMPONENT_DIR} package yamcs:bundle +RUN mvn -X ${MAVEN_HTTPS_PROXY} -DskipTests -Dmaven.repo.local=${MAVEN_REPO_LOCAL} -DCOMPONENT_DIR=${COMPONENT_DIR} install + #------------------------------------------------------------------------------ diff --git a/deployments/services/yamcs/entrypoint.sh b/deployments/services/yamcs/entrypoint.sh index 1558345e2..ea5aefd4b 100755 --- a/deployments/services/yamcs/entrypoint.sh +++ b/deployments/services/yamcs/entrypoint.sh @@ -13,16 +13,6 @@ mkdir -p /tmp/nos3/data/inst mkdir -p /tmp/nos3/uplink # Start YAMCS server -mvn ${MAVEN_HTTPS_PROXY} -Dmaven.repo.local=${MAVEN_REPO_LOCAL} -DCOMPONENT_DIR=${COMPONENT_DIR} yamcs:run - -sleep 3 - -curl -X POST http://localhost:8090/api/links/nos3/radio-out:disable -sleep 1 -curl -X POST http://localhost:8090/api/links/nos3/radio-out:enable - -curl -X POST http://localhost:8090/api/links/nos3/truth42-in:disable -sleep 1 -curl -X POST http://localhost:8090/api/links/nos3/truth42-in:enable +mvn -X ${MAVEN_HTTPS_PROXY} -Dmaven.repo.local=${MAVEN_REPO_LOCAL} -DCOMPONENT_DIR=${COMPONENT_DIR} yamcs:run tail -f /dev/null From bd61f5bea32910d527d94df9dee6659ecc874586 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 4 Dec 2025 16:29:36 -0500 Subject: [PATCH 055/111] update --- deployments/Taskfile.yml | 9 ++++--- deployments/scripts/env.sh | 10 +++++++- deployments/targets/docker/compose.yaml | 34 ++----------------------- 3 files changed, 16 insertions(+), 37 deletions(-) diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 386136162..07238f39c 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -121,7 +121,7 @@ tasks: export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d --force-recreate --remove-orphans # - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 - - sleep 15 + - sleep 17 - task sidecar - task info-services - task check-docker-ps @@ -238,9 +238,10 @@ tasks: - | source ${ENVIRO_FILE} echo; echo "How to access various services:"; echo; \ - echo "open http://localhost:8090 to access yamcs/gsw"; \ - echo "open http://localhost:30090/vnc.html to access fortytwo (42) and then click Connect"; \ - echo "open http://localhost:9000/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=${SIM_TF_EPOCH_MILLISECONDS}&view=plot-single" + echo "open http://localhost:${YAMCS_PORT} to access yamcs/gsw"; \ + echo "open http://localhost:${FORTYTWO_PORT}/vnc.html to access fortytwo (42) and then click Connect"; \ + echo "FT: open http://localhost:${OPENMCT_PORT}/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=${SIM_TF_EPOCH_MILLISECONDS}&view=plot-single" + echo "RT: open http://localhost:${OPENMCT_PORT}/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=local&tc.timeSystem=utc&view=plot-single&tc.startDelta=60000&tc.endDelta=300000" echo silent: true diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index 222edf9e6..c91ad524e 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -5,7 +5,10 @@ # Simulation specific inputs NOW=$(date -u +"%Y-%m-%d %H:%M:%S UTC") SIM_T0_DATETIME="2026-01-01 00:00:00 UTC" +SIM_T0_DATETIME="${NOW}" + TIME_INTERVAL=3600 # 1 hour in seconds +TIME_INTERVAL_MILLISECONDS=$( expr ${TIME_INTERVAL} \* 1000 ) #SIM_T0_DATETIME="${NOW}" LEAP_SECONDS=37 @@ -31,8 +34,9 @@ PROJECT_NAME=nos3-${MISSION}-${SPACECRAFT} ######################################################################## # Time specific derivations +TIME_OFFSET_SECONDS=+30 # to simulate 30 seconds into the future from SIM_T0_DATETIME J2000_REFERENCE_DATETIME="2000-01-01 12:00:00 UTC" -SIM_T0_EPOCH_SECONDS=$(date -ud "${SIM_T0_DATETIME}" +"%s") +SIM_T0_EPOCH_SECONDS=$(date -ud "${SIM_T0_DATETIME} ${TIME_OFFSET_SECONDS} seconds" +"%s") SIM_T0_EPOCH_MILLISECONDS=$( expr ${SIM_T0_EPOCH_SECONDS} \* 1000 ) SIM_TF_EPOCH_MILLISECONDS=$( expr ${SIM_T0_EPOCH_MILLISECONDS} + ${TIME_INTERVAL} \* 1000 ) J2000_EPOCH_SECONDS=$(date -ud "${J2000_REFERENCE_DATETIME}" +"%s") @@ -63,6 +67,10 @@ NOS3_MISSION_CFG_FILE=${NOS3_MISSION_CFG_FILE} SIM_T0_DATETIME="${SIM_T0_DATETIME}" J2000_REFERENCE_DATETIME="${J2000_REFERENCE_DATETIME}" +TIME_OFFSET_SECONDS=${TIME_OFFSET_SECONDS} +TIME_INTERVAL=${TIME_INTERVAL} +TIME_INTERVAL_MILLISECONDS=${TIME_INTERVAL_MILLISECONDS} + # In epoch seconds SIM_T0_EPOCH_SECONDS=${SIM_T0_EPOCH_SECONDS} SIM_T0_EPOCH_MILLISECONDS=${SIM_T0_EPOCH_MILLISECONDS} diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index 817a6eb09..8d91600ea 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -837,8 +837,8 @@ services: GIT_COMMIT: ${OPENMCT_GIT_COMMIT} attach: true - container_name: sc01-openmct - hostname: sc01-openmct + container_name: ${COMPOSE_PROJECT_NAME}-openmct + hostname: ${COMPOSE_PROJECT_NAME}-openmct working_dir: "/opt/openmct" volumes: - "${PWD}/services/openmct/entrypoint.sh:/opt/openmct/entrypoint.sh" @@ -876,33 +876,3 @@ networks: nos3-sc01-00: external: ${EXTERNAL_NETWORK_SC01:-false} name: nos3-sc01 - - # nos3-sidecar: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # container_name: sc01-nos-sidecar - # hostname: sc01-sidecar - # working_dir: "/home/nos3/" - # command: "/entrypoint.sh active-gs 8090" - # volumes: - # - ${PWD}/sidecar/entrypoint.sh:/entrypoint.sh - # - ${PWD}/sidecar/commanding.py:/commanding.py - # healthcheck: - # test: ["CMD-SHELL", "curl http://active-gs:8090/api"] - # interval: 10s - # timeout: 5s - # retries: 5 - # depends_on: - # nos3-gsw: - # condition: service_healthy - # nos3-truth42sim: - # condition: service_started - # nos3-radio-sim-cryptolib: - # condition: service_started - # # nos3-cryptolib: - # # condition: service_started - # networks: - # nos3-sc01-00: - # nos3-core-00: From 03815c57c97705f4a533a74b95e38266745af913 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Fri, 19 Dec 2025 12:28:01 -0500 Subject: [PATCH 056/111] started added kubernetes (k8s) artifacts --- deployments/Taskfile.yml | 113 +++++++++++++++++++++++++++++++++------ 1 file changed, 97 insertions(+), 16 deletions(-) diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 07238f39c..069f086a9 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -1,4 +1,4 @@ -version: "3" +version: '3' dotenv: - ./targets/docker/.env @@ -12,23 +12,28 @@ env: COMPOSE_PROJECT_NAME: '{{.COMPOSE_PROJECT_NAME | default "nos3-m01-sc01"}}' CONTAINER_BIN: docker - CONTAINER_COMPOSE_BIN: " {{.CONTAINER_BIN}} compose " + CONTAINER_COMPOSE_BIN: ' {{.CONTAINER_BIN}} compose ' - CONTAINER_DIR: "{{.TARGETS_DIR}}/docker" - COMPOSE_FILE: "{{.CONTAINER_DIR}}/compose.yaml" + CONTAINER_DIR: '{{.TARGETS_DIR}}/docker' + COMPOSE_FILE: '{{.CONTAINER_DIR}}/compose.yaml' DEPLOYMENT_ENVIRO: '{{.DEPLOYMENT_ENVIRO | default ""}}' HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' - ENVIRO_SCRIPT: "{{.SCRIPTS_DIR}}/env.sh" - ENVIRO_FILE: "{{.CONTAINER_DIR}}/.env" + ENVIRO_SCRIPT: '{{.SCRIPTS_DIR}}/env.sh' + ENVIRO_FILE: '{{.CONTAINER_DIR}}/.env' MAVEN_HTTPS_PROXY: '-s./settings.xml' MAVEN_SETTINGS_FILE: '{{.MAVEN_SETTINGS_FILE | default ""}}' NOS3_CFG_PATH: '{{.NOS3_CFG_PATH | default ".."}}' + # Kubernetes variables + K8S_CONTEXT: '{{.K8S_CONTEXT | default "docker-desktop"}}' + K8S_NAMESPACE: '{{.K8S_NAMESPACE | default "nos3"}}' + K8S_KOMPOSE_OUTPUT: '{{.K8S_KOMPOSE_OUTPUT | default "./targets/kubernetes/kompose/"}}' + tasks: default: desc: Shows this help message @@ -42,7 +47,7 @@ tasks: - env-create - set-permissions cmds: - - | + - | source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo @@ -63,7 +68,7 @@ tasks: - env-create - set-permissions cmds: - - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 + - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 - | source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-openmct @@ -85,7 +90,7 @@ tasks: - set-permissions - setup-maven cmds: - - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 + - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 - | source ${ENVIRO_FILE} && \ ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct nos3-fsw @@ -120,7 +125,7 @@ tasks: source ${ENVIRO_FILE} && \ export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d --force-recreate --remove-orphans -# - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 + # - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 - sleep 17 - task sidecar - task info-services @@ -193,7 +198,8 @@ tasks: setup-maven: desc: Setup maven settings.xml with proxy info-services cmds: - - echo "" > ${SERVICES_DIR}/yamcs/settings.xml + - echo "" > + ${SERVICES_DIR}/yamcs/settings.xml - | if [ "${DEPLOYMENT_ENVIRO}" == "vmmoc" ]; then cp -f ${MAVEN_SETTINGS_FILE} ${HOME}/.nos3/yamcs/ || true @@ -206,7 +212,7 @@ tasks: - | ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true silent: true - + check-service-ready: env: SERVICE_HOST: '{{.SERVICE_HOST | default "localhost"}}' @@ -222,9 +228,8 @@ tasks: silent: true purge-containers: - desc: "WARNING: purge docker/podman images, cache, volumes, and networks" + desc: 'WARNING: purge docker/podman images, cache, volumes, and networks' cmds: - - task down || true - yes | ${CONTAINER_BIN} image prune --filter "dangling=true" || true - yes | ${CONTAINER_BIN} system prune -a || true - yes | ${CONTAINER_BIN} volume prune || true @@ -233,7 +238,7 @@ tasks: info-services: desc: info on accessing various services - cmds: + cmds: - task env-create - | source ${ENVIRO_FILE} @@ -283,4 +288,80 @@ tasks: desc: sync and update git submodules cmds: - git submodule sync; git submodule update --init --recursive; git submodule sync - silent: false \ No newline at end of file + silent: false + + k8s:convert:kompose: + desc: convert docker-compose to kubernetes manifests using kompose + deps: + - env-create + cmds: + - | + source ${ENVIRO_FILE} && \ + mkdir -p ${K8S_KOMPOSE_OUTPUT} && \ + kompose convert -f ${COMPOSE_FILE} -o ${K8S_KOMPOSE_OUTPUT} + + k8s:convert:kompose:helm: + desc: convert docker-compose to kubernetes manifests using kompose + deps: + - env-create + cmds: + - | + source ${ENVIRO_FILE} && \ + mkdir -p ${K8S_KOMPOSE_OUTPUT} && \ + kompose convert -c -f ${COMPOSE_FILE} -o ${K8S_KOMPOSE_OUTPUT} + + k8s:create:namespace: + desc: create nos3 kubernetes namespace + deps: + - env-create + cmds: + - | + kubectl create namespace ${K8S_NAMESPACE} --context ${K8S_CONTEXT} || true + + k8s:delete:namespace: + desc: delete nos3 kubernetes namespace + deps: + - env-create + cmds: + - | + source ${ENVIRO_FILE} && \ + kubectl delete namespace ${K8S_NAMESPACE} --context ${K8S_CONTEXT} || true + + k8s:apply:deployment: + desc: apply nos3 kubernetes deployment(s) + deps: + - env-create + - k8s:create:namespace + cmds: + - | + source ${ENVIRO_FILE} && \ + kubectl apply -f ./targets/kubernetes/kompose/ --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} + + k8s:delete:deployment: + desc: delete nos3 kubernetes deployment(s) + deps: + - env-create + cmds: + - kubectl delete --all deployments --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} || true + + k8s:get:configmaps: + desc: get nos3 kubernetes configmaps + deps: + - env-create + cmds: + - | + kubectl get configmaps --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} || true + + k8s:get:configmap: + kubectl get configmap --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} env-deleteme -o yaml + + k8s:create:configmaps: + desc: create nos3 kubernetes configmaps + deps: + - env-create + cmds: + - | + source ${ENVIRO_FILE} && \ + kubectl create configmap --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} env-deleteme --from-env-file=./targets/docker/.env + +# kubectl apply -f ./targets/kubernetes/kompose/env-configmap.yaml --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} || true \ No newline at end of file From 0bbc898b899e405ad368b0f7b97d61cf1d18ad9c Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 23 Dec 2025 14:23:04 -0500 Subject: [PATCH 057/111] experimenting with 42 on a k8s cluster --- deployments/Taskfile.yml | 13 +- .../targets/kubernetes/fortytwo/Taskfile.yaml | 567 ++++++++++++++++++ .../kubernetes/fortytwo/configmap.yaml | 55 +- .../kubernetes/fortytwo/deployment.yaml | 53 +- .../targets/kubernetes/fortytwo/service.yaml | 29 +- 5 files changed, 621 insertions(+), 96 deletions(-) create mode 100644 deployments/targets/kubernetes/fortytwo/Taskfile.yaml diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yml index 069f086a9..2cf284094 100644 --- a/deployments/Taskfile.yml +++ b/deployments/Taskfile.yml @@ -33,6 +33,7 @@ env: K8S_CONTEXT: '{{.K8S_CONTEXT | default "docker-desktop"}}' K8S_NAMESPACE: '{{.K8S_NAMESPACE | default "nos3"}}' K8S_KOMPOSE_OUTPUT: '{{.K8S_KOMPOSE_OUTPUT | default "./targets/kubernetes/kompose/"}}' + K8S_CONFIGMAP_NAME: '{{.K8S_CONFIGMAP_NAME | default "nos3-env"}}' tasks: default: @@ -353,15 +354,21 @@ tasks: kubectl get configmaps --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} || true k8s:get:configmap: - kubectl get configmap --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} env-deleteme -o yaml + kubectl get configmap --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} ${K8S_CONFIGMAP_NAME} -o yaml k8s:create:configmaps: desc: create nos3 kubernetes configmaps deps: - env-create + - k8s:create:namespace cmds: - | source ${ENVIRO_FILE} && \ - kubectl create configmap --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} env-deleteme --from-env-file=./targets/docker/.env + kubectl create configmap --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} ${K8S_CONFIGMAP_NAME} --from-env-file=${ENVIRO_FILE} || true -# kubectl apply -f ./targets/kubernetes/kompose/env-configmap.yaml --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} || true \ No newline at end of file + k8s:apply:ingress-nginx: + desc: apply ingress-nginx for nos3 kubernetes + cmds: + - | + source ${ENVIRO_FILE} && \ + kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.14.1/deploy/static/provider/cloud/deploy.yaml || true diff --git a/deployments/targets/kubernetes/fortytwo/Taskfile.yaml b/deployments/targets/kubernetes/fortytwo/Taskfile.yaml new file mode 100644 index 000000000..83af11be2 --- /dev/null +++ b/deployments/targets/kubernetes/fortytwo/Taskfile.yaml @@ -0,0 +1,567 @@ +--- +version: '3' + +vars: + PROJECT: 'nos3' + MISSION: 'm01' + SPACECRAFT: 'sc01' + SC_ENVIRO: 'sim' + COMPONENT: 'fortytwo' + + DEFAULT_NAMESPACE: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' + + APP_LABEL: '{{.DEFAULT_NAMESPACE}}-{{.COMPONENT}}' + + K8S_CONTEXT: '{{.K8S_CONTEXT | default "docker-desktop"}}' + K8S_CLUSTER: '{{.K8S_CLUSTER | default "docker-desktop"}}' + K8S_USER: '{{.K8S_USER | default "docker-desktop"}}' + + K8S_APP_LABEL: '{{.APP_LABEL}}' + K8S_NAMESPACE: '{{.K8S_NAMESPACE | default .DEFAULT_NAMESPACE}}' + + K8S_KUSTOMIZE_DIR: '{{.K8S_KUSTOMIZE_DIR | default "."}}' + K8S_PORT_FORWARD_VNC: '8080' + K8S_DEPLOYMENT_NAME: 'nos3-{{.COMPONENT}}' + +tasks: + default: + desc: Shows available tasks + cmds: + - task --list-all + silent: true + + get-contexts: + desc: List all available Kubernetes contexts + cmds: + - | + kubectl config get-contexts + silent: false + + get-current-context: + desc: Show the current Kubernetes context + cmds: + - | + echo "Current context:" + kubectl config current-context + silent: false + + set-context: + desc: Set the current Kubernetes context (use K8S_CONTEXT variable) + cmds: + - | + kubectl config use-context {{.K8S_CONTEXT}} + echo "Switched to context: {{.K8S_CONTEXT}}" + silent: false + + create-context: + desc: Create a new Kubernetes context + cmds: + - | + kubectl config set-context {{.K8S_CONTEXT}} \ + --cluster={{.K8S_CLUSTER}} \ + --user={{.K8S_USER}} \ + --namespace={{.K8S_NAMESPACE}} + echo "Context {{.K8S_CONTEXT}} created/updated with:" + echo " Cluster: {{.K8S_CLUSTER}}" + echo " User: {{.K8S_USER}}" + echo " Namespace: {{.K8S_NAMESPACE}}" + - | + echo "To use this context, run: task set-context K8S_CONTEXT={{.K8S_CONTEXT}}" + silent: false + + create-user-certs: + desc: Generate client certificates for a new user + vars: + NEW_USER: '{{.NEW_USER | default "myuser"}}' + CERT_DIR: '{{.CERT_DIR | default "/tmp/k8s-certs"}}' + ORG: '{{.ORG | default "system:masters"}}' + cmds: + - | + mkdir -p {{.CERT_DIR}} + echo "Generating private key for user: {{.NEW_USER}}" + openssl genrsa -out {{.CERT_DIR}}/{{.NEW_USER}}.key 2048 + - | + echo "Generating certificate signing request (CSR)" + openssl req -new \ + -key {{.CERT_DIR}}/{{.NEW_USER}}.key \ + -out {{.CERT_DIR}}/{{.NEW_USER}}.csr \ + -subj "/CN={{.NEW_USER}}/O={{.ORG}}" + - | + echo "Certificates generated in {{.CERT_DIR}}" + echo " Private key: {{.CERT_DIR}}/{{.NEW_USER}}.key" + echo " CSR: {{.CERT_DIR}}/{{.NEW_USER}}.csr" + echo "" + echo "Next steps:" + echo " 1. Get the CSR signed by the cluster CA" + echo " 2. Run: task create-user-kubeconfig NEW_USER={{.NEW_USER}} CERT_DIR={{.CERT_DIR}}" + silent: false + + create-user-k8s-csr: + desc: Create and approve Kubernetes CertificateSigningRequest for user (may not work on Docker Desktop) + vars: + NEW_USER: '{{.NEW_USER | default "myuser"}}' + CERT_DIR: '{{.CERT_DIR | default "/tmp/k8s-certs"}}' + ORG: '{{.ORG | default "developers"}}' + cmds: + - | + echo "Creating Kubernetes CertificateSigningRequest for {{.NEW_USER}}" + cat < {{.CERT_DIR}}/{{.NEW_USER}}.crt + - | + echo "Certificate signed and saved to {{.CERT_DIR}}/{{.NEW_USER}}.crt" + echo "" + echo "Next step:" + echo " Run: task create-user-kubeconfig NEW_USER={{.NEW_USER}} CERT_DIR={{.CERT_DIR}}" + silent: false + + create-user-manual-sign: + desc: Sign user certificate using cluster CA directly (for Docker Desktop) + vars: + NEW_USER: '{{.NEW_USER | default "myuser"}}' + CERT_DIR: '{{.CERT_DIR | default "/tmp/k8s-certs"}}' + CA_CERT: '{{.CA_CERT | default "$HOME/.minikube/ca.crt"}}' + CA_KEY: '{{.CA_KEY | default "$HOME/.minikube/ca.key"}}' + cmds: + - | + echo "Signing certificate for {{.NEW_USER}} using cluster CA" + echo "Note: This requires access to the cluster CA certificate and key" + echo "" + + # For Docker Desktop, try to find CA files + if [ -f "$HOME/.docker/run/config/ca.pem" ]; then + CA_CERT="$HOME/.docker/run/config/ca.pem" + CA_KEY="$HOME/.docker/run/config/ca-key.pem" + fi + + if [ ! -f "{{.CA_CERT}}" ]; then + echo "ERROR: CA certificate not found at {{.CA_CERT}}" + echo "" + echo "For Docker Desktop, CA files are typically not accessible." + echo "Recommended: Use the docker-desktop user instead, or:" + echo " 1. Use a cluster that supports CSR API (minikube, EKS, GKE, etc.)" + echo " 2. Manually copy CA files from the Docker Desktop VM" + exit 1 + fi + + openssl x509 -req \ + -in {{.CERT_DIR}}/{{.NEW_USER}}.csr \ + -CA {{.CA_CERT}} \ + -CAkey {{.CA_KEY}} \ + -CAcreateserial \ + -out {{.CERT_DIR}}/{{.NEW_USER}}.crt \ + -days 365 + - | + echo "Certificate signed and saved to {{.CERT_DIR}}/{{.NEW_USER}}.crt" + echo "" + echo "Next step:" + echo " Run: task create-user-kubeconfig NEW_USER={{.NEW_USER}} CERT_DIR={{.CERT_DIR}}" + silent: false + + create-user-kubeconfig: + desc: Add user credentials to kubeconfig + vars: + NEW_USER: '{{.NEW_USER | default "myuser"}}' + CERT_DIR: '{{.CERT_DIR | default "/tmp/k8s-certs"}}' + cmds: + - | + echo "Adding user {{.NEW_USER}} to kubeconfig" + kubectl config set-credentials {{.NEW_USER}} \ + --client-certificate={{.CERT_DIR}}/{{.NEW_USER}}.crt \ + --client-key={{.CERT_DIR}}/{{.NEW_USER}}.key \ + --embed-certs=true + - | + echo "User {{.NEW_USER}} added to kubeconfig" + echo "" + echo "Create a context for this user:" + echo " task create-context K8S_USER={{.NEW_USER}} K8S_CONTEXT={{.NEW_USER}}-context" + echo "" + echo "Or use with existing context:" + echo " kubectl config set-context docker-desktop --user={{.NEW_USER}}" + silent: false + + create-user: + desc: Complete workflow to create a new user (generates certs, signs via K8s CSR, adds to kubeconfig) + vars: + NEW_USER: '{{.NEW_USER | default "myuser"}}' + CERT_DIR: '{{.CERT_DIR | default "/tmp/k8s-certs"}}' + ORG: '{{.ORG | default "developers"}}' + cmds: + - task: create-user-certs + vars: + NEW_USER: '{{.NEW_USER}}' + CERT_DIR: '{{.CERT_DIR}}' + ORG: '{{.ORG}}' + - task: create-user-k8s-csr + vars: + NEW_USER: '{{.NEW_USER}}' + CERT_DIR: '{{.CERT_DIR}}' + ORG: '{{.ORG}}' + - task: create-user-kubeconfig + vars: + NEW_USER: '{{.NEW_USER}}' + CERT_DIR: '{{.CERT_DIR}}' + - | + echo "" + echo "User {{.NEW_USER}} created successfully with organization: {{.ORG}}" + echo "" + echo "IMPORTANT: The user has been created but has NO permissions yet." + echo "You need to create a RoleBinding or ClusterRoleBinding to grant permissions." + echo "" + echo "Example - Grant admin in a namespace:" + echo " kubectl create rolebinding {{.NEW_USER}}-admin --clusterrole=admin --user={{.NEW_USER}} -n {{.K8S_NAMESPACE}}" + echo "" + echo "Example - Grant cluster-wide view:" + echo " kubectl create clusterrolebinding {{.NEW_USER}}-view --clusterrole=view --user={{.NEW_USER}}" + echo "" + echo "To create a context for this user:" + echo " task create-context K8S_USER={{.NEW_USER}} K8S_CONTEXT={{.NEW_USER}}-context" + silent: false + + list-users: + desc: List all users in kubeconfig + cmds: + - | + echo "Users in kubeconfig:" + kubectl config view -o jsonpath='{.users[*].name}' | tr ' ' '\n' + silent: false + + delete-user: + desc: Remove user from kubeconfig + vars: + USER_TO_DELETE: '{{.USER_TO_DELETE | default "myuser"}}' + cmds: + - | + kubectl config unset users.{{.USER_TO_DELETE}} + echo "User {{.USER_TO_DELETE}} removed from kubeconfig" + - rm -rf /tmp/k8s-certs/{{.USER_TO_DELETE}}* + silent: false + + create-namespace: + desc: Create the Kubernetes namespace + cmds: + - | + kubectl create namespace {{.K8S_NAMESPACE}} \ + --context {{.K8S_CONTEXT}} || \ + echo "Namespace {{.K8S_NAMESPACE}} already exists" + silent: false + + apply-configmaps: + desc: Apply configmaps to the namespace + deps: + - create-namespace + cmds: + - | + kubectl apply -f configmap.yaml \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} + - echo "ConfigMaps applied successfully" + silent: false + + apply-service: + desc: Apply service to the namespace + deps: + - create-namespace + cmds: + - | + kubectl apply -f service.yaml \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} + - echo "Service applied successfully" + silent: false + + apply-deployment: + desc: Apply deployment to the namespace + deps: + - create-namespace + - apply-configmaps + cmds: + - | + kubectl apply -f deployment.yaml \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} + - echo "Deployment applied successfully" + silent: false + + apply-all: + desc: Apply all Kubernetes resources (recommended) + deps: + - create-namespace + cmds: + - | + kubectl apply -k {{.K8S_KUSTOMIZE_DIR}} \ + --context {{.K8S_CONTEXT}} + - task: port-forward + - echo "All resources applied successfully via kustomize" + silent: false + + delete-deployment: + desc: Delete the deployment + cmds: + - | + kubectl delete -f deployment.yaml \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} || true + - echo "Deployment deleted" + silent: false + + delete-namespace: + desc: Delete Namespace + cmds: + - | + kubectl delete namespace {{.K8S_NAMESPACE}} \ + --context {{.K8S_CONTEXT}} || true + - echo "Namespace deleted" + silent: false + + delete-service: + desc: Delete the service + cmds: + - | + kubectl delete -f service.yaml \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} || true + - echo "Service deleted" + silent: false + + delete-configmaps: + desc: Delete the configmaps + cmds: + - | + kubectl delete -f configmap.yaml \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} || true + - echo "ConfigMaps deleted" + silent: false + + delete-all: + desc: Delete all resources + deps: + - delete-deployment + - delete-service + - delete-configmaps + - delete-namespace + cmds: + - | + kubectl delete -k {{.K8S_KUSTOMIZE_DIR}} \ + --context {{.K8S_CONTEXT}} || true + - echo "All resources deleted via kustomize" + silent: false + + restart-deployment: + desc: Restart the deployment (rollout restart) + cmds: + - | + kubectl rollout restart deployment/nos3-fortytwo \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} + - echo "Deployment restarted" + silent: false + + get-pods: + desc: Get pods in the namespace + cmds: + - | + kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} + silent: false + + get-all: + desc: Get all resources in the namespace + cmds: + - | + kubectl get all \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} + silent: false + + describe-pod: + desc: Describe the fortytwo pod (useful for debugging) + cmds: + - | + POD_NAME=$(kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} \ + -o jsonpath='{.items[0].metadata.name}') + kubectl describe pod $POD_NAME \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} + silent: false + + logs: + desc: Get logs from the fortytwo pod + cmds: + - | + POD_NAME=$(kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} \ + -o jsonpath='{.items[0].metadata.name}') + kubectl logs $POD_NAME \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + --tail=100 \ + --follow + silent: false + + logs-previous: + desc: Get logs from the previous container instance (useful after crash) + cmds: + - | + POD_NAME=$(kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} \ + -o jsonpath='{.items[0].metadata.name}') + kubectl logs $POD_NAME \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + --previous + silent: false + + exec: + desc: Execute a shell in the fortytwo pod + cmds: + - | + POD_NAME=$(kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} \ + -o jsonpath='{.items[0].metadata.name}') + kubectl exec -it $POD_NAME \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -- /bin/bash + silent: false + + port-forward: + desc: Port forward to access services locally + cmds: + - | + echo "Checking for pod availability..." + POD_NAME=$(kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} \ + -o jsonpath='{.items[0].metadata.name}' 2>/dev/null) + + if [ -z "$POD_NAME" ]; then + echo "Error: No pod found with label app={{.K8S_APP_LABEL}}" + exit 1 + fi + + echo "Found pod: $POD_NAME" + echo "Waiting for pod to be ready..." + + kubectl wait --for=condition=ready pod/$POD_NAME \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + --timeout=300s + + if [ $? -ne 0 ]; then + echo "Error: Pod did not become ready within timeout" + exit 1 + fi + + echo "Pod is ready!" + echo "Forwarding ports:" + echo " - VNC: http://localhost:{{.K8S_PORT_FORWARD_VNC}}" + kubectl port-forward ${POD_NAME} \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + {{.K8S_PORT_FORWARD_VNC}}:80 + silent: false + + status: + desc: Show status of all resources + cmds: + - echo "Namespace {{.K8S_NAMESPACE}} status:" + - echo "" + - echo "=== ConfigMaps ===" + - | + kubectl get configmaps \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} || echo "No configmaps found" + - echo "" + - echo "=== Services ===" + - | + kubectl get services \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + fortytwo || echo "No services found" + - echo "" + - echo "=== Deployments ===" + - | + kubectl get deployments \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} || echo "No deployments found" + - echo "" + - echo "=== Pods ===" + - | + kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} || echo "No pods found" + silent: false + + redeploy: + desc: Delete and recreate all resources (full redeploy) + cmds: + - task: delete-all + - sleep 3 + - task: apply-all + - task: get-pods + silent: false + + troubleshoot: + desc: Run troubleshooting diagnostics + cmds: + - echo "=== Checking namespace ===" + - | + kubectl get namespace {{.K8S_NAMESPACE}} \ + --context {{.K8S_CONTEXT}} || echo "Namespace does not exist!" + - echo "" + - echo "=== Checking configmaps ===" + - | + kubectl get configmaps nos3-fortytwo-cm0 \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} || echo "ConfigMaps not found!" + - echo "" + - echo "=== Checking pod events ===" + - | + POD_NAME=$(kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} \ + -o jsonpath='{.items[0].metadata.name}' 2>/dev/null) + if [ -n "$POD_NAME" ]; then + kubectl get events \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + --field-selector involvedObject.name=$POD_NAME \ + --sort-by='.lastTimestamp' + else + echo "No pods found" + fi + silent: false diff --git a/deployments/targets/kubernetes/fortytwo/configmap.yaml b/deployments/targets/kubernetes/fortytwo/configmap.yaml index e8f809377..f9f08cf15 100644 --- a/deployments/targets/kubernetes/fortytwo/configmap.yaml +++ b/deployments/targets/kubernetes/fortytwo/configmap.yaml @@ -7,41 +7,50 @@ data: rm -f /tmp/.X1-lock || true rm -f /tmp/.X11-unix/X1 || true - pkill -f vncserver || true - pkill -f Xvnc || true - pkill -f websockify || true + pkill -9 -f vncserver || true + pkill -9 -f Xvnc || true + pkill -9 -f websockify || true /opt/TurboVNC/bin/vncserver -securitytypes tlsnone,x509none,none && \ + sleep 5 && \ websockify -D \ --web=/usr/share/novnc/ \ - --cert=~/novnc.pem 80 localhost:5901 && /startapp.sh + --cert=~/novnc.pem 80 localhost:5901 - tail -f /dev/null + export DISPLAY=${DISPLAY:-:1} + export DIR=/opt/nasa-itc + export GIT_FOLDER=${GIT_FOLDER} -kind: ConfigMap -metadata: - annotations: - use-subpath: "true" - labels: - app: nos3-m01-sc01-fortytwo - name: nos3-fortytwo-cm0 ---- -apiVersion: v1 -data: - startapp.sh: |+ - #!/bin/bash - export DISPLAY=:1 - DIR=/opt/nasa-itc - cd ${DIR}/42 xterm & - xterm -e ./42 X & - echo "Started 42 in xterm with PID $!" + + rm -rf /opt/nasa-itc/42/NO3InOut/{*.42,*.csv} + + RECOMPILE=${RECOMPILE:-true} + + if [ "$RECOMPILE" == "true" ]; then + cd /42 && \ + git fetch && \ + git checkout ${GIT_COMMIT} && \ + git pull origin && \ + git submodule update && \ + make clean && \ + make -j2 + fi + + STARTUP_FOLDER=${STARTUP_FOLDER:-NO3InOut} + STARTUP_FOLDER=./ + + cd /42 && \ + xterm -e "./42 ${STARTUP_FOLDER}" & + + echo "Started 42 with PID $!" tail -f /dev/null + kind: ConfigMap metadata: annotations: use-subpath: "true" labels: app: nos3-m01-sc01-fortytwo - name: nos3-fortytwo-cm1 + name: nos3-m01-sc01-fortytwo-cm diff --git a/deployments/targets/kubernetes/fortytwo/deployment.yaml b/deployments/targets/kubernetes/fortytwo/deployment.yaml index e64f7da6c..dc744e179 100644 --- a/deployments/targets/kubernetes/fortytwo/deployment.yaml +++ b/deployments/targets/kubernetes/fortytwo/deployment.yaml @@ -2,8 +2,7 @@ apiVersion: apps/v1 kind: Deployment metadata: - namespace: nos3-m01-sc01 - name: nos3-fortytwo + name: nos3-m01-sc01-fortytwo labels: app: nos3-m01-sc01-fortytwo spec: @@ -20,44 +19,17 @@ spec: - args: - /entrypoint.sh env: - - name: BASE_DIR - value: /builds/nos3 - - name: CFG_FILE - value: /builds/nos3/sims/build/bin/nos3-simulator.xml - name: COMPONENT_NAME value: fortytwo - name: DISPLAY value: :1 - - name: HEALTHCHECK_PORT - value: "60000" - - name: LOG_CONFIG - value: /builds/nos3/sims/build/bin/sim_log_config.xml - - name: SIMULATOR_BIN - value: /builds/nos3/sims/build/bin/nos3-single-simulator - - name: SIM_BIN - value: /builds/nos3/sims/build/bin - image: docker.io/haisamido/42:master - workingDir: /opt/nasa-itc/ + image: ghcr.io/ericstoneking/42:latest + workingDir: /42 imagePullPolicy: IfNotPresent - # livenessProbe: - # exec: - # command: - # - /usr/bin/nc -vz localhost 10000 - # failureThreshold: 5 - # periodSeconds: 5 - # timeoutSeconds: 5 - name: 00-sc01-fortytwo + name: nos3-m01-sc01-fortytwo ports: - containerPort: 80 protocol: TCP - - containerPort: 4245 - protocol: TCP - - containerPort: 4245 - protocol: UDP - - containerPort: 9999 - protocol: TCP - - containerPort: 9999 - protocol: UDP resources: limits: cpu: "3" @@ -69,11 +41,8 @@ spec: privileged: true volumeMounts: - mountPath: /entrypoint.sh - name: nos3-fortytwo-cm0 + name: nos3-m01-sc01-fortytwo-cm subPath: entrypoint.sh - - mountPath: /startapp.sh - name: nos3-fortytwo-cm1 - subPath: startapp.sh hostname: fortytwo restartPolicy: Always volumes: @@ -81,13 +50,7 @@ spec: items: - key: entrypoint.sh path: entrypoint.sh - name: nos3-fortytwo-cm0 - defaultMode: 0555 - name: nos3-fortytwo-cm0 - - configMap: - items: - - key: startapp.sh - path: startapp.sh - name: nos3-fortytwo-cm1 + name: nos3-m01-sc01-fortytwo-cm defaultMode: 0555 - name: nos3-fortytwo-cm1 + name: nos3-m01-sc01-fortytwo-cm + diff --git a/deployments/targets/kubernetes/fortytwo/service.yaml b/deployments/targets/kubernetes/fortytwo/service.yaml index 103e0a2b4..496627810 100644 --- a/deployments/targets/kubernetes/fortytwo/service.yaml +++ b/deployments/targets/kubernetes/fortytwo/service.yaml @@ -2,34 +2,13 @@ apiVersion: v1 kind: Service metadata: - name: fortytwo - namespace: nos3-m01-sc01 + name: nos3-m01-sc01-fortytwo spec: selector: app: nos3-m01-sc01-fortytwo ports: - - name: gps-tcp + - name: x-vnc protocol: TCP - port: 4245 - targetPort: 4245 - - name: gps-udp - protocol: UDP - port: 4245 - targetPort: 4245 - - name: truth42sim-tcp - protocol: TCP - port: 9999 - targetPort: 9999 - - name: truth42sim-udp - protocol: UDP - port: 9999 - targetPort: 9999 - - name: healthcheck-tcp - protocol: TCP - port: 60000 - targetPort: 60000 - - name: healthcheck-udp - protocol: UDP - port: 60000 - targetPort: 60000 + port: 80 + targetPort: 80 type: ClusterIP From c9d105e6bca46346d1a134a34803f8b3d1a87b2d Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 23 Dec 2025 14:23:58 -0500 Subject: [PATCH 058/111] renamed Taskfile.yml to Taskfile.yaml --- deployments/{Taskfile.yml => Taskfile.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename deployments/{Taskfile.yml => Taskfile.yaml} (100%) diff --git a/deployments/Taskfile.yml b/deployments/Taskfile.yaml similarity index 100% rename from deployments/Taskfile.yml rename to deployments/Taskfile.yaml From 3ea91764c986fca41cc5ec2ccaaa828363d7c34f Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 23 Dec 2025 20:00:39 -0500 Subject: [PATCH 059/111] corrected apply-all --- .../targets/kubernetes/fortytwo/Taskfile.yaml | 71 ++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/deployments/targets/kubernetes/fortytwo/Taskfile.yaml b/deployments/targets/kubernetes/fortytwo/Taskfile.yaml index 83af11be2..23a369176 100644 --- a/deployments/targets/kubernetes/fortytwo/Taskfile.yaml +++ b/deployments/targets/kubernetes/fortytwo/Taskfile.yaml @@ -1,6 +1,12 @@ --- version: '3' +# kind delete cluster --name ${K8S_CLUSTER} || true +# kind create cluster --name ${K8S_CLUSTER} || true + +env: + KIND_EXPERIMENTAL_PROVIDER: '{{.KIND_EXPERIMENTAL_PROVIDER | default "docker"}}' + vars: PROJECT: 'nos3' MISSION: 'm01' @@ -12,10 +18,14 @@ vars: APP_LABEL: '{{.DEFAULT_NAMESPACE}}-{{.COMPONENT}}' + # Context defaults - support both Docker Desktop and Podman K8S_CONTEXT: '{{.K8S_CONTEXT | default "docker-desktop"}}' K8S_CLUSTER: '{{.K8S_CLUSTER | default "docker-desktop"}}' K8S_USER: '{{.K8S_USER | default "docker-desktop"}}' + # KIND provider - set to 'podman' to use Podman runtime with KIND + KIND_EXPERIMENTAL_PROVIDER: '{{.KIND_EXPERIMENTAL_PROVIDER | default "docker"}}' + K8S_APP_LABEL: '{{.APP_LABEL}}' K8S_NAMESPACE: '{{.K8S_NAMESPACE | default .DEFAULT_NAMESPACE}}' @@ -30,6 +40,57 @@ tasks: - task --list-all silent: true + detect-runtime: + desc: Detect which container runtime is being used (docker or podman) + cmds: + - | + CURRENT_CONTEXT=$(kubectl config current-context 2>/dev/null || echo "none") + echo "Current kubectl context: $CURRENT_CONTEXT" + echo "KIND provider: {{.KIND_EXPERIMENTAL_PROVIDER}}" + echo "" + + if echo "$CURRENT_CONTEXT" | grep -qi "podman"; then + echo "Detected runtime: Podman" + echo "To use Podman with all tasks, set: KIND_EXPERIMENTAL_PROVIDER=podman" + elif echo "$CURRENT_CONTEXT" | grep -qi "docker"; then + echo "Detected runtime: Docker Desktop" + echo "To use Docker with all tasks, set: KIND_EXPERIMENTAL_PROVIDER=docker (default)" + else + echo "Unknown runtime from context: $CURRENT_CONTEXT" + echo "Available runtimes:" + which docker 2>/dev/null && echo " - docker (installed)" + which podman 2>/dev/null && echo " - podman (installed)" + fi + echo "" + echo "Current KIND_EXPERIMENTAL_PROVIDER: {{.KIND_EXPERIMENTAL_PROVIDER}}" + silent: false + + check-podman: + desc: Check if Podman Kubernetes is available and running + cmds: + - | + echo "Checking Podman Kubernetes setup..." + + # Check if podman machine exists + if ! podman machine list 2>/dev/null | grep -q "Currently running"; then + echo "Warning: Podman machine is not running" + echo "Start it with: podman machine start" + exit 1 + fi + + echo "Podman machine is running" + + # Check if podman-desktop context exists + if ! kubectl config get-contexts podman-desktop &>/dev/null; then + echo "Warning: podman-desktop context not found" + echo "Please ensure Kubernetes is enabled in Podman Desktop" + echo "Or manually create a context pointing to your Podman cluster" + exit 1 + fi + + echo "Podman Kubernetes context is available" + silent: false + get-contexts: desc: List all available Kubernetes contexts cmds: @@ -51,6 +112,13 @@ tasks: - | kubectl config use-context {{.K8S_CONTEXT}} echo "Switched to context: {{.K8S_CONTEXT}}" + echo "" + echo "Common contexts:" + echo " - docker-desktop (Docker Desktop Kubernetes)" + echo " - podman-desktop (Podman Desktop Kubernetes)" + echo " - minikube (Minikube)" + echo "" + echo "Verify cluster: kubectl cluster-info" silent: false create-context: @@ -305,7 +373,8 @@ tasks: cmds: - | kubectl apply -k {{.K8S_KUSTOMIZE_DIR}} \ - --context {{.K8S_CONTEXT}} + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} - task: port-forward - echo "All resources applied successfully via kustomize" silent: false From 6c2c32205ed1545adb7b93cd6b2fd4849c1a80bc Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 30 Dec 2025 14:19:45 -0500 Subject: [PATCH 060/111] laying foundation for k8s --- .../kubernetes/{fortytwo => }/Taskfile.yaml | 42 ++++++++++++ .../fortytwo/configmaps/args-configmap.yaml | 0 .../fortytwo/configmaps/env-configmap.yaml | 65 +++++++++++++++++++ .../volumes-configmap.yaml} | 23 +++---- .../kubernetes/fortytwo/deployment.yaml | 14 ++-- .../targets/kubernetes/fortytwo/ingress.yaml | 0 .../kubernetes/fortytwo/kustomization.yaml | 5 +- .../targets/kubernetes/fortytwo/service.yaml | 3 + .../targets/kubernetes/kustomization.yaml | 8 +-- 9 files changed, 136 insertions(+), 24 deletions(-) rename deployments/targets/kubernetes/{fortytwo => }/Taskfile.yaml (94%) create mode 100644 deployments/targets/kubernetes/fortytwo/configmaps/args-configmap.yaml create mode 100644 deployments/targets/kubernetes/fortytwo/configmaps/env-configmap.yaml rename deployments/targets/kubernetes/fortytwo/{configmap.yaml => configmaps/volumes-configmap.yaml} (86%) create mode 100644 deployments/targets/kubernetes/fortytwo/ingress.yaml diff --git a/deployments/targets/kubernetes/fortytwo/Taskfile.yaml b/deployments/targets/kubernetes/Taskfile.yaml similarity index 94% rename from deployments/targets/kubernetes/fortytwo/Taskfile.yaml rename to deployments/targets/kubernetes/Taskfile.yaml index 23a369176..7ee253871 100644 --- a/deployments/targets/kubernetes/fortytwo/Taskfile.yaml +++ b/deployments/targets/kubernetes/Taskfile.yaml @@ -1,6 +1,9 @@ --- version: '3' +dotenv: + - ../../../targets/docker/.env + # kind delete cluster --name ${K8S_CLUSTER} || true # kind create cluster --name ${K8S_CLUSTER} || true @@ -8,12 +11,21 @@ env: KIND_EXPERIMENTAL_PROVIDER: '{{.KIND_EXPERIMENTAL_PROVIDER | default "docker"}}' vars: + TARGETS_DIR: ../../targets + SERVICES_DIR: ../../services + SCRIPTS_DIR: ../../scripts + + CONTAINER_DIR: '{{.TARGETS_DIR}}/docker/' + PROJECT: 'nos3' MISSION: 'm01' SPACECRAFT: 'sc01' SC_ENVIRO: 'sim' COMPONENT: 'fortytwo' + ENVIRO_SCRIPT: '{{.SCRIPTS_DIR}}/env.sh' + ENVIRO_FILE: '{{.CONTAINER_DIR}}/.env' + DEFAULT_NAMESPACE: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' APP_LABEL: '{{.DEFAULT_NAMESPACE}}-{{.COMPONENT}}' @@ -329,6 +341,23 @@ tasks: echo "Namespace {{.K8S_NAMESPACE}} already exists" silent: false + create-configmap-from-env: + desc: Create a ConfigMap from the .env file + deps: + - create-namespace + vars: + CONFIGMAP_NAME: '{{.CONFIGMAP_NAME | default "env-configmap"}}' + cmds: + - | + echo "Creating ConfigMap {{.CONFIGMAP_NAME}} from {{.ENVIRO_FILE}}" + kubectl create configmap {{.CONFIGMAP_NAME}} \ + --from-env-file={{.ENVIRO_FILE}} \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + --dry-run=client -o yaml > {{.CONFIGMAP_NAME}}.yaml + - echo "ConfigMap {{.CONFIGMAP_NAME}} created/updated successfully" + silent: false + apply-configmaps: desc: Apply configmaps to the namespace deps: @@ -353,6 +382,19 @@ tasks: - echo "Service applied successfully" silent: false + apply-kustomize: + desc: Apply kustomize to the namespace + deps: + - create-namespace + # - apply-configmaps + cmds: + - | + kubectl apply -k . \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} + - echo "Kustomization applied successfully" + silent: false + apply-deployment: desc: Apply deployment to the namespace deps: diff --git a/deployments/targets/kubernetes/fortytwo/configmaps/args-configmap.yaml b/deployments/targets/kubernetes/fortytwo/configmaps/args-configmap.yaml new file mode 100644 index 000000000..e69de29bb diff --git a/deployments/targets/kubernetes/fortytwo/configmaps/env-configmap.yaml b/deployments/targets/kubernetes/fortytwo/configmaps/env-configmap.yaml new file mode 100644 index 000000000..5b7e71ef5 --- /dev/null +++ b/deployments/targets/kubernetes/fortytwo/configmaps/env-configmap.yaml @@ -0,0 +1,65 @@ +apiVersion: v1 + +kind: ConfigMap + +metadata: + name: nos3-m01-sc01-fortytwo-env + +data: + BASE_DIR: /opt/nasa-itc + COMPONENT_DIR: /home/nos3/builds/nos3/components + COMPOSE_PROJECT_NAME: nos3-m01-sc01 + DEPLOYMENT_ENVIRO: "" + FORTYTWO_BASE_DIR: /opt/nasa-itc + FORTYTWO_DISPLAY: :1 + FORTYTWO_GIT_COMMIT: nos3-main + FORTYTWO_GIT_FOLDER: "42" + FORTYTWO_GIT_URL: https://github.com/nasa-itc/42.git + FORTYTWO_LEAP_SECONDS: "37" + FORTYTWO_PORT: "30090" + FORTYTWO_RECOMPILE: "false" + FORTYTWO_SIM_DATE: '"12 29 2025"' + FORTYTWO_SIM_TIME: '"15 57 13.00"' + FORTYTWO_STARTUP_FOLDER: NOS3InOut + FORTYTWO_VNC_PASSWORD: c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2 + FSW_SOFTWARE: cfs + GSW_SOFTWARE: yamcs + HEALTHCHECK_PORT: "" + HTTP_PROXY: "" + HTTPS_PROXY: "" + J2000_EPOCH_SECONDS: "946728000" + J2000_REFERENCE_DATETIME: '"2000-01-01 12:00:00 UTC"' + MAVEN_HTTPS_PROXY: '"--settings ./settings.xml"' + MAVEN_REPO_LOCAL: /home/nos3/.nos3/.m2 + MAVEN_SETTINGS_FILE: "" + MISSION: m01 + NO_PROXY: "" + NOS3_BASE_DIR: /home/nos3/.nos3 + NOS3_CFG_PATH: .. + NOS3_DIR: /home/nos3/.nos3 + NOS3_GIT_COMMIT: dev + NOS3_GIT_URL: https://github.com/nasa/nos3 + NOS3_IMAGE_URI: docker.io/ivvitc/nos3-64:20251107 + NOS3_MISSION_CFG_FILE: ../cfg/nos3-mission.xml + NOS3_USER: nos3 + OPENMCT_GIT_COMMIT: master + OPENMCT_GIT_URL: https://github.com/akhenry/openmct-yamcs.git + OPENMCT_IMAGE_URI: docker.io/library/ubuntu:25.04 + OPENMCT_NODE_VERSION: v21.7.3 + OPENMCT_NVM_VERSION: v0.40.1 + OPENMCT_PORT: "9000" + PROJECT_NAME: nos3-m01-sc01 + SIM_T0_DATETIME: '"2025-12-29 15:56:43 UTC"' + SIM_T0_EPOCH_MILLISECONDS: "1767023833000" + SIM_T0_EPOCH_SECONDS: "1767023833" + SIM_TF_EPOCH_MILLISECONDS: "1767027433000" + SPACECRAFT: sc01 + START_TIME: "820295833" + TIME_INTERVAL: "3600" + TIME_INTERVAL_MILLISECONDS: "3600000" + TIME_OFFSET_SECONDS: "+30" + YAMCS_DATA_DIR: /home/nos3/.nos3/yamcs/target/yamcs/yamcs-data + YAMCS_GIT_COMMIT: nos3-dev + YAMCS_GIT_URL: https://github.com/nasa-itc/nos3_yamcs_master.git + YAMCS_INSTANCES: nos3 + YAMCS_PORT: "8090" diff --git a/deployments/targets/kubernetes/fortytwo/configmap.yaml b/deployments/targets/kubernetes/fortytwo/configmaps/volumes-configmap.yaml similarity index 86% rename from deployments/targets/kubernetes/fortytwo/configmap.yaml rename to deployments/targets/kubernetes/fortytwo/configmaps/volumes-configmap.yaml index f9f08cf15..e82b4932f 100644 --- a/deployments/targets/kubernetes/fortytwo/configmap.yaml +++ b/deployments/targets/kubernetes/fortytwo/configmaps/volumes-configmap.yaml @@ -1,5 +1,12 @@ --- apiVersion: v1 + +kind: ConfigMap +metadata: + annotations: + use-subpath: "true" + name: nos3-m01-sc01-fortytwo-volumes + data: entrypoint.sh: | #!/bin/bash @@ -16,7 +23,7 @@ data: websockify -D \ --web=/usr/share/novnc/ \ --cert=~/novnc.pem 80 localhost:5901 - + export DISPLAY=${DISPLAY:-:1} export DIR=/opt/nasa-itc export GIT_FOLDER=${GIT_FOLDER} @@ -25,10 +32,8 @@ data: rm -rf /opt/nasa-itc/42/NO3InOut/{*.42,*.csv} - RECOMPILE=${RECOMPILE:-true} - if [ "$RECOMPILE" == "true" ]; then - cd /42 && \ + cd /opt/nasa-itc/42 && \ git fetch && \ git checkout ${GIT_COMMIT} && \ git pull origin && \ @@ -38,19 +43,11 @@ data: fi STARTUP_FOLDER=${STARTUP_FOLDER:-NO3InOut} - STARTUP_FOLDER=./ - cd /42 && \ + cd /opt/nasa-itc/42 && \ xterm -e "./42 ${STARTUP_FOLDER}" & echo "Started 42 with PID $!" tail -f /dev/null -kind: ConfigMap -metadata: - annotations: - use-subpath: "true" - labels: - app: nos3-m01-sc01-fortytwo - name: nos3-m01-sc01-fortytwo-cm diff --git a/deployments/targets/kubernetes/fortytwo/deployment.yaml b/deployments/targets/kubernetes/fortytwo/deployment.yaml index dc744e179..35bea97d1 100644 --- a/deployments/targets/kubernetes/fortytwo/deployment.yaml +++ b/deployments/targets/kubernetes/fortytwo/deployment.yaml @@ -1,10 +1,13 @@ --- apiVersion: apps/v1 + kind: Deployment + metadata: name: nos3-m01-sc01-fortytwo labels: app: nos3-m01-sc01-fortytwo + spec: replicas: 1 selector: @@ -23,9 +26,9 @@ spec: value: fortytwo - name: DISPLAY value: :1 - image: ghcr.io/ericstoneking/42:latest + image: ghcr.io/haisamido/nos3-base-fortytwo:dev workingDir: /42 - imagePullPolicy: IfNotPresent + imagePullPolicy: Always name: nos3-m01-sc01-fortytwo ports: - containerPort: 80 @@ -41,7 +44,7 @@ spec: privileged: true volumeMounts: - mountPath: /entrypoint.sh - name: nos3-m01-sc01-fortytwo-cm + name: nos3-m01-sc01-fortytwo-volumes subPath: entrypoint.sh hostname: fortytwo restartPolicy: Always @@ -50,7 +53,6 @@ spec: items: - key: entrypoint.sh path: entrypoint.sh - name: nos3-m01-sc01-fortytwo-cm + name: nos3-m01-sc01-fortytwo-volumes defaultMode: 0555 - name: nos3-m01-sc01-fortytwo-cm - + name: nos3-m01-sc01-fortytwo-volumes diff --git a/deployments/targets/kubernetes/fortytwo/ingress.yaml b/deployments/targets/kubernetes/fortytwo/ingress.yaml new file mode 100644 index 000000000..e69de29bb diff --git a/deployments/targets/kubernetes/fortytwo/kustomization.yaml b/deployments/targets/kubernetes/fortytwo/kustomization.yaml index 164db37ac..3d7dc0f0e 100644 --- a/deployments/targets/kubernetes/fortytwo/kustomization.yaml +++ b/deployments/targets/kubernetes/fortytwo/kustomization.yaml @@ -2,6 +2,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - - ./configmap.yaml + - ./configmaps/args-configmap.yaml + - ./configmaps/env-configmap.yaml + - ./configmaps/volumes-configmap.yaml - ./deployment.yaml - ./service.yaml + - ./ingress.yaml diff --git a/deployments/targets/kubernetes/fortytwo/service.yaml b/deployments/targets/kubernetes/fortytwo/service.yaml index 496627810..234314595 100644 --- a/deployments/targets/kubernetes/fortytwo/service.yaml +++ b/deployments/targets/kubernetes/fortytwo/service.yaml @@ -1,8 +1,11 @@ --- apiVersion: v1 + kind: Service + metadata: name: nos3-m01-sc01-fortytwo + spec: selector: app: nos3-m01-sc01-fortytwo diff --git a/deployments/targets/kubernetes/kustomization.yaml b/deployments/targets/kubernetes/kustomization.yaml index 0ee2b4715..58106a6c3 100644 --- a/deployments/targets/kubernetes/kustomization.yaml +++ b/deployments/targets/kubernetes/kustomization.yaml @@ -3,8 +3,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ./fortytwo - - ./fsw - - ./nos-engine-server - - ./gps - - ./time + # - ./fsw + # - ./nos-engine-server + # - ./gps + # - ./time \ No newline at end of file From de77d0edc54d366ddaca29423c7ff0b25a9e9176 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 30 Dec 2025 16:53:16 -0500 Subject: [PATCH 061/111] removed unused startapp.sh script --- deployments/services/42/Dockerfile | 2 -- deployments/services/42/startapp.sh | 22 ---------------------- deployments/targets/docker/compose.yaml | 1 - 3 files changed, 25 deletions(-) delete mode 100755 deployments/services/42/startapp.sh diff --git a/deployments/services/42/Dockerfile b/deployments/services/42/Dockerfile index 2a74b0d87..0cc1a091a 100644 --- a/deployments/services/42/Dockerfile +++ b/deployments/services/42/Dockerfile @@ -134,6 +134,4 @@ RUN mkdir -p /opt/nasa-itc && \ COPY entrypoint.sh /entrypoint.sh -COPY startapp.sh /startapp.sh - CMD ["/entrypoint.sh"] diff --git a/deployments/services/42/startapp.sh b/deployments/services/42/startapp.sh deleted file mode 100755 index 70b8c2b0e..000000000 --- a/deployments/services/42/startapp.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -export DISPLAY=:1 - -DIR=/opt/nasa-itc - -xterm& - -cd ${DIR} && git clone https://github.com/nasa-itc/42.git || true && \ -cd ${DIR}/42 && \ - git fetch && \ - git checkout nos3-main && \ - make clean && \ - make -j7 - -cd ${DIR}/42 && xterm -e ./42 & -echo "Started 42 in xterm with PID $!" - -xterm & - -tail -f /dev/null - diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index 8d91600ea..962675350 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -36,7 +36,6 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/InOut/Inp_IPC.txt:/opt/nasa-itc/42/NOS3InOut/Inp_IPC.txt - ${PWD}/${NOS3_CFG_PATH}/cfg/build/InOut/Inp_Sim.txt:/opt/nasa-itc/42/NOS3InOut/Inp_Sim.txt - ${PWD}/services/42/entrypoint.sh:/entrypoint.sh - - ${PWD}/services/42/startapp.sh:/startapp.sh ports: - "127.0.0.1:30090:80" environment: From 4e3bb6c74fb62740499149691d8c75e2b4727c1b Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 30 Dec 2025 17:00:19 -0500 Subject: [PATCH 062/111] rm empty file --- deployments/services/42/ivvtc/entrypoint.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 deployments/services/42/ivvtc/entrypoint.sh diff --git a/deployments/services/42/ivvtc/entrypoint.sh b/deployments/services/42/ivvtc/entrypoint.sh deleted file mode 100755 index e69de29bb..000000000 From 62813e191a847213feb0b914b36d1c586fe42b7d Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 30 Dec 2025 17:18:41 -0500 Subject: [PATCH 063/111] removed unused compose files --- .../targets/docker/docker-compose_new.yaml | 805 ------------------ .../targets/docker/docker-compose_orig.yaml | 220 ----- 2 files changed, 1025 deletions(-) delete mode 100644 deployments/targets/docker/docker-compose_new.yaml delete mode 100644 deployments/targets/docker/docker-compose_orig.yaml diff --git a/deployments/targets/docker/docker-compose_new.yaml b/deployments/targets/docker/docker-compose_new.yaml deleted file mode 100644 index d9727fa26..000000000 --- a/deployments/targets/docker/docker-compose_new.yaml +++ /dev/null @@ -1,805 +0,0 @@ -#name: nos3-m01-sc01 - -services: - nos3-fortytwo: - image: ghcr.io/haisamido/nos3-base-fortytwo:dev - env_file: - - .env - build: - context: ./42 - dockerfile: Dockerfile - args: - DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} - HTTPS_PROXY: ${HTTPS_PROXY} - HTTP_PROXY: ${HTTP_PROXY} - NO_PROXY: ${NO_PROXY} - MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} - GIT_URL: ${FORTYTWO_GIT_URL} - GIT_COMMIT: ${FORTYTWO_GIT_COMMIT} - GIT_FOLDER: ${FORTYTWO_GIT_FOLDER:-42} - STARTUP_FOLDER: ${FORTYTWO_STARTUP_FOLDER} - RECOMPILE: ${FORTYTWO_RECOMPILE:-false} - BASE_DIR: ${FORTYTWO_BASE_DIR} - VNC_PASSWORD: ${FORTYTWO_VNC_PASSWORD} - healthcheck: - test: ["CMD-SHELL", "/usr/bin/pgrep 42"] - interval: 10s - timeout: 5s - retries: 5 - attach: true - container_name: sc01-fortytwo - hostname: fortytwo - working_dir: "/opt/nasa-itc/" - command: '/entrypoint.sh' - volumes: - - ${PWD}/../../cfg/InOut/:/opt/nasa-itc/42/NOS3InOut/ - - ${PWD}/42/entrypoint.sh:/entrypoint.sh - - ${PWD}/42/startapp.sh:/startapp.sh - ports: - - "127.0.0.1:30090:80" - environment: - DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} - HTTPS_PROXY: ${HTTPS_PROXY} - HTTP_PROXY: ${HTTP_PROXY} - NO_PROXY: ${NO_PROXY} - MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} - GIT_URL: ${FORTYTWO_GIT_URL} - GIT_COMMIT: ${FORTYTWO_GIT_COMMIT} - GIT_FOLDER: ${FORTYTWO_GIT_FOLDER:-42} - STARTUP_FOLDER: ${FORTYTWO_STARTUP_FOLDER} - RECOMPILE: ${FORTYTWO_RECOMPILE:-false} - BASE_DIR: ${FORTYTWO_BASE_DIR} - VNC_PASSWORD: ${FORTYTWO_VNC_PASSWORD} - networks: - nos3-sc01-00: - nos3-core-00: - - nos3-gsw: - image: ghcr.io/haisamido/nos3-base-yamcs:dev - env_file: - - .env - build: - context: ./yamcs - dockerfile: Dockerfile - args: - DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} - HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - HTTPS_PROXY: ${HTTPS_PROXY} - HTTP_PROXY: ${HTTP_PROXY} - NO_PROXY: ${NO_PROXY} - MAVEN_REPO_LOCAL: ${MAVEN_REPO_LOCAL} - MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} - COMPONENT_DIR: ${COMPONENT_DIR} - YAMCS_DATA_DIR: ${YAMCS_DATA_DIR} - GSW_SOFTWARE: ${GSW_SOFTWARE} - GIT_URL: ${YAMCS_GIT_URL} - GIT_COMMIT: ${YAMCS_GIT_COMMIT} - healthcheck: - test: ["CMD-SHELL", "curl http://localhost:8090/api"] - interval: 10s - timeout: 5s - retries: 5 - attach: true - container_name: cosmos-openc3-operator-1 - hostname: cosmos - working_dir: "/home/nos3/.nos3/yamcs" - command: "/entrypoint.sh" - volumes: - - ${PWD}/yamcs/entrypoint.sh:/entrypoint.sh - - ${PWD}/yamcs/settings.xml:/home/nos3/.nos3/yamcs/settings.xml - ports: - - "127.0.0.1:8090:8090" - - "5012:5012" - tty: true - stdin_open: true - privileged: true - environment: - DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} - HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - HTTPS_PROXY: ${HTTPS_PROXY} - HTTP_PROXY: ${HTTP_PROXY} - NO_PROXY: ${NO_PROXY} - MAVEN_REPO_LOCAL: ${MAVEN_REPO_LOCAL} - MAVEN_HTTPS_PROXY: ${MAVEN_HTTPS_PROXY} - COMPONENT_DIR: ${COMPONENT_DIR} - YAMCS_DATA_DIR: ${YAMCS_DATA_DIR} - GSW_SOFTWARE: ${GSW_SOFTWARE} - GIT_URL: ${YAMCS_GIT_URL} - GIT_COMMIT: ${YAMCS_GIT_COMMIT} - networks: - nos3-sc01-00: - aliases: - - active-gs - - yamcs - nos3-core-00: - - nos3-sidecar: - image: ghcr.io/haisamido/nos3-base:dev - env_file: - - .env - attach: true - container_name: sc01-nos-sidecar - hostname: sc01-sidecar - working_dir: "/home/nos3/" - command: "/entrypoint.sh active-gs 8090" - volumes: - - ${PWD}/sidecar/entrypoint.sh:/entrypoint.sh - - ${PWD}/sidecar/commanding.py:/commanding.py - healthcheck: - test: ["CMD-SHELL", "curl http://active-gs:8090/api"] - interval: 10s - timeout: 5s - retries: 5 - depends_on: - nos3-gsw: - condition: service_healthy - # nos3-truth42sim: - # condition: service_started - nos3-hw-components: - condition: service_healthy - # nos3-cryptolib: - # condition: service_started - networks: - nos3-sc01-00: - nos3-core-00: - - nos3-hw-components: - image: ghcr.io/haisamido/nos3-base:dev - env_file: - - .env - attach: true - container_name: sc01-hw-components - hostname: sc01-hw-components - command: "/entrypoint.sh" - volumes: - - ${PWD}/hw-components/entrypoint.sh:/entrypoint.sh - - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - healthcheck: - test: [ "CMD-SHELL", "/usr/bin/pgrep -f nos3-single-simulator && /usr/bin/pgrep -f ./support/standalone" ] - interval: 10s - timeout: 5s - retries: 7 - depends_on: - nos3-fortytwo: - condition: service_healthy - nos3-nos-engine-server: - condition: service_healthy - nos3-fsw: - condition: service_healthy - nos3-gsw: - condition: service_healthy - networks: - nos3-sc01-00: - aliases: - - camsim - - sc01-camsim - - css - - eps - - fss - - gps - - imu - - mag - - rw0 - - rw1 - - rw2 - - sample - - star-tracker - - thruster - - torquer - - radio-sim - - cryptolib -# - truth42sim - nos3-core-00: - - # nos3-onair: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # container_name: sc01-onair - # working_dir: /home/nos3/builds/nos3/fsw/build/exe/cpu1 - # command: "/home/nos3/builds/nos3/scripts/fsw/onair_launch.sh" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # tty: true - # stdin_open: true - # privileged: true - # environment: - # BASE_DIR: /home/nos3/builds/nos3 - # FSW_DIR: /home/nos3/builds/nos3/fsw/build/exe/cpu1 - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # SCRIPT_DIR: - # networks: - # nos3-sc01-00: - # nos3-core-00: - - nos3-fsw: - image: ghcr.io/haisamido/nos3-base:dev - env_file: - - .env - healthcheck: - test: ["CMD-SHELL", "/usr/bin/pgrep core-cpu1"] - interval: 10s - timeout: 5s - retries: 5 - attach: true - depends_on: - nos3-fortytwo: - condition: service_healthy - nos3-nos-engine-server: - condition: service_healthy - container_name: sc01-nos-fsw - hostname: nos-fsw - working_dir: /home/nos3/builds/nos3/ - volumes: - - ${PWD}/fsw/entrypoint.sh:/entrypoint.sh - command: "/entrypoint.sh" - sysctls: - fs.mqueue.msg_max: 10000 - ulimits: - rtprio: 99 - cap_add: - - sys_nice - environment: - BASE_DIR: /home/nos3/builds/nos3 - FSW_DIR: /home/nos3/builds/nos3/fsw/build/exe/cpu1 - HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - networks: - nos3-sc01-00: - nos3-core-00: - - nos3-nos-engine-server: - image: ghcr.io/haisamido/nos3-base:dev - env_file: - - .env - attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - healthcheck: - test: ["CMD-SHELL", "/usr/bin/nc -vz nos-engine-server 12000 && /usr/bin/nc -vz nos-engine-server 12001"] - interval: 10s - timeout: 5s - retries: 5 - container_name: sc01-nos-engine-server - hostname: nos-engine-server - working_dir: /home/nos3/builds/nos3/sims/build/bin - command: "/usr/bin/nos_engine_server_standalone -f ./nos_engine_server_config.json" - volumes: - - ${PWD}/../nos3/cfg/sims/nos_engine_server_config.json:/home/nos3/builds/nos3/sims/build/bin/nos_engine_server_config.json - ports: - - "127.0.0.1:12000:12000" - - "127.0.0.1:12001:12001" - tty: true - environment: - HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - networks: - nos3-sc01-00: - aliases: - - sc01-nos-engine-server - nos3-core-00: - - nos3-truth42sim: - image: ghcr.io/haisamido/nos3-base:dev - env_file: - - .env - attach: true - depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-gsw: - # condition: service_healthy - nos3-nos-engine-server: - condition: service_healthy - container_name: sc01-truth42sim - hostname: truth42sim - working_dir: /home/nos3/builds/nos3/sims/build/bin - command: "./nos3-single-simulator -f ./nos3-simulator.xml truth42sim" - volumes: - - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - tty: true - stdin_open: true - privileged: true - environment: - HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - networks: - nos3-sc01-00: - nos3-core-00: - - nos3-nos-terminal: - image: ghcr.io/haisamido/nos3-base:dev - env_file: - - .env - attach: true - container_name: nos-terminal - hostname: nos-terminal - working_dir: /home/nos3/builds/nos3/sims/build/bin - command: "./nos3-single-simulator -f ./nos3-simulator.xml stdio-terminal" - volumes: - - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - tty: true - stdin_open: true - privileged: true - environment: - HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - networks: - nos3-sc01-00: - nos3-core-00: - - nos3-nos-udp-terminal: - image: ghcr.io/haisamido/nos3-base:dev - env_file: - - .env - attach: true - container_name: nos-udp-terminal - hostname: nos-udp-terminal - working_dir: /home/nos3/builds/nos3/sims/build/bin - command: "./nos3-single-simulator -f ./nos3-simulator.xml udp-terminal" - volumes: - - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - tty: true - stdin_open: true - privileged: true - environment: - HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - networks: - nos3-sc01-00: - nos3-core-00: - - nos3-nos-sim-bridge: - image: ghcr.io/haisamido/nos3-base:dev - env_file: - - .env - attach: true - container_name: nos-sim-bridge - working_dir: /home/nos3/builds/nos3/sims/build/bin - command: "./nos3-sim-cmdbus-bridge -f ./nos3-simulator.xml" - volumes: - - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - tty: true - stdin_open: true - privileged: true - environment: - HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - networks: - nos3-sc01-00: - nos3-core-00: - - # nos3-camsim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-cam-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml camsim" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - camsim - # - sc01-camsim - # nos3-core-00: - - # nos3-css-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-css-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-css-sim" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - css - # nos3-core-00: - - # nos3-eps-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-nos-engine-server: - # condition: service_healthy - # nos3-fortytwo: - # condition: service_started - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-eps-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-eps-sim" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - eps - # nos3-core-00: - - # nos3-fss-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-fss-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-fss-sim" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - fss - # nos3-core-00: - - # nos3-gps-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-gps-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml gps" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - gps - # nos3-core-00: - - # nos3-imu-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-imu-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-imu-sim" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - imu - # nos3-core-00: - - # nos3-mag-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-mag-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-mag-sim" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - mag - # nos3-core-00: - - # nos3-rw-sim0: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-rw-sim0 - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim0" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - rw0 - # nos3-core-00: - - # nos3-rw-sim1: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-rw-sim1 - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim1" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - rw1 - # nos3-core-00: - - # nos3-rw-sim2: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-rw-sim2 - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim2" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - rw2 - # nos3-core-00: - - # nos3-radio-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # healthcheck: - # test: [ "CMD-SHELL", "/usr/bin/pgrep -f nos3-single-simulator" ] - # interval: 10s - # timeout: 5s - # retries: 7 - # depends_on: - # nos3-cryptolib: - # condition: service_started - # container_name: sc01-radio-sim - # hostname: radio-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "/entrypoint.sh" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # - ${PWD}/radio-sim/entrypoint.sh:/entrypoint.sh - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # # aliases: - # # - radio-sim - # nos3-core-00: - -# nos3-cryptolib: -# image: ghcr.io/haisamido/nos3-base:dev -# env_file: -# - .env -# attach: true -# healthcheck: -# test: ["CMD-SHELL", "/usr/bin/pgrep -f ./support/standalone"] -# interval: 10s -# timeout: 5s -# retries: 5 -# depends_on: -# # nos3-radio-sim: -# # condition: service_started -# nos3-fsw: -# condition: service_healthy -# container_name: sc01_cryptolib-gsw -# # hostname: cryptolib -# working_dir: /home/nos3/builds/nos3/gsw/build -# command: "./support/standalone" -# volumes: -# - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml -# environment: -# HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} -# networks: -# nos3-sc01-00: -# aliases: -# - cryptolib -# nos3-core-00: - - # nos3-radio-sim-cryptolib: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # healthcheck: - # test: [ "CMD-SHELL", "/usr/bin/pgrep -f nos3-single-simulator && /usr/bin/pgrep -f ./support/standalone" ] - # interval: 10s - # timeout: 5s - # retries: 7 - # depends_on: - # nos3-fsw: - # condition: service_healthy - # nos3-gsw: - # condition: service_healthy - # container_name: sc01-radio-sim-cryptolib - # hostname: radio-sim-cryptolib - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "/entrypoint.sh" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # - ${PWD}/radio-sim/entrypoint2.sh:/entrypoint.sh - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # aliases: - # - radio-sim - # - cryptolib - # nos3-core-00: - - # nos3-sample-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-sample-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml sample-sim" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # nos3-core-00: - - # nos3-startrk-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-startrk-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-star-tracker-sim" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # nos3-core-00: - - # nos3-thruster-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-thruster-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-thruster-sim" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # nos3-core-00: - - # nos3-torquer-sim: - # image: ghcr.io/haisamido/nos3-base:dev - # env_file: - # - .env - # attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-fsw: - # condition: service_healthy - # container_name: sc01-torquer-sim - # hostname: trq-sim - # working_dir: /home/nos3/builds/nos3/sims/build/bin - # command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-torquer-sim" - # volumes: - # - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - # environment: - # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - # networks: - # nos3-sc01-00: - # nos3-core-00: - - nos3-time: - image: ghcr.io/haisamido/nos3-base:dev - env_file: - - .env - attach: true - depends_on: - nos3-nos-engine-server: - condition: service_healthy - container_name: nos-time-driver - hostname: nos-time-driver - working_dir: /home/nos3/builds/nos3/sims/build/bin - command: "./nos3-single-simulator -f ./nos3-simulator.xml time" - volumes: - - ${PWD}/../nos3/cfg/sims/nos3-simulator.xml:/home/nos3/builds/nos3/sims/build/bin/nos3-simulator.xml - tty: true - stdin_open: true - privileged: true - environment: - HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} - networks: - nos3-sc01-00: - aliases: - - sc01-nos-time-driver - nos3-core-00: - -networks: - nos3-core-00: - external: ${EXTERNAL_NETWORK_CORE:-false} - name: nos3-core - nos3-sc01-00: - external: ${EXTERNAL_NETWORK_SC01:-false} - name: nos3-sc01 diff --git a/deployments/targets/docker/docker-compose_orig.yaml b/deployments/targets/docker/docker-compose_orig.yaml deleted file mode 100644 index 719f812dc..000000000 --- a/deployments/targets/docker/docker-compose_orig.yaml +++ /dev/null @@ -1,220 +0,0 @@ -name: nos3-m01-sc01 - -services: - nos3-fortytwo: -# image: docker.io/haisamido/42:20250217 - image: localhost/library/42:master - deploy: - resources: - limits: - cpus: '3' - memory: "2048MB" - reservations: - cpus: '1' - memory: "2048MB" - container_name: 00_m01-sc01_fortytwo - hostname: fortytwo - command: /entrypoint.sh - # healthcheck: - # test: ["CMD-SHELL", "nc -vz localhost 10000"] - # interval: 5s - # timeout: 5s - # retries: 5 - volumes: - - /Users/hido/development/github.com/haisamido/nos3/deployments/docker/42/entrypoint.sh:/entrypoint.sh - - /Users/hido/development/github.com/haisamido/nos3/deployments/docker/42/startapp.sh:/startapp.sh - - ${HOME}/development/github.com/nasa-itc/42:/opt/nasa-itc/42 - tty: true - stdin_open: true - environment: - HEALTHCHECK_PORT: 60000 - BASE_DIR: /builds/nos3 - SIM_BIN: /builds/nos3/sims/build/bin - SIMULATOR_BIN: /builds/nos3/sims/build/bin/nos3-single-simulator - LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml - CFG_FILE: /builds/nos3/sims/build/bin/nos3-simulator.xml - COMPONENT_NAME: fortytwo - DISPLAY: ":1" - ports: - - 30060:80 - privileged: true - networks: - - nos3_m01-sc01 - - nos3_core - - nos3-fsw: -# image: nos3-64-base:dev - image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 - deploy: - resources: - limits: - memory: "128M" - cpus: ".100" - reservations: - memory: "128M" - cpus: ".100" - container_name: 01_m01-sc01_nos_fsw - hostname: nos_fsw - command: "/entrypoint.sh" - working_dir: /builds/nos3/fsw/build/exe/cpu1 - sysctls: - fs.mqueue.msg_max: 10000 - ulimits: - rtprio: 99 - cap_add: - - sys_nice - volumes: - - ${PWD}/entrypoint_fsw.sh:/entrypoint.sh - depends_on: - nos3-fortytwo: - condition: service_started - tty: true - stdin_open: true - environment: - HEALTHCHECK_PORT: 60000 - BASE_DIR: /builds/nos3 - SIM_BIN: /builds/nos3/sims/build/bin - SCRIPT_DIR: /builds/nos3/scripts - SIMULATOR_BIN: /usr/bin/nos_engine_server_standalone - LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml - CFG_FILE: /builds/nos3/sims/build/bin/nos_engine_server_config.json - COMPONENT_NAME: fsw - privileged: true - networks: - - nos3_m01-sc01 - - nos3_core - - nos3-nos_engine_server: -# image: nos3-64-base:dev - image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 - container_name: 02_m01-sc01_nos_engine_server -# hostname: nos-engine-server - hostname: nos-engine-server - command: "/entrypoint.sh" - working_dir: /builds/nos3/sims/build/bin - tty: true - stdin_open: true - volumes: - - ${PWD}/entrypoint_nos_engine_server.sh:/entrypoint.sh - # TODO: activating the below seems to make port 12000 unavailable!!! - # healthcheck: - # test: ["CMD-SHELL", "nc -vz localhost 12000"] - # interval: 5s - # timeout: 5s - # retries: 5 - depends_on: - nos3-fsw: - condition: service_started - environment: - HEALTHCHECK_PORT: 60000 - BASE_DIR: /builds/nos3 - SIM_BIN: /builds/nos3/sims/build/bin - SIMULATOR_BIN: /usr/bin/nos_engine_server_standalone - LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml - CFG_FILE: /builds/nos3/sims/build/bin/nos_engine_server_config.json - COMPONENT_NAME: - privileged: true - networks: - nos3_m01-sc01: - aliases: - - nos_engine_server - nos3_core: - - nos3-gps: - image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 - container_name: 03_m01-sc01_gps_sim - hostname: gps - depends_on: - nos3-nos_engine_server: - condition: service_started - tty: true - stdin_open: true - environment: - HEALTHCHECK_PORT: 60000 - BASE_DIR: /builds/nos3 - SIM_BIN: /builds/nos3/sims/build/bin - SIMULATOR_BIN: /builds/nos3/sims/build/bin/nos3-single-simulator - LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml - CFG_FILE: /builds/nos3/sims/build/bin/nos3-simulator.xml - COMPONENT_NAME: gps - privileged: true - networks: - - nos3_m01-sc01 - - nos3_core - - nos3-time: - image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 - container_name: 04_nos_time_driver - hostname: time - depends_on: - nos3-nos_engine_server: - condition: service_started - nos3-gps: - condition: service_started - tty: true - stdin_open: true - environment: - HEALTHCHECK_PORT: 60000 - BASE_DIR: /builds/nos3 - SIM_BIN: /builds/nos3/sims/build/bin - SIMULATOR_BIN: /builds/nos3/sims/build/bin/nos3-single-simulator - LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml - CFG_FILE: /builds/nos3/sims/build/bin/nos3-simulator.xml - COMPONENT_NAME: time - privileged: true - networks: - nos3_m01-sc01: - aliases: - - nos_time_driver - - nos-time-driver - nos3_core: - -# nos3-truth42sim: -# image: nos3-64-base:dev -# # image: registry.appdat.jsc.nasa.gov/ssmo/images/ssmo/nos3/nos3-base:20250217 -# container_name: m01-sc01_truth42sim -# hostname: truth42sim -# depends_on: -# nos3-nos_engine_server: -# condition: service_started -# nos3-fortytwo: -# condition: service_healthy -# environment: -# HEALTHCHECK_PORT: 60000 -# BASE_DIR: /builds/nos3 -# SIM_BIN: /builds/nos3/sims/build/bin -# SIMULATOR_BIN: /builds/nos3/sims/build/bin/nos3-single-simulator -# LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml -# CFG_FILE: /builds/nos3/sims/build/bin/nos3-simulator.xml -# COMPONENT_NAME: truth42sim -# privileged: true -# networks: -# - nos3_m01-sc01 -# - nos3_core - -networks: - nos3_core: - driver: bridge - nos3_m01-sc01: - - # nos3-fortytwo-2: - # image: ghcr.io/ericstoneking/42:latest - # container_name: m01-sc01_fortytwo2 - # hostname: fortytwo2 - # volumes: - # - ${HOME}/development/github.com/haisamido/nos3/deployments/scripts/42/startapp.sh:/startapp.sh - # - ${HOME}/development/github.com/nasa-itc/42:/opt/nasa-itc/42 - # environment: - # HEALTHCHECK_PORT: 60000 - # BASE_DIR: /builds/nos3 - # SIM_BIN: /builds/nos3/sims/build/bin - # SIMULATOR_BIN: /builds/nos3/sims/build/bin/nos3-single-simulator - # LOG_CONFIG: /builds/nos3/sims/build/bin/sim_log_config.xml - # CFG_FILE: /builds/nos3/sims/build/bin/nos3-simulator.xml - # COMPONENT_NAME: fortytwo - # ports: - # - 30040:80 - # privileged: true - # networks: - # - nos3_m01-sc01 - # - nos3_core \ No newline at end of file From d866a1ebbd946503b42fb54133cbc49d91ecd9aa Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 30 Dec 2025 17:57:03 -0500 Subject: [PATCH 064/111] renamed services/42 to services/fortytwo --- .../DEFUNCT.ivvtc}/Dockerfile | 0 .../DEFUNCT.kubernetes}/deployment.yaml | 0 .../DEFUNCT.kubernetes}/ingress.yaml | 0 .../DEFUNCT.kubernetes}/kubernetes.sh | 0 .../DEFUNCT.kubernetes}/kustomization.yaml | 0 .../DEFUNCT.kubernetes}/pv.yaml | 0 .../DEFUNCT.kubernetes}/service.yaml | 0 .../services/{42 => fortytwo}/Dockerfile | 0 .../services/{42 => fortytwo}/entrypoint.sh | 0 .../kubernetes/configmaps/args-configmap.yaml | 0 .../kubernetes/configmaps/env-configmap.yaml | 65 +++++++++++++++++++ .../configmaps/volumes-configmap.yaml | 53 +++++++++++++++ .../fortytwo/kubernetes/deployment.yaml | 58 +++++++++++++++++ .../services/fortytwo/kubernetes/ingress.yaml | 0 .../fortytwo/kubernetes/kustomization.yaml | 10 +++ .../services/fortytwo/kubernetes/service.yaml | 17 +++++ .../services/{42 => fortytwo}/nos3.yaml | 0 deployments/targets/docker/compose.yaml | 4 +- 18 files changed, 205 insertions(+), 2 deletions(-) rename deployments/services/{42/ivvtc => fortytwo/DEFUNCT.ivvtc}/Dockerfile (100%) rename deployments/services/{42/kubernetes => fortytwo/DEFUNCT.kubernetes}/deployment.yaml (100%) rename deployments/services/{42/kubernetes => fortytwo/DEFUNCT.kubernetes}/ingress.yaml (100%) rename deployments/services/{42/kubernetes => fortytwo/DEFUNCT.kubernetes}/kubernetes.sh (100%) rename deployments/services/{42/kubernetes => fortytwo/DEFUNCT.kubernetes}/kustomization.yaml (100%) rename deployments/services/{42/kubernetes => fortytwo/DEFUNCT.kubernetes}/pv.yaml (100%) rename deployments/services/{42/kubernetes => fortytwo/DEFUNCT.kubernetes}/service.yaml (100%) rename deployments/services/{42 => fortytwo}/Dockerfile (100%) rename deployments/services/{42 => fortytwo}/entrypoint.sh (100%) create mode 100644 deployments/services/fortytwo/kubernetes/configmaps/args-configmap.yaml create mode 100644 deployments/services/fortytwo/kubernetes/configmaps/env-configmap.yaml create mode 100644 deployments/services/fortytwo/kubernetes/configmaps/volumes-configmap.yaml create mode 100644 deployments/services/fortytwo/kubernetes/deployment.yaml create mode 100644 deployments/services/fortytwo/kubernetes/ingress.yaml create mode 100644 deployments/services/fortytwo/kubernetes/kustomization.yaml create mode 100644 deployments/services/fortytwo/kubernetes/service.yaml rename deployments/services/{42 => fortytwo}/nos3.yaml (100%) diff --git a/deployments/services/42/ivvtc/Dockerfile b/deployments/services/fortytwo/DEFUNCT.ivvtc/Dockerfile similarity index 100% rename from deployments/services/42/ivvtc/Dockerfile rename to deployments/services/fortytwo/DEFUNCT.ivvtc/Dockerfile diff --git a/deployments/services/42/kubernetes/deployment.yaml b/deployments/services/fortytwo/DEFUNCT.kubernetes/deployment.yaml similarity index 100% rename from deployments/services/42/kubernetes/deployment.yaml rename to deployments/services/fortytwo/DEFUNCT.kubernetes/deployment.yaml diff --git a/deployments/services/42/kubernetes/ingress.yaml b/deployments/services/fortytwo/DEFUNCT.kubernetes/ingress.yaml similarity index 100% rename from deployments/services/42/kubernetes/ingress.yaml rename to deployments/services/fortytwo/DEFUNCT.kubernetes/ingress.yaml diff --git a/deployments/services/42/kubernetes/kubernetes.sh b/deployments/services/fortytwo/DEFUNCT.kubernetes/kubernetes.sh similarity index 100% rename from deployments/services/42/kubernetes/kubernetes.sh rename to deployments/services/fortytwo/DEFUNCT.kubernetes/kubernetes.sh diff --git a/deployments/services/42/kubernetes/kustomization.yaml b/deployments/services/fortytwo/DEFUNCT.kubernetes/kustomization.yaml similarity index 100% rename from deployments/services/42/kubernetes/kustomization.yaml rename to deployments/services/fortytwo/DEFUNCT.kubernetes/kustomization.yaml diff --git a/deployments/services/42/kubernetes/pv.yaml b/deployments/services/fortytwo/DEFUNCT.kubernetes/pv.yaml similarity index 100% rename from deployments/services/42/kubernetes/pv.yaml rename to deployments/services/fortytwo/DEFUNCT.kubernetes/pv.yaml diff --git a/deployments/services/42/kubernetes/service.yaml b/deployments/services/fortytwo/DEFUNCT.kubernetes/service.yaml similarity index 100% rename from deployments/services/42/kubernetes/service.yaml rename to deployments/services/fortytwo/DEFUNCT.kubernetes/service.yaml diff --git a/deployments/services/42/Dockerfile b/deployments/services/fortytwo/Dockerfile similarity index 100% rename from deployments/services/42/Dockerfile rename to deployments/services/fortytwo/Dockerfile diff --git a/deployments/services/42/entrypoint.sh b/deployments/services/fortytwo/entrypoint.sh similarity index 100% rename from deployments/services/42/entrypoint.sh rename to deployments/services/fortytwo/entrypoint.sh diff --git a/deployments/services/fortytwo/kubernetes/configmaps/args-configmap.yaml b/deployments/services/fortytwo/kubernetes/configmaps/args-configmap.yaml new file mode 100644 index 000000000..e69de29bb diff --git a/deployments/services/fortytwo/kubernetes/configmaps/env-configmap.yaml b/deployments/services/fortytwo/kubernetes/configmaps/env-configmap.yaml new file mode 100644 index 000000000..5b7e71ef5 --- /dev/null +++ b/deployments/services/fortytwo/kubernetes/configmaps/env-configmap.yaml @@ -0,0 +1,65 @@ +apiVersion: v1 + +kind: ConfigMap + +metadata: + name: nos3-m01-sc01-fortytwo-env + +data: + BASE_DIR: /opt/nasa-itc + COMPONENT_DIR: /home/nos3/builds/nos3/components + COMPOSE_PROJECT_NAME: nos3-m01-sc01 + DEPLOYMENT_ENVIRO: "" + FORTYTWO_BASE_DIR: /opt/nasa-itc + FORTYTWO_DISPLAY: :1 + FORTYTWO_GIT_COMMIT: nos3-main + FORTYTWO_GIT_FOLDER: "42" + FORTYTWO_GIT_URL: https://github.com/nasa-itc/42.git + FORTYTWO_LEAP_SECONDS: "37" + FORTYTWO_PORT: "30090" + FORTYTWO_RECOMPILE: "false" + FORTYTWO_SIM_DATE: '"12 29 2025"' + FORTYTWO_SIM_TIME: '"15 57 13.00"' + FORTYTWO_STARTUP_FOLDER: NOS3InOut + FORTYTWO_VNC_PASSWORD: c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2 + FSW_SOFTWARE: cfs + GSW_SOFTWARE: yamcs + HEALTHCHECK_PORT: "" + HTTP_PROXY: "" + HTTPS_PROXY: "" + J2000_EPOCH_SECONDS: "946728000" + J2000_REFERENCE_DATETIME: '"2000-01-01 12:00:00 UTC"' + MAVEN_HTTPS_PROXY: '"--settings ./settings.xml"' + MAVEN_REPO_LOCAL: /home/nos3/.nos3/.m2 + MAVEN_SETTINGS_FILE: "" + MISSION: m01 + NO_PROXY: "" + NOS3_BASE_DIR: /home/nos3/.nos3 + NOS3_CFG_PATH: .. + NOS3_DIR: /home/nos3/.nos3 + NOS3_GIT_COMMIT: dev + NOS3_GIT_URL: https://github.com/nasa/nos3 + NOS3_IMAGE_URI: docker.io/ivvitc/nos3-64:20251107 + NOS3_MISSION_CFG_FILE: ../cfg/nos3-mission.xml + NOS3_USER: nos3 + OPENMCT_GIT_COMMIT: master + OPENMCT_GIT_URL: https://github.com/akhenry/openmct-yamcs.git + OPENMCT_IMAGE_URI: docker.io/library/ubuntu:25.04 + OPENMCT_NODE_VERSION: v21.7.3 + OPENMCT_NVM_VERSION: v0.40.1 + OPENMCT_PORT: "9000" + PROJECT_NAME: nos3-m01-sc01 + SIM_T0_DATETIME: '"2025-12-29 15:56:43 UTC"' + SIM_T0_EPOCH_MILLISECONDS: "1767023833000" + SIM_T0_EPOCH_SECONDS: "1767023833" + SIM_TF_EPOCH_MILLISECONDS: "1767027433000" + SPACECRAFT: sc01 + START_TIME: "820295833" + TIME_INTERVAL: "3600" + TIME_INTERVAL_MILLISECONDS: "3600000" + TIME_OFFSET_SECONDS: "+30" + YAMCS_DATA_DIR: /home/nos3/.nos3/yamcs/target/yamcs/yamcs-data + YAMCS_GIT_COMMIT: nos3-dev + YAMCS_GIT_URL: https://github.com/nasa-itc/nos3_yamcs_master.git + YAMCS_INSTANCES: nos3 + YAMCS_PORT: "8090" diff --git a/deployments/services/fortytwo/kubernetes/configmaps/volumes-configmap.yaml b/deployments/services/fortytwo/kubernetes/configmaps/volumes-configmap.yaml new file mode 100644 index 000000000..e82b4932f --- /dev/null +++ b/deployments/services/fortytwo/kubernetes/configmaps/volumes-configmap.yaml @@ -0,0 +1,53 @@ +--- +apiVersion: v1 + +kind: ConfigMap +metadata: + annotations: + use-subpath: "true" + name: nos3-m01-sc01-fortytwo-volumes + +data: + entrypoint.sh: | + #!/bin/bash + + rm -f /tmp/.X1-lock || true + rm -f /tmp/.X11-unix/X1 || true + + pkill -9 -f vncserver || true + pkill -9 -f Xvnc || true + pkill -9 -f websockify || true + + /opt/TurboVNC/bin/vncserver -securitytypes tlsnone,x509none,none && \ + sleep 5 && \ + websockify -D \ + --web=/usr/share/novnc/ \ + --cert=~/novnc.pem 80 localhost:5901 + + export DISPLAY=${DISPLAY:-:1} + export DIR=/opt/nasa-itc + export GIT_FOLDER=${GIT_FOLDER} + + xterm & + + rm -rf /opt/nasa-itc/42/NO3InOut/{*.42,*.csv} + + if [ "$RECOMPILE" == "true" ]; then + cd /opt/nasa-itc/42 && \ + git fetch && \ + git checkout ${GIT_COMMIT} && \ + git pull origin && \ + git submodule update && \ + make clean && \ + make -j2 + fi + + STARTUP_FOLDER=${STARTUP_FOLDER:-NO3InOut} + + cd /opt/nasa-itc/42 && \ + xterm -e "./42 ${STARTUP_FOLDER}" & + + echo "Started 42 with PID $!" + + tail -f /dev/null + diff --git a/deployments/services/fortytwo/kubernetes/deployment.yaml b/deployments/services/fortytwo/kubernetes/deployment.yaml new file mode 100644 index 000000000..35bea97d1 --- /dev/null +++ b/deployments/services/fortytwo/kubernetes/deployment.yaml @@ -0,0 +1,58 @@ +--- +apiVersion: apps/v1 + +kind: Deployment + +metadata: + name: nos3-m01-sc01-fortytwo + labels: + app: nos3-m01-sc01-fortytwo + +spec: + replicas: 1 + selector: + matchLabels: + app: nos3-m01-sc01-fortytwo + template: + metadata: + labels: + app: nos3-m01-sc01-fortytwo + spec: + containers: + - args: + - /entrypoint.sh + env: + - name: COMPONENT_NAME + value: fortytwo + - name: DISPLAY + value: :1 + image: ghcr.io/haisamido/nos3-base-fortytwo:dev + workingDir: /42 + imagePullPolicy: Always + name: nos3-m01-sc01-fortytwo + ports: + - containerPort: 80 + protocol: TCP + resources: + limits: + cpu: "3" + memory: "2048Mi" + requests: + cpu: "1" + memory: "2048Mi" + securityContext: + privileged: true + volumeMounts: + - mountPath: /entrypoint.sh + name: nos3-m01-sc01-fortytwo-volumes + subPath: entrypoint.sh + hostname: fortytwo + restartPolicy: Always + volumes: + - configMap: + items: + - key: entrypoint.sh + path: entrypoint.sh + name: nos3-m01-sc01-fortytwo-volumes + defaultMode: 0555 + name: nos3-m01-sc01-fortytwo-volumes diff --git a/deployments/services/fortytwo/kubernetes/ingress.yaml b/deployments/services/fortytwo/kubernetes/ingress.yaml new file mode 100644 index 000000000..e69de29bb diff --git a/deployments/services/fortytwo/kubernetes/kustomization.yaml b/deployments/services/fortytwo/kubernetes/kustomization.yaml new file mode 100644 index 000000000..3d7dc0f0e --- /dev/null +++ b/deployments/services/fortytwo/kubernetes/kustomization.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./configmaps/args-configmap.yaml + - ./configmaps/env-configmap.yaml + - ./configmaps/volumes-configmap.yaml + - ./deployment.yaml + - ./service.yaml + - ./ingress.yaml diff --git a/deployments/services/fortytwo/kubernetes/service.yaml b/deployments/services/fortytwo/kubernetes/service.yaml new file mode 100644 index 000000000..234314595 --- /dev/null +++ b/deployments/services/fortytwo/kubernetes/service.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: v1 + +kind: Service + +metadata: + name: nos3-m01-sc01-fortytwo + +spec: + selector: + app: nos3-m01-sc01-fortytwo + ports: + - name: x-vnc + protocol: TCP + port: 80 + targetPort: 80 + type: ClusterIP diff --git a/deployments/services/42/nos3.yaml b/deployments/services/fortytwo/nos3.yaml similarity index 100% rename from deployments/services/42/nos3.yaml rename to deployments/services/fortytwo/nos3.yaml diff --git a/deployments/targets/docker/compose.yaml b/deployments/targets/docker/compose.yaml index 962675350..12b0f5909 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/targets/docker/compose.yaml @@ -6,7 +6,7 @@ services: env_file: - .env build: - context: ../../services/42 + context: ../../services/fortytwo dockerfile: Dockerfile args: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} @@ -35,7 +35,7 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/InOut/:/opt/nasa-itc/42/NOS3InOut/ - ${PWD}/${NOS3_CFG_PATH}/cfg/build/InOut/Inp_IPC.txt:/opt/nasa-itc/42/NOS3InOut/Inp_IPC.txt - ${PWD}/${NOS3_CFG_PATH}/cfg/build/InOut/Inp_Sim.txt:/opt/nasa-itc/42/NOS3InOut/Inp_Sim.txt - - ${PWD}/services/42/entrypoint.sh:/entrypoint.sh + - ${PWD}/services/fortytwo/entrypoint.sh:/entrypoint.sh ports: - "127.0.0.1:30090:80" environment: From 8e5c3d40d0d8597e8031ffccf9b655e710d258e9 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 30 Dec 2025 17:58:49 -0500 Subject: [PATCH 065/111] segregated defuncts --- .../fortytwo/{DEFUNCT.ivvtc => DEFUNCTS/ivvtc}/Dockerfile | 0 .../{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/deployment.yaml | 0 .../{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/ingress.yaml | 0 .../{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/kubernetes.sh | 0 .../kubernetes}/kustomization.yaml | 0 .../fortytwo/{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/pv.yaml | 0 .../{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/service.yaml | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename deployments/services/fortytwo/{DEFUNCT.ivvtc => DEFUNCTS/ivvtc}/Dockerfile (100%) rename deployments/services/fortytwo/{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/deployment.yaml (100%) rename deployments/services/fortytwo/{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/ingress.yaml (100%) rename deployments/services/fortytwo/{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/kubernetes.sh (100%) rename deployments/services/fortytwo/{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/kustomization.yaml (100%) rename deployments/services/fortytwo/{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/pv.yaml (100%) rename deployments/services/fortytwo/{DEFUNCT.kubernetes => DEFUNCTS/kubernetes}/service.yaml (100%) diff --git a/deployments/services/fortytwo/DEFUNCT.ivvtc/Dockerfile b/deployments/services/fortytwo/DEFUNCTS/ivvtc/Dockerfile similarity index 100% rename from deployments/services/fortytwo/DEFUNCT.ivvtc/Dockerfile rename to deployments/services/fortytwo/DEFUNCTS/ivvtc/Dockerfile diff --git a/deployments/services/fortytwo/DEFUNCT.kubernetes/deployment.yaml b/deployments/services/fortytwo/DEFUNCTS/kubernetes/deployment.yaml similarity index 100% rename from deployments/services/fortytwo/DEFUNCT.kubernetes/deployment.yaml rename to deployments/services/fortytwo/DEFUNCTS/kubernetes/deployment.yaml diff --git a/deployments/services/fortytwo/DEFUNCT.kubernetes/ingress.yaml b/deployments/services/fortytwo/DEFUNCTS/kubernetes/ingress.yaml similarity index 100% rename from deployments/services/fortytwo/DEFUNCT.kubernetes/ingress.yaml rename to deployments/services/fortytwo/DEFUNCTS/kubernetes/ingress.yaml diff --git a/deployments/services/fortytwo/DEFUNCT.kubernetes/kubernetes.sh b/deployments/services/fortytwo/DEFUNCTS/kubernetes/kubernetes.sh similarity index 100% rename from deployments/services/fortytwo/DEFUNCT.kubernetes/kubernetes.sh rename to deployments/services/fortytwo/DEFUNCTS/kubernetes/kubernetes.sh diff --git a/deployments/services/fortytwo/DEFUNCT.kubernetes/kustomization.yaml b/deployments/services/fortytwo/DEFUNCTS/kubernetes/kustomization.yaml similarity index 100% rename from deployments/services/fortytwo/DEFUNCT.kubernetes/kustomization.yaml rename to deployments/services/fortytwo/DEFUNCTS/kubernetes/kustomization.yaml diff --git a/deployments/services/fortytwo/DEFUNCT.kubernetes/pv.yaml b/deployments/services/fortytwo/DEFUNCTS/kubernetes/pv.yaml similarity index 100% rename from deployments/services/fortytwo/DEFUNCT.kubernetes/pv.yaml rename to deployments/services/fortytwo/DEFUNCTS/kubernetes/pv.yaml diff --git a/deployments/services/fortytwo/DEFUNCT.kubernetes/service.yaml b/deployments/services/fortytwo/DEFUNCTS/kubernetes/service.yaml similarity index 100% rename from deployments/services/fortytwo/DEFUNCT.kubernetes/service.yaml rename to deployments/services/fortytwo/DEFUNCTS/kubernetes/service.yaml From 5c75358be21ef389a01421ce2a0b17d52b02a86f Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 30 Dec 2025 18:13:43 -0500 Subject: [PATCH 066/111] moved compose file --- deployments/Taskfile.yaml | 4 +- deployments/{targets/docker => }/compose.yaml | 64 +++++++++---------- 2 files changed, 34 insertions(+), 34 deletions(-) rename deployments/{targets/docker => }/compose.yaml (97%) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 2cf284094..fd189b7ff 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -14,7 +14,7 @@ env: CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: ' {{.CONTAINER_BIN}} compose ' - CONTAINER_DIR: '{{.TARGETS_DIR}}/docker' + CONTAINER_DIR: '.' COMPOSE_FILE: '{{.CONTAINER_DIR}}/compose.yaml' DEPLOYMENT_ENVIRO: '{{.DEPLOYMENT_ENVIRO | default ""}}' @@ -114,7 +114,7 @@ tasks: up: desc: Bring up nos3 in detached state deps: - - down +# - down - submodule-update - env-create - build diff --git a/deployments/targets/docker/compose.yaml b/deployments/compose.yaml similarity index 97% rename from deployments/targets/docker/compose.yaml rename to deployments/compose.yaml index 12b0f5909..5c0660be6 100644 --- a/deployments/targets/docker/compose.yaml +++ b/deployments/compose.yaml @@ -4,9 +4,9 @@ services: nos3-fortytwo: image: ghcr.io/haisamido/nos3-base-fortytwo:dev env_file: - - .env + - ./.env build: - context: ../../services/fortytwo + context: ./services/fortytwo dockerfile: Dockerfile args: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} @@ -61,9 +61,9 @@ services: nos3-gsw: image: ghcr.io/haisamido/nos3-base-yamcs:dev env_file: - - .env + - ./.env build: - context: ../../services/yamcs + context: ./services/yamcs dockerfile: Dockerfile args: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} @@ -123,7 +123,7 @@ services: nos3-onair: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true container_name: sc01-onair working_dir: /home/nos3/builds/nos3/fsw/build/exe/cpu1 @@ -148,9 +148,9 @@ services: nos3-fsw: image: nos3-base-local:dev env_file: - - .env + - ./.env build: - context: ../../services/fsw + context: ./services/fsw dockerfile: Dockerfile args: @@ -208,7 +208,7 @@ services: nos3-nos-engine-server: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true # depends_on: # nos3-fortytwo: @@ -242,7 +242,7 @@ services: nos3-truth42sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: # nos3-fortytwo: @@ -272,7 +272,7 @@ services: nos3-nos-terminal: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true container_name: nos-terminal hostname: nos-terminal @@ -295,7 +295,7 @@ services: nos3-nos-udp-terminal: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true container_name: nos-udp-terminal hostname: nos-udp-terminal @@ -318,7 +318,7 @@ services: nos3-nos-sim-bridge: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true container_name: nos-sim-bridge working_dir: /home/nos3/builds/nos3/sims/build/bin @@ -340,7 +340,7 @@ services: nos3-camsim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -367,7 +367,7 @@ services: nos3-css-sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -393,7 +393,7 @@ services: nos3-eps-sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-nos-engine-server: @@ -421,7 +421,7 @@ services: nos3-fss-sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -447,7 +447,7 @@ services: nos3-gps-sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -473,7 +473,7 @@ services: nos3-imu-sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -499,7 +499,7 @@ services: nos3-mag-sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -525,7 +525,7 @@ services: nos3-rw-sim0: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -551,7 +551,7 @@ services: nos3-rw-sim1: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -577,7 +577,7 @@ services: nos3-rw-sim2: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -603,7 +603,7 @@ services: # nos3-radio-sim: # image: ghcr.io/haisamido/nos3-base:dev # env_file: - # - .env + # - ./.env # attach: true # healthcheck: # test: [ "CMD-SHELL", "/usr/bin/pgrep -f nos3-single-simulator" ] @@ -631,7 +631,7 @@ services: # nos3-cryptolib: # image: nos3-base-local:dev # env_file: -# - .env +# - ./.env # attach: true # healthcheck: # test: ["CMD-SHELL", "/usr/bin/pgrep -f ./support/standalone"] @@ -660,7 +660,7 @@ services: nos3-radio-sim-cryptolib: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true healthcheck: test: [ "CMD-SHELL", "/usr/bin/pgrep -f nos3-single-simulator && /usr/bin/pgrep -f ./support/standalone" ] @@ -694,7 +694,7 @@ services: nos3-sample-sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -718,7 +718,7 @@ services: nos3-startrk-sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -742,7 +742,7 @@ services: nos3-thruster-sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -766,7 +766,7 @@ services: nos3-torquer-sim: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-fortytwo: @@ -791,7 +791,7 @@ services: nos3-time: image: nos3-base-local:dev env_file: - - .env + - ./.env attach: true depends_on: nos3-nos-engine-server: @@ -818,9 +818,9 @@ services: nos3-openmct: env_file: - - .env + - ./.env build: - context: ../../services/openmct + context: ./services/openmct dockerfile: Containerfile args: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} From 4c74d19fe7522af4d1f37957a7f0a7db4cec2be0 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Mon, 5 Jan 2026 10:32:07 -0500 Subject: [PATCH 067/111] k8s refinements --- deployments/Taskfile.yaml | 135 +++++++++++++++--- deployments/kustomization.yaml | 5 + ...rgs-configmap.yaml => configmap-args.yaml} | 0 .../env-configmap.yaml => configmap-env.yaml} | 0 ...-configmap.yaml => configmap-volumes.yaml} | 0 .../fortytwo/kubernetes/kustomization.yaml | 8 +- 6 files changed, 127 insertions(+), 21 deletions(-) create mode 100644 deployments/kustomization.yaml rename deployments/services/fortytwo/kubernetes/{configmaps/args-configmap.yaml => configmap-args.yaml} (100%) rename deployments/services/fortytwo/kubernetes/{configmaps/env-configmap.yaml => configmap-env.yaml} (100%) rename deployments/services/fortytwo/kubernetes/{configmaps/volumes-configmap.yaml => configmap-volumes.yaml} (100%) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index fd189b7ff..8e15bb06b 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -8,8 +8,14 @@ env: SERVICES_DIR: ./services SCRIPTS_DIR: ./scripts - PROJECT_NAME: '{{.PROJECT_NAME | default "nos3-m01-sc01"}}' - COMPOSE_PROJECT_NAME: '{{.COMPOSE_PROJECT_NAME | default "nos3-m01-sc01"}}' + PROJECT: 'nos3' + MISSION: 'm01' + SPACECRAFT: 'sc01' + SC_ENVIRO: 'sim' + + PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' + + COMPOSE_PROJECT_NAME: '{{.COMPOSE_PROJECT_NAME | default "{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}"}}' CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: ' {{.CONTAINER_BIN}} compose ' @@ -17,21 +23,26 @@ env: CONTAINER_DIR: '.' COMPOSE_FILE: '{{.CONTAINER_DIR}}/compose.yaml' +# Environment variables for configuring builds and deployments DEPLOYMENT_ENVIRO: '{{.DEPLOYMENT_ENVIRO | default ""}}' HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' - ENVIRO_SCRIPT: '{{.SCRIPTS_DIR}}/env.sh' ENVIRO_FILE: '{{.CONTAINER_DIR}}/.env' - MAVEN_HTTPS_PROXY: '-s./settings.xml' MAVEN_SETTINGS_FILE: '{{.MAVEN_SETTINGS_FILE | default ""}}' + # NOS3 configuration path NOS3_CFG_PATH: '{{.NOS3_CFG_PATH | default ".."}}' # Kubernetes variables K8S_CONTEXT: '{{.K8S_CONTEXT | default "docker-desktop"}}' - K8S_NAMESPACE: '{{.K8S_NAMESPACE | default "nos3"}}' + K8S_NAMESPACE: '{{.PROJECT_NAME}}' + K8S_CLUSTER: '{{.K8S_CLUSTER | default "docker-desktop"}}' + K8S_USER: '{{.K8S_USER | default "docker-desktop"}}' + # TODO: COMPONENT doesn't make sense here + K8S_APP_LABEL: "{{.PROJECT_NAME}}-fortytwo" + K8S_PORT_FORWARD_VNC: '8080' K8S_KOMPOSE_OUTPUT: '{{.K8S_KOMPOSE_OUTPUT | default "./targets/kubernetes/kompose/"}}' K8S_CONFIGMAP_NAME: '{{.K8S_CONFIGMAP_NAME | default "nos3-env"}}' @@ -291,6 +302,42 @@ tasks: - git submodule sync; git submodule update --init --recursive; git submodule sync silent: false + k8s:create:namespace: + desc: Create the Kubernetes namespace + deps: + - env-create + cmds: + - | + source ${ENVIRO_FILE} && \ + kubectl create namespace {{.K8S_NAMESPACE}} \ + --context {{.K8S_CONTEXT}} || \ + echo "Namespace {{.K8S_NAMESPACE}} already exists" + silent: false + + k8s:apply:kustomize: + desc: Apply kustomize to the namespace + deps: + - k8s:create:namespace + cmds: + - | + source ${ENVIRO_FILE} && \ + kubectl apply -k . \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} + - echo "Kustomization applied successfully" + silent: false + + k8s:delete:kustomize: + desc: Delete kustomize from the namespace + cmds: + - | + source ${ENVIRO_FILE} && \ + kubectl delete -k . \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}}|| true + - echo "Kustomization deleted successfully" + silent: false + k8s:convert:kompose: desc: convert docker-compose to kubernetes manifests using kompose deps: @@ -311,13 +358,13 @@ tasks: mkdir -p ${K8S_KOMPOSE_OUTPUT} && \ kompose convert -c -f ${COMPOSE_FILE} -o ${K8S_KOMPOSE_OUTPUT} - k8s:create:namespace: - desc: create nos3 kubernetes namespace - deps: - - env-create - cmds: - - | - kubectl create namespace ${K8S_NAMESPACE} --context ${K8S_CONTEXT} || true + # k8s:create:namespace: + # desc: create nos3 kubernetes namespace + # deps: + # - env-create + # cmds: + # - | + # kubectl create namespace ${K8S_NAMESPACE} --context ${K8S_CONTEXT} || true k8s:delete:namespace: desc: delete nos3 kubernetes namespace @@ -326,7 +373,7 @@ tasks: cmds: - | source ${ENVIRO_FILE} && \ - kubectl delete namespace ${K8S_NAMESPACE} --context ${K8S_CONTEXT} || true + kubectl delete namespace {{.K8S_NAMESPACE}} --context {{.K8S_CONTEXT}} || true k8s:apply:deployment: desc: apply nos3 kubernetes deployment(s) @@ -336,14 +383,14 @@ tasks: cmds: - | source ${ENVIRO_FILE} && \ - kubectl apply -f ./targets/kubernetes/kompose/ --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} + kubectl apply -f ./targets/kubernetes/kompose/ --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} k8s:delete:deployment: desc: delete nos3 kubernetes deployment(s) deps: - env-create cmds: - - kubectl delete --all deployments --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} || true + - kubectl delete --all deployments --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} || true k8s:get:configmaps: desc: get nos3 kubernetes configmaps @@ -351,10 +398,10 @@ tasks: - env-create cmds: - | - kubectl get configmaps --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} || true + kubectl get configmaps --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} || true k8s:get:configmap: - kubectl get configmap --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} ${K8S_CONFIGMAP_NAME} -o yaml + kubectl get configmap --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} {{.K8S_CONFIGMAP_NAME}} -o yaml k8s:create:configmaps: desc: create nos3 kubernetes configmaps @@ -364,7 +411,7 @@ tasks: cmds: - | source ${ENVIRO_FILE} && \ - kubectl create configmap --context ${K8S_CONTEXT} --namespace=${K8S_NAMESPACE} ${K8S_CONFIGMAP_NAME} --from-env-file=${ENVIRO_FILE} || true + kubectl create configmap --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} {{.K8S_CONFIGMAP_NAME}} --from-env-file=${ENVIRO_FILE} || true k8s:apply:ingress-nginx: desc: apply ingress-nginx for nos3 kubernetes @@ -372,3 +419,55 @@ tasks: - | source ${ENVIRO_FILE} && \ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.14.1/deploy/static/provider/cloud/deploy.yaml || true + + k8s:get:pod-name: + desc: get the pod name for nos3 kubernetes deployment + deps: + - env-create + cmds: + - | + POD_NAME=$(kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} \ + -o jsonpath='{.items[0].metadata.name}' 2>/dev/null); \ + echo $POD_NAME + silent: false + + k8s:port-forward: + desc: Port forward to access services locally + cmds: + - | + echo "Checking for pod availability..." + POD_NAME=$(kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} \ + -o jsonpath='{.items[0].metadata.name}' 2>/dev/null) + + if [ -z "$POD_NAME" ]; then + echo "Error: No pod found with label app={{.K8S_APP_LABEL}}" + exit 1 + fi + + echo "Found pod: $POD_NAME" + echo "Waiting for pod to be ready..." + + kubectl wait --for=condition=ready pod/$POD_NAME \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + --timeout=300s + + if [ $? -ne 0 ]; then + echo "Error: Pod did not become ready within timeout" + exit 1 + fi + + echo "Pod is ready!" + echo "Forwarding ports:" + echo " - VNC: http://localhost:{{.K8S_PORT_FORWARD_VNC}}" + kubectl port-forward ${POD_NAME} \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + {{.K8S_PORT_FORWARD_VNC}}:80 + silent: false \ No newline at end of file diff --git a/deployments/kustomization.yaml b/deployments/kustomization.yaml new file mode 100644 index 000000000..ca3f98015 --- /dev/null +++ b/deployments/kustomization.yaml @@ -0,0 +1,5 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./services/fortytwo/kubernetes/ diff --git a/deployments/services/fortytwo/kubernetes/configmaps/args-configmap.yaml b/deployments/services/fortytwo/kubernetes/configmap-args.yaml similarity index 100% rename from deployments/services/fortytwo/kubernetes/configmaps/args-configmap.yaml rename to deployments/services/fortytwo/kubernetes/configmap-args.yaml diff --git a/deployments/services/fortytwo/kubernetes/configmaps/env-configmap.yaml b/deployments/services/fortytwo/kubernetes/configmap-env.yaml similarity index 100% rename from deployments/services/fortytwo/kubernetes/configmaps/env-configmap.yaml rename to deployments/services/fortytwo/kubernetes/configmap-env.yaml diff --git a/deployments/services/fortytwo/kubernetes/configmaps/volumes-configmap.yaml b/deployments/services/fortytwo/kubernetes/configmap-volumes.yaml similarity index 100% rename from deployments/services/fortytwo/kubernetes/configmaps/volumes-configmap.yaml rename to deployments/services/fortytwo/kubernetes/configmap-volumes.yaml diff --git a/deployments/services/fortytwo/kubernetes/kustomization.yaml b/deployments/services/fortytwo/kubernetes/kustomization.yaml index 3d7dc0f0e..5ae445673 100644 --- a/deployments/services/fortytwo/kubernetes/kustomization.yaml +++ b/deployments/services/fortytwo/kubernetes/kustomization.yaml @@ -2,9 +2,11 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - - ./configmaps/args-configmap.yaml - - ./configmaps/env-configmap.yaml - - ./configmaps/volumes-configmap.yaml +# Include ConfigMaps + - ./configmap-args.yaml + - ./configmap-env.yaml + - ./configmap-volumes.yaml + - ./deployment.yaml - ./service.yaml - ./ingress.yaml From 0f52e881ca284b01332519a6898b4cc031f8325c Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Mon, 5 Jan 2026 11:17:39 -0500 Subject: [PATCH 068/111] k8s refinements --- deployments/Taskfile.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 8e15bb06b..4e1b36b19 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -324,7 +324,7 @@ tasks: kubectl apply -k . \ --context {{.K8S_CONTEXT}} \ --namespace={{.K8S_NAMESPACE}} - - echo "Kustomization applied successfully" + - echo "Initiated apply of Kustomization" silent: false k8s:delete:kustomize: @@ -335,7 +335,7 @@ tasks: kubectl delete -k . \ --context {{.K8S_CONTEXT}} \ --namespace={{.K8S_NAMESPACE}}|| true - - echo "Kustomization deleted successfully" + - echo "Initiated deletion of Kustomization" silent: false k8s:convert:kompose: From 2186a71ca96069bf1232de8b1e288db5e720e816 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Mon, 5 Jan 2026 15:32:40 -0500 Subject: [PATCH 069/111] added many k8s task to generate the relevant k8s manifest files --- deployments/Taskfile.yaml | 269 +++++++++++++++++++++++++++++++------- 1 file changed, 225 insertions(+), 44 deletions(-) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 4e1b36b19..79755169f 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -3,15 +3,15 @@ version: '3' dotenv: - ./targets/docker/.env -env: +vars: TARGETS_DIR: ./targets SERVICES_DIR: ./services SCRIPTS_DIR: ./scripts - PROJECT: 'nos3' - MISSION: 'm01' - SPACECRAFT: 'sc01' - SC_ENVIRO: 'sim' + PROJECT: '{{.PROJECT | default "nos3"}}' + MISSION: '{{.MISSION | default "m01"}}' + SPACECRAFT: '{{.SPACECRAFT | default "sc01"}}' + SC_ENVIRO: '{{.SC_ENVIRO | default "sim"}}' PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' @@ -23,7 +23,7 @@ env: CONTAINER_DIR: '.' COMPOSE_FILE: '{{.CONTAINER_DIR}}/compose.yaml' -# Environment variables for configuring builds and deployments +# Variables for configuring builds and deployments DEPLOYMENT_ENVIRO: '{{.DEPLOYMENT_ENVIRO | default ""}}' HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' @@ -36,15 +36,20 @@ env: NOS3_CFG_PATH: '{{.NOS3_CFG_PATH | default ".."}}' # Kubernetes variables + K8S_ENV_FILE: '{{.K8S_ENV_FILE | default "./targets/kubernetes/env/k8s.env"}}' K8S_CONTEXT: '{{.K8S_CONTEXT | default "docker-desktop"}}' - K8S_NAMESPACE: '{{.PROJECT_NAME}}' K8S_CLUSTER: '{{.K8S_CLUSTER | default "docker-desktop"}}' + K8S_NAMESPACE: '{{.PROJECT}}-{{.MISSION}}' K8S_USER: '{{.K8S_USER | default "docker-desktop"}}' + # TODO: COMPONENT doesn't make sense here K8S_APP_LABEL: "{{.PROJECT_NAME}}-fortytwo" K8S_PORT_FORWARD_VNC: '8080' K8S_KOMPOSE_OUTPUT: '{{.K8S_KOMPOSE_OUTPUT | default "./targets/kubernetes/kompose/"}}' - K8S_CONFIGMAP_NAME: '{{.K8S_CONFIGMAP_NAME | default "nos3-env"}}' + K8S_CONFIGMAP_NAME: '{{.K8S_APP_LABEL}}' + K8S_REPLICAS: 1 + + K8S_BUILD_PATH: './build/k8s/contexts/{{.K8S_CONTEXT}}/clusters/{{.K8S_CLUSTER}}/namespaces/{{.K8S_NAMESPACE}}/applications/{{.K8S_APP_LABEL}}' tasks: default: @@ -267,7 +272,7 @@ tasks: desc: Create .env file from env.sh script cmds: - | - ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} + {{.ENVIRO_SCRIPT}} > {{.ENVIRO_FILE}} install-lazydocker: desc: Install lazydocker CLI tool (to view logs, etc) @@ -308,35 +313,37 @@ tasks: - env-create cmds: - | - source ${ENVIRO_FILE} && \ + source {{.ENVIRO_FILE}} && \ kubectl create namespace {{.K8S_NAMESPACE}} \ --context {{.K8S_CONTEXT}} || \ - echo "Namespace {{.K8S_NAMESPACE}} already exists" - silent: false + echo "Namespace {{.K8S_NAMESPACE}} in context {{.K8S_CONTEXT}} already exists" + silent: true - k8s:apply:kustomize: - desc: Apply kustomize to the namespace + k8s:apply:kustomization: + desc: Apply kustomization to the namespace deps: - k8s:create:namespace + - k8s:generate:all cmds: - | - source ${ENVIRO_FILE} && \ - kubectl apply -k . \ + source {{.ENVIRO_FILE}} && \ + kubectl apply -k {{.K8S_BUILD_PATH}} \ --context {{.K8S_CONTEXT}} \ - --namespace={{.K8S_NAMESPACE}} - - echo "Initiated apply of Kustomization" + --namespace {{.K8S_NAMESPACE}} + - echo "Initiated apply of Kustomization in path {{.K8S_BUILD_PATH}} for context [{{.K8S_CONTEXT}}] and namespace [{{.K8S_NAMESPACE}}]" silent: false - k8s:delete:kustomize: + k8s:delete:kustomization: desc: Delete kustomize from the namespace cmds: - | - source ${ENVIRO_FILE} && \ - kubectl delete -k . \ + source {{.ENVIRO_FILE}} && \ + kubectl delete -k {{.K8S_BUILD_PATH}} \ --context {{.K8S_CONTEXT}} \ --namespace={{.K8S_NAMESPACE}}|| true - - echo "Initiated deletion of Kustomization" - silent: false + - echo "Initiated deletion of Kustomization for context [{{.K8S_CONTEXT}}] and namespace [{{.K8S_NAMESPACE}}]" + - task: k8s:delete:namespace + silent: true k8s:convert:kompose: desc: convert docker-compose to kubernetes manifests using kompose @@ -357,14 +364,6 @@ tasks: source ${ENVIRO_FILE} && \ mkdir -p ${K8S_KOMPOSE_OUTPUT} && \ kompose convert -c -f ${COMPOSE_FILE} -o ${K8S_KOMPOSE_OUTPUT} - - # k8s:create:namespace: - # desc: create nos3 kubernetes namespace - # deps: - # - env-create - # cmds: - # - | - # kubectl create namespace ${K8S_NAMESPACE} --context ${K8S_CONTEXT} || true k8s:delete:namespace: desc: delete nos3 kubernetes namespace @@ -372,8 +371,8 @@ tasks: - env-create cmds: - | - source ${ENVIRO_FILE} && \ - kubectl delete namespace {{.K8S_NAMESPACE}} --context {{.K8S_CONTEXT}} || true + source {{.ENVIRO_FILE}} && \ + kubectl delete namespace {{.K8S_NAMESPACE}} --context {{.K8S_CONTEXT}} || true k8s:apply:deployment: desc: apply nos3 kubernetes deployment(s) @@ -403,16 +402,6 @@ tasks: k8s:get:configmap: kubectl get configmap --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} {{.K8S_CONFIGMAP_NAME}} -o yaml - k8s:create:configmaps: - desc: create nos3 kubernetes configmaps - deps: - - env-create - - k8s:create:namespace - cmds: - - | - source ${ENVIRO_FILE} && \ - kubectl create configmap --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} {{.K8S_CONFIGMAP_NAME}} --from-env-file=${ENVIRO_FILE} || true - k8s:apply:ingress-nginx: desc: apply ingress-nginx for nos3 kubernetes cmds: @@ -470,4 +459,196 @@ tasks: --context {{.K8S_CONTEXT}} \ --namespace={{.K8S_NAMESPACE}} \ {{.K8S_PORT_FORWARD_VNC}}:80 - silent: false \ No newline at end of file + silent: false + + k8s:write:env: + desc: write k8s env file + cmds: + - | + echo "HTTP_PROXY={{.HTTP_PROXY}}" > {{.K8S_ENV_FILE}} + echo "HTTPS_PROXY={{.HTTPS_PROXY}}" >> {{.K8S_ENV_FILE}} + echo "NO_PROXY={{.NO_PROXY}}" >> {{.K8S_ENV_FILE}} + silent: true + + k8s:generate:all: + desc: Generate all kubernetes yamls for COMPONENT_NAME + deps: + - k8s:path:yamls + - k8s:generate:configmaps:all + - k8s:generate:deployment + - k8s:generate:service + - k8s:generate:ingress + - k8s:generate:kustomization + + k8s:path:yamls: + desc: generate kubernetes yamls for the deployment + cmds: + - mkdir -p {{.K8S_BUILD_PATH}} + silent: true + + k8s:generate:configmaps:all: + desc: Generate all kubernetes yamls for COMPONENT_NAME + deps: + - k8s:generate:configmap:env + - k8s:generate:configmap:volumes + - k8s:generate:configmap:args + + k8s:generate:configmap:env: + desc: Generate kubernetes configmaps yaml for COMPONENT_NAME + deps: + - env-create + - k8s:path:yamls + cmds: + - | + source {{.ENVIRO_FILE}} && \ + kubectl create configmap \ + {{.K8S_CONFIGMAP_NAME}} \ + --from-env-file={{.ENVIRO_FILE}} --dry-run=client -o yaml > {{.K8S_BUILD_PATH}}/configmap-env.yaml + + k8s:generate:configmap:volumes: + desc: Generate kubernetes volumes configmaps yaml for COMPONENT_NAME + deps: + - env-create + - k8s:path:yamls + cmds: + - | + source {{.ENVIRO_FILE}} && \ + kubectl create configmap {{.K8S_CONFIGMAP_NAME}}-volumes \ + --from-file=./services/fortytwo/entrypoint.sh \ + --dry-run=client \ + --output yaml > {{.K8S_BUILD_PATH}}/configmap-volumes.yaml + + k8s:generate:configmap:args: + desc: Generate kubernetes configmaps yaml for COMPONENT_NAME + deps: + - env-create + - k8s:path:yamls + cmds: + - | + source {{.ENVIRO_FILE}} && \ + echo "" > {{.K8S_BUILD_PATH}}/configmap-args.yaml + + k8s:generate:service: + desc: Generate kubernetes service yaml for COMPONENT_NAME + deps: + - env-create + - k8s:path:yamls + cmds: + - | + source {{.ENVIRO_FILE}} && \ + cat < {{.K8S_BUILD_PATH}}/service.yaml + --- + apiVersion: v1 + kind: Service + metadata: + name: {{.K8S_APP_LABEL}} + + spec: + selector: + app: {{.K8S_APP_LABEL}} + ports: + - name: x-vnc + protocol: TCP + port: 80 + targetPort: 80 + type: ClusterIP + EOF + + k8s:generate:ingress: + desc: Generate kubernetes configmaps yaml for COMPONENT_NAME + deps: + - env-create + - k8s:path:yamls + cmds: + - | + source {{.ENVIRO_FILE}} && \ + echo "" > {{.K8S_BUILD_PATH}}/ingress.yaml + + k8s:generate:deployment: + desc: Generate kubernetes deployment yaml for COMPONENT_NAME + deps: + - env-create + - k8s:path:yamls + cmds: + - | + source {{.ENVIRO_FILE}} && \ + cat < {{.K8S_BUILD_PATH}}/deployment.yaml + --- + apiVersion: apps/v1 + kind: Deployment + metadata: + name: {{.K8S_APP_LABEL}} + namespace: {{.K8S_NAMESPACE}} + labels: + app: {{.K8S_APP_LABEL}} + spec: + replicas: {{.K8S_REPLICAS}} + selector: + matchLabels: + app: {{.K8S_APP_LABEL}} + template: + metadata: + labels: + app: {{.K8S_APP_LABEL}} + spec: + containers: + - args: + - /entrypoint.sh + env: + - name: COMPONENT_NAME + value: fortytwo + - name: DISPLAY + value: :1 + image: ghcr.io/haisamido/nos3-base-fortytwo:dev + workingDir: /42 + imagePullPolicy: Always + name: {{.K8S_APP_LABEL}} + ports: + - containerPort: 80 + protocol: TCP + resources: + limits: + cpu: "3" + memory: "2048Mi" + requests: + cpu: "1" + memory: "2048Mi" + securityContext: + privileged: true + volumeMounts: + - mountPath: /entrypoint.sh + name: {{.K8S_APP_LABEL}}-volumes + subPath: entrypoint.sh + hostname: {{.K8S_APP_LABEL}} + restartPolicy: Always + volumes: + - configMap: + items: + - key: entrypoint.sh + path: entrypoint.sh + name: {{.K8S_APP_LABEL}}-volumes + defaultMode: 0555 + name: "{{.K8S_APP_LABEL}}-volumes" + EOF + + k8s:generate:kustomization: + desc: Generate Kustomization yaml for COMPONENT_NAME + deps: + - env-create + - k8s:path:yamls + cmds: + - | + source {{.ENVIRO_FILE}} && \ + cat < {{.K8S_BUILD_PATH}}/kustomization.yaml + --- + apiVersion: kustomize.config.k8s.io/v1beta1 + kind: Kustomization + resources: + - ./configmap-args.yaml + - ./configmap-env.yaml + - ./configmap-volumes.yaml + - ./deployment.yaml + - ./service.yaml + - ./ingress.yaml + + EOF \ No newline at end of file From 1438e8c43cdc360ee4530e986384b827b4c4b931 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Mon, 5 Jan 2026 15:55:19 -0500 Subject: [PATCH 070/111] fixed taskfile variables since not using env: but args: --- deployments/Taskfile.yaml | 102 +++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 52 deletions(-) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 79755169f..74dfa9351 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -14,8 +14,7 @@ vars: SC_ENVIRO: '{{.SC_ENVIRO | default "sim"}}' PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' - - COMPOSE_PROJECT_NAME: '{{.COMPOSE_PROJECT_NAME | default "{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}"}}' + COMPOSE_PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: ' {{.CONTAINER_BIN}} compose ' @@ -65,8 +64,8 @@ tasks: - set-permissions cmds: - | - source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo + source {{.ENVIRO_FILE}} && \ + {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} build --pull nos3-fortytwo build-yamcs: desc: Build yamcs @@ -76,8 +75,8 @@ tasks: - set-permissions cmds: - | - source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-gsw + source {{.ENVIRO_FILE}} && \ + {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} build --pull nos3-gsw build-openmct: desc: Build openmct @@ -85,10 +84,10 @@ tasks: - env-create - set-permissions cmds: - - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 + - '{{.CONTAINER_BIN}} pull docker.io/library/ubuntu:25.04' - | - source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-openmct + source {{.ENVIRO_FILE}} && \ + {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} build --pull nos3-openmct build-fsw: desc: Build nos3-base-local (fsw) @@ -97,8 +96,8 @@ tasks: - set-permissions cmds: - | - source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fsw + source {{.ENVIRO_FILE}} && \ + {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} build --pull nos3-fsw build: desc: Build all containers @@ -107,10 +106,10 @@ tasks: - set-permissions - setup-maven cmds: - - ${CONTAINER_BIN} pull docker.io/library/ubuntu:25.04 + - '{{.CONTAINER_BIN}} pull docker.io/library/ubuntu:25.04' - | - source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct nos3-fsw + source {{.ENVIRO_FILE}} && \ + {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} build --pull nos3-fortytwo nos3-gsw nos3-openmct nos3-fsw set-permissions: desc: set filesystem permissions, needed for restricted accounts @@ -139,9 +138,9 @@ tasks: - set-permissions cmds: - | - source ${ENVIRO_FILE} && \ - export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ - ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d --force-recreate --remove-orphans + source {{.ENVIRO_FILE}} && \ + export NOS3_CFG_PATH={{.NOS3_CFG_PATH}}; \ + {{.CONTAINER_COMPOSE_BIN}} --env-file {{.ENVIRO_FILE}} -f {{.COMPOSE_FILE}} --project-name {{.COMPOSE_PROJECT_NAME}} up -d --force-recreate --remove-orphans # - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 - sleep 17 - task sidecar @@ -153,7 +152,7 @@ tasks: desc: Bring down nos3 cmds: - | - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} down --remove-orphans || true + {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} --project-name {{.COMPOSE_PROJECT_NAME}} down --remove-orphans || true up-minimum: desc: Bring up nos3 (minimum) in detached state @@ -167,11 +166,11 @@ tasks: cmds: - sleep 5 - | - source ${ENVIRO_FILE} && \ - export NOS3_CFG_PATH=${NOS3_CFG_PATH} ; \ - ${CONTAINER_COMPOSE_BIN} \ - --env-file ${ENVIRO_FILE} \ - -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d \ + source {{.ENVIRO_FILE}} && \ + export NOS3_CFG_PATH={{.NOS3_CFG_PATH}} ; \ + {{.CONTAINER_COMPOSE_BIN}} \ + --env-file {{.ENVIRO_FILE}} \ + -f {{.COMPOSE_FILE}} --project-name {{.COMPOSE_PROJECT_NAME}} up -d \ nos3-fortytwo \ nos3-nos-engine-server \ nos3-fsw \ @@ -192,7 +191,7 @@ tasks: sidecar: desc: Run sidecar to enable output cmds: - - ${SCRIPTS_DIR}/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" + - '{{.SCRIPTS_DIR}}/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT"' silent: true clean: @@ -207,27 +206,26 @@ tasks: deps: - down cmds: - - yes | ${CONTAINER_BIN} image prune --filter "dangling=true" - - yes | ${CONTAINER_BIN} system prune -a - - yes | ${CONTAINER_BIN} volume prune - - yes | ${CONTAINER_BIN} network prune + - yes | {{.CONTAINER_BIN}} image prune --filter "dangling=true" + - yes | {{.CONTAINER_BIN}} system prune -a + - yes | {{.CONTAINER_BIN}} volume prune + - yes | {{.CONTAINER_BIN}} network prune setup-maven: desc: Setup maven settings.xml with proxy info-services cmds: - - echo "" > - ${SERVICES_DIR}/yamcs/settings.xml + - echo "" > {{.SERVICES_DIR}}/yamcs/settings.xml - | - if [ "${DEPLOYMENT_ENVIRO}" == "vmmoc" ]; then - cp -f ${MAVEN_SETTINGS_FILE} ${HOME}/.nos3/yamcs/ || true - cp -f ${MAVEN_SETTINGS_FILE} ${SERVICES_DIR}/yamcs/ || true + if [ "{{.DEPLOYMENT_ENVIRO}}" == "vmmoc" ]; then + cp -f {{.MAVEN_SETTINGS_FILE}} ${HOME}/.nos3/yamcs/ || true + cp -f {{.MAVEN_SETTINGS_FILE}} {{.SERVICES_DIR}}/yamcs/ || true fi check-docker-ps: desc: check docker ps for any exited|unhealthy|created|error containers cmds: - | - ${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true + {{.CONTAINER_BIN}} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true silent: true check-service-ready: @@ -237,20 +235,20 @@ tasks: desc: wait for a service to be ready on a given port cmds: - | - echo "Waiting for service ${SERVICE_HOST}:${SERVICE_PORT} to be ready on port ${SERVICE_PORT}..." - until nc -z ${SERVICE_HOST} ${SERVICE_PORT}; do + echo "Waiting for service {{.SERVICE_HOST}}:{{.SERVICE_PORT}} to be ready on port {{.SERVICE_PORT}}..." + until nc -z {{.SERVICE_HOST}} {{.SERVICE_PORT}}; do sleep 1 done - echo "Service ${SERVICE_HOST}:${SERVICE_PORT} is ready on port ${SERVICE_PORT}!" + echo "Service {{.SERVICE_HOST}}:{{.SERVICE_PORT}} is ready on port {{.SERVICE_PORT}}!" silent: true purge-containers: desc: 'WARNING: purge docker/podman images, cache, volumes, and networks' cmds: - - yes | ${CONTAINER_BIN} image prune --filter "dangling=true" || true - - yes | ${CONTAINER_BIN} system prune -a || true - - yes | ${CONTAINER_BIN} volume prune || true - - yes | ${CONTAINER_BIN} network prune || true + - yes | {{.CONTAINER_BIN}} image prune --filter "dangling=true" || true + - yes | {{.CONTAINER_BIN}} system prune -a || true + - yes | {{.CONTAINER_BIN}} volume prune || true + - yes | {{.CONTAINER_BIN}} network prune || true - echo info-services: @@ -258,7 +256,7 @@ tasks: cmds: - task env-create - | - source ${ENVIRO_FILE} + source {{.ENVIRO_FILE}} echo; echo "How to access various services:"; echo; \ echo "open http://localhost:${YAMCS_PORT} to access yamcs/gsw"; \ echo "open http://localhost:${FORTYTWO_PORT}/vnc.html to access fortytwo (42) and then click Connect"; \ @@ -291,7 +289,7 @@ tasks: - env-create cmds: - | - source ${ENVIRO_FILE} && \ + source {{.ENVIRO_FILE}} && \ sed -Ei 's/(\s*)(\).*(\)/\1\2>'${START_TIME}'<\/\3/g' ../cfg/nos3-mission.xml && \ sed -Ei 's/(\s*)(\).*(\)/\1\2>'${GSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml && \ sed -Ei 's/(\s*)(\).*(\)/\1\2>'${FSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml @@ -351,9 +349,9 @@ tasks: - env-create cmds: - | - source ${ENVIRO_FILE} && \ - mkdir -p ${K8S_KOMPOSE_OUTPUT} && \ - kompose convert -f ${COMPOSE_FILE} -o ${K8S_KOMPOSE_OUTPUT} + source {{.ENVIRO_FILE}} && \ + mkdir -p {{.K8S_KOMPOSE_OUTPUT}} && \ + kompose convert -f {{.COMPOSE_FILE}} -o {{.K8S_KOMPOSE_OUTPUT}} k8s:convert:kompose:helm: desc: convert docker-compose to kubernetes manifests using kompose @@ -361,9 +359,9 @@ tasks: - env-create cmds: - | - source ${ENVIRO_FILE} && \ - mkdir -p ${K8S_KOMPOSE_OUTPUT} && \ - kompose convert -c -f ${COMPOSE_FILE} -o ${K8S_KOMPOSE_OUTPUT} + source {{.ENVIRO_FILE}} && \ + mkdir -p {{.K8S_KOMPOSE_OUTPUT}} && \ + kompose convert -c -f {{.COMPOSE_FILE}} -o {{.K8S_KOMPOSE_OUTPUT}} k8s:delete:namespace: desc: delete nos3 kubernetes namespace @@ -381,7 +379,7 @@ tasks: - k8s:create:namespace cmds: - | - source ${ENVIRO_FILE} && \ + source {{.ENVIRO_FILE}} && \ kubectl apply -f ./targets/kubernetes/kompose/ --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} k8s:delete:deployment: @@ -402,11 +400,11 @@ tasks: k8s:get:configmap: kubectl get configmap --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} {{.K8S_CONFIGMAP_NAME}} -o yaml - k8s:apply:ingress-nginx: + k8s:apply:ingress:nginx: desc: apply ingress-nginx for nos3 kubernetes cmds: - | - source ${ENVIRO_FILE} && \ + source {{.ENVIRO_FILE}} && \ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.14.1/deploy/static/provider/cloud/deploy.yaml || true k8s:get:pod-name: From abe0e0eb19abdc597824a8b587ff7dc1500cac99 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 6 Jan 2026 10:39:33 -0500 Subject: [PATCH 071/111] added silent: to every task --- deployments/Taskfile.yaml | 87 +++++++++++++++++++++++++++++++-------- 1 file changed, 70 insertions(+), 17 deletions(-) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 74dfa9351..d2b99f977 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -4,7 +4,6 @@ dotenv: - ./targets/docker/.env vars: - TARGETS_DIR: ./targets SERVICES_DIR: ./services SCRIPTS_DIR: ./scripts @@ -43,7 +42,7 @@ vars: # TODO: COMPONENT doesn't make sense here K8S_APP_LABEL: "{{.PROJECT_NAME}}-fortytwo" - K8S_PORT_FORWARD_VNC: '8080' + K8S_PORT_FORWARD_VNC: 8080 K8S_KOMPOSE_OUTPUT: '{{.K8S_KOMPOSE_OUTPUT | default "./targets/kubernetes/kompose/"}}' K8S_CONFIGMAP_NAME: '{{.K8S_APP_LABEL}}' K8S_REPLICAS: 1 @@ -66,6 +65,7 @@ tasks: - | source {{.ENVIRO_FILE}} && \ {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} build --pull nos3-fortytwo + silent: true build-yamcs: desc: Build yamcs @@ -77,6 +77,7 @@ tasks: - | source {{.ENVIRO_FILE}} && \ {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} build --pull nos3-gsw + silent: true build-openmct: desc: Build openmct @@ -88,6 +89,7 @@ tasks: - | source {{.ENVIRO_FILE}} && \ {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} build --pull nos3-openmct + silent: true build-fsw: desc: Build nos3-base-local (fsw) @@ -98,6 +100,7 @@ tasks: - | source {{.ENVIRO_FILE}} && \ {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} build --pull nos3-fsw + silent: true build: desc: Build all containers @@ -110,6 +113,7 @@ tasks: - | source {{.ENVIRO_FILE}} && \ {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} build --pull nos3-fortytwo nos3-gsw nos3-openmct nos3-fsw + silent: true set-permissions: desc: set filesystem permissions, needed for restricted accounts @@ -125,6 +129,7 @@ tasks: - find ../cfg/build -type f -name '*.json' -exec chmod 666 {} \; # Make sure all .json files are world readable - find ../cfg/build -type f -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable - find ${HOME}/.nos3/ -type f -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable + silent: true up: desc: Bring up nos3 in detached state @@ -153,6 +158,7 @@ tasks: cmds: - | {{.CONTAINER_COMPOSE_BIN}} -f {{.COMPOSE_FILE}} --project-name {{.COMPOSE_PROJECT_NAME}} down --remove-orphans || true + silent: true up-minimum: desc: Bring up nos3 (minimum) in detached state @@ -200,6 +206,7 @@ tasks: - down cmds: - cd ../ && make clean + silent: true clean-containers: desc: clean images, cache, volumes, and networks @@ -210,6 +217,7 @@ tasks: - yes | {{.CONTAINER_BIN}} system prune -a - yes | {{.CONTAINER_BIN}} volume prune - yes | {{.CONTAINER_BIN}} network prune + silent: true setup-maven: desc: Setup maven settings.xml with proxy info-services @@ -220,6 +228,7 @@ tasks: cp -f {{.MAVEN_SETTINGS_FILE}} ${HOME}/.nos3/yamcs/ || true cp -f {{.MAVEN_SETTINGS_FILE}} {{.SERVICES_DIR}}/yamcs/ || true fi + silent: true check-docker-ps: desc: check docker ps for any exited|unhealthy|created|error containers @@ -250,6 +259,7 @@ tasks: - yes | {{.CONTAINER_BIN}} volume prune || true - yes | {{.CONTAINER_BIN}} network prune || true - echo + silent: true info-services: desc: info on accessing various services @@ -263,7 +273,6 @@ tasks: echo "FT: open http://localhost:${OPENMCT_PORT}/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=${SIM_TF_EPOCH_MILLISECONDS}&view=plot-single" echo "RT: open http://localhost:${OPENMCT_PORT}/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=local&tc.timeSystem=utc&view=plot-single&tc.startDelta=60000&tc.endDelta=300000" echo - silent: true env-create: @@ -271,6 +280,7 @@ tasks: cmds: - | {{.ENVIRO_SCRIPT}} > {{.ENVIRO_FILE}} + silent: true install-lazydocker: desc: Install lazydocker CLI tool (to view logs, etc) @@ -293,18 +303,21 @@ tasks: sed -Ei 's/(\s*)(\).*(\)/\1\2>'${START_TIME}'<\/\3/g' ../cfg/nos3-mission.xml && \ sed -Ei 's/(\s*)(\).*(\)/\1\2>'${GSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml && \ sed -Ei 's/(\s*)(\).*(\)/\1\2>'${FSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml + silent: true config: desc: configure nos3 by running config.sh cmds: - cd ../ && ./scripts/cfg/config.sh + silent: true submodule-update: desc: sync and update git submodules cmds: - git submodule sync; git submodule update --init --recursive; git submodule sync - silent: false + silent: true +# K8S Kubernetes Tasks k8s:create:namespace: desc: Create the Kubernetes namespace deps: @@ -315,6 +328,7 @@ tasks: kubectl create namespace {{.K8S_NAMESPACE}} \ --context {{.K8S_CONTEXT}} || \ echo "Namespace {{.K8S_NAMESPACE}} in context {{.K8S_CONTEXT}} already exists" + - echo "Initiated creation of Namespace [{{.K8S_NAMESPACE}}] in context [{{.K8S_CONTEXT}}]" silent: true k8s:apply:kustomization: @@ -328,11 +342,11 @@ tasks: kubectl apply -k {{.K8S_BUILD_PATH}} \ --context {{.K8S_CONTEXT}} \ --namespace {{.K8S_NAMESPACE}} - - echo "Initiated apply of Kustomization in path {{.K8S_BUILD_PATH}} for context [{{.K8S_CONTEXT}}] and namespace [{{.K8S_NAMESPACE}}]" - silent: false + - echo "Initiated apply of Kustomization in path [{{.K8S_BUILD_PATH}}] for context [{{.K8S_CONTEXT}}] and namespace [{{.K8S_NAMESPACE}}]" + silent: true k8s:delete:kustomization: - desc: Delete kustomize from the namespace + desc: Delete kustomize and namespace cmds: - | source {{.ENVIRO_FILE}} && \ @@ -352,6 +366,7 @@ tasks: source {{.ENVIRO_FILE}} && \ mkdir -p {{.K8S_KOMPOSE_OUTPUT}} && \ kompose convert -f {{.COMPOSE_FILE}} -o {{.K8S_KOMPOSE_OUTPUT}} + silent: true k8s:convert:kompose:helm: desc: convert docker-compose to kubernetes manifests using kompose @@ -362,6 +377,7 @@ tasks: source {{.ENVIRO_FILE}} && \ mkdir -p {{.K8S_KOMPOSE_OUTPUT}} && \ kompose convert -c -f {{.COMPOSE_FILE}} -o {{.K8S_KOMPOSE_OUTPUT}} + silent: true k8s:delete:namespace: desc: delete nos3 kubernetes namespace @@ -371,6 +387,7 @@ tasks: - | source {{.ENVIRO_FILE}} && \ kubectl delete namespace {{.K8S_NAMESPACE}} --context {{.K8S_CONTEXT}} || true + silent: true k8s:apply:deployment: desc: apply nos3 kubernetes deployment(s) @@ -381,13 +398,16 @@ tasks: - | source {{.ENVIRO_FILE}} && \ kubectl apply -f ./targets/kubernetes/kompose/ --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} + silent: true k8s:delete:deployment: desc: delete nos3 kubernetes deployment(s) deps: - env-create cmds: - - kubectl delete --all deployments --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} || true + - | + source {{.ENVIRO_FILE}} && \ + kubectl delete --all deployments --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} || true k8s:get:configmaps: desc: get nos3 kubernetes configmaps @@ -395,10 +415,19 @@ tasks: - env-create cmds: - | + source {{.ENVIRO_FILE}} && \ kubectl get configmaps --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} || true + silent: true k8s:get:configmap: - kubectl get configmap --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} {{.K8S_CONFIGMAP_NAME}} -o yaml + desc: get a specific kubernetes configmaps defined in K8S_CONFIGMAP_NAME + deps: + - env-create + cmds: + - | + source {{.ENVIRO_FILE}} && \ + kubectl get configmap --context {{.K8S_CONTEXT}} --namespace={{.K8S_NAMESPACE}} {{.K8S_CONFIGMAP_NAME}} -o yaml + silent: true k8s:apply:ingress:nginx: desc: apply ingress-nginx for nos3 kubernetes @@ -406,6 +435,7 @@ tasks: - | source {{.ENVIRO_FILE}} && \ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.14.1/deploy/static/provider/cloud/deploy.yaml || true + silent: true k8s:get:pod-name: desc: get the pod name for nos3 kubernetes deployment @@ -413,18 +443,22 @@ tasks: - env-create cmds: - | - POD_NAME=$(kubectl get pods \ - --context {{.K8S_CONTEXT}} \ - --namespace={{.K8S_NAMESPACE}} \ - -l app={{.K8S_APP_LABEL}} \ - -o jsonpath='{.items[0].metadata.name}' 2>/dev/null); \ + source {{.ENVIRO_FILE}} && \ + POD_NAME=$(kubectl get pods \ + --context {{.K8S_CONTEXT}} \ + --namespace={{.K8S_NAMESPACE}} \ + -l app={{.K8S_APP_LABEL}} \ + -o jsonpath='{.items[0].metadata.name}' 2>/dev/null); \ echo $POD_NAME - silent: false + silent: true k8s:port-forward: desc: Port forward to access services locally + deps: + - env-create cmds: - | + source {{.ENVIRO_FILE}} && \ echo "Checking for pod availability..." POD_NAME=$(kubectl get pods \ --context {{.K8S_CONTEXT}} \ @@ -457,7 +491,17 @@ tasks: --context {{.K8S_CONTEXT}} \ --namespace={{.K8S_NAMESPACE}} \ {{.K8S_PORT_FORWARD_VNC}}:80 - silent: false + silent: true + + k8s:kill:port-forward: + desc: Kill port-forward + deps: + - env-create + cmds: + - | + source {{.ENVIRO_FILE}} && \ + pkill -f 'kubectl port-forward' || true + silent: true k8s:write:env: desc: write k8s env file @@ -477,6 +521,7 @@ tasks: - k8s:generate:service - k8s:generate:ingress - k8s:generate:kustomization + silent: true k8s:path:yamls: desc: generate kubernetes yamls for the deployment @@ -490,6 +535,7 @@ tasks: - k8s:generate:configmap:env - k8s:generate:configmap:volumes - k8s:generate:configmap:args + silent: true k8s:generate:configmap:env: desc: Generate kubernetes configmaps yaml for COMPONENT_NAME @@ -502,6 +548,7 @@ tasks: kubectl create configmap \ {{.K8S_CONFIGMAP_NAME}} \ --from-env-file={{.ENVIRO_FILE}} --dry-run=client -o yaml > {{.K8S_BUILD_PATH}}/configmap-env.yaml + silent: true k8s:generate:configmap:volumes: desc: Generate kubernetes volumes configmaps yaml for COMPONENT_NAME @@ -515,6 +562,7 @@ tasks: --from-file=./services/fortytwo/entrypoint.sh \ --dry-run=client \ --output yaml > {{.K8S_BUILD_PATH}}/configmap-volumes.yaml + silent: true k8s:generate:configmap:args: desc: Generate kubernetes configmaps yaml for COMPONENT_NAME @@ -525,6 +573,7 @@ tasks: - | source {{.ENVIRO_FILE}} && \ echo "" > {{.K8S_BUILD_PATH}}/configmap-args.yaml + silent: true k8s:generate:service: desc: Generate kubernetes service yaml for COMPONENT_NAME @@ -551,6 +600,7 @@ tasks: targetPort: 80 type: ClusterIP EOF + silent: true k8s:generate:ingress: desc: Generate kubernetes configmaps yaml for COMPONENT_NAME @@ -561,6 +611,7 @@ tasks: - | source {{.ENVIRO_FILE}} && \ echo "" > {{.K8S_BUILD_PATH}}/ingress.yaml + silent: true k8s:generate:deployment: desc: Generate kubernetes deployment yaml for COMPONENT_NAME @@ -628,6 +679,7 @@ tasks: defaultMode: 0555 name: "{{.K8S_APP_LABEL}}-volumes" EOF + silent: true k8s:generate:kustomization: desc: Generate Kustomization yaml for COMPONENT_NAME @@ -649,4 +701,5 @@ tasks: - ./service.yaml - ./ingress.yaml - EOF \ No newline at end of file + EOF + silent: true From a0a5c5f4cfd5bdad6f097970b456714ce62b6875 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 14 Jan 2026 09:53:28 -0500 Subject: [PATCH 072/111] tabling k8s for now, in order to fully complete docker-compose work --- deployments/Taskfile.yaml | 1 + deployments/scripts/test.sh | 13 ++++ .../fortytwo/kubernetes/configmap-args.yaml | 1 + .../fortytwo/kubernetes/configmap-env.yaml | 23 +++---- .../kubernetes/configmap-volumes.yaml | 61 ++++--------------- .../fortytwo/kubernetes/deployment.yaml | 8 +-- .../services/fortytwo/kubernetes/ingress.yaml | 1 + .../fortytwo/kubernetes/kustomization.yaml | 3 +- .../services/fortytwo/kubernetes/service.yaml | 2 - 9 files changed, 42 insertions(+), 71 deletions(-) create mode 100755 deployments/scripts/test.sh diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index d2b99f977..e1a1faddd 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -48,6 +48,7 @@ vars: K8S_REPLICAS: 1 K8S_BUILD_PATH: './build/k8s/contexts/{{.K8S_CONTEXT}}/clusters/{{.K8S_CLUSTER}}/namespaces/{{.K8S_NAMESPACE}}/applications/{{.K8S_APP_LABEL}}' +# K8S_BUILD_PATH: './services/fortytwo/kubernetes' tasks: default: diff --git a/deployments/scripts/test.sh b/deployments/scripts/test.sh new file mode 100755 index 000000000..41b1071ad --- /dev/null +++ b/deployments/scripts/test.sh @@ -0,0 +1,13 @@ +#! /usr/bin/env bash + +MISSIONS=(m01 m02) +SC=(sc01 sc02) + +for MISSION in "${MISSIONS[@]}" +do + for SPACECRAFT in "${SC[@]}" + do + echo $MISSION $SPACECRAFT + task k8s:delete:kustomization MISSION=${MISSION} SPACECRAFT=${SPACECRAFT} K8S_REPLICAS=1 & + done +done \ No newline at end of file diff --git a/deployments/services/fortytwo/kubernetes/configmap-args.yaml b/deployments/services/fortytwo/kubernetes/configmap-args.yaml index e69de29bb..8b1378917 100644 --- a/deployments/services/fortytwo/kubernetes/configmap-args.yaml +++ b/deployments/services/fortytwo/kubernetes/configmap-args.yaml @@ -0,0 +1 @@ + diff --git a/deployments/services/fortytwo/kubernetes/configmap-env.yaml b/deployments/services/fortytwo/kubernetes/configmap-env.yaml index 5b7e71ef5..9b46aba67 100644 --- a/deployments/services/fortytwo/kubernetes/configmap-env.yaml +++ b/deployments/services/fortytwo/kubernetes/configmap-env.yaml @@ -1,10 +1,4 @@ apiVersion: v1 - -kind: ConfigMap - -metadata: - name: nos3-m01-sc01-fortytwo-env - data: BASE_DIR: /opt/nasa-itc COMPONENT_DIR: /home/nos3/builds/nos3/components @@ -18,8 +12,8 @@ data: FORTYTWO_LEAP_SECONDS: "37" FORTYTWO_PORT: "30090" FORTYTWO_RECOMPILE: "false" - FORTYTWO_SIM_DATE: '"12 29 2025"' - FORTYTWO_SIM_TIME: '"15 57 13.00"' + FORTYTWO_SIM_DATE: '"01 06 2026"' + FORTYTWO_SIM_TIME: '"18 46 59.00"' FORTYTWO_STARTUP_FOLDER: NOS3InOut FORTYTWO_VNC_PASSWORD: c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2 FSW_SOFTWARE: cfs @@ -49,12 +43,12 @@ data: OPENMCT_NVM_VERSION: v0.40.1 OPENMCT_PORT: "9000" PROJECT_NAME: nos3-m01-sc01 - SIM_T0_DATETIME: '"2025-12-29 15:56:43 UTC"' - SIM_T0_EPOCH_MILLISECONDS: "1767023833000" - SIM_T0_EPOCH_SECONDS: "1767023833" - SIM_TF_EPOCH_MILLISECONDS: "1767027433000" + SIM_T0_DATETIME: '"2026-01-06 18:46:29 UTC"' + SIM_T0_EPOCH_MILLISECONDS: "1767725219000" + SIM_T0_EPOCH_SECONDS: "1767725219" + SIM_TF_EPOCH_MILLISECONDS: "1767728819000" SPACECRAFT: sc01 - START_TIME: "820295833" + START_TIME: "820997219" TIME_INTERVAL: "3600" TIME_INTERVAL_MILLISECONDS: "3600000" TIME_OFFSET_SECONDS: "+30" @@ -63,3 +57,6 @@ data: YAMCS_GIT_URL: https://github.com/nasa-itc/nos3_yamcs_master.git YAMCS_INSTANCES: nos3 YAMCS_PORT: "8090" +kind: ConfigMap +metadata: + name: nos3-m01-sc01-fortytwo diff --git a/deployments/services/fortytwo/kubernetes/configmap-volumes.yaml b/deployments/services/fortytwo/kubernetes/configmap-volumes.yaml index e82b4932f..45ff864a1 100644 --- a/deployments/services/fortytwo/kubernetes/configmap-volumes.yaml +++ b/deployments/services/fortytwo/kubernetes/configmap-volumes.yaml @@ -1,53 +1,16 @@ ---- apiVersion: v1 - +data: + entrypoint.sh: "#!/bin/bash\n\nrm -f /tmp/.X1-lock || true\nrm -f /tmp/.X11-unix/X1 + || true\n\npkill -9 -f vncserver || true\npkill -9 -f Xvnc || true\npkill -9 -f + websockify || true\n\n/opt/TurboVNC/bin/vncserver -securitytypes tlsnone,x509none,none + && \\\n sleep 5 && \\\n websockify -D \\\n --web=/usr/share/novnc/ \\\n --cert=~/novnc.pem + 80 localhost:5901 \n \nexport DISPLAY=${DISPLAY:-:1}\nexport DIR=/opt/nasa-itc\nexport + GIT_FOLDER=${GIT_FOLDER}\n\nxterm &\n\nrm -rf /opt/nasa-itc/42/NO3InOut/{*.42,*.csv} + \n\nif [ \"$RECOMPILE\" == \"true\" ]; then\n cd /opt/nasa-itc/42 && \\\n git + fetch && \\\n git checkout ${GIT_COMMIT} && \\\n git pull origin && \\\n + \ git submodule update && \\\n make clean && \\\n make -j2\nfi\n\nSTARTUP_FOLDER=${STARTUP_FOLDER:-NO3InOut}\n\ncd + /opt/nasa-itc/42 && \\\n xterm -e \"./42 ${STARTUP_FOLDER}\" &\n\necho \"Started + 42 with PID $!\"\n\ntail -f /dev/null\n" kind: ConfigMap metadata: - annotations: - use-subpath: "true" name: nos3-m01-sc01-fortytwo-volumes - -data: - entrypoint.sh: | - #!/bin/bash - - rm -f /tmp/.X1-lock || true - rm -f /tmp/.X11-unix/X1 || true - - pkill -9 -f vncserver || true - pkill -9 -f Xvnc || true - pkill -9 -f websockify || true - - /opt/TurboVNC/bin/vncserver -securitytypes tlsnone,x509none,none && \ - sleep 5 && \ - websockify -D \ - --web=/usr/share/novnc/ \ - --cert=~/novnc.pem 80 localhost:5901 - - export DISPLAY=${DISPLAY:-:1} - export DIR=/opt/nasa-itc - export GIT_FOLDER=${GIT_FOLDER} - - xterm & - - rm -rf /opt/nasa-itc/42/NO3InOut/{*.42,*.csv} - - if [ "$RECOMPILE" == "true" ]; then - cd /opt/nasa-itc/42 && \ - git fetch && \ - git checkout ${GIT_COMMIT} && \ - git pull origin && \ - git submodule update && \ - make clean && \ - make -j2 - fi - - STARTUP_FOLDER=${STARTUP_FOLDER:-NO3InOut} - - cd /opt/nasa-itc/42 && \ - xterm -e "./42 ${STARTUP_FOLDER}" & - - echo "Started 42 with PID $!" - - tail -f /dev/null - diff --git a/deployments/services/fortytwo/kubernetes/deployment.yaml b/deployments/services/fortytwo/kubernetes/deployment.yaml index 35bea97d1..e29eb0222 100644 --- a/deployments/services/fortytwo/kubernetes/deployment.yaml +++ b/deployments/services/fortytwo/kubernetes/deployment.yaml @@ -1,13 +1,11 @@ --- apiVersion: apps/v1 - kind: Deployment - metadata: name: nos3-m01-sc01-fortytwo + namespace: nos3-m01 labels: app: nos3-m01-sc01-fortytwo - spec: replicas: 1 selector: @@ -46,7 +44,7 @@ spec: - mountPath: /entrypoint.sh name: nos3-m01-sc01-fortytwo-volumes subPath: entrypoint.sh - hostname: fortytwo + hostname: nos3-m01-sc01-fortytwo restartPolicy: Always volumes: - configMap: @@ -55,4 +53,4 @@ spec: path: entrypoint.sh name: nos3-m01-sc01-fortytwo-volumes defaultMode: 0555 - name: nos3-m01-sc01-fortytwo-volumes + name: "nos3-m01-sc01-fortytwo-volumes" diff --git a/deployments/services/fortytwo/kubernetes/ingress.yaml b/deployments/services/fortytwo/kubernetes/ingress.yaml index e69de29bb..8b1378917 100644 --- a/deployments/services/fortytwo/kubernetes/ingress.yaml +++ b/deployments/services/fortytwo/kubernetes/ingress.yaml @@ -0,0 +1 @@ + diff --git a/deployments/services/fortytwo/kubernetes/kustomization.yaml b/deployments/services/fortytwo/kubernetes/kustomization.yaml index 5ae445673..64ba096b9 100644 --- a/deployments/services/fortytwo/kubernetes/kustomization.yaml +++ b/deployments/services/fortytwo/kubernetes/kustomization.yaml @@ -2,11 +2,10 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -# Include ConfigMaps - ./configmap-args.yaml - ./configmap-env.yaml - ./configmap-volumes.yaml - - ./deployment.yaml - ./service.yaml - ./ingress.yaml + diff --git a/deployments/services/fortytwo/kubernetes/service.yaml b/deployments/services/fortytwo/kubernetes/service.yaml index 234314595..6a77faa15 100644 --- a/deployments/services/fortytwo/kubernetes/service.yaml +++ b/deployments/services/fortytwo/kubernetes/service.yaml @@ -1,8 +1,6 @@ --- apiVersion: v1 - kind: Service - metadata: name: nos3-m01-sc01-fortytwo From d1afd2ef5f2cfeea564cafbedef0baf7312c2520 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 14 Jan 2026 10:26:44 -0500 Subject: [PATCH 073/111] enhanced README.md --- deployments/README.md | 111 ++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 57 deletions(-) diff --git a/deployments/README.md b/deployments/README.md index d884d81a4..ec08e9c3e 100644 --- a/deployments/README.md +++ b/deployments/README.md @@ -12,51 +12,14 @@ Which can be installed via `make install-lazydocker install-taskfile` -## prep +## prep - onetime run ```bash -make install-lazydocker install-taskfile -make env-create +make install-lazydocker install-taskfile env-create ``` -## run - -```bash -make - -``` - -returns - -```bash -#-target-----------------------description----------------------------------------------- -build-fortytwo Build fortytwo (42) -build-openmct Build openmct -build-yamcs Build yamcs -build Build all containers -clean clean images, cache, volumes, and networks -down Bring down nos3 -env-create Create .env file from env.sh script -info-services info on accessing various services -install-lazydocker Install lazydocker CLI tool (to view logs, etc) -install-taskfile Install Taskfile CLI tool -lazydocker Run lazydocker CLI tool -purge-containers WARNING: purge docker/podman images, cache, volumes, and networks -set-permissions set filesystem permissions, needed for restricted accounts -setup-maven Setup maven settings.xml with proxy info-services -sidecar Run sidecar to enable output -up-minimum Bring up nos3 in detached state -up Bring up nos3 in detached state - -``` - -```bash -make up - -``` - -or using `task` after you've done `make install-taskfile`: +## Run `task` after you've done `make install-taskfile`: ```bash task @@ -67,23 +30,55 @@ returns: ```bash task: Available tasks for this project: -* build: Build all containers -* build-fortytwo: Build fortytwo (42) -* build-openmct: Build openmct -* build-yamcs: Build yamcs -* clean: clean images, cache, volumes, and networks -* default: Shows this help message -* down: Bring down nos3 -* env-create: Create .env file from env.sh script -* info-services: info on accessing various services -* install-lazydocker: Install lazydocker CLI tool (to view logs, etc) -* lazydocker: Run lazydocker CLI tool -* purge-containers: WARNING: purge docker/podman images, cache, volumes, and networks -* set-permissions: set filesystem permissions, needed for restricted accounts -* setup-maven: Setup maven settings.xml with proxy info-services -* sidecar: Run sidecar to enable output -* up: Bring up nos3 in detached state -* up-minimum: Bring up nos3 (minimum) in detached state +* build: Build all containers +* build-fortytwo: Build fortytwo (42) +* build-fsw: Build nos3-base-local (fsw) +* build-openmct: Build openmct +* build-yamcs: Build yamcs +* check-docker-ps: check docker ps for any exited|unhealthy|created|error containers +* check-service-ready: wait for a service to be ready on a given port +* clean: clean nos3 configuration +* clean-containers: clean images, cache, volumes, and networks +* config: configure nos3 by running config.sh +* config-nos3-mission: configure nos3-mission.xml to set start-time +* default: Shows this help message +* down: Bring down nos3 +* env-create: Create .env file from env.sh script +* info-services: info on accessing various services +* install-lazydocker: Install lazydocker CLI tool (to view logs, etc) +* purge-containers: WARNING: purge docker/podman images, cache, volumes, and networks +* set-permissions: set filesystem permissions, needed for restricted accounts +* setup-maven: Setup maven settings.xml with proxy info-services +* sidecar: Run sidecar to enable output +* submodule-update: sync and update git submodules +* up: Bring up nos3 in detached state +* up-minimum: Bring up nos3 (minimum) in detached state +* k8s:apply:deployment: apply nos3 kubernetes deployment(s) +* k8s:apply:ingress:nginx: apply ingress-nginx for nos3 kubernetes +* k8s:apply:kustomization: Apply kustomization to the namespace +* k8s:convert:kompose: convert docker-compose to kubernetes manifests using kompose +* k8s:convert:kompose:helm: convert docker-compose to kubernetes manifests using kompose +* k8s:create:namespace: Create the Kubernetes namespace +* k8s:delete:deployment: delete nos3 kubernetes deployment(s) +* k8s:delete:kustomization: Delete kustomize and namespace +* k8s:delete:namespace: delete nos3 kubernetes namespace +* k8s:generate:all: Generate all kubernetes yamls for COMPONENT_NAME +* k8s:generate:configmap:args: Generate kubernetes configmaps yaml for COMPONENT_NAME +* k8s:generate:configmap:env: Generate kubernetes configmaps yaml for COMPONENT_NAME +* k8s:generate:configmap:volumes: Generate kubernetes volumes configmaps yaml for COMPONENT_NAME +* k8s:generate:configmaps:all: Generate all kubernetes yamls for COMPONENT_NAME +* k8s:generate:deployment: Generate kubernetes deployment yaml for COMPONENT_NAME +* k8s:generate:ingress: Generate kubernetes configmaps yaml for COMPONENT_NAME +* k8s:generate:kustomization: Generate Kustomization yaml for COMPONENT_NAME +* k8s:generate:service: Generate kubernetes service yaml for COMPONENT_NAME +* k8s:get:configmap: get a specific kubernetes configmaps defined in K8S_CONFIGMAP_NAME +* k8s:get:configmaps: get nos3 kubernetes configmaps +* k8s:get:pod-name: get the pod name for nos3 kubernetes deployment +* k8s:kill:port-forward: Kill port-forward +* k8s:path:yamls: generate kubernetes yamls for the deployment +* k8s:port-forward: Port forward to access services locally +* k8s:write:env: write k8s env file + ``` @@ -109,6 +104,8 @@ open http://localhost:9000 to access openmct ## Diagrams +Ignore the below for now + ```mermaid graph TD A[ubuntu:jammy-20250126]-->|FROM| B From 1ce96fb366fdfa10ea814c9939eeac36d691ffa9 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 14 Jan 2026 10:27:46 -0500 Subject: [PATCH 074/111] enhanced README.md --- deployments/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/deployments/README.md b/deployments/README.md index ec08e9c3e..701201680 100644 --- a/deployments/README.md +++ b/deployments/README.md @@ -4,9 +4,6 @@ - `gnu make` - `bash` - -### Optional but very useful - - `task` a contemporary version of `make` - `lazydocker` From d2efcc08a07f004cbf16bb58ae6a9f0c6d02686c Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 14 Jan 2026 10:29:08 -0500 Subject: [PATCH 075/111] enhanced README.md --- deployments/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deployments/README.md b/deployments/README.md index 701201680..e010a534f 100644 --- a/deployments/README.md +++ b/deployments/README.md @@ -79,6 +79,8 @@ task: Available tasks for this project: ``` +## Run - which actually also runs `task submodule-update` + ```bash task up From 84c2823f0cb7fc7e15d361bdb949cccc6ae82e1c Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 14 Jan 2026 10:42:22 -0500 Subject: [PATCH 076/111] Added NOS3 docker-compose data flow diagram Documented the architecture and data flows between all 24 services defined in compose.yaml using Mermaid diagrams. Included service dependencies, network topology, and component descriptions. --- deployments/docs/FlowDiagram.md | 212 ++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 deployments/docs/FlowDiagram.md diff --git a/deployments/docs/FlowDiagram.md b/deployments/docs/FlowDiagram.md new file mode 100644 index 000000000..082a8c85b --- /dev/null +++ b/deployments/docs/FlowDiagram.md @@ -0,0 +1,212 @@ +# NOS3 Data Flow Diagram + +```mermaid +flowchart TB + subgraph External["External Access"] + User["👤 User/Browser"] + end + + subgraph GroundSoftware["Ground Software"] + YAMCS["nos3-gsw
(YAMCS)
:8090, :5012"] + OpenMCT["nos3-openmct
:9000, :8080"] + end + + subgraph FlightSoftware["Flight Software"] + FSW["nos3-fsw
(cFS Flight Software)"] + OnAir["nos3-onair
(On-Air Launch)"] + end + + subgraph SimulationCore["Simulation Core"] + FortyTwo["nos3-fortytwo
(42 Simulator)
:30090"] + NosEngine["nos3-nos-engine-server
:12000, :12001"] + Time["nos3-time
(Time Driver)"] + Truth42["nos3-truth42sim"] + end + + subgraph Terminals["Terminals & Bridges"] + Terminal["nos3-nos-terminal
(STDIO Terminal)"] + UDPTerminal["nos3-nos-udp-terminal
(UDP Terminal)"] + SimBridge["nos3-nos-sim-bridge
(Command Bus Bridge)"] + end + + subgraph SensorSimulators["Sensor Simulators"] + CSS["nos3-css-sim
(Coarse Sun Sensor)"] + FSS["nos3-fss-sim
(Fine Sun Sensor)"] + GPS["nos3-gps-sim"] + IMU["nos3-imu-sim"] + MAG["nos3-mag-sim
(Magnetometer)"] + StarTrk["nos3-startrk-sim
(Star Tracker)"] + CAM["nos3-camsim
(Camera)"] + end + + subgraph ActuatorSimulators["Actuator Simulators"] + RW0["nos3-rw-sim0
(Reaction Wheel 0)"] + RW1["nos3-rw-sim1
(Reaction Wheel 1)"] + RW2["nos3-rw-sim2
(Reaction Wheel 2)"] + Thruster["nos3-thruster-sim"] + Torquer["nos3-torquer-sim"] + end + + subgraph OtherSims["Other Simulators"] + EPS["nos3-eps-sim
(Power System)"] + Sample["nos3-sample-sim"] + RadioCrypto["nos3-radio-sim-cryptolib
(Radio + CryptoLib)"] + end + + %% User Access + User -->|":8090 YAMCS Web"| YAMCS + User -->|":9000/:8080 OpenMCT"| OpenMCT + User -->|":30090 42 VNC"| FortyTwo + + %% Ground to Flight Communication + OpenMCT -->|"Telemetry API"| YAMCS + YAMCS <-->|"Commands/Telemetry
via RadioCrypto"| RadioCrypto + RadioCrypto <-->|"Encrypted Comms"| FSW + + %% Core Dependencies + FSW -->|"depends_on"| FortyTwo + FSW -->|"depends_on"| NosEngine + Time -->|"depends_on"| NosEngine + Truth42 -->|"depends_on"| NosEngine + + %% NOS Engine as central hub + NosEngine <-->|"Time Sync"| Time + NosEngine <-->|"Simulation Bus"| FSW + NosEngine <-->|"42 Data"| Truth42 + + %% 42 Simulator provides environment data + FortyTwo -->|"Spacecraft State
(Position, Attitude)"| Truth42 + FortyTwo -->|"Sun Vector"| CSS + FortyTwo -->|"Sun Vector"| FSS + FortyTwo -->|"Orbit/Position"| GPS + FortyTwo -->|"Angular Rates"| IMU + FortyTwo -->|"Magnetic Field"| MAG + FortyTwo -->|"Star Field"| StarTrk + FortyTwo -->|"Scene Data"| CAM + FortyTwo -->|"Solar Power"| EPS + + %% Sensor data to FSW + CSS -->|"Sensor Data"| FSW + FSS -->|"Sensor Data"| FSW + GPS -->|"Sensor Data"| FSW + IMU -->|"Sensor Data"| FSW + MAG -->|"Sensor Data"| FSW + StarTrk -->|"Sensor Data"| FSW + CAM -->|"Sensor Data"| FSW + EPS -->|"Power Status"| FSW + Sample -->|"Sample Data"| FSW + + %% FSW commands to actuators + FSW -->|"Wheel Commands"| RW0 + FSW -->|"Wheel Commands"| RW1 + FSW -->|"Wheel Commands"| RW2 + FSW -->|"Thrust Commands"| Thruster + FSW -->|"Torque Commands"| Torquer + + %% Actuator feedback to 42 + RW0 -->|"Torque Applied"| FortyTwo + RW1 -->|"Torque Applied"| FortyTwo + RW2 -->|"Torque Applied"| FortyTwo + Thruster -->|"Thrust Applied"| FortyTwo + Torquer -->|"Torque Applied"| FortyTwo + + %% Terminals + SimBridge <-->|"Command Bus"| FSW + Terminal <-->|"Debug I/O"| NosEngine + UDPTerminal <-->|"UDP Debug"| NosEngine + + %% Styling + classDef ground fill:#4a90d9,stroke:#2c5282,color:#fff + classDef flight fill:#48bb78,stroke:#276749,color:#fff + classDef simcore fill:#ed8936,stroke:#c05621,color:#fff + classDef sensor fill:#9f7aea,stroke:#6b46c1,color:#fff + classDef actuator fill:#f56565,stroke:#c53030,color:#fff + classDef terminal fill:#718096,stroke:#4a5568,color:#fff + classDef other fill:#38b2ac,stroke:#285e61,color:#fff + classDef external fill:#ecc94b,stroke:#b7791f,color:#000 + + class YAMCS,OpenMCT ground + class FSW,OnAir flight + class FortyTwo,NosEngine,Time,Truth42 simcore + class CSS,FSS,GPS,IMU,MAG,StarTrk,CAM sensor + class RW0,RW1,RW2,Thruster,Torquer actuator + class Terminal,UDPTerminal,SimBridge terminal + class EPS,Sample,RadioCrypto other + class User external +``` + +## NOS3 Architecture Overview + +The diagram shows the **NASA Operational Simulator for Small Satellites (NOS3)** system with these key data flows: + +### Core Components + +| Component | Purpose | Ports | +|-----------|---------|-------| +| **nos3-fortytwo** | 42 Spacecraft Dynamics Simulator | :30090 (VNC) | +| **nos3-nos-engine-server** | Central simulation bus | :12000, :12001 | +| **nos3-fsw** | cFS Flight Software | - | +| **nos3-gsw (YAMCS)** | Ground Software/Mission Control | :8090, :5012 | +| **nos3-openmct** | Web-based telemetry visualization | :9000, :8080 | + +### Data Flow Patterns + +1. **Environment → Sensors**: 42 Simulator provides spacecraft state data (sun vectors, magnetic field, star field, etc.) to sensor simulators + +2. **Sensors → FSW**: Sensor simulators send telemetry to the Flight Software + +3. **FSW → Actuators**: Flight Software sends commands to reaction wheels, thrusters, and torquers + +4. **Actuators → Environment**: Actuator responses feed back to 42 Simulator to update spacecraft dynamics + +5. **FSW ↔ Ground**: Radio simulator with CryptoLib handles encrypted communication between flight and ground software + +### Networks + +All services connect to both Docker networks: +- **nos3-core**: Core infrastructure network +- **nos3-sc01**: Spacecraft 01 network + +### Service Dependencies + +```mermaid +flowchart LR + subgraph StartupOrder["Startup Order"] + NE["nos-engine-server"] --> FSW["nos3-fsw"] + FT["nos3-fortytwo"] --> FSW + FSW --> Sims["Sensor/Actuator Sims"] + FSW --> Radio["radio-sim-cryptolib"] + YAMCS["nos3-gsw"] --> Radio + YAMCS --> OpenMCT["nos3-openmct"] + end +``` + +### Sensor Simulators + +| Simulator | Description | +|-----------|-------------| +| **nos3-css-sim** | Coarse Sun Sensor | +| **nos3-fss-sim** | Fine Sun Sensor | +| **nos3-gps-sim** | GPS Receiver | +| **nos3-imu-sim** | Inertial Measurement Unit | +| **nos3-mag-sim** | Magnetometer | +| **nos3-startrk-sim** | Star Tracker | +| **nos3-camsim** | Camera | + +### Actuator Simulators + +| Simulator | Description | +|-----------|-------------| +| **nos3-rw-sim0/1/2** | Reaction Wheels (3-axis control) | +| **nos3-thruster-sim** | Thruster | +| **nos3-torquer-sim** | Magnetic Torquer | + +### Other Simulators + +| Simulator | Description | +|-----------|-------------| +| **nos3-eps-sim** | Electrical Power System | +| **nos3-sample-sim** | Sample/Payload Simulator | +| **nos3-radio-sim-cryptolib** | Radio with encryption (CryptoLib) | +| **nos3-time** | Time synchronization driver | +| **nos3-truth42sim** | Ground truth from 42 | From 71128c260499b60300f7368f5ebe5ba3d8a96696 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 14 Jan 2026 12:55:57 -0500 Subject: [PATCH 077/111] Improved check-service-ready task with timeout and API validation - Added 60-second timeout to port and API readiness checks - Added YAMCS API validation by checking for yamcsVersion in response - Enabled check-service-ready in up task instead of fixed sleep - Added progress indicator showing attempt count --- deployments/Taskfile.yaml | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index e1a1faddd..28651614b 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -135,7 +135,6 @@ tasks: up: desc: Bring up nos3 in detached state deps: -# - down - submodule-update - env-create - build @@ -147,8 +146,8 @@ tasks: source {{.ENVIRO_FILE}} && \ export NOS3_CFG_PATH={{.NOS3_CFG_PATH}}; \ {{.CONTAINER_COMPOSE_BIN}} --env-file {{.ENVIRO_FILE}} -f {{.COMPOSE_FILE}} --project-name {{.COMPOSE_PROJECT_NAME}} up -d --force-recreate --remove-orphans - # - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 - - sleep 17 + - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 + - sleep 5 - task sidecar - task info-services - task check-docker-ps @@ -245,11 +244,29 @@ tasks: desc: wait for a service to be ready on a given port cmds: - | - echo "Waiting for service {{.SERVICE_HOST}}:{{.SERVICE_PORT}} to be ready on port {{.SERVICE_PORT}}..." + echo "Waiting for service {{.SERVICE_HOST}}:{{.SERVICE_PORT}} to be ready..." + COUNT=0 until nc -z {{.SERVICE_HOST}} {{.SERVICE_PORT}}; do + COUNT=$((COUNT + 1)) + if [ $COUNT -ge 60 ]; then + echo "Timeout waiting for port {{.SERVICE_PORT}} to open" + exit 1 + fi + sleep 1 + echo "Waiting for {{.SERVICE_HOST}}:{{.SERVICE_PORT}} to be ready... ($COUNT/60)" + done + echo "Port {{.SERVICE_HOST}}:{{.SERVICE_PORT}} is open, checking API..." + COUNT=0 + until curl -s "http://{{.SERVICE_HOST}}:{{.SERVICE_PORT}}/api" | grep -q '"yamcsVersion"'; do + COUNT=$((COUNT + 1)) + if [ $COUNT -ge 60 ]; then + echo "Timeout waiting for API to be ready" + exit 1 + fi sleep 1 + echo "Waiting for API to be ready... ($COUNT/60)" done - echo "Service {{.SERVICE_HOST}}:{{.SERVICE_PORT}} is ready on port {{.SERVICE_PORT}}!" + echo "Service http://{{.SERVICE_HOST}}:{{.SERVICE_PORT}}/api is ready!" silent: true purge-containers: From f479eb5ad54f93b903985bcccef3b5b0fc50634d Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 14 Jan 2026 15:54:10 -0500 Subject: [PATCH 078/111] altered networking --- deployments/compose.yaml | 118 +++++++++++++++++++-------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 5c0660be6..3987bd337 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -55,8 +55,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-gsw: image: ghcr.io/haisamido/nos3-base-yamcs:dev @@ -114,11 +114,11 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - active-gs - yamcs - nos3-core-00: + nos3-m01-core-00: nos3-onair: image: nos3-base-local:dev @@ -142,8 +142,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-fsw: image: nos3-base-local:dev @@ -202,8 +202,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-nos-engine-server: image: nos3-base-local:dev @@ -234,10 +234,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - sc01-nos-engine-server - nos3-core-00: + nos3-m01-core-00: nos3-truth42sim: image: nos3-base-local:dev @@ -266,8 +266,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-nos-terminal: image: nos3-base-local:dev @@ -289,8 +289,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-nos-udp-terminal: image: nos3-base-local:dev @@ -312,8 +312,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-nos-sim-bridge: image: nos3-base-local:dev @@ -334,8 +334,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-camsim: image: nos3-base-local:dev @@ -358,11 +358,11 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - camsim - sc01-camsim - nos3-core-00: + nos3-m01-core-00: nos3-css-sim: image: nos3-base-local:dev @@ -385,10 +385,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - css - nos3-core-00: + nos3-m01-core-00: nos3-eps-sim: image: nos3-base-local:dev @@ -413,10 +413,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - eps - nos3-core-00: + nos3-m01-core-00: nos3-fss-sim: image: nos3-base-local:dev @@ -439,10 +439,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - fss - nos3-core-00: + nos3-m01-core-00: nos3-gps-sim: image: nos3-base-local:dev @@ -465,10 +465,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - gps - nos3-core-00: + nos3-m01-core-00: nos3-imu-sim: image: nos3-base-local:dev @@ -491,10 +491,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - imu - nos3-core-00: + nos3-m01-core-00: nos3-mag-sim: image: nos3-base-local:dev @@ -517,10 +517,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - mag - nos3-core-00: + nos3-m01-core-00: nos3-rw-sim0: image: nos3-base-local:dev @@ -543,10 +543,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - rw0 - nos3-core-00: + nos3-m01-core-00: nos3-rw-sim1: image: nos3-base-local:dev @@ -569,10 +569,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - rw1 - nos3-core-00: + nos3-m01-core-00: nos3-rw-sim2: image: nos3-base-local:dev @@ -595,10 +595,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - rw2 - nos3-core-00: + nos3-m01-core-00: # nos3-radio-sim: # image: ghcr.io/haisamido/nos3-base:dev @@ -623,10 +623,10 @@ services: # environment: # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} # networks: - # nos3-sc01-00: + # nos3-m01-sc01-00: # # aliases: # # - radio-sim - # nos3-core-00: + # nos3-m01-core-00: # nos3-cryptolib: # image: nos3-base-local:dev @@ -652,10 +652,10 @@ services: # environment: # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} # networks: -# nos3-sc01-00: +# nos3-m01-sc01-00: # aliases: # - cryptolib -# nos3-core-00: +# nos3-m01-core-00: nos3-radio-sim-cryptolib: image: nos3-base-local:dev @@ -685,11 +685,11 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - radio-sim - cryptolib - nos3-core-00: + nos3-m01-core-00: nos3-sample-sim: image: nos3-base-local:dev @@ -712,8 +712,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-startrk-sim: image: nos3-base-local:dev @@ -736,8 +736,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-thruster-sim: image: nos3-base-local:dev @@ -760,8 +760,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-torquer-sim: image: nos3-base-local:dev @@ -785,8 +785,8 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: - nos3-core-00: + nos3-m01-sc01-00: + nos3-m01-core-00: nos3-time: image: nos3-base-local:dev @@ -811,10 +811,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - sc01-nos-time-driver - nos3-core-00: + nos3-m01-core-00: nos3-openmct: env_file: @@ -862,16 +862,16 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-sc01-00: + nos3-m01-sc01-00: aliases: - openmct - sc01-openmct - nos3-core-00: + nos3-m01-core-00: networks: - nos3-core-00: + nos3-m01-core-00: external: ${EXTERNAL_NETWORK_CORE:-false} name: nos3-core - nos3-sc01-00: + nos3-m01-sc01-00: external: ${EXTERNAL_NETWORK_SC01:-false} - name: nos3-sc01 + name: nos3-m01-sc01 From cf6fa3fdb44c039e2f3ffd4dc644414e7f74914d Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 09:48:40 -0500 Subject: [PATCH 079/111] preparing compose.yaml for generalized mission-spacecraft names --- deployments/compose.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 3987bd337..5e74d1709 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -56,6 +56,8 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - fortytwo nos3-m01-core-00: nos3-gsw: @@ -871,7 +873,7 @@ services: networks: nos3-m01-core-00: external: ${EXTERNAL_NETWORK_CORE:-false} - name: nos3-core + name: nos3-m01-core nos3-m01-sc01-00: external: ${EXTERNAL_NETWORK_SC01:-false} name: nos3-m01-sc01 From 7ac32b9f514d8840115d38bb810189370973a9e8 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 11:33:51 -0500 Subject: [PATCH 080/111] parametrized docker compose service fortywo --- deployments/compose.yaml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 5e74d1709..26fe04d78 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -25,10 +25,10 @@ services: test: ["CMD-SHELL", "/usr/bin/pgrep -f 42 | grep -v xterm ; sleep 2"] interval: 10s timeout: 5s - retries: 5 + retries: 7 attach: true - container_name: sc01-fortytwo - hostname: fortytwo + container_name: ${COMPOSE_PROJECT_NAME}-fortytwo + hostname: ${COMPOSE_PROJECT_NAME}-fortytwo working_dir: "/opt/nasa-itc/" command: '/entrypoint.sh' volumes: @@ -37,7 +37,7 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/InOut/Inp_Sim.txt:/opt/nasa-itc/42/NOS3InOut/Inp_Sim.txt - ${PWD}/services/fortytwo/entrypoint.sh:/entrypoint.sh ports: - - "127.0.0.1:30090:80" + - "127.0.0.1:${FORTYTWO_PORT}:80" environment: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} HTTPS_PROXY: ${HTTPS_PROXY} @@ -54,6 +54,7 @@ services: MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} + HOST_PORT: ${FORTYTWO_PORT} networks: nos3-m01-sc01-00: aliases: @@ -145,6 +146,9 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - onair + - ${COMPOSE_PROJECT_NAME}-onair nos3-m01-core-00: nos3-fsw: From 0f2d0e92d771159df9fca6cec5aef2bb1782d2ff Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 12:44:11 -0500 Subject: [PATCH 081/111] configuring nos3-gsw to be parameterizable (wip) --- deployments/compose.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 26fe04d78..d0da3a1f0 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -88,7 +88,7 @@ services: retries: 10 attach: true container_name: cosmos-openc3-operator-1 - hostname: cosmos + hostname: ${COMPOSE_PROJECT_NAME}-gsw working_dir: "/home/nos3/.nos3/yamcs" command: "/entrypoint.sh" volumes: @@ -121,6 +121,7 @@ services: aliases: - active-gs - yamcs + - cosmos nos3-m01-core-00: nos3-onair: From aba94d77dfa65f4a3719087260b32d5286886df5 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 14:23:09 -0500 Subject: [PATCH 082/111] configured nos3-gsw to be parameterizable --- deployments/compose.yaml | 5 ++--- deployments/scripts/env.sh | 1 + deployments/services/yamcs/Dockerfile | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index d0da3a1f0..0f827cda4 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -87,7 +87,7 @@ services: timeout: 5s retries: 10 attach: true - container_name: cosmos-openc3-operator-1 + container_name: ${COMPOSE_PROJECT_NAME}-gsw hostname: ${COMPOSE_PROJECT_NAME}-gsw working_dir: "/home/nos3/.nos3/yamcs" command: "/entrypoint.sh" @@ -95,8 +95,7 @@ services: - ${PWD}/services/yamcs/entrypoint.sh:/entrypoint.sh - ${PWD}/services/yamcs/settings.xml:/home/nos3/.nos3/yamcs/settings.xml ports: - - "127.0.0.1:8090:8090" - - "5012:5012" + - "127.0.0.1:${YAMCS_HOST_PORT}:${YAMCS_PORT}" tty: true stdin_open: true privileged: true diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index c91ad524e..2be9e856f 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -126,6 +126,7 @@ YAMCS_GIT_URL=https://github.com/nasa-itc/nos3_yamcs_master.git YAMCS_GIT_COMMIT=nos3-dev YAMCS_INSTANCES=nos3 +YAMCS_HOST_PORT=8090 YAMCS_PORT=8090 # openmct specific configurations diff --git a/deployments/services/yamcs/Dockerfile b/deployments/services/yamcs/Dockerfile index d0574fcc6..0817bd34d 100644 --- a/deployments/services/yamcs/Dockerfile +++ b/deployments/services/yamcs/Dockerfile @@ -58,10 +58,12 @@ ENV GIT_COMMIT=${GIT_COMMIT} ARG FLIGHT_SOFTWARE ARG GSW_SOFTWARE ARG NOS3_USER +ARG YAMCS_PORT ENV NOS3_USER=${NOS3_USER} ENV FLIGHT_SOFTWARE=${FLIGHT_SOFTWARE} ENV GSW_SOFTWARE=${GSW_SOFTWARE} +ENV YAMCS_PORT=${YAMCS_PORT} #------------------------------------------------------------------------------ # Switch to the newly created user From 061156bd7a4b6bd53a10d3d2b8744b94926e8a6e Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 14:42:14 -0500 Subject: [PATCH 083/111] configured nos3-onair to be parameterizable (still No module named 'numpy' error --- deployments/compose.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 0f827cda4..8d399cc4b 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -128,7 +128,8 @@ services: env_file: - ./.env attach: true - container_name: sc01-onair + container_name: ${COMPOSE_PROJECT_NAME}-onair + hostname: ${COMPOSE_PROJECT_NAME}-onair working_dir: /home/nos3/builds/nos3/fsw/build/exe/cpu1 command: "/home/nos3/builds/nos3/scripts/fsw/onair_launch.sh" volumes: @@ -148,7 +149,7 @@ services: nos3-m01-sc01-00: aliases: - onair - - ${COMPOSE_PROJECT_NAME}-onair + - sc01-onair nos3-m01-core-00: nos3-fsw: From 6344a962904360b90cf5d9797cedd2faf9959217 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 14:45:34 -0500 Subject: [PATCH 084/111] configured nos3-fsw to be parameterizable --- deployments/compose.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 8d399cc4b..33561e859 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -189,8 +189,8 @@ services: condition: service_healthy nos3-nos-engine-server: condition: service_healthy - container_name: sc01-nos-fsw - hostname: nos-fsw + container_name: ${COMPOSE_PROJECT_NAME}-fsw + hostname: ${COMPOSE_PROJECT_NAME}-fsw working_dir: /home/nos3/builds/nos3/ volumes: - ${PWD}/services/fsw/entrypoint.sh:/entrypoint.sh @@ -210,6 +210,9 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - fsw + - sc01-fsw nos3-m01-core-00: nos3-nos-engine-server: From 09859520f7def605868aee02d5617f9dd2f8a428 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 15:36:02 -0500 Subject: [PATCH 085/111] configured nos3-nos-engine-server to be parameterizable --- deployments/compose.yaml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 33561e859..98f15de35 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -220,16 +220,16 @@ services: env_file: - ./.env attach: true - # depends_on: - # nos3-fortytwo: - # condition: service_healthy + depends_on: + nos3-fortytwo: + condition: service_healthy healthcheck: test: ["CMD-SHELL", "/usr/bin/nc -vz nos-engine-server 12000 && /usr/bin/nc -vz nos-engine-server 12001"] interval: 10s timeout: 5s retries: 5 - container_name: sc01-nos-engine-server - hostname: nos-engine-server + container_name: ${COMPOSE_PROJECT_NAME}-nos-engine-server + hostname: ${COMPOSE_PROJECT_NAME}-nos-engine-server working_dir: /home/nos3/builds/nos3/sims/build/bin command: "/usr/bin/nos_engine_server_standalone -f ./nos_engine_server_config.json" volumes: @@ -246,7 +246,9 @@ services: networks: nos3-m01-sc01-00: aliases: +# TODO: below is needed for some reason! - sc01-nos-engine-server + - nos-engine-server nos3-m01-core-00: nos3-truth42sim: From b59c460273394e4d7e5a2a49e17ef3a6328623a4 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 15:44:31 -0500 Subject: [PATCH 086/111] configured nos3-truth42sim to be parameterizable --- deployments/compose.yaml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 98f15de35..53bbb618a 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -257,14 +257,14 @@ services: - ./.env attach: true depends_on: - # nos3-fortytwo: - # condition: service_healthy - # nos3-gsw: - # condition: service_healthy + nos3-fortytwo: + condition: service_healthy + nos3-gsw: + condition: service_healthy nos3-nos-engine-server: condition: service_healthy - container_name: sc01-truth42sim - hostname: truth42sim + container_name: ${COMPOSE_PROJECT_NAME}-truth42sim + hostname: ${COMPOSE_PROJECT_NAME}-truth42sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml truth42sim" volumes: @@ -279,6 +279,8 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - truth42sim nos3-m01-core-00: nos3-nos-terminal: From f27eed668a6fa54deff9801561318fef2dd79eb1 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 15:55:26 -0500 Subject: [PATCH 087/111] configured nos3-nos-terminal to be parameterizable --- deployments/compose.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 53bbb618a..c7d296f9c 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -288,8 +288,8 @@ services: env_file: - ./.env attach: true - container_name: nos-terminal - hostname: nos-terminal + container_name: ${COMPOSE_PROJECT_NAME}-nos-terminal + hostname: ${COMPOSE_PROJECT_NAME}-nos-terminal working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml stdio-terminal" volumes: @@ -304,6 +304,8 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - nos-terminal nos3-m01-core-00: nos3-nos-udp-terminal: From b2eea4481b64f02928e941ddf37adb5eff04d31b Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 15:58:37 -0500 Subject: [PATCH 088/111] configured nos3-nos-udp-terminal to be parameterizable --- deployments/compose.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index c7d296f9c..d20737ffe 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -313,8 +313,8 @@ services: env_file: - ./.env attach: true - container_name: nos-udp-terminal - hostname: nos-udp-terminal + container_name: ${COMPOSE_PROJECT_NAME}-nos-udp-terminal + hostname: ${COMPOSE_PROJECT_NAME}-nos-udp-terminal working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml udp-terminal" volumes: @@ -329,6 +329,8 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - nos-udp-terminal nos3-m01-core-00: nos3-nos-sim-bridge: From 00dc7b43aa136a35bafc11f48b6663bee6fb30bb Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 16:02:09 -0500 Subject: [PATCH 089/111] configured nos3-nos-sim-bridge to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index d20737ffe..780d93b2b 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -338,7 +338,8 @@ services: env_file: - ./.env attach: true - container_name: nos-sim-bridge + container_name: ${COMPOSE_PROJECT_NAME}-nos-sim-bridge + hostname: ${COMPOSE_PROJECT_NAME}-nos-sim-bridge working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-sim-cmdbus-bridge -f ./nos3-simulator.xml" volumes: @@ -353,6 +354,8 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - nos-sim-bridge nos3-m01-core-00: nos3-camsim: From eaa561ba20d2929f0a56e35288468e20f58c3d9a Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 16:19:07 -0500 Subject: [PATCH 090/111] configured nos3-camsim to be parameterizable --- deployments/compose.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 780d93b2b..8bb390765 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -368,7 +368,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-cam-sim + container_name: ${COMPOSE_PROJECT_NAME}-cam-sim + hostname: ${COMPOSE_PROJECT_NAME}-cam-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml camsim" volumes: @@ -382,6 +383,7 @@ services: nos3-m01-sc01-00: aliases: - camsim +# TODO: needed? - sc01-camsim nos3-m01-core-00: From 4f4292f9427a71a2b49f804689e1ff91c289fc3f Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 16:23:45 -0500 Subject: [PATCH 091/111] configured nos3-css-sim to be parameterizable --- deployments/compose.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 8bb390765..e2b40b66f 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -397,7 +397,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-css-sim + container_name: ${COMPOSE_PROJECT_NAME}-css-sim + hostname: ${COMPOSE_PROJECT_NAME}-css-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-css-sim" volumes: @@ -411,6 +412,7 @@ services: nos3-m01-sc01-00: aliases: - css + - css-sim nos3-m01-core-00: nos3-eps-sim: From da42bf41e55e955920de11f77fdd08f8181e47ea Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 16:30:30 -0500 Subject: [PATCH 092/111] configured nos3-eps-sim to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index e2b40b66f..90caf5fdc 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -427,7 +427,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-eps-sim + container_name: ${COMPOSE_PROJECT_NAME}-eps-sim + hostname: ${COMPOSE_PROJECT_NAME}-eps-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-eps-sim" volumes: @@ -441,6 +442,8 @@ services: nos3-m01-sc01-00: aliases: - eps +# TODO: needed? + - sc01-eps-sim nos3-m01-core-00: nos3-fss-sim: From c59649a3c611d5443f3ceed12836723010fd6362 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 16:39:56 -0500 Subject: [PATCH 093/111] configured nos3-fss-sim to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 90caf5fdc..169625403 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -456,7 +456,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-fss-sim + container_name: ${COMPOSE_PROJECT_NAME}-fss-sim + hostname: ${COMPOSE_PROJECT_NAME}-fss-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-fss-sim" volumes: @@ -470,6 +471,8 @@ services: nos3-m01-sc01-00: aliases: - fss +# TODO: needed? + - sc01-fss-sim nos3-m01-core-00: nos3-gps-sim: From 2afb02299fed8c408d8828ead26a733bacb8452d Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 17:14:33 -0500 Subject: [PATCH 094/111] configured nos3-gps-sim to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 169625403..6e91eb430 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -485,7 +485,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-gps-sim + container_name: ${COMPOSE_PROJECT_NAME}-gps-sim + hostname: ${COMPOSE_PROJECT_NAME}-gps-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml gps" volumes: @@ -499,6 +500,8 @@ services: nos3-m01-sc01-00: aliases: - gps +# TODO: needed? + - sc01-gps-sims nos3-m01-core-00: nos3-imu-sim: From d25314b906d6c8537f16ed661815b22abc577dd8 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 17:21:51 -0500 Subject: [PATCH 095/111] configured nos3-gps-sim to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 6e91eb430..a2a87d126 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -514,7 +514,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-imu-sim + container_name: ${COMPOSE_PROJECT_NAME}-imu-sim + hostname: ${COMPOSE_PROJECT_NAME}-imu-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-imu-sim" volumes: @@ -528,6 +529,8 @@ services: nos3-m01-sc01-00: aliases: - imu +# TODO: needed? + - sc01-imu-sim nos3-m01-core-00: nos3-mag-sim: From 2aa10fbb8019fee064e377cb48612df98d880a92 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 17:49:57 -0500 Subject: [PATCH 096/111] configured nos3-mag-sim to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index a2a87d126..cf9ffa0c0 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -543,7 +543,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-mag-sim + container_name: ${COMPOSE_PROJECT_NAME}-mag-sim + hostname: ${COMPOSE_PROJECT_NAME}-mag-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-mag-sim" volumes: @@ -557,6 +558,8 @@ services: nos3-m01-sc01-00: aliases: - mag +# TODO: needed? + - sc01-mag-sim nos3-m01-core-00: nos3-rw-sim0: From fb3d6f41381257d650dbaca9b513e0b3fa9ceb9c Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 17:54:00 -0500 Subject: [PATCH 097/111] configured nos3-rw-sim0 to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index cf9ffa0c0..93dc3de25 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -572,7 +572,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-rw-sim0 + container_name: ${COMPOSE_PROJECT_NAME}-rw-sim0 + hostname: ${COMPOSE_PROJECT_NAME}-rw-sim0 working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim0" volumes: @@ -586,6 +587,8 @@ services: nos3-m01-sc01-00: aliases: - rw0 +# TODO: needed? + - sc01-rw-sim0 nos3-m01-core-00: nos3-rw-sim1: From 99635f3dc542fcc28c5df2ca465e1116920dae02 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 18:11:45 -0500 Subject: [PATCH 098/111] configured nos3-rw-sim1 to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 93dc3de25..f3249286c 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -601,7 +601,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-rw-sim1 + container_name: ${COMPOSE_PROJECT_NAME}-rw-sim1 + hostname: ${COMPOSE_PROJECT_NAME}-rw-sim1 working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim1" volumes: @@ -615,6 +616,8 @@ services: nos3-m01-sc01-00: aliases: - rw1 +# TODO: needed? + - sc01-rw-sim1 nos3-m01-core-00: nos3-rw-sim2: From a88d8f5625ca4ab772ac2e5389c5cf199fdcc14c Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 18:32:27 -0500 Subject: [PATCH 099/111] configured nos3-rw-sim2 to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index f3249286c..7929486a4 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -630,7 +630,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-rw-sim2 + container_name: ${COMPOSE_PROJECT_NAME}-rw-sim2 + hostname: ${COMPOSE_PROJECT_NAME}-rw-sim2 working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-reactionwheel-sim2" volumes: @@ -644,6 +645,8 @@ services: nos3-m01-sc01-00: aliases: - rw2 +# TODO: needed? + - sc01-rw-sim2 nos3-m01-core-00: # nos3-radio-sim: From f7e55fb491ab5e58159d585bebb0c736d359dbb5 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 18:35:15 -0500 Subject: [PATCH 100/111] configured nos3-radio-sim-cryptolib to be parameterizable --- deployments/compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 7929486a4..4896dfe40 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -721,8 +721,8 @@ services: condition: service_healthy nos3-gsw: condition: service_healthy - container_name: sc01-radio-sim-cryptolib - hostname: radio-sim-cryptolib + container_name: ${COMPOSE_PROJECT_NAME}-radio-sim-cryptolib + hostname: ${COMPOSE_PROJECT_NAME}- radio-sim-cryptolib working_dir: /home/nos3/builds/nos3/sims/build/bin command: "/entrypoint.sh" volumes: From b1815ea3f7c9d5041dac2a763e8fd9199f70adeb Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 18:39:30 -0500 Subject: [PATCH 101/111] configured nos3-sample-sim to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 4896dfe40..daee0e190 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -750,7 +750,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-sample-sim + container_name: ${COMPOSE_PROJECT_NAME}-sample-sim + hostname: ${COMPOSE_PROJECT_NAME}-sample-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml sample-sim" volumes: @@ -762,6 +763,8 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - sample-sim nos3-m01-core-00: nos3-startrk-sim: From afbedd185e3dfa77caeef64348b66ceff53446fe Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 18:42:46 -0500 Subject: [PATCH 102/111] configured nos3-startrk-sim to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index daee0e190..00370c2da 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -777,7 +777,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-startrk-sim + container_name: ${COMPOSE_PROJECT_NAME}-startrk-sim + hostname: ${COMPOSE_PROJECT_NAME}-startrk-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-star-tracker-sim" volumes: @@ -789,6 +790,8 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - startrk-sim nos3-m01-core-00: nos3-thruster-sim: From 5114adddc4a5978f12a0d76f6516ea6211989dd9 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 15 Jan 2026 18:45:18 -0500 Subject: [PATCH 103/111] configured nos3-thruster-sim to be parameterizable --- deployments/compose.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 00370c2da..077697db3 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -804,7 +804,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-thruster-sim + container_name: ${COMPOSE_PROJECT_NAME}-thruster-sim + hostname: ${COMPOSE_PROJECT_NAME}-thruster-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-thruster-sim" volumes: @@ -816,6 +817,8 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - thruster-sim nos3-m01-core-00: nos3-torquer-sim: From f9b90a975179fe44122abe743f4b146b029ef04a Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 20 Jan 2026 10:35:22 -0500 Subject: [PATCH 104/111] configured nos3-torquer-sim to be parameterizable --- deployments/Taskfile.yaml | 38 +++++++++++++++++++++++++------------- deployments/compose.yaml | 7 +++++-- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 28651614b..92804100a 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -119,6 +119,7 @@ tasks: set-permissions: desc: set filesystem permissions, needed for restricted accounts cmds: + - mkdir -p ../cfg/build - find . -type f -name '*.sh' -exec chmod 777 {} \; # Make sure all scripts are world executable - find . -type f -name '*.py' -exec chmod 777 {} \; # Make sure all scripts are world executable - find . -type f -name '*.json' -exec chmod 666 {} \; # Make sure all .json files are world readable @@ -139,7 +140,7 @@ tasks: - env-create - build - config-nos3-mission - - config + - nos3:config - set-permissions cmds: - | @@ -200,14 +201,6 @@ tasks: - '{{.SCRIPTS_DIR}}/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT"' silent: true - clean: - desc: clean nos3 configuration - deps: - - down - cmds: - - cd ../ && make clean - silent: true - clean-containers: desc: clean images, cache, volumes, and networks deps: @@ -271,6 +264,8 @@ tasks: purge-containers: desc: 'WARNING: purge docker/podman images, cache, volumes, and networks' + deps: + - down cmds: - yes | {{.CONTAINER_BIN}} image prune --filter "dangling=true" || true - yes | {{.CONTAINER_BIN}} system prune -a || true @@ -323,16 +318,33 @@ tasks: sed -Ei 's/(\s*)(\).*(\)/\1\2>'${FSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml silent: true - config: + submodule-update: + desc: sync and update git submodules + cmds: + - git submodule sync; git submodule update --init --recursive; git submodule sync + silent: true + + nos3:config: desc: configure nos3 by running config.sh cmds: - cd ../ && ./scripts/cfg/config.sh silent: true - submodule-update: - desc: sync and update git submodules + nos3:clean: + desc: clean nos3 configuration + deps: + - down cmds: - - git submodule sync; git submodule update --init --recursive; git submodule sync + - cd ../ && make clean + silent: true + + nos3:uninstall: + desc: uninstall nos3 items + deps: + - down + - nos3:clean + cmds: + - cd ../ && make uninstall silent: true # K8S Kubernetes Tasks diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 077697db3..531f6ca70 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -831,8 +831,8 @@ services: condition: service_healthy nos3-fsw: condition: service_healthy - container_name: sc01-torquer-sim - hostname: trq-sim + container_name: ${COMPOSE_PROJECT_NAME}-torquer-sim + hostname: ${COMPOSE_PROJECT_NAME}-torquer-sim working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml generic-torquer-sim" volumes: @@ -844,6 +844,9 @@ services: PROJECT_NAME: ${PROJECT_NAME} networks: nos3-m01-sc01-00: + aliases: + - torquer-sim + - trq-sim nos3-m01-core-00: nos3-time: From 38a1568eb148b47535ffa5312c671416210278b9 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 20 Jan 2026 14:04:31 -0500 Subject: [PATCH 105/111] generalizing networks --- deployments/Taskfile.yaml | 19 ++++-- deployments/compose.yaml | 135 +++++++++++++++++++------------------ deployments/scripts/env.sh | 9 ++- 3 files changed, 90 insertions(+), 73 deletions(-) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 92804100a..e46069934 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -1,19 +1,26 @@ version: '3' dotenv: - - ./targets/docker/.env + - ./.env vars: - SERVICES_DIR: ./services - SCRIPTS_DIR: ./scripts - PROJECT: '{{.PROJECT | default "nos3"}}' + FLEET: '{{.PROJECT | default "nos3"}}' MISSION: '{{.MISSION | default "m01"}}' SPACECRAFT: '{{.SPACECRAFT | default "sc01"}}' - SC_ENVIRO: '{{.SC_ENVIRO | default "sim"}}' PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' + PROJECT_MISSION: '{{.PROJECT}}-{{.MISSION}}' + COMPOSE_PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' + SC_ENVIRO: '{{.SC_ENVIRO | default "sim"}}' + + YAMCS_PORT: '{{.YAMCS_PORT | default "8090"}}' + OPENMCT_PORT: '{{.OPENMCT_PORT | default "9000"}}' + FORTYTWO_PORT: '{{.FORTYTWO_PORT | default "30090"}}' + + SERVICES_DIR: ./services + SCRIPTS_DIR: ./scripts CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: ' {{.CONTAINER_BIN}} compose ' @@ -168,7 +175,7 @@ tasks: - env-create - build - config-nos3-mission - - config + - nos3:config - set-permissions cmds: - sleep 5 diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 531f6ca70..73867894f 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -56,10 +56,10 @@ services: PROJECT_NAME: ${PROJECT_NAME} HOST_PORT: ${FORTYTWO_PORT} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - fortytwo - nos3-m01-core-00: + mission-network: nos3-gsw: image: ghcr.io/haisamido/nos3-base-yamcs:dev @@ -116,12 +116,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - active-gs - yamcs - cosmos - nos3-m01-core-00: + mission-network: nos3-onair: image: nos3-base-local:dev @@ -146,11 +146,11 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - onair - sc01-onair - nos3-m01-core-00: + mission-network: nos3-fsw: image: nos3-base-local:dev @@ -209,11 +209,11 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - fsw - sc01-fsw - nos3-m01-core-00: + mission-network: nos3-nos-engine-server: image: nos3-base-local:dev @@ -244,12 +244,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: # TODO: below is needed for some reason! - sc01-nos-engine-server - nos-engine-server - nos3-m01-core-00: + mission-network: nos3-truth42sim: image: nos3-base-local:dev @@ -278,10 +278,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - truth42sim - nos3-m01-core-00: + mission-network: nos3-nos-terminal: image: nos3-base-local:dev @@ -303,10 +303,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - nos-terminal - nos3-m01-core-00: + mission-network: nos3-nos-udp-terminal: image: nos3-base-local:dev @@ -328,10 +328,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - nos-udp-terminal - nos3-m01-core-00: + mission-network: nos3-nos-sim-bridge: image: nos3-base-local:dev @@ -353,10 +353,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - nos-sim-bridge - nos3-m01-core-00: + mission-network: nos3-camsim: image: nos3-base-local:dev @@ -380,12 +380,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - camsim # TODO: needed? - sc01-camsim - nos3-m01-core-00: + mission-network: nos3-css-sim: image: nos3-base-local:dev @@ -409,11 +409,11 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - css - css-sim - nos3-m01-core-00: + mission-network: nos3-eps-sim: image: nos3-base-local:dev @@ -439,12 +439,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - eps # TODO: needed? - sc01-eps-sim - nos3-m01-core-00: + mission-network: nos3-fss-sim: image: nos3-base-local:dev @@ -468,12 +468,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - fss # TODO: needed? - sc01-fss-sim - nos3-m01-core-00: + mission-network: nos3-gps-sim: image: nos3-base-local:dev @@ -497,12 +497,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - gps # TODO: needed? - sc01-gps-sims - nos3-m01-core-00: + mission-network: nos3-imu-sim: image: nos3-base-local:dev @@ -526,12 +526,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - imu # TODO: needed? - sc01-imu-sim - nos3-m01-core-00: + mission-network: nos3-mag-sim: image: nos3-base-local:dev @@ -555,12 +555,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - mag # TODO: needed? - sc01-mag-sim - nos3-m01-core-00: + mission-network: nos3-rw-sim0: image: nos3-base-local:dev @@ -584,12 +584,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - rw0 # TODO: needed? - sc01-rw-sim0 - nos3-m01-core-00: + mission-network: nos3-rw-sim1: image: nos3-base-local:dev @@ -613,12 +613,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - rw1 # TODO: needed? - sc01-rw-sim1 - nos3-m01-core-00: + mission-network: nos3-rw-sim2: image: nos3-base-local:dev @@ -642,12 +642,12 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - rw2 # TODO: needed? - sc01-rw-sim2 - nos3-m01-core-00: + mission-network: # nos3-radio-sim: # image: ghcr.io/haisamido/nos3-base:dev @@ -672,10 +672,10 @@ services: # environment: # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} # networks: - # nos3-m01-sc01-00: + # mission-spacecraft-network: # # aliases: # # - radio-sim - # nos3-m01-core-00: + # mission-network: # nos3-cryptolib: # image: nos3-base-local:dev @@ -701,10 +701,10 @@ services: # environment: # HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} # networks: -# nos3-m01-sc01-00: +# mission-spacecraft-network: # aliases: # - cryptolib -# nos3-m01-core-00: +# mission-network: nos3-radio-sim-cryptolib: image: nos3-base-local:dev @@ -734,11 +734,11 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - radio-sim - cryptolib - nos3-m01-core-00: + mission-network: nos3-sample-sim: image: nos3-base-local:dev @@ -762,10 +762,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - sample-sim - nos3-m01-core-00: + mission-network: nos3-startrk-sim: image: nos3-base-local:dev @@ -789,10 +789,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - startrk-sim - nos3-m01-core-00: + mission-network: nos3-thruster-sim: image: nos3-base-local:dev @@ -816,10 +816,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - thruster-sim - nos3-m01-core-00: + mission-network: nos3-torquer-sim: image: nos3-base-local:dev @@ -843,11 +843,11 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - torquer-sim - trq-sim - nos3-m01-core-00: + mission-network: nos3-time: image: nos3-base-local:dev @@ -857,8 +857,8 @@ services: depends_on: nos3-nos-engine-server: condition: service_healthy - container_name: nos-time-driver - hostname: nos-time-driver + container_name: ${COMPOSE_PROJECT_NAME}-nos-time-driver + hostname: ${COMPOSE_PROJECT_NAME}-nos-time-driver working_dir: /home/nos3/builds/nos3/sims/build/bin command: "./nos3-single-simulator -f ./nos3-simulator.xml time" volumes: @@ -872,10 +872,10 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - - sc01-nos-time-driver - nos3-m01-core-00: + - ${COMPOSE_PROJECT_NAME}-nos-time-driver + mission-network: nos3-openmct: env_file: @@ -923,16 +923,19 @@ services: SPACECRAFT: ${SPACECRAFT} PROJECT_NAME: ${PROJECT_NAME} networks: - nos3-m01-sc01-00: + mission-spacecraft-network: aliases: - openmct - - sc01-openmct - nos3-m01-core-00: + mission-network: + fleet-network: networks: - nos3-m01-core-00: - external: ${EXTERNAL_NETWORK_CORE:-false} - name: nos3-m01-core - nos3-m01-sc01-00: - external: ${EXTERNAL_NETWORK_SC01:-false} - name: nos3-m01-sc01 + fleet-network: + external: ${EXTERNAL_NETWORK_FLEET:-false} + name: ${FLEET}-fleet + mission-network: + external: ${EXTERNAL_NETWORK_MISSION:-false} + name: ${PROJECT_MISSION} + mission-spacecraft-network: + external: ${EXTERNAL_NETWORK_MISSION_SPACECRAFT:-false} + name: ${COMPOSE_PROJECT_NAME} diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index 2be9e856f..aa018337f 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -25,9 +25,12 @@ NOS3_GIT_COMMIT=dev NOS3_IMAGE_URI=docker.io/ivvitc/nos3-64:20251107 NOS3_BASE_DIR=/home/nos3/.nos3 + +PROJECT=nos3 MISSION=m01 SPACECRAFT=sc01 -PROJECT_NAME=nos3-${MISSION}-${SPACECRAFT} +PROJECT_NAME=${PROJECT}-${MISSION}-${SPACECRAFT} +SC_ENVIRO=sim ######################################################################## # Avoid updating the below variables unless you know what you are doing @@ -46,10 +49,14 @@ cat << EOF # Auto-generated by ${PWD}/$(basename $0) on $(date -u +"%Y-%m-%dT%H:%M:%S%z") # +PROJECT=${PROJECT} +FLEET=${PROJECT} MISSION=${MISSION} SPACECRAFT=${SPACECRAFT} PROJECT_NAME=${PROJECT_NAME} +PROJECT_MISSION=${PROJECT}-${MISSION} COMPOSE_PROJECT_NAME=${PROJECT_NAME} +SC_ENVIRO=${SC_ENVIRO} # nos3 specific configurations NOS3_GIT_URL=${NOS3_GIT_URL} From cdb20690b005727f8a2c91ded7f97f486b03d047 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Wed, 21 Jan 2026 15:37:34 -0500 Subject: [PATCH 106/111] added env.sh template to parameterize projects and containers --- deployments/Taskfile.yaml | 98 ++++++++++++++---- deployments/compose.yaml | 10 +- deployments/scripts/env.sh | 40 ++++++-- deployments/scripts/test.sh | 32 +++++- deployments/templates/env.template | 158 +++++++++++++++++++++++++++++ 5 files changed, 302 insertions(+), 36 deletions(-) create mode 100755 deployments/templates/env.template diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index e46069934..02296afe8 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -4,23 +4,25 @@ dotenv: - ./.env vars: - PROJECT: '{{.PROJECT | default "nos3"}}' - FLEET: '{{.PROJECT | default "nos3"}}' - MISSION: '{{.MISSION | default "m01"}}' - SPACECRAFT: '{{.SPACECRAFT | default "sc01"}}' +# # PROJECT: '{{.PROJECT | default "nos3"}}' +# FLEET: '{{.PROJECT | default "nos3"}}' +# MISSION: '{{.MISSION | default "m01"}}' +# SPACECRAFT: '{{.SPACECRAFT | default "sc01"}}' - PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' - PROJECT_MISSION: '{{.PROJECT}}-{{.MISSION}}' +# # PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' +# PROJECT_MISSION: '{{.PROJECT}}-{{.MISSION}}' - COMPOSE_PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' - SC_ENVIRO: '{{.SC_ENVIRO | default "sim"}}' +# COMPOSE_PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' +# SC_ENVIRO: '{{.SC_ENVIRO | default "sim"}}' - YAMCS_PORT: '{{.YAMCS_PORT | default "8090"}}' - OPENMCT_PORT: '{{.OPENMCT_PORT | default "9000"}}' - FORTYTWO_PORT: '{{.FORTYTWO_PORT | default "30090"}}' +# YAMCS_HOST_PORT: '{{.YAMCS_HOST_PORT | default "8090"}}' +# OPENMCT_HOST_PORT: '{{.OPENMCT_HOST_PORT | default "9000"}}' +# FORTYTWO_HOST_PORT: '{{.FORTYTWO_HOST_PORT | default "30090"}}' SERVICES_DIR: ./services SCRIPTS_DIR: ./scripts + TEMPLATES_DIR: ./templates + ENVIROS_DIR: ./environments CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: ' {{.CONTAINER_BIN}} compose ' @@ -32,8 +34,11 @@ vars: DEPLOYMENT_ENVIRO: '{{.DEPLOYMENT_ENVIRO | default ""}}' HTTP_PROXY: '{{.HTTP_PROXY | default ""}}' HTTPS_PROXY: '{{.HTTPS_PROXY | default ""}}' + ENVIRO_SCRIPT: '{{.SCRIPTS_DIR}}/env.sh' ENVIRO_FILE: '{{.CONTAINER_DIR}}/.env' + ENVIRO_PATH: '{{.TEMPLATES_DIR}}/env.template' + MAVEN_HTTPS_PROXY: '-s./settings.xml' MAVEN_SETTINGS_FILE: '{{.MAVEN_SETTINGS_FILE | default ""}}' @@ -154,7 +159,7 @@ tasks: source {{.ENVIRO_FILE}} && \ export NOS3_CFG_PATH={{.NOS3_CFG_PATH}}; \ {{.CONTAINER_COMPOSE_BIN}} --env-file {{.ENVIRO_FILE}} -f {{.COMPOSE_FILE}} --project-name {{.COMPOSE_PROJECT_NAME}} up -d --force-recreate --remove-orphans - - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 + - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=${YAMCS_HOST_PORT} - sleep 5 - task sidecar - task info-services @@ -196,7 +201,7 @@ tasks: nos3-openmct \ --force-recreate \ --remove-orphans - - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=8090 + - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=${YAMCS_HOST_PORT} - task sidecar - task info-services - task check-docker-ps @@ -239,8 +244,8 @@ tasks: check-service-ready: env: - SERVICE_HOST: '{{.SERVICE_HOST | default "localhost"}}' - SERVICE_PORT: '{{.SERVICE_PORT | default "8090"}}' + SERVICE_HOST: '{{.SERVICE_HOST | default "{{.YAMCS_HOST}}"}}' + SERVICE_PORT: '{{.SERVICE_PORT | default "{{.YAMCS_HOST_PORT}}"}}' desc: wait for a service to be ready on a given port cmds: - | @@ -288,10 +293,10 @@ tasks: - | source {{.ENVIRO_FILE}} echo; echo "How to access various services:"; echo; \ - echo "open http://localhost:${YAMCS_PORT} to access yamcs/gsw"; \ - echo "open http://localhost:${FORTYTWO_PORT}/vnc.html to access fortytwo (42) and then click Connect"; \ - echo "FT: open http://localhost:${OPENMCT_PORT}/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=${SIM_TF_EPOCH_MILLISECONDS}&view=plot-single" - echo "RT: open http://localhost:${OPENMCT_PORT}/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=local&tc.timeSystem=utc&view=plot-single&tc.startDelta=60000&tc.endDelta=300000" + echo "open http://localhost:${YAMCS_HOST_PORT} to access yamcs/gsw"; \ + echo "open http://localhost:${FORTYTWO_HOST_PORT}/vnc.html to access fortytwo (42) and then click Connect"; \ + echo "FT: open http://localhost:${OPENMCT_HOST_PORT}/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=${SIM_TF_EPOCH_MILLISECONDS}&view=plot-single" + echo "RT: open http://localhost:${OPENMCT_HOST_PORT}/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=local&tc.timeSystem=utc&view=plot-single&tc.startDelta=60000&tc.endDelta=300000" echo silent: true @@ -331,6 +336,61 @@ tasks: - git submodule sync; git submodule update --init --recursive; git submodule sync silent: true + generate:env: + desc: generate env.sh file + cmds: + - | + export PROJECT={{.PROJECT}} + export FLEET={{.FLEET}} + export MISSION={{.MISSION}} + export SPACECRAFT={{.SPACECRAFT}} + + export PROJECT_MISSION={{.PROJECT}}-{{.MISSION}} + export PROJECT_NAME={{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}} + export COMPOSE_PROJECT_NAME={{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}} + + export SC_ENVIRO={{.SC_ENVIRO}} + + export FORTYTWO_HOST={{.FORTYTWO_HOST}} + export FORTYTWO_PORT={{.FORTYTWO_PORT}} + export FORTYTWO_HOST_PORT={{.FORTYTWO_HOST_PORT}} + + export YAMCS_HOST={{.YAMCS_HOST}} + export YAMCS_PORT={{.YAMCS_PORT}} + export YAMCS_HOST_PORT={{.YAMCS_HOST_PORT}} + + export OPENMCT_HOST={{.OPENMCT_HOST}} + export OPENMCT_PORT={{.OPENMCT_PORT}} + export OPENMCT_HOST_PORT={{.OPENMCT_HOST_PORT}} + + export ENV_PATH={{.ENVIROS_DIR}}/${PROJECT}/${MISSION}/${SPACECRAFT}/ + export ENV_SHELL=${PROJECT}-${MISSION}-${SPACECRAFT}.sh + + mkdir -p ${ENV_PATH} + + envsubst '\ + $PROJECT \ + $FLEET \ + $MISSION \ + $SPACECRAFT \ + $PROJECT_NAME \ + $PROJECT_MISSION \ + $COMPOSE_PROJECT_NAME \ + $SC_ENVIRO \ + $FORTYTWO_HOST \ + $FORTYTWO_PORT \ + $FORTYTWO_HOST_PORT \ + $YAMCS_HOST \ + $YAMCS_PORT \ + $YAMCS_HOST_PORT \ + $OPENMCT_HOST \ + $OPENMCT_PORT \ + $OPENMCT_HOST_PORT' \ + < {{.TEMPLATES_DIR}}/env.template \ + > ${ENV_PATH}/${ENV_SHELL} + silent: true + +# nos3 native tasks nos3:config: desc: configure nos3 by running config.sh cmds: diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 73867894f..b12359372 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -37,7 +37,7 @@ services: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/InOut/Inp_Sim.txt:/opt/nasa-itc/42/NOS3InOut/Inp_Sim.txt - ${PWD}/services/fortytwo/entrypoint.sh:/entrypoint.sh ports: - - "127.0.0.1:${FORTYTWO_PORT}:80" + - "127.0.0.1:${FORTYTWO_HOST_PORT}:${FORTYTWO_PORT}" environment: DEPLOYMENT_ENVIRO: ${DEPLOYMENT_ENVIRO} HTTPS_PROXY: ${HTTPS_PROXY} @@ -82,7 +82,7 @@ services: GIT_URL: ${YAMCS_GIT_URL} GIT_COMMIT: ${YAMCS_GIT_COMMIT} healthcheck: - test: ["CMD-SHELL", "curl http://localhost:8090/api"] + test: ["CMD-SHELL", "curl http://${YAMCS_HOST}:${YAMCS_PORT}/api"] interval: 10s timeout: 5s retries: 10 @@ -907,7 +907,7 @@ services: - "${PWD}/services/openmct/example/make-example-events.mjs:/opt/openmct/example/make-example-events.mjs" command: '/opt/openmct/entrypoint.sh' healthcheck: - test: ["CMD-SHELL", "curl http://localhost:9000/"] + test: ["CMD-SHELL", "curl http://localhost:${OPENMCT_PORT}/"] interval: 10s timeout: 5s retries: 30 @@ -916,8 +916,8 @@ services: nos3-gsw: condition: service_healthy ports: - - "127.0.0.1:9000:9000" - - "127.0.0.1:8080:8080" + - "127.0.0.1:${OPENMCT_HOST_PORT}:${OPENMCT_PORT}" + # - "127.0.0.1:8080:8080" environment: MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index aa018337f..74d25a0ba 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +set -e + # A script to generate .env file for container deployments # Simulation specific inputs @@ -26,11 +28,23 @@ NOS3_GIT_COMMIT=dev NOS3_IMAGE_URI=docker.io/ivvitc/nos3-64:20251107 NOS3_BASE_DIR=/home/nos3/.nos3 -PROJECT=nos3 -MISSION=m01 -SPACECRAFT=sc01 +PROJECT=${PROJECT:-nos3} +MISSION=${MISSION:-m01} +SPACECRAFT=${SPACECRAFT:-sc01} PROJECT_NAME=${PROJECT}-${MISSION}-${SPACECRAFT} -SC_ENVIRO=sim +SC_ENVIRO=${SC_ENVIRO:-sim} + +FORTYTWO_HOST=${FORTYTWO_HOST:-localhost} +FORTYTWO_PORT=${FORTYTWO_PORT:-80} +FORTYTWO_HOST_PORT=${FORTYTWO_HOST_PORT:-30090} + +YAMCS_HOST=${YAMCS_HOST:-localhost} +YAMCS_PORT=${YAMCS_PORT:-8090} +YAMCS_HOST_PORT=${YAMCS_HOST_PORT:-8090} + +OPENMCT_HOST=${OPENMCT_HOST:-localhost} +OPENMCT_PORT=${OPENMCT_PORT:-9000} +OPENMCT_HOST_PORT=${OPENMCT_HOST_PORT:-9000} ######################################################################## # Avoid updating the below variables unless you know what you are doing @@ -54,7 +68,7 @@ FLEET=${PROJECT} MISSION=${MISSION} SPACECRAFT=${SPACECRAFT} PROJECT_NAME=${PROJECT_NAME} -PROJECT_MISSION=${PROJECT}-${MISSION} +PROJECT_MISSION=${PROJECT_MISSION} COMPOSE_PROJECT_NAME=${PROJECT_NAME} SC_ENVIRO=${SC_ENVIRO} @@ -111,7 +125,10 @@ FORTYTWO_STARTUP_FOLDER=NOS3InOut FORTYTWO_RECOMPILE=false FORTYTWO_BASE_DIR=/opt/nasa-itc FORTYTWO_VNC_PASSWORD=$(echo -n "foobar" | shasum -a 256 | cut -d" " -f1) -FORTYTWO_PORT=30090 + +FORTYTWO_HOST=${FORTYTWO_HOST} +FORTYTWO_PORT=${FORTYTWO_PORT} +FORTYTWO_HOST_PORT=${FORTYTWO_HOST_PORT} FORTYTWO_SIM_DATE="$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%m %d %Y")" FORTYTWO_SIM_TIME="$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%H %M %S.%2N")" @@ -133,8 +150,10 @@ YAMCS_GIT_URL=https://github.com/nasa-itc/nos3_yamcs_master.git YAMCS_GIT_COMMIT=nos3-dev YAMCS_INSTANCES=nos3 -YAMCS_HOST_PORT=8090 -YAMCS_PORT=8090 + +YAMCS_HOST=${YAMCS_HOST} +YAMCS_HOST_PORT=${YAMCS_HOST_PORT} +YAMCS_PORT=${YAMCS_PORT} # openmct specific configurations OPENMCT_IMAGE_URI=docker.io/library/ubuntu:25.04 @@ -144,7 +163,10 @@ OPENMCT_GIT_COMMIT=master OPENMCT_NVM_VERSION=v0.40.1 OPENMCT_NODE_VERSION=v21.7.3 -OPENMCT_PORT=9000 + +OPENMCT_HOST=${OPENMCT_HOST} +OPENMCT_PORT=${OPENMCT_PORT} +OPENMCT_HOST_PORT=${OPENMCT_HOST_PORT} # nasa-itc specific configurations BASE_DIR=/opt/nasa-itc diff --git a/deployments/scripts/test.sh b/deployments/scripts/test.sh index 41b1071ad..e74131e54 100755 --- a/deployments/scripts/test.sh +++ b/deployments/scripts/test.sh @@ -1,13 +1,39 @@ #! /usr/bin/env bash +PROJECT=nos3 MISSIONS=(m01 m02) SC=(sc01 sc02) +FORTYTWO_HOST_PORTS=(30090 30091) +YAMCS_HOST_PORTS=(8090 8091) +OPENMCT_HOST_PORTS=(9000 9001) for MISSION in "${MISSIONS[@]}" do + for SPACECRAFT in "${SC[@]}" do - echo $MISSION $SPACECRAFT - task k8s:delete:kustomization MISSION=${MISSION} SPACECRAFT=${SPACECRAFT} K8S_REPLICAS=1 & + + for FORTYTWO_HOST_PORT in "${FORTYTWO_HOST_PORTS[@]}" + do + + for YAMCS_HOST_PORT in "${YAMCS_HOST_PORTS[@]}" + do + + for OPENMCT_HOST_PORT in "${OPENMCT_HOST_PORTS[@]}" + do + + task generate:env \ + PROJECT=${PROJECT} \ + FLEET=${PROJECT} \ + MISSION=${MISSION} \ + SPACECRAFT=${SPACECRAFT} \ + FORTYTWO_HOST_PORT=${FORTYTWO_HOST_PORT} \ + YAMCS_HOST_PORT=${YAMCS_HOST_PORT} \ + OPENMCT_HOST_PORT=${OPENMCT_HOST_PORT} + + done + done + done done -done \ No newline at end of file +done + diff --git a/deployments/templates/env.template b/deployments/templates/env.template new file mode 100755 index 000000000..29cf7a242 --- /dev/null +++ b/deployments/templates/env.template @@ -0,0 +1,158 @@ +#!/usr/bin/env bash + +set -e + +# A script to generate .env file for container deployments + +# Simulation specific inputs +NOW=$(date -u +"%Y-%m-%d %H:%M:%S UTC") +SIM_T0_DATETIME="2026-01-01 00:00:00 UTC" +SIM_T0_DATETIME="${NOW}" + +TIME_INTERVAL=3600 # 1 hour in seconds +TIME_INTERVAL_MILLISECONDS=$( expr ${TIME_INTERVAL} \* 1000 ) + +#SIM_T0_DATETIME="${NOW}" +LEAP_SECONDS=37 + +GSW_SOFTWARE=yamcs +FSW_SOFTWARE=cfs + +# This is to define either the standard path, i.e. ${PWD}/nos3, or a local definition +NOS3_CFG_PATH=.. +NOS3_MISSION_CFG_FILE=../cfg/nos3-mission.xml + +NOS3_GIT_URL=https://github.com/nasa/nos3 +NOS3_GIT_COMMIT=dev + +NOS3_IMAGE_URI=docker.io/ivvitc/nos3-64:20251107 +NOS3_BASE_DIR=/home/nos3/.nos3 + +######################################################################## +# Avoid updating the below variables unless you know what you are doing +######################################################################## + +# Time specific derivations +TIME_OFFSET_SECONDS=+30 # to simulate 30 seconds into the future from SIM_T0_DATETIME +J2000_REFERENCE_DATETIME="2000-01-01 12:00:00 UTC" +SIM_T0_EPOCH_SECONDS=$(date -ud "${SIM_T0_DATETIME} ${TIME_OFFSET_SECONDS} seconds" +"%s") +SIM_T0_EPOCH_MILLISECONDS=$( expr ${SIM_T0_EPOCH_SECONDS} \* 1000 ) +SIM_TF_EPOCH_MILLISECONDS=$( expr ${SIM_T0_EPOCH_MILLISECONDS} + ${TIME_INTERVAL} \* 1000 ) +J2000_EPOCH_SECONDS=$(date -ud "${J2000_REFERENCE_DATETIME}" +"%s") + +cat << EOF +# +# Auto-generated by ${PWD}/$(basename $0) on $(date -u +"%Y-%m-%dT%H:%M:%S%z") +# + +PROJECT=${PROJECT} +FLEET=${FLEET} +MISSION=${MISSION} +SPACECRAFT=$SPACECRAFT + +PROJECT_NAME=${PROJECT_NAME} +PROJECT_MISSION=${PROJECT_MISSION} +COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME} + +SC_ENVIRO=${SC_ENVIRO} + +# nos3 specific configurations +NOS3_GIT_URL=${NOS3_GIT_URL} +NOS3_GIT_COMMIT=${NOS3_GIT_COMMIT} +NOS3_DIR=/home/nos3/.nos3 +NOS3_USER=nos3 +NOS3_IMAGE_URI=${NOS3_IMAGE_URI} +NOS3_BASE_DIR=${NOS3_BASE_DIR} + +# This is to define either the standard path, i.e. ${PWD}/nos3, or a local definition +NOS3_CFG_PATH=${NOS3_CFG_PATH} +NOS3_MISSION_CFG_FILE=${NOS3_MISSION_CFG_FILE} + +# Simulation specific configurations +SIM_T0_DATETIME="${SIM_T0_DATETIME}" +J2000_REFERENCE_DATETIME="${J2000_REFERENCE_DATETIME}" + +TIME_OFFSET_SECONDS=${TIME_OFFSET_SECONDS} +TIME_INTERVAL=${TIME_INTERVAL} +TIME_INTERVAL_MILLISECONDS=${TIME_INTERVAL_MILLISECONDS} + +# In epoch seconds +SIM_T0_EPOCH_SECONDS=${SIM_T0_EPOCH_SECONDS} +SIM_T0_EPOCH_MILLISECONDS=${SIM_T0_EPOCH_MILLISECONDS} +SIM_TF_EPOCH_MILLISECONDS=${SIM_TF_EPOCH_MILLISECONDS} +J2000_EPOCH_SECONDS=${J2000_EPOCH_SECONDS} + +# In J2000 seconds +START_TIME=$((${SIM_T0_EPOCH_SECONDS}-${J2000_EPOCH_SECONDS})) + +# Deployment specific configurations +DEPLOYMENT_ENVIRO=${DEPLOYMENT_ENVIRO} +HEALTHCHECK_PORT=${HEALTHCHECK_PORT} + +# Proxy configurations, the proxy values come for the environment, +# which is important for the vmmoc +HTTPS_PROXY=${HTTPS_PROXY} +HTTP_PROXY=${HTTP_PROXY} +NO_PROXY=${NO_PROXY} + +# Maven/Java specific configurations +MAVEN_REPO_LOCAL=/home/nos3/.nos3/.m2 +MAVEN_HTTPS_PROXY="--settings ./settings.xml" +MAVEN_SETTINGS_FILE=${MAVEN_SETTINGS_FILE} + +# 42 specific configurations +FORTYTWO_DISPLAY=:1 +FORTYTWO_GIT_URL=https://github.com/nasa-itc/42.git +FORTYTWO_GIT_COMMIT=nos3-main +FORTYTWO_GIT_FOLDER=42 +FORTYTWO_STARTUP_FOLDER=NOS3InOut +FORTYTWO_RECOMPILE=false +FORTYTWO_BASE_DIR=/opt/nasa-itc +FORTYTWO_VNC_PASSWORD=$(echo -n "foobar" | shasum -a 256 | cut -d" " -f1) + +FORTYTWO_HOST=${FORTYTWO_HOST} +FORTYTWO_PORT=${FORTYTWO_PORT} +FORTYTWO_HOST_PORT=${FORTYTWO_HOST_PORT} + +FORTYTWO_SIM_DATE="$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%m %d %Y")" +FORTYTWO_SIM_TIME="$(date -ud "@${SIM_T0_EPOCH_SECONDS}" +"%H %M %S.%2N")" +FORTYTWO_LEAP_SECONDS=${LEAP_SECONDS} + +# gsw+fsw specific configurations +GSW_SOFTWARE=${GSW_SOFTWARE} +FSW_SOFTWARE=${FSW_SOFTWARE} + +COMPONENT_DIR=/home/nos3/builds/nos3/components + +# yamcs specific configurations +YAMCS_DATA_DIR=/home/nos3/.nos3/yamcs/target/yamcs/yamcs-data +# YAMCS_ETC_DIR=/home/nos3/.nos3/yamcs/target/yamcs/yamcs-etc + +# YAMCS_CACHE_DIR=/home/nos3/.nos3/yamcs/target/yamcs/yam + +YAMCS_GIT_URL=https://github.com/nasa-itc/nos3_yamcs_master.git +YAMCS_GIT_COMMIT=nos3-dev + +YAMCS_INSTANCES=nos3 + +YAMCS_HOST=${YAMCS_HOST} +YAMCS_HOST_PORT=${YAMCS_HOST_PORT} +YAMCS_PORT=${YAMCS_PORT} + +# openmct specific configurations +OPENMCT_IMAGE_URI=docker.io/library/ubuntu:25.04 + +OPENMCT_GIT_URL=https://github.com/akhenry/openmct-yamcs.git +OPENMCT_GIT_COMMIT=master + +OPENMCT_NVM_VERSION=v0.40.1 +OPENMCT_NODE_VERSION=v21.7.3 + +OPENMCT_HOST=${OPENMCT_HOST} +OPENMCT_PORT=${OPENMCT_PORT} +OPENMCT_HOST_PORT=${OPENMCT_HOST_PORT} + +# nasa-itc specific configurations +BASE_DIR=/opt/nasa-itc + +EOF \ No newline at end of file From 1df2c9e605287c0d12f0569c674434348967c024 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 22 Jan 2026 10:13:47 -0500 Subject: [PATCH 107/111] re-orginzation of generated env scripts --- deployments/Taskfile.yaml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 02296afe8..9d6f33ad0 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -22,7 +22,8 @@ vars: SERVICES_DIR: ./services SCRIPTS_DIR: ./scripts TEMPLATES_DIR: ./templates - ENVIROS_DIR: ./environments + BUILD_DIR: ./build + ENVIROS_DIR: '{{.BUILD_DIR}}/' CONTAINER_BIN: docker CONTAINER_COMPOSE_BIN: ' {{.CONTAINER_BIN}} compose ' @@ -37,7 +38,7 @@ vars: ENVIRO_SCRIPT: '{{.SCRIPTS_DIR}}/env.sh' ENVIRO_FILE: '{{.CONTAINER_DIR}}/.env' - ENVIRO_PATH: '{{.TEMPLATES_DIR}}/env.template' + ENVIRO_TEMPLATE: '{{.TEMPLATES_DIR}}/env.template' MAVEN_HTTPS_PROXY: '-s./settings.xml' MAVEN_SETTINGS_FILE: '{{.MAVEN_SETTINGS_FILE | default ""}}' @@ -363,7 +364,7 @@ tasks: export OPENMCT_PORT={{.OPENMCT_PORT}} export OPENMCT_HOST_PORT={{.OPENMCT_HOST_PORT}} - export ENV_PATH={{.ENVIROS_DIR}}/${PROJECT}/${MISSION}/${SPACECRAFT}/ + export ENV_PATH={{.BUILD_DIR}}/docker/${PROJECT}/${MISSION}/${SPACECRAFT}/ export ENV_SHELL=${PROJECT}-${MISSION}-${SPACECRAFT}.sh mkdir -p ${ENV_PATH} @@ -386,8 +387,8 @@ tasks: $OPENMCT_HOST \ $OPENMCT_PORT \ $OPENMCT_HOST_PORT' \ - < {{.TEMPLATES_DIR}}/env.template \ - > ${ENV_PATH}/${ENV_SHELL} + < {{.ENVIRO_TEMPLATE}} > ${ENV_PATH}/${ENV_SHELL} && \ + chmod +x ${ENV_PATH}/${ENV_SHELL} silent: true # nos3 native tasks From 781527ae02d8c3434ca992e9616a3a8b499e4018 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 22 Jan 2026 12:01:15 -0500 Subject: [PATCH 108/111] config changes in prep for generalizations --- deployments/Taskfile.yaml | 67 ++++++++-------- deployments/scripts/env.sh | 1 + deployments/scripts/nos3.yaml | 143 ++++++++++++++++++++++++---------- deployments/scripts/test.sh | 51 ++++++------ 4 files changed, 163 insertions(+), 99 deletions(-) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 9d6f33ad0..07c695b17 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -4,20 +4,20 @@ dotenv: - ./.env vars: -# # PROJECT: '{{.PROJECT | default "nos3"}}' -# FLEET: '{{.PROJECT | default "nos3"}}' -# MISSION: '{{.MISSION | default "m01"}}' -# SPACECRAFT: '{{.SPACECRAFT | default "sc01"}}' + PROJECT: '{{.PROJECT | default "nos3"}}' + FLEET: '{{.PROJECT | default "nos3"}}' + MISSION: '{{.MISSION | default "m01"}}' + SPACECRAFT: '{{.SPACECRAFT | default "sc01"}}' -# # PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' -# PROJECT_MISSION: '{{.PROJECT}}-{{.MISSION}}' + PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' + PROJECT_MISSION: '{{.PROJECT}}-{{.MISSION}}' -# COMPOSE_PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' -# SC_ENVIRO: '{{.SC_ENVIRO | default "sim"}}' + COMPOSE_PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' + SC_ENVIRO: '{{.SC_ENVIRO | default "sim"}}' -# YAMCS_HOST_PORT: '{{.YAMCS_HOST_PORT | default "8090"}}' -# OPENMCT_HOST_PORT: '{{.OPENMCT_HOST_PORT | default "9000"}}' -# FORTYTWO_HOST_PORT: '{{.FORTYTWO_HOST_PORT | default "30090"}}' + YAMCS_HOST_PORT: '{{.YAMCS_HOST_PORT | default "8090"}}' + OPENMCT_HOST_PORT: '{{.OPENMCT_HOST_PORT | default "9000"}}' + FORTYTWO_HOST_PORT: '{{.FORTYTWO_HOST_PORT | default "30090"}}' SERVICES_DIR: ./services SCRIPTS_DIR: ./scripts @@ -306,6 +306,8 @@ tasks: cmds: - | {{.ENVIRO_SCRIPT}} > {{.ENVIRO_FILE}} + # cmds: + # - task generate:env silent: true install-lazydocker: @@ -369,26 +371,29 @@ tasks: mkdir -p ${ENV_PATH} - envsubst '\ - $PROJECT \ - $FLEET \ - $MISSION \ - $SPACECRAFT \ - $PROJECT_NAME \ - $PROJECT_MISSION \ - $COMPOSE_PROJECT_NAME \ - $SC_ENVIRO \ - $FORTYTWO_HOST \ - $FORTYTWO_PORT \ - $FORTYTWO_HOST_PORT \ - $YAMCS_HOST \ - $YAMCS_PORT \ - $YAMCS_HOST_PORT \ - $OPENMCT_HOST \ - $OPENMCT_PORT \ - $OPENMCT_HOST_PORT' \ - < {{.ENVIRO_TEMPLATE}} > ${ENV_PATH}/${ENV_SHELL} && \ - chmod +x ${ENV_PATH}/${ENV_SHELL} + ./scripts/env.sh > ${ENV_PATH}/${ENV_SHELL}.env + cp ${ENV_PATH}/${ENV_SHELL}.env .env + + # envsubst '\ + # $PROJECT \ + # $FLEET \ + # $MISSION \ + # $SPACECRAFT \ + # $PROJECT_NAME \ + # $PROJECT_MISSION \ + # $COMPOSE_PROJECT_NAME \ + # $SC_ENVIRO \ + # $FORTYTWO_HOST \ + # $FORTYTWO_PORT \ + # $FORTYTWO_HOST_PORT \ + # $YAMCS_HOST \ + # $YAMCS_PORT \ + # $YAMCS_HOST_PORT \ + # $OPENMCT_HOST \ + # $OPENMCT_PORT \ + # $OPENMCT_HOST_PORT' \ + # < {{.ENVIRO_TEMPLATE}} > ${ENV_PATH}/${ENV_SHELL} && \ + # chmod +x ${ENV_PATH}/${ENV_SHELL} silent: true # nos3 native tasks diff --git a/deployments/scripts/env.sh b/deployments/scripts/env.sh index 74d25a0ba..57feeb579 100755 --- a/deployments/scripts/env.sh +++ b/deployments/scripts/env.sh @@ -32,6 +32,7 @@ PROJECT=${PROJECT:-nos3} MISSION=${MISSION:-m01} SPACECRAFT=${SPACECRAFT:-sc01} PROJECT_NAME=${PROJECT}-${MISSION}-${SPACECRAFT} +PROJECT_MISSION=${PROJECT}-${MISSION} SC_ENVIRO=${SC_ENVIRO:-sim} FORTYTWO_HOST=${FORTYTWO_HOST:-localhost} diff --git a/deployments/scripts/nos3.yaml b/deployments/scripts/nos3.yaml index 1cfed23ef..f9fd9645f 100644 --- a/deployments/scripts/nos3.yaml +++ b/deployments/scripts/nos3.yaml @@ -156,46 +156,103 @@ defaults: # container: # << : *container -missions: - - m01: - enabled: true - spacecraft: - - sc1: - enabled: true - components: - fortytwo: - name: fsw - replicas: 1 - container: - << : *container - fsw: - name: fsw - replicas: 1 - container: - << : *container - nos-engine-server: - name: nos-engine-server - replicas: 1 - container: - << : *container - time: - name: time - replicas: 1 - container: - << : *container - gps: - name: gps - replicas: 1 - container: - << : *container - - m02: - enabled: false - spacecraft: - - sc1: - enabled: true - components: - << : *hw_components - - sc2: - enabled: false - components: - << : *hw_components \ No newline at end of file +projects: + nos3: + missions: + m01: + enabled: true + spacecraft: + sc01: + enabled: true + components: + fortytwo: + port: 30090 + yamcs: + port: 8090 + openmct: + port: 9000 + sc02: + enabled: false + components: + fortytwo: + port: 30091 + yamcs: + port: 8091 + openmct: + port: 9001 + sc03: + enabled: false + components: + fortytwo: + port: 30092 + yamcs: + port: 8092 + openmct: + port: 9002 + m02: + enabled: false + spacecraft: + sc01: + enabled: true + components: + fortytwo: + port: 30092 + yamcs: + port: 8092 + openmct: + port: 9002 + sc02: + enabled: false + components: + fortytwo: + port: 30093 + yamcs: + port: 8093 + openmct: + port: 9003 + +# projects: +# nos3: +# missions: +# - m01: +# enabled: true +# spacecraft: +# - sc01: +# enabled: true +# components: +# fortytwo: +# name: fsw +# replicas: 1 +# container: +# << : *container +# fsw: +# name: fsw +# replicas: 1 +# container: +# << : *container +# nos-engine-server: +# name: nos-engine-server +# replicas: 1 +# container: +# << : *container +# time: +# name: time +# replicas: 1 +# container: +# << : *container +# gps: +# name: gps +# replicas: 1 +# container: +# << : *container +# - m02: +# enabled: false +# spacecraft: +# - sc01: +# enabled: true +# components: +# << : *hw_components +# - sc02: +# enabled: false +# components: +# << : *hw_components \ No newline at end of file diff --git a/deployments/scripts/test.sh b/deployments/scripts/test.sh index e74131e54..3e9e12638 100755 --- a/deployments/scripts/test.sh +++ b/deployments/scripts/test.sh @@ -1,39 +1,40 @@ #! /usr/bin/env bash -PROJECT=nos3 -MISSIONS=(m01 m02) -SC=(sc01 sc02) -FORTYTWO_HOST_PORTS=(30090 30091) -YAMCS_HOST_PORTS=(8090 8091) -OPENMCT_HOST_PORTS=(9000 9001) - -for MISSION in "${MISSIONS[@]}" +set -e + +config=$(cat ./scripts/nos3.yaml) + +PROJECTS=$(echo "$config" | yq ' .projects | select(.) | keys []') + +for PROJECT in "${PROJECTS[@]}" do + MISSIONS=$(echo "$config" | yq " .projects.${PROJECT}.missions | keys []") - for SPACECRAFT in "${SC[@]}" + for MISSION in ${MISSIONS[@]} do + SPACECRAFT=$(echo "$config" | yq ".projects.${PROJECT}.missions.${MISSION}.spacecraft | keys []") - for FORTYTWO_HOST_PORT in "${FORTYTWO_HOST_PORTS[@]}" + for SC in ${SPACECRAFT[@]} do - for YAMCS_HOST_PORT in "${YAMCS_HOST_PORTS[@]}" - do + FORTYTWO_HOST_PORT=$(echo "$config" | yq " .projects.${PROJECT}.missions.${MISSION}.spacecraft.${SC}.components.fortytwo.port // \"default\"") + YAMCS_HOST_PORT=$(echo "$config" | yq " .projects.${PROJECT}.missions.${MISSION}.spacecraft.${SC}.components.yamcs.port // \"default\"") + OPENMCT_HOST_PORT=$(echo "$config" | yq " .projects.${PROJECT}.missions.${MISSION}.spacecraft.${SC}.components.openmct.port // \"default\"") - for OPENMCT_HOST_PORT in "${OPENMCT_HOST_PORTS[@]}" - do + echo "Generating .env for Project: ${PROJECT}, Mission: ${MISSION}, Spacecraft: ${SC}" + task generate:env \ + PROJECT=${PROJECT} \ + FLEET=${PROJECT} \ + MISSION=${MISSION} \ + SPACECRAFT=${SC} \ + FORTYTWO_HOST_PORT=${FORTYTWO_HOST_PORT} \ + YAMCS_HOST_PORT=${YAMCS_HOST_PORT} \ + OPENMCT_HOST_PORT=${OPENMCT_HOST_PORT} - task generate:env \ - PROJECT=${PROJECT} \ - FLEET=${PROJECT} \ - MISSION=${MISSION} \ - SPACECRAFT=${SPACECRAFT} \ - FORTYTWO_HOST_PORT=${FORTYTWO_HOST_PORT} \ - YAMCS_HOST_PORT=${YAMCS_HOST_PORT} \ - OPENMCT_HOST_PORT=${OPENMCT_HOST_PORT} - - done - done done + done + done +echo "Environment files generated successfully." \ No newline at end of file From 4bc2bd33da4e30b648220469c20ee8878587007d Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Thu, 22 Jan 2026 12:28:10 -0500 Subject: [PATCH 109/111] removed unnecessary exposed ports --- deployments/compose.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/deployments/compose.yaml b/deployments/compose.yaml index b12359372..519387c0c 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -234,9 +234,6 @@ services: command: "/usr/bin/nos_engine_server_standalone -f ./nos_engine_server_config.json" volumes: - ${PWD}/${NOS3_CFG_PATH}/cfg/build/sims/nos_engine_server_config.json:/home/nos3/builds/nos3/sims/build/bin/nos_engine_server_config.json - ports: - - "127.0.0.1:12000:12000" - - "127.0.0.1:12001:12001" tty: true environment: HEALTHCHECK_PORT: ${HEALTHCHECK_PORT} From e2556f9fe67e5889782abdcc6f9f8a26ff81cbc9 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Fri, 23 Jan 2026 12:13:30 -0500 Subject: [PATCH 110/111] mostly successful in running 4 different docker projects (openmct wip) --- deployments/Taskfile.yaml | 8 ++++---- deployments/scripts/test.sh | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 07c695b17..17ef66b21 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -159,8 +159,8 @@ tasks: - | source {{.ENVIRO_FILE}} && \ export NOS3_CFG_PATH={{.NOS3_CFG_PATH}}; \ - {{.CONTAINER_COMPOSE_BIN}} --env-file {{.ENVIRO_FILE}} -f {{.COMPOSE_FILE}} --project-name {{.COMPOSE_PROJECT_NAME}} up -d --force-recreate --remove-orphans - - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=${YAMCS_HOST_PORT} + {{.CONTAINER_COMPOSE_BIN}} --env-file {{.ENVIRO_FILE}} -f {{.COMPOSE_FILE}} --project-name {{.COMPOSE_PROJECT_NAME}} up -d --remove-orphans + - task check-service-ready SERVICE_HOST={{.YAMCS_HOST}} SERVICE_PORT={{.YAMCS_HOST_PORT}} - sleep 5 - task sidecar - task info-services @@ -202,7 +202,7 @@ tasks: nos3-openmct \ --force-recreate \ --remove-orphans - - task check-service-ready SERVICE_HOST=localhost SERVICE_PORT=${YAMCS_HOST_PORT} + - task check-service-ready SERVICE_HOST=${YAMCS_HOST} SERVICE_PORT=${YAMCS_HOST_PORT} - task sidecar - task info-services - task check-docker-ps @@ -211,7 +211,7 @@ tasks: sidecar: desc: Run sidecar to enable output cmds: - - '{{.SCRIPTS_DIR}}/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT"' + - '{{.SCRIPTS_DIR}}/sidecar.sh -s {{.YAMCS_HOST}} -p {{.YAMCS_HOST_PORT}} -c "/CFS/CMD/TO_ENABLE_OUTPUT"' silent: true clean-containers: diff --git a/deployments/scripts/test.sh b/deployments/scripts/test.sh index 3e9e12638..e99cdb3f8 100755 --- a/deployments/scripts/test.sh +++ b/deployments/scripts/test.sh @@ -37,4 +37,17 @@ do done -echo "Environment files generated successfully." \ No newline at end of file +echo "Environment files generated successfully." + + +task generate:env PROJECT=nos3 FLEET=nos3 MISSION=m01 SPACECRAFT=sc01 FORTYTWO_HOST_PORT=30090 YAMCS_HOST_PORT=8090 OPENMCT_HOST_PORT=9000 && \ + task up + +task generate:env PROJECT=nos3 FLEET=nos3 MISSION=m01 SPACECRAFT=sc02 FORTYTWO_HOST_PORT=30091 YAMCS_HOST_PORT=8091 OPENMCT_HOST_PORT=9001 && \ + task up + +task generate:env PROJECT=nos3 FLEET=nos3 MISSION=m01 SPACECRAFT=sc03 FORTYTWO_HOST_PORT=30092 YAMCS_HOST_PORT=8092 OPENMCT_HOST_PORT=9002 && \ + task up + +task generate:env PROJECT=ssmo FLEET=ssmo MISSION=m02 SPACECRAFT=sc01 FORTYTWO_HOST_PORT=30093 YAMCS_HOST_PORT=8093 OPENMCT_HOST_PORT=9003 && \ + task up From a6a68fa0420bf3570b6f7db00e61f92b10e59886 Mon Sep 17 00:00:00 2001 From: Haisam Ido Date: Tue, 3 Feb 2026 15:20:35 -0500 Subject: [PATCH 111/111] minor updates --- deployments/Makefile | 165 +----------------------------- deployments/Taskfile.yaml | 183 ++++++++++++++++++++++------------ deployments/compose.yaml | 1 - deployments/scripts/nos3.yaml | 9 -- deployments/scripts/test.sh | 46 +++++++-- 5 files changed, 159 insertions(+), 245 deletions(-) diff --git a/deployments/Makefile b/deployments/Makefile index 1a96cf6cf..124e9a9e9 100644 --- a/deployments/Makefile +++ b/deployments/Makefile @@ -3,160 +3,7 @@ SHELL=bash -# Containerization Parameters -export TARGETS_DIR=./targets -export SERVICES_DIR=./services -export SCRIPTS_DIR=./scripts - -export CONTAINER_BIN=docker -export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN} compose - -export CONTAINER_DIR=${TARGETS_DIR}/docker -export COMPOSE_FILE=${CONTAINER_DIR}/compose.yaml - -export ENVIRO_SCRIPT="${SCRIPTS_DIR}/env.sh" -export ENVIRO_FILE="${CONTAINER_DIR}/.env" - -ifeq (${CONTAINER_BIN},podman) -export CONTAINER_COMPOSE_BIN=${CONTAINER_BIN}-compose -endif - -# To set default settings.xml and essentially empty for mvn, unless in vmmoc -export MAVEN_HTTPS_PROXY=-s./settings.xml - -ifdef (PROJECT_NAME) -export PROJECT_NAME=${PROJECT_NAME} -else -export PROJECT_NAME=nos3-m01-sc01 -endif - -ifdef (COMPOSE_PROJECT_NAME) -export COMPOSE_PROJECT_NAME=${PROJECT_NAME} -else -export COMPOSE_PROJECT_NAME=nos3-m01-sc01 -endif - -ifdef (NOS3_CFG_PATH) -export NOS3_CFG_PATH=${NOS3_CFG_PATH} -else -export NOS3_CFG_PATH=.. -endif - -# Check if .env file exists and include it -ifneq (,$(wildcard ${ENVIRO_FILE})) -include ${ENVIRO_FILE} -export $(shell sed 's/=.*//' ${ENVIRO_FILE}) # Export all variables defined in .env -else -$(warning WARNING: ${ENVIRO_FILE} file not found. Please run 'make env-create' to create it.) -endif - -build-fortytwo: | env-create set-permissions ## Build fortytwo (42) - source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo - -build-yamcs: | env-create setup-maven set-permissions ## Build yamcs - source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-gsw - -build-openmct: | env-create set-permissions ## Build openmct - source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-openmct - -build-fsw: | env-create set-permissions ## Build nos3-base-local (fsw) - source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fsw - -build: | env-create set-permissions setup-maven ## Build all containers - source ${ENVIRO_FILE} && \ - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} build --pull nos3-fortytwo nos3-gsw nos3-openmct nos3-fsw - -set-permissions: ## set filesystem permissions, needed for restricted accounts - find . -name '*.sh' -exec chmod 777 {} \; # Make sure all scripts are world executable - find . -name '*.py' -exec chmod 777 {} \; # Make sure all scripts are world executable - find . -name '*.json' -exec chmod 666 {} \; # Make sure all .json files are world readable - find . -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable - find . -type f -name '*.c' -exec chmod 555 {} \; # Make sure all .xml files are world readable - find . -type f -name '*.h' -exec chmod 555 {} \; # Make sure all .xml files are world readable - find ../cfg/build -name '*.sh' -exec chmod 777 {} \; # Make sure all scripts are world executable - find ../cfg/build -name '*.py' -exec chmod 777 {} \; # Make sure all scripts are world executable - find ../cfg/build -name '*.json' -exec chmod 666 {} \; # Make sure all .json files are world readable - find ../cfg/build -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable - find ${HOME}/.nos3/ -name '*.xml' -exec chmod 666 {} \; # Make sure all .xml files are world readable - -up: | down env-create build config-nos3-mission config set-permissions ## Bring up nos3 in detached state - sleep 5 - @source ${ENVIRO_FILE} && \ - export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ - ${CONTAINER_COMPOSE_BIN} --env-file ${ENVIRO_FILE} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d --remove-orphans - sleep 15 - @$(MAKE) --silent sidecar - @$(MAKE) --silent info-services - @${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true - -down: ## Bring down nos3 - ${CONTAINER_COMPOSE_BIN} -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} down --remove-orphans || true - -up-minimum: | down env-create build config-nos3-mission config set-permissions ## Bring up nos3 in detached state - @sleep 5 - @source ${ENVIRO_FILE} && \ - export NOS3_CFG_PATH=${NOS3_CFG_PATH}; \ - ${CONTAINER_COMPOSE_BIN} \ - --env-file ${ENVIRO_FILE} \ - -f ${COMPOSE_FILE} --project-name ${COMPOSE_PROJECT_NAME} up -d \ - nos3-fortytwo \ - nos3-nos-engine-server \ - nos3-fsw \ - nos3-gps-sim \ - nos3-time \ - nos3-radio-sim-cryptolib \ - nos3-truth42sim \ - nos3-gsw \ - nos3-openmct \ - --remove-orphans - sleep 15 - @$(MAKE) --silent sidecar - @$(MAKE) --silent info-services - @${CONTAINER_BIN} ps -a | egrep -i 'exited|unhealthy|created|error' | grep -v STATUS || true - -sidecar: ## Run sidecar to enable output - @${SCRIPTS_DIR}/sidecar.sh -c "/CFS/CMD/TO_ENABLE_OUTPUT" - -clean: | down ## clean nos3 configuration - @cd ../ && make clean - -clean-containers: | down ## clean images, cache, volumes, and networks - yes | ${CONTAINER_BIN} image prune --filter "dangling=true" - yes | ${CONTAINER_BIN} system prune -a - yes | ${CONTAINER_BIN} volume prune - yes | ${CONTAINER_BIN} network prune - -setup-maven: ## Setup maven settings.xml with proxy info-services - echo "" > $${SERVICES_DIR}/yamcs/settings.xml - if [ "$${DEPLOYMENT_ENVIRO}" == "vmmoc" ]; then \ - cp -f $${MAVEN_SETTINGS_FILE} $${HOME}/.nos3/yamcs/ || true; \ - cp -f $${MAVEN_SETTINGS_FILE} $${SERVICES_DIR}/yamcs/ || true; \ - fi - -purge-containers: ## WARNING: purge docker/podman images, cache, volumes, and networks - @$(MAKE) down || true - @yes | ${CONTAINER_BIN} image prune --filter "dangling=true" || true - @yes | ${CONTAINER_BIN} system prune -a || true - @yes | ${CONTAINER_BIN} volume prune || true - @yes | ${CONTAINER_BIN} network prune || true - @echo - -info-services: | env-create ## info on accessing various services - @source ${ENVIRO_FILE} && \ - echo; echo "How to access various services:"; echo; \ - echo "open http://localhost:8090 to access yamcs/gsw"; \ - echo "open http://localhost:30090/vnc.html to access fortytwo (42) and then click Connect"; \ - echo "open http://localhost:9000/#/browse/taxonomy:spacecraft/taxonomy:~SIM_42_TRUTH/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA/taxonomy:~SIM_42_TRUTH~SIM_42_TRUTH_DATA~BVB_2?tc.mode=fixed&tc.timeSystem=utc&tc.startBound=$${SIM_T0_EPOCH_MILLISECONDS}&tc.endBound=$${SIM_TF_EPOCH_MILLISECONDS}&view=plot-single"; \ - echo - -env-create: ## Create .env file from env.sh script - ${ENVIRO_SCRIPT} > ${ENVIRO_FILE} - -install-taskfile: ## Install Taskfile CLI tool +install-taskfile: ## USE TASK instead of Makefile: Install Taskfile CLI tool @sh -c "$$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin && \ chmod +x ~/.local/bin/task && export PATH="${HOME}/.local/bin:${PATH}" @echo; echo "add: ${HOME}/.local/bin:${PATH} to your ~/.bashrc or ~/.zshrc"; echo @@ -166,16 +13,6 @@ install-lazydocker: ## Install lazydocker CLI tool (to view logs, etc) @echo; echo "don't forget to add: ${HOME}/.local/bin:${PATH} to your ~/.bashrc or ~/.zshrc"; echo @echo "watch a Lazydocker demo here: https://www.youtube.com/watch?v=NICqQPxwJWw"; echo -config-nos3-mission: | env-create ## configure nos3-mission.xml to set start-time - @source ${ENVIRO_FILE} && \ - sed -Ei 's/(\s*)(\).*(\)/\1\2>'$${START_TIME}'<\/\3/g' ../cfg/nos3-mission.xml && \ - sed -Ei 's/(\s*)(\).*(\)/\1\2>'$${GSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml && \ - sed -Ei 's/(\s*)(\).*(\)/\1\2>'$${FSW_SOFTWARE}'<\/\3/g' ../cfg/nos3-mission.xml - -config: ## configure nos3 by running config.sh - @cd ../ && ./scripts/cfg/config.sh - -#--- RESET = \033[0m PURPLE = \033[0;35m GREEN = \033[0;32m diff --git a/deployments/Taskfile.yaml b/deployments/Taskfile.yaml index 17ef66b21..7758a24da 100644 --- a/deployments/Taskfile.yaml +++ b/deployments/Taskfile.yaml @@ -70,10 +70,65 @@ tasks: - task --list-all silent: true + test: + env: + PROJECT: '{{.PROJECT}}' + FLEET: '{{.FLEET}}' + MISSION: '{{.MISSION}}' + SPACECRAFT: '{{.SPACECRAFT}}' + PROJECT_MISSION: '{{.PROJECT}}-{{.MISSION}}' + PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' + COMPOSE_PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' + + SC_ENVIRO: '{{.SC_ENVIRO}}' + + FORTYTWO_HOST: '{{.FORTYTWO_HOST}}' + FORTYTWO_PORT: '{{.FORTYTWO_PORT}}' + FORTYTWO_HOST_PORT: '{{.FORTYTWO_HOST_PORT}}' + + YAMCS_HOST: '{{.YAMCS_HOST}}' + YAMCS_PORT: '{{.YAMCS_PORT}}' + YAMCS_HOST_PORT: '{{.YAMCS_HOST_PORT}}' + + OPENMCT_HOST: '{{.OPENMCT_HOST}}' + OPENMCT_PORT: '{{.OPENMCT_PORT}}' + OPENMCT_HOST_PORT: '{{.OPENMCT_HOST_PORT}}' + + ENV_PATH: '{{.BUILD_DIR}}/docker/{{.PROJECT}}/{{.MISSION}}/{{.SPACECRAFT}}/' + ENV_SHELL: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}.sh' + + cmds: + - echo "project = ${PROJECT}" + - echo "fleet = ${FLEET}" + - echo "mission = ${MISSION}" + - echo "spacecraft = ${SPACECRAFT}" + - echo "compose project name = ${COMPOSE_PROJECT_NAME}"; echo + - echo "spacecraft enviro = ${SC_ENVIRO}"; echo + - echo "fortytwo host = ${FORTYTWO_HOST}" + - echo "fortytwo port = ${FORTYTWO_PORT}" + - echo "fortytwo host port = ${FORTYTWO_HOST_PORT}"; echo + - echo "yamcs host = ${YAMCS_HOST}" + - echo "yamcs port = ${YAMCS_PORT}" + - echo "yamcs host port = ${YAMCS_HOST_PORT}";echo + - echo "openmct host = ${OPENMCT_HOST}" + - echo "openmct port = ${OPENMCT_PORT}" + - echo "openmct host port = ${OPENMCT_HOST_PORT}";echo + - echo "env path = ${ENV_PATH}" + - echo "env shell = ${ENV_SHELL}"; echo + - | + mkdir -p ${ENV_PATH} + + {{.ENVIRO_SCRIPT}} > ${ENV_PATH}/${ENV_SHELL}.env + + cp ${ENV_PATH}/${ENV_SHELL}.env .env + - task: up + + silent: true + build-fortytwo: desc: Build fortytwo (42) deps: - - env-create + - env:create - set-permissions cmds: - | @@ -84,7 +139,7 @@ tasks: build-yamcs: desc: Build yamcs deps: - - env-create + - env:create - setup-maven - set-permissions cmds: @@ -96,7 +151,7 @@ tasks: build-openmct: desc: Build openmct deps: - - env-create + - env:create - set-permissions cmds: - '{{.CONTAINER_BIN}} pull docker.io/library/ubuntu:25.04' @@ -108,7 +163,7 @@ tasks: build-fsw: desc: Build nos3-base-local (fsw) deps: - - env-create + - env:create - set-permissions cmds: - | @@ -119,7 +174,7 @@ tasks: build: desc: Build all containers deps: - - env-create + - env:create - set-permissions - setup-maven cmds: @@ -148,14 +203,39 @@ tasks: up: desc: Bring up nos3 in detached state - deps: - - submodule-update - - env-create - - build - - config-nos3-mission - - nos3:config - - set-permissions - cmds: + # env: + # PROJECT: '{{.PROJECT}}' + # FLEET: '{{.FLEET}}' + # MISSION: '{{.MISSION}}' + # SPACECRAFT: '{{.SPACECRAFT}}' + # PROJECT_MISSION: '{{.PROJECT}}-{{.MISSION}}' + # PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' + # COMPOSE_PROJECT_NAME: '{{.PROJECT}}-{{.MISSION}}-{{.SPACECRAFT}}' + + # SC_ENVIRO: '{{.SC_ENVIRO}}' + + # FORTYTWO_HOST: '{{.FORTYTWO_HOST}}' + # FORTYTWO_PORT: '{{.FORTYTWO_PORT}}' + # FORTYTWO_HOST_PORT: '{{.FORTYTWO_HOST_PORT}}' + + # YAMCS_HOST: '{{.YAMCS_HOST}}' + # YAMCS_PORT: '{{.YAMCS_PORT}}' + # YAMCS_HOST_PORT: '{{.YAMCS_HOST_PORT}}' + + # OPENMCT_HOST: '{{.OPENMCT_HOST}}' + # OPENMCT_PORT: '{{.OPENMCT_PORT}}' + # OPENMCT_HOST_PORT: '{{.OPENMCT_HOST_PORT}}' + + # ENV_PATH: '{{.BUILD_DIR}}/docker/${PROJECT}/${MISSION}/${SPACECRAFT}/' + # ENV_SHELL: '${PROJECT}-${MISSION}-${SPACECRAFT}.sh' + + cmds: + - task: submodule-update + - task: env:generate + - task: build + - task: config-nos3-mission + - task: nos3:config + - task: set-permissions - | source {{.ENVIRO_FILE}} && \ export NOS3_CFG_PATH={{.NOS3_CFG_PATH}}; \ @@ -178,7 +258,7 @@ tasks: desc: Bring up nos3 (minimum) in detached state deps: - down - - env-create + - env:create - build - config-nos3-mission - nos3:config @@ -290,7 +370,7 @@ tasks: info-services: desc: info on accessing various services cmds: - - task env-create + - task env:create - | source {{.ENVIRO_FILE}} echo; echo "How to access various services:"; echo; \ @@ -301,13 +381,13 @@ tasks: echo silent: true - env-create: + env:create: desc: Create .env file from env.sh script - cmds: - - | - {{.ENVIRO_SCRIPT}} > {{.ENVIRO_FILE}} # cmds: - # - task generate:env + # - | + # {{.ENVIRO_SCRIPT}} > {{.ENVIRO_FILE}} + cmds: + - task env:generate silent: true install-lazydocker: @@ -324,7 +404,7 @@ tasks: config-nos3-mission: desc: configure nos3-mission.xml to set start-time deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -339,7 +419,7 @@ tasks: - git submodule sync; git submodule update --init --recursive; git submodule sync silent: true - generate:env: + env:generate: desc: generate env.sh file cmds: - | @@ -371,29 +451,10 @@ tasks: mkdir -p ${ENV_PATH} - ./scripts/env.sh > ${ENV_PATH}/${ENV_SHELL}.env + {{.ENVIRO_SCRIPT}} > ${ENV_PATH}/${ENV_SHELL}.env + cp ${ENV_PATH}/${ENV_SHELL}.env .env - # envsubst '\ - # $PROJECT \ - # $FLEET \ - # $MISSION \ - # $SPACECRAFT \ - # $PROJECT_NAME \ - # $PROJECT_MISSION \ - # $COMPOSE_PROJECT_NAME \ - # $SC_ENVIRO \ - # $FORTYTWO_HOST \ - # $FORTYTWO_PORT \ - # $FORTYTWO_HOST_PORT \ - # $YAMCS_HOST \ - # $YAMCS_PORT \ - # $YAMCS_HOST_PORT \ - # $OPENMCT_HOST \ - # $OPENMCT_PORT \ - # $OPENMCT_HOST_PORT' \ - # < {{.ENVIRO_TEMPLATE}} > ${ENV_PATH}/${ENV_SHELL} && \ - # chmod +x ${ENV_PATH}/${ENV_SHELL} silent: true # nos3 native tasks @@ -424,7 +485,7 @@ tasks: k8s:create:namespace: desc: Create the Kubernetes namespace deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -463,7 +524,7 @@ tasks: k8s:convert:kompose: desc: convert docker-compose to kubernetes manifests using kompose deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -474,7 +535,7 @@ tasks: k8s:convert:kompose:helm: desc: convert docker-compose to kubernetes manifests using kompose deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -485,7 +546,7 @@ tasks: k8s:delete:namespace: desc: delete nos3 kubernetes namespace deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -495,7 +556,7 @@ tasks: k8s:apply:deployment: desc: apply nos3 kubernetes deployment(s) deps: - - env-create + - env:create - k8s:create:namespace cmds: - | @@ -506,7 +567,7 @@ tasks: k8s:delete:deployment: desc: delete nos3 kubernetes deployment(s) deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -515,7 +576,7 @@ tasks: k8s:get:configmaps: desc: get nos3 kubernetes configmaps deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -525,7 +586,7 @@ tasks: k8s:get:configmap: desc: get a specific kubernetes configmaps defined in K8S_CONFIGMAP_NAME deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -543,7 +604,7 @@ tasks: k8s:get:pod-name: desc: get the pod name for nos3 kubernetes deployment deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -558,7 +619,7 @@ tasks: k8s:port-forward: desc: Port forward to access services locally deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -599,7 +660,7 @@ tasks: k8s:kill:port-forward: desc: Kill port-forward deps: - - env-create + - env:create cmds: - | source {{.ENVIRO_FILE}} && \ @@ -643,7 +704,7 @@ tasks: k8s:generate:configmap:env: desc: Generate kubernetes configmaps yaml for COMPONENT_NAME deps: - - env-create + - env:create - k8s:path:yamls cmds: - | @@ -656,7 +717,7 @@ tasks: k8s:generate:configmap:volumes: desc: Generate kubernetes volumes configmaps yaml for COMPONENT_NAME deps: - - env-create + - env:create - k8s:path:yamls cmds: - | @@ -670,7 +731,7 @@ tasks: k8s:generate:configmap:args: desc: Generate kubernetes configmaps yaml for COMPONENT_NAME deps: - - env-create + - env:create - k8s:path:yamls cmds: - | @@ -681,7 +742,7 @@ tasks: k8s:generate:service: desc: Generate kubernetes service yaml for COMPONENT_NAME deps: - - env-create + - env:create - k8s:path:yamls cmds: - | @@ -708,7 +769,7 @@ tasks: k8s:generate:ingress: desc: Generate kubernetes configmaps yaml for COMPONENT_NAME deps: - - env-create + - env:create - k8s:path:yamls cmds: - | @@ -719,7 +780,7 @@ tasks: k8s:generate:deployment: desc: Generate kubernetes deployment yaml for COMPONENT_NAME deps: - - env-create + - env:create - k8s:path:yamls cmds: - | @@ -787,7 +848,7 @@ tasks: k8s:generate:kustomization: desc: Generate Kustomization yaml for COMPONENT_NAME deps: - - env-create + - env:create - k8s:path:yamls cmds: - | diff --git a/deployments/compose.yaml b/deployments/compose.yaml index 519387c0c..0016ac9f8 100644 --- a/deployments/compose.yaml +++ b/deployments/compose.yaml @@ -914,7 +914,6 @@ services: condition: service_healthy ports: - "127.0.0.1:${OPENMCT_HOST_PORT}:${OPENMCT_PORT}" - # - "127.0.0.1:8080:8080" environment: MISSION: ${MISSION} SPACECRAFT: ${SPACECRAFT} diff --git a/deployments/scripts/nos3.yaml b/deployments/scripts/nos3.yaml index f9fd9645f..40c627a63 100644 --- a/deployments/scripts/nos3.yaml +++ b/deployments/scripts/nos3.yaml @@ -180,15 +180,6 @@ projects: port: 8091 openmct: port: 9001 - sc03: - enabled: false - components: - fortytwo: - port: 30092 - yamcs: - port: 8092 - openmct: - port: 9002 m02: enabled: false spacecraft: diff --git a/deployments/scripts/test.sh b/deployments/scripts/test.sh index e99cdb3f8..4a54c44e8 100755 --- a/deployments/scripts/test.sh +++ b/deployments/scripts/test.sh @@ -1,11 +1,35 @@ #! /usr/bin/env bash -set -e +#set -e config=$(cat ./scripts/nos3.yaml) PROJECTS=$(echo "$config" | yq ' .projects | select(.) | keys []') +task test PROJECT=ssmo FLEET=ssmo MISSION=mms SPACECRAFT=mms3 FORTYTWO_HOST_PORT=30092 YAMCS_HOST_PORT=8092 OPENMCT_HOST_PORT=9002; + +task env:generate PROJECT=ssmo FLEET=ssmo MISSION=mms SPACECRAFT=mms1 FORTYTWO_HOST_PORT=30090 YAMCS_HOST_PORT=8090 OPENMCT_HOST_PORT=9000; + task up + +task env:generate PROJECT=ssmo FLEET=ssmo MISSION=mms SPACECRAFT=mms2 FORTYTWO_HOST_PORT=30091 YAMCS_HOST_PORT=8091 OPENMCT_HOST_PORT=9001; + task up + +task env:generate PROJECT=ssmo FLEET=ssmo MISSION=mms SPACECRAFT=mms3 FORTYTWO_HOST_PORT=30092 YAMCS_HOST_PORT=8092 OPENMCT_HOST_PORT=9002; + + +task env:generate PROJECT=ssmo FLEET=ssmo MISSION=mms SPACECRAFT=mms4 FORTYTWO_HOST_PORT=30093 YAMCS_HOST_PORT=8093 OPENMCT_HOST_PORT=9003 + task up + +task env:generate PROJECT=ssmo FLEET=ssmo MISSION=mms SPACECRAFT=mms5 FORTYTWO_HOST_PORT=30094 YAMCS_HOST_PORT=8094 OPENMCT_HOST_PORT=9004 + task up + +PROJECT=ssmo FLEET=ssmo MISSION=mms SPACECRAFT=mms2 FORTYTWO_HOST_PORT=30091 YAMCS_HOST_PORT=8091 OPENMCT_HOST_PORT=9001 task up + +# task env:generate PROJECT=ssmo FLEET=ssmo MISSION=mms SPACECRAFT=mms4 FORTYTWO_HOST_PORT=30093 YAMCS_HOST_PORT=8093 OPENMCT_HOST_PORT=9003 +# task up + +exit 0 + for PROJECT in "${PROJECTS[@]}" do MISSIONS=$(echo "$config" | yq " .projects.${PROJECT}.missions | keys []") @@ -22,6 +46,7 @@ do OPENMCT_HOST_PORT=$(echo "$config" | yq " .projects.${PROJECT}.missions.${MISSION}.spacecraft.${SC}.components.openmct.port // \"default\"") echo "Generating .env for Project: ${PROJECT}, Mission: ${MISSION}, Spacecraft: ${SC}" + task generate:env \ PROJECT=${PROJECT} \ FLEET=${PROJECT} \ @@ -29,7 +54,8 @@ do SPACECRAFT=${SC} \ FORTYTWO_HOST_PORT=${FORTYTWO_HOST_PORT} \ YAMCS_HOST_PORT=${YAMCS_HOST_PORT} \ - OPENMCT_HOST_PORT=${OPENMCT_HOST_PORT} + OPENMCT_HOST_PORT=${OPENMCT_HOST_PORT} + #&& task up done @@ -40,14 +66,14 @@ done echo "Environment files generated successfully." -task generate:env PROJECT=nos3 FLEET=nos3 MISSION=m01 SPACECRAFT=sc01 FORTYTWO_HOST_PORT=30090 YAMCS_HOST_PORT=8090 OPENMCT_HOST_PORT=9000 && \ - task up +# task generate:env PROJECT=nos3 FLEET=nos3 MISSION=m01 SPACECRAFT=sc01 FORTYTWO_HOST_PORT=30090 YAMCS_HOST_PORT=8090 OPENMCT_HOST_PORT=9000 && \ +# task up -task generate:env PROJECT=nos3 FLEET=nos3 MISSION=m01 SPACECRAFT=sc02 FORTYTWO_HOST_PORT=30091 YAMCS_HOST_PORT=8091 OPENMCT_HOST_PORT=9001 && \ - task up +# task generate:env PROJECT=nos3 FLEET=nos3 MISSION=m01 SPACECRAFT=sc02 FORTYTWO_HOST_PORT=30091 YAMCS_HOST_PORT=8091 OPENMCT_HOST_PORT=9001 && \ +# task up -task generate:env PROJECT=nos3 FLEET=nos3 MISSION=m01 SPACECRAFT=sc03 FORTYTWO_HOST_PORT=30092 YAMCS_HOST_PORT=8092 OPENMCT_HOST_PORT=9002 && \ - task up +# task generate:env PROJECT=nos3 FLEET=nos3 MISSION=m01 SPACECRAFT=sc03 FORTYTWO_HOST_PORT=30092 YAMCS_HOST_PORT=8092 OPENMCT_HOST_PORT=9002 && \ +# task up -task generate:env PROJECT=ssmo FLEET=ssmo MISSION=m02 SPACECRAFT=sc01 FORTYTWO_HOST_PORT=30093 YAMCS_HOST_PORT=8093 OPENMCT_HOST_PORT=9003 && \ - task up +# task generate:env PROJECT=ssmo FLEET=ssmo MISSION=m02 SPACECRAFT=sc01 FORTYTWO_HOST_PORT=30093 YAMCS_HOST_PORT=8093 OPENMCT_HOST_PORT=9003 && \ +# task up