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

7.4 KiB

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

$ 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

$ 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)

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)

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)

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)

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)

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)

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

# 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

# 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

# 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

BuildRequires: python3-setuptools
BuildRequires: python3-pytest
BuildRequires: python3-yaml
# ... etc

Debian Build Dependencies

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!