Een apt-proxy in je thuisnetwerk – Sneller updates downloaden
- July 17, 2018
- 0
Heb je meerdere Linux-machines in je thuisnetwerk? Dan is het best wel gek om op elke machine opnieuw dezelfde updates te downloaden. Met een apt-proxy in je netwerk hoeft dat maar een keer, waardoor installaties en updates sneller verlopen. Wij tonen je stap voor stap hoe je zo’n proxyserver configureert.
Bij een proxyserver denk je eerst aan een webproxy zoals Squid. Een webproxy is erg gangbaar in bedrijfsomgevingen om de toegang tot het internet te monitoren of zelfs te beperken. Een bijkomend voordeel van zo’n webproxy is dat vaak gedownloade data, zoals updates voor het besturingssysteem, lokaal gecachet kan worden. Vraagt een client data op die reeds in de cache zit, dan stuurt de proxyserver die rechtstreeks over het lokale netwerk terug. De proxy hoeft die data dus niet meer van het internet te downloaden. Caching van data biedt twee voordelen: de clients moeten minder lang wachten én je gebruikt minder data van je maandelijkse downloadlimiet (indien jouw internetaansluiting zo’n limiet heeft). Ook voor thuisgebruik is een proxyserver interessant, met name voor alles wat je package manager downloadt. Duurt het downloaden van de laatste distributie-upgrade op je desktop bijvoorbeeld tien minuten, dan haalt je laptop diezelfde update in minder dan een minuut binnen via je apt-proxy.
Oplossingen
Er bestaan heel wat oplossingen om installatiepakketten te cachen in je netwerk. Heb je al een webproxy zoals Squid geconfigureerd, dan kun je die gebruiken. Mogelijk moet je nog wel enkele instellingen aanpassen, zodat ook grotere bestanden gecachet worden. Controleer daarna zeker of de cache_dir voldoende opslagruimte biedt, want je hebt al gauw enkele gigabytes nodig. Je kunt ook Apache gebruiken in combinatie met mod_cache of een gelijkaardige webserver. Maar de beste én eenvoudigste oplossing is om een gespecialiseerde apt-proxy te installeren. In recente Debian en Ubuntu-versies vind je onder meer apt-proxy, approx, apt-cacher en apt-cacher-ng. Wij gingen aan de slag met die laatste, omdat die het eenvoudigst op te zetten is. Apt-cacher-ng is een meer performante herimplementatie in C van het op Perl gebaseerde apt-cacher.
Werking
Apt-cacher-ng werkt volledig transparant voor de clients. Je hoeft alleen maar de URL van je proxyserver in te stellen op elke client. Daarna verlopen alle downloads vanuit je package manager via apt-cacher. Is het de eerste keer dat een bepaald pakket wordt gedownload? Dan haalt apt-cacher het pakket via internet op en stuurt het meteen door naar de client. Vraagt de client een pakket op dat al door een andere client was opgevraagd? Dan haalt apt-cacher dit uit de lokale cache en hoeft het dit niet meer te downloaden. De downloadsnelheid voor de client hangt dan af van de snelheid van jouw netwerk en de onderliggende schijven of ssd’s op de apt-cacher-machine. Op een Raspberry Pi is dit beperkt tot pakweg 10MB per seconde, maar op nieuwere hardware met een Gigabit Ethernetverbinding en snellere schijven haal je probleemloos snelheden tot 100MB per seconde.
Aan de slag
Apt-cacher-ng is alleen geschikt om pakketten te cachen voor Debian en afgeleide distributies, zoals Ubuntu en Linux Mint. Het gebruik van een apt-cache heeft ook pas nut als je minstens twee machines met identieke distributies draait in je netwerk. Let daarbij ook op de architectuur van de machines: een 32-bits-versie van Ubuntu gebruikt andere pakketten dan een 64-bits-versie. Anderzijds gebruikt Linux Mint grotendeels dezelfde pakketten als de Ubuntu-versie waarop Mint gebaseerd is. Heb je dus een machine met Linux Mint 18.1 en een met Ubuntu 16.04, dan haal je nog steeds voordeel uit een apt-cache. Apt-cacher-ng kan trouwens ook pakketten cachen voor verschillende distributies. Dat is handig als je bijvoorbeeld enkele Debian-machines en Ubuntu-machines in je thuisnetwerk hebt. Het maakt overigens niet uit welke distributie de apt-proxy zelf draait. Voorzie wel enkele gigabytes aan opslagruimte voor elke distributie waarvoor je pakketten wilt cachen.
Installatie
Uiteraard moet de apt-proxy steeds beschikbaar zijn in je netwerk, want anders kunnen je clients geen pakketten downloaden. Heb je al een homeserver of andere machine die altijd aanstaat met Debian, Ubuntu of Linux Mint? Dan gebruik je die gewoon om apt-cacher-ng te installeren. Heb je nog geen machine die in aanmerking komt, dan raden we je aan om bijvoorbeeld een Raspberry Pi of BeagleBone te installeren. Een apt-proxy heeft immers geen hoge systeemvereisten. Apparaten zoals de Pi vragen zo weinig stroom dat je ze voor enkele euro’s per jaar 24/7 laat draaien. Wij gingen aan de slag met een BeagleBone Black met 1Ghz ARMv7-processor, 512MB ram, een 100MBit-Ethernetaansluiting en een microsd-kaart van 8GB, voorzien van Debian 8.7. Wil je een Raspberry Pi klaarmaken om apt-cacher-ng te installeren, lees dan even de introductie van het artikel over het delen van printers en scanners elders in dit blad. De eigenlijke installatie is erg eenvoudig: na installatie van het pakket apt-cacher-ng wordt de proxysoftware meteen opgestart. Maar voor je verder gaat, kijk eerst even de configuratie na.
Configuratie
In /etc/apt-cacher-ng vind je verschillende bestanden die het gedrag van de apt-proxy aanpassen. In principe hoef je daarin weinig aan te passen, maar we overlopen toch even de belangrijkste parameters (zie afbeelding 1). De CacheDir bepaalt waar apt-cacher-ng gedownloade pakketten bewaart: standaard is dat /var/cache/apt-cacher-ng. Wil je bijvoorbeeld een externe schijf gebruiken voor de CacheDir, dan heb je twee mogelijkheden. Ofwel laat je de CacheDir-parameter verwijzen naar het mountpoint van die schijf, ofwel mount je de schijf op /var/cache/apt-cacher-ng. In de LogDir vind je twee bestanden terug met algemene info over apt-cacher-ng’s werking (apt-cacher-ng.log) en met foutmeldingen (apt-cacher-ng.err). De Port (standaard 3142) heb je nodig om je clients te configureren. De ReportPage is de webpagina waarop je statistieken kunt bekijken. ExTreshold geeft aan na hoeveel dagen apt-cacher-ng een lokale kopie van verouderde pakketten verwijdert. LocalDirs tot slot bevat een lijst van directories waarvoor apt-cacher-ng zich als een normage webserver gedraagt en niet als een proxy. In de standaardconfiguratie dient dit om apt-cacher-ng’s documentatie via je browser beschikbaar te stellen (in ons geval op http://192.168.1.6:3142/acng-doc). De lijnen die beginnen met Remap zorgen ervoor dat apt-cacher-ng identieke pakketten op verschillende mirrors als dusdanig herkent. Op die manier werkt de cache ook wanneer verschillende clients verschillende mirrors geconfigureerd hebben in hun sources.list-bestand. Wijzig je iets in het configuratiebestand, vergeet dan niet om de service te herstarten:
$ service apt-cacher-ng restart
Een eerste test
Met de apt-proxy actief moeten we alleen onze clients nog configureren om een proxyserver te gebruiken. Daarvoor maak je als root een nieuw bestand aan in /etc/apt/apt.conf.d met daarin het ip-adres van jouw proxyserver. In afbeelding 2 zie je een voorbeeld voor onze BeagleBone met ip-adres 192.168.1.6. Start nu een commando via je package manager zoals apt-get, aptitude of Synaptic. Op de client merk je nog geen verschil, maar op de proxyserver zie je allerlei entries verschijnen in /var/log/apt-cacher-ng.log. Wil je weten wat de impact is van apt-cacher-ng, installeer dan een pakket van enkele honderden megabytes op twee verschillende clients. Vergelijk daarna de downloadtijd van beide installaties en je weet ongeveer hoeveel apt-cacher-ng jouw downloads versnelt. In afbeelding 3 zie je dat de eerste installatie van de Eclipse Java IDE ongeveer 40 seconden downloadtijd nodig had, wat neerkomt op een downloadsnelheid van 5.5MB/seconde. Dat is namelijk de maximumsnelheid van de internetaansluiting in onze testomgeving. Bij een tweede installatie op een andere machine duurde dat nog 18 seconden: dat is een downloadsnelheid van ongeveer 11MB/seconde. Dat lijkt misschien niet uitzonderlijk snel, maar besef wel dat we daarbij tegen de limiet zitten van de 100Mbit-Ethernetaansluiting op de BeagleBone. Heb je een Gigabit-verbinding tussen de client en de proxyserver, dan mag je snelheden tot 50 à 100 MB/seconde verwachten.
Statistieken
Uit deze test kun je al afleiden hoeveel tijd je wint door sneller te downloaden. Ben je vooral bekommerd om de maandelijkse downloadlimiet van je internetaansluiting? Dan wil je misschien weten hoeveel megabytes of gigabytes je minder moest downloaden dankzij apt-cacher-ng. Die informatie vind je op de eerder geconfigureerde ReportPage: http://192.168.1.6:3142/acng-report.html in ons voorbeeld. Klik op de knop Count Data onder Transfer statistics (zie afbeelding 4). Tijdens onze korte test (installatie van enkele pakketten, security updates van de laatste week) heeft apt-cacher-ng ongeveer 375MB uit de cache aangeboden op een totaal van 775MB. De efficiëntie van de cache is dus bijna 50 procent. Heb je meer dan twee machines en installeer je vooral updates, dan ligt de efficiëntie nog hoger.
Beheer
De ReportPage bevat ook enkele opties om de cache te beheren, zoals oude pakketten verwijderen of reeds gedownloade pakketten importeren. Standaard is de ReportPage voor iedereen toegankelijk, maar je kunt die beveiligen met een gebruikersnaam en wachtwoord. Open daarvoor het bestand /etc/apt-cacher-ng/security.conf, vervang de gebruikersnaam (mooma) en het wachtwoord (moopa) door waardes van jouw keuze en herstart apt-cacher-ng. Voor normaal gebruik heb je de beheeropties op de webpagina eigenlijk niet nodig. Mocht je in de problemen komen of een erg specifieke toepassing nodig hebben, dan komen ze wel van pas. Raadpleeg de documentatie op http://192.168.1.6:3142/acng-doc voordat je begint te experimenteren met geavanceerde instellingen!
Enkele tips
We sluiten af met nog enkele tips. In tegenstelling tot bijvoorbeeld Squid biedt apt-cacher-ng geen toegangscontrole. Alle machines in je netwerk kunnen dus de cache gebruiken. Draait apt-cacher-ng op een machine met meerdere netwerk interfaces (bijvoorbeeld een VPN-interface), dan beperk je het gebruik van apt-cacher-ng tot je lokale netwerk. Dat doe je door het lokale ip-adres expliciet op te nemen in acng.conf, bijvoorbeeld:
BindAddress: 192.168.1.6
Voor verdere toegangscontrole op basis van het ip-adres van de client ben je aangewezen op de firewall. Afhankelijk van de gebruikte distributie moet je daarvoor iptables of het ufw-frontend configureren. Raadpleeg de documentatie van jouw distributie voor meer informatie. Tot slot raden we je ook aan om de lokale package cache op de clients uit te schakelen. Standaard bewaart apt immers alle pakketten om ze niet opnieuw te moeten downloaden bij een herinstallatie. Maar aangezien apt-cacher-ng een centrale package cache is voor het hele netwerk, hebben we die lokale caches eigenlijk niet nodig. Gebruik je alleen Synaptic, ga dan naar Settings > Preferences > Files en selecteer de optie ‘Delete downloaded packages after installation’. Gebruik je ook de commandline clients zoals aptitude of wil je gewoon zeker zijn dat de cache volledig uitgeschakeld is? Maak dan een extra configuratiebestand aan in /etc/apt/apt.conf.d met de inhoud uit afbeelding 5 (je hoeft Synaptics-instellingen dan niet meer aan te passen).
Conclusie
Apt-cacher-ng is vrij eenvoudig op te zetten en vraagt niet veel van je hardware. Wil je vooral je gebruikte downloadvolume bij een goedkope internetaansluiting zo laag mogelijk houden? Dan volstaat een Raspberry Pi met enkele gigabytes vrije schijfruimte al. Bijkomend voordeel is dat je gecachete downloads tot tweemaal sneller binnenhaalt op je clients. Beschik je daarentegen over een behoorlijk snelle internetverbinding zonder maandelijkse downloadlimieten? Zorg dan zeker voor een Gigabit-verbinding tussen je proxyserver en je client. Zo haal je moeiteloos downloadsnelheden tot 100MB/seconde.