Das Debian Paketmanagement löst nicht nur Abhängigkeiten auf und beachtet diese, sondern ist im Grunde auch dafür zuständig, daß der Benutzer grundsätzlich ein lauffähiges System auf dem Rechner hat.
Inhaltsverzeichnis
Informationen
Informationen legt dpkg in dem Verzeichnis /var/lib/dpkg ab. Z.B. die Datenbank "available" der verfügbaren Pakete - und "status", das den Installationsstatus anzeigt. Sollten diese Daten kaputt sein, kann man diese teilweise wieder mit De Kopien ("*-old") wieder herstellen. Allerdings sind dann die Informationen nicht mehr korrekt. Wer hier zuschlägt sollte unbedingt Sicherungskopien der vorhandenen Daten behalten!
Konflikte
Das spezielle Problem, das hier geschildert wird ist, dass der Benutzer einen MailServer (Mail Transport Agent, MTA ) lokal installiert hat (also nicht als Debian-Paket) installiert hat. dpkg war jetzt der Meinung, das das Sytem nicht lauffähig, weil kein MTA installiert war (also eine Paketabhängigkeit nicht gelöst werden konnte).
Das Paketsystem stellt sicher, daß ein Programm auf alles zugreifen kann, was es braucht. Ein MUA braucht einen MTA, also muß immer ein Paket installiert sein, das ein "Provides: mail-transport-agent" liefert. Da es für den Betrieb (und für den Normaluser) nicht sinnvoll ist, mehrere MTAs gleichzeitig installiert und am laufen zu haben, machen die MTA Pakete folgendes:
Provides: mail-transport-agent Conflicts: mail-transport-agent
So kann kein zweiter MTA installiert werden, solange ein anderer schon installiert ist.
"Die Nutzer wollen halt auch mal ihren MTA wechseln, auch mal einen installieren, zu dem es kein deb gibt. Das wird einem leider sehr sehr schwer gemacht."
Das hat mit dem MTA nichts zu tun, sondern mit dem Prinzip des Paketsystems. dpkg soll sicherstellen, daß man immer ein funktionsfähiges System hat. Das Problem wirst du auch haben, wenn du z.B. info2www installieren willst, und einen selbst kompilierten Webserver hast. Dpkg schlägt dann apache zur Installation vor.
'dpkg' kann nichts über selbst gebaute Programme wissen.
Nun gibt es das Paket *equivs,* welches Dummy Pakete mit diesen Dependency Informationen herstellen kann. Damit kann man dpkg solche lokalen Programme "unterschieben". Installier dir die Version aus Potato (oder etwas aktueller aus ftp://134.95.210.54/pub/debian/equivs/). Du brauchst dann ein Control File:
$ cat mail-transport.ctl Package: mta-local Section: mail Provides: mail-transport-agent Conflicts: mail-transport-agent Description: My local MTA A package with just provides mail-transport-agent for my local MTA. $ make-equivs mail-transport.ctl
erstellt dann ein Dummypaket mta-local_1.0_all.deb. Jetzt geht es mit etwas sanften Druck auf dpkg weiter (es ginge über zwei Zwischenschritte auch ohne -force, aber du scheinst dich vor sowas nicht zu fürchten).
dpkg --force-conflicts -i mta-local_1.0_all.deb dpkg --purge smail
Dann aktivierst du deinen MTA in /usr/local/ und bist fertig.
Weblinks
Gut verpackt ist halb gewonnen - von Sven Rudolph und Heiko Schlittermann