diff --git a/README.md b/README.md new file mode 100644 index 0000000..c3c2163 --- /dev/null +++ b/README.md @@ -0,0 +1,141 @@ +# UP - Embedded Linux Update Server + +A Go-based HTTP server for managing embedded Linux system updates, designed for Orange Pi Zero 2W (Allwinner H618) and similar ARM-based devices. + +## Overview + +This server provides a web interface and REST API for: +- Uploading and managing boot files (U-Boot, kernel, DTB) +- Editing extlinux boot configuration +- Monitoring system temperature +- Remote system reboot +- File version tracking + +## Project Structure + +``` +up/ +├── main.go # Application entry point +├── go.mod # Go module definition +├── up.conf # Environment configuration file +├── api/ # HTTP handlers +│ ├── frontend/ # Embedded web UI (HTML, CSS, JS) +│ ├── Extlinux.go # Boot config read/write router +│ ├── ExtlinuxRead.go # Read extlinux.conf +│ ├── ExtlinuxWrite.go # Write extlinux.conf +│ ├── FileDate.go # Get file version timestamps +│ ├── HandleReboot.go # System reboot endpoint +│ ├── HandleTemperature.go # Temperature monitoring +│ ├── HandleUpload.go # File upload handler +│ ├── MountStatus.go # Mount status checker +│ └── spa.go # SPA file server +├── server/ # Server configuration +│ ├── Configure.go # Route configuration +│ └── Run.go # Server startup (HTTP/HTTPS) +└── utils/ # Utility functions + ├── mtd/ # MTD (Memory Technology Device) utilities + ├── EnsureDir.go # Directory creation + ├── GetTargetFilename.go # Filename resolution by type + ├── LoadEnv.go # Environment loader + ├── MountDevice.go # Device mounting + └── WriteUbootToDevices.go # U-Boot flashing +``` + +## Configuration + +The server uses `up.conf` (dotenv format) for configuration: + +```env +ENABLE_TLS=false # Enable HTTPS +CERT_FILE=cert.crt # TLS certificate path +KEY_FILE=privkey.key # TLS key path +SERVER_ADDRESS=0.0.0.0 # Bind address +SERVER_PORT=8989 # Bind port +MOUNT_POINT=/media # Mount point for target device +DEVICE=/dev/mmcblk1p1 # Target block device +KERNEL_FILE=Image.gz # Kernel image filename +DTB_FILE=sun50i-h618-orangepi-zero2w.dtb # Device tree blob +UBOOT_FILE=uboot.env # U-Boot environment file +EXTLINUX_FILE=extlinux/extlinux.conf # Bootloader config +MAX_FILE_SIZE=200 # Max upload size (MB) +UBOOT_BIN_FILE=u-boot-sunxi-with-spl.bin # U-Boot binary +UBOOT_MAX_SIZE=1 # Max U-Boot size (MB) +MMC_BOOT_OFFSET=8192 # MMC boot offset +``` + +## API Endpoints + +| Endpoint | Method | Description | +|----------|--------|-------------| +| `/` | GET | Web UI (SPA) | +| `/api/mount` | GET | Get mount status | +| `/api/extlinux` | GET | Read extlinux.conf | +| `/api/extlinux` | POST | Write extlinux.conf | +| `/api/filedate` | GET | Get file version date | +| `/api/temperature` | GET | Get CPU temperature | +| `/api/upload` | POST | Upload files | +| `/api/reboot` | POST | Reboot system | + +### API Examples + +**Get Temperature:** +```bash +curl http://localhost:8989/api/temperature +# Response: {"success":true,"temperature":45.2,"unit":"Celsius"} +``` + +**Upload File:** +```bash +curl -X POST -F "type=kernel" -F "file=@Image.gz" http://localhost:8989/api/upload +``` + +**Reboot System:** +```bash +curl -X POST http://localhost:8989/api/reboot +``` + +**Read Boot Config:** +```bash +curl http://localhost:8989/api/extlinux +``` + +**Write Boot Config:** +```bash +curl -X POST -H "Content-Type: application/json" \ + -d '{"content":"default linux\n label linux\n kernel /Image.gz\n"}' \ + http://localhost:8989/api/extlinux +``` + +## Supported Upload Types + +The server supports uploading the following file types: +- `kernel` - Kernel image (Image.gz) +- `dtb` - Device tree blob +- `uboot_bin` - U-Boot bootloader +- `uboot_env` - U-Boot environment +- `extlinux` - Bootloader configuration + +## Building + +```bash +# Build +go build -o up + +# Run +./up +``` + +## Requirements + +- Go 1.26+ +- Root privileges (for mounting devices and rebooting) +- Target storage device (eMMC/SD card) + +## Features + +- **Web Interface**: Embedded SPA frontend for easy management +- **TLS Support**: Optional HTTPS with certificate configuration +- **Progress Tracking**: Real-time upload progress monitoring +- **Version Tracking**: Automatic timestamp logging for uploaded files +- **Safe Reboot**: Graceful unmount and sync before reboot +- **Temperature Monitoring**: CPU thermal sensor readings