germ (Gentoo Ebuild Repository Manager) is an experimental package manager for Gentoo that aims to implement the Package Manager Specification.
This is a recreational project and might not be continued or finished.
At this point it uses the existing portage config (/etc/portage and /usr/share/portage/config) and doesn't rely on additional configuration.
This project takes care of package indexing for pkgindex. Other than that, it is mainly for curious Gentoo users and Rust developers who enjoy experimenting with package mangager internals. If you need a reliable package manager, use Portage.
germ-corecurrently expects to find./bin/ebuild.shrelative to the working directory.germ-corecurrently usesanyhowfor error handling, that means there is no way to distinguish between errors for users.- Metadata is currently written to the hardcoded
.cache/metadatapath. - A valid Portage configuration and system paths are assumed and are currently hardcoded.
- Only Git-based repository synchronization is supported.
- The
installcommand is just a placeholder and doesn't install anything.
- repository and profile handling
- repository synchronization (git only)
- ebuild metadata generation and caching
- dependency expression parsing
- package matching based on atoms
- reading installed package database (VDB)
All of this is experimental and might only work for common configurations. There are still many bugs and unsupported edge cases, especially due to the flexibility Portage offers.
Smaller improvements and ideas are collected in TODO.md.
- proper
USE_EXPANDand keyword handling - dependency resolution
- download and build package sources
- binary package handling
- package installation and removal
- PMS 9 support
Clone this repository, build and run it with Cargo:
git clone https://github.com/gcarq/germ
cd germ/
cargo run --release -- info dev-lang/pythonPackage management tool for Gentoo-like systems
Usage: germ [OPTIONS] <COMMAND>
Commands:
info Provides information about the system, useful for troubleshooting
install Install a package
gencache Generate metadata cache for ebuild repositories
sync Sync repositories
help Print this message or the help of the given subcommand(s)
Options:
-v, --verbose... Increase verbosity
-h, --help Print help
-V, --version Print versioncargo test --workspaceContributions and bug reports are welcome. Since the project is still small and unfinished, keep changes focused and explain the problem they solve. LLM assisted PRs might be considered, as long as the code matches the expected code quality.
The code must pass the test suite ./scripts/test.sh and should follow the Rust Style Guide.
- app-shells/bash
- dev-lang/rust
- dev-vcs/git
- sys-apps/sandbox