A robust framework for performing non-disruptive software updates across interconnected processes in complex systems where continuous operation is critical.
The Software Update System enables updating software components in a metrology and control system without interrupting hardware operations. Traditional update approaches require stopping all software processes (drivers) before patching, resulting in significant downtime due to complex initialization sequences. This system addresses this limitation by enabling targeted updates while keeping hardware-interfacing components operational.
- Industrial Control Systems: Update supervisory control software without disrupting equipment operation
- Instrumentation Platforms: Patch measurement and metrology components while maintaining data collection
- Distributed Systems: Update selected components in a network of interconnected processes
- Critical Infrastructure: Apply software patches with minimal service interruption
- Selective Updates: Target specific software modules without shutting down the entire system
- Dependency Management: Handle dependencies between interconnected processes
- Update Validation: Verify update integrity before and after application
- Rollback Capability: Automatically restore previous versions if updates fail
- System Monitoring: Track system health metrics during the update process
- Package Management: Install, remove, and track software packages
- Inter-Process Communication: Coordinate updates across distributed components
- Python 3.6+: Core application language
- Flask: RESTful API for remote update management
- PyYAML: Configuration management
- Pytest: Comprehensive test framework
- Psutil: System resource monitoring
- Schedule: Task scheduling for automated updates
- Multiprocessing: Inter-process communication
To set up the project, follow these steps:
-
Clone the repository:
git clone <repository-url> cd software-update-system -
Install the required dependencies:
pip install -r requirements.txt -
Run the installation script:
./scripts/install.sh # For Linux/MacOr on Windows:
python scripts/install.py
To start the update process manually:
python src/main.py
Configure and run automated updates:
python scripts/update_scheduler.py
-
Modify
config/system_config.yamlto customize:- Update frequency
- Rollback settings
- Notification preferences
- System monitoring parameters
-
Define process dependencies in the configuration to ensure proper update sequencing
Configuration files in the config directory control system behavior:
system_config.yaml: Core update behavior and dependencieslogging_config.yaml: Logging levels and destinations
Unit tests ensure reliability of all system components:
python -m unittest discover -s tests
Or with pytest:
pytest tests/
Contributions are welcome! Please submit a pull request or open an issue for any enhancements or bug fixes.
This project is licensed under the MIT License. See the LICENSE file for more details.