diff --git a/build.sh b/build.sh index b1610f5..dfc19ae 100755 --- a/build.sh +++ b/build.sh @@ -51,9 +51,6 @@ else cd "$FUSH_DIR" fi -# Определение операционной системы -OS=$(uname -s) - # Определение переменных PROJECT_NAME="fush" BINARY_NAME="bin/${PROJECT_NAME}" @@ -67,26 +64,23 @@ 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 +# Функция для настройки окружения OpenIndiana/Solaris +setup_solaris_env() { 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 + # Не используем GOFLAGS с несуществующими флагами + # GOFLAGS оставляем неустановленным или пустым echo -e "${GREEN}✓ CGO отключен для совместимости${NC}" echo -e "${GREEN}✓ Установлены Solaris-специфичные переменные${NC}" -fi + echo -e "${CYAN} CGO_ENABLED=$CGO_ENABLED${NC}" + echo -e "${CYAN} GOOS=$GOOS${NC}" + echo -e "${CYAN} GOARCH=$GOARCH${NC}" + echo -e "${CYAN} GOFLAGS=${GOFLAGS:-<не установлены>}${NC}" + echo "" +} # Функция для сравнения версий (работает без sort -V) version_compare() { @@ -176,9 +170,6 @@ show_help() { 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 } @@ -205,10 +196,15 @@ check_go_version() { # Функция проверки операционной системы check_os() { + OS=$(uname -s) case "$OS" in - Linux|SunOS) + Linux) echo -e "${GREEN}✓ Поддерживаемая ОС: ${OS}${NC}" ;; + SunOS) + echo -e "${GREEN}✓ Поддерживаемая ОС: OpenIndiana/Solaris (${OS})${NC}" + setup_solaris_env + ;; *) echo -e "${RED}error: Неподдерживаемая ОС: ${OS}${NC}" echo -e "${RED}error: fush поддерживает только Linux и OpenIndiana${NC}" @@ -262,11 +258,6 @@ 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 @@ -338,12 +329,6 @@ 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}" @@ -351,11 +336,6 @@ 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}" @@ -440,13 +420,9 @@ 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 - + # Очистка кэша Go (опционально) + echo -e "${YELLOW}Очистка кэша Go...${NC}" + go clean -cache 2>/dev/null || true echo -e "${GREEN}✓ Очистка завершена${NC}" } @@ -465,35 +441,17 @@ 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 + if [ -w "/usr/local/bin" ]; then + cp "$ROOT_BINARY_NAME" /usr/local/bin/ + echo -e "${GREEN}✓ Установлен в /usr/local/bin/${PROJECT_NAME}${NC}" else - # Для Linux используем /usr/local/bin - if [ -w "/usr/local/bin" ]; then - cp "$ROOT_BINARY_NAME" /usr/local/bin/ + echo -e "${YELLOW}Нет прав на запись в /usr/local/bin. Используем sudo...${NC}" + sudo cp "$ROOT_BINARY_NAME" /usr/local/bin/ + if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Установлен в /usr/local/bin/${PROJECT_NAME}${NC}" else - echo -e "${YELLOW}Нет прав на запись в /usr/local/bin. Используем sudo...${NC}" - sudo cp "$ROOT_BINARY_NAME" /usr/local/bin/ - if [ $? -eq 0 ]; then - echo -e "${GREEN}✓ Установлен в /usr/local/bin/${PROJECT_NAME}${NC}" - else - echo -e "${RED}error: Не удалось установить в /usr/local/bin/${PROJECT_NAME}${NC}" - return 1 - fi + echo -e "${RED}error: Не удалось установить в /usr/local/bin/${PROJECT_NAME}${NC}" + return 1 fi fi @@ -528,14 +486,7 @@ 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_OUTPUT=$($GO test -v ./... 2>&1) TEST_EXIT_CODE=$? echo "$TEST_OUTPUT" | while IFS= read -r line; do @@ -596,16 +547,6 @@ 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}"