Chapter 11Lesson 01165–220 min

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.

APT & YumRubyGemsComposer v2RawNative metadata

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.

Different clients ask different questions
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?

Does Nexus Yum metadata signing sign the RPM package itself?

Which of the chapter formats currently does not support a Nexus group repository?

When is Raw a good choice?

Why is Composer live use version-sensitive in this chapter?

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

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.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0 Send only Ethereum/ERC-20 compatible assets to this address.