[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Återställa dpkgdatabas




On 2006-04-11 Sven Arvidsson  wrote:

pow@pow.nu wrote:
>> Nu har dpkg:s databas krympt, jag råkade installera bassystemet ifrån installat
ionsskivan, det var inte så bra...
>>
>> Jag har hittat dpkg.status.0 i /var/backups men finns det något annat sätt att
åtgärda detta? Backuppen var inte så ny.
>
>http://www.cs.duke.edu/~reynolds/projects/dpkg-rebuild
>
>Det där scriptet verkar kunna hjälpa dig, annars hittade jag ännu fler
>tips här:
>http://linuxmafia.com/faq/Debian/package-database-rebuild.html
>
>Hoppas att du får ordning på det.

Tack!, tillslut fick jag ordning på det.

Den bästa varianten är www.cs.duke.edu/~reynolds/projects/dpkg-rebuild, enligt min
 erfarenhet. Det är ett skript som återskapar /var/dpkg/status och lägger den nya i
 /tmp/status. Dock fick jag ingen ny information i den filen när jag körde skripte
t (illa), men skriptet skriver också ut paketnamn på standard out, så jag tog och a
nvände den listan och skickade till dpkg --set-selections.

Idag provade jag att köra dpkg-rebuild och då skapade den en ny statusfil som verk
ar innehålla de paket som finns, kanske var mitt system för trasigt för att skripte
t skulle kunna skapa en ny status-fil, jag vet inte.

Utifall att någon råkar ut för samma som mig och dpkg-rebuild inte lyckas skapa en
ny statusfil skall jag berätta vad jag gjorde:

## ## BEGIN

dpkg-rebuild | awk '{print $1 " install"}' > selection_list

## Detta är i princip "poängen" med vad som finns på
## http://linuxmafia.com/faq/Debian/package-database-rebuild.html
ls /usr/share/doc | \
grep -v [A-Z] | \
grep -v '^texmf$' | \
grep -v '^debian$' | \
awk '{print $1 " install"}' \
> selection_list2

## Sortera de båda listorna
sort selection_list  > selectionlist_sorted
sort selection_list2 > selectionlist_sorted2

## I mitt fall hittade dpkg-rebuild 120 fler paket,
## men enradsskriptet hittade 9 stycken unika,
## kanske berodde det på att jag installerat några paket
## då systemet var "trasigt" och officiellt inte hade
## "info" och liknade komandon istallerade.
#diff -w selection_list_sorted selection_list_sorted2 | grep ">" | wc -l
#
#diff -w selection_list_sorted selection_list_sorted2 | grep "<" | wc -l

## Lägg till det som endast det ena skriptet hittade
diff -w selection_list_sorted selection_list_sorted2 | \ grep ">" | cut
-d ' ' -f 2,3 >> selection_list_sorted

dpkg --set-selections < selection_list_sorted

## För säkerhets skull, kopiera etc, så ändringar blir kvar.
cp -a /etc etc.org

## Välj install i dselect
dselect

mv etc etc.ny-grej
mv etc.org etc

## ## END

Nu blev det nog krångligare än nödvändigt, genom att göra

dpkg-rebuild | awk '{print $1 " install"}' > selection_list
## kontrollera att filen ser ok ut
dpkg --set-selections < selection_list
cp -a /etc etc.org
dselect
mv etc etc.ny-grej
mv etc.org etc

kommer man nog ganska långt i alla fall.

puh

Tack för hjälpen!

/pow

--
              If this (Superbowl) is the ultimate game,
              why are they playing it again next year?
                                -Duane Thomas
                                 1972 Superbowl VI




Reply to: