Usage

Repod offers the command-line interface (CLI) tool repod-file (for further information refer to its manual: repod-file) to interact with package files and repositories.

Note

The repod-file tool is currently still limited in scope. It can

  • import packages to existing repositories

  • update packages in existing repositories

  • write repository sync databases

  • inspect package files

  • write JSON schema used by repod

  • create archives for package files and signatures

The tool can be used per-user (reading configuration from $XDG_CONFIG_DIR/repod/repod.conf and $XDG_CONFIG_DIR/repod/repod.conf.d/ and storing data below $XDG_STATE_DIR/repod/) or system-wide (reading configuration from /etc/repod.conf and /etc/repod.conf.d/ and storing data below /var/lib/repod/).

By default repod-file can be used without a configuration file, as it will assume a set of defaults (e.g. repository location, default repository name, default repository architecture). However, it is advisable to create a configuration file (see repod.conf), as it offers full control over everything that repod has to offer.

Note

In the future repod will be extended by a web service, which exposes an API (see milestone 0.8.0). This will likely change how interaction with the data maintained by repod takes place.

Using repod-file without a configuration file automatically creates a repository with the name default and the CPU architecture any.

Importing packages

Packages can be imported to the default repository using

repod-file repo importpkg package_a-1.0.0-1-any.pkg.tar.zst default

Assuming that the pkgbase (see package splitting) of package_a-1.0.0-1-any.pkg.tar.zst is package_a, the above command will import the package to the repository named default, write the Sync Database files for it and create the following directory structure:

/home/user/.local/state/repod
├── archive
│   ├── package
│   │   └── p
│   │       └── package_a
│   │           └── package_a-1.0.0-1-any.pkg.tar.zst
│   └── source
├── data
│   ├── pool
│   │   ├── package
│   │   │   └── default
│   │   │       └── package_a-1.0.0-1-any.pkg.tar.zst
│   │   └── source
│   │       └── default
│   └── repo
│       ├── package
│       │   └── default
│       │       └── any
│       │           ├── default.db -> default.db.tar.gz
│       │           ├── default.db.tar.gz
│       │           ├── default.files -> default.files.tar.gz
│       │           ├── default.files.tar.gz
│       │           └── package_a-1.0.0-1-any.pkg.tar.zst -> ../../../../pool/package/default/package_a-1.0.0-1-any.pkg.tar.zst
│       └── source
│           └── default
│               └── any
└── management
    └── default
        └── any
            └── default
                └── package_a.json

Note

The data directory (e.g. $XDG_STATE_DIR/repod/data/) is intended to be exposed by a webserver, as it represents the Binary Repository. The management directory (e.g. $XDG_STATE_DIR/repod/management/ on the other hand is not supposed to be exposed publicly, as it represents the Management Repository and will gain the ability to expose itself using a git backend in the future (see milestone 0.4.0).

Writing sync databases

The writing of Sync Database files (as is done when Importing packages), can also be triggered manually.

repod-file repo writedb default

The above command creates the following directory structure (assuming no packages are present):

/home/user/.local/state/repod
├── archive
│   ├── package
│   └── source
├── data
│   ├── pool
│   │   ├── package
│   │   │   └── default
│   │   └── source
│   │       └── default
│   └── repo
│       ├── package
│       │   └── default
│       │       └── any
│       │           ├── default.db -> default.db.tar.gz
│       │           ├── default.db.tar.gz
│       │           ├── default.files -> default.files.tar.gz
│       │           └── default.files.tar.gz
│       └── source
│           └── default
│               └── any
└── management
    └── default
        └── any
            └── default

Using repositories

Users of the pacman package manager can add a repository maintained by repod to their pacman.conf (see repository sections for details).

We will assume, that repod’s data directory is exposed at https://domain.tld. The following addition to /etc/pacman.conf would then allow users to install package_a from the default repository:

[default]
Server = https://domain.tld/repo/package/$repo/$arch