deb-mock/DEBIAN_DEPENDENCY_ANALYSIS.md
robojerk 45c124637b
Some checks failed
Comprehensive CI/CD Pipeline / Build and Test (push) Failing after 2m1s
Comprehensive CI/CD Pipeline / Security Audit (push) Successful in 46s
Comprehensive CI/CD Pipeline / Package Validation (push) Successful in 1m7s
Comprehensive CI/CD Pipeline / Status Report (push) Has been skipped
builds, initial testing builds, packaging, ci workflow
2025-09-04 12:55:35 -07:00

248 lines
7.4 KiB
Markdown

# Debian Dependency Analysis: deb-mock vs Fedora mock
## Overview
This document analyzes the dependency structure of our `deb-mock` packages compared to Fedora's `mock` packages, showing how Debian's dependency system works.
## Fedora Mock Dependencies (Your Analysis)
### Core Package Dependencies
```bash
$ dnf repoquery --requires mock
/usr/bin/bash
/usr/bin/python3
coreutils
createrepo_c # Repository metadata generation
mock-configs
mock-filesystem = 6.1-1.fc42
mock-filesystem = 6.3-1.fc42
pigz
procps-ng
python(abi) = 3.13
python3-backoff
python3-distro
python3-jinja2
python3-pyroute2
python3-requests
python3-rpm
python3-templated-dictionary >= 1.5
shadow-utils
systemd
systemd-container
tar
usermode
util-linux
```
### Subpackage Dependencies
```bash
$ dnf repoquery --requires mock-filesystem
shadow-utils
$ dnf repoquery --requires mock-scm
mock = 6.1-1.fc42
mock = 6.3-1.fc42
python(abi) = 3.13
$ dnf repoquery --requires mock-rpmautospec
mock = 6.1-1.fc42
mock = 6.3-1.fc42
python(abi) = 3.13
python3-rpmautospec-core
$ dnf repoquery --requires mock-lvm
lvm2
mock = 6.1-1.fc42
mock = 6.3-1.fc42
python(abi) = 3.13
```
## Debian deb-mock Dependencies
### 1. **deb-mock** (Core Package)
```debian
Depends: ${python3:Depends}, ${misc:Depends},
python3-click (>= 8.0.0),
python3-yaml (>= 6.0),
python3-jinja2 (>= 3.0.0),
python3-requests (>= 2.25.0),
sbuild, schroot, debootstrap,
systemd-container,
deb-mock-filesystem,
deb-mock-configs
Recommends: deb-mock-plugins, ccache,
python3-pytest, python3-pytest-cov
```
**Dependency Analysis:**
- **`${python3:Depends}`** - Automatic Python 3 dependencies (equivalent to `python(abi) = 3.13`)
- **`${misc:Depends}`** - Miscellaneous dependencies (equivalent to `coreutils`, `tar`, etc.)
- **`python3-click`** - CLI framework (equivalent to Fedora's `python3-click`)
- **`python3-yaml`** - YAML processing (equivalent to Fedora's `python3-yaml`)
- **`python3-jinja2`** - Template engine (equivalent to Fedora's `python3-jinja2`)
- **`python3-requests`** - HTTP library (equivalent to Fedora's `python3-requests`)
- **`sbuild`** - Debian build tool (equivalent to Fedora's build tools)
- **`schroot`** - Chroot management (equivalent to Fedora's chroot tools)
- **`debootstrap`** - Bootstrap tool (equivalent to Fedora's bootstrap tools)
- **`systemd-container`** - Container management (same as Fedora)
- **`deb-mock-filesystem`** - Our filesystem package (equivalent to `mock-filesystem`)
- **`deb-mock-configs`** - Our configs package (equivalent to `mock-configs`)
### 2. **deb-mock-filesystem** (Filesystem Package)
```debian
Depends: ${misc:Depends}, shadow-utils
```
**Dependency Analysis:**
- **`${misc:Depends}`** - Basic system dependencies
- **`shadow-utils`** - User/group management (same as Fedora)
### 3. **deb-mock-configs** (Configuration Package)
```debian
Depends: ${misc:Depends}, deb-mock
```
**Dependency Analysis:**
- **`${misc:Depends}`** - Basic system dependencies
- **`deb-mock`** - Depends on core package (equivalent to `mock = 6.1-1.fc42`)
### 4. **deb-mock-plugins** (Plugin Package)
```debian
Depends: ${misc:Depends}, deb-mock, python3-click
```
**Dependency Analysis:**
- **`${misc:Depends}`** - Basic system dependencies
- **`deb-mock`** - Depends on core package (equivalent to `mock = 6.1-1.fc42`)
- **`python3-click`** - CLI framework for plugin commands
### 5. **deb-mock-dev** (Development Package)
```debian
Depends: ${misc:Depends}, deb-mock, python3-dev
```
**Dependency Analysis:**
- **`${misc:Depends}`** - Basic system dependencies
- **`deb-mock`** - Depends on core package (equivalent to `mock = 6.1-1.fc42`)
- **`python3-dev`** - Python development headers (equivalent to `python(abi) = 3.13`)
### 6. **deb-mock-cache** (Cache Package)
```debian
Depends: ${misc:Depends}, deb-mock, ccache
Recommends: deb-mock-plugins
```
**Dependency Analysis:**
- **`${misc:Depends}`** - Basic system dependencies
- **`deb-mock`** - Depends on core package (equivalent to `mock = 6.1-1.fc42`)
- **`ccache`** - Compiler cache (equivalent to Fedora's `ccache`)
- **`deb-mock-plugins`** - Recommended for full functionality
## Dependency Comparison Table
| Fedora Package | Debian Equivalent | Dependencies |
|----------------|-------------------|--------------|
| **mock** | **deb-mock** | Core dependencies + subpackages |
| **mock-filesystem** | **deb-mock-filesystem** | `shadow-utils` only |
| **mock-scm** | **deb-mock-plugins** | `mock` + `python(abi)` |
| **mock-rpmautospec** | **deb-mock-plugins** | `mock` + `python(abi)` + specific libs |
| **mock-lvm** | **deb-mock-plugins** | `lvm2` + `mock` + `python(abi)` |
## Key Differences
### 1. **Dependency Types**
- **Fedora**: Uses `Requires:` for all dependencies
- **Debian**: Uses `Depends:` (required) and `Recommends:` (optional)
### 2. **Automatic Dependencies**
- **Fedora**: Lists all dependencies explicitly
- **Debian**: Uses `${python3:Depends}` and `${misc:Depends}` for automatic dependency resolution
### 3. **Version Constraints**
- **Fedora**: Uses `= 6.1-1.fc42` for exact versions
- **Debian**: Uses `>= 8.0.0` for minimum versions
### 4. **Subpackage Relationships**
- **Fedora**: Subpackages depend on specific versions of main package
- **Debian**: Subpackages depend on main package without version constraints
## Dependency Resolution Examples
### Installing Core Package
```bash
# Fedora
dnf install mock
# Installs: mock + mock-filesystem + mock-configs + all dependencies
# Debian
apt install deb-mock
# Installs: deb-mock + deb-mock-filesystem + deb-mock-configs + all dependencies
```
### Installing with Plugins
```bash
# Fedora
dnf install mock mock-scm mock-rpmautospec mock-lvm
# Installs: mock + all subpackages + specific dependencies
# Debian
apt install deb-mock deb-mock-plugins
# Installs: deb-mock + deb-mock-plugins + all dependencies
```
### Minimal Installation
```bash
# Fedora
dnf install mock mock-filesystem
# Installs: core + filesystem only
# Debian
apt install deb-mock deb-mock-filesystem
# Installs: core + filesystem only
```
## Build Dependencies
### Fedora Build Dependencies
```bash
BuildRequires: python3-setuptools
BuildRequires: python3-pytest
BuildRequires: python3-yaml
# ... etc
```
### Debian Build Dependencies
```debian
Build-Depends: debhelper (>= 13), dh-python, python3-all,
python3-setuptools, python3-pytest, python3-yaml,
python3-click, python3-jinja2, python3-requests
```
## Dependency Chain Analysis
### Fedora Chain
```
mock → createrepo_c → createrepo_c-libs → libmodulemd
mock → mock-filesystem → shadow-utils
mock → mock-scm → mock + python(abi)
```
### Debian Chain
```
deb-mock → deb-mock-filesystem → shadow-utils
deb-mock → deb-mock-configs → deb-mock
deb-mock → deb-mock-plugins → deb-mock + python3-click
deb-mock → sbuild → build-essential
deb-mock → schroot → shadow-utils
```
## Conclusion
Yes, **all Debian control files have dependencies**! The dependency system in Debian is:
1. **More Flexible**: Uses `Depends:` and `Recommends:` instead of just `Requires:`
2. **More Automatic**: Uses `${python3:Depends}` and `${misc:Depends}` for common dependencies
3. **More Version-Friendly**: Uses `>=` constraints instead of exact versions
4. **More Modular**: Subpackages can depend on main package without version constraints
Our `deb-mock` packaging successfully mirrors Fedora's dependency structure while leveraging Debian's more flexible dependency system!