Доработка сборки deb пакета

This commit is contained in:
Maxim
2026-06-23 15:28:10 +03:00
parent 387823d36a
commit 594a62a9f6
16 changed files with 565 additions and 14 deletions

114
Makefile
View File

@@ -1,6 +1,6 @@
# Makefile для GPIO Monitor Server
.PHONY: all build clean run test fmt lint help install dev
.PHONY: all build clean run test fmt lint help install dev deb prepare-debian
# Переменные
APP_NAME := gpio-monitor-server
@@ -8,6 +8,8 @@ CMD_PATH := ./cmd/server
BUILD_DIR := ./build
BINARY := $(BUILD_DIR)/$(APP_NAME)
WEB_DIR := ./cmd/server/web
DEB_DIR := ./debian
DEB_PACKAGE := $(DEB_DIR)/$(APP_NAME)
# Целевая платформа (по умолчанию)
GOOS ?= linux
@@ -43,15 +45,15 @@ build-frontend:
fi && \
echo " Компиляция TypeScript..." && \
npm run build && \
echo "$(GREEN) TypeScript скомпилирован успешно!$(NC)"
echo "$(GREEN)TypeScript скомпилирован успешно!$(NC)"
## build-backend - Сборка Go сервера
build-backend:
@echo "$(YELLOW)🔧 Сборка Go сервера...$(NC)"
@echo "$(YELLOW)Сборка Go сервера...$(NC)"
@mkdir -p $(BUILD_DIR)
@echo " Целевая платформа: $(GOOS)/$(GOARCH)"
@GOOS=$(GOOS) GOARCH=$(GOARCH) go build $(LDFLAGS) -o $(BINARY) $(CMD_PATH)
@echo "$(GREEN) Go сервер скомпилирован успешно!$(NC)"
@echo "$(GREEN)Go сервер скомпилирован успешно!$(NC)"
## run - Запуск сервера (сборка + запуск)
run: build
@@ -60,7 +62,7 @@ run: build
## dev - Режим разработки (без оптимизации, с hot-reload)
dev:
@echo "$(YELLOW) Режим разработки...$(NC)"
@echo "$(YELLOW)Режим разработки...$(NC)"
@go run $(CMD_PATH) -port :8080
## clean - Очистка артефактов сборки
@@ -69,7 +71,9 @@ clean:
@rm -rf $(BUILD_DIR)
@rm -rf $(WEB_DIR)/dist
@rm -rf $(WEB_DIR)/node_modules
@echo "$(GREEN) Очищено$(NC)"
@rm -rf $(DEB_PACKAGE)
@rm -f *.deb
@echo "$(GREEN)Очищено$(NC)"
## test - Запуск тестов
test:
@@ -78,18 +82,18 @@ test:
## fmt - Форматирование кода
fmt:
@echo "$(YELLOW) Форматирование кода...$(NC)"
@echo "$(YELLOW)Форматирование кода...$(NC)"
@go fmt ./...
@cd $(WEB_DIR) && npm run format 2>/dev/null || true
## lint - Проверка кода
lint:
@echo "$(YELLOW) Проверка кода...$(NC)"
@echo "$(YELLOW)Проверка кода...$(NC)"
@golangci-lint run ./... 2>/dev/null || echo " Установите golangci-lint: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"
## deps - Установка зависимостей
deps:
@echo "$(YELLOW) Установка зависимостей...$(NC)"
@echo "$(YELLOW)Установка зависимостей...$(NC)"
@go mod download
@go mod tidy
@cd $(WEB_DIR) && npm install
@@ -98,11 +102,11 @@ deps:
install: build
@echo "$(YELLOW)Установка $(APP_NAME)...$(NC)"
@sudo cp $(BINARY) /usr/local/bin/$(APP_NAME)
@echo "$(GREEN) Установлено в /usr/local/bin/$(APP_NAME)$(NC)"
@echo "$(GREEN)Установлено в /usr/local/bin/$(APP_NAME)$(NC)"
## uninstall - Удаление из системы
uninstall:
@echo "$(YELLOW)Удаление $(APP_NAME)...$(NC)"
@echo "$(YELLOW)🗑Удаление $(APP_NAME)...$(NC)"
@sudo rm -f /usr/local/bin/$(APP_NAME)
@echo "$(GREEN)Удалено$(NC)"
@@ -123,6 +127,71 @@ help:
@echo " make dev - Запуск в режиме разработки"
@echo " make clean - Очистка"
@echo " make install - Установка в систему"
@echo " make deb - Сборка DEB пакета"
# ============================================
# СБОРКА DEB ПАКЕТА
# ============================================
## prepare-debian - Подготовка структуры для deb-пакета
prepare-debian:
@echo "$(YELLOW)Подготовка структуры DEB пакета...$(NC)"
@# Создаем основную структуру
@mkdir -p $(DEB_PACKAGE)/DEBIAN
@mkdir -p $(DEB_PACKAGE)/usr/bin
@mkdir -p $(DEB_PACKAGE)/usr/share/doc/$(APP_NAME)
@mkdir -p $(DEB_PACKAGE)/opt/gpio-monitoring/web
@mkdir -p $(DEB_PACKAGE)/etc/gpio-monitoring
@mkdir -p $(DEB_PACKAGE)/etc/systemd/system
@# Копируем DEBIAN файлы
@if [ -f $(DEB_DIR)/control ]; then cp $(DEB_DIR)/control $(DEB_PACKAGE)/DEBIAN/; fi
@if [ -f $(DEB_DIR)/preinst ]; then cp $(DEB_DIR)/preinst $(DEB_PACKAGE)/DEBIAN/; fi
@if [ -f $(DEB_DIR)/postinst ]; then cp $(DEB_DIR)/postinst $(DEB_PACKAGE)/DEBIAN/; fi
@if [ -f $(DEB_DIR)/prerm ]; then cp $(DEB_DIR)/prerm $(DEB_PACKAGE)/DEBIAN/; fi
@if [ -f $(DEB_DIR)/postrm ]; then cp $(DEB_DIR)/postrm $(DEB_PACKAGE)/DEBIAN/; fi
@# Копируем документацию
@if [ -f $(DEB_DIR)/copyright ]; then cp $(DEB_DIR)/copyright $(DEB_PACKAGE)/usr/share/doc/$(APP_NAME)/; fi
@if [ -f $(DEB_DIR)/changelog ]; then \
cp $(DEB_DIR)/changelog $(DEB_PACKAGE)/usr/share/doc/$(APP_NAME)/; \
gzip -9 -n $(DEB_PACKAGE)/usr/share/doc/$(APP_NAME)/changelog 2>/dev/null || true; \
fi
@# Устанавливаем права
@chmod 755 $(DEB_PACKAGE)/DEBIAN/* 2>/dev/null || true
@echo "$(GREEN)Структура подготовлена$(NC)"
## deb - Сборка DEB пакета
deb: clean build-frontend build-backend prepare-debian
@echo "$(YELLOW)Сборка DEB пакета...$(NC)"
@# Копируем бинарник
@cp $(BINARY) $(DEB_PACKAGE)/usr/bin/
@# Копируем веб-файлы
@if [ -d "$(WEB_DIR)/dist" ]; then cp -r $(WEB_DIR)/dist $(DEB_PACKAGE)/opt/gpio-monitoring/web/; fi
@if [ -d "$(WEB_DIR)/css" ]; then cp -r $(WEB_DIR)/css $(DEB_PACKAGE)/opt/gpio-monitoring/web/; fi
@if [ -d "$(WEB_DIR)/fonts" ]; then cp -r $(WEB_DIR)/fonts $(DEB_PACKAGE)/opt/gpio-monitoring/web/; fi
@if ls $(WEB_DIR)/*.html 1>/dev/null 2>&1; then cp $(WEB_DIR)/*.html $(DEB_PACKAGE)/opt/gpio-monitoring/web/ 2>/dev/null || true; fi
@if [ -f "$(WEB_DIR)/favicon.png" ]; then cp $(WEB_DIR)/favicon.png $(DEB_PACKAGE)/opt/gpio-monitoring/web/ 2>/dev/null || true; fi
@# Копируем systemd сервис
@if [ -f "$(DEB_DIR)/$(APP_NAME).service" ]; then cp $(DEB_DIR)/$(APP_NAME).service $(DEB_PACKAGE)/etc/systemd/system/; fi
@# Копируем конфиг
@if [ -f "$(DEB_DIR)/$(APP_NAME).conf" ]; then cp $(DEB_DIR)/$(APP_NAME).conf $(DEB_PACKAGE)/etc/gpio-monitoring/config; fi
@# Копируем скрипт для логов
@if [ -f "$(DEB_DIR)/usr/bin/gpio-logs" ]; then \
cp $(DEB_DIR)/usr/bin/gpio-logs $(DEB_PACKAGE)/usr/bin/; \
chmod +x $(DEB_PACKAGE)/usr/bin/gpio-logs; \
fi
@# Устанавливаем правильные права
@chown -R root:root $(DEB_PACKAGE) 2>/dev/null || true
@# Создаем архив с контрольными суммами
@cd $(DEB_PACKAGE) && find . -type f ! -path "./DEBIAN/*" -exec md5sum {} \; > DEBIAN/md5sums 2>/dev/null || true
@# Собираем пакет
@dpkg-deb --root-owner-group --build $(DEB_PACKAGE) .
@mkdir -p $(BUILD_DIR)
@mv *.deb $(BUILD_DIR)/
@echo "$(GREEN)DEB пакет создан: $(BUILD_DIR)/$(APP_NAME).deb$(NC)"
@ls -lh $(BUILD_DIR)/*.deb
@echo ""
@echo "$(GREEN)Информация о пакете:$(NC)"
@dpkg-deb -I $(BUILD_DIR)/*.deb | head -15
# ============================================
# ДОПОЛНИТЕЛЬНЫЕ ЦЕЛИ
@@ -157,3 +226,26 @@ docker-build:
docker-run:
@echo "$(YELLOW)Запуск в Docker...$(NC)"
@docker run -p 8080:8080 gpio-monitor:latest
## deb-clean - Очистка временных файлов deb-пакета
deb-clean:
@echo "$(YELLOW)Очистка deb-временных файлов...$(NC)"
@rm -rf $(DEB_PACKAGE)
@rm -f $(BUILD_DIR)/$(APP_NAME).deb
@echo "$(GREEN)Очищено$(NC)"
## deb-info - Показать информацию о deb-пакете
deb-info:
@if [ -f "$(BUILD_DIR)/$(APP_NAME).deb" ]; then \
dpkg-deb -I $(BUILD_DIR)/$(APP_NAME).deb; \
else \
echo "$(RED)Пакет не найден. Сначала выполните: make deb$(NC)"; \
fi
## deb-contents - Показать содержимое deb-пакета
deb-contents:
@if [ -f "$(BUILD_DIR)/$(APP_NAME).deb" ]; then \
dpkg-deb -c $(BUILD_DIR)/$(APP_NAME).deb; \
else \
echo "$(RED)Пакет не найден. Сначала выполните: make deb$(NC)"; \
fi