Come bloccare gli aggiornamenti di pacchetti e kernel in CentOS/Rocky Linux
Su questa pagina
- Prerequisiti
- Metodo 1 - Disattiva permanentemente l'installazione/gli aggiornamenti dei pacchetti (utilizzando yum.conf)
- Blocca gli aggiornamenti del kernel
- 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) ednf
(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 rigaexclude=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 repositoryepel
.$ 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 usatorpm -qa | grep evolution
per ottenere il nome completo del pacchetto. E ilIl 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.