Build a custom pacman repository from a collection of PKGBUILD directories.
⚠ WARNING: This program is meant to be used within a docker container.
Manifest file is always named build-pacman-repo.yaml
. It contains instruction to build a pacman repository.
Example Manifest File:
```yaml
global-settings: repository: repo/repo.db.tar.gz container: container read-build-metadata: either record-failed-builds: failed-builds.yaml install-missing-dependencies: false clean-before-build: false clean-after-build: false force-rebuild: true pacman: pacman arch-filter: [x86_64] packager: Bob bob@example.com allow-failure: true dereference-database-symlinks: true members: - directory: foo - directory: bar read-build-metadata: pkgbuild clean-before-build: false force-rebuild: true allow-failure: false - directory: bar install-missing-dependencies: true clean-after-build: false pacman: yay - directory: baz read-build-metadata: srcinfo install-missing-dependencies: false clean-before-build: true clean-after-build: false force-rebuild: true pacman: yay allow-failure: false ```
Field Explanations:
Top-Level:
| Field | Type | Description |
|-------------------|--------|------------------------------------------------------------------------------------------------------------------------------------|
| global-settings
| object | Includes global settings from which all members inherit from.
Some settings can be overwritten by member customized properties. |
| member
| list | List all members. |
global-settings
's own fields:
| Field | Type | Required/Optional | Description |
|----------------------------------|--------------------------------|----------------------------------------|------------------------------------------------------------------------------------------------------------------------------------|
| repository
| string
| required | Path to repository file (typically ends with .db.tar.gz
).
It will be passed to repo-add
command after each build. |
| container
| string
| optional, default = .
| Directory that contains all build directories (a.k.a. members). |
| record-failed-builds
| string
| optional | If specified, old failed builds shall be skipped, and new failed builds shall be added to the file. |
| arch-filter
| "any" \| string[]
| optional, default = any
| Specify all CPU architectures to build.
Either any
or an array of strings (e.g. [x86_64, i686]
). |
| packager
| string
| optional, default = Unknown Packager
| Identity of person or entity that produces the packages (i.e. the one who run this program). |
| dereference-database-symlinks
| boolean
| optional, default = false
| If true
, all *.db
and *.files
symlinks will be converted to real files. |
member
's own fields:
| Field | Type | Required/Optional | Description |
|-------------|----------|-------------------|-----------------------------------------------------------------------------------|
| directory
| string
| required | Path to build directory of each member (relative to global-settings.container
). |
Shared Fields: Fields that exist in both global-settings
and member
. If global-settings
and member
both contain a field, member
's field will be prioritized.
| Field | Type | Default
(global-settings
) | Description |
|--------------------------------|---------------------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| read-build-metadata
| either | srcinfo | pkgbuild
| either
| Where to read build metadata:srcinfo
: From .SRCINFO
file.pkgbuild
: From output of makepkg --printsrcinfo
.either
: From .SRCINFO
file if it exists, otherwise execute makepkg --printsrcinfo
. |
| install-missing-dependencies
| boolean
| false
| Install packages found in depends
and makedepends
before each build. |
| clean-before-build
| boolean
| false
| Clean $srcdir
and $pkgdir
before each build. |
| clean-after-build
| boolean
| false
| Clean up after each build. |
| force-rebuild
| boolean
| false
| Force build even if target package already exists. |
| pacman
| string
| pacman
| Package manager program to use.
The program must recognize pacman
's CLI arguments and options. |
| allow-failure
| boolean
| false
| If false
, exits immediately when a build fails.
If true
, ignore build failure should one occurs. |
Listing every member in a manifest file can be a chore. So when there are no members with customized properties, you can generate the manifest file the reflect the build directories instead:
```sh build-pacman-repo print-config \ --repository $repodir/$reponame.db.tar.gz \ --container build-directories \ --require-pkgbuild \ --require-srcinfo \ --with-install-missing-dependencies true \
build-pacman-repo.yaml ```
Note: Replace $repo_dir
with path of your repository directory. This directory would contains all built packages.
Note: Replace $repo_name
with name of your repository file. This file would be fetched by pacman
to check for updates.
/usr/bin/makepkg
with one that allows running as rootThe normal makepkg
script does not allow running as root. While it may make sense in a user's machine, it inconveniences a Docker container.
sh
build-pacman-repo patch-makepkg --replace
sh
build-pacman-repo build
Note: Make sure that build-pacman-repo.yaml
file exists in current working directory.
sh
build-pacman-repo help
sh
build-pacman-repo --help
sh
build-pacman-repo help $command
sh
build-pacman-repo $command --help
pacman-repo-builder/action let you run build-pacman-repo
on an Arch Linux container.