Overview
The copr-dist-git component manages source package import and storage in Git repositories. It:- Imports source packages from various sources (URLs, PyPI, RubyGems, Git repos)
- Stores source tarballs in lookaside cache
- Maintains Git repositories for each package
- Generates CGit repository listings
- Provides source package data to builders
Key Technologies
Key Technologies
- Language: Python 3
- Version Control: Git with rpkg
- Web Interface: CGit
- HTTP Server: httpd (Apache)
- Task Queue: Redis
- Parallelization: multiprocessing
Architecture
Directory Structure
Storage Layout
File System Structure
File System Structure
Core Components
Import Dispatcher
Import Dispatcher
Import Dispatcher (import_dispatcher.py)
Manages the worker pool for import tasks:- Fair task scheduling (round-robin per project)
- Parallel worker execution
- Redis-based worker tracking
- Graceful shutdown handling
Import Worker
Import Worker
Package Import Logic
Package Import Logic
Configuration
/etc/copr/copr-dist-git.conf
/etc/copr/copr-dist-git.conf
CGit Integration
Web Interface Configuration
Web Interface Configuration
Systemd Service
Service Management
Service Management
Lookaside Cache
Source Storage
Source Storage
Maintenance
Error Handling
Common Issues
Common Issues
Import Failures
Problem: SRPM download failsWorker Issues
Problem: Worker hangs indefinitelyLogging
Log Files
Log Files
- Main log:
/var/log/copr-dist-git/main.log - Per-task logs:
/var/lib/copr-dist-git/per-task-logs/task-{id}.log
Log Format
Dependencies
Core Packages
python3-copr-common- Shared Copr utilitiespython3-rpkg- RPM packaging toolspython3-requests- HTTP clientpython3-munch- Dictionary utilitiespython3-redis- Redis clientpython3-daemon- Daemonizationdist-git- Base dist-git functionality
External Tools
git- Version controlhttpd- Web servercgit- Git web interfacemock- Build system (for some import methods)tito- RPM building from Git