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.
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.
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
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.
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
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.
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
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