The AUR (Arch User Repository) is a community driven package repository for Arch Linux. This blog post details how you can quickly release a rust project on the AUR.
![]() |
![]() |
Pre-requisites #
Vagrant #
Before we get started, you'll need access to an Arch Linux machine or a VM. My go to for creating virtual machines is Vagrant. Follow the instructions on this page to install Vagrant. You can use my Vagrantfile for reference. Make sure to add the folder containing your Rust project's source code to the synced_folder
list.
Dependencies #
To install all the dependencies needed for this tutorial, install gcc and base-devel if not already installed
sudo pacman -Syu
sudo pacman -S gcc base-devel git
Cargo-aur #
AUR requires that every project supply a PKGBUILD
and .SRCINFO
file containing build information and metadata about the package respectively. We will be using the cargo-aur tool that adds a cargo aur
subcommand to generate this files.
cargo install cargo-aur
Instructions #
Logon to the Arch linux machine or VM before running the following commands.
1. Create the package repository #
- Create an account for yourself at https://aur.archlinux.org/
- Upload your SSH public key to your account. If you don't have a SSH key already, you can create one using
ssh-keygen -t rsa -b 4096 -C "<email_address>"
- Create your repository using
git clone ssh://aur@aur.archlinux.org/<package_name>-bin.git
. AUR uses the<package_name>-bin
convention to denote that the package installs a binary directly rather than building one.
2. Create the build description. #
To create the PKGBUILD
and .SRCINFO
files, assuming you have installed cargo-aur
as detailed in the pre-requisites section, run the following command in the folder containing your source code:
cargo aur
This should generate two files: a PKGBUILD
file and a tarball, <package_name>-<version>-<architecture>.tar.gz
. Copy these files to the <package_name>-bin
git folder created in the previous step.
3. Upload the tarball #
- If you use GitHub or GitLab for hosting your source code, make sure there exists a release for your package or create a new release.
- Upload the tarball created in the second step to the assets section of the GitHub release. You can use the GitHub UI to upload the asset.
- If you're interested in a command line tool to upload assets, checkout the github-upload-asset tool that I created for this purpose.
github-upload-asset --owner <username> --repo <package_name> --release-tag "<tag>" --asset-path <path/to/tarball>
4. Generating the package metadata #
Metadata about the package is contained in a file named .SRCINFO
. To generate this file, navigate the AUR repository folder run:
makepkg --printsrcinfo > .SRCINFO
5. Verify if the package builds #
- Run the following commond in the root folder of the repository to check if the package build successfully
makepkg
- If the build succeeded, you should see something like:
==> Finished making: <package_name> <version> (<time>)
- Also, a
pkg/<package_name>
folder would have been created. You can find the actual binary of the package inside that folder. Run the application to see if it works as expected!
6. Push the build description to the AUR #
Stage, commit and push the PKGBUILD
and .SRCINFO
files to the repository.
git add PKGBUILD .SRCINFO
git commit -m "Released version: <version_name>"
git push origin master
You can now use an AUR helper of your choice such as yay or paru to install the package.
yay -S <package_name>-bin
If you're interested in a real world example, check out Reddsaver, a command line tool I built to download media from Reddit.
Cheers!
Updates
- 2021/09/05: Reorder instructions and update pre-requisites.