Paketabhängigkeiten umgehen mit APT #
Ich möchte gerne ein Paket ohne eine seiner Abhängigkeiten installieren. Das geht leider nicht so einfach... Der Hintergrund ist, das Oracle seit Oktober 2011 die Auslieferung aktualisierter Java-Pakete in seiner Lizenz vebietet. Dies wird damit begründet, das das OpenJDK inzwischen weit genug sei. Debian hat sich nun entschieden, auch das alte Paket nicht mehr auszuliefern, da es inzwischen entdeckte Sicherheitslücken enthält. Nun möchte ich das Adempiere-Paket in einem Debian Squeeze installieren, das nicht aus dem offiziellen Repository kommt, aber eine Abhängigkeit zu java-6-sun enthält.
Lösung 1 (unbefriedigend) #
Zuerst kam mir die Idee, es direkt zu installieren und dabei dpkg dazu zu bringen, die Abhängigkeit zu umgehen:
dpkg -i --ignore-depends sun-java6-jdk Adempiere_GlobalQSS_20111114_postgres.deb
Das funktionierte zuerst einmal. Es hat allerdings eine sehr unschöne Nebenwirkung: apt-get merkt, das ich es hinterrücks bepfuscht habe und weigert sich ab sofort, andere Pakete zu installieren, ohne die unaufgelöste Abhängigkeit zu befriedigen. Praktisch bedeutet das, das bei einem späteren Paketinstallations-Versuch immer als Lösung vorgeschlagen wird, adempiere zu deinstallieren. Stimmt man diesem Voschlag nicht zu, wird dann gar nichts gemacht... :-(
Lösung 2 (gehackt) #
Eine Lösung für dieses Dilemma habe ich in Diesem Posting gefunden. Man kann nach dr Installation eines Paketes in der Datei /var/lib/dpkg/status den Eintrag des adempiere-Pakets suchen und die Abhängigkeit entfernen.
Lösung 3 (auch nicht perfekt, aber am besten) #
Es gibt das Debian-Paket equivs, mit dem man Dummy-Pakete erzeugen kann, die nichts machen außer Abhängigkeiten zu besitzen und ggf. aufzulösen. Das ist hauptsächlich für Fälle gedacht, wo jemand ein Programm von Hand installiert hat und dem System mitteilen möchte, das es existiert. Es funktioniert aber auch für unser Problem. Natürlich entsteht dadurch ein etwas falscher Anschein, aber für mich ging das erstmal.
Nach der Installation des equivs-Pakets habe ich mit
equivs-control tbayen-sun-java6-jdk-control
eine sogenannte control-Datei erzeugt. In dieser habe ich dann den Paketnamen "tbayen-sun-java6-jdk" eingesetzt und die Zeile "Provides: sun-java6-jdk" eingefügt. Dadurch ist auch später für einen Beobachter klar, das mein Paket kein Sun-Java ist, sondern nur so tut, als wäre es eines. Des weiteren habe ich noch eine Zeile "Depends: openjdk-6-jdk" eingefügt, um dafür zu sorgen, das die versprochene Funtionalität auch wirklich da ist. Dann kann man mit
equivs-build tbayen-sun-java6-jdk-control
ein Paket bauen, das man dann wie üblich mit "dpkg -i" installiert.