Pakketten en kernel updates blokkeren in Debian

Estimated reading time: 5 min

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 Cloud VPS of Dedicated 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-markcommando 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.

Was this article helpful?
Dislike 0
Views: 100

Lees Interacties

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

snel-knowledgebase-image