Abstract. I have been using lately Arch Linux on both my workstation and my laptop. The laptop has only been used occasionally, so every time I picked it from the shelf there were gigabytes of packages to be updated. Since I have unacceptably low internet bandwidth at home (welcome to Germany, the digital desert), I decided to implement some kind of package cache on my workstation. Luckily, there is an easy solution: pacoloco - a caching proxy server for pacman.
Server configuration #
Deploying pacoloco on an Arch Linux machine is a piece of cake!
$ pacman -S pacoloco
The repository contains an example of the config. I decided to put both the configs and the cache to
/srv/pacoloco, so here we go.
$ mkdir -p /srv/pacoloco/cache $ mv /etc/pacoloco.yaml /srv/pacoloco
My main workstation will peform as a pacoloco server and its client at the same time, so let’s move the list of mirrors I use to download Arch packages, and substitute it with pacoloco.
$ cat /srv/pacoloco/pacoloco.yaml $ mv /etc/pacman.d/mirrorlist /srv/pacoloco $ echo "Server = http://localhost:9129/repo/archlinux/$repo/os/$arch" > /etc/pacman.d/mirrorlist
Mind the corresponding changes in the config file (one can also see I removed the prefetch feature).
cache_dir: /srv/pacoloco/cache port: 9129 download_timeout: 3600 purge_files_after: 2592000 repos: archlinux: urls: - http://mirror.lty.me/archlinux - http://mirrors.kernel.org/archlinux archlinux-reflector: mirrorlist: /srv/pacoloco/mirrorlist quarry: url: http://pkgbuild.com/~anatolik/quarry/x86_64
Since the config file’s location differs from its default, it must be explicitly specified in the systemd unit file.
$ cat /usr/lib/systemd/system/pacoloco.service [Unit] Description=Pacoloco caching proxy server [Service] User=pacoloco ExecStart=/usr/bin/pacoloco -config /srv/pacoloco/pacoloco.yaml KillMode=process [Install] WantedBy=multi-user.target
Since this host also acts as pacoloco client,
/etc/pacman.conf should be modified as well (see the next section).
Client configuration #
The following line should be inserted at the beginning of
/etc/pacman.d/mirrorlist on the client machine (mind to substitute the host addres!).
Server = http://yourpacoloco:9129/repo/archlinux/$repo/os/$arch
/etc/pacman.conf should be supplemented with the following section.
[quarry] Server = http://yourpacoloco:9129/repo/quarry
Removing redundant package cache #
With pacoloco the standard pacman cache (at least on the pacoloco host) becomes redundant. At the moment of writing my
/var/cache/pacman was over 30G.
I didn’t find an easy solution to permanently disable native pacman’s caching. However here is paccache utility from
pacman-contrib to rescue. It comes already with
I only replaced the default
paccache -r to more a aggressive
paccache -ruk0 in the corresponding systemd service file and enabled the corresponding timer.
systemctl enable --now paccache.timer