Доработка сборки deb пакета
This commit is contained in:
114
Makefile
114
Makefile
@@ -1,6 +1,6 @@
|
|||||||
# Makefile для GPIO Monitor Server
|
# 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
|
APP_NAME := gpio-monitor-server
|
||||||
@@ -8,6 +8,8 @@ CMD_PATH := ./cmd/server
|
|||||||
BUILD_DIR := ./build
|
BUILD_DIR := ./build
|
||||||
BINARY := $(BUILD_DIR)/$(APP_NAME)
|
BINARY := $(BUILD_DIR)/$(APP_NAME)
|
||||||
WEB_DIR := ./cmd/server/web
|
WEB_DIR := ./cmd/server/web
|
||||||
|
DEB_DIR := ./debian
|
||||||
|
DEB_PACKAGE := $(DEB_DIR)/$(APP_NAME)
|
||||||
|
|
||||||
# Целевая платформа (по умолчанию)
|
# Целевая платформа (по умолчанию)
|
||||||
GOOS ?= linux
|
GOOS ?= linux
|
||||||
@@ -43,15 +45,15 @@ build-frontend:
|
|||||||
fi && \
|
fi && \
|
||||||
echo " Компиляция TypeScript..." && \
|
echo " Компиляция TypeScript..." && \
|
||||||
npm run build && \
|
npm run build && \
|
||||||
echo "$(GREEN) TypeScript скомпилирован успешно!$(NC)"
|
echo "$(GREEN)TypeScript скомпилирован успешно!$(NC)"
|
||||||
|
|
||||||
## build-backend - Сборка Go сервера
|
## build-backend - Сборка Go сервера
|
||||||
build-backend:
|
build-backend:
|
||||||
@echo "$(YELLOW)🔧 Сборка Go сервера...$(NC)"
|
@echo "$(YELLOW)Сборка Go сервера...$(NC)"
|
||||||
@mkdir -p $(BUILD_DIR)
|
@mkdir -p $(BUILD_DIR)
|
||||||
@echo " Целевая платформа: $(GOOS)/$(GOARCH)"
|
@echo " Целевая платформа: $(GOOS)/$(GOARCH)"
|
||||||
@GOOS=$(GOOS) GOARCH=$(GOARCH) go build $(LDFLAGS) -o $(BINARY) $(CMD_PATH)
|
@GOOS=$(GOOS) GOARCH=$(GOARCH) go build $(LDFLAGS) -o $(BINARY) $(CMD_PATH)
|
||||||
@echo "$(GREEN) Go сервер скомпилирован успешно!$(NC)"
|
@echo "$(GREEN)Go сервер скомпилирован успешно!$(NC)"
|
||||||
|
|
||||||
## run - Запуск сервера (сборка + запуск)
|
## run - Запуск сервера (сборка + запуск)
|
||||||
run: build
|
run: build
|
||||||
@@ -60,7 +62,7 @@ run: build
|
|||||||
|
|
||||||
## dev - Режим разработки (без оптимизации, с hot-reload)
|
## dev - Режим разработки (без оптимизации, с hot-reload)
|
||||||
dev:
|
dev:
|
||||||
@echo "$(YELLOW) Режим разработки...$(NC)"
|
@echo "$(YELLOW)Режим разработки...$(NC)"
|
||||||
@go run $(CMD_PATH) -port :8080
|
@go run $(CMD_PATH) -port :8080
|
||||||
|
|
||||||
## clean - Очистка артефактов сборки
|
## clean - Очистка артефактов сборки
|
||||||
@@ -69,7 +71,9 @@ clean:
|
|||||||
@rm -rf $(BUILD_DIR)
|
@rm -rf $(BUILD_DIR)
|
||||||
@rm -rf $(WEB_DIR)/dist
|
@rm -rf $(WEB_DIR)/dist
|
||||||
@rm -rf $(WEB_DIR)/node_modules
|
@rm -rf $(WEB_DIR)/node_modules
|
||||||
@echo "$(GREEN) Очищено$(NC)"
|
@rm -rf $(DEB_PACKAGE)
|
||||||
|
@rm -f *.deb
|
||||||
|
@echo "$(GREEN)Очищено$(NC)"
|
||||||
|
|
||||||
## test - Запуск тестов
|
## test - Запуск тестов
|
||||||
test:
|
test:
|
||||||
@@ -78,18 +82,18 @@ test:
|
|||||||
|
|
||||||
## fmt - Форматирование кода
|
## fmt - Форматирование кода
|
||||||
fmt:
|
fmt:
|
||||||
@echo "$(YELLOW) Форматирование кода...$(NC)"
|
@echo "$(YELLOW)Форматирование кода...$(NC)"
|
||||||
@go fmt ./...
|
@go fmt ./...
|
||||||
@cd $(WEB_DIR) && npm run format 2>/dev/null || true
|
@cd $(WEB_DIR) && npm run format 2>/dev/null || true
|
||||||
|
|
||||||
## lint - Проверка кода
|
## lint - Проверка кода
|
||||||
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"
|
@golangci-lint run ./... 2>/dev/null || echo " Установите golangci-lint: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"
|
||||||
|
|
||||||
## deps - Установка зависимостей
|
## deps - Установка зависимостей
|
||||||
deps:
|
deps:
|
||||||
@echo "$(YELLOW) Установка зависимостей...$(NC)"
|
@echo "$(YELLOW)Установка зависимостей...$(NC)"
|
||||||
@go mod download
|
@go mod download
|
||||||
@go mod tidy
|
@go mod tidy
|
||||||
@cd $(WEB_DIR) && npm install
|
@cd $(WEB_DIR) && npm install
|
||||||
@@ -98,11 +102,11 @@ deps:
|
|||||||
install: build
|
install: build
|
||||||
@echo "$(YELLOW)Установка $(APP_NAME)...$(NC)"
|
@echo "$(YELLOW)Установка $(APP_NAME)...$(NC)"
|
||||||
@sudo cp $(BINARY) /usr/local/bin/$(APP_NAME)
|
@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 - Удаление из системы
|
||||||
uninstall:
|
uninstall:
|
||||||
@echo "$(YELLOW)Удаление $(APP_NAME)...$(NC)"
|
@echo "$(YELLOW)🗑Удаление $(APP_NAME)...$(NC)"
|
||||||
@sudo rm -f /usr/local/bin/$(APP_NAME)
|
@sudo rm -f /usr/local/bin/$(APP_NAME)
|
||||||
@echo "$(GREEN)Удалено$(NC)"
|
@echo "$(GREEN)Удалено$(NC)"
|
||||||
|
|
||||||
@@ -123,6 +127,71 @@ help:
|
|||||||
@echo " make dev - Запуск в режиме разработки"
|
@echo " make dev - Запуск в режиме разработки"
|
||||||
@echo " make clean - Очистка"
|
@echo " make clean - Очистка"
|
||||||
@echo " make install - Установка в систему"
|
@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:
|
docker-run:
|
||||||
@echo "$(YELLOW)Запуск в Docker...$(NC)"
|
@echo "$(YELLOW)Запуск в Docker...$(NC)"
|
||||||
@docker run -p 8080:8080 gpio-monitor:latest
|
@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
|
||||||
|
|||||||
159
Makefile.backup
Normal file
159
Makefile.backup
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
# Makefile для GPIO Monitor Server
|
||||||
|
|
||||||
|
.PHONY: all build clean run test fmt lint help install dev
|
||||||
|
|
||||||
|
# Переменные
|
||||||
|
APP_NAME := gpio-monitor-server
|
||||||
|
CMD_PATH := ./cmd/server
|
||||||
|
BUILD_DIR := ./build
|
||||||
|
BINARY := $(BUILD_DIR)/$(APP_NAME)
|
||||||
|
WEB_DIR := ./cmd/server/web
|
||||||
|
|
||||||
|
# Целевая платформа (по умолчанию)
|
||||||
|
GOOS ?= linux
|
||||||
|
GOARCH ?= arm64
|
||||||
|
|
||||||
|
# Флаги сборки
|
||||||
|
LDFLAGS := -ldflags="-s -w"
|
||||||
|
|
||||||
|
# Цвета для вывода
|
||||||
|
RED := \033[0;31m
|
||||||
|
GREEN := \033[0;32m
|
||||||
|
YELLOW := \033[0;33m
|
||||||
|
NC := \033[0m # No Color
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# ОСНОВНЫЕ ЦЕЛИ
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
all: help
|
||||||
|
|
||||||
|
## build - Полная сборка проекта (фронтенд + бекенд)
|
||||||
|
build: build-frontend build-backend
|
||||||
|
@echo "$(GREEN)Сборка завершена!$(NC)"
|
||||||
|
@ls -lh $(BINARY)
|
||||||
|
|
||||||
|
## build-frontend - Сборка TypeScript фронтенда
|
||||||
|
build-frontend:
|
||||||
|
@echo "$(YELLOW)Сборка TypeScript фронтенда...$(NC)"
|
||||||
|
@cd $(WEB_DIR) && \
|
||||||
|
if [ ! -d "node_modules" ]; then \
|
||||||
|
echo " Установка npm зависимостей..."; \
|
||||||
|
npm install; \
|
||||||
|
fi && \
|
||||||
|
echo " Компиляция TypeScript..." && \
|
||||||
|
npm run build && \
|
||||||
|
echo "$(GREEN) TypeScript скомпилирован успешно!$(NC)"
|
||||||
|
|
||||||
|
## build-backend - Сборка Go сервера
|
||||||
|
build-backend:
|
||||||
|
@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)"
|
||||||
|
|
||||||
|
## run - Запуск сервера (сборка + запуск)
|
||||||
|
run: build
|
||||||
|
@echo "$(YELLOW)Запуск сервера...$(NC)"
|
||||||
|
@$(BINARY)
|
||||||
|
|
||||||
|
## dev - Режим разработки (без оптимизации, с hot-reload)
|
||||||
|
dev:
|
||||||
|
@echo "$(YELLOW) Режим разработки...$(NC)"
|
||||||
|
@go run $(CMD_PATH) -port :8080
|
||||||
|
|
||||||
|
## clean - Очистка артефактов сборки
|
||||||
|
clean:
|
||||||
|
@echo "$(YELLOW)Очистка...$(NC)"
|
||||||
|
@rm -rf $(BUILD_DIR)
|
||||||
|
@rm -rf $(WEB_DIR)/dist
|
||||||
|
@rm -rf $(WEB_DIR)/node_modules
|
||||||
|
@echo "$(GREEN) Очищено$(NC)"
|
||||||
|
|
||||||
|
## test - Запуск тестов
|
||||||
|
test:
|
||||||
|
@echo "$(YELLOW)Запуск тестов...$(NC)"
|
||||||
|
@go test -v ./...
|
||||||
|
|
||||||
|
## fmt - Форматирование кода
|
||||||
|
fmt:
|
||||||
|
@echo "$(YELLOW) Форматирование кода...$(NC)"
|
||||||
|
@go fmt ./...
|
||||||
|
@cd $(WEB_DIR) && npm run format 2>/dev/null || true
|
||||||
|
|
||||||
|
## lint - Проверка кода
|
||||||
|
lint:
|
||||||
|
@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)"
|
||||||
|
@go mod download
|
||||||
|
@go mod tidy
|
||||||
|
@cd $(WEB_DIR) && npm install
|
||||||
|
|
||||||
|
## install - Установка бинарника в систему
|
||||||
|
install: build
|
||||||
|
@echo "$(YELLOW)Установка $(APP_NAME)...$(NC)"
|
||||||
|
@sudo cp $(BINARY) /usr/local/bin/$(APP_NAME)
|
||||||
|
@echo "$(GREEN) Установлено в /usr/local/bin/$(APP_NAME)$(NC)"
|
||||||
|
|
||||||
|
## uninstall - Удаление из системы
|
||||||
|
uninstall:
|
||||||
|
@echo "$(YELLOW)Удаление $(APP_NAME)...$(NC)"
|
||||||
|
@sudo rm -f /usr/local/bin/$(APP_NAME)
|
||||||
|
@echo "$(GREEN)Удалено$(NC)"
|
||||||
|
|
||||||
|
## help - Показать справку
|
||||||
|
help:
|
||||||
|
@echo "$(GREEN)GPIO Monitor Server - команды Makefile$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo "Доступные команды:"
|
||||||
|
@awk '/^##/ { \
|
||||||
|
cmd = $$0; \
|
||||||
|
gsub(/^## /, "", cmd); \
|
||||||
|
printf " $(GREEN)%-20s$(NC) %s\n", $$2, cmd \
|
||||||
|
}' $(MAKEFILE_LIST) | sort
|
||||||
|
@echo ""
|
||||||
|
@echo "Примеры:"
|
||||||
|
@echo " make build - Полная сборка"
|
||||||
|
@echo " make run - Сборка и запуск"
|
||||||
|
@echo " make dev - Запуск в режиме разработки"
|
||||||
|
@echo " make clean - Очистка"
|
||||||
|
@echo " make install - Установка в систему"
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# ДОПОЛНИТЕЛЬНЫЕ ЦЕЛИ
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
## build-arm64 - Сборка для ARM64 (Raspberry Pi)
|
||||||
|
build-arm64:
|
||||||
|
@$(MAKE) build GOOS=linux GOARCH=arm64
|
||||||
|
|
||||||
|
## build-amd64 - Сборка для AMD64
|
||||||
|
build-amd64:
|
||||||
|
@$(MAKE) build GOOS=linux GOARCH=amd64
|
||||||
|
|
||||||
|
## build-mac - Сборка для macOS
|
||||||
|
build-mac:
|
||||||
|
@$(MAKE) build GOOS=darwin GOARCH=amd64
|
||||||
|
|
||||||
|
## build-windows - Сборка для Windows
|
||||||
|
build-windows:
|
||||||
|
@$(MAKE) build GOOS=windows GOARCH=amd64
|
||||||
|
|
||||||
|
## build-all - Сборка для всех платформ
|
||||||
|
build-all: build-arm64 build-amd64 build-mac build-windows
|
||||||
|
@echo "$(GREEN)Все платформы собраны$(NC)"
|
||||||
|
|
||||||
|
## docker-build - Сборка Docker образа
|
||||||
|
docker-build:
|
||||||
|
@echo "$(YELLOW)Сборка Docker образа...$(NC)"
|
||||||
|
@docker build -t gpio-monitor:latest .
|
||||||
|
|
||||||
|
## docker-run - Запуск в Docker
|
||||||
|
docker-run:
|
||||||
|
@echo "$(YELLOW)Запуск в Docker...$(NC)"
|
||||||
|
@docker run -p 8080:8080 gpio-monitor:latest
|
||||||
9
debian/changelog
vendored
Normal file
9
debian/changelog
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
gpio-monitor-server (1.0.0-1) stable; urgency=medium
|
||||||
|
|
||||||
|
* Initial release
|
||||||
|
* GPIO monitoring with web interface
|
||||||
|
* Systemd service with auto-restart
|
||||||
|
* Log rotation and retention
|
||||||
|
* Support for Raspberry Pi GPIO
|
||||||
|
|
||||||
|
-- НТЦ200 Mon, 23 Jun 2026 12:00:00 +0300
|
||||||
14
debian/control
vendored
Normal file
14
debian/control
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
Source: gpio-monitor-server
|
||||||
|
Section: utils
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: НТЦ200 <ntc200@example.com>
|
||||||
|
Build-Depends: debhelper (>= 11), dh-golang, golang-go, npm
|
||||||
|
Standards-Version: 4.5.0
|
||||||
|
Homepage: https://example.com/gpio-monitor
|
||||||
|
Package: gpio-monitor-server
|
||||||
|
Version: 1.0.0-1
|
||||||
|
Architecture: arm64
|
||||||
|
Depends: systemd
|
||||||
|
Description: GPIO Monitor Server
|
||||||
|
Сервер для мониторинга GPIO с веб-интерфейсом
|
||||||
|
и системой логирования.
|
||||||
29
debian/copyright
vendored
Normal file
29
debian/copyright
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Format:
|
||||||
|
Upstream-Name: gpio-monitor-server
|
||||||
|
Source:
|
||||||
|
Files: *
|
||||||
|
Copyright: 2024 НТЦ200
|
||||||
|
License: MIT
|
||||||
|
|
||||||
|
Files: debian/*
|
||||||
|
Copyright: 2024 НТЦ200
|
||||||
|
License: MIT
|
||||||
|
|
||||||
|
License: MIT
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
.
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
5
debian/dirs
vendored
Normal file
5
debian/dirs
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
usr/bin
|
||||||
|
opt/gpio-monitoring/web
|
||||||
|
etc/gpio-monitoring
|
||||||
|
var/log/gpio-monitoring
|
||||||
|
var/lib/gpio-monitoring
|
||||||
15
debian/gpio-monitor-server.conf
vendored
Normal file
15
debian/gpio-monitor-server.conf
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Конфигурация GPIO Monitor Server
|
||||||
|
# Файл: /etc/gpio-monitoring/config
|
||||||
|
|
||||||
|
# Параметры запуска
|
||||||
|
PIPE_PATH=/tmp/gpio_pipe
|
||||||
|
RETENTION_HOURS=72
|
||||||
|
RETENTION_MB=2000
|
||||||
|
RETENTION_INTERVAL=60
|
||||||
|
ROTATION_CHECK_INTERVAL=1
|
||||||
|
BUFFER_SIZE=10240
|
||||||
|
HUMAN_LOG_INTERVAL=5
|
||||||
|
PORT=8080
|
||||||
|
|
||||||
|
# Настройки камеры (если используется)
|
||||||
|
CAMERA_URL=http://127.0.0.1:1984/api/stream.mjpeg?src=cam_mjpeg
|
||||||
39
debian/gpio-monitor-server.service
vendored
Normal file
39
debian/gpio-monitor-server.service
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=GPIO Monitor Server
|
||||||
|
After=network.target
|
||||||
|
Wants=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=gpio-monitor
|
||||||
|
Group=gpio-monitor
|
||||||
|
WorkingDirectory=/opt/gpio-monitoring
|
||||||
|
|
||||||
|
# Запуск сервера с параметрами
|
||||||
|
ExecStart=/usr/bin/gpio-monitor-server \
|
||||||
|
-pipe /tmp/gpio_pipe \
|
||||||
|
-retention-hours=72 \
|
||||||
|
-retention-mb=2000 \
|
||||||
|
-retention-interval=60 \
|
||||||
|
-rotation-check-interval=1 \
|
||||||
|
-buffer-size=10240 \
|
||||||
|
-human-log-interval=5
|
||||||
|
|
||||||
|
# Перезапуск при падении
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10s
|
||||||
|
|
||||||
|
# Лимиты и безопасность
|
||||||
|
LimitNOFILE=4096
|
||||||
|
NoNewPrivileges=yes
|
||||||
|
|
||||||
|
# Логирование
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
SyslogIdentifier=gpio-monitor
|
||||||
|
|
||||||
|
# Настройки для доступа к GPIO
|
||||||
|
AmbientCapabilities=CAP_SYS_RAWIO
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
2
debian/install
vendored
Normal file
2
debian/install
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Бинарник будет установлен в /usr/bin автоматически
|
||||||
|
debian/usr/bin/gpio-logs usr/bin/
|
||||||
33
debian/postinst
vendored
Normal file
33
debian/postinst
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# chmod +x debian/postinst
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
configure)
|
||||||
|
# Создаем директории
|
||||||
|
mkdir -p /var/log/gpio-monitoring
|
||||||
|
mkdir -p /var/lib/gpio-monitoring
|
||||||
|
mkdir -p /opt/gpio-monitoring/web
|
||||||
|
|
||||||
|
# Устанавливаем права
|
||||||
|
chown -R gpio-monitor:gpio-monitor /var/log/gpio-monitoring
|
||||||
|
chown -R gpio-monitor:gpio-monitor /var/lib/gpio-monitoring
|
||||||
|
chown -R gpio-monitor:gpio-monitor /opt/gpio-monitoring
|
||||||
|
|
||||||
|
# Перезагружаем systemd
|
||||||
|
systemctl daemon-reload 2>/dev/null || true
|
||||||
|
|
||||||
|
# Включаем сервис, но не запускаем автоматически
|
||||||
|
systemctl enable gpio-monitor-server.service 2>/dev/null || true
|
||||||
|
systemctl start gpio-monitor-server.service
|
||||||
|
|
||||||
|
# Создаем symlink для логов
|
||||||
|
ln -sf /var/log/gpio-monitoring /opt/gpio-monitoring/logs 2>/dev/null || true
|
||||||
|
|
||||||
|
echo "GPIO Monitor Server установлен"
|
||||||
|
echo "Для запуска: sudo systemctl start gpio-monitor-server"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
19
debian/postrm
vendored
Normal file
19
debian/postrm
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#chmod +x debian/postrm
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
purge)
|
||||||
|
# Удаляем пользователя только при полной очистке
|
||||||
|
userdel gpio-monitor 2>/dev/null || true
|
||||||
|
groupdel gpio-monitor 2>/dev/null || true
|
||||||
|
|
||||||
|
# Удаляем директории
|
||||||
|
rm -rf /var/log/gpio-monitoring
|
||||||
|
rm -rf /var/lib/gpio-monitoring
|
||||||
|
rm -rf /opt/gpio-monitoring
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
24
debian/preinst
vendored
Normal file
24
debian/preinst
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#chmod +x debian/preinst
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Создаем пользователя и группу
|
||||||
|
if ! getent group gpio-monitor >/dev/null; then
|
||||||
|
groupadd --system gpio-monitor
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! getent passwd gpio-monitor >/dev/null; then
|
||||||
|
useradd --system \
|
||||||
|
--gid gpio-monitor \
|
||||||
|
--home /var/lib/gpio-monitoring \
|
||||||
|
--shell /usr/sbin/nologin \
|
||||||
|
--comment "GPIO Monitor Service" \
|
||||||
|
gpio-monitor
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Добавляем пользователя в нужные группы для доступа к GPIO
|
||||||
|
usermod -a -G gpio,dialout,gpio-monitor gpio-monitor 2>/dev/null || true
|
||||||
|
|
||||||
|
exit 0
|
||||||
15
debian/prerm
vendored
Normal file
15
debian/prerm
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#chmod +x debian/prerm
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
remove|upgrade|deconfigure)
|
||||||
|
# Останавливаем сервис
|
||||||
|
systemctl stop gpio-monitor-server.service 2>/dev/null || true
|
||||||
|
systemctl disable gpio-monitor-server.service 2>/dev/null || true
|
||||||
|
systemctl daemon-reload 2>/dev/null || true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
24
debian/rules
vendored
Normal file
24
debian/rules
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
# chmod +x debian/rules
|
||||||
|
# Удаляем стандартные правила
|
||||||
|
%:
|
||||||
|
dh $@ --buildsystem=golang --with=golang
|
||||||
|
|
||||||
|
# Переопределяем сборку
|
||||||
|
override_dh_auto_build:
|
||||||
|
# Сборка фронтенда
|
||||||
|
cd cmd/server/web && npm install && npm run build
|
||||||
|
# Сборка бекенда
|
||||||
|
GOOS=linux GOARCH=arm64 go build -ldflags="-s -w" -o debian/gpio-monitor-server/usr/bin/gpio-monitor-server ./cmd/server
|
||||||
|
|
||||||
|
# Установка файлов
|
||||||
|
override_dh_install:
|
||||||
|
dh_install
|
||||||
|
# Копируем статические файлы для веба
|
||||||
|
mkdir -p debian/gpio-monitor-server/opt/gpio-monitoring/web
|
||||||
|
cp -r cmd/server/web/dist debian/gpio-monitor-server/opt/gpio-monitoring/web/
|
||||||
|
cp -r cmd/server/web/css debian/gpio-monitor-server/opt/gpio-monitoring/web/
|
||||||
|
cp -r cmd/server/web/fonts debian/gpio-monitor-server/opt/gpio-monitoring/web/
|
||||||
|
cp cmd/server/web/*.html debian/gpio-monitor-server/opt/gpio-monitoring/web/ 2>/dev/null || true
|
||||||
|
cp cmd/server/web/favicon.png debian/gpio-monitor-server/opt/gpio-monitoring/web/ 2>/dev/null || true
|
||||||
31
debian/usr/bin/gpio-logs
vendored
Normal file
31
debian/usr/bin/gpio-logs
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Просмотр логов GPIO Monitor
|
||||||
|
|
||||||
|
if [ "$1" = "-f" ]; then
|
||||||
|
sudo journalctl -u gpio-monitor-server -f
|
||||||
|
elif [ "$1" = "-e" ]; then
|
||||||
|
sudo tail -f /var/log/gpio-monitoring/events_human.log
|
||||||
|
elif [ "$1" = "-g" ]; then
|
||||||
|
sudo tail -f /var/log/gpio-monitoring/gpio_human.log
|
||||||
|
elif [ "$1" = "-d" ]; then
|
||||||
|
sudo tail -f /var/log/gpio-monitoring/data/*.bin 2>/dev/null | xxd
|
||||||
|
elif [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||||
|
echo "Использование: gpio-logs [OPTION]"
|
||||||
|
echo " -f Просмотр логов сервиса (journalctl)"
|
||||||
|
echo " -e Просмотр логов событий"
|
||||||
|
echo " -g Просмотр GPIO логов (human-readable)"
|
||||||
|
echo " -d Просмотр бинарных данных (raw)"
|
||||||
|
echo " -h Показать эту справку"
|
||||||
|
else
|
||||||
|
echo "Использование: gpio-logs [OPTION]"
|
||||||
|
echo " -f Просмотр логов сервиса (journalctl)"
|
||||||
|
echo " -e Просмотр логов событий"
|
||||||
|
echo " -g Просмотр GPIO логов (human-readable)"
|
||||||
|
echo " -d Просмотр бинарных данных (raw)"
|
||||||
|
echo " -h Показать эту справку"
|
||||||
|
echo ""
|
||||||
|
echo "Примеры:"
|
||||||
|
echo " gpio-logs -f # следить за логами сервиса"
|
||||||
|
echo " gpio-logs -e # смотреть события"
|
||||||
|
echo " gpio-logs -g # смотреть GPIO логи"
|
||||||
|
fi
|
||||||
@@ -7,7 +7,17 @@ import (
|
|||||||
|
|
||||||
// GetDataDir возвращает стандартную директорию для данных приложения
|
// GetDataDir возвращает стандартную директорию для данных приложения
|
||||||
func GetDataDir() (string, error) {
|
func GetDataDir() (string, error) {
|
||||||
// Используем XDG Base Directory Specification
|
// Проверяем, установлен ли пакет (существует ли /opt/gpio-monitoring)
|
||||||
|
if _, err := os.Stat("/opt/gpio-monitoring"); err == nil {
|
||||||
|
// Используем стандартную директорию для deb пакета
|
||||||
|
dataDir := "/var/lib/gpio-monitoring"
|
||||||
|
if err := os.MkdirAll(dataDir, 0755); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return dataDir, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Для разработки - используем XDG Base Directory Specification
|
||||||
homeDir, err := os.UserHomeDir()
|
homeDir, err := os.UserHomeDir()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@@ -15,8 +25,6 @@ func GetDataDir() (string, error) {
|
|||||||
|
|
||||||
// ~/.local/share/gpio-monitoring
|
// ~/.local/share/gpio-monitoring
|
||||||
dataDir := filepath.Join(homeDir, ".local", "share", "gpio-monitoring")
|
dataDir := filepath.Join(homeDir, ".local", "share", "gpio-monitoring")
|
||||||
|
|
||||||
// Создаём директорию если её нет
|
|
||||||
if err := os.MkdirAll(dataDir, 0755); err != nil {
|
if err := os.MkdirAll(dataDir, 0755); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -26,6 +34,16 @@ func GetDataDir() (string, error) {
|
|||||||
|
|
||||||
// GetLogsDir возвращает директорию для логов
|
// GetLogsDir возвращает директорию для логов
|
||||||
func GetLogsDir() (string, error) {
|
func GetLogsDir() (string, error) {
|
||||||
|
// Проверяем, установлен ли пакет
|
||||||
|
if _, err := os.Stat("/opt/gpio-monitoring"); err == nil {
|
||||||
|
logsDir := "/var/log/gpio-monitoring"
|
||||||
|
if err := os.MkdirAll(logsDir, 0755); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return logsDir, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Для разработки
|
||||||
dataDir, err := GetDataDir()
|
dataDir, err := GetDataDir()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@@ -82,4 +100,27 @@ func GetGPIOLogPath() (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return filepath.Join(logsDir, "gpio_human.log"), nil
|
return filepath.Join(logsDir, "gpio_human.log"), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetWebDir возвращает директорию с веб-файлами
|
||||||
|
func GetWebDir() string {
|
||||||
|
// Проверяем стандартные пути
|
||||||
|
possiblePaths := []string{
|
||||||
|
"/opt/gpio-monitoring/web",
|
||||||
|
"/usr/share/gpio-monitoring/web",
|
||||||
|
"./cmd/server/web",
|
||||||
|
"../cmd/server/web",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, path := range possiblePaths {
|
||||||
|
if _, err := os.Stat(path); err == nil {
|
||||||
|
// Проверяем, что есть index.html
|
||||||
|
if _, err := os.Stat(filepath.Join(path, "index.html")); err == nil {
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback для разработки
|
||||||
|
return "./cmd/server/web"
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user