Linux Pakete mit fpm bauen

Software installieren

Unter den meisten Linux Distributionen wird Software zumeist via Paketmanager installiert. Gerade in der Software-Entwicklung kommt es aber immer wieder dazu, dass man selbstkompilierte oder selbstentwickelte Software installieren muss.

Der übliche “Installationsmechanismus” via

./configure && make && make install

führt jedoch dazu, dass die Software unversioniert installiert wird und eine Deinstallation nur in mühseliger Handarbeit möglich ist. Auch die Installation auf mehreren Rechner erfordert immer wieder den selben Aufwand und eine Updatemöglichkeit gibt es ebenfalls nicht.

Pakete

Die optimale Lösung für unser Problem ist natürlich die Erstellung eines eigenen Pakets: Das Paket wird ein einziges Mal gebaut, kann jederzeit deinstalliert werden und die Version des Pakets ist ebenfalls protokolliert, so dass später Updates möglich sind.

Das Problem daran ist, dass das Entwickeln von Paketen recht Aufwändig ist. Eine Abhilfe schafft hierbei das Werkzeug fpm.

Installation

Zunächst stellen wir sicher, dass auf unserem Rechner das Paket ruby-dev installiert ist:

Bei auf Debian basierenden Systemen (z.B. Ubuntu):

sudo apt-get install install ruby-dev

Bei auf RedHat basierenden Systemen (z.B. CentOS):

sudo yum install fpm

Nun können wir mit dem Ruby Paketinstaller gem das Programm installieren:

gem install fpm

Nun sollte das Programm fpm auf der Kommandozeile zur Verfügung stehen.

Paket bauen

Wir haben nun unsere Software wie zuvor und bauen diese - jedoch mit einem Präfix, z.B.:

mkdir /tmp/place_to_install
./configure && make && make install DESTDIR=/tmp/place_to_install

Wenn wir nun an den Ort /tmp/place_to_install schauen, sehen wir dort die installierten Daten. Diese sollen nun in unser Paket kommen. Diese bauen wir mit:

fpm -s dir -t rpm -n myprogram -v 0.1.2 -C /tmp/place_to_install bin lib

Hierbei stehen die Parameter für:

Nach kurzer Wartezeit purzelt aus dem Werkzeugs ein installierbares Paket heraus.

Fazit

Mit fpm lassen sich bequem, schnell und einfach Pakete bauen. Natürlich berücksichtigt das hier erstellte Paket keinerlei Abhängigkeiten und es werden auch nicht alle Möglichkeiten und Funktionen des Paketmanagements genutzt, aber in der Praxis erleichtert dies die Installation von Software - gerade in Teams ungemein.

Jetzt nur noch ein Repository-Server aufgesetzt - und schon hat man im Team eine komfortablen Weg Software bereit zu stellen.