# 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!