| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| tar | 2026-01-29 | ||
| zip | 2026-01-29 | ||
| uzip.sh | 2026-01-29 | 10.2 kB | |
| validation.sh | 2026-01-29 | 9.5 kB | |
| distribution.sh | 2026-01-29 | 16.4 kB | |
| orphan.sh | 2026-01-29 | 33.8 kB | |
| server_config.sh | 2026-01-29 | 15.3 kB | |
| snafu_fix.sh | 2026-01-29 | 21.1 kB | |
| system.sh | 2026-01-29 | 3.3 kB | |
| ut.sh | 2026-01-29 | 2.6 kB | |
| extract.sh | 2026-01-29 | 15.4 kB | |
| maptools.sh | 2026-01-29 | 8.2 kB | |
| all_map_dependencies.txt | 2026-01-29 | 39.9 kB | |
| clean_logs.sh | 2026-01-29 | 9.6 kB | |
| clone.sh | 2026-01-29 | 6.0 kB | |
| dependency_whitelist.txt | 2026-01-29 | 2.9 kB | |
| backup.sh | 2026-01-29 | 23.7 kB | |
| check_logs.sh | 2026-01-29 | 4.2 kB | |
| ucc.txt | 2026-01-29 | 2.1 kB | |
| utkeeper.sh | 2026-01-29 | 20.3 kB | |
| utservices.txt | 2026-01-29 | 1.2 kB | |
| webservices.txt | 2026-01-29 | 1.5 kB | |
| README.md | 2026-01-29 | 23.2 kB | |
| README.txt | 2026-01-29 | 13.8 kB | |
| Totals: 24 Items | 284.0 kB | 1 |
UTKeeper99 (UTK)
____ ___ ___________ ____ __. ________ ________
| | \\__ ___/| |/ _| ____ ____ ______ ____ _______ / __ \/ __ \
| | / | | | < _/ __ \_/ __ \ \____ \ _/ __ \\_ __ \\____ /\____ /
| | / | | | | \\ ___/\ ___/ | |_> >\ ___/ | | \/ / / / /
|______/ |____| |____|__ \\___ >\___ >| __/ \___ >|__| /____/ /____/
\/ \/ \/ |__| \/
Comprehensive Unreal Tournament 99 / Web Server Management Suite
By [KoD]Prom - Killers on Demand Clan (since 1999)
๐ Table of Contents
- Overview
- Features
- Requirements
- Installation
- First Run Setup
- Main Menu
- MapTools Features
- Orphan Scanner
- SmartBackup
- Configuration
- Safety Features
- Credits
- Support
- License
๐ฏ Overview
UTKeeper99 is a comprehensive server management suite for Unreal Tournament 99 (UT99) Linux servers. Born from a simple service start/stop script, it has evolved into a full-featured administration toolkit designed to make server management easier and safer.
Forged on Debian 12 Trixie
What Makes UTKeeper99 Special?
- Smart Auto-Configuration - First-run setup with intelligent path detection
- DryRun Mode - Test operations safely before executing
- Modular Design - Easy to expand and customize
- Comprehensive Backup - Integrated SmartBackup system
- Advanced Orphan Detection - Find and remove unused packages safely
โจ Features
Core Features
- โ Auto-Configuration - Intelligent detection of UT server and web paths
- โ Service Management - Start/Stop UT server and Apache/Nginx
- โ Log Monitoring - Real-time system and UT log viewing
- โ MapTools Suite - Complete map management toolkit
- โ SmartBackup - Automated backup with disk space validation
- โ Orphan Scanner - Advanced dependency-based cleanup
- โ DryRun Mode - Safe testing before actual operations
- โ SNAFU Fix - Emergency repair tool for permissions
MapTools Features
- Recursive Archive Extraction (up to 10 levels deep)
- Smart File Collection (gathers all UT files from subdirs)
- UCC Compression (.uz format creation)
- Automated Distribution (to UT server and web redirect)
- Map Cloning (convert CTF/AS/DOM maps to DM format)
- Case-Sensitive Fixes (Linux filename normalization)
- Permission Management (chmod/chown automation)
- Installation Verification (corrupt file detection)
Orphan Scanner Features
- Dependency Extraction - UCC packagedump-based analysis
- Whitelist Generation - 4-source protection system:
- System packages (hardcoded)
- Map dependencies (extracted)
- ServerPackages (from INI)
- Pattern-based (Skins, Fonts, FX, etc.)
- Interactive Cleanup - Choose what to keep/delete
- Web Redirect Cleanup - Remove orphaned .uz files
- 50+ Warning System - Alerts for unusual orphan counts
๐ฆ Requirements
System Requirements
- OS: Linux (tested on Debian 12 Trixie)
- Shell: Bash 4.x or higher
- Tools: sudo, coreutils, grep, sed, awk, find
- Disk Space: Sufficient for backup operations
UT99 Server Requirements
- 32-bit UT99 Server (locally installed)
- UCC Binary (for compression and dependency extraction)
- Web Redirect (optional, but recommended for full functionality)
Additional Packages
# Debian/Ubuntu
sudo apt install zip unzip p7zip-full p7zip-rar unrar bc
# For web server (choose one)
sudo apt install apache2 # or nginx
๐ Installation
Method 1: User Desktop (Recommended for Testing)
# Extract to your desktop
cd ~/Desktop
unzip utkeeper99.zip
cd utkeeper
# Make executable
chmod +x utkeeper.sh
chmod +x libs/*.sh
# Run (will prompt for sudo when needed)
./utkeeper.sh
Method 2: System-Wide Installation
# Install to /opt
sudo mkdir -p /opt/utkeeper99
sudo unzip utkeeper99.zip -d /opt/utkeeper99
cd /opt/utkeeper99
# Set permissions
sudo chmod +x utkeeper.sh libs/*.sh
sudo chown -R root:root .
# Create symlink (optional)
sudo ln -s /opt/utkeeper99/utkeeper.sh /usr/local/bin/utkeeper
# Run
sudo utkeeper
Method 3: User-Local Installation
# Install to home directory
mkdir -p ~/.local/share/utkeeper99
unzip utkeeper99.zip -d ~/.local/share/utkeeper99
cd ~/.local/share/utkeeper99
chmod +x utkeeper.sh libs/*.sh
# Add to PATH (optional)
echo 'export PATH="$HOME/.local/share/utkeeper99:$PATH"' >> ~/.bashrc
source ~/.bashrc
โ๏ธ First Run Setup
On first run, UTKeeper99 will guide you through automatic configuration:
Auto-Detection Features
- UT Server Path Detection
- Searches common paths:
/opt/utserver,/opt/ut99,/home/utserver, etc. -
Validates installation (checks for System, Maps, Textures directories)
-
Web Server Detection
- Auto-detects Apache or Nginx
- Finds DocumentRoot automatically
-
Locates UT redirect directory (searches for .uz files)
-
Service Detection
- Finds UT service:
utserver.service,ut-server.service,ut.service -
Finds web service:
apache2.service,httpd.service,nginx.service -
Ownership Detection
- Auto-detects file owners (user:group)
- Applies to both UT server and web server
Manual Configuration
If auto-detection fails or you want custom paths:
- Run: Option 8 - Configuration
- Follow prompts to set:
- UT Server path
- UT user/group
- Web server path
- Web redirect path
- Web user/group
Configuration File
Settings are saved to .config in project root:
# Example .config
UT_BASE_PATH="/opt/utserver"
UT_USER="utserver"
UT_GROUP="utserver"
WEB_ROOT="/var/www/html"
UT_REDIRECT="/var/www/html/ut"
WEB_USER="www-data"
WEB_GROUP="www-data"
โ ๏ธ Important: Do NOT edit .config manually - use Option 8!
๐ Main Menu
UTKEEPER99 v2.5 - MAIN MENU
1. Start Services - Start UT server + web server
2. Stop Services - Stop UT server + web server
3. System Logs - Real-time system-wide logs
4. UT Server Log - Real-time UT server log
5. Log Overview - Complete system and UT log overview
6. Clean Logs - Delete/truncate system and UT logs
7. MapTools - Map management suite (see below)
8. Configuration - Edit server paths and settings
9. Toggle DryRun - Enable/disable safe testing mode
S. SmartBackup - Backup management system
R. README - Show this file
Q. Quit
๐บ๏ธ MapTools Features
Access via Main Menu โ 7. MapTools
MapTools Menu
1. Extract Archives - Decompress all files in /upload
2. Compress to .uz - Create .uz files with UCC
3. Distribution - Deploy to UT server and web
4. Cleanup Upload - Clear /upload directory
5. SNAFU Fix - Emergency permission repair
6. Verify Installation - Check for corrupt files
7. Clone Maps - Create DM variants from other gametypes
8. Orphan Scanner - Advanced orphan detection (see below)
B. Back to Main Menu
Workflow Example
Installing New Maps:
-
Drop files into
/upload/directory:upload/ โโโ MyMaps.zip โโโ CoolTextures.rar โโโ NewSounds.7z -
Option 1: Extract Archives
- Recursively extracts (up to 10 levels)
- Moves archives to
/upload/installed/for backup -
Collects all UT files to
/upload/ -
Option 2: Compress to .uz
- Creates .uz compressed versions
-
Uses UCC compression
-
Option 3: Distribution
- Maps (.unr) โ UT
/Maps+ Web redirect - Textures (.utx) โ UT
/Textures+ Web redirect - Sounds (.uax) โ UT
/Sounds+ Web redirect - Music (.umx) โ UT
/Music+ Web redirect - Code (.u) โ UT
/System -
Sets correct permissions (chmod/chown)
-
Option 4: Cleanup
- Clears
/upload/(keeps/installed/and/Backups/)
SNAFU Fix
Emergency repair tool for when things go wrong:
- Fixes all chmod (755 for dirs, 644 for files)
- Fixes all chown (UT and web ownership)
- Makes UCC binaries executable
- Normalizes map filenames (case-sensitive)
- Supports map prefixes: DM-, CTF-, DOM-, AS-, MH-, MA-, RA-, BR-
When to use: - for Map extraction from compressed files and distribution - After manual file operations - When UT server can't read files - After web server permission issues - When in doubt!
๐ Orphan Scanner
Access via MapTools โ 8. Orphan Scanner
Advanced dependency-based orphan detection system.
How It Works
Step 1: Extract Map Dependencies
- Scans all .unr files with UCC packagedump
- Extracts Import Table package references
- Takes 10-15 minutes for ~200 maps
- Creates: libs/all_map_dependencies.txt
Step 2: Generate Whitelist
Builds protection list from 4 sources:
-
System Packages (hardcoded)
Core, Engine, Botpack, UnrealShare, UnrealI IpDrv, UWeb, UBrowser, Fire, UTMenu UWindowFonts, LadderFonts -
Map Dependencies (extracted)
- All packages referenced by maps
-
Example: RainFX, Starship, GenFX, UTtech1
-
ServerPackages (from ut.ini)
- Parses
ServerPackages=lines -
Auto-detects: ut.ini, UnrealTournament.ini, unrealtournament.ini
-
Pattern-Based (filesystem scan)
*kin* - Skins (SoldierSkins, CommandoSkins, etc.) *Fem* - Female skins (GothFem, DacomaFem, SGirlSkins) *Male* - Male skins *ech* - Tech textures (SCTech1, UTtech1, UTtech2) *ont* - Fonts *fx* - Effects *enu* - Menu packages *oice* - Voice packs *nnounce* - Announcer packs
Creates: libs/dependency_whitelist.txt
Step 3: Detect & Delete Orphans
Scans /Textures/*.utx, /Sounds/*.uax, /Music/*.umx
Shows all orphaned files with interactive selection:
Found 28 orphaned packages (39.14 MB)
1) [ ] chaostex.utx 19.53 MB
2) [ ] chaossounds.uax 5.02 MB
3) [ ] SCTech1.utx 4.10 MB
...
Options:
a) Delete ALL orphans
s) Select numbers to DELETE (comma-separated, e.g. 1,5,8)
k) Select numbers to KEEP (comma-separated, everything else deleted)
c) Cancel (back to menu)
Step 4: Web Redirect Cleanup
Scans web redirect for orphaned .uz files: - Checks if original file exists on UT server - Supports all extensions: .unr, .utx, .uax, .umx, .u, .int, .ini - Case-insensitive matching
Safety Features
- โ 50+ Warning - Alerts if too many orphans (suggests reinstall)
- โ Whitelist Protection - Multiple layers of protection
- โ Interactive Selection - Choose exactly what to delete
- โ Cancel Anytime - No changes until confirmed
- โ Read-Only Scanning - Detection doesn't modify anything
Workflow Example
# First time setup (do once)
1. Extract Map Dependencies # 10-15 min, creates dependency database
2. Generate Whitelist # Few seconds, creates protection list
# Regular use (after adding/removing maps)
1. Extract Map Dependencies # Re-scan if maps changed
2. Generate Whitelist # Always regenerate after extraction
3. Detect & Delete Orphans # Clean up unused packages
# Web cleanup (as needed)
4. Web Redirect Cleanup # Remove orphaned .uz files
๐พ SmartBackup
Access via Main Menu โ S. SmartBackup
Comprehensive backup system with safety checks.
Features
- Disk Space Validation - Checks available space before backup
- Size Estimation - Shows backup size before creation
- Timestamp Format - YYMMDD-HHMM for easy sorting
- Selective Backup - UT server, web redirect, or both
- Backup Management - List, delete by age, restore
- Script Backup - Includes UTKeeper itself + /upload/installed
SmartBackup Menu
1. Backup UT Server - Backup entire UT installation
2. Backup Web Redirect - Backup web redirect directory
3. Backup Both - UT + Web in one operation
4. Backup This Script - Backup UTKeeper + /upload/installed
5. List Backups - Show all available backups
6. Delete Old Backups - Remove backups by age
7. Show Disk Space - Current usage statistics
B. Back to Main Menu
Backup Location
All backups saved to: ./Backups/
Backups/
โโโ ut_backup_260127-1430.zip # UT server backup
โโโ web_backup_260127-1432.zip # Web redirect backup
โโโ both_backup_260127-1435.zip # Combined backup
โโโ script_backup_260127-1440.zip # UTKeeper backup
Backup Strategy
Recommended Schedule:
- Before major changes - Always backup before running Distribution
- Weekly - Regular UT server backups
- After map installs - Backup after successful installations
- Before orphan cleanup - Backup before deleting orphans
Retention:
- Keep last 7 daily backups
- Keep last 4 weekly backups
- Keep monthly backups for 6 months
๐ง Configuration
Access via Main Menu โ 8. Configuration
Interactive Configuration Wizard
Guides you through all settings with intelligent defaults:
[1/7] UT Server Installation Path
Path [/opt/utserver]: _
[2/7] UT Server Owner (User)
User [utserver]: _
[3/7] UT Server Owner (Group)
Group [utserver]: _
[4/7] UT Server Log Directory
Log Path [/opt/utserver/Logs]: _
[5/7] Web Server Document Root
Path [/var/www/html]: _
[6/7] UT Redirect Directory (for .uz files)
Path [/var/www/html/ut]: _
[7/7] Web Server Owner
User [www-data]: _
Group [www-data]: _
Validation Features
- โ Path Existence - Warns if path doesn't exist
- โ User/Group Check - Validates system users/groups
- โ UT Installation - Verifies complete UT structure
- โ Continue Anyway - Option to save invalid paths (for later creation)
- โ Summary Review - Shows all settings before saving
Configuration Summary
Before saving, reviews all settings:
=========================================================================
CONFIGURATION SUMMARY
=========================================================================
UT SERVER:
Installation: /opt/utserver
Owner: utserver:utserver
Logs: /opt/utserver/Logs
Service: utserver.service (auto-detected)
WEB SERVER:
Document Root: /var/www/html
UT Redirect: /var/www/html/ut
Owner: www-data:www-data
Service: apache2.service (auto-detected)
UTKEEPER:
Project Root: /home/user/Desktop/utkeeper
Upload Dir: /home/user/Desktop/utkeeper/upload
Config File: /home/user/Desktop/utkeeper/.config
=========================================================================
Save this configuration? (Y/n): _
๐ก๏ธ Safety Features
UTKeeper99 includes multiple layers of safety to prevent accidents:
DryRun Mode
Toggle via Main Menu โ 9. Toggle DryRun
When enabled: - โ Shows what WOULD happen - โ No actual file operations - โ No deletions - โ No moves/copies - โ Does NOT execute changes
Always test in DryRun first!
Critical Path Protection
- โ Rejects
/as a path - โ Warns about system directories
- โ Validates UT installation structure
- โ Checks for write permissions
Backup Integration
- โ SmartBackup before major operations
- โ Archives moved to /installed instead of deleted
- โ Disk space checks before operations
- โ Permission validation
User Confirmations
- โ ๏ธ Deletion operations require typing "DELETE" or "DELETE ALL"
- โ ๏ธ Major operations show summary before execution
- โ ๏ธ Interactive selection for orphan cleanup
- โ ๏ธ Cancel options everywhere
SNAFU Fix
Emergency repair tool: - Fixes permissions when things go wrong - Normalizes filenames - Restores ownership - Safe to run multiple times
๐ Directory Structure
utkeeper/
โโโ utkeeper.sh # Main script
โโโ .config # Configuration (auto-generated)
โโโ README.txt # This file (text version)
โโโ README.md # This file (markdown version)
โ
โโโ libs/ # Core modules
โ โโโ backup.sh # Backup system
โ โโโ check_logs.sh # Log viewing
โ โโโ clean_logs.sh # Log cleanup
โ โโโ clone.sh # Map cloning
โ โโโ distribution.sh # File distribution
โ โโโ extract.sh # Archive extraction
โ โโโ maptools.sh # MapTools menu
โ โโโ orphan.sh # Orphan scanner
โ โโโ server_config.sh # Configuration wizard
โ โโโ snafu_fix.sh # Emergency repair
โ โโโ system.sh # System management
โ โโโ ut.sh # UT service control
โ โโโ uzip.sh # UCC compression
โ โโโ validation.sh # Installation verification
โ
โโโ examples/ # Example configurations
โ โโโ ucc.txt # UCC binary info
โ โโโ utservices.txt # UT systemd service examples
โ โโโ webservices.txt # Web server service examples
โ
โโโ upload/ # Working directory (user files)
โ โโโ installed/ # Archive backup
โ
โโโ Backups/ # Backup storage
โโโ ut_backup_*.zip
โโโ web_backup_*.zip
โโโ script_backup_*.zip
๐จ UCC Binary Update
The UCC binary is used for compression (.uz creation) and dependency extraction.
Location: UT_BASE_PATH/System/ucc-bin
If your UCC is from a UT client (not server), it may not support compression.
Update UCC (if needed)
- Check
examples/ucc.txtfor UCC binary info - Replace your UCC with a server-compatible version
- Make executable:
chmod +x System/ucc-bin System64/ucc-bin
Note: SNAFU Fix automatically sets UCC permissions.
โก Quick Start Guide
For New Users
# 1. Extract and setup
unzip utkeeper99.zip
cd utkeeper
chmod +x utkeeper.sh libs/*.sh
# 2. First run (auto-configure)
./utkeeper.sh
# Follow configuration wizard
# 3. Test in DryRun
# Main Menu โ 9. Toggle DryRun
# 4. Test MapTools
# Drop a test file in upload/
# Main Menu โ 7. MapTools
# Try each option (Extract, Compress, Distribution, Cleanup)
# 5. Create backup
# Main Menu โ S. SmartBackup
# Option 1: Backup UT Server
# 6. Disable DryRun when ready
# Main Menu โ 9. Toggle DryRun
For Experienced Users
# Quick install
sudo unzip utkeeper99.zip -d /opt/utkeeper99
cd /opt/utkeeper99
sudo chmod +x utkeeper.sh libs/*.sh
# Auto-configure
sudo ./utkeeper.sh
# Accept defaults or customize
# Map installation workflow
# 1. Drop files to /opt/utkeeper99/upload/
# 2. Main Menu โ 7 โ 1 (Extract)
# 3. Main Menu โ 7 โ 2 (Compress)
# 4. Main Menu โ 7 โ 3 (Distribution)
# 5. Main Menu โ 7 โ 4 (Cleanup)
# Orphan cleanup (first time)
# 1. Main Menu โ 7 โ 8 โ 1 (Extract Dependencies) - takes time!
# 2. Main Menu โ 7 โ 8 โ 2 (Generate Whitelist)
# 3. Main Menu โ 7 โ 8 โ 3 (Detect & Delete)
๐ Troubleshooting
Common Issues
"ERROR: PROJECT_ROOT not set!"
- You called a lib script directly
- Always run: ./utkeeper.sh
"Config file not found" - Run: Main Menu โ 8. Configuration - Complete the setup wizard
"UCC binary not found"
- Check: UT_BASE_PATH/System/ucc-bin
- See examples/ucc.txt for replacement
"Permission denied"
- Run with: sudo ./utkeeper.sh
- Or fix ownership: sudo chown -R $USER:$USER .
"No orphans found" (but you know there are some) - Re-run: Extract Dependencies (Option 1) - Then: Generate Whitelist (Option 2) - The database may be outdated
"Too many orphans (50+)" - This indicates a problem - Consider clean UT reinstall - Or review whitelist patterns
Log Files
Check for errors:
# System logs
sudo journalctl -u utserver -n 50
# UT server log
tail -f /opt/utserver/System/UnrealTournament.log
# Apache/Nginx logs
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/nginx/error.log
Getting Help
- Read the README (you're here!)
- Check
examples/directory for service configs - Test in DryRun mode first
- Create SmartBackup before risky operations
- Use SNAFU Fix if permissions break
๐ Credits
Original Authors
UTKeeper99 - Author: [KoD]Prom - Clan: Killers on Demand (since 1999) - Year: 2026 - Website: http://killersondemand.ddns.net
uzip 1.0 - Author: [es]Rush - Copyright: 2005 - Contact: rush@u.one.pl, PM on unrealadmin.org
ASH (abfackeln's server utilities) 0.6 - Author: abfackeln@abfackeln.com - Copyright: 2001, 2002 - License: GNU GPL v2+
Special Thanks
Greetings to: - BBWG, THCO, ASN, UTClanDortmund - Baumkuschler, MercedesBenzClan - UnrealAdmin.org, OldUnreal.com - UnrealArchive.org, ut99.org - utzone.de, ut99maps.net - All MasterServer operators - The entire UT99 community
Code Review
AI-assisted code review and best practices: Claude. ai (01/2026)
In Memory
Dedicated to [KoD] clan members and all the LAN parties with "Blauer-Klaus" (blue menthol schnaps).
"You can't kill an idea. Ideas are bulletproof!"
๐ License
GNU General Public License
UTKeeper99 is free software and comes with ABSOLUTELY NO WARRANTY!
- โ Free to use
- โ Free to modify
- โ Keep original credits
- โ NO commercial use
- โ NO reselling
Run at your own risk!
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
๐ Support & Community
Resources
- Website: http://killersondemand.ddns.net
- UT99 Community: UnrealAdmin.org
- Archives: UnrealArchive.org
- Maps: ut99maps.net
- General: ut99.org, utzone.de
Bug Reports & Feature Requests
Note: This may be the final version. I might not update or accept pull requests. Take it as is - it works for me! ๐
Philosophy
This script started simple and grew organically. It's done "just for fun" and as proof of existence. If it helps someone else, that's a bonus!
๐ฎ Final Words
Stay healthy and smash some fascists!
>>> GL & HF! <<<
[KoD]Prom
Keep the archive intact. Thank you!
Version: 2.5 | Last Updated: January 2026