Det här sätter du upp
När flera servrar installerar samma uppdateringar laddar var och en ner samma paket från internet. En paketcache laddar ner varje paket en gång och lämnar sedan ut sin kopia. Till skillnad från en fullständig spegel behåller den bara det dina servrar faktiskt installerar, så några gigabyte räcker oftast, och det finns inget att synka.
- apt-cacher-ng cachar för Debian och Ubuntu.
- pacoloco cachar för Arch Linux, CachyOS och EndeavourOS.
Båda ligger bakom Caddy från Podman-guiden, som ger dem HTTPS och bara släpper in dina egna servrar. Sätt upp den ena eller båda.
Varje steg nedan har körts på en server hos Melonslab med Debian 13. Debian 13 och Ubuntu 24.04 installerade paket via apt-cacher-ng, och Arch Linux installerade paket via pacoloco, både från Archs egna paketförråd och från CachyOS- och EndeavourOS-förråden. När samma paket installerades en andra gång kom de från cachen, och förfrågningar från alla andra adresser nekades.
Innan du börjar
Du behöver:
- en server uppsatt som i Podman-guiden, med Caddy igång;
- ett namn för varje cache, till exempel
apt-cache.example.comochpacman-cache.example.com, med A- och AAAA-poster som pekar på servern; - IPv4- och IPv6-adresserna till servrarna som ska använda cachen. Exemplen använder
198.51.100.20och2001:db8:2::20.
Lista båda adresserna för varje server: en server som har IPv6 ansluter över IPv6, och nekas om bara dess IPv4-adress finns på listan.
Debian och Ubuntu: apt-cacher-ng
1. Installera den
Som root:
apt update
apt install -y apt-cacher-ng
Om apt frågar om HTTP-tunnlar ska tillåtas behåller du svaret Nej. Debians paket kör apt-cacher-ng som en egen användare och har cachen i /var/cache/apt-cacher-ng.
2. Lyssna bara på servern
Från början lyssnar den på alla adresser, vilket skulle göra den till en cache för vem som helst på internet. Skapa /etc/apt-cacher-ng/local.conf:
# Only Caddy, on this server, can reach the cache.
BindAddress: 127.0.0.1 ::1
systemctl restart apt-cacher-ng
3. Sätt Caddy framför
Byt till Caddys användare med machinectl shell caddy@ och lägg till det här blocket sist i ~/Caddyfile, med dina egna servrars adresser:
apt-cache.example.com {
@servers remote_ip 198.51.100.20 2001:db8:2::20
handle @servers {
reverse_proxy 127.0.0.1:3142
}
respond 403
}
Starta om Caddy med systemctl --user restart caddy. Caddy ser varje besökares riktiga adress, så servrarna på listan får cachen och alla andra får "403 Forbidden".
4. Peka dina servrar mot den
På varje server som använder cachen, som root:
sed -i 's#http://#https://apt-cache.example.com/#' /etc/apt/sources.list
apt update
Kommandot gör om en rad som deb http://ftp.debian.org/debian trixie main till deb https://apt-cache.example.com/ftp.debian.org/debian trixie main: apt frågar cachen, och cachen hämtar från samma ställe som förut. Servrar som är uppsatta med det nyare formatet har sina källor i /etc/apt/sources.list.d/debian.sources, eller ubuntu.sources på Ubuntu; kör samma sed på den filen i stället.
apt kontrollerar fortfarande signaturen på varje paket, så cachen kan inte ändra det dina servrar installerar.
Arch, CachyOS och EndeavourOS: pacoloco
1. Skapa användaren
Som root:
useradd -m -s /bin/bash pacoloco
loginctl enable-linger pacoloco
machinectl shell pacoloco@
2. Definiera cachen
Skapa ~/pacoloco.yaml, med de paketförråd du använder:
cache_dir: /var/cache/pacoloco
# Remove packages nobody has asked for in 30 days
purge_files_after: 2592000
repos:
archlinux:
urls:
- https://mirror.accum.se/mirror/archlinux
endeavouros:
urls:
- https://mirror.alpix.eu/endeavouros/repo
cachyos:
urls:
- https://mirror.zyner.org/cachyos/repo
Utan purge_files_after tar pacoloco aldrig bort något. Varje förråd anger en spegel uppströms. De här ligger nära Sverige; vilken spegel som helst från distributionens egen spegellista fungerar.
Skapa ~/.config/containers/systemd/pacoloco.container, efter mkdir -p ~/.config/containers/systemd:
[Unit]
Description=pacoloco, a package cache for pacman
[Container]
ContainerName=pacoloco
Image=ghcr.io/anatol/pacoloco:1.9
Volume=%h/pacoloco.yaml:/etc/pacoloco.yaml:ro
# :U gives the volume to the user pacoloco runs as inside the container
Volume=pacoloco-cache:/var/cache/pacoloco:U
# Only Caddy, on this server, can reach it: the port is not open to the internet.
PublishPort=127.0.0.1:8087:9129
AutoUpdate=registry
[Service]
Restart=always
[Install]
WantedBy=default.target
Taggen 1.9 är pacolocos aktuella version. Dess tagg latest följer kod som inte är släppt ännu, så byt själv taggen när du vill gå till en nyare version.
systemctl --user daemon-reload
systemctl --user start pacoloco
systemctl --user enable --now podman-auto-update.timer
3. Sätt Caddy framför
Som caddy lägger du till det här blocket i ~/Caddyfile, med dina egna servrars adresser, och startar om Caddy:
pacman-cache.example.com {
@servers remote_ip 198.51.100.20 2001:db8:2::20
handle @servers {
reverse_proxy 127.0.0.1:8087
}
respond 403
}
4. Peka dina maskiner mot den
Lägg cachen först i varje spegellista, ovanför de andra Server-raderna:
| Distribution | Fil | Rad |
|---|---|---|
| Arch Linux | /etc/pacman.d/mirrorlist | Server = https://pacman-cache.example.com/repo/archlinux/$repo/os/$arch |
| CachyOS | /etc/pacman.d/cachyos-mirrorlist | Server = https://pacman-cache.example.com/repo/cachyos/$arch/$repo |
| EndeavourOS | /etc/pacman.d/endeavouros-mirrorlist | Server = https://pacman-cache.example.com/repo/endeavouros/$repo/$arch |
CachyOS-spegellistorna för -v3 och -v4 använder $arch_v3 eller $arch_v4 i stället för $arch; lägg till samma rad där med den ändringen. pacoloco kontrollerar inte paketsignaturer själv, men det gör pacman, så cachen kan inte ändra det du installerar.
Felsökning
apt eller pacman får "403 Forbidden". Maskinens adress finns inte på listan i Caddy-blocket. Kontrollera båda dess adresser med curl -4 ifconfig.co och curl -6 ifconfig.co på den maskinen.
Cachen fyller disken. apt-cacher-ng rensar varje natt bort paket som inte längre finns i något förråd. pacoloco tar bort paket som ingen har frågat efter på 30 dagar, enligt purge_files_after; sänk värdet om disken är liten.
Alpine eller Rocky Linux. Inget av projekten dokumenterar en paketcache som de här, så den här guiden tar inte upp dem.