Il messaggio "Zypper è bloccato da un altro processo" indica che un'altra attività di gestione dei pacchetti sta mantenendo il blocco di gestione del software del sistema. Potrebbe trattarsi di un normale aggiornamento in corso, di un programma di aggiornamento grafico, di YaST, di un'attività di automazione o, meno comunemente, di uno stato di blocco obsoleto dopo un'attività interrotta. La soluzione corretta dipende dal caso specifico. Attendere protegge una transazione attiva; interrompere un'attività identificata ma bloccata può essere appropriato durante una finestra di manutenzione. Eliminare i file di blocco o terminare i processi dei pacchetti senza verificarne la presenza può interrompere le modifiche ai pacchetti e creare un problema di ripristino più complesso.
Innanzitutto, conferma che tipo di serratura stai vedendo
Un blocco di processo e un blocco di pacchetto sono diversi. Il blocco di processo impedisce a due transazioni di gestione dei pacchetti di modificare il sistema contemporaneamente. Un blocco di pacchetto, al contrario, è una regola dell'amministratore che impedisce l'installazione, l'aggiornamento o la rimozione di determinati pacchetti. SUSE documenta i blocchi di pacchetto separatamente; il zypper lockscomando elenca le regole relative a tali pacchetti, ma non identifica il processo che detiene un blocco di transazione.
Verifica il testo esatto dell'errore. Se indica un ID di processo (PID), annotalo. Se il comando è in attesa anziché fallire, lascialo in esecuzione per un breve periodo e verifica se l'altro aggiornamento sta procedendo. Non avviare YaST Software, un altro zyppercomando o un aggiornamento dell'agente di gestione mentre è attiva una transazione.
Scegli la risposta più adatta alla situazione
| Ciò che trovi | Migliore azione successiva | Scambio |
| È in corso l'installazione o l'aggiornamento di un pacchetto. | Attendi che finisca | La scelta più sicura, anche se potrebbe ritardare il tuo compito. |
| Uno strumento software grafico o un amministratore lo ha avviato | Lascia che finisca o coordinati con il proprietario | Evita di interrompere il loro lavoro; richiede l'accesso a quella sessione |
| È attivo un lavoro di gestione programmato o remoto | Verifica lo stato dei lavori e il programma di manutenzione. | Mantiene gli aggiornamenti gestiti, ma potrebbe essere necessario l'amministratore di sistema |
| Il PID è sparito ma lo stesso errore di blocco persiste | Riprova una volta, poi raccogli i dati diagnostici oppure riavvia il sistema solo in un intervallo di tempo sicuro. | Potrebbe risolvere uno stato transitorio, ma un riavvio interrompe altri servizi |
1. Individua il processo che mantiene il blocco
Esegui questo controllo di sola lettura da un terminale:
ps -eo pid,ppid,stat,etime,user,cmd | grep -E '[z]ypper|[y]ast|[p]ackagekit|[r]pm|[z]md'
L'output può rivelare un aggiornamento da riga di comando, YaST, un client PackageKit o un processo di gestione come l'agente client di SUSE Manager. Il solo nome del processo non è sufficiente per stabilire che sia sicuro arrestarlo: un'attività di pacchetto in esecuzione potrebbe svolgere un lavoro importante. Controlla il tempo trascorso, lo stato del processo, il processo padre e qualsiasi finestra di aggiornamento di cui sei a conoscenza. Se non sei root, chiedi a un amministratore di eseguire il controllo o conferma il proprietario del processo.
Se l'errore segnala un PID, esaminate quello specifico processo anziché affidarvi solo a una ricerca testuale:
ps -p 1234 -o pid,ppid,stat,etime,user,cmd
Sostituisci 1234con il PID presente nel tuo messaggio. Un processo che sta utilizzando la CPU, che sta cambiando stato o che appartiene a un servizio di aggiornamento noto dovrebbe generalmente essere lasciato terminare. Se si tratta di un comando da terminale che hai avviato tu stesso, torna a quel terminale e leggi il suo prompt corrente o l'output di avanzamento.
2. Decidere se attendere o interrompere un'attività
Attendi che la transazione sia attiva
Se i pacchetti sono in fase di download, installazione o se il comando è in attesa di conferma, attendere è l'opzione a minor rischio. L'aggiornamento di un pacchetto può richiedere più tempo su dispositivi di archiviazione lenti, batch di aggiornamenti di grandi dimensioni o sistemi con molti pacchetti. Al termine, riprovare a eseguire il comando originale. Se non si registrano progressi per un periodo di tempo insolitamente lungo, annotare il PID e l'ora, quindi controllare il terminale o i log del servizio di aggiornamento pertinenti prima di decidere come procedere.
Interrompi solo un'attività che puoi identificare e interrompere in modo sicuro
Se hai avviato l'altro comando e ti trovi ancora in una finestra di dialogo interattiva, rispondi o annullalo utilizzando l'opzione predefinita del prompt. Per un programma di aggiornamento desktop, utilizza la sua funzione di annullamento o chiusura, se chiaramente disponibile. Non utilizzare questa kill -9opzione come scorciatoia. L'interruzione improvvisa può interrompere una transazione RPM o lasciare il sistema in uno stato che richiede ulteriori interventi di riparazione. Su un server di produzione, coordinati con il responsabile dell'aggiornamento e segui la procedura di manutenzione anziché interrompere un processo sconosciuto.
3. Verifica gli strumenti software di automazione e grafici
Sui sistemi SLES gestiti, gli aggiornamenti possono essere attivati da un amministratore, da un pianificatore o da un server di gestione centrale. Prima di avviare un'altra transazione, controlla il calendario di manutenzione della tua organizzazione e lo stato di qualsiasi processo di aggiornamento. Se il blocco si verifica ripetutamente nello stesso momento, confronta i timestamp con i processi pianificati. La soluzione definitiva potrebbe essere quella di riprogrammare la manutenzione manuale o di coordinare un'unica finestra di aggiornamento, anziché disabilitare il servizio di gestione.
Su una workstation, un centro software o una sessione YaST potrebbero utilizzare la stessa libreria di gestione dei pacchetti di Zypper. Chiudere o terminare l'operazione software tramite tale applicazione. Non dare per scontato che "PackageKit" sia presente in ogni installazione di SLES; verificare il processo effettivo prima di tentare di eseguire comandi di servizio. Disabilitare un programma di aggiornamento a livello globale può anche impedire la manutenzione di sicurezza prevista, quindi modificare tale criterio solo se l'amministratore di sistema intende farlo.
4. Se il PID registrato non è più in esecuzione
Se l'errore specifica un PID, controllalo di nuovo con ps -p PID. Se non esiste alcun processo, riprova il comando Zypper originale una volta. Alcune versioni della libreria possono rilevare che un processo registrato è terminato e ripulire lo stato transitorio, ma il comportamento può variare a seconda della versione e di come è terminato il comando precedente. Non rimuovere manualmente /run/zypp.pido un altro file di blocco solo perché il PID è assente. La documentazione di AutoYaST di SUSE avverte esplicitamente che la rimozione del blocco di gestione dei pacchetti è a rischio dell'utente.
Se l'errore persiste dopo il tentativo successivo, interrompere l'operazione e raccogliere l'errore esatto, il service pack di SLES, l'ora e la cronologia degli aggiornamenti recenti. Un riavvio controllato potrebbe risolvere un problema temporaneo, ma è consigliabile programmarlo solo dopo aver verificato che non vi siano operazioni di installazione di pacchetti attive e dopo averne controllato l'impatto sui servizi in esecuzione. Sui sistemi critici, chiedere prima all'amministratore o al supporto SUSE di esaminare la situazione.
5. Utilizzare il comando diagnostico corretto
zypper psÈ utile dopo le modifiche ai pacchetti, ma viene spesso frainteso. Nella Guida di amministrazione di SLES, elenca i processi che utilizzano ancora file che sono stati eliminati o sostituiti durante l'applicazione di patch, aggiornamenti o la rimozione di pacchetti. Non è il comando per scoprire chi detiene attualmente il blocco della transazione Zypper. psPer questo scopo, utilizzare il comando e il PID dal messaggio di blocco.
Analogamente, zypper lockselenca i blocchi a livello di pacchetto. Vale la pena verificare se un singolo pacchetto rimane non disponibile dopo la rimozione del blocco di processo, ma ciò non rilascerà un blocco di transazione attivo. La distinzione è importante: eliminare un blocco di pacchetto o modificare la selezione di un pacchetto non può risolvere un altro processo che sta ancora utilizzando il gestore di pacchetti.
Quando è opportuno intensificare la procedura
Se il blocco si ripresenta dopo ogni riavvio, se un processo sembra bloccarsi durante un aggiornamento critico, se il database dei pacchetti segnala ulteriori errori o se il sistema è gestito centralmente, è necessario contattare l'amministratore di sistema. È necessario includere il comando esatto, il testo completo dell'errore, il PID, la versione o il service pack di SLES e l'output del controllo del processo in sola lettura. SUSE documenta il problema /var/log/zypper.logcome file di log di Zypper; un amministratore può esaminare le voci relative al momento dell'errore. Evitare di condividere pubblicamente i log se contengono nomi host, dettagli del repository, nomi utente o percorsi interni.
Verifica che Zypper sia nuovamente disponibile.
Dopo che la transazione nota è stata completata, o dopo che l'amministratore ha risolto la condizione di obsolescenza, eseguire un comando di sola lettura innocuo come zypper --versiono zypper repos. Se viene completato senza l'avviso di blocco, riprovare il comando del pacchetto desiderato durante una finestra di aggiornamento approvata. Esaminare le modifiche proposte da Zypper prima di confermare. Un comando eseguito correttamente dovrebbe essere completato senza che venga interrotto un secondo processo di gestione dei pacchetti; se il messaggio di blocco viene ricomparso, identificare il nuovo PID invece di eliminare i file o ripetere la transazione.
Riferimenti ufficiali di SUSE