Ricerca nel sito web

Come bloccare gli aggiornamenti di pacchetti e kernel in CentOS/Rocky Linux


Su questa pagina

  1. Prerequisiti
  2. Metodo 1 - Disattiva permanentemente l'installazione/gli aggiornamenti dei pacchetti (utilizzando yum.conf)
    1. Blocca gli aggiornamenti del kernel

    1. Blocco dei repository tramite il loro file repository

    Il gestore di pacchetti è probabilmente lo strumento più utile per un utente Linux. Puoi installare, aggiornare e rimuovere qualsiasi software/pacchetto dal tuo sistema Linux con un solo comando. Ma a volte, è necessario un controllo granulare su quale pacchetto si desidera installare o aggiornare e su quale pacchetto bloccare l'aggiornamento automatico. Perché vorresti farlo? A volte scopri che una versione aggiornata dei pacchetti è difettosa. Non vuoi che quel pacchetto venga aggiornato la prossima volta che esegui sudo yum upgrade. Ed è una seccatura aggiornare ogni pacchetto individualmente.

    In questo tutorial, tratteremo come bloccare l'installazione o l'aggiornamento di determinati pacchetti e come bloccare l'installazione di versioni specifiche di pacchetti o kernel.

    Nota: è facile dimenticare quali pacchetti hai conservato dopo un po' di tempo, anche quando sono uscite le loro versioni prive di bug. Quindi rimani in allerta poiché tenere a lungo i pacchi può introdurre problemi di sicurezza.

    Discuteremo cinque metodi qui. Tutti questi metodi coinvolgeranno il gestore di pacchetti yum (Yellow dog Updater, Modified) e dnf (Dandified YUM).

    Prerequisiti

    • Un server con CentOS o Rocky Linux o Alma Linux. Per questo tutorial è stato utilizzato Rocky Linux 9, ma i comandi qui dovrebbero funzionare bene anche con gli altri sistemi operativi e le versioni precedenti.
    • Un utente non root con privilegi sudo.

    Metodo 1: disabilitazione permanente dell'installazione/aggiornamenti dei pacchetti (utilizzando yum.conf)

    Per impedire che un pacchetto venga installato, aggiornato o rimosso in modo permanente, possiamo usare /etc/yum.conf o /etc/dnf/dnf.conf< /codice> file.

    Dovrebbe essere simile al seguente.

    [main]
    gpgcheck=1
    installonly_limit=3
    clean_requirements_on_remove=True
    best=True
    skip_if_unavailable=False
    

    Se desideri impedire l'installazione, l'aggiornamento o la rimozione di un pacchetto, ad esempio nginx, aggiungi la seguente riga alla fine del file.

    exclude=nginx
    

    Se vuoi fermare tutti i pacchetti nginx, puoi usare il carattere *.

    exclude=nginx*
    

    Se vuoi escludere più di un pacchetto, puoi separare i loro nomi con uno spazio.

    exclude=nginx php
    

    Il pacchetto bloccato rimarrà sulla stessa versione anche se aggiorni il tuo sistema. Ciò è particolarmente utile per trattenere i driver grafici.

    Proviamo a installare il pacchetto bloccato, nginx.

    $ sudo dnf install nginx
    or
    $ sudo yum install nginx
    

    Otterrai un risultato simile.

    Last metadata expiration check: 0:00:21 ago on Mon 05 Dec 2022 10:42:01 AM UTC.
    All matches were filtered out by exclude filtering for argument: nginx
    Error: Unable to find a match: nginx
    

    Puoi anche bloccare i pacchetti tramite la loro architettura qui. Ad esempio, se vuoi bloccare i pacchetti a 32 bit, puoi inserire la seguente riga nel file /etc/yum.conf.

    exclude=*.i?86 *i686
    

    C'è un avvertimento importante con questo metodo. Sebbene il pacchetto non venga aggiornato automaticamente utilizzando il comando sudo yum upgrade o durante l'aggiornamento del sistema, puoi comunque rimuovere il pacchetto manualmente. sudo yum remove funzionerà ancora sui pacchetti bloccati.

    Questo metodo impedisce solo che vengano modificati automaticamente. Mantenerli in attesa li manterrà alle loro versioni correnti, qualunque cosa accada, a meno che tu non decida di rimuoverli manualmente.

    Blocca gli aggiornamenti del kernel

    Per bloccare l'aggiornamento del kernel, utilizzare il seguente comando.

    $ sudo dmf --exclude=kernel* update
    or
    $ sudo yum --exclude=kernel* update
    

    Puoi usare kernel* come nome del pacchetto in tutti gli altri metodi per bloccare gli aggiornamenti del kernel.

    Metodo 2: disabilitare temporaneamente l'installazione/gli aggiornamenti dei pacchetti

    Questo metodo prevede l'utilizzo del comando yum con un parametro aggiuntivo.

    Al momento dell'aggiornamento di qualsiasi pacchetto, utilizzare l'opzione -x con il comando per bloccare pacchetti specifici che non si desidera aggiornare.

    $ sudo dnf -x nginx update
    or
    $ sudo yum -x nginx update
    

    Il comando precedente aggiornerà tutti i pacchetti tranne il pacchetto nginx sul tuo sistema. Per bloccare più pacchetti con un singolo comando, utilizza l'opzione -x più volte.

    $ sudo dnf -x nginx -x php update
    or
    $ sudo yum -x nginx -x php update
    

    Puoi anche usare l'opzione --exclude invece di -x allo stesso modo.

    $ sudo dnf --exclude nginx, php
    or
    $ sudo yum --exclude nginx, php
    

    Metodo 3: utilizzo del repository (utilizzo di file .repo)

    Se hai un pacchetto installato tramite il suo repository, allora c'è un altro modo per impedirne l'aggiornamento. Questo viene fatto modificando il suo file .repo che puoi trovare nella directory /etc/yum.repos.d.

    Supponiamo che il tuo sistema abbia il repository Epel aggiunto e non desideri installare il pacchetto golang da esso, puoi bloccarlo aggiungendo la riga exclude=certbot nel file /etc/yum.repos.d/epel.repo come mostrato.

    [epel]
    name=Extra Packages for Enterprise Linux 8 - $basearch
    # It is much more secure to use the metalink, but if you wish to use a local mirror
    # place its address here.
    #baseurl=https://download.example/pub/epel/8/Everything/$basearch
    metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
    enabled=1
    gpgcheck=1
    countme=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
    exclude=certbot
    ...
    

    Ora prova a installare il pacchetto certbot che è disponibile tramite il repository Epel.

    $ sudo dnf install certbot
    or
    $ sudo yum install certbot
    

    Otterrai un risultato simile.

    Extra Packages for Enterprise Linux 8 - x86_64                                           20 kB/s | 4.5 kB     00:00
    All matches were filtered out by exclude filtering for argument: certbot
    Error: Unable to find a match: certbot
    

    Metodo 4: blocco dell'aggiornamento di un intero repository

    In alternativa, puoi bloccare l'aggiornamento di un intero repository.

    Innanzitutto, controlliamo tutti i repository sul nostro sistema.

    $ dnf repolist
    or
    $ yum repolist
    

    Otterrai un risultato simile.

    repo id                                       repo name
    appstream                                     Rocky Linux 8 - AppStream
    baseos                                        Rocky Linux 8 - BaseOS
    digitalocean-agent                            DigitalOcean Agent
    docker-ce-stable                              Docker CE Stable - x86_64
    epel                                          Extra Packages for Enterprise Linux 8 - x86_64
    extras                                        Rocky Linux 8 - Extras
    nginx-stable                                  nginx stable repo
    

    Per escludere l'aggiornamento del repository Epel, utilizzare il seguente comando.

    $ sudo dnf update --disablerepo=epel
    or
    $ sudo yum update --disablerepo=epel
    

    Puoi disabilitare più repository separando i loro ID con virgole.

    $ sudo dnf update --disablerepo=epel, extras
    or
    $ sudo yum update --disablerepo=epel, extras
    

    Blocco dei repository tramite il loro file repo

    C'è un altro modo per bloccare un repository che implica la modifica del particolare file repo.

    Apriamo il file epel.repo per la modifica.

    $ sudo nano /etc/yum.repos.d/epel.repo
    

    Cambia il valore della variabile enabled da 1 a 0.

    [epel]
    name=Extra Packages for Enterprise Linux 8 - $basearch
    # It is much more secure to use the metalink, but if you wish to use a local mirror
    # place its address here.
    #baseurl=https://download.example/pub/epel/8/Everything/$basearch
    metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
    enabled=0
    gpgcheck=1
    countme=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
    ...
    

    Salva il file premendo Ctrl + X e immettendo Y quando richiesto.

    Ora proviamo a installare il pacchetto certbot che è disponibile nel repository epel.

    $ sudo dnf install certbot
    or
    $ sudo yum install certbot
    

    Otterrai un risultato simile.

    Last metadata expiration check: 0:02:10 ago on Mon 05 Dec 2022 10:48:31 AM UTC.
    No match for argument: certbot
    Error: Unable to find a match: certbot
    

    Metodo 5: blocco dei pacchetti in una determinata versione (utilizzando il plug-in versionlock)

    Versionlock è un plugin per il gestore di pacchetti Yum. Questo plugin non consente l'aggiornamento dei pacchetti a una versione superiore a quella installata al momento dell'esecuzione del blocco.

    Innanzitutto, installa versionlock.

    $ sudo dnf install dnf-plugin-versionlock
    or
    $ sudo yum install dnf-plugin-versionlock
    

    Questo creerà anche un file /etc/yum/pluginconf.d/versionlock.list sul tuo sistema.

    Per bloccare la versione corrente di mariadb-server installata sul tuo sistema, esegui il seguente comando.

    $ sudo dnf versionlock mariadb-server
    or
    $ sudo yum versionlock mariadb-server
    

    Otterrai un risultato simile.

    Last metadata expiration check: 0:01:05 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
    Adding versionlock on: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*
    

    Puoi aggiungere più pacchetti contemporaneamente.

    $ sudo dnf versionlock evolution golang
    or
    $ sudo yum versionlock evolution golang
    

    Otterrai un risultato simile.

    Last metadata expiration check: 0:01:05 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
    Adding versionlock on: evolution-0:3.28.5-18.el8.*
    Adding versionlock on: golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*
    

    Proviamo ad aggiornare il pacchetto mariadb-server.

    $ sudo dnf update mariadb-server
    or
    $ sudo yum update mariadb-server
    

    Otterrai un risultato simile.

    Last metadata expiration check: 0:02:07 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
    Package mariadb-server available, but not installed.
    No match for argument: mariadb-server
    Error: No packages marked for upgrade.
    

    Per controllare l'elenco dei pacchetti bloccati tramite il plug-in versionlock, utilizzare il seguente comando.

    $ dnf versionlock list
    or
    $ yum versionlock list
    

    Otterrai un risultato simile.

    Last metadata expiration check: 0:00:05 ago on Wed 07 Dec 2022 02:36:20 AM UTC.
    elasticsearch-7.17.5-1.x86_64
    mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*
    evolution-0:3.28.5-18.el8.*
    golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*
    

    Per rimuovere il pacchetto dal versionlock, utilizzare il seguente comando.

    $ sudo dnf versionlock delete mariadb-server
    or
    $ sudo yum versionlock delete mariadb-server
    

    Otterrai il seguente output.

    Deleting versionlock for: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*
    

    Per eliminare l'elenco e cancellare i blocchi, utilizzare il seguente comando.

    $ sudo dnf versionlock clear
    or
    $ sudo yum versionlock clear
    

    In alternativa, puoi modificare il file /etc/yum/pluginconf.d/versionlock.list per bloccare i pacchetti utilizzando il plugin versionlock.

    Per aggiungere un pacchetto installato al file, utilizzare il seguente comando.

    $ sudo sh -c 'rpm -qa | grep evolution >> /etc/yum/pluginconf.d/versionlock.list'
    

    Il comando precedente blocca il pacchetto evolution aggiungendolo all'elenco. Abbiamo usato rpm -qa | grep evolution per ottenere il nome completo del pacchetto. E il

    Il comando sudo sh -c esegue una shell sudo sotto la quale vengono eseguiti i comandi per scrivere nel file.

    Conclusione

    Questo è tutto per questo tutorial. Ora dovresti essere in grado di bloccare qualsiasi versione specifica di qualsiasi pacchetto che non desideri installare o aggiornare sul tuo sistema CentOS o Rocky Linux.