Home
» Hoe
»
Ontgrendel Ubuntu's APT-vergrendeling veilig en voltooi de update.
Ontgrendel Ubuntu's APT-vergrendeling veilig en voltooi de update.
De foutmelding "Could not get lock /var/lib/dpkg/lock-frontend" betekent meestal dat een ander pakketbeheerproces al bezig is. Wacht tot die taak is voltooid, identificeer het proces als de foutmelding niet verdwijnt en herstel pas daarna de onderbroken pakketconfiguratie; het verwijderen van het vergrendelingsbestand is geen veilige oplossing.
APT is Ubuntu's pakketbeheertool, terwijl dpkgde installatie en configuratie van pakketten op een lager niveau wordt uitgevoerd. Ze gebruiken vergrendelingen zodat twee bewerkingen de pakketstatus niet tegelijkertijd kunnen wijzigen. Een vergrendelingsbestand kan tijdens normaal gebruik op de schijf blijven staan, dus de aanwezigheid ervan betekent op zich niet dat het verouderd is.
1. Geef de Ubuntu-updater de kans om zijn werk af te maken.
Sluit eerst alle andere pakkettaken die u bent gestart, zoals een ander Terminal-commando, Software Updater of een app-store-installatie. Als er een updatevenster open is, laat dit dan eerst volledig aflopen in plaats van een tweede aptcommando te starten. Op Ubuntu-desktops zijn mogelijk ook achtergrondupdateservices actief.
Controleer de relevante systemd-services en wacht tot er een actief is:
systemctl status apt-daily.service apt-daily-upgrade.service
Deze eenheden kunnen inactief zijn, zelfs als een andere pakketfrontend de vergrendeling bezit. Controleer daarom ook het proces met behulp van diezelfde vergrendeling. Start geen nieuwe installatie- of upgradeopdrachten terwijl de huidige bewerking actief is.
Het vergrendelingsbericht vermeldt de gebruikte bron en kan een proces-ID bevatten voor nader onderzoek.
2. Identificeer wie de frontend-vergrendeling in handen heeft.
Gebruik dit fuserom de processen te tonen die toegang hebben tot het slot, en inspecteer vervolgens de PID die wordt gerapporteerd:
Vervang dit 2468door de daadwerkelijke PID uit uw uitvoer. Een procesnaam zoals apt, apt-get, dpkg, of een updateservice geeft aan dat er mogelijk nog aan het pakketwerk wordt gewerkt. Als u een uitgebreidere lijst met processen wilt zien, voert u het volgende commando uit:
ps -eo pid,etime,cmd | grep -E '[a]pt|[d]pkg'
Ga er niet van uit dat een proces vastgelopen is alleen omdat er geen zichtbare voortgang is. Pakketdownloads, onderhoudsscripts en het herstarten van services kunnen tijd in beslag nemen. Als het een update betreft die u in een andere terminal bent gestart, ga dan terug naar die terminal en laat deze voltooien. Als een grafische updater de update uitvoert, gebruik dan die applicatie om de bewerking op de gebruikelijke manier te annuleren of af te sluiten.
Gebruik de gerapporteerde PID en de opdrachtnaam om een actieve updater te onderscheiden van de opdracht die u probeert uit te voeren.
3. Ga voorzichtig om met een daadwerkelijk vastgelopen bewerking.
Als het proces een automatische update betreft, controleer dan de status en de logboeken voordat u ingrijpt:
systemctl status apt-daily-upgrade.service
sudo journalctl -u apt-daily-upgrade.service -b --no-pager
Laat de service met rust zolang deze nog bezig is. Als u een pakketopdracht herkent die u zelf hebt uitgevoerd en deze duidelijk vastloopt, onderbreek deze dan eenmaal vanuit de terminal met Ctrl+Cen wacht tot de shell terugkeert. Gebruik geen kill -9, killall dpkg, en verwijder geen bestanden in /var/lib/dpkg; het abrupt stoppen van pakketscripts kan ertoe leiden dat pakketten niet worden uitgepakt maar wel geconfigureerd.
Als het proces is afgesloten maar de pakketbewerking is onderbroken, is opnieuw opstarten een redelijke manier om achtergebleven gebruikersruimtetaken te verwijderen. Controleer na het opnieuw opstarten of er geen Software Updater of installatietaak actief is voordat u verdergaat. Als een service herhaaldelijk vastloopt, gebruik dan de logboekuitvoer om die service te diagnosticeren in plaats van herhaaldelijk vergrendelingsbestanden te verwijderen.
Een actieve apt-daily-upgrade-service is een reden om te wachten en de voortgang te controleren, niet om de vergrendeling op te heffen.
4. Herstel de pakketstatus nadat de vergrendeling is opgeheven.
Zodra geen enkele pakketbeheerder de vergrendeling gebruikt, kunt u alle openstaande pakketconfiguraties voltooien:
sudo dpkg --configure -a
Hiermee worden pakketten geconfigureerd die wel zijn uitgepakt, maar nog niet volledig zijn ingesteld. Als er afhankelijkheidsproblemen worden gemeld, vraag dan APT om deze op te lossen:
sudo apt-get -f install
Lees de voorgestelde wijzigingen voordat u ze bevestigt. Voeg geen wijzigingen toe -ytijdens het oplossen van problemen: de prompt laat u controleren of APT een onverwachte verwijdering of wijziging plant. Nadat de reparatie is voltooid, vernieuwt u de pakketlijsten en probeert u de oorspronkelijke taak opnieuw.
Vervang dit PACKAGE_NAMEdoor het pakket dat u wilde installeren. De APT-get-handleiding van Ubuntu -fbeschrijft een poging om verbroken afhankelijkheden te herstellen, en de dpkg-handleiding legt de pakketconfiguratieactie uit. Als APT nog steeds een blokkering meldt, herhaal dan de procescontrole; mogelijk is er in de tussentijd een tweede pakkettaak gestart.
Nadat de vergrendeling is opgeheven, configureert u de in behandeling zijnde pakketten en controleert u of APT een consistente pakketstatus kan lezen.
Controleer of de reparatie is gelukt.
De oplossing is voltooid wanneer de oorspronkelijke installatie- of updateopdracht zonder vergrendelingsfout wordt uitgevoerd, sudo dpkg --configure -azonder een configuratiefout wordt afgesloten en sudo apt-get checkgeen verbroken afhankelijkheden meldt. Als de vergrendeling terugkeert, probeert een ander proces deze nog steeds te verkrijgen; identificeer dat proces voordat u verdere stappen onderneemt.
De huidige Noble-handleidingen van Ubuntu beschrijven de bovenstaande pakketopdrachten. De exacte timing van de service en de procesnamen variëren per Ubuntu-release en afhankelijk van welke desktop-pakkettools zijn geïnstalleerd, maar de kernregel blijft hetzelfde: wacht op de eigenaar van de vergrendeling en herstel vervolgens dpkg als de eerdere bewerking werd onderbroken.