Update build.sh

This commit is contained in:
2026-05-25 19:12:07 +00:00
parent 5fe503ef2e
commit 108f5a3334

View File

@@ -51,6 +51,9 @@ else
cd "$FUSH_DIR"
fi
# Определение операционной системы
OS=$(uname -s)
# Определение переменных
PROJECT_NAME="fush"
BINARY_NAME="bin/${PROJECT_NAME}"
@@ -64,6 +67,27 @@ GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//')
REQUIRED_VERSION="1.26.0"
# Настройки для OpenIndiana/Solaris
if [ "$OS" = "SunOS" ]; then
echo -e "${YELLOW}Обнаружена OpenIndiana/Solaris, применяются специальные настройки...${NC}"
# Отключаем CGO для Solaris (частая причина проблем)
export CGO_ENABLED=0
# Устанавливаем специфичные флаги
export GOOS=solaris
export GOARCH=amd64
# Отключаем проверку buildid для инструментов
export GOFLAGS="-buildid= -trimpath"
# Solaris требует отключения asyncpreempt
export GODEBUG=asyncpreemptoff=1
echo -e "${GREEN}✓ CGO отключен для совместимости${NC}"
echo -e "${GREEN}✓ Установлены Solaris-специфичные переменные${NC}"
fi
# Функция для сравнения версий (работает без sort -V)
version_compare() {
# Удаляем префикс 'v' если есть
@@ -147,6 +171,15 @@ show_help() {
echo -e " $0 install # Собрать и установить"
echo -e " $0 run # Собрать и запустить"
echo
echo -e "${GREEN}Особенности:${NC}"
echo -e " ${YELLOW}• Встроенная команда mycurl для скачивания файлов${NC}"
echo -e " ${YELLOW}• Поддержка HTTP/HTTPS с редиректами${NC}"
echo -e " ${YELLOW}• Работает на Linux и OpenIndiana/Hipster${NC}"
echo -e " ${YELLOW}• Интеграция Lua скриптов${NC}"
if [ "$OS" = "SunOS" ]; then
echo -e " ${GREEN}• OpenIndiana режим: CGO_ENABLED=0${NC}"
fi
echo
}
# Функция проверки версии Go
@@ -172,7 +205,6 @@ check_go_version() {
# Функция проверки операционной системы
check_os() {
OS=$(uname -s)
case "$OS" in
Linux|SunOS)
echo -e "${GREEN}✓ Поддерживаемая ОС: ${OS}${NC}"
@@ -230,6 +262,11 @@ install_deps() {
exit 1
fi
# Для OpenIndiana используем специальные флаги
if [ "$OS" = "SunOS" ]; then
export GOFLAGS="-buildid= -trimpath"
fi
# Обновляем go.mod и создаем go.sum
echo -e "${YELLOW}Выполнение go mod download...${NC}"
$GO mod download 2>&1 | while IFS= read -r line; do
@@ -301,6 +338,12 @@ build_project() {
return 1
fi
# Для OpenIndiana дополнительные проверки
if [ "$OS" = "SunOS" ]; then
echo -e "${YELLOW}OpenIndiana режим: CGO_ENABLED=${CGO_ENABLED}${NC}"
echo -e "${YELLOW}OpenIndiana режим: GOFLAGS=${GOFLAGS}${NC}"
fi
# Создаем директорию для бинарных файлов
mkdir -p "$BUILD_DIR"
echo -e "${GREEN}✓ Директория ${BUILD_DIR} создана${NC}"
@@ -308,6 +351,11 @@ build_project() {
# Формируем флаги сборки
LDFLAGS="-X main.BuildTime=${BUILD_TIME} -X main.GitCommit=${GIT_COMMIT}"
# Добавляем дополнительный флаг для Solaris
if [ "$OS" = "SunOS" ]; then
LDFLAGS="-s -w -buildid= ${LDFLAGS}"
fi
# Выполняем сборку с явным указанием выходного файла
echo -e "${YELLOW}Выполнение: go build -v -ldflags=\"${LDFLAGS}\" -o ${BINARY_NAME} ./cmd/fush${NC}"
@@ -392,6 +440,13 @@ clean_project() {
echo -e "${GREEN}✓ Файл ${ROOT_BINARY_NAME} удален${NC}"
fi
# Очищаем кэш Go для OpenIndiana
if [ "$OS" = "SunOS" ]; then
echo -e "${YELLOW}Очистка кэша Go...${NC}"
go clean -cache
echo -e "${GREEN}✓ Кэш Go очищен${NC}"
fi
echo -e "${GREEN}✓ Очистка завершена${NC}"
}
@@ -410,6 +465,23 @@ install_project() {
fi
# Копируем в системную директорию
if [ "$OS" = "SunOS" ]; then
# Для OpenIndiana используем /usr/bin вместо /usr/local/bin
if [ -w "/usr/bin" ]; then
cp "$ROOT_BINARY_NAME" /usr/bin/
echo -e "${GREEN}✓ Установлен в /usr/bin/${PROJECT_NAME}${NC}"
else
echo -e "${YELLOW}Нет прав на запись в /usr/bin. Используем sudo...${NC}"
sudo cp "$ROOT_BINARY_NAME" /usr/bin/
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ Установлен в /usr/bin/${PROJECT_NAME}${NC}"
else
echo -e "${RED}error: Не удалось установить в /usr/bin/${PROJECT_NAME}${NC}"
return 1
fi
fi
else
# Для Linux используем /usr/local/bin
if [ -w "/usr/local/bin" ]; then
cp "$ROOT_BINARY_NAME" /usr/local/bin/
echo -e "${GREEN}✓ Установлен в /usr/local/bin/${PROJECT_NAME}${NC}"
@@ -423,6 +495,7 @@ install_project() {
return 1
fi
fi
fi
# Создание директорий конфигурации
if [ ! -d ~/.config/fush ]; then
@@ -455,7 +528,14 @@ test_project() {
return 1
fi
# Для OpenIndiana отключаем тесты, требующие CGO
if [ "$OS" = "SunOS" ]; then
echo -e "${YELLOW}OpenIndiana: Запуск тестов с CGO_ENABLED=0${NC}"
TEST_OUTPUT=$(CGO_ENABLED=0 $GO test -v ./... 2>&1)
else
TEST_OUTPUT=$($GO test -v ./... 2>&1)
fi
TEST_EXIT_CODE=$?
echo "$TEST_OUTPUT" | while IFS= read -r line; do
@@ -516,6 +596,16 @@ main() {
check_os
check_go_version
# Показываем настройки для OpenIndiana
if [ "$OS" = "SunOS" ]; then
echo -e "${CYAN}Режим OpenIndiana Hipster:${NC}"
echo -e " CGO_ENABLED=${CGO_ENABLED}"
echo -e " GOOS=${GOOS}"
echo -e " GOARCH=${GOARCH}"
echo -e " GOFLAGS=${GOFLAGS}"
echo
fi
# Определяем команду
COMMAND="${1:-all}"