Update build.sh
This commit is contained in:
95
build.sh
95
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
|
||||
# Очистка кэша Go (опционально)
|
||||
echo -e "${YELLOW}Очистка кэша Go...${NC}"
|
||||
go clean -cache
|
||||
echo -e "${GREEN}✓ Кэш Go очищен${NC}"
|
||||
fi
|
||||
|
||||
go clean -cache 2>/dev/null || true
|
||||
echo -e "${GREEN}✓ Очистка завершена${NC}"
|
||||
}
|
||||
|
||||
@@ -465,23 +441,6 @@ 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}"
|
||||
@@ -495,7 +454,6 @@ install_project() {
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Создание директорий конфигурации
|
||||
if [ ! -d ~/.config/fush ]; then
|
||||
@@ -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_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}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user