🔥 Tremora del Terra: ultimate hmac-file-server fix – final push before the drop 💾🔐
This commit is contained in:
298
BUILD_GUIDE.md
298
BUILD_GUIDE.md
@ -1,298 +0,0 @@
|
|||||||
# Build Guide - HMAC File Server with Network Resilience
|
|
||||||
|
|
||||||
## ✅ Quick Build (Working)
|
|
||||||
|
|
||||||
### 1. Standard Build with Network Resilience
|
|
||||||
```bash
|
|
||||||
# Build with all features (including network resilience)
|
|
||||||
./buildgo.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
**Output:**
|
|
||||||
```
|
|
||||||
[BUILD] Building HMAC File Server v3.2 with Network Resilience...
|
|
||||||
[INFO] Found network resilience: upload_session.go
|
|
||||||
[INFO] Found network resilience: network_resilience.go
|
|
||||||
[INFO] Found network resilience: chunked_upload_handler.go
|
|
||||||
[INFO] Found network resilience: integration.go
|
|
||||||
[BUILD] Build successful! Binary created: ./hmac-file-server
|
|
||||||
[INFO] Binary size: 16M
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Manual Build (Alternative)
|
|
||||||
```bash
|
|
||||||
# Build manually with all network resilience features
|
|
||||||
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 \
|
|
||||||
cmd/server/upload_session.go \
|
|
||||||
cmd/server/network_resilience.go \
|
|
||||||
cmd/server/chunked_upload_handler.go \
|
|
||||||
cmd/server/integration.go
|
|
||||||
```
|
|
||||||
|
|
||||||
## Build Requirements
|
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
- **Go 1.24+** (as specified in go.mod)
|
|
||||||
- **OpenSSL** (optional, for HMAC testing)
|
|
||||||
- **Redis** (optional, for session persistence)
|
|
||||||
|
|
||||||
### Dependencies
|
|
||||||
All dependencies are handled by Go modules:
|
|
||||||
```bash
|
|
||||||
# Download dependencies
|
|
||||||
go mod download
|
|
||||||
|
|
||||||
# Verify dependencies
|
|
||||||
go mod verify
|
|
||||||
|
|
||||||
# View dependency tree
|
|
||||||
go mod graph
|
|
||||||
```
|
|
||||||
|
|
||||||
## Build Options
|
|
||||||
|
|
||||||
### Development Build
|
|
||||||
```bash
|
|
||||||
# Build with debug information
|
|
||||||
go build -gcflags="all=-N -l" -o hmac-file-server-debug cmd/server/*.go
|
|
||||||
|
|
||||||
# Or use the build script in debug mode
|
|
||||||
DEBUG=1 ./buildgo.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Production Build
|
|
||||||
```bash
|
|
||||||
# Optimized production build
|
|
||||||
go build -ldflags="-s -w" -o hmac-file-server cmd/server/*.go
|
|
||||||
|
|
||||||
# With version information
|
|
||||||
VERSION="3.2.1"
|
|
||||||
go build -ldflags="-s -w -X main.version=$VERSION" -o hmac-file-server cmd/server/*.go
|
|
||||||
```
|
|
||||||
|
|
||||||
### Cross-Platform Build
|
|
||||||
```bash
|
|
||||||
# Linux AMD64
|
|
||||||
GOOS=linux GOARCH=amd64 go build -o hmac-file-server-linux-amd64 cmd/server/*.go
|
|
||||||
|
|
||||||
# Linux ARM64 (for ARM servers/Raspberry Pi)
|
|
||||||
GOOS=linux GOARCH=arm64 go build -o hmac-file-server-linux-arm64 cmd/server/*.go
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
GOOS=windows GOARCH=amd64 go build -o hmac-file-server.exe cmd/server/*.go
|
|
||||||
|
|
||||||
# macOS
|
|
||||||
GOOS=darwin GOARCH=amd64 go build -o hmac-file-server-macos cmd/server/*.go
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configuration for Build
|
|
||||||
|
|
||||||
### Enable Network Resilience Features
|
|
||||||
Create or update your `config.toml`:
|
|
||||||
```toml
|
|
||||||
[server]
|
|
||||||
listen_address = ":8080"
|
|
||||||
enable_dynamic_workers = true # Enable dynamic scaling
|
|
||||||
worker_scale_up_thresh = 50 # Scale up threshold
|
|
||||||
worker_scale_down_thresh = 10 # Scale down threshold
|
|
||||||
deduplication_enabled = true # Enable deduplication
|
|
||||||
max_upload_size = "10GB" # Support large files
|
|
||||||
|
|
||||||
[uploads]
|
|
||||||
chunked_uploads_enabled = true # Enable chunked uploads
|
|
||||||
resumable_uploads_enabled = true # Enable resumable uploads
|
|
||||||
chunk_size = "10MB" # Optimal chunk size
|
|
||||||
max_resumable_age = "48h" # Session persistence
|
|
||||||
|
|
||||||
[timeouts]
|
|
||||||
readtimeout = "4800s" # 80 minutes for large files
|
|
||||||
writetimeout = "4800s" # 80 minutes for large files
|
|
||||||
idletimeout = "4800s" # 80 minutes for large files
|
|
||||||
|
|
||||||
[deduplication]
|
|
||||||
enabled = true
|
|
||||||
maxsize = "1GB" # Deduplicate files under 1GB
|
|
||||||
|
|
||||||
[security]
|
|
||||||
secret = "your-super-secret-hmac-key-minimum-64-characters-recommended"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Testing the Build
|
|
||||||
|
|
||||||
### 1. Basic Functionality Test
|
|
||||||
```bash
|
|
||||||
# Test binary works
|
|
||||||
./hmac-file-server --help
|
|
||||||
|
|
||||||
# Test with config file
|
|
||||||
./hmac-file-server --config config.toml
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Test Network Resilience Features
|
|
||||||
```bash
|
|
||||||
# Start server with chunked uploads enabled
|
|
||||||
./hmac-file-server --config config.toml
|
|
||||||
|
|
||||||
# In another terminal, test chunked upload endpoint
|
|
||||||
curl -X POST \
|
|
||||||
-H "X-Filename: test.txt" \
|
|
||||||
-H "X-Total-Size: 1024" \
|
|
||||||
-H "X-Signature: $(echo -n '/upload/chunked' | openssl dgst -sha256 -hmac 'your-secret' | cut -d' ' -f2)" \
|
|
||||||
http://localhost:8080/upload/chunked
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Run Go Tests
|
|
||||||
```bash
|
|
||||||
# Run existing tests
|
|
||||||
go test ./test/...
|
|
||||||
|
|
||||||
# Run with verbose output
|
|
||||||
go test -v ./test/...
|
|
||||||
|
|
||||||
# Run specific tests
|
|
||||||
go test -run TestUpload ./test/
|
|
||||||
```
|
|
||||||
|
|
||||||
## Docker Build (Alternative)
|
|
||||||
|
|
||||||
### Using Existing Docker Setup
|
|
||||||
```bash
|
|
||||||
# Build Docker image
|
|
||||||
./builddocker.sh
|
|
||||||
|
|
||||||
# Or manually
|
|
||||||
docker build -t hmac-file-server .
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run with Docker
|
|
||||||
```bash
|
|
||||||
# Start with docker-compose
|
|
||||||
cd dockerenv
|
|
||||||
docker-compose up -d
|
|
||||||
|
|
||||||
# Or run directly
|
|
||||||
docker run -d \
|
|
||||||
-p 8080:8080 \
|
|
||||||
-p 9090:9090 \
|
|
||||||
-v $(pwd)/config:/etc/hmac-file-server \
|
|
||||||
-v $(pwd)/data:/var/lib/hmac-file-server \
|
|
||||||
hmac-file-server
|
|
||||||
```
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### Build Issues
|
|
||||||
|
|
||||||
#### Missing Dependencies
|
|
||||||
```bash
|
|
||||||
# Clean module cache and re-download
|
|
||||||
go clean -modcache
|
|
||||||
go mod download
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Go Version Issues
|
|
||||||
```bash
|
|
||||||
# Check Go version
|
|
||||||
go version
|
|
||||||
|
|
||||||
# Update Go if needed (Ubuntu/Debian)
|
|
||||||
sudo snap install go --classic
|
|
||||||
|
|
||||||
# Or download from https://golang.org/dl/
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Network Resilience Files Missing
|
|
||||||
```bash
|
|
||||||
# Check if files exist
|
|
||||||
ls -la cmd/server/upload_session.go
|
|
||||||
ls -la cmd/server/network_resilience.go
|
|
||||||
ls -la cmd/server/chunked_upload_handler.go
|
|
||||||
ls -la cmd/server/integration.go
|
|
||||||
|
|
||||||
# If missing, the build will work but without network resilience features
|
|
||||||
# Core functionality remains unchanged
|
|
||||||
```
|
|
||||||
|
|
||||||
### Runtime Issues
|
|
||||||
|
|
||||||
#### Port Already in Use
|
|
||||||
```bash
|
|
||||||
# Check what's using port 8080
|
|
||||||
sudo netstat -tlnp | grep :8080
|
|
||||||
|
|
||||||
# Kill process if needed
|
|
||||||
sudo kill $(sudo lsof -t -i:8080)
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Permission Issues
|
|
||||||
```bash
|
|
||||||
# Make binary executable
|
|
||||||
chmod +x hmac-file-server
|
|
||||||
|
|
||||||
# For system service installation
|
|
||||||
sudo chown root:root hmac-file-server
|
|
||||||
sudo chmod 755 hmac-file-server
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Config File Issues
|
|
||||||
```bash
|
|
||||||
# Validate config syntax
|
|
||||||
./hmac-file-server --config config.toml --validate
|
|
||||||
|
|
||||||
# Use example config as starting point
|
|
||||||
cp config-example-xmpp.toml config.toml
|
|
||||||
```
|
|
||||||
|
|
||||||
## Build Performance
|
|
||||||
|
|
||||||
### Faster Builds
|
|
||||||
```bash
|
|
||||||
# Use build cache
|
|
||||||
export GOCACHE=$(go env GOCACHE)
|
|
||||||
|
|
||||||
# Parallel builds
|
|
||||||
go build -p 4 cmd/server/*.go
|
|
||||||
|
|
||||||
# Skip tests during development
|
|
||||||
go build -a cmd/server/*.go
|
|
||||||
```
|
|
||||||
|
|
||||||
### Smaller Binaries
|
|
||||||
```bash
|
|
||||||
# Strip debug info and symbol table
|
|
||||||
go build -ldflags="-s -w" cmd/server/*.go
|
|
||||||
|
|
||||||
# Use UPX compression (if installed)
|
|
||||||
upx --best hmac-file-server
|
|
||||||
```
|
|
||||||
|
|
||||||
## Deployment
|
|
||||||
|
|
||||||
### System Service
|
|
||||||
```bash
|
|
||||||
# Copy binary to system location
|
|
||||||
sudo cp hmac-file-server /usr/local/bin/
|
|
||||||
|
|
||||||
# Create systemd service
|
|
||||||
sudo cp hmac-file-server.service /etc/systemd/system/
|
|
||||||
sudo systemctl enable hmac-file-server
|
|
||||||
sudo systemctl start hmac-file-server
|
|
||||||
```
|
|
||||||
|
|
||||||
### Reverse Proxy Setup
|
|
||||||
```bash
|
|
||||||
# Nginx configuration
|
|
||||||
sudo cp nginx-hmac-file-server.conf /etc/nginx/sites-available/
|
|
||||||
sudo ln -s /etc/nginx/sites-available/hmac-file-server.conf /etc/nginx/sites-enabled/
|
|
||||||
sudo nginx -t && sudo systemctl reload nginx
|
|
||||||
```
|
|
||||||
|
|
||||||
This build process ensures that:
|
|
||||||
- ✅ **Backward Compatibility**: Works with or without network resilience files
|
|
||||||
- ✅ **Feature Detection**: Automatically includes available network resilience features
|
|
||||||
- ✅ **Zero Downtime**: Existing deployments continue working unchanged
|
|
||||||
- ✅ **Mobile Optimized**: New features specifically address network switching issues
|
|
21
LICENSE_NEW
Normal file
21
LICENSE_NEW
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2025 Alexander Renz
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
Reference in New Issue
Block a user