Makefile 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. ################################################################################
  2. # Build & release helpers
  3. ################################################################################
  4. DOCKER_IMAGE_TAG_GO_RELEASER := goreleaser/goreleaser:v2.13.1
  5. # Docker builds cannot load a macOS USB PKCS#11 token. Options: (1) SKIP_CODE_SIGN=1 and skip;
  6. # (2) SIGN_HTTP_URL=http://host.docker.internal:8765 plus `make sign-server` on the host to
  7. # sign via HTTP; (3) run release-sign with host goreleaser (no Docker).
  8. SKIP_CODE_SIGN ?= 1
  9. # When set (e.g. http://host.docker.internal:8765), GoReleaser in Docker calls the host
  10. # sign_server to run PKCS#11 signing on the same bind-mounted dist/ tree.
  11. SIGN_HTTP_URL ?=
  12. SIGN_SERVER_TOKEN ?=
  13. GORELEASER ?= goreleaser
  14. DOCKER_RUN_GO_RELEASER := @docker run \
  15. --env CGO_ENABLED=0 \
  16. --env GITHUB_TOKEN=$(GITHUB_TOKEN) \
  17. --env SKIP_CODE_SIGN=$(SKIP_CODE_SIGN) \
  18. --env SIGN_HTTP_URL=$(SIGN_HTTP_URL) \
  19. --env SIGN_SERVER_TOKEN=$(SIGN_SERVER_TOKEN) \
  20. --rm \
  21. --volume `pwd`:/go/src/open-oscar-server \
  22. --workdir /go/src/open-oscar-server \
  23. $(DOCKER_IMAGE_TAG_GO_RELEASER)
  24. OSCAR_HOST ?= ras.dev
  25. .PHONY: config-basic config-ssl config
  26. config-basic: ## Generate basic config file template
  27. go run ./cmd/config_generator unix config/settings.env basic
  28. config-ssl: ## Generate SSL config file template
  29. go run ./cmd/config_generator unix config/ssl/settings.env ssl
  30. config: config-basic config-ssl ## Generate all config file templates from Config struct
  31. .PHONY: release
  32. release: ## Run a clean, full GoReleaser run (publish + validate)
  33. $(DOCKER_RUN_GO_RELEASER) --clean
  34. .PHONY: release-dry-run
  35. release-dry-run: ## GoReleaser dry-run (skips validate & publish)
  36. $(DOCKER_RUN_GO_RELEASER) --clean --skip=validate --skip=publish
  37. SIGN_SERVER_PORT ?= 8765
  38. .PHONY: sign-server
  39. sign-server: ## Local HTTP signer for Windows PE (run before Docker release if using SIGN_HTTP_URL)
  40. go run ./cmd/sign_server
  41. .PHONY: sign-server-stop
  42. sign-server-stop: ## Stop whatever is listening on SIGN_SERVER_PORT (usually a leftover sign_server)
  43. -@kill $$(lsof -t -iTCP:$(SIGN_SERVER_PORT) -sTCP:LISTEN) 2>/dev/null || true
  44. # Default URL for GoReleaser-in-Docker → host signing (Docker Desktop Mac/Win).
  45. # On Linux Docker, use host.docker.internal:8765 only if you add
  46. # --add-host=host.docker.internal:host-gateway to the docker run (or set SIGN_DOCKER_URL).
  47. SIGN_DOCKER_URL ?= http://host.docker.internal:8765
  48. .PHONY: release-dry-run-sign-docker
  49. release-dry-run-sign-docker: ## Dry-run in Docker; Windows Authenticode via host sign_server (run `make sign-server` first)
  50. @$(MAKE) release-dry-run SIGN_HTTP_URL=$(SIGN_DOCKER_URL)
  51. .PHONY: release-sign-docker
  52. release-sign-docker: ## Full release in Docker; Windows Authenticode via host sign_server (run `make sign-server` first)
  53. @$(MAKE) release SIGN_HTTP_URL=$(SIGN_DOCKER_URL)
  54. .PHONY: release-dry-run-nosign
  55. release-dry-run-nosign: ## GoReleaser dry-run on host without Windows Authenticode
  56. SKIP_CODE_SIGN=1 $(GORELEASER) --clean --skip=validate --skip=publish
  57. .PHONY: release-nosign
  58. release-nosign: ## Full GoReleaser on host without Windows Authenticode
  59. SKIP_CODE_SIGN=1 $(GORELEASER) --clean
  60. .PHONY: release-dry-run-sign
  61. release-dry-run-sign: ## GoReleaser dry-run on host with Windows signing (needs $(GORELEASER), PKCS#11 env)
  62. SKIP_CODE_SIGN=0 $(GORELEASER) --clean --skip=validate --skip=publish
  63. .PHONY: release-sign
  64. release-sign: ## Full GoReleaser on host with Windows signing (needs $(GORELEASER), PKCS#11 env)
  65. SKIP_CODE_SIGN=0 $(GORELEASER) --clean
  66. .PHONY: docker-image-ras
  67. docker-image-ras: ## Build Open OSCAR Server image
  68. docker build -t ras:latest -f Dockerfile .
  69. .PHONY: docker-image-stunnel
  70. docker-image-stunnel: ## Build stunnel image pinned to v5.75 / OpenSSL 1.0.2u
  71. docker build -t ras-stunnel:5.75-openssl-1.0.2u -f Dockerfile.stunnel .
  72. .PHONY: docker-image-certgen
  73. docker-image-certgen: ## Build minimal helper image with openssl & nss tools
  74. docker build -t ras-certgen:latest -f Dockerfile.certgen .
  75. .PHONY: docker-images
  76. docker-images: docker-image-ras docker-image-stunnel docker-image-certgen
  77. .PHONY: docker-run
  78. docker-run:
  79. OSCAR_HOST=$(OSCAR_HOST) docker compose up open-oscar-server stunnel
  80. .PHONY: docker-run-bg
  81. docker-run-bg: ## Run Open OSCAR Server in background with docker-compose
  82. OSCAR_HOST=$(OSCAR_HOST) docker compose up -d open-oscar-server stunnel
  83. .PHONY: docker-run-stop
  84. docker-run-stop: ## Stop Open OSCAR Server docker-compose services
  85. OSCAR_HOST=$(OSCAR_HOST) docker compose down
  86. .PHONY: run
  87. run: # run the server with plain socket config
  88. ./scripts/run_dev.sh ./config/settings.env
  89. .PHONY: run-ssl
  90. run-ssl: # run the server with ssl socket config
  91. ./scripts/run_dev.sh ./config/ssl/settings.env
  92. .PHONY: run-stunnel
  93. run-stunnel: # run stunnel for SSL termination
  94. ./scripts/run_stunnel.sh ./certs/server.pem
  95. ################################################################################
  96. # SSL Helpers
  97. ################################################################################
  98. .PHONY: docker-cert
  99. docker-cert: clean-certs ## Create SSL certificates for server
  100. mkdir -p certs/
  101. OSCAR_HOST=$(OSCAR_HOST) docker compose run --no-TTY --rm cert-gen
  102. .PHONY: docker-nss
  103. docker-nss: ## Create NSS certificate database for AIM 6.x clients
  104. OSCAR_HOST=$(OSCAR_HOST) docker compose run --no-TTY --rm nss-gen
  105. .PHONY: clean-certs
  106. clean-certs: ## Remove all generated certificates & NSS DB
  107. rm -rf certs/*
  108. ################################################################################
  109. # Web API Tools
  110. ################################################################################
  111. .PHONY: webapi-keygen
  112. webapi-keygen: ## Build the Web API key generator tool
  113. go build -o webapi_keygen ./cmd/webapi_keygen
  114. .PHONY: webapi-keygen-install
  115. webapi-keygen-install: ## Install the Web API key generator tool system-wide
  116. go install ./cmd/webapi_keygen