9a544c60b0001e4fc6fdc83773c0169e2963728f
Remove the old LBI bootstrap/system-state path and make Depot stage and install packages against standard FHS paths instead of rewriting payloads into the custom /system layout. This drops the bootstrap command surface, system-state storage, /system path normalization, and bootstrap chroot helper while moving rootfs state defaults back under /var and aliases under /usr/bin. Preserve hardlink topology throughout the package lifecycle. Add shared fs_copy helpers for symlink/hardlink-aware tree copies, use them for source preparation, binary packages, Rust installs, and lib32 staging, and keep hardlinks intact during stripping, atomic installation, and package archive creation. Replace the external fakeroot wrapper with an internal user-namespace based install command wrapper. Install phases now run as UID/GID 0 inside a private namespace while mapping ownership back to the invoking user on the host. Split the package spec parser into loading, model, config, and tests modules without changing the public PackageSpec surface. Keep strict unknown-key handling, manual source validation, config/appends support, lib32 overrides, and generated output helpers in the new layout. Tighten build and dependency behavior: - emit explicit shared-library selectors when static builds are disabled - apply configure_arch entries for the effective target/lib32 architecture - add CMake sysroot defaults for non-live DEPOT_ROOTFS builds - resolve Rust source_subdir before build hooks and binary installation - satisfy dependencies and local sibling plans through package real_name aliases - accept bare git:// source URLs as HEAD checkouts Update tests around FHS path expectations, namespace fakeroot installs, hardlink-preserving copies/archives/installs/stripping, real_name dependency resolution, configure_arch expansion, CMake sysroot defaults, Rust source subdirs, and git:// URL parsing. Bump suppaftp to 8.0.4 and lzma-rust2 to 0.16.4. Bump Depot to 0.50.0
depot
Depot is a source-based package manager designed for Linux. It focuses on reproducibility, atomic installations, and ease of cross-compilation.
Features
- Source-based: Downloads, extracts, and builds packages from source.
- Dependency Management: Automatically handles build-time and runtime dependencies.
- Atomic Installation: Uses a transactional approach to ensure system consistency.
- Multi-system Build Support: Built-in support for Autotools, CMake, Meson, Rust (Cargo), and custom build scripts.
- Cross-Compilation: Easily build packages for different architectures using cross-toolchains.
- Repository Management: Create and manage local package repositories.
Quick Start
Building Depot
cargo build --release
When installing via Meson (meson install), Depot now generates and installs:
- Shell completions for Bash, Zsh, and Fish
- A
depot(1)man page
Installing a Package
To install a package from a spec file:
depot install packages/zlib.toml
To install from a pre-built package archive:
depot install zlib-1.2.11-1-x86_64.depot.pkg.tar.zst
Command Reference
install <SPEC_OR_ARCHIVE>: Build and install a package.- Resolves a full dependency plan first (binary repos and/or source specs), then executes in dependency order.
- Use
--yesfor non-interactive confirmation/provider selection. - Use
--dry-runto print the plan without performing work. - Use
--test-depsto include declared test dependencies in dependency installation. - Binary package installs verify both checksums and detached minisign signatures (
.sig).
remove <PACKAGE>: Remove an installed package.build <SPEC>: Build a package and create an archive without installing.- Use
--install-depsto automatically install missing build/runtime/test dependencies before fetching/building. - Use
--cleanup-depsto remove dependencies auto-installed for the build after the command finishes; when combined with--install, runtime dependencies are kept. - Missing test dependencies automatically disable test execution unless
--test-depsor[install].test_deps = trueis set.
- Use
update [PACKAGE ...]: Update installed packages from configured repositories.- With no package names, updates every installed package that has a newer repo version available.
- Refreshes source repos first, compares installed package version/revision and UTC completion time against repo metadata, and installs any newly introduced runtime dependencies before applying updates.
check [DIR]: Recursively scanDIR(default.) for package specs and report newer upstream versions when they can be inferred from versioned source URLs.- Supports git tag-style sources such as
...git#v$version. - Also checks tag-style release URLs such as GitHub
releases/download/$version/....
- Supports git tag-style sources such as
info <PACKAGE_OR_SPEC>: Show information about a package.search <QUERY>: Search enabled source/binary repos by package name and provided features.- Use
--filesto search binary repo metadata file lists.
- Use
owns <PATH>: Show which installed package owns a path.list: List all installed packages.repo owns <PATH>: Query binary repo metadata for path ownership.repo create [DIR]: Create a repository database from a directory of packages.repo index [DIR] [--subdir <NAME> ...]: Create/updatedepot-index.tsvat a source repo root for fast source lookup.config: Show current configuration and overrides.
Package Specification
Packages are defined using TOML files. Here is a basic example:
[package]
name = "example"
version = "1.0.0"
description = "An example package"
homepage = "https://example.com"
license = "MIT"
[[source]]
url = "https://example.com/example-$version.tar.gz"
sha256 = "..."
extract_dir = "example-$version"
[build]
type = "autotools"
flags = { configure = ["--enable-feature"] }
[dependencies]
build = ["gcc", "make"]
runtime = ["libc"]
optional = ["bash-completion"]
LTO controls are available via build.flags:
ltoflags: exported asLTOFLAGSuse_lto: defaults totrue; when enabled,ltoflagsare appended toCFLAGS,CXXFLAGS, andLDFLAGS
Configuration
Depot can be configured via /etc/depot.d/ (or relative to the rootfs).
/etc/depot.d/build.toml: System-wide build overrides and flag appends./etc/depot.d/package.toml: Package-specific overrides./etc/depot.d/hooks/*.toml: Transaction hooks forinstall/update/removepre/post phases.
Transaction Hooks
Hook files are TOML and use Starpack-like sections:
[hook]
name = "refresh-cache"
[when]
phase = "post"
operation = ["install", "update"]
packages = ["glibc", "linux*"]
paths = ["usr/lib/*"]
negation = ["usr/lib/debug/*"]
[exec]
command = "ldconfig"
needs_paths = true
needs_paths = true passes affected paths to the command via stdin (newline-separated).
Languages
Rust
99.4%
Meson
0.4%
Shell
0.2%