Hvordan gjenoppbygge ødelagt RPM-database i CentOS


RPM-databasen består av filer under /var/lib/rpm/-katalogen i CentOS og andre Linux-distribusjoner for bedrifter som for eksempel RHEL, openSUSE, Oracle Linux og mer.

Hvis RPM-databasen er ødelagt, vil ikke RPM fungere riktig, og oppdateringer kan derfor ikke brukes på systemet ditt, du støter på feil mens du oppdaterer pakker på systemet ditt via YUM-pakkebehandling. Det verste tilfellet er å ikke kunne kjøre noen rpm- og yum-kommandoer.

Les også: 20 praktiske eksempler på RPM-kommandoer i Linux

Det er en rekke faktorer som kan føre til korrupsjon av RPM-databasen, for eksempel ufullstendige tidligere transaksjoner, installasjon av viss tredjepartsprogramvare, fjerning av spesifikke pakker og mange andre.

I denne artikkelen vil vi vise hvordan du gjenoppbygger en ødelagt RPM-database; på denne måten kan du gjenopprette fra en RPM-databasekorrupsjon i CentOS. Dette krever root-brukerprivilegier, ellers bruker du sudo-kommandoen for å få disse privilegiene.

Gjenoppbygg ødelagt RPM-database i CentOS

Start først med å sikkerhetskopiere din nåværende RPM-database før du fortsetter (du kan trenge det i fremtiden), ved å bruke følgende kommandoer.

mkdir /backups/
tar -zcvf /backups/rpmdb-$(date +"%d%m%Y").tar.gz  /var/lib/rpm

Deretter bekrefter du integriteten til hovedpakkens metadatafil /var/lib/rpm/Packages; dette er filen som må gjenoppbygges, men fjern først /var/lib/rpm/__db*-filer for å forhindre foreldede låser ved å bruke følgende kommandoer.

rm -f /var/lib/rpm/__db*		
/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

I tilfelle operasjonen ovenfor mislykkes, noe som betyr at du fortsatt støter på feil, bør du dumpe og laste en ny database. Kontroller også integriteten til den nylastede pakkefilen som følger.


cd /var/lib/rpm/
mv Packages Packages.back
/usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
/usr/lib/rpm/rpmdb_verify Packages

Nå for å sjekke databasehodene, spør etter alle installerte pakker ved å bruke -q- og -a-flaggene, og prøv nøye å observere eventuelle feil som sendes til stderror.


rpm -qa >/dev/null	#output is discarded to enable printing of errors only

Sist, men ikke minst, gjenoppbygg RPM-databasen ved å bruke følgende kommando, alternativet -vv lar deg vise mye feilsøkingsinformasjon.

rpm -vv --rebuilddb

Bruk dcrpm-verktøyet for å oppdage og korrigere RPM-database

Vi oppdaget også kommandolinjeverktøyet dcrpm (oppdag og korriger rpm) som brukes til å identifisere og rette opp velkjente problemer med RPM-databasekorrupsjon. Det er et enkelt og brukervennlig verktøy som du kan kjøre uten valg. For effektiv og pålitelig bruk bør du kjøre den regelmessig via cron.

Du kan installere det fra kilden; last ned kildetreet og installer det ved å bruke setup.py (som også bør ta psutil-avhengigheten fra pypi), som vist.

git clone https://github.com/facebookincubator/dcrpm.git
cd dcrpm
python setup.py install

Når du har installert dcrpm, kjør den som vist.

dcrpm

Til slutt, prøv å kjøre den mislykkede rpm- eller yum-kommandoen din igjen for å se om alt fungerer bra.

dcrpm Github-depot: https://github.com/facebookincubator/dcrpm
Du kan finne mer informasjon fra RPM-databasegjenopprettingssiden.

Det er alt! I denne artikkelen har vi forklart hvordan du gjenoppbygger en ødelagt RPM-database i CentOS. For å stille spørsmål eller dele tankene dine om denne veiledningen, bruk tilbakemeldingsskjemaet nedenfor.