Introductie
APT is een handige tool voor Linux-gebruikers. Je kunt met het uitvoeren van één commando software/pakketten van jouw Linux-systeem installeren, upgraden en verwijderen. In sommige situaties heb je granulaire controle nodig over welk pakket je wilt installeren of upgraden en welk pakket je wilt blokkeren voor automatische upgrades.
Waarom je dit zou willen? Soms kunnen bepaalde pakketten buggy zijn en dan kan zo een functie erg handig zijn. Je kunt met dit commando sudo apt upgrade
ervoor zorgen dat het pakket de volgende keer niet automatisch wordt geüpgraded.
In deze tutorial leer je hoe je kunt voorkomen dat bepaalde pakketten worden geïnstalleerd of geüpgraded. Daarnaast leer je hoe je de installatie van specifieke versies van pakketten of kernels kunt blokkeren.
Aandachtspunt: Je kunt heel makkelijk vergeten welke versies je hebt geïnstalleerd, blijf alert want oude versies kunnen leiden tot beveiligingsproblemen.
In deze tutorial bespreken we twee methoden. De eerste methode blokkeert alle installaties en upgrades voor een bepaald pakket. De tweede methode biedt granulaire controle waarmee je specifieke versies van een pakket kunt blokkeren.
Vereisten
- Je hebt een Server nodig met Debian OS. In deze tutorial gebruiken we Debian 10 maar de commando’s zouden ook met oudere versies moeten werken.
- Je hebt een non-sudo gebruiker nodig om de commando’s uit te voeren.
Methode 1 (apt-mark)
Om te voorkomen dat een pakket wordt geïnstalleerd, bijgewerkt of verwijderd, kunnen we het apt-mark
commando gebruiken.
Als je bijvoorbeeld wilt dat een pakket zoals, htop niet wordt geïnstalleerd, bijgewerkt of verwijderd, dan kun je het onderstaande commando uitvoeren:
$ sudo apt-mark hold htop
Je zou een vergelijkbare output moeten zien zoals hieronder:
htop set on hold.
Het vergrendelde pakket blijft nu op dezelfde versie, zelfs als je een upgrade van jouw systeem uitvoert. Dit is vooral handig voor het tegenhouden van grafische stuurprogramma’s.
Voer het volgende commando uit om de blokkering van het pakket op te heffen:
$ sudo apt-mark unhold htop
Je zou een vergelijkbare output moeten zien zoals hieronder:
Canceled hold on htop
Er is wel een uitzondering voor dit commando. Hoewel het pakket niet automatisch wordt bijgewerkt met het commandosudo apt upgrade
of tijdens het upgraden van het systeem, is het nog steeds mogelijk om het pakket handmatig te verwijderen. Het commando sudo apt remove <package>
werkt nog steeds op de vastgehouden pakketten.
Deze methode zorgt ervoor dat de pakketten niet automatisch worden gewijzigd. Als je ze in de wacht houdt, blijven ze in hun huidige versies, wat je ook doet op jouw systeem, tenzij je ze handmatig verwijderd.
Methode 2 (/etc/apt/preferences)
Deze methode omvat het bewerken van dit bestand /etc/apt/preferences
. Je kunt hier specificeren welke pakketversie vanuit welke repository is geïnstalleerd. Elk pakket krijgt een numerieke prioriteit, op basis daarvan beslist APT of het pakket moet worden geïnstalleerd of niet, en uit welke repository het moet worden opgehaald.
Laten we bijvoorbeeld het nginx
pakket bekijken door het onderstaande commando uit te voeren:
$ apt-cache policy nginx
Je zou een vergelijkbare output moeten zien zoals hieronder:
nginx: Installed: (none) Candidate: 1.17.5-1~buster Version table: 1.17.5-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.4-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.3-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.2-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.1-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.14.2-2+deb10u1 500 500 http://deb.debian.org/debian buster/main amd64 Packages 500 http://security.debian.org/debian-security buster/updates/main amd64 Packages 500 http://security.debian.org buster/updates/main amd64 Packages
Je kunt zien dat er twee repositories zijn waar nginx wordt geïnstalleerd. De eerste is de repository van Debian en de tweede is de repository van nginx.
Je ziet het nummer 500 bij alle repositories, dit nummer geeft de prioriteiten van het pakket aan. Aangezien dit hetzelfde is voor alle repositories is de kans groot dat ngix uit een van deze repositories komt. Het systeem kiest de hoogste versie die er is. In dit geval versie 1.17.5. Voor Debian wordt het volledige versienummer 1.17.5-1~buster.
Open het bestand in de nano-editor:
$ sudo nano /etc/apt/preferences
Met dit commando kun je een bestand aanmaken als het nog niet bestaat.
Plak de volgende code in het bestand:
Package: nginx Pin: version 1.17.5-1~buster Pin-Priority: -1
Als de prioriteit minder dan 0 is, wordt het pakket niet geïnstalleerd. Als je wilt dat een pakket altijd wordt geïnstalleerd, dan stel je de prioriteit in op 1000 of hoger.
Druk op Ctrl + X om af te sluiten en voer Y in wanneer je wordt gevraagd om het bestand op te slaan.
Laten we het pakket nogmaals controleren:
$ apt-cache policy nginx
Je ziet de volgende output:
nginx: Installed: (none) Candidate: 1.17.4-1~buster Version table: 1.17.5-1~buster -1 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.4-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.3-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.2-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.1-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.14.2-2+deb10u1 500 500 http://deb.debian.org/debian buster/main amd64 Packages 500 http://security.debian.org/debian-security buster/updates/main amd64 Packages 500 http://security.debian.org buster/updates/main amd64 Packages
Zie je het verschil? Candidate-releaseversie is gedaald van 1.17.5 naar 1.17.4. Dit betekent dat de volgende hogere versie die het systeem installeert, 1.17.4 is. Je zult ook merken dat -1 wordt afgeschreven tegen de nieuwste versie, dit betekent dat het systeem die versie overslaat.
Sla 1 versie over maar geef wel toegang tot andere versies
Je kunt meerdere vermeldingen voor hetzelfde pakket in het bestand toevoegen. Voeg bijvoorbeeld de volgende code toe:
Package: nginx Pin: version 1.17.5-1~buster Pin-Priority: -1 Package: nginx Pin: version 1.17.3-1~buster Pin-Priority: 1000
Hier vragen we het systeem om versie 1.17.5 over te slaan maar wel om altijd versie 1.17.3 te installeren.
Laten we dit controleren door dit commando te gebruiken apt-cache policy
.
nginx: Installed: (none) Candidate: 1.17.3-1~buster Version table: 1.17.5-1~buster -1 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.4-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.3-1~buster 1000 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.2-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.17.1-1~buster 500 500 http://nginx.org/packages/mainline/debian buster/nginx amd64 Packages 1.14.2-2+deb10u1 500 500 http://deb.debian.org/debian buster/main amd64 Packages 500 http://security.debian.org/debian-security buster/updates/main amd64 Packages 500 http://security.debian.org buster/updates/main amd64 Packages
Candidate versie is nu verschoven naar 1.17.3.
Wijzig de Repository voorkeur
Als je wilt voorkomen dat nginx wordt geïnstalleerd vanuit haar eigen repository en in plaats daarvan de Debian-repository wilt kiezen, dan kun je dat doen door de nginx-repository te verwijderen. Je kunt het voorkeurenbestand opnieuw gebruiken zodat de repository voor jou wordt gekozen.
Je kunt in het bestand de volgende code invoeren:
Package: nginx Pin: release o=nginx Pin-Priority: -1
De release keyword laat alleen de hogere versies zien. o=nginx
verwijst naar de oorsprong van het pakket. Dat is dus nginx. Dit betekent dat het systeem het nginx-pakket niet vanuit de repository zou moeten installeren. Een andere manier om hetzelfde resultaat te bereiken, is door de volgende code te gebruiken:
Package: nginx Pin: release o=debian Pin-Priority: 1000
We stellen nu de prioriteit 1000 in voor het Debian repository pakket. Dit zorgt ervoor dat nginx altijd wordt geïnstalleerd vanuit de Debian-repository en niet vanaf een andere locatie.
Je kunt niet alleen de oorsprong van het pakket opgeven, maar je kunt ook het archief, de component, het label en de architectuur van het pakket toevoegen dat het systeem kiest met behulp van onderstaande sleutelbegrippen:
- c -> Component
- a -> Archive
- o -> Origin
- l -> Label
- n -> Architecture
Specifieke Kernel Updates
Laten we kijken hoe we specifieke kernelupgrades in Debian kunnen blokkeren. We controleren eerst welke versie van de kernel actief is. Voer hiervoor het onderstaande commando uit:
$ uname -r
Je zou een soortgelijke output moeten zien:
4.19.0-6-amd64
Om te voorkomen dat de kernel verder wordt geüpgraded, kun je dit commando gebruiken apt-mark
.
$ sudo apt-mark hold linux-image-$(uname -r)
Je zou een soortgelijke output moeten zien:
linux-image-4.19.0-6-amd64 set on hold.
Laten we eerst de details met betrekking tot de huidige versie van de kernel controleren.
$ apt-cache policy linux-image-$(uname -r)
Je zou een soortgelijke output moeten zien:
linux-image-4.19.0-6-amd64: Installed: 4.19.67-2+deb10u1 Candidate: 4.19.67-2+deb10u1 Version table: *** 4.19.67-2+deb10u1 500 500 http://security.debian.org/debian-security buster/updates/main amd64 Packages 500 http://security.debian.org buster/updates/main amd64 Packages 100 /var/lib/dpkg/status 4.19.67-2 500 500 http://deb.debian.org/debian buster/main amd64 Packages
Hoewel de kernel 4.19.0.6 de laatste versie heeft (4.19.67), gaan we bij het schrijven van deze tutorial ervan uit dat er een nieuwere versie beschikbaar zal zijn (4.19.81 is de huidige stabiele Linux kernelversie).
Om de volgende versie van de kernel te blokkeren kun je deze code in dit bestand toevoegen /etc/apt/preferences
.
ackage: linux-image-4.19.0-6-amd64 Pin: version 4.19.81-2+deb10u1 Pin-Priority: -1
De bovenstaande code blokkeert alleen de installatie van versie 4.19.81. Andere versies worden niet geblokkeerd, je moet het bestand dus bijwerken als je meerdere versies wilt blokkeren. Je kunt ook dit commando apt-mark
gebruiken om alle upgrades in een keer uit te voeren.
Je kunt dezelfde methode gebruiken voor het blokkeren van kernel headers door het linux-headers-$(uname -r)
pakket te blokkeren.
Conclusie
Gefeliciteerd! Je kunt nu specifieke versies van pakketten blokkeren die je niet op jouw Debian server wilt installeren of upgraden.
Geef een reactie