Home
» Hoe
»
Een Zypper-vergrendeling veilig verwijderen op SUSE Linux Enterprise
Een Zypper-vergrendeling veilig verwijderen op SUSE Linux Enterprise
Als SUSE Linux Enterprise meldt dat Zypper door een ander proces is geblokkeerd, wacht dan eerst tot alle actieve software-updates, YaST-pakketbewerkingen of geautomatiseerde onderhoudstaken zijn voltooid. Controleer welk pakketbeheerproces verantwoordelijk is voor de taak voordat u iets stopt. Als er geen pakketbewerkingen actief zijn en de blokkering blijft bestaan, onderzoek dan de oorzaak zonder blindelings blokkeringsbestanden te verwijderen; probeer Zypper vervolgens opnieuw. Een pakketblokkering die is veroorzaakt door een ander proces zypper addlockis een ander probleem en vereist een andere oplossing.
Wat betekent "vergrendeld door een ander proces"?
Zypper en de onderliggende pakketbeheertools beschermen pakkettransacties tegen overlappende wijzigingen. Een vernieuwing, patch, installatie, YaST-softwaretaak of geplande update kan een tweede transactie tijdelijk blokkeren. De vergrendeling is een coördinatiemechanisme: het verwijderen ervan terwijl RPM of Zypper nog steeds pakketten aan het wijzigen is, kan de pakketdatabase of het systeem in een inconsistente staat achterlaten.
Geverifieerd onderscheid: een procesvergrendeling voorkomt gelijktijdige pakketbewerkingen; een pakketvergrendeling voorkomt dat een specifiek pakket wordt geselecteerd voor installatie, upgrade of verwijdering. De SUSE-documentatie beschrijft pakketvergrendelingen als een aparte functie. De SUSE RPM Packaging Guide legt Zypper-pakketvergrendelingen uit . Als de foutmelding een ander proces noemt of aangeeft dat de pakketbeheerder bezig is, begin dan met de onderstaande procescontroles. Als er staat dat een specifiek pakket is vergrendeld of uitgesloten, voer sudo zypper locksdan in plaats daarvan de vermelde pakketregels uit en controleer deze.
1. Controleer of een pakketbewerking nog steeds actief is.
Wacht een paar minuten als er net een update, installatie of repositoryverversing is gestart. Controleer op een server eerst bij de beheerder of de eigenaar van de onderhoudsautomatisering; een patchtaak op de achtergrond heeft mogelijk geen zichtbare terminal.
Zoek naar een echte Zypper-, RPM-, YaST- of PackageKit-taak en noteer de PID, de verstreken tijd en het commando. De grep-expressie voorkomt dat het zoekcommando zelf wordt gebruikt voor Zypper en RPM. Een proceslijst is een momentopname, dus herhaal de zoekopdracht na een korte wachttijd als het resultaat onduidelijk is. Het onderstaande voorbeeld is een illustratieve weergave in de terminal, geen rapport van een echte machine.
Controleer de procesnaam, PID en verstreken tijd voordat u bepaalt of de pakketbeheerder nog actief is.
Wat nog niet vaststaat: het zien van een proces bewijst niet dat het vastgelopen is. Een pakkettransactie kan metadata downloaden of wachten op opslag of een repository. Beëindig het proces niet zomaar omdat de opdracht stilstaat. Als het proces vordert, laat het dan voltooien en voer de oorspronkelijke Zypper-opdracht daarna opnieuw uit.
2. Controleer de taken voor softwarebeheer en -onderhoud.
Desktopinstallaties maken mogelijk gebruik van PackageKit, terwijl beheerde servers geplande updates uitvoeren via systemd-timers of SUSE Manager. Vink alleen de services aan die op uw host aanwezig zijn:
systemctl status packagekit
systemctl list-timers --all
Als PackageKit ontbreekt, meldt systemd dat de unit niet gevonden kon worden; dat betekent niet dat Zypper defect is. Als het wel actief is, controleer dan de recente logberichten en bevestig dat er geen installatie of update gaande is voordat u overweegt het te stoppen.
Wanneer een bevestigde PackageKit-bewerking is voltooid, maar de bijbehorende service actief blijft en Zypper blokkeert, neem dan contact op met de persoon of het automatiseringsmechanisme dat de updates beheert. Op een host waar het stoppen ervan gepast is, gebruikt u de opdracht `updates` sudo systemctl stop packagekiten controleert u vervolgens met `updates` systemctl status packagekit. Schakel de service niet uit en stop geen andere updatetimers als algemene oplossing. Namen en updateschema's zijn afhankelijk van de geïnstalleerde componenten en het beheerbeleid van het systeem.
Gebruik de servicestatus en het logboek om te bepalen of PackageKit bezig is met pakketverwerking voordat u het stopt.
3. Als er geen actieve eigenaar is, onderzoek dan een verouderd slot.
Een verouderd vergrendelingsbestand kan het gevolg zijn van een onderbroken sessie, een herstart of een mislukte beheertaak, maar de aanwezigheid ervan alleen is geen indicatie van de oorzaak. De gebruikersdocumentatie van SUSE biedt geen universele instructie voor het verwijderen van een vergrendelingsbestand voor elke SLES-release en -configuratie. Vermijd opdrachten zoals die worden gebruikt rmop basis van geraden paden en gebruik ze niet kill -9op een onbekende PID. Een vergrendelingsbestand kan opnieuw worden aangemaakt of vervangen terwijl een transactie actief is, en het verwijderen ervan stopt het proces dat eigenaar is van de transactie niet.
Controleer de proceslijst opnieuw, inspecteer de relevante servicelogboeken en zorg ervoor dat er geen pakketbewerkingen actief zijn. Als u een verouderd PID-bestand of vergrendelingspad kunt vinden, controleer dan de eigenaar en raadpleeg de gedocumenteerde procedure voor uw specifieke SLES-servicepack of de ondersteuningsrichtlijnen voordat u dit wijzigt. Leg voor productiesystemen de exacte fout en logboeken vast en volg de SUSE-ondersteuningsprocedure van uw organisatie. Dit is het punt waar lokale details van belang zijn: de fouttekst, het SLES-servicepack, de geïnstalleerde desktoptools en de beheeragent kunnen de juiste herstelactie bepalen.
4. Probeer Zypper opnieuw en controleer de transactie.
Zodra de concurrerende bewerking is voltooid, vernieuwt u de metagegevens van de repository:
sudo zypper refresh
Een succesvolle vernieuwing bevestigt dat Zypper nu toegang heeft tot zijn repositories en dat de procesvergrendeling die opdracht niet langer blokkeert. Als uw oorspronkelijke taak was om het systeem te patchen, bekijk dan de voorgestelde wijzigingen voordat u ze toepast:
sudo zypper patch --dry-run
Bekijk de pakketten en acties in de uitvoer. Een testrun is een planningscontrole; de vermelde updates worden niet geïnstalleerd. Wanneer het voorstel wordt verwacht en uw onderhoudsvenster dit toelaat, voert u de testrun uit sudo zypper patch. De documentatie van SUSE SLES 15 SP7 beschrijft softwarebeheer via de opdrachtregel, inclusief het installeren en verwijderen van software; het gedrag van opdrachten en de beschikbare opties kunnen per release verschillen. Zie de documentatie voor softwarebeheer van SLES 15 SP7 en de Zypper-referentie van SUSE .
Nadat de concurrerende taak is voltooid, vernieuwt u de metagegevens van de repository om te bevestigen dat Zypper verder kan gaan.Bekijk de patchtransactie in de preview en controleer de voorgestelde wijzigingen voordat u de updates toepast.
Veelvoorkomende aannames die je moet vermijden
"Het slot is altijd verouderd." Dit wordt niet alleen door het bericht bevestigd. Het kan bij een echte update horen. Controleer eerst de actieve processen en logboeken.
“Een pakketvergrendeling en een procesvergrendeling zijn hetzelfde.” Het zijn aparte beveiligingsmaatregelen. Gebruik ze zypper lockswanneer een specifiek pakket expliciet vergrendeld is; verwijder geen pakketregels om een lopende transactie te beëindigen.
"Het verwijderen van een vergrendelingsbestand lost het probleem met de eigenaar op." Het beëindigt echter geen actief proces en voltooit de transactie niet veilig. Identificeer eerst de eigenaar en raadpleeg de releasespecifieke richtlijnen voor verouderde statussen.
"Het herstarten van de server is de gebruikelijke oplossing." Een herstart kan pakketwijzigingen verstoren en is op zichzelf niet gerechtvaardigd door de fout. Gebruik deze functie alleen wanneer uw onderhoudsprocedure of ondersteuningsrichtlijnen dit vereisen.
Controleer de oplossing.
Het probleem is opgelost wanneer sudo zypper refreshde bewerking zonder vergrendelingsfout is voltooid en de beoogde opdracht kan worden uitgevoerd. Controleer sudo zypper patch --dry-runen bevestig bij het patchen de voorgestelde acties voordat u iets toepast. Als de vergrendeling terugkeert, noteer dan de exacte foutmelding, de proceslijst, de relevante servicestatus, de recente logboekuitvoer en de SLES-release. Onderzoek vervolgens het proces of de beheertool die de vergrendeling opnieuw verkrijgt, in plaats van de vergrendelingsstatus herhaaldelijk te verwijderen.