Translations of this page:

Nagios Plugins als RPM erstellen

Einleitung

Um die Verteilung der Nagios Plugins in aktueller Form zu vereinfachen soll aus den jeweiligen Sourcen der Plugins ein SuSE RPM erstellt werden. Zusätzlich zu den Standard Plugins soll es aber auch die Möglichkeit geben, eigene oder geänderte Plugins direkt in das RPM zu importieren.

Erstellung des RPMs

Generelle Infos zum erstellen eines RPMs siehe hier [http://www.rpm.org/RPM-HOWTO/build.html].

Die Nagios Plugins werden bereits mit einem RPM fähigen SPEC File ausgeliefert dass das erstellen eines RPMs vereinfacht.

Um der Anforderung von personalisierten Plugins die regulär gar nicht in den Plugin Sourcen enthalten sind gerecht zu werden muss man dieses SPEC File allerdings um einen entsprechenden Patch aus vorher gemachten Diffs ergänzen.

Somit wird sichergestellt, dass vor dem jeweiligen configure bzw make lauf, die modifizierten Dateien ins RPM gebracht werden.

Diff erstellen

Um Beispielsweise eine zusätzliche Datei zu den Plugins hinzuzufügen entpackt man zunächst die Sourcen in ein neutrales Verzeichniss:

Beachte: Die RPMs sollten immer im User Kontext, niemals aber als User root erstellt werden!

tar -xzvf nagios-plugins-1.4.3.tar.gz

Anschließend wird das resultierende Verzeichnis der Quelldateien einmal rekursiv kopiert:

cp nagios-plugins-1.4.3/ nagios-plugins-1.4.3-orig/ -R

Nun können im nagios-plugins-1.4.3 Verzeichniss entsprechende Änderungen an den Sourcecodes vorgenommen werden.

Im Beispiel das hinzufügen einer neuen Datei.

Die Änderungen dürfen nicht im zuvor kopierten Verzeichnis sondern sollten im Ursprungsverzeichnis gemacht werden!

vi nagios-plugins-1.4.3/plugins/Test-HowTo.txt

Nach vollzug sämtlicher Änderungen wird anschließende mittels dem diff Befehlt eine Patchdatei über die Änderungen erstellt:

Hinweis: Das Patchfile muss den Namen des Paketes tragen, mit der Endung .patch oder .diff.

diff -Naur nagios-plugins-1.4.3-orig/ ./nagios-plugins-1.4.3/ > ./nagios-plugins-1.4.3.patch

Inhalt der Datei ./nagios-plugins-1.4.3.patch:

diff -Naur nagios-plugins-1.4.3-orig/plugins/Test-HowTo.txt ./nagios-plugins-1.4.3/plugins/Test-HowTo.tx
--- nagios-plugins-1.4.3-orig/plugins/Test-HowTo.txt    1970-01-01 01:00:00.000000000 +0100
+++ ./nagios-plugins-1.4.3/plugins/Test-HowTo.txt       2006-07-05 19:07:22.338012272 +0200
@@ -0,0 +1 @@
+Testdatei

Erstellen der Build Umgebung

Zunächst einmal muss die für rpmbuild benötigte Verzeichnisstruktur hergestellt werden:

mkdir packages
cp -a /usr/src/packages/ ./packages
l ./packages

total 28
drwxr-xr-x  7 baeckerh root 4096 2005-03-24 10:08 ./
drwxr-xr-x  5 baeckerh root 4096 2006-07-05 19:28 ../
drwxrwxrwt  2 baeckerh root 4096 2004-06-30 18:24 BUILD/
drwxrwxrwt  8 baeckerh root 4096 2005-03-24 10:08 RPMS/
drwxrwxrwt  2 baeckerh root 4096 2004-06-30 18:24 SOURCES/
drwxrwxrwt  2 baeckerh root 4096 2004-06-30 18:24 SPECS/
drwxrwxrwt  2 baeckerh root 4096 2004-06-30 18:24 SRPMS/

Anschließend muss ggf. noch die Datei ~/.rpmmacros für den gewählten User angelegt werden.

Hier ein Beispiel:

%packager               Hendrik Baecker
%distribution           SuSE
%vendor                 Ich AG
%_topdir                /home/baeckerh/howto/packages/
%_tmppath               /home/baeckerh/howto/
%_rpmtopdir             %{_topdir}/%{name}
%_builddir              %{_tmppath}/BUILD
%_rpmdir                %{_rpmtopdir}
%_sourcedir             %{_rpmtopdir}
%_specdir               %{_rpmtopdir}
%_srcrpmdir             %{_rpmtopdir}

Diese Datei veranlasst später rpmbuild dazu die gerade erstellte Umgebung zu verwenden. Nähere Informationen zu dieser Datei findet man hier http://www.rpm.org/howto/thefight/.

In dieser Datei wird unter anderem das %_sourcedir auf den Pfad:

/home/baeckerh/howto/packages/%{name}

gesetzt. %{name} entspricht hier dem Release Namen. In unserem Beispiel also:

nagios-plugins (nach dem Namen des SPEC Files)

In dem Sourcedir sollte sich ein unberührtes tar.gz Archiv mit den Originalen Quelldateien befinden welches wir dorthin kopieren.

Personalisierte Vorbereitungen

rpmbuild macht letztendlich nichts anderes als das entsprechende ./configure, make, make install mit entsprechenden Parametern aus dem SPEC File.

Für die Nagios Plugins heißt dass letztendlich, dass wir auch das Makefile erweitern müssen damit die neue Datei durch das eigentlich reguläre laufende make install ebenfalls mitkopiert werden muss.

Nach Studium des Makefiles findet man die Stelle im Makefile die man ändern muss.

Da in den reinen Sourcen aber noch kein Makefile vorhanden ist, sondern nur das entsprechende Template Makefile.in bzw. Makefile.am müssen wir die Datei Makefile.in entsprechend erweitern.

Nach der Modifikation aller Notwendigen Dateien können wir somit erneut das Diff erstellen welches folgende Ausgabe erbringt:

diff -Naur nagios-plugins-1.4.3-orig/ ./nagios-plugins-1.4.3/

diff -Naur nagios-plugins-1.4.3-orig/plugins/Makefile.in ./nagios-plugins-1.4.3/plugins/Makefile.in
--- nagios-plugins-1.4.3-orig/plugins/Makefile.in       2006-07-05 19:05:32.670684240 +0200
+++ ./nagios-plugins-1.4.3/plugins/Makefile.in  2006-07-05 19:40:03.116928568 +0200
@@ -42,7 +42,7 @@
        check_overcr$(EXEEXT) check_ping$(EXEEXT) check_real$(EXEEXT) \
        check_smtp$(EXEEXT) check_ssh$(EXEEXT) check_tcp$(EXEEXT) \
        check_time$(EXEEXT) check_udp$(EXEEXT) check_ups$(EXEEXT) \
-       check_users$(EXEEXT) negate$(EXEEXT) urlize$(EXEEXT) @EXTRAS@
+       check_users$(EXEEXT) negate$(EXEEXT) urlize$(EXEEXT) Test-HowTo.txt @EXTRAS@
EXTRA_PROGRAMS = check_mysql$(EXEEXT) check_radius$(EXEEXT) \
        check_pgsql$(EXEEXT) check_snmp$(EXEEXT) check_hpjd$(EXEEXT) \
        check_swap$(EXEEXT) check_fping$(EXEEXT) check_ldap$(EXEEXT) \
diff -Naur nagios-plugins-1.4.3-orig/plugins/Test-HowTo.txt ./nagios-plugins-1.4.3/plugins/Test-HowTo.txt
--- nagios-plugins-1.4.3-orig/plugins/Test-HowTo.txt    1970-01-01 01:00:00.000000000 +0100
+++ ./nagios-plugins-1.4.3/plugins/Test-HowTo.txt       2006-07-05 19:07:22.338012272 +0200
@@ -0,0 +1 @@
+Testdatei

Dieses Diff wird zusammen mit den Sourcen in das entsprechende Verzeichnis gepackt:

diff -Naur nagios-plugins-1.4.3-orig/ ./nagios-plugins-1.4.3/ > ./packages/nagios-plugins/nagios-plugins-1.4.3.patch

Änderungen am SPEC File

Damit die vorher erstellten Patches auf ihre Verwendung finden müssen wir nun dem rpmbuild beibringen dass es auch etwas mit diesen Dateien anfangen soll.

Hierzu editieren wir das ausgelieferte SPEC File:

vi SPECS/nagios-plugins.spec

Name: nagios-plugins
Version: 1.4.3
Release: 1
Summary: Host/service/network monitoring program plugins for Nagios
Group: Applications/System
License: GPL
URL: http://nagiosplug.sourceforge.net/
Source0: http://dl.sf.net/sourceforge/nagiosplug/%{name}-%{version}.tar.gz
-----> Patch0: %{name}-%{version}.patch <-----
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Prefix: %{_prefix}/lib/nagios/plugins
Packager: Karl DeBisschop <kdebisschop@users.sourceforge.net>
Vendor: Nagios Plugin Development Group
Provides: nagios-plugins
%{!?custom:%global custom 0}
Obsoletes: nagios-plugins-custom nagios-plugins-extras
# Requires
%description
Nagios is a program that will monitor hosts and services on your
network, and to email or page you when a problem arises or is
resolved. Nagios runs on a unix server as a background or daemon
process, intermittently running checks on various services that you
specify. The actual service checks are performed by separate "plugin"
programs which return the status of the checks to Nagios. This package
contains those plugins.
%prep
%setup -q
-----> %patch0 -p1 -b .orig <-----
#### snip #####

Kurze Erläuterung:

Mit der definition Patch0 erklären wir dem SPEC File dass es ein entsprechenden Patchfile unter dem angegeben Namen gibt.

Die %prep Sektion wäre beim normalen Kompilieren eines Programmes aus den Sourcen der Part kurz vor dem Make.

Also der richtige Zeitpunkt die Sourcen zu patchen, was wir natürlich dann auch gleich machen.

Erstellen des RPMs

Wenn alles richtig gewesen ist können wir nun mittels rpmbuild -ba SPECS/nagios-plugins.spec den ersten Versuch unternehmen ein RPM zu erstellen, wie wir es haben wollten.

Im allgemeinen ist rpmbuild recht gesprächig und gibt sehr eindeutige Fehler aus die sich schnell korrigieren lassen.

rpmbuild durchläuft nun die typischen Phasen der kompilierung: ./configure, make, make install.

Wenn das rpmbuild beendet ist sollte man sein erstelltes RPM innerhalb des packages/release-name/arch Verzeichnisses wiederfinden.

ls -la ./nagios-plugins/i586/
total 616
drwxr-xr-x  2 baeckerh root   4096 2006-07-05 20:15 .
drwxr-xr-x  3 baeckerh root   4096 2006-07-05 20:15 ..
-rw-r--r--  1 baeckerh root 616938 2006-07-05 20:15 nagios-plugins-1.4.3-1.i586.rpm

Der Dateiname des RPMs setzt sich aus folgenden Angaben des SPEC Files zusammen:

Name: nagios-plugins
Version: 1.4.3
Release: 1

Update des RPMs

Sollte sich am RPM etwas ändern ist den anfänglichen Schritten genau so zu folgen wie beim ersten Build. Jedoch sollte man nun für jede weitere Version dieses RPMs den Zähler des RPM Releases im SPEC File um eins erhöhen.

Damit ist sichergestellt dass das Zielsystem das neue RPM auch mit rpm -U name-des-rpm.rpm entsprechend updaten kann.

Bei einer solchen Upgrade Prozedur ist es einfach Schick dass man ebenso das Changelog des RPMs um den Grund des Updates anpasst:

%changelog
* Wed Jul 05 2006 Hendrik Baecker <user@name.tld> 
- New custom Plugins included (Test-HowTo.txt)
* Mon May 23 2005 Sean Finney <seanius@seanius.net> - cvs head
- just include the nagios plugins directory, which will automatically include
  all generated plugins (which keeps the build from failing on systems that
  don't have all build-dependencies for every plugin)
* Tue Mar 04 2004 Karl DeBisschop <karl[AT]debisschop.net> - 1.4.0alpha1
- extensive rewrite to facilitate processing into various distro-compatible specs
* Tue Mar 04 2004 Karl DeBisschop <karl[AT]debisschop.net> - 1.4.0alpha1
- extensive rewrite to facilitate processing into various distro-compatible specs

Diese Informationen lassen sich später über

rpm -qpi –changelog ~baeckerh/howto/packages/nagios-plugins/i586/nagios-plugins-1.4.3-1.i586

abrufen.

Name        : nagios-plugins               Relocations: /usr/lib/nagios/plugins
Version     : 1.4.3                             Vendor: Nagios Plugin Development Group
Release     : 1                             Build Date: Wed Jul  5 20:15:46 2006
Install date: (not installed)               Build Host: nagios3.ecofis.de
Group       : Applications/System           Source RPM: nagios-plugins-1.4.3-1.src.rpm
Size        : 2498440                          License: GPL
Signature   : (none)
Packager    : Karl DeBisschop <kdebisschop@users.sourceforge.net>
URL         : http://nagiosplug.sourceforge.net/
Summary     : Host/service/network monitoring program plugins for Nagios
Description :
Nagios is a program that will monitor hosts and services on your
network, and to email or page you when a problem arises or is
resolved. Nagios runs on a unix server as a background or daemon
process, intermittently running checks on various services that you
specify. The actual service checks are performed by separate "plugin"
programs which return the status of the checks to Nagios. This package
contains those plugins.
Distribution: SuSE
* Wed Jul 05 2006 Hendrik Baecker <h.baecker@ecofis.de> 
- New custom Plugins included (Test-HowTo.txt)
* Mon May 23 2005 Sean Finney <seanius@seanius.net> - cvs head
- just include the nagios plugins directory, which will automatically include
  all generated plugins (which keeps the build from failing on systems that
  don't have all build-dependencies for every plugin)
* Thu Mar 04 2004 Karl DeBisschop <karl[AT]debisschop.net> - 1.4.0alpha1
- extensive rewrite to facilitate processing into various distro-compatible specs
* Thu Mar 04 2004 Karl DeBisschop <karl[AT]debisschop.net> - 1.4.0alpha1
- extensive rewrite to facilitate processing into various distro-compatible specs
nagios/howtos/rpm_plugins.txt · Zuletzt geändert: 2010/04/19 16:31 von andurin
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0