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

Re: aptitude unter sarge: Wie kann man das extended State-Information abfragen?



On 31.03.06 22:59:37, Friedhelm Usenet Waitzmann wrote:
> 1. Sichern des Installationszustandes aller Pakete.

dpkg --get-selections

> 3. Neupartitionierung der Festplatte

Wenns bloss darum geht, wuerd ich ne 2. Platte nehmen und das System
einfach kopieren. Ist deutlich weniger Aufwand.

> 5. Wiedereinspielen des Installations-Sollzustandes aller Pakete

dpkg --set-selections

> 6. Alle Paket gemäß ihres Installations-Sollzustandes mittels
>    aptitude install installieren.

apt-get dselect-upgrade

> Oder gibt es ein besseres Verfahren, wie man Schritt 5. und 6.
> bewirken kann?

Siehe oben. Allerdings hast du dann tatsaechlich keine Informationen
mehr fuer aptitude welche Pakete "automatisch" und welche nicht
automatisch installiert wurden.

Um das hinzubekommen musstest du ungefaehr sowas in ein Skript
schreiben:

export LANG=C
liste=
dpkg --get-selections | cut -f1 | while read paket ; do 
	if `apitude show | grep -i "Automatically installed: no"` ; then
		liste="$liste $paket"
	fi
done
echo $liste

Als Ausgabe erhaelst du eine Liste alle nicht automatisch installierten
Pakete. Damit kannst du dann spaeter aptitude install fuettern.

Den hold/nicht-hold-Status kriegst du so aber auch nicht hin. Ob/Wie das
gehen koennte weiss ich auch nicht.

> Für jedes Paket A, das in Version AVi installiert war,
>    führe aus aptitude install A=V

Dafuer muesstest du dpkg bemuehen, um die genauen Paketversionen
herauszubekommen. Ist aber auch nur ein | cut -f2 oder so... 

> Für jedes Paket B, das in Version BVi automatisch installiert war,
>    führe aus aptitude install B && aptitude markauto B

Brauchst du nicht, es sei denn du hast Pakete "haendisch" auf auto
gesetzt. Dann solltest du obiges Skript nehmen das "no" auf yes aendern
und dir damit eine Liste der Pakete generieren die auf Auto gesetzt
werden muessen.

> Für jedes Paket C, das in Version CVh festgehalten war,
>    führe aus aptitude install C=CVh && aptitude hold C

Und genau das kriegst du IMHO nicht raus. Ooh, halt doch. Steht auch in
aptitude show (State: installed [held]). Allerdings sehe ich grade das
die Version nicht passt. Sprich wenn ich hier Version 6.8.2 von
xserver-xorg auf hold setze zeigt mit aptitude show trotzdem als Version
6.9.0 an. Sollte man mal nen Bugreport zu verfassen, denke ich.
Jedenfalls passiert das wenn die Version nur noch lokal installiert ist
und in keinem debian-Repository mehr vorhanden ist.

> Für jedes Paket D, dessen Version DVf gesperrt (forbid-version) war,
>    führe aus aptitude forbid-version D=DVf

Auch das kriegst du aus aptitude show raus, diesmal inkl. der richtigen
Version.

> Damit das nicht so sehr langsam abläuft, könnte man die
> Verarbeitung möglichst vieler Pakete zusammenfassen in
> Aptitude-Aufrufe der Art

Ja, du musst dir nur eine Datei anlegen in der ungefaehr sowas drin
steht:

<paket> <installierte Version> <auto|manual> <forbid=<version>> <hold=<version>>

Mit einem festgelegten Trennzeichen zwischen den Feldern (z.B. \t). 

> Nur: Was passiert, wenn man ein Paket A hat, das in Version AVi
> installiert werden soll und abhängt
> 
> * von einem Paket C, das in Version CVh festgehalten werden soll,

Das verstehe ich nicht ganz, du meinst das A=AVi von C>=CVh abhaengt
oder was? Dann war es im urspruenglichen System nicht in Version AVi
installiert. Da du aber mit install A=AVi installierst hast du diesselbe
Version wie vorher.

Achja, auf unstable und testing Rechnern sollte man wohl auch die deb's
mitnehmen beim Sichern. Jedenfalls wenn man damit rechnen muss das
zwischen Listen-Erstellung und wiedereinspielen mehr als ein paar Tage
liegen.

> oder 
> 
> * von einem Paket D, dessen Version DVf gesperrt war, und das in
>   einer älteren Version als DVf installiert war.

Das kann nicht passieren, da du ja D<=DVf installierst.

> Muss man dann dafür sorgen, dass, bevor A=AVi installiert wird,
> 
> * das Paket C=CVh installiert und festgehalten
>
> * und das Paket D=DVf gesperrt wird,

Ich wuerde in der Reihenfolge:

aptitude forbid-version D=DVf

fuer alle Pakete D die verboten wurden, dann 

aptitude hold C=CVh

fuer alle Pakete C die auf hold gesetzt wurden und schliesslich (aber
bin nicht sicher ob das ohne Installation klappt)

aptitude markauto B=BVa

fuer alle die automatisch installiert wurden. Danach dann das 

aptitude install A=AVi C=CVh D<=DVf (oder >=DVf)

> oder macht Aptitude automatisch nachträglich, nachdem es A=AVi, C
> in einer neueren (CVi) Version als CVh, und D=DVf installiert
> hat, das Folgende?
>
> * C=CVi wird wieder deinstalliert,
> * C=CVh wird installiert und festgehalten, und
> * D in der Version DVf wird deinstalliert und gesperrt und in
>   einer älteren Version als DVf installiert.

Keine Ahnung, habe ich noch nie probiert.

Ich kann verstehen dass es bei einer grossen Menge von Paketen die du
mittels markauto, hold oder forbid-version "bearbeitet" hast "schoen"
waere diese Stati zu sichern. Aber bei weniger als 4 Haende voll wuerde
ich mir vmtl. nur ne Liste der Markauto, Hold (mit Version) und
Forbid-Version (mit Version) anlegen und das nach dem apt-get
dselect-upgrade per Hand wieder "einpflegen". Andersrum, wenn das Skript
erstmal geschrieben ist und das ganze "kampferprobt" ist...

Andreas

-- 
Living your life is a task so difficult, it has never been attempted before.



Reply to: