Implement unified OGP agent with platform detection and conditional logic
Co-authored-by: iaretechnician <2749183+iaretechnician@users.noreply.github.com>
This commit is contained in:
parent
89c26a4577
commit
3c9bdde9a3
4 changed files with 926 additions and 0 deletions
82
AGENT_UNIFICATION.md
Normal file
82
AGENT_UNIFICATION.md
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
# OGP Agent Unification
|
||||
|
||||
## Overview
|
||||
This project unifies the Linux and Windows OGP (Open Game Panel) agent files into a single cross-platform agent that works on both Linux and Windows/Cygwin systems.
|
||||
|
||||
## Key Platform-Specific Differences Addressed
|
||||
|
||||
### 1. SteamCMD Binary Paths
|
||||
- **Linux**: Uses `steamcmd.sh`
|
||||
- **Windows**: Uses `steamcmd.exe`
|
||||
- **Solution**: Platform-conditional constant `STEAMCMD_CLIENT_BIN`
|
||||
|
||||
### 2. Sudo Functionality
|
||||
- **Linux**: Full sudo support with password-based authentication
|
||||
- **Windows**: No sudo functionality (different permission model)
|
||||
- **Solution**: Conditional sudo functions that are no-ops on Windows
|
||||
|
||||
### 3. User Management
|
||||
- **Linux**: Uses `LINUX_USER_PER_GAME_SERVER` and `SERVER_RUNNER_USER`
|
||||
- **Windows**: Uses `USER_RUNNING_SCRIPT` with Cygwin-specific fallbacks
|
||||
- **Solution**: Platform-conditional user constants
|
||||
|
||||
### 4. Log Rotation
|
||||
- **Linux**: Automated log rotation functionality
|
||||
- **Windows**: Static log handling
|
||||
- **Solution**: Conditional log rotation code block
|
||||
|
||||
### 5. Screen Configuration
|
||||
- **Linux**: Dynamic screenrc file modification with temporary files
|
||||
- **Windows**: Static screenrc usage with basic screen session cleanup
|
||||
- **Solution**: Conditional screen configuration logic
|
||||
|
||||
### 6. File Permissions
|
||||
- **Linux**: Complex permission management using chmod, setfacl, chattr
|
||||
- **Windows**: Simpler permission model
|
||||
- **Solution**: Linux-only permission functions
|
||||
|
||||
### 7. Process Execution
|
||||
- **Linux**: Bash scripts with respawn logic and Wine environment variables
|
||||
- **Windows**: Batch files with priority/affinity control and Cygwin path conversion
|
||||
- **Solution**: Platform-specific `create_screen_cmd` and `create_screen_cmd_loop` functions
|
||||
|
||||
### 8. Path Handling
|
||||
- **Linux**: Standard Unix paths
|
||||
- **Windows**: Cygwin path conversion using `cygpath -wa`
|
||||
- **Solution**: Platform-specific path handling in `replace_OGP_Env_Vars`
|
||||
|
||||
## Implementation Strategy
|
||||
|
||||
The unified agent uses:
|
||||
1. **Platform Detection**: `$^O` variable to detect Windows/Cygwin vs Linux
|
||||
2. **Conditional Constants**: Platform-specific values set at compile time
|
||||
3. **Conditional Logic**: Runtime platform checks for different behaviors
|
||||
4. **Function Overloading**: Same function names with platform-specific implementations
|
||||
|
||||
## Files
|
||||
|
||||
- `ogp_agent_unified.pl`: The unified agent file
|
||||
- `AGENT_UNIFICATION.md`: This documentation
|
||||
- `_agent-linux/`: Original Linux agent (preserved)
|
||||
- `_agent-windows/`: Original Windows agent (preserved)
|
||||
|
||||
## Testing
|
||||
|
||||
The unified agent can be tested on both platforms:
|
||||
- Linux: Standard Perl environment
|
||||
- Windows: Cygwin with Perl environment
|
||||
|
||||
## Deployment
|
||||
|
||||
To use the unified agent:
|
||||
1. Copy `ogp_agent_unified.pl` to the target system
|
||||
2. Ensure all required Perl modules are installed
|
||||
3. Run with same command-line options as original agents
|
||||
4. The agent will automatically detect the platform and behave appropriately
|
||||
|
||||
## Benefits
|
||||
|
||||
1. **Single Codebase**: Easier maintenance and updates
|
||||
2. **Reduced Duplication**: No need to maintain two separate files
|
||||
3. **Consistent Features**: New features automatically work on both platforms
|
||||
4. **Simplified Deployment**: One file works everywhere
|
||||
Loading…
Add table
Add a link
Reference in a new issue