DEV Community

Cover image for Testing our package build in the Docker world
Axel Navarro for Cloud(x);

Posted on • Edited on

Testing our package build in the Docker world

We write and build our PKGBUILD files in our local machine, but we need to make sure our build script is portable and up to date with the required dependencies.

If you've built a CI before, you already know that Docker is a de facto solution for this. You should create a container, install the dependencies to build Arch Linux package, and then build your PKGBUILD to check the success result.

Creating the container

First, we should install the docker package and start its service:

sudo pacman -S docker sudo systemctl start docker.service 
Enter fullscreen mode Exit fullscreen mode

Then, start an interactive container using the Arch Linux image as base:

sudo docker run -it archlinux bash 
Enter fullscreen mode Exit fullscreen mode

Preparing the container

We should add the base-devel package group to our container - these packages are required to build packages ourselves. The Arch Linux team is working in a new docker image archlinux:devel with this package group pre-installed.

And, Git if we want to test a PKGBUILD hosted in the AUR repository.

pacman -Sy --noconfirm base-devel git 
Enter fullscreen mode Exit fullscreen mode

💡 Tip: Maybe you need to check the /etc/pacman.d/mirrorlist file to get a good bandwidth based on your geolocation.

Add a non-root user

For security reasons, makepkg can't run as root, but we need to add a user with sudo to build the package.

useradd builduser -m # Create the builduser passwd -d builduser # Delete the buildusers password printf 'builduser ALL=(ALL) ALL\n' | tee -a /etc/sudoers # Allow the builduser passwordless sudo 
Enter fullscreen mode Exit fullscreen mode

Now, change the user:

su builduser && cd 
Enter fullscreen mode Exit fullscreen mode

Cloning the AUR package

We can clone the AUR package without using an AUR helper, like yay. We'll use the .Net Core app we visited in the previous post.

git clone https://aur.archlinux.org/taskcore.git 
Enter fullscreen mode Exit fullscreen mode

Build the package

And now we can build and install our package

makepkg -si --noconfirm 
Enter fullscreen mode Exit fullscreen mode

Then, clean the orphan packages that we don't need on runtime:

pacman -Rns $(pacman -Qtdq) 
Enter fullscreen mode Exit fullscreen mode

Automate the build process

We can create a Dockerfile to run the build steps without an interactive terminal.

FROM archlinux RUN pacman -Sy --noconfirm base-devel git ARG AUR_PACKAGE=taskcore RUN useradd builduser -m \  && passwd -d builduser \  && cd /home/builduser \  && git clone "https://aur.archlinux.org/$AUR_PACKAGE.git" target \  && chown builduser -R target \  && (printf 'builduser ALL=(ALL) ALL\n' | tee -a /etc/sudoers) \  && sudo -u builduser bash -c 'cd ~/target && makepkg -si --noconfirm' \  && pacman -Rns $(pacman -Qtdq) WORKDIR /home/builduser/target CMD ["bash"] 
Enter fullscreen mode Exit fullscreen mode

We can build other packages using the --build-arg argument:

sudo docker build --build-arg AUR_PACKAGE=git-delta -t git-delta . 
Enter fullscreen mode Exit fullscreen mode

Run the package!

Don't forget to run the package to check the runtime dependencies.

docker run -it taskcore taskcore ls 
Enter fullscreen mode Exit fullscreen mode

New base-devel image! (Update 2020-11-06)

The ticket was closed and the new archlinux:base-devel image is available, with a current size of 700MB vs 467MB for archlinux:latest (a.k.a. archlinux:base).

Top comments (0)