Kim Torgersen


Pacman med lokal cache

article feature image


Innehåll


Med flera datorer på nätverket och en internetuppkoppling som år 2009 hade varit högst medioker, var det aktuellt att göra slag i saken och titta på en lokal cache för pacman.

Förberedelser

Val av enhet

Det finns flera tillvägagångssätt beroende på din situation. Först måst det bestämmas vart cachen ska ligga.
Jag har en Raspberry Pi (4) med ett minneskort på 64G som redan finns på nätverket och alltid är igång. Det blir mitt val.
Hade jag inte haft någon RPi skulle ett alternativ vara min laptop. Det är min primära enhet, och när någon annan enhet skulle uppdatera så är det stor chans att laptopen också skulle vara igång. Välj enhet utifrån dina förutsättningar. Kom ihåg att enheten måste ha en statisk IP-adress.

DNS

Jag har en lokal DNS. Det är inget som behövs, du kan använda IP-adressen. Men jag lägger till den statiska IP-adressen i DNS-en så jag kan använda adressen pacman.cache.local istället.

Val av lösning

Efter val av enhet att placera cachen på så beöver du välja hur cachen ska implementeras. Några varianter jag övervägde:

  1. Gemensam mapp på servern som mountas på varje klient med till exempel sshfs.
    • Mounta mapp på servern där klienterna har skrivrättighet till /var/cache/pacman/pgk/ på varje klient
    • Snabbaste och enlkaste lösningen
    • Det fungerar inte för mig då jag har en laptop som inte alltid befinner sig på nätverket.
    • Vill inte heller att övriga klienter skulle vara beroende av att servern är tillgänglig
  2. Gemensam mapp på servern som synkas åt båda håll med t.ex. rsync
    • /var/cache/pacman/pkg/ förblir en lokal mapp, som synkroniseras mot mapp på servern
    • Den lösningen har inte problemet med att servern måste vara tillgänglig
    • Dock innebär det att alla paket skulle finnas lokalt på alla klienter, det gillar jag inte
    • Känns spontant som komplicerad konfiguration på varje klient
  3. Cache på servern som cachar filhämtningar med Nginx
    • Mer arbete för att sätta upp
    • Minimal inverkan på klienter
    • Fungerar även om servern är nere eller klienten är utanför nätverket

Jag väljer att sätta upp en cache med Nginx.

Dynamisk proxy-cache med Nginx

  1. Skapa mapp för cachen på servern
    mkdir /srv/http/pacman-cache
    chown http:http /srv/http/pacman-cache
    
  2. Installera Nginx
  3. Utgå ifrån denna konfiguration
    Jag lade till mirrors ifrån min uppdaterade och rankade /etc/pacman.d/mirrorlist på en av klienterna
  4. Starta Nginx
  5. Lägg till din server överst i /etc/pacman.d/mirrorlist på varje klient.
    I mitt fall: Server = http://pacman.cache.local:8080/$repo/os/$arch
    Du behöver kanske ange IP-adress istället, om du inte använder en lokal DNS.
  6. Testa att installera ett paket. Se att det nu finns i mappen på servern.
    Tänk på att installera ett paket du måste ladda ner, eller radera först paketet i din cache på klienten.

Åtnjut fantastiska hastigheter i framtiden när du hämtar paket, sålänge du inte är först.

Några saker att tänka på

  • Cachen kan bara delas av klienter med samma arkitektur. (t.ex. inte mellan x86_64 / ARM)
  • Cachen på servern kommer att växa tills det att du rensar. Ett cron-jobb kan vara en bra idé.