Pacman med lokal cache
![article feature image](/posts/2020/pacman-cache/feature.png)
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:
- 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
- Mounta mapp på servern där klienterna har skrivrättighet till
- 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
- 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
- Skapa mapp för cachen på servern
mkdir /srv/http/pacman-cache chown http:http /srv/http/pacman-cache
- Installera Nginx
- Utgå ifrån denna konfiguration
Jag lade till mirrors ifrån min uppdaterade och rankade/etc/pacman.d/mirrorlist
på en av klienterna - Starta Nginx
- 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. - 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é.