Update build.sh
This commit is contained in:
92
build.sh
92
build.sh
@@ -51,6 +51,9 @@ 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}"
|
||||||
@@ -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//')
|
GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//')
|
||||||
REQUIRED_VERSION="1.26.0"
|
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)
|
# Функция для сравнения версий (работает без sort -V)
|
||||||
version_compare() {
|
version_compare() {
|
||||||
# Удаляем префикс 'v' если есть
|
# Удаляем префикс 'v' если есть
|
||||||
@@ -147,6 +171,15 @@ show_help() {
|
|||||||
echo -e " $0 install # Собрать и установить"
|
echo -e " $0 install # Собрать и установить"
|
||||||
echo -e " $0 run # Собрать и запустить"
|
echo -e " $0 run # Собрать и запустить"
|
||||||
echo
|
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
|
# Функция проверки версии Go
|
||||||
@@ -172,7 +205,6 @@ check_go_version() {
|
|||||||
|
|
||||||
# Функция проверки операционной системы
|
# Функция проверки операционной системы
|
||||||
check_os() {
|
check_os() {
|
||||||
OS=$(uname -s)
|
|
||||||
case "$OS" in
|
case "$OS" in
|
||||||
Linux|SunOS)
|
Linux|SunOS)
|
||||||
echo -e "${GREEN}✓ Поддерживаемая ОС: ${OS}${NC}"
|
echo -e "${GREEN}✓ Поддерживаемая ОС: ${OS}${NC}"
|
||||||
@@ -230,6 +262,11 @@ 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
|
||||||
@@ -301,6 +338,12 @@ 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}"
|
||||||
@@ -308,6 +351,11 @@ 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}"
|
||||||
|
|
||||||
@@ -392,6 +440,13 @@ clean_project() {
|
|||||||
echo -e "${GREEN}✓ Файл ${ROOT_BINARY_NAME} удален${NC}"
|
echo -e "${GREEN}✓ Файл ${ROOT_BINARY_NAME} удален${NC}"
|
||||||
fi
|
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}"
|
echo -e "${GREEN}✓ Очистка завершена${NC}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -410,6 +465,23 @@ 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}"
|
||||||
@@ -423,6 +495,7 @@ install_project() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Создание директорий конфигурации
|
# Создание директорий конфигурации
|
||||||
if [ ! -d ~/.config/fush ]; then
|
if [ ! -d ~/.config/fush ]; then
|
||||||
@@ -455,7 +528,14 @@ 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
|
||||||
@@ -516,6 +596,16 @@ 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