APT, Yum, Raw, RubyGems, Composer, and Operating-System or Generic Artifact Formats: Concepts, Architecture, and Mental Model
Compare APT, Yum/RPM, RubyGems, Composer, and Raw without flattening their protocols: native indexes and signatures, package identity, hosted/proxy/group support, path-addressed generic files, trust roots, and client-visible repository state.
Learning objectives
- Explain why APT, Yum, RubyGems, Composer, and Raw have different repository metadata and client contracts.
- Identify which formats currently support hosted, proxy, and group repositories in Nexus.
- Separate transport TLS, repository metadata signatures, package signatures, checksums, and Nexus authorization.
- Explain why Raw is appropriate for path-addressed generic files but not a substitute for native package indexes.
- Inspect repository state before changing it and identify which state belongs to Nexus database, blob storage, client cache, or an external trust root.
Version and documentation baseline. Sonatype's current 2026 release notes explicitly list Nexus Repository 3.95.0 (released 2026-08-05), including Composer hosted/group support. Some separate download/version-status pages still show 3.94.1. Treat that mismatch as documentation volatility: record the exact server version first. Required labs in this chapter rely only on long-standing Community-compatible RubyGems and Raw capabilities; Composer-specific hosted/group examples require 3.95.0+ and must be checked against the learner's edition.
1. The practical problem: “a package repository” is not one protocol
In Chapters 06–10, each ecosystem had its own client protocol. This
chapter makes the contrast explicit. A Debian client does not
discover .deb files by browsing arbitrary URLs. It
reads APT metadata that describes distributions, package names,
versions, dependencies, architectures, hashes, and file locations. A
Yum/DNF client uses RPM repository metadata under
repodata/. RubyGems expects gem indexes and gem
metadata. Composer v2 resolves PHP packages through Composer
metadata. A Raw repository, by design, supplies none of those
package-manager semantics.
The operational consequence is important: if you place a valid package file into the wrong repository format, the bytes may be downloadable while the package manager still cannot resolve, verify, update, or select them correctly. The server may be healthy; the protocol model is wrong.
2. Current repository-type matrix
| Format | Proxy | Hosted | Group | Important current boundary |
|---|---|---|---|---|
| APT | Yes | Yes | No | Distribution/flat layout and APT metadata/signing semantics; no APT group recipe. |
| Yum | Yes | Yes | Yes | Repodata depth for hosted; proxy/group metadata can be signed by Nexus. |
| Raw | Yes | Yes | Yes | Path-addressed bytes; no native dependency/index semantics or conflict-resolution logic beyond group member order. |
| RubyGems | Yes | Yes | Yes | Gem name/version identity and generated gem repository information; current docs recommend Nexus 3.53+ and RubyGems 3.4.12+. |
| Composer | Yes | 3.95.0+ | 3.95.0+ | Native support is Composer v2 only. Hosted/group arrived in 3.95.0; entitlement documentation is still inconsistent, so verify edition live. |
The matrix itself is not the lesson. The reason APT lacks a group while Yum/RubyGems/Raw have one is that each format requires implementation-specific aggregation semantics. Never infer group support just because another format has it.
flowchart LR APT[APT client] --> AM[Packages / Release metadata] YUM[DNF or Yum] --> YM[repodata / RPM metadata] GEM[RubyGems client] --> GM[gem index / gemspec metadata] COMP[Composer v2] --> CM[Composer package metadata] RAW[curl or browser] --> RP[path / filename] AM --> NX[Nexus repository format handler] YM --> NX GM --> NX CM --> NX RP --> NX NX --> DB[(Database metadata)] NX --> BLOB[(Blob store bytes)]
3. APT: package files, distributions, indexes, and metadata signatures
APT repositories expose Debian-family packages through a structured
repository. A hosted APT repository requires a distribution and
signing configuration. Nexus generates repository metadata from
uploaded packages and signs the metadata; it does
not sign the individual .deb packages
for you. Package signing and repository-metadata signing are
distinct trust controls.
APT proxy repositories can either pass upstream metadata through or, when configured appropriately, regenerate/re-sign metadata for a configured distribution. The client must use the distribution that matches the repository configuration. An incorrect distribution can look like a “404 problem” even though Nexus itself is reachable.
Modern client trust note. Older examples use a
deprecated global APT key-management command. For current
Debian/Ubuntu clients, prefer a dedicated key file referenced with
signed-by=... in the source definition. The Nexus
concept remains the same: the client must trust the public key
corresponding to the metadata signature.
4. Yum/RPM: repodata, RPM signatures, and repository metadata signatures
A Yum repository contains RPM packages plus generated repository
metadata such as repodata/repomd.xml. Hosted
repositories have a Repodata Depth setting that
determines where Nexus creates metadata and the minimum path depth
accepted for uploaded RPMs. Proxy and group repositories can be
configured with a GPG key so Nexus signs the metadata it generates.
Again, Nexus signing repository metadata does not sign the RPM
package. The package build/publishing pipeline is responsible for
RPM signing if package-signature verification is required. A DNF/Yum
client can independently enforce repo_gpgcheck for
metadata and gpgcheck for packages.
5. RubyGems: name/version identity plus generated repository information
RubyGems packages are .gem files containing code and
gem metadata. Nexus identifies a RubyGems component by name and
version. Hosted repositories are authoritative for private gems,
proxies cache remote gems such as those from rubygems.org, and a
group can expose hosted plus proxy content at one URL. Group member
order matters when the same package/version appears in more than one
member.
The native client adds another state layer: RubyGems has configured
sources and local cache/install locations. A successful
gem install may be satisfied from local client state
unless you deliberately isolate or clear it during a diagnostic.
6. Composer: current support is v2-only and version-sensitive
Nexus native Composer proxy support appeared in 3.75.0; hosted and group repositories arrived in 3.95.0. Current Composer documentation states that Nexus supports the Composer v2 protocol only; a remote repository that exposes only Composer v1 metadata cannot be proxied successfully.
Edition ambiguity in current primary docs. Sonatype's Community onboarding says CE now includes previously Pro-only formats including Composer, while the current Composer page still contains wording that native Composer repositories are available on self-hosted Pro. Because these primary pages conflict, this chapter does not make Composer a mandatory live lab. Verify the recipe list/feature matrix of the exact installed build before teaching a production entitlement as fact.
Composer also has its own public fallback behavior: Packagist is enabled by default unless explicitly disabled. An organization intending Nexus-only resolution must configure Composer so it does not silently bypass the repository boundary.
7. Raw: useful precisely because it has no package-manager semantics
Raw repositories provide HTTP-like paths for arbitrary files: CLI installers, firmware bundles, static websites, release manifests, checksums, exported reports, or generic ZIP/TAR archives. Nexus treats every Raw file as a separate component; it does not infer a package family or group related files into one logical package.
This makes Raw a good match when the consumer already knows the
exact path and does not need native dependency resolution. It makes
Raw a poor match for .deb, RPM, gem, or Composer
packages when you expect the package manager to discover versions,
dependencies, indexes, or trust metadata.
8. Five trust layers that are often confused
| Layer | Question answered | Does not prove |
|---|---|---|
| TLS | Did this client establish an encrypted/authenticated connection to the expected server certificate? | That a package is authorized, signed, or vulnerability-free. |
| Repository metadata signature | Did trusted repository metadata remain unmodified since signing? | That each package payload itself is signed. |
| Package signature | Was this package signed by a key the client trusts? | That the signer is authorized for every repository path or that the package has no CVE. |
| Checksum | Are these bytes identical to the expected digest? | Trusted origin or absence of malicious content. |
| Nexus authorization | May this identity read/add/edit/delete this repository path? | Cryptographic package authenticity. |
9. Read-only inspection before mutation
export NX_URL="http://127.0.0.1:8081"
export LAB="${TMPDIR:-/tmp}/nexus-ch11"
rm -rf "$LAB"
mkdir -p "$LAB/evidence"
chmod 700 "$LAB"
curl -fsS "$NX_URL/service/rest/v1/status" | tee "$LAB/evidence/status.txt"
curl -fsS "$NX_URL/service/rest/v1/repositories" | tee "$LAB/evidence/repositories-before.json"
Record the actual version/edition from the UI as well. If the lab already contains APT, Yum, Raw, RubyGems, or Composer repositories, inspect their type, blob store, online status, and format-specific fields before creating anything.
10. Why this matters in DevOps
Repository-format fidelity turns a file server into an operational package boundary. Native formats let package managers resolve the metadata they understand; Raw gives operations teams a controlled place for artifacts that do not need a package protocol. The correct format reduces bypasses, ambiguous paths, manual installation steps, and home-grown metadata generation.
11. Common wrong mental models
- “If the file downloads, the repository format is correct.” Downloadability is weaker than package-manager compatibility.
- “APT and Yum signing are the same.” Their metadata structures and client trust configuration differ.
- “Nexus signs packages when it signs repository metadata.” It does not.
- “Every native format supports group.” APT currently does not.
- “Raw is universal, so native formats are optional.” Raw is universal only at byte/path transport, not package semantics.
- “Composer support is timeless.” Native proxy, hosted, group, protocol, and edition boundaries changed across releases.
Knowledge check
Why can an APT client fail even when a .deb file is reachable by curl?
APT resolves through repository metadata and distribution semantics. A directly reachable file does not create the Packages/Release metadata contract the client expects.
Does Nexus Yum metadata signing sign the RPM package itself?
No. Yum proxy/group metadata signing covers generated repository metadata. RPM package signing is a separate build/publishing concern.
Which of the chapter formats currently does not support a Nexus group repository?
APT. It supports hosted and proxy repositories, but not group.
When is Raw a good choice?
When consumers know exact paths and do not require a native package index, dependency resolver, or ecosystem metadata contract.
Why is Composer live use version-sensitive in this chapter?
Hosted and group support arrived in 3.95.0, the protocol is v2-only, and current Sonatype edition documentation has conflicting wording that should be verified against the installed build.
12. Summary and next step
Native formats are contracts, not filename categories. APT, Yum, RubyGems, Composer, and Raw differ in index generation, trust roots, client configuration, and repository-type support. The operator's first job is to identify the client protocol and expected metadata before creating a repository.
Lesson 2 turns that model into a controlled multi-format lab with a native RubyGems path and a generic Raw path.
Official references and version notes
- Sonatype: Formats — current proxy/hosted/group support matrix.
- Sonatype: APT Repositories.
- Sonatype: Yum Repositories and GPG signatures for Yum.
- Sonatype: Raw Repositories.
- Sonatype: RubyGems Repositories.
- Sonatype: Composer Repositories.
- Sonatype: Components API — APT, Raw, and RubyGems upload field names.
- Sonatype: Community/Pro feature matrix and Community Edition onboarding.
- Sonatype: 2026 self-hosted release notes.
- RubyGems command reference, Composer documentation, and distribution-specific APT/DNF/RPM documentation for client trust configuration.
Version-sensitive statements were rechecked on 2026-08-26. The chapter uses Nexus Repository 3.95.0 as the verified feature floor because current Sonatype release notes explicitly list it as released on 2026-08-05 and document Composer hosted/group support there. Some adjacent Sonatype download/version-status pages still lag at 3.94.1, so record the exact version/edition on your lab instance before applying version-specific steps. If you are continuing with a later 3.95.x instance from a prior chapter, it satisfies this chapter's 3.95.0 feature floor. Mandatory labs use Community-compatible RubyGems and Raw features and do not depend on the documentation-sensitive Composer entitlement boundary.
Keep the academy open
Support free, practical DevOps education.
Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0
Send only Ethereum/ERC-20 compatible assets to this
address.