Arch Package Registry

Forgejo has a Arch Linux package registry, which can act as a fully working Arch linux mirror and connected directly in /etc/pacman.conf. Forgejo automatically creates pacman database for packages in user/organization space when a new Arch package is uploaded.

Upload packages

When uploading the package to Forgejo, you have to prepare package file with the .pkg.tar.zst extension. You can use curl or any other HTTP client, Forgejo supports multiple authentication schemes. The upload command will create 3 files: package, signature and desc file for the pacman database (which will be created automatically on request).

The following command will upload arch package and related signature to Forgejo with basic authentification:

curl -X PUT \
  https://{domain}/api/packages/{owner}/arch/{group} \
  --user your_username:your_token_or_password \
  --header "Content-Type: application/octet-stream" \
  --data-binary '@/path/to/package/file/package-1-1-x86_64.pkg.tar.zst'
PlaceholderDescription
ownerThe owner of the package
groupRepository, e.g. os, extras .

Install packages

First, you need to update your pacman configuration, adding following lines :

[{owner}.{group}.{domain}]
SigLevel = Required
Server = https://{domain}/api/packages/{owner}/arch/{group}/{architecture}

You can also copy content from the Forgejo package page.

PlaceholderDescription
ownerThe owner of the package
groupRepository, e.g. os, extras
architectureSystem architecture, such as x86_64, aarch64

Then, Import the server’s public key.

# Download the public key from the remote server.
wget -O sign.gpg https://{domain}/api/packages/{owner}/arch/repository.key

# Import the public key for pacman.
pacman-key --add sign.gpg

# Trust the certificate with the specified email
pacman-key --lsign-key '{owner}@noreply.{domain}'
PlaceholderDescription
domainYour Forgejo domain, such as code.forgejo.org.
ownerThe owner of the package

Finally, you can run pacman sync command (with -y flag to load connected database file), to install your package:

pacman -Sy {package}

Delete packages

The DELETE method will remove specific package version, and all package files related to that version:

curl -X DELETE \
  https://{domain}/api/packages/{owner}/arch/{group}/{package}/{version}/{arch} \
  --user your_username:your_token_or_password
PlaceholderDescription
ownerThe owner of the package
groupRepository, e.g. os, extras
packagePackage name
versionPackage version
archPackage arch

Clients

Any pacman compatible package manager or AUR-helper can be used to install packages from Forgejo (yay, paru, pikaur, aura). Also, any HTTP client can be used to execute get/push/remove operations (curl, postman, thunder-client).