ADMIN-Tipp: Dummy-Pakete für Debian und Ubuntu

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Nicht immer bieten Linux-Distributionen die neueste Version eines Software-Pakets an. Am Beispiel von Ruby zeigen wir, wie man Software von Hand installiert und mit Dummy-Paketen trotzdem Abhängigkeiten befriedigt.

Wer die Skriptsprache Ruby auf Linux-Distributionen verwenden möchte, hat es von vornherein schwer. In vielen Tutorials wird gleich zu Beginn geraten, auf den von der Distribution mitgelieferten Ruby-eigenen Paketmanager Rubygems zu verzichten und stattdessen einen eigenen zu installieren. Damit fangen die Probleme erst an. Noch schwieriger wird es, wenn gerade die Bibliothek, die man verwenden möchte, eine aktuelle Ruby-Version voraussetzt - die offiziellen stabilen Ruby-Versionen sind derzeit 1.9.2 (deren End-of-Life aber bereits angekündigt ist) und 2.1.2, während sich Ubuntu noch bei 1.9.1 und 2.0 bewegen, von Debian mal ganz zu schweigen ...

Die Ruby-Community hat mit dem Ruby Version Manager (RVM) ein recht praktisches Tool entwickelt, mit dem sich diverse Ruby-Interpreter und die zugehörigen Bibliotheken parallel pflegen lassen. Selbst die in Java implementierte Ruby-Version JRuby kann damit installiert und verwaltet werden.

Das Problem dabei ist nur, dass man damit ein Paralleluniversum aufbaut, das dem Paketmanager der Distribution verschlossen bleibt. Will man nun ein Programm installieren, das Ruby voraussetzt, will das Apt-Tool die Skriptsprache installieren, obwohl sie dank RVM ja bereits vorhanden ist. Ein Beispiel dafür ist "vim-gtk", die grafische Version des Vim-Editors, die unbedingt die Pakete "libruby1.9.1", "ruby" und "ruby1.9.1" installiert haben möchte.

Hier hilft das Programm "equivs" weiter, mit dem sich Dummy-Pakete für bereits installierte Software bauen lassen. Das Paket besteht aus zwei Tools: "equivs-control" legt ein Control-File an, wie es auch sonst für den Bau von Debian-Paketen verwendet wird. "equivs-build" stellt dann damit ein Debian-Paket her. Die Befehle "equivs-control ruby1.9.1" und "equivs-control libruby1.9.1" erzeugen die beiden Control-Files, in denen schon die meisten Felder ausgefüllt sind. Es fehlen noch die konkreten für das jeweilige Paket zutreffenden Angaben. Für das Ruby-Paket sind dies:

Package: ruby1.9.1
Version: 1.9.3.484-2ubuntu1
Provides: ruby

Die Provides-Zeile zeigt, wie man mit der später folgenden Installation des Pakets "ruby1.9.1" auch die Abhängigkeit vom "ruby"-Paket miterfüllt. Die im Control-File geforderte genaue Versions-Nummer lässt sich in Erfahrung bringen, indem man mit "apt-get changelog libruby1.9.1" oder "apt-cache show libruby1.9.1" detaillierte Informationen zu einem Paket ausgibt.  Für die Libruby sehen die wesentlichen Zeilen des Control-File in etwa so aus:

Package: libruby1.9.1
Version: 1.9.3.484-2ubuntu1
File: postinst
 #!/bin/sh
  ln -s /usr/local/rvm/rubies/ruby-1.9.1-p431/lib/libruby.so.1.9.1 /usr/lib/libruby-1.9.1.so.1.9

Interessant ist hier der Abschnitt "File", der ein Postinstall-Skript beinhaltet, das einen symbolischen Link von der RVM-Version der Bibliothek in das Systemverzeichnis der Bibliotheken anlegt - sonst kann der symbolische Linker die Referenz des Vim-Binary nicht auflösen. Im Zweifelsfall hilft hier "ldd /usr/bin/gvim" weiter.

Schließlich bleibt nur noch, die beiden Pakete zu bauen und zu installieren:

equivs-build ruby1.9.1
equivs-build libruby1.9.1
sudo dpkg -i libruby1.9.1_1.9.3.484-2ubuntu1_all.deb
sudo dpkg -i ruby1.9.1_1.0_all.deb

Mit "equivs" lassen sich auf diese Weise diverse Probleme mit dem Paketmanager umschiffen. Übertreiben sollte man es mit dieser Methode aber nicht, denn auch das mündet am Ende ins Chaos.

26.08.2014

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023