# Installation of Buildkite-Agent
## Notes
Official installation instructions for the Buildkite agent:
https://buildkite.com/docs/agent/v3/ubuntu
Systemd documentation
https://nts.strzibny.name/systemd-user-services/
## Installation 2023-07-01
I have installed the `en_US.UTF-8` local because the Buildkite logs kept complaining about `LC_ALL`
sudo apt-get install locales
sudo locale-gen en_US.UTF-8
### Specific to `buildkite-agent`
I have performed the following steps to install buildkite agent on the machine.
The advantage of installing it using `apt` is that in addition to the binary, it will also set up
* a `buildkite-agent` user
* a `systemd` service
*
```bash
curl -fsSL https://keys.openpgp.org/vks/v1/by-fingerprint/32A37959C2FA5C3C99EFBC32A79206696452D198 | sudo gpg --dearmor -o /usr/share/keyrings/buildkite-agent-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/buildkite-agent-archive-keyring.gpg] https://apt.buildkite.com/buildkite-agent stable main" | sudo tee /etc/apt/sources.list.d/buildkite-agent.list
sudo apt-get update & sudo apt-get install -y buildkite-agent
sudo sed -i "s/xxx/INSERT-YOUR-AGENT-TOKEN-HERE/g" /etc/buildkite-agent/buildkite-agent.cfg
```
After configuring the other things, I have started the agent with
```bash
sudo systemctl enable buildkite-agent && sudo systemctl start buildkite-agent
```
I have edited the configuration file more
```bash
less /etc/buildkite-agent/buildkite-agent.cfg
```
```
name="machine:zurich.12-agent:%spawn"
spawn=6
no-color=true
tag="queue=adrestia,queue=cardano-wallet,system=x86_64-linux"`.
```
### Specific to `nix`
As `buildkite-agent` user, I have symlinked a `.nix-profile`
cd $HOME
ln -s /nix/var/nix/profiles/default .nix-profile
I have set up a nix profile
mkdir -p $HOME/.config/nix/
cat > nix.conf
experimental-features = nix-command flakes
max-jobs = auto
cores = 0
I have added an environment hook for buildkite
```bash
less /etc/buildkite-agent/hooks/environment
```
```
#!/bin/bash
# The `environment` hook will run before all other commands, and can be used
# to set up secrets, data, and so on. Anything exported in hooks will be available
# to the build script.
#
# For example:
#
# export SECRET_VAR=token
# Note that as the script is sourced not run directly, the shebang line will be ignored
# See https://buildkite.com/docs/agent/v3/hooks#creating-hook-scripts
set -e
# PATH
# 2023-07-01 by apfelmus: Bring nix into the path
if [ -e /nix/var/nix/profiles/default/etc/profile.d/nix.sh ]; then
. /nix/var/nix/profiles/default/etc/profile.d/nix.sh
nix --version
fi
```
### Specific to `cardano-wallet`
I have linked the `/cache` directory.
sudo ln -s /tmp /cache
### To make docker images build
Follow verbatim the instructions from [official](https://docs.docker.com/engine/install/ubuntu/)
Add docker group to the user
```
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -G docker -a buildkite-agent
sudo systemctl restart buildkite-agent
```
### To push docker images