Update build.sh
This commit is contained in:
95
build.sh
95
build.sh
@@ -51,9 +51,6 @@ else
|
|||||||
cd "$FUSH_DIR"
|
cd "$FUSH_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Определение операционной системы
|
|
||||||
OS=$(uname -s)
|
|
||||||
|
|
||||||
# Определение переменных
|
# Определение переменных
|
||||||
PROJECT_NAME="fush"
|
PROJECT_NAME="fush"
|
||||||
BINARY_NAME="bin/${PROJECT_NAME}"
|
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//')
|
GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//')
|
||||||
REQUIRED_VERSION="1.26.0"
|
REQUIRED_VERSION="1.26.0"
|
||||||
|
|
||||||
# Настройки для OpenIndiana/Solaris
|
# Функция для настройки окружения OpenIndiana/Solaris
|
||||||
if [ "$OS" = "SunOS" ]; then
|
setup_solaris_env() {
|
||||||
echo -e "${YELLOW}Обнаружена OpenIndiana/Solaris, применяются специальные настройки...${NC}"
|
echo -e "${YELLOW}Обнаружена OpenIndiana/Solaris, применяются специальные настройки...${NC}"
|
||||||
|
|
||||||
# Отключаем CGO для Solaris (частая причина проблем)
|
|
||||||
export CGO_ENABLED=0
|
export CGO_ENABLED=0
|
||||||
|
|
||||||
# Устанавливаем специфичные флаги
|
|
||||||
export GOOS=solaris
|
export GOOS=solaris
|
||||||
export GOARCH=amd64
|
export GOARCH=amd64
|
||||||
|
# Не используем GOFLAGS с несуществующими флагами
|
||||||
# Отключаем проверку buildid для инструментов
|
# GOFLAGS оставляем неустановленным или пустым
|
||||||
export GOFLAGS="-buildid= -trimpath"
|
|
||||||
|
|
||||||
# Solaris требует отключения asyncpreempt
|
|
||||||
export GODEBUG=asyncpreemptoff=1
|
|
||||||
|
|
||||||
echo -e "${GREEN}✓ CGO отключен для совместимости${NC}"
|
echo -e "${GREEN}✓ CGO отключен для совместимости${NC}"
|
||||||
echo -e "${GREEN}✓ Установлены Solaris-специфичные переменные${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)
|
# Функция для сравнения версий (работает без sort -V)
|
||||||
version_compare() {
|
version_compare() {
|
||||||
@@ -176,9 +170,6 @@ show_help() {
|
|||||||
echo -e " ${YELLOW}• Поддержка HTTP/HTTPS с редиректами${NC}"
|
echo -e " ${YELLOW}• Поддержка HTTP/HTTPS с редиректами${NC}"
|
||||||
echo -e " ${YELLOW}• Работает на Linux и OpenIndiana/Hipster${NC}"
|
echo -e " ${YELLOW}• Работает на Linux и OpenIndiana/Hipster${NC}"
|
||||||
echo -e " ${YELLOW}• Интеграция Lua скриптов${NC}"
|
echo -e " ${YELLOW}• Интеграция Lua скриптов${NC}"
|
||||||
if [ "$OS" = "SunOS" ]; then
|
|
||||||
echo -e " ${GREEN}• OpenIndiana режим: CGO_ENABLED=0${NC}"
|
|
||||||
fi
|
|
||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,10 +196,15 @@ check_go_version() {
|
|||||||
|
|
||||||
# Функция проверки операционной системы
|
# Функция проверки операционной системы
|
||||||
check_os() {
|
check_os() {
|
||||||
|
OS=$(uname -s)
|
||||||
case "$OS" in
|
case "$OS" in
|
||||||
Linux|SunOS)
|
Linux)
|
||||||
echo -e "${GREEN}✓ Поддерживаемая ОС: ${OS}${NC}"
|
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: Неподдерживаемая ОС: ${OS}${NC}"
|
||||||
echo -e "${RED}error: fush поддерживает только Linux и OpenIndiana${NC}"
|
echo -e "${RED}error: fush поддерживает только Linux и OpenIndiana${NC}"
|
||||||
@@ -262,11 +258,6 @@ install_deps() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Для OpenIndiana используем специальные флаги
|
|
||||||
if [ "$OS" = "SunOS" ]; then
|
|
||||||
export GOFLAGS="-buildid= -trimpath"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Обновляем go.mod и создаем go.sum
|
# Обновляем go.mod и создаем go.sum
|
||||||
echo -e "${YELLOW}Выполнение go mod download...${NC}"
|
echo -e "${YELLOW}Выполнение go mod download...${NC}"
|
||||||
$GO mod download 2>&1 | while IFS= read -r line; do
|
$GO mod download 2>&1 | while IFS= read -r line; do
|
||||||
@@ -338,12 +329,6 @@ build_project() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
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"
|
mkdir -p "$BUILD_DIR"
|
||||||
echo -e "${GREEN}✓ Директория ${BUILD_DIR} создана${NC}"
|
echo -e "${GREEN}✓ Директория ${BUILD_DIR} создана${NC}"
|
||||||
@@ -351,11 +336,6 @@ build_project() {
|
|||||||
# Формируем флаги сборки
|
# Формируем флаги сборки
|
||||||
LDFLAGS="-X main.BuildTime=${BUILD_TIME} -X main.GitCommit=${GIT_COMMIT}"
|
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}"
|
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}"
|
echo -e "${GREEN}✓ Файл ${ROOT_BINARY_NAME} удален${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Очищаем кэш Go для OpenIndiana
|
# Очистка кэша Go (опционально)
|
||||||
if [ "$OS" = "SunOS" ]; then
|
|
||||||
echo -e "${YELLOW}Очистка кэша Go...${NC}"
|
echo -e "${YELLOW}Очистка кэша Go...${NC}"
|
||||||
go clean -cache
|
go clean -cache 2>/dev/null || true
|
||||||
echo -e "${GREEN}✓ Кэш Go очищен${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${GREEN}✓ Очистка завершена${NC}"
|
echo -e "${GREEN}✓ Очистка завершена${NC}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -465,23 +441,6 @@ install_project() {
|
|||||||
fi
|
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
|
if [ -w "/usr/local/bin" ]; then
|
||||||
cp "$ROOT_BINARY_NAME" /usr/local/bin/
|
cp "$ROOT_BINARY_NAME" /usr/local/bin/
|
||||||
echo -e "${GREEN}✓ Установлен в /usr/local/bin/${PROJECT_NAME}${NC}"
|
echo -e "${GREEN}✓ Установлен в /usr/local/bin/${PROJECT_NAME}${NC}"
|
||||||
@@ -495,7 +454,6 @@ install_project() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
# Создание директорий конфигурации
|
# Создание директорий конфигурации
|
||||||
if [ ! -d ~/.config/fush ]; then
|
if [ ! -d ~/.config/fush ]; then
|
||||||
@@ -528,14 +486,7 @@ test_project() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
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)
|
TEST_OUTPUT=$($GO test -v ./... 2>&1)
|
||||||
fi
|
|
||||||
|
|
||||||
TEST_EXIT_CODE=$?
|
TEST_EXIT_CODE=$?
|
||||||
|
|
||||||
echo "$TEST_OUTPUT" | while IFS= read -r line; do
|
echo "$TEST_OUTPUT" | while IFS= read -r line; do
|
||||||
@@ -596,16 +547,6 @@ main() {
|
|||||||
check_os
|
check_os
|
||||||
check_go_version
|
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}"
|
COMMAND="${1:-all}"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user