feat: enhance build script for multi-architecture support and add monitoring scripts
This commit is contained in:
168
buildgo.sh
168
buildgo.sh
@ -1,5 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# HMAC File Server - Build Script
|
# HMAC File Server - Multi-Architecture Build Script
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
@ -8,6 +8,7 @@ GREEN='\033[0;32m'
|
|||||||
BLUE='\033[0;34m'
|
BLUE='\033[0;34m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
NC='\033[0m'
|
NC='\033[0m'
|
||||||
|
|
||||||
print_status() {
|
print_status() {
|
||||||
@ -18,16 +19,122 @@ print_info() {
|
|||||||
echo -e "${BLUE}[INFO]${NC} $1"
|
echo -e "${BLUE}[INFO]${NC} $1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print_warning() {
|
||||||
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
print_error() {
|
print_error() {
|
||||||
echo -e "${RED}[ERROR]${NC} $1"
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print_menu() {
|
||||||
|
echo -e "${CYAN}[MENU]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
# Check if Go is installed
|
# Check if Go is installed
|
||||||
if ! command -v go &> /dev/null; then
|
if ! command -v go &> /dev/null; then
|
||||||
print_error "Go is not installed or not in PATH"
|
print_error "Go is not installed or not in PATH"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Architecture selection menu
|
||||||
|
print_status "HMAC File Server v3.2 - Multi-Architecture Build"
|
||||||
|
echo ""
|
||||||
|
print_menu "Select target architecture:"
|
||||||
|
echo " 1) amd64 (x86_64 - Intel/AMD 64-bit)"
|
||||||
|
echo " 2) arm64 (ARM 64-bit - Apple M1/M2, Raspberry Pi 4+)"
|
||||||
|
echo " 3) arm32 (ARM 32-bit - Raspberry Pi 3 and older)"
|
||||||
|
echo " 4) all (Build all architectures)"
|
||||||
|
echo " 5) native (Build for current system)"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Get user choice
|
||||||
|
read -p "Enter your choice (1-5): " choice
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
GOOS="linux"
|
||||||
|
GOARCH="amd64"
|
||||||
|
SUFFIX="_amd64"
|
||||||
|
print_info "Selected: AMD64 (x86_64)"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
GOOS="linux"
|
||||||
|
GOARCH="arm64"
|
||||||
|
SUFFIX="_arm64"
|
||||||
|
print_info "Selected: ARM64"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
GOOS="linux"
|
||||||
|
GOARCH="arm"
|
||||||
|
GOARM="7"
|
||||||
|
SUFFIX="_arm32"
|
||||||
|
print_info "Selected: ARM32 (ARMv7)"
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
print_info "Selected: Build all architectures"
|
||||||
|
BUILD_ALL=true
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
print_info "Selected: Native build (current system)"
|
||||||
|
SUFFIX=""
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_error "Invalid choice. Exiting."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Function to build for a specific architecture
|
||||||
|
build_for_arch() {
|
||||||
|
local goos=$1
|
||||||
|
local goarch=$2
|
||||||
|
local goarm=$3
|
||||||
|
local suffix=$4
|
||||||
|
local output_name="hmac-file-server${suffix}"
|
||||||
|
|
||||||
|
print_status "Building for ${goos}/${goarch}${goarm:+v$goarm}..."
|
||||||
|
|
||||||
|
# Set environment variables
|
||||||
|
export GOOS=$goos
|
||||||
|
export GOARCH=$goarch
|
||||||
|
if [ -n "$goarm" ]; then
|
||||||
|
export GOARM=$goarm
|
||||||
|
else
|
||||||
|
unset GOARM
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build with core files and any available network resilience files
|
||||||
|
go build -o "$output_name" cmd/server/main.go cmd/server/helpers.go cmd/server/config_validator.go cmd/server/config_test_scenarios.go $NEW_FILES
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
print_status "Build successful! Binary created: ./$output_name"
|
||||||
|
|
||||||
|
# Check binary size
|
||||||
|
SIZE=$(du -h "$output_name" | cut -f1)
|
||||||
|
print_info "Binary size: $SIZE"
|
||||||
|
|
||||||
|
# Only test functionality for native builds
|
||||||
|
if [ "$goos" == "$(go env GOOS)" ] && [ "$goarch" == "$(go env GOARCH)" ]; then
|
||||||
|
print_info "Testing binary functionality..."
|
||||||
|
./"$output_name" --help > /dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
print_status "Binary is functional!"
|
||||||
|
else
|
||||||
|
print_warning "Binary test failed (may be cross-compiled)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_info "Cross-compiled binary created (functionality test skipped)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_error "Build failed for ${goos}/${goarch}!"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Reset environment
|
||||||
|
unset GOOS GOARCH GOARM
|
||||||
|
}
|
||||||
|
|
||||||
# Build the application
|
# Build the application
|
||||||
print_status "Building HMAC File Server v3.2 with Network Resilience..."
|
print_status "Building HMAC File Server v3.2 with Network Resilience..."
|
||||||
|
|
||||||
@ -50,28 +157,57 @@ if [ -f "cmd/server/integration.go" ]; then
|
|||||||
print_info "Found network resilience: integration.go"
|
print_info "Found network resilience: integration.go"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Build with core files and any available network resilience files
|
echo ""
|
||||||
go build -o hmac-file-server cmd/server/main.go cmd/server/helpers.go cmd/server/config_validator.go cmd/server/config_test_scenarios.go $NEW_FILES
|
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
# Build based on selection
|
||||||
print_status "Build successful! Binary created: ./hmac-file-server"
|
if [ "$BUILD_ALL" = true ]; then
|
||||||
|
print_status "Building all architectures..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
# Check binary size
|
# Build AMD64
|
||||||
SIZE=$(du -h hmac-file-server | cut -f1)
|
build_for_arch "linux" "amd64" "" "_amd64"
|
||||||
print_info "Binary size: $SIZE"
|
echo ""
|
||||||
|
|
||||||
|
# Build ARM64
|
||||||
|
build_for_arch "linux" "arm64" "" "_arm64"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Build ARM32
|
||||||
|
build_for_arch "linux" "arm" "7" "_arm32"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
print_status "All builds completed!"
|
||||||
|
echo ""
|
||||||
|
print_info "Created binaries:"
|
||||||
|
ls -la hmac-file-server_*
|
||||||
|
|
||||||
|
elif [ -n "$GOOS" ] && [ -n "$GOARCH" ]; then
|
||||||
|
# Single architecture build
|
||||||
|
build_for_arch "$GOOS" "$GOARCH" "$GOARM" "$SUFFIX"
|
||||||
|
else
|
||||||
|
# Native build
|
||||||
|
go build -o hmac-file-server cmd/server/main.go cmd/server/helpers.go cmd/server/config_validator.go cmd/server/config_test_scenarios.go $NEW_FILES
|
||||||
|
|
||||||
# Show help to verify it works
|
|
||||||
print_info "Testing binary functionality..."
|
|
||||||
./hmac-file-server --help > /dev/null 2>&1
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
print_status "Binary is functional!"
|
print_status "Build successful! Binary created: ./hmac-file-server"
|
||||||
|
|
||||||
|
# Check binary size
|
||||||
|
SIZE=$(du -h hmac-file-server | cut -f1)
|
||||||
|
print_info "Binary size: $SIZE"
|
||||||
|
|
||||||
|
# Show help to verify it works
|
||||||
|
print_info "Testing binary functionality..."
|
||||||
|
./hmac-file-server --help > /dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
print_status "Binary is functional!"
|
||||||
|
else
|
||||||
|
print_error "Binary test failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
print_error "Binary test failed"
|
print_error "Build failed!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
print_error "Build failed!"
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create test file for manual testing
|
# Create test file for manual testing
|
||||||
|
0
comprehensive_upload_test.sh
Normal file
0
comprehensive_upload_test.sh
Normal file
0
monitor_nginx.sh
Normal file
0
monitor_nginx.sh
Normal file
0
monitor_server.sh
Normal file
0
monitor_server.sh
Normal file
0
monitor_uploads.sh
Normal file
0
monitor_uploads.sh
Normal file
0
verify_xmpp_upload.sh
Normal file
0
verify_xmpp_upload.sh
Normal file
0
xep0363_analysis.ipynb
Normal file
0
xep0363_analysis.ipynb
Normal file
Reference in New Issue
Block a user