Update build.sh
This commit is contained in:
92
build.sh
92
build.sh
@@ -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}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user