Azure Stack HCI – Performance Benchmark 6 Node Dell AX-740XD Cluster

Einleitung

Hyperkonvergente Systeme sind immer weiter im Trend und erobern auch die deutschen Rechenzentren. Eher neu ist die HCI Lösung von Microsoft: Azure Stack HCI, die (erst) seit Ende Dezember 2020 auf dem Markt ist. Hierbei handelt es sich um ein eigenes Betriebssystem (auf Basis von Server 2019) welches rein für die Hyper-V Dienste ausgelegt ist und sich funktional von den klassischen Windows-Server Varianten in Zukunft auf die Virtualisierung abheben soll. So gibt es Azure Stack HCI nur als Core-Installation (also ohne GUI) – die Bedienung soll per Windows Admin Center oder rein per Powershell erfolgen. Neu ist auch das Lizenzierungsmodell, wo Microsoft auf eine Gebühr von 10€/Monat pro CPU Kern veranschlagt. Hier möchte man anscheinend ähnlich der Konkurrenz auch am Hypervisor verdienen.

Da die Software relativ neu ist, findet man aktuell leider relativ schwer Benchmarks oder Performancedaten von Systemaufbauten, die nicht rein für Marketingzwecke ausgerichtet sind. Daher habe ich mich entschieden hier einige Ergebnisse als Orientierung zu präsentieren. Getestet wird ein für Azure Stack HCI zertifiziertes System von Dell in Form von AX-740XD Systemen, die nach Best-Practise konfiguriert wurden. Das Betriebssystem der Server war die zum Zeitpunkt aktuellste Azure Stack HCI Version. (Patchstand Mai 2021).

Hardwareaufbau

Als Aufbau dienen 6 Dell AX-740XD Server mit folgender SSD/Fullflash Konfiguration:
Für das OS werden die BOSS Karten verwendet. Als Cache Karten werden je 2 x NVME verwendet. Für den Kapazitäts-Tier werden je 6 x SSD verwendet.

MediaType BusType Usage Model FriendlyName Kapazität Anzahl Insgesamt Anzahl  pro Server
SSD SATA Boot-Drive SSDSCKKB240G8R DELLBOSS VD 223.57 GB 12 2
SSD SAS Auto-Select (Capacity) KPM5XRUG3T84 TOSHIBA KPM5XRUG3T84 3.49 TB 36 6
SSD PCIe Journal (Cache) Dell Express Flash NVMe P4610 1.6TB SFF Dell Express Flash NVMe P4610 1.6TB SFF 1.46 TB 12 2

Herstellerangaben und theoretische max-Werte

Da es kaum Vergleichswerte bei solchen Systemen gibt, ziehen wir als Vergleich die Herstellerangaben heran. So haben wir zumindest einen Richtwert, der uns hilft das System zu validieren. Um nähere Spezifikationen zu den möglichen Schreib/Lesewerten und IOPS zu bekommen, müssen wir uns nun die Modelle etwas genauer anschauen. Die 3,49 TB SSD ist zwar laut Beschreibung von TOSHIBA – hinter dem Namen versteckt sich aber der Hersteller Kioxia und genau folgendes Modell: PM5-R Series. Auf der Herstellerseite finden wir dann auch Angaben zu den theoretischen Werten:

Technische Daten vom Hersteller
Man beachte, dass die Herstellerangaben unter Verwendung von Dual Port 12GB SAS gemessen wurde, was in unserem S2D/Azure Stack HCI Konstrukt nicht der Fall ist und die SSD „lediglich“ über einen SAS Port angeschlossen ist. Daher sind unsere Ergebnisse in der Praxis etwas geringer. Als einzelne SSD eingebunden und Formatiert mit 64k ReFS haben wir mit CrystalDiskMark für die KPM5XRUG3T84 folgende Werte erhalten:

Crystaldisk Benchmark SSD Crystaldisk Benchmark SSD

Für die P4610 von Dell finden wir direkt bei Dell in einem DataSheet die vergleichbaren Daten:

Technische Daten Dell NVME

Netzwerk

Netzwerkseitig sind die Systeme mit 4 x 25GB über 2 Dual Port „Mellanox ConnectX-4 Lx 25GbE SFP28“ Karten mit je einem DELL SF5212F verbunden.
Als Technologie für die Storagereplikation verwenden wir RDMA.

Storageübersicht

Windows Admin Center Storagepool

In Summe haben wir einen Storagepool den wir auf 6 Volumes (1 pro Host) aufteilen. Für alle Volumes verwenden wir einen Three-Way-Mirror, für maximale Performance.

Windows Admin Center Volumes

Testmöglichkeiten

Es gibt 2 verschiedene Testmöglichkeiten um den Cluster auf Herz und Iops zu testen.

VMFleet war früher das gängige Tool und es gibt dazu auch gute Beschreibungen wie von DataOn. Es ist etwas umständlich zu konfigurieren, aber hat es mehrere VM’s erzeugt und in diesen dann diskspd ausgeführt. Dies wäre meiner Ansicht nach zumindest ein Test wo der Realität am nächsten kommt. Laut Microsoft (Azure Stack HCI Support) ist VMFleet allerdings nicht mehr supported was Benchmarks angeht.

Präferierte Variante: StartWorkload.ps1
Hier muss lediglich DiskSpd heruntergeladen werden und keinerlei extra VM’s erzeugt werden. Das Tool verschiebt die ClusterStorage’s und verteilt diese auf die Hosts und startet dann DiskSpd auf jedem Host für sein Cluster-Volume.

Zu Beginn müssen wir erstmal 3 benötigte Tools herunterladen:

watch-cluster.ps1
start-workload.ps1
diskspd.exe

Alle Tools packen wir in einen Ordner, diskspd muss zuvor noch entpackt werden.

Watch-Cluster

In einem Powershellfenster auf dem Host starten wir Watch-Cluster, welches uns die Storagewerte live liefert. Das Tool ist deutlich genauer als z.B. das Windows Admin Center.
Um alle Daten in einem Fenster angezeigt zu bekommen muss man in der Regel die Schriftgröße des Powershellfensters auf 10 oder 11 herabsetzen 🙂

 .\watch-cluster.ps1 -sets *

Start-Workload

Mit Start-Workload können wir nun verschiedene Szenarien durchprobieren. Wenn man diese aufzeichnen möchte, lohnt sich ggf. auch die Aufnahme der Performancecounter .

4K 100% Read with minimal Latency to identify if we have a latency issue

.\Start-Workload.ps1 -DiskSpdpath "C:\Temp\Diskspd.exe"

BenchmarkBenchmark  Benchmark

4K 100% Read (Maximize IOPS), we don’t care too much about Latency:

.\Start-Workload.ps1 -DiskSpdpath "C:\Temp\DiskSpd" -o 32

BenchmarkBenchmark

4K 100% Write  – Expect to have much less IOPS then 100% Read

Die Daten werden bei einem Three-Way-Mirror noch auf 3 weiteren Fault Domains geschrieben, nicht zu vergessen…

.\Start-Workload.ps1 -DiskSpdpath "C:\Temp\DiskSpd" -w 100

BenchmarkBenchmarkBenchmark

128K 100% Read –  Maximize Throughput on Reads

Nun testen wir mit der Blockgröße von 128K und einer Queuetiefe von 32 (Outstanding IO’s). Hier haben wir dann zwar nicht unbedingt viele IO’s jedoch einen sehr hohen Durchsatz.

.\Start-Workload.ps1 -DiskSpdpath "C:\Temp\DiskSpd" -B 128K -o 32

BenchmarkBenchmark Benchmark Benchmark Benchmark

128K 100% Write-  Maximize Throughput on Writes

Gleiches Spiel nur schreibend.

.\Start-Workload.ps1 -DiskSpdpath "C:\Temp\DiskSpd" -B 128K -o 32 -w 100

BenchmarkBenchmark  Benchmark Benchmark Benchmark

Netzwerkauslastung

Kombinierte Auslastung aller 25GbE Ports der beiden Switches (pro Switch):

Benchmark Benchmark

In Summe kommen wir beim Lesen (4k) auf ungefähr 234 Gbit/s über alle Ports gerechnet. Das wären pro Server 39 Gbit/s die dann auf die 4 Karten verteilt werden.

Die Switche & Netzwerkkarten haben wir in Tests nur durch Livemigrationen höher ausgelastet bekommen. Ein guter Test ist eine Blanko VM mit 80% der maximal verfügbaren Ram-Menge des Hosts auszustatten (z.B. 500GB) und dann per Livemigration auf einen anderen Host zu migrieren. Das funktioniert per RDMA ziemlich gut und flott – speziell wenn die SMB Limits korrekt richtig gesetzt sind. In unserem Fall haben sich so VM’s mit 500 GB Arbeitsspeicher in wenigen Sekunden per Livemigration auf einen anderen Host migrieren lassen, was die Netzwerkkarten an ihr Limit bringt 😉

Auffälligkeiten

Bei kleinen Blockgrößen (4K) haben wir es immer geschafft die CPU’s der Hosts auf Vollast (80-100%) zu fahren, was bei 2 Sockel Xeon(R) Gold 6248R Systemen schon ganz ordentlich ist. Die CPU ist in diesem Fall der Flaschenhals – zumal noch kein anderer Workloud (VM’s) auf dem Cluster läuft. Im Realbetrieb ist hier natürlich eine etwas geringere Leistung zu erwarten. Bei den großen 128K Blöcken war die CPU nur zu ca. 20% ausgelastet. Hier haben wir gesehen, dass die SSD’s dann auch an ihre Grenzen gekommen, was sich auch gut an den höheren Latenzen auf SSD Ebene bestätigt hat.

Redis Memcache für Owncloud / Nextcloud unter Ubuntu einrichten

Um die Geschwindigkeit der eigenen Owncloud bzw. Nextcloud Installation mithilfe eines Cache aufzubessern gibt es mehrere Techniken die eingesetzt werden können. Hier beschreibe ich kurz wie man Redis einsetzt. Als Betriebssystem wurde ein Ubuntu 17.04 sowie Nextcloud 12.0.3 eingesetzt.

  1. Redis und Modul für PHP installieren
    apt-get install redis-server php7.0-redis
  2. Redis Konfigurieren
    Redis kann entweder über auf einem eigenem Server installiert werden und per IP/Port (6379) angesprochen werden oder aber direkt auf dem gleichen System wie eure Owncloud. In dem Fall bietet sich an die Kommunikation über ein unix Socket einzustellen. Hier folgenden Bereich auskommentieren und die Berechtigungen 770 setzen.

    vi /etc/redis/redis.conf
    # Unix socket.
    #
    # Specify the path for the Unix socket that will be used to listen for
    # incoming connections. There is no default, so Redis will not listen
    # on a unix socket when not specified.
    #
    unixsocket /var/run/redis/redis.sock
    unixsocketperm 770
  3. Apache Benutzer der Redis Gruppe hinzufügen
    Damit nun das PHP-Modul auch auf das unix Socket zugreifen kann, müssen wir den Benutzer des Webservers in die Gruppe „redis“ aufnehmen.

    vi /etc/group

    Unter Ubuntu ist dies für apache2 der Benutzer: www-data.

    redis:x:119:www-data
  4. Owncloud/Nextcloud config.php anpassen
    In der Config fügen wir nun folgende Zeilen ein, damit auch Redis als Caching Software verwendet wird.

    vi config/config.php
     'memcache.locking' => '\OC\Memcache\Redis',
     'memcache.local' => '\OC\Memcache\Redis',
     'redis' => array(
                   'host' => '/var/run/redis/redis.sock',
                   'port' => 0,
                   'dbindex' => 0,
                   'password' => 'secret',
                   'timeout' => 1.5,
                  ),
    
  5. Dienste neustarten
    Schlussendlich nochmal den Redis-Server sowie Apache2 neustarten, damit auch alle Änderungen aktiv werden.

    service redis-server restart
    service apache2 restart

Mögliche Fehler:
Am Anfang hatte ich noch folgenden Fehler, welcher aber auf die fehlende Gruppenzugehörigkeit zurückzuführen war:

Internal Server Error
The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

Schaut man genau ins error.log sieht man, dass es ein Berechtigungsfehler ist und hier bei Punkt 2 und 3 nochmal angesetzt werden sollte.

[Thu Dec 14 11:34:25.451617 2017] [core:notice] [pid 3333] AH00094: Command line: '/usr/sbin/apache2'
[Thu Dec 14 11:38:05.020250 2017] [:error] [pid 3338] [client 10.0.0.55:32848] PHP Warning:  Redis::connect(): connect() failed: Permission denied in /var/www/owncloud/lib/private/RedisFactory.php on line 82, referer: https://cloud.domain.info/
[Thu Dec 14 11:38:08.363190 2017] [:error] [pid 3339] [client 10.0.0.55:32851] PHP Warning:  Redis::connect(): connect() failed: Permission denied in /var/www/owncloud/lib/private/RedisFactory.php on line 82
[Thu Dec 14 11:38:10.320506 2017] [:error] [pid 3339] [client 10.0.0.55:32851] PHP Warning:  Redis::connect(): connect() failed: Permission denied in /var/www/owncloud/lib/private/RedisFactory.php on line 82, referer: https://cloud.domain.info/
ls /var/run/redis/ -al
total 4
drwxrwsr-x  2 redis redis   80 Dec 14 11:39 .
drwxr-xr-x 32 root  root  1200 Dec 14 11:21 ..
-rw-r--r--  1 redis redis    5 Dec 14 11:39 redis-server.pid
srwxrwx---  1 redis redis    0 Dec 14 11:39 redis.sock

Mopidy Musicbox/Webradio auf dem Raspberry Pi installieren

Was ist Mopidy überhaupt ? Mopidy ist ein „Music Player Daemon“ – in kurz ein MPD Server, welcher Music sowohl lokal aber auch streamen kann.
So kann man zum Beispiel ein Raspberry Pi nehmen, Lautsprecher anschließen und die Software installiere. Und schon hat man ein Musikspieler den man per Webinterface oder auch Handyapp fernsteuern kann.
Mittlerweile gibt es auch viele Integrationen wie zum Beispiel für Spotify, Soundcloud, Youtube, Radio, iTunes etc. sodass man auch Musik von dort einbinden kann.
Eine kleine Auflistung der verschiedenen (sehr kreativen!) Werke findet man hier:

www.pimusicbox.com
www.pimusicbox.com

Ich habe hier eine kurze Anleitung geschrieben, wie ihr Mopidy auf eurem Raspberry Pi (oder auch jedem anderem Ubuntu System) installieren könnt und die Grundkonfiguration vornehmt.
1. Das offizielle APT Repository von Mopidy seinem System hinzufügen.

wget -q -O - https://apt.mopidy.com/mopidy.gpg |sudo apt-key add -
sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/jessie.list

2. Mopidy installieren. Ich habe zusätzlich noch die Spotify Erweiterung (mopidy-spotify) installiert. Eine Übersicht der Web-Extensions, sowie die Installationsanleitung findet ihr hier.

apt-get update && apt-get dist-upgrade && apt-get install mopidy mopidy-spotify

Quelle: mopidy.com

3. Mopidy das erste Mal starten. Einfach Ausführen, damit werden alle notwendigen Verzeichnisse und die Standard Konfiguration erzeugt.

pi@raspberrypi:~ $ mopidy
INFO Starting Mopidy 1.1.1
INFO Loading config from builtin defaults
INFO Loading config from command line options
INFO Creating dir /home/pi/.cache/mopidy
INFO Creating dir /home/pi/.config/mopidy
INFO Creating dir /home/pi/.local/share/mopidy
INFO Loading config from builtin defaults
INFO Loading config from command line options
INFO Creating file /home/pi/.config/mopidy/mopidy.conf
INFO Initialized /home/pi/.config/mopidy/mopidy.conf with default config
INFO Enabled extensions: mopify, mpd, http, moped, stream, m3u, material-webclient, softwaremixer, file, local
INFO Disabled extensions: spotify
WARNING Found spotify configuration errors, the extension has been automatically disabled:
WARNING spotify/username must be set.
WARNING spotify/password must be set.
WARNING Please fix the extension configuration errors or disable the extensions to silence these messages.
INFO Starting Mopidy mixer: SoftwareMixer
INFO Starting Mopidy audio
INFO Starting Mopidy backends: StreamBackend, M3UBackend, FileBackend, LocalBackend
INFO Audio output set to "autoaudiosink"
INFO Creating dir /home/pi/.local/share/mopidy/m3u
INFO Loaded 0 M3U playlists from /home/pi/.local/share/mopidy/m3u
INFO Creating dir /home/pi/.local/share/mopidy/local
INFO No local library metadata cache found at /home/pi/.local/share/mopidy/local/library.json.gz. Please run `mopidy local scan` to index your local music library. If you do not have a local music collection, you can disable the local backend to hide this message.
INFO Loaded 0 local tracks using json
INFO Starting Mopidy core
INFO Starting Mopidy frontends: QueueManagerFrontend, MpdFrontend, HttpFrontend
INFO MPD server running at [::ffff:127.0.0.1]:6600
INFO HTTP server running at [::ffff:127.0.0.1]:6680

4. Stoppen und Konfiguration anpassen
Mit STRG+C beenden wir wieder den Mopidy Server und passen jetzt die Konfiguration an, sodass wir den Server aus unserem Netzwerk aus erreichen können.

vi /home/pi/.config/mopidy/mopidy.conf

Hier passen wir den Hostname von 127.0.0.1 auf 0.0.0.0 an, welche für alle IP-Adressen des Pi steht.
Wer Spotify benutzt muss an dieser Stelle noch die Zugangsdaten seines Premium Account eintragen. Die restlichen Einstellungen ergeben sich eigentlich.

[mpd]
enabled = true
hostname = 0.0.0.0
port = 6600
[http]
enabled = true
hostname = 0.0.0.0
port = 6680

Ihr könnt Mopidy auch über folgende Befehle kontrollieren:

sudo service mopidy start
sudo service mopidy stop
sudo service mopidy restart

5. Mopidy Webinterface aufrufen
Wenn Mopidy gestartet ist, könnt ihr das Webinterface über den oben eingestellten Port (Standard = 6680) erreichen. Also:

http://raspberryIP:6680

Ihr habt dann eine Auflistung aller installierten Webinterfaces und könnt loslegen !

Cacti Template: VMware View Sessions monitoren

View Administrator StatusWie vielleicht so manche Beiträge hier vermuten lassen, setze ich VMware Horizon View zur Desktopbereitstellung ein. So hat sich mir die Frage gestellt ob man nicht die Anzahl an Connections, gestarteten Desktops etc. im MRTG bzw. Cacti überwachen kann.
Eine kleine Übersicht hat man ja im View Administrator an der linken Seite – aber das hilft einem ja auch nicht weiter um Boot Storms, wie z.B. jeden Morgen um 8 zu dokumentieren.
So bin ich über einen Beitrag in den VMware Communities gestolpert, der Zeigt wie man Session Informationen via typeperf absaugen kann. Funktioniert so aber leider erstmal nur, wenn der Monitoringserver unter einem Windows-Betriebssystem läuft. Aber wer hat das schon 🙂
Hier eine kleine Übersicht der 3 Graphen:


Über check_nrpe ist es möglich Scripte mehr oder weniger OS-Unabhängig auszuführen, bzw. eine passende Antwort zu erhalten.  Somit funktioniert das Template unter Linux & Windows.

    1. Wenn das Monitoringsystem ein Linux z.b. Ubuntu ist, dann muss check_nrpe installiert werden um Befehle an andere Systeme senden zu können. Simple Anleitung hatte ich schon mal letztes Jahr geschrieben, ist immer noch gültig.
    2. Anschließend muss auf dem View Connection Server der Nsclient installiert werden. Download hier.
    3. Nach der Installation muss die nsclient.ini im Programmverzeichnis angepasst werden, sodass  Befehle vom Monitoringserver entgegen genommen werden:
      [/modules]
      ;Check External Scripts - A simple wrapper to run external scripts and batch files.
      CheckExternalScripts = 1
      [/settings/NRPE/server]
      allow arguments=true
      allow nasty characters=true
      [/settings/default]
      ;ALLOWED HOSTS - A comaseparated list of allowed hosts. You can use netmasks (/ syntax) or * to create ranges.
      allowed hosts = CactiIP
      [/settings/external scripts]
      allow arguments=true
      allow nasty characters=true
      [/settings/external scripts/scripts]
      viewstatus = cmd /c echo scripts\view_status.ps1 $ARG1$ $ARG2$; exit($lastexitcode) | powershell.exe -command -

      [stextbox id=“info“]Info: Nach Konfigänderung muss der Nsclient neugestartet werden.
      (net stop nscp && net start nscp)[/stextbox]

    4. Das view_status.ps1 Script im NSClient\scripts Verzeichnis ablegen.
    5. Vom Cacti aus testen:
      /usr/local/nagios/libexec/check_nrpe -H SERVERNAME -c viewstatus -a SERVERNAME "\\SERVERNAME\VMware VDM\*"

      Sollte keine korrekte Ausgabe erfolgen, kann man das Logfile vom nsclient checken: nsclient.log

    6. Im Cacti: Import Templates und das cacti_host_template_vmware_view_connection_server.xml auswählen.
    7. Neuen Host anlegen und das Template „View Connection Server“ zuweisen.
    8. Anschließend auf Create Graphs und die 3 Möglichen Graphen auswählen.
    9. Das Feld Servername muss den Servername enthalten. Die Typeperf Query wäre dann „\\Servername\VMware VDM\*“. (Mit den Anführungszeichen)
      [stextbox id=“info“]Info: Der Servername muss in beiden Feldern komplett Identisch sein, sonst funktioniert das Abschneiden des Strings nicht korrekt.[/stextbox]
    10. Nun den Host im Graph Tree hinzufügen und es werde bunt.


Wenn man Cacti auf einem Windows-Server laufen hat, muss man den Scriptpfad der Datenquelle etwas abändern:
DataInput
Der Pfad müsste auf etwas wie

cmd /c echo scripts\view_status.ps1 <comp> <query>; exit($lastexitcode) | powershell.exe -command - 

abgeändert werde. Ich habe es unter Windows aber nicht getestet und bin auf eure Kommentare gespannt 😉
Download: Cacti-View-Template.zip (v 1.0)

MonitorPi – Nagios, Centreon, Check_MK, Nagvis auf dem Raspberry Pi 2

raspberry-pi-2-770x577Es ist mal wieder so weit, es gibt ein Update in Sachen Monitoring. Viele kennen mit Sicherheit den kleinen Raspberry Pi, eigentlich als dritte Welt-PC gedacht – aber unter den Bastlern ebenfalls ein Hit geworden. Ich habe ja schon mehrere Beiträge zum Pi hier geschrieben, aber seit dem Raspberry Pi 2 gibt es noch ganz andere Anwendungsfelder die durch die größere Leistung möglich werden.
So auch das Projekt „MonitorPi“, dass den RaspberryPi in eine Überwachungszentrale verwandelt, die inklusive Zubehör preislich auch unter 100€ liegt.
MonitorPi ist eine fertige Appliance von mir – die mit den beliebtesten Monitoring-Tools vorinstalliert ist.
Was ist alles enthalten und vorinstalliert ? (Ready 2 use)
– Nagios 3.5.1 Nagios
– Centreon 2.6.0centreon_logo
– Centreon-Broker 2.8.2
– Check_MK (Livestatus) 1.2.6.p2check_mk.200
– Nagvis 1.8.2
– Nagios Plugins 2.0.3nagvis
Was wird benötigt ?
Raspberry Pi 2
– mind. 8 GB Speicherkarte (Je schneller desto besser. Class 10 = top)
Win32DiskImager
[stextbox id=“info“]MonitorPi basiert auf der aktuellen Debian Wheezy Distribution die es auch via raspberrypi.org zum Download gibt. (2015-02-16-raspbian-wheezy.img)
Nur habe ich sie noch vollständig aktualisiert. Stand: 04.05.2015[/stextbox]
Wie wird MonitorPi installiert ?
Ganz einfach: Ihr ladet euch die aktuelle Image-Datei herunter und bespielt diese auf eine micro-SD-Karte.
Dies geht mit dem Win32DiskImager wie im Bild beschrieben:
win32diskimager
 [stextbox id=“alert“]Achtung: Alle Daten auf der SD Karte werden gelöscht![/stextbox]
Anschließend den Rasperry Pi 2 mit der SD-Karte booten, er versucht automatisch eine IP via DHCP zu beziehen, und zeigt diese nach dem Boot an.
Wie sehen die unterschiedlichen Monitoring-Tools aus ?


Wie erreiche ich die Tools ?
Alle Tools sind Web-Applikationen, die per Browser aufgerufen werden. Die Url’s sind wie folgt:

Nagios Url: http://%IP%/nagios
Benutzername: nagiosadmin
Passwort: constey
Nagvis Url: http://%IP%/nagvis
Benutzername: admin
Passwort: admin
Centreon Url: http://%IP%/centreon
Benutzername: admin
Passwort: constey
Check_MK Url: http://%IP%/check_mk
Benutzername: nagiosadmin
Passwort: constey
phpMyAdmin (Mysql) Url: http://%IP%/phpmyadmin
Benutzername: root
Passwort: constey

Die Zugangsdaten zum Anmelden an der Konsole oder via SSH sind:
Benutzername: pi
Passwort: raspberry
Ansonsten ist das Passwort immer „constey“, also zum Beispiel für die einzelnen Benutzer oder Mysql-Datenbank-Benutzer.
Download:
Hier gibt es das Image in gezippter Form zum Download 2015-05-04-wheezy-monitorPI-constey-2 (ca. 1.8 GB)
[EXPAND Prüfsummen-Information]—————————
Prüfsummen-Information
—————————
Name: 2015-05-04-wheezy-monitorPI-constey-2.zip
Größe: 1872300662 Bytes (1785 MB)
CRC32: 9ACC060B
CRC64: CC7A670EBC2EF5E0
SHA256: 71D79E6F9FBD9BD68618029F008C77AE488FCE251932B2754D76B2CB2FB5D483
SHA1: FF7AD402D6116BEC4B8D8528223D265D6BB1700A
[/Expand]
FAQ:
Warum ist nicht Nagios 4 installiert?
Zum einen gibt es noch die ein oder anderen Kompatibilitätsprobleme mit Centreon, wer auch noch andere Module benutzen möchte, stößt eventuell ebenfalls auf Kompatibilitätsprobleme. Wer dennoch aktualisieren will kann das natürlich gerne tun.
Wo liegen die Quelldateien ?
Alle Quelldateien liegen unter /home/pi/sources.
MonitorPi-Sources
Wo liegen die wichtigsten Programme ?
Ich habe die Anwendungen in der Regel immer mit Standardwerten kompiliert. Aber hier einige Pfade:
Nagios: /usr/local/nagios
Nagios Plugins: /usr/local/nagios/libexec
Centreon: /usr/local/centreon/

Howto Fix: phpMyAdmin (The mcrypt extension is missing. Please check your PHP configuration.)

phpMyAdmin ist eine grafische Weboberfläche für den Datenbankserver MySql und unter Linux sehr beliebt.
Der klassische Fehler in der Grundinstallation z.B. bei Ubuntu 14.04 aber auch anderen Versionen ist der Folgende:
[stextbox id=“alert“]The mcrypt extension is missing. Please check your PHP configuration.[/stextbox]
Die Ursache ist, dass das Mcrypt Modul in PHP möglicherweise zwar installiert, aber nicht aktiviert ist.
Um den Fehler zu beheben das Modul einfach über die Kommandozeile installieren:

root@server:~# apt-get install php5-mcrypt
Reading package lists... Done
Building dependency tree
Reading state information... Done
php5-mcrypt is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 38 not upgraded.

Und anschließend auch noch in php aktivieren:

root@server:~# php5enmod mcrypt

Danach noch einmal den apache2 neustarten und ihr sollten den Fehler los sein.

service apache2 restart

Owncloud 7 mit Truecrypt verschlüsselung und SSL unter Ubuntu 14.04 installieren

logoDurch verschiedene „angebliche“ Hacks sind öffentliche Cloud-Dienstleister ja wieder einmal ordentlich in die Kritik gerückt worden. Aus diesem Grund erkläre ich hier, wie man seine eigene private Cloud unter einem Ubuntu Server installieren kann.
Die kostenfreie owncloud Software dient uns dafür als Basis für unsere Cloud. Zur Synchronisation von Dateien, Kontakten, Fotos, Kalendern etc. gibt es verschiedene Apps für Windows, Linux, Unix, Android und iOS.
Unsere Daten speichern wir in einem verschlüsseltem Truecrypt Container und können die einzelnen Dateien zusätzlich noch einmal per Server-Side-Encryption verschlüsseln.
Die beste Verschlüsselung hilft natürlich nichts, wenn man einfache Passwörter benutzt.
Die Installation von Owncloud 7 tätige ich auf einem Ubuntu Server 14.04 – das ganze funktioniert aber zum Beispiel auch mit einem Raspberry Pi!
Also Schritt 1: Truecrypt installieren über PPA:

add-apt-repository ppa:stefansundin/truecrypt
apt-get update && apt-get install truecrypt

Truecrypt Volume erstellen:

truecrypt –create

[EXPAND Truecrypt Container erstellung]
truecrypt –create
Volume type:
1) Normal
2) Hidden
Select [1]: 1
Enter volume path: /media/hdd1tb/container.tc
Enter volume size (sizeK/size[M]/sizeG): 300G
Encryption algorithm:
1) AES
2) Serpent
3) Twofish
4) AES-Twofish
5) AES-Twofish-Serpent
6) Serpent-AES
7) Serpent-Twofish-AES
8) Twofish-Serpent
Select [1]:
Hash algorithm:
1) RIPEMD-160
2) SHA-512
3) Whirlpool
Select [1]:
Filesystem:
1) None
2) FAT
3) Linux Ext2
4) Linux Ext3
5) Linux Ext4
Select [2]: 5
Enter password:
Re-enter password:
Enter keyfile path [none]:
Please type at least 320 randomly chosen characters and then press Enter
[/EXPAND]
Truecrypt Volume mounten:

truecrypt -m /media/hdd1tb/container.tc /media/data

Für Owncloud vorbereiten:

mkdir /media/data/oc
touch /media/data/oc/.ocdata
chown www-data:www-data /media/data/oc

Für die owncloud Installation gibt es 2 Möglichkeiten: Entweder via apt-get install owncloud oder manuell.
Ich beschreibe den manuellen weg, dass ist nicht umständlicher und man weiß besser was im Hintergrund passiert und was die Default-Pfade sind.
Manuelle Owncloud installation:
1. Notwendige Abhängigkeiten installieren:

sudo apt-get install apache2 mysql-server libapache2-mod-php5
sudo apt-get install php5-gd php5-json php5-mysql php5-curl
sudo apt-get install php5-intl php5-mcrypt php5-imagick phpmyadmin

Hinweis: Um alle Funktionen nutzen zu können, wird über apt vorgeschlagen die folgenden Pakete zusätzlich noch zu installieren. Ich würde dies erst einmal nicht machen, und nur dass installieren, was später auch wirklich benötigt wird.
[Expand weitere Abhängigkeiten]
ca-certificates-java dbus-x11 default-jre default-jre-headless
desktop-file-utils dictionaries-common fonts-dejavu fonts-dejavu-extra
fonts-font-awesome fonts-liberation fonts-opensymbol fonts-sil-gentium
fonts-sil-gentium-basic gconf-service gconf-service-backend gconf2
gconf2-common gdisk ghostscript gsfonts gvfs gvfs-common gvfs-daemons
gvfs-libs hunspell-en-us icedtea-7-jre-jamvm imagemagick-common java-common
libao-common libao4 libasound2 libasound2-data libasyncns0 libatasmart4
libatk-wrapper-java libatk-wrapper-java-jni libav-tools libavahi-glib1
libavcodec54 libavdevice53 libavfilter3 libavformat54 libavresample1
libavutil52 libbonobo2-0 libbonobo2-common libboost-date-time1.54.0
libboost-system1.54.0 libcaca0 libcanberra0 libcdio-cdda1 libcdio-paranoia1
libcdio13 libcdr-0.0-0 libclucene-contribs1 libclucene-core1 libcmis-0.4-4
libcolamd2.8.0 libcupsfilters1 libcupsimage2 libdc1394-22
libexttextcat-2.0-0 libexttextcat-data libfftw3-double3 libflac8 libfontenc1
libgconf-2-4 libgconf2-4 libgif4 libglu1-mesa libgnome2-0 libgnome2-bin
libgnome2-common libgnomevfs2-0 libgnomevfs2-common libgs9 libgs9-common
libgsm1 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 libharfbuzz-icu0
libhsqldb1.8.0-java libhunspell-1.3-0 libhyphen0 libicu52 libidl-common
libidl0 libijs-0.35 libjack-jackd2-0 libjbig2dec0 libjs-chosen
libjs-dojo-core libjs-dojo-dijit libjs-dojo-dojox libjs-jcrop
libjs-jquery-minicolors libjs-jquery-timepicker libjs-pdf libjs-sphinxdoc
libjs-twitter-bootstrap liblangtag-common liblangtag1 libldb1 liblqr-1-0
libmagickcore5 libmagickwand5 libmhash2 libmp3lame0 libmspub-0.0-0
libmythes-1.2-0 libneon27-gnutls libnspr4 libnss3 libnss3-1d libnss3-nssdb
libntdb1 liboauth-php libogg0 libopenjpeg2 libopus0 liborbit-2-0 liborbit2
liborc-0.4-0 liborcus-0.6-0 libpaper-utils libpaper1 libphp-pclzip
libphp-phpmailer libpoppler44 libpulse0 libpython3.4 libraptor2-0 librasqal3
libraw1394-11 librdf0 libreoffice libreoffice-avmedia-backend-gstreamer
libreoffice-base libreoffice-base-core libreoffice-base-drivers
libreoffice-calc libreoffice-common libreoffice-core libreoffice-draw
libreoffice-gnome libreoffice-gtk libreoffice-impress
libreoffice-java-common libreoffice-math libreoffice-pdfimport
libreoffice-report-builder-bin libreoffice-sdbc-firebird
libreoffice-sdbc-hsqldb libreoffice-style-galaxy libreoffice-style-human
libreoffice-writer libsamplerate0 libschroedinger-1.0-0 libsdl1.2debian
libsecret-1-0 libsecret-common libservlet3.0-java libsmbclient libsndfile1
libspeex1 libswscale2 libtalloc2 libtdb1 libtevent0 libtheora0
libtidy-0.99-0 libudisks2-0 libva1 libvisio-0.0-0 libvorbis0a libvorbisenc2
libvorbisfile3 libwbclient0 libwpd-0.9-9 libwpg-0.2-2 libwps-0.2-2
libx264-142 libxaw7 libxcb-shape0 libxfont1 libxft2 libxmu6 libxmuu1
libxslt1.1 libxt6 libxv1 libxvidcore4 libxxf86dga1 libyajl2
libzend-framework-php lp-solve mediawiki-classes openjdk-7-jre
openjdk-7-jre-headless owncloud owncloud-doc php-aws-sdk php-crypt-blowfish
php-doctrine-common php-dompdf php-dropbox php-font-lib php-getid3
php-google-api-php-client php-guzzle php-irods-prods php-opencloud
php-patchwork-utf8 php-pear php-phpdocx php-sabre-dav php-sabre-vobject
php-seclib php-services-json php-symfony-console php-symfony-eventdispatcher
php-symfony-routing php-tcpdf php-xml-parser php5-apcu php5-curl
php5-imagick php5-intl php5-ldap php5-oauth php5-tidy php5-xsl
policykit-1-gnome poppler-data python-crypto python-ldb python-ntdb
python-samba python-talloc python-tdb python3-uno samba-common
samba-common-bin samba-libs sdop smbclient sound-theme-freedesktop
ttf-dejavu-core tzdata-java udisks2 uno-libs3 ure vorbis-tools x11-utils
xfonts-encodings xfonts-mathml xfonts-utils zend-framework
zend-framework-bin[/Expand]
2. Owncloud herunterladen, entpacken und verschieben

cd /tmp/
wget https://download.owncloud.org/community/owncloud-7.0.2.tar.bz2
tar xfvj owncloud-7.0.2.tar.bz2
mv owncloud /var/www/html/
chown www-data:www-data -R /var/www/html/owncloud/

3. Jetzt über phpmyadmin eine Datenbank & Benutzer für Owncloud erstellen
4. Owncloud installieren http://meinserver.de/owncloud
Als Datenpfad geben wir unser Mountpunkt des Truecryptcontainers an, z.B. /media/data/oc
Das sollte jetzt erst einmal funktionieren, dann können wir anschließend noch mit der SSL-Verschlüsselung weitermachen.
Um nicht ein selbst-signiertes Zertifikat nutzen zu müssen, verwende ich ein kostenloses Start-SSL Zertifikat. Mann kann sich dort umsonst ein Konto erstellen, nachdem man seine persönlichen Daten angegeben hat und nach erfolgreicher Validierung auch Zertifikate für seine Domain erstellen.
SSL Aktivieren und Zertifikat erzeugen:

a2enmod ssl
service apache2 restart

Zertifikatskey und Request erstellen:

mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
openssl genrsa -out certificate.key 4096

Für den Key würde ich persönlich kein Passwort festlegen, weil man sonst bei jedem Apache neustart dieses Passwort eingeben müsste.
Zertifikats Request erzeugen:

openssl req -new -key certificate.key -out myserver.de.csr
vi myserver.de.csr

Mit diesem Request kann man sich nun bei startssl.com ein Zertifikat erzeugen, dieses dann unter /etc/apache2/ssl/certificate.cer abspeichern.
Nun müssen noch die Root-Zertifikate der Zertifizierungsstelle heruntergeladen werden. Bei StartSSL sind das die folgenden:

wget --no-check-certificate https://www.startssl.com/certs/sub.class1.server.ca.pem
wget --no-check-certificate https://www.startssl.com/certs/ca.pem

Nun die Apache Konfiguration anpassen:

vi /etc/apache2/sites-available/default-ssl.conf

Hier folgende Einträge setzen (Pfade ggf. anpassen):

ServerAdmin webmaster@deineDomain.de
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/certificate.cer
SSLCertificateKeyFile /etc/apache2/ssl/certificate.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
SSLCACertificateFile /etc/apache2/ssl/ca.pem

Anschließend die SSL Konfiguration aktivieren und Apache neustarten:

a2ensite default-ssl.conf
service apache2 reload

Wenn hier keine Fehlermeldung kommt dann sieht alles gut aus.
Anschließend mal die Seite über https aufrufen:
https://meinServer.de/owncloud
Im Browser müsste dass dann wie folgt aussehen:
ssl
In den Owncloud Einstellungen würde ich jetzt noch die Option „Enforce HTTPS Encryption aktivieren“, dann wird keine unverschlüsselte HTTP Verbindung mehr benutzt.
Dateibasierte Verschlüsselung aktivieren:
Zusätzliches gibt es ein Encryption Modul innerhalb von Owncloud, was die Dateien selbst nochmal verschlüsselt:
encryptionrecovery-key
Nach dem aktivieren des Modules muss man sich neu anmelden, dabei werden die Verschlüsselungskeys erzeugt.
Unter den Einstellungen kann man zusätzlich noch ein Recovery Key eingeben, mit dem man im Notfall die einzelnen Dateien entschlüsseln kann.

check_nrpe unter Ubuntu installieren

Check_NRPE ist für Nagios ein sehr wichtiges Plugin um Remote verschiedene Stati zu prüfen.  Unter Ubuntu 12.04 gibt es ein kleines Problem bei der Kompilation und den SSL-Bibliotheken.
Hier kurz erklärt:
check_nrpe herunterladen und entpacken:

wget wget http://sourceforge.net/projects/nagios/files/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz/download
tar xfv download
cd nrpe-2.15

Wenn man jetzt einfach nur ein ./configure macht und folgenden Fehler bekommt muss mann den Pfad manuell angeben:

checking for SSL headers... SSL headers found in /usr
checking for SSL libraries... configure: error: Cannot find ssl libraries

libssl Libraries suchen:

find / -name "libssl.so"
/usr/lib/x86_64-linux-gnu/libssl.a
/usr/lib/x86_64-linux-gnu/pkgconfig/libssl.pc
/usr/lib/x86_64-linux-gnu/libssl.so

Nun gibt man den Pfad beim Konfigurieren mit an:

./configure --with-ssl-lib=/usr/lib/x86_64-linux-gnu/

Anschließend noch Kompilieren und Installieren:

make all
make install

Fertig 😉

VMware ESXi 5 Server mit Cacti überwachen

Vorab – dazu gibt es schon einen Beitrag und zwar vom Ersteller des Templates Nitro bzw. Hypervisor.fr
Wie die Domainendung schon zu vermuten gibt aber leider in Französisch. Ich übersetzte die Anleitung sozusagen nur grob und funktional 🙂
Cacti ist die Monitoringsoftware schlecht hin. Wer sich mit MRTG auseinandergesetzt hat wird es kennen, stundenlang in Konfigurationsdateien herum zu editieren. Da ist Cacti doch eine wesentlich ansprechendere, schnellere, und einfachere Lösung.
Natürlich versucht man alle wichtigen Systeme im Monitoring zu haben. Wie man den ESXi Server auch in die Nagios bzw. Centreon Überwachung aufnehmen kann habe ich euch bereits hier beschrieben. Die Methode ist die Gleiche – basierend auf der vSphere Perl SDK und des check_vmware_api Script.
1. Voraussetzungen
Ihr benötigt die VMware vSphere Perl SDK, sowie die notwendigen Perl Module etc. um das check_vmware_api Script zum Laufen zu bekommen.
Wie das geht, habe ich euch hier in einem separatem Beitrag bereits beschrieben.
Seit ihr soweit dass ihr das Script von Hand laufen lassen könnt, gehts hier weiter.
2. vi_host Paket herunterladen:
http://files.hypervisor.fr/scripts/check_vmware_api.zip
3. Die beiden Dateien müssen in das Cacti Script_Queries Verzeichnis kopiert werden. – Standard ist /var/www/cacti/resource/script_queries/

check_vmware_cluster.xml
check_vmware_datastore.xml

4. Die Datei check_esx3_helper.sh muss in das Verzeichnis kopiert werden:

/var/www/cacti/scripts

5. Nun das check_vmware_api Script von op5 herunterladen und ebenfalls in das Verzeichnis kopieren:

/var/www/cacti/scripts

6. Die beiden anderen Dateien importiert ihr ins Cacti:

cacti_data_query_vmware_vpx_-_cluster_usage.xml
cacti_data_query_vmware_vpx_-_vmfs_usage.xml

import-template-cacti-esxi
7. Nachdem nun die Templates importiert sind, müssen diese mit dem vCenter verknüpft werden:
cacti_host_view
8. Logindaten fürs vSphere eingeben
Die Anmeldeinformationen werden anhand der SNMP v3 Logindaten ausgelesen. Sollte man also sein vCenter Server bereits via SNMP überwachen, dann muss man im Cacti dafür ein extra Gerät anlegen, damit man beide SNMP Einstellungen benutzten kann.
snmp-v3-cacti
9. Anschließend die Graphen erstellen:
cacti_graph_view
10. Rundum sollte es dann nach einer Zeit so aussehen:
cacti_cluster_view
Die Bilder sind teilweise kopiert von: http://www.hypervisor.fr/?p=3896

Nagios::Plugin für Perl nachinstallieren

Wenn man Nagios ohne die Nagios Plugins für Perl compiliert/installiert hat, kann man diese im Nachhinein wie folgt nachinstallieren:

perl -MCPAN -e shell

[EXPAND CPAN LOG]
CPAN is the world-wide archive of perl resources. It consists of about
300 sites that all replicate the same contents around the globe. Many
countries have at least one CPAN site already. The resources found on
CPAN are easily accessible with the CPAN.pm module. If you want to use
CPAN.pm, lots of things have to be configured. Fortunately, most of
them can be determined automatically. If you prefer the automatic
configuration, answer ‚yes‘ below.
If you prefer to enter a dialog instead, you can answer ’no‘ to this
question and I’ll let you configure in small steps one thing after the
other. (Note: you can revisit this dialog anytime later by typing ‚o
conf init‘ at the cpan prompt.)
Would you like me to configure as much as possible automatically? [yes]
Autoconfigured everything but ‚urllist‘.
Now you need to choose your CPAN mirror sites. You can let me
pick mirrors for you, you can select them from a list or you
can enter them by hand.
Would you like me to automatically choose the best CPAN mirror
sites for you? (This means connecting to the Internet and could
take a couple minutes) [yes]
Trying to fetch a mirror list from the Internet
Fetching with LWP:
http://www.perl.org/CPAN/MIRRORED.BY
Searching for the best CPAN mirrors (please be patient) ……………………………………………………………………………………. done!
New urllist
ftp://mirror.netcologne.de/cpan/
ftp://ftp.hosteurope.de/pub/CPAN/
ftp://ftp.u-tx.net/CPAN/
ftp://ftp.mirror.8086.net/sites/CPAN/
ftp://mirror.checkdomain.de/CPAN/
Autoconfiguration complete.
commit: wrote ‚/etc/perl/CPAN/Config.pm‘
Terminal does not support AddHistory.
cpan shell — CPAN exploration and modules installation (v1.9456)
Enter ‚h‘ for help.
[/EXPAND]

cpan[1]> install Nagios::Plugin

[EXPAND CPAN Nagios Installation Log]
Running install for module ‚Nagios::Plugin‘
Running make for T/TO/TONVOON/Nagios-Plugin-0.36.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/T/TO/TONVOON/Nagios-Plugin-0.36.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/T/TO/TONVOON/CHECKSUMS
Checksum for /home/drmadmin/.cpan/sources/authors/id/T/TO/TONVOON/Nagios-Plugin-0.36.tar.gz ok
CPAN.pm: Going to build T/TO/TONVOON/Nagios-Plugin-0.36.tar.gz
Checking if your kit is complete…
Looks good
Warning: prerequisite Config::Tiny 0 not found.
Warning: prerequisite Math::Calc::Units 0 not found.
Warning: prerequisite Params::Validate 0 not found.
Writing Makefile for Nagios::Plugin
—- Unsatisfied dependencies detected during —-
—- TONVOON/Nagios-Plugin-0.36.tar.gz —-
Params::Validate [requires]
Math::Calc::Units [requires]
Config::Tiny [requires]
Running make test
Delayed until after prerequisites
Running make install
Delayed until after prerequisites
Running install for module ‚Params::Validate‘
Running make for D/DR/DROLSKY/Params-Validate-1.07.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/D/DR/DROLSKY/Params-Validate-1.07.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/D/DR/DROLSKY/CHECKSUMS
Checksum for /home/drmadmin/.cpan/sources/authors/id/D/DR/DROLSKY/Params-Validate-1.07.tar.gz ok
CPAN.pm: Going to build D/DR/DROLSKY/Params-Validate-1.07.tar.gz
Checking prerequisites…
requires:
! Module::Implementation is not installed
build_requires:
! Test::Fatal is not installed
ERRORS/WARNINGS FOUND IN PREREQUISITES. You may wish to install the versions
of the modules indicated above before proceeding with this installation
Creating new ‚MYMETA.yml‘ with configuration results
Creating new ‚Build‘ script for ‚Params-Validate‘ version ‚1.07‘
—- Unsatisfied dependencies detected during —-
—- DROLSKY/Params-Validate-1.07.tar.gz —-
Test::Fatal [build_requires]
Module::Implementation [requires]
Running Build test
Delayed until after prerequisites
Running Build install
Delayed until after prerequisites
Running install for module ‚Test::Fatal‘
Running make for R/RJ/RJBS/Test-Fatal-0.010.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/R/RJ/RJBS/Test-Fatal-0.010.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/R/RJ/RJBS/CHECKSUMS
Checksum for /home/drmadmin/.cpan/sources/authors/id/R/RJ/RJBS/Test-Fatal-0.010.tar.gz ok
CPAN.pm: Going to build R/RJ/RJBS/Test-Fatal-0.010.tar.gz
Checking if your kit is complete…
Looks good
Warning: prerequisite Try::Tiny 0.07 not found.
Writing Makefile for Test::Fatal
—- Unsatisfied dependencies detected during —-
—- RJBS/Test-Fatal-0.010.tar.gz —-
Try::Tiny [requires]
Running make test
Delayed until after prerequisites
Running make install
Delayed until after prerequisites
Running install for module ‚Try::Tiny‘
Running make for D/DO/DOY/Try-Tiny-0.12.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/D/DO/DOY/Try-Tiny-0.12.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/D/DO/DOY/CHECKSUMS
Checksum for /home/drmadmin/.cpan/sources/authors/id/D/DO/DOY/Try-Tiny-0.12.tar.gz ok
CPAN.pm: Going to build D/DO/DOY/Try-Tiny-0.12.tar.gz
Checking if your kit is complete…
Looks good
Writing Makefile for Try::Tiny
cp lib/Try/Tiny.pm blib/lib/Try/Tiny.pm
Manifying blib/man3/Try::Tiny.3pm
DOY/Try-Tiny-0.12.tar.gz
/usr/bin/make — OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl „-MExtUtils::Command::MM“ „-e“ „test_harness(0, ‚blib/lib‘, ‚blib/arch‘)“ t/*.t
t/basic.t ……. ok
t/context.t ….. ok
t/finally.t ….. ok
t/given_when.t .. ok
t/when.t …….. ok
All tests successful.
Files=5, Tests=85, 0 wallclock secs ( 0.04 usr 0.02 sys + 0.16 cusr 0.02 csys = 0.24 CPU)
Result: PASS
DOY/Try-Tiny-0.12.tar.gz
/usr/bin/make test — OK
Running make install
Installing /usr/local/share/perl/5.12.4/Try/Tiny.pm
Installing /usr/local/man/man3/Try::Tiny.3pm
Appending installation info to /usr/local/lib/perl/5.12.4/perllocal.pod
DOY/Try-Tiny-0.12.tar.gz
/usr/bin/make install — OK
Running make for R/RJ/RJBS/Test-Fatal-0.010.tar.gz
Has already been unwrapped into directory /home/drmadmin/.cpan/build/Test-Fatal-0.010-ipHhnd
CPAN.pm: Going to build R/RJ/RJBS/Test-Fatal-0.010.tar.gz
cp lib/Test/Fatal.pm blib/lib/Test/Fatal.pm
Manifying blib/man3/Test::Fatal.3pm
RJBS/Test-Fatal-0.010.tar.gz
/usr/bin/make — OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl „-MExtUtils::Command::MM“ „-e“ „test_harness(0, ‚blib/lib‘, ‚blib/arch‘)“ t/*.t
t/basic.t …………… ok
t/like-exception.t …… ok
t/release-pod-syntax.t .. skipped: these tests are for release candidate testing
All tests successful.
Files=3, Tests=12, 0 wallclock secs ( 0.03 usr 0.00 sys + 0.09 cusr 0.00 csys = 0.12 CPU)
Result: PASS
RJBS/Test-Fatal-0.010.tar.gz
/usr/bin/make test — OK
Running make install
Installing /usr/local/share/perl/5.12.4/Test/Fatal.pm
Installing /usr/local/man/man3/Test::Fatal.3pm
Appending installation info to /usr/local/lib/perl/5.12.4/perllocal.pod
RJBS/Test-Fatal-0.010.tar.gz
/usr/bin/make install — OK
Running install for module ‚Module::Implementation‘
Running make for D/DR/DROLSKY/Module-Implementation-0.06.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/D/DR/DROLSKY/Module-Implementation-0.06.tar.gz
Checksum for /home/drmadmin/.cpan/sources/authors/id/D/DR/DROLSKY/Module-Implementation-0.06.tar.gz ok
CPAN.pm: Going to build D/DR/DROLSKY/Module-Implementation-0.06.tar.gz
Checking if your kit is complete…
Looks good
Warning: prerequisite Module::Runtime 0.012 not found.
Warning: prerequisite Test::Requires 0 not found.
Writing Makefile for Module::Implementation
—- Unsatisfied dependencies detected during —-
—- DROLSKY/Module-Implementation-0.06.tar.gz —-
Test::Requires [build_requires]
Module::Runtime [requires]
Running make test
Delayed until after prerequisites
Running make install
Delayed until after prerequisites
Running install for module ‚Test::Requires‘
Running make for T/TO/TOKUHIROM/Test-Requires-0.06.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/T/TO/TOKUHIROM/Test-Requires-0.06.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/T/TO/TOKUHIROM/CHECKSUMS
Checksum for /home/drmadmin/.cpan/sources/authors/id/T/TO/TOKUHIROM/Test-Requires-0.06.tar.gz ok
CPAN.pm: Going to build T/TO/TOKUHIROM/Test-Requires-0.06.tar.gz
Checking if your kit is complete…
Looks good
Writing Makefile for Test::Requires
cp lib/Test/Requires.pm blib/lib/Test/Requires.pm
Manifying blib/man3/Test::Requires.3pm
TOKUHIROM/Test-Requires-0.06.tar.gz
/usr/bin/make — OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl „-MExtUtils::Command::MM“ „-e“ „test_harness(0, ‚inc‘, ‚blib/lib‘, ‚blib/arch‘)“ t/*.t
t/00_compile.t ……… ok
t/01_simple.t ………. ok
t/02_no_plan.t ……… ok
t/03_import_hashref.t .. skipped: Test requires module ‚Acme::Unknown::Missing::Module::Name‘ but it’s not found
t/04_import_array.t …. skipped: Test requires module ‚Acme::Unknown::Missing::Module::Name‘ but it’s not found
t/05_success.t ……… ok
All tests successful.
Files=6, Tests=13, 0 wallclock secs ( 0.04 usr 0.01 sys + 0.17 cusr 0.02 csys = 0.24 CPU)
Result: PASS
TOKUHIROM/Test-Requires-0.06.tar.gz
/usr/bin/make test — OK
Running make install
Installing /usr/local/share/perl/5.12.4/Test/Requires.pm
Installing /usr/local/man/man3/Test::Requires.3pm
Appending installation info to /usr/local/lib/perl/5.12.4/perllocal.pod
TOKUHIROM/Test-Requires-0.06.tar.gz
/usr/bin/make install — OK
Running install for module ‚Module::Runtime‘
Running make for Z/ZE/ZEFRAM/Module-Runtime-0.013.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/Z/ZE/ZEFRAM/Module-Runtime-0.013.tar.gz
Fetching with LWP:
ftp://mirror.netcologne.de/cpan/authors/id/Z/ZE/ZEFRAM/CHECKSUMS
Checksum for /home/drmadmin/.cpan/sources/authors/id/Z/ZE/ZEFRAM/Module-Runtime-0.013.tar.gz ok
CPAN.pm: Going to build Z/ZE/ZEFRAM/Module-Runtime-0.013.tar.gz
Creating new ‚MYMETA.yml‘ with configuration results
Creating new ‚Build‘ script for ‚Module-Runtime‘ version ‚0.013‘
Building Module-Runtime
ZEFRAM/Module-Runtime-0.013.tar.gz
./Build — OK
Running Build test
t/cmn.t ……….. ok
t/dependency.t …. ok
t/import_error.t .. ok
t/ivmn.t ………. ok
t/ivms.t ………. ok
t/mnf.t ……….. ok
t/pod_cvg.t ……. skipped: Test::Pod::Coverage not available
t/pod_syn.t ……. skipped: Test::Pod not available
t/rm.t ………… ok
t/taint.t ……… ok
t/um.t ………… ok
t/upo.t ……….. ok
All tests successful.
Files=12, Tests=303, 1 wallclock secs ( 0.09 usr 0.03 sys + 0.43 cusr 0.04 csys = 0.59 CPU)
Result: PASS
ZEFRAM/Module-Runtime-0.013.tar.gz
./Build test — OK
Running Build install
Building Module-Runtime
Installing /usr/local/share/perl/5.12.4/Module/Runtime.pm
Installing /usr/local/man/man3/Module::Runtime.3pm
ZEFRAM/Module-Runtime-0.013.tar.gz
./Build install — OK
Running make for D/DR/DROLSKY/Module-Implementation-0.06.tar.gz
Has already been unwrapped into directory /home/drmadmin/.cpan/build/Module-Implementation-0.06-kPJenR
CPAN.pm: Going to build D/DR/DROLSKY/Module-Implementation-0.06.tar.gz
cp lib/Module/Implementation.pm blib/lib/Module/Implementation.pm
Manifying blib/man3/Module::Implementation.3pm
DROLSKY/Module-Implementation-0.06.tar.gz
/usr/bin/make — OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl „-MExtUtils::Command::MM“ „-e“ „test_harness(0, ‚blib/lib‘, ‚blib/arch‘)“ t/*.t
t/basic.t ……………… ok
t/both-fail.t ………….. ok
t/env-value.t ………….. ok
t/more-symbols.t ……….. ok
t/one-impl-fails1.t …….. ok
t/one-impl-fails2.t …….. ok
t/release-cpan-changes.t … skipped: these tests are for release candidate testing
t/release-eol.t ………… skipped: these tests are for release candidate testing
t/release-no-tabs.t …….. skipped: these tests are for release candidate testing
t/release-pod-linkcheck.t .. skipped: these tests are for release candidate testing
t/release-pod-no404s.t ….. skipped: these tests are for release candidate testing
t/release-pod-spell.t …… skipped: these tests are for release candidate testing
t/release-pod-syntax.t ….. skipped: these tests are for release candidate testing
t/requested-fails.t …….. ok
t/taint.t ……………… skipped: Test requires module ‚Test::Taint‘ but it’s not found
All tests successful.
Files=15, Tests=22, 0 wallclock secs ( 0.07 usr 0.02 sys + 0.38 cusr 0.06 csys = 0.53 CPU)
Result: PASS
DROLSKY/Module-Implementation-0.06.tar.gz
/usr/bin/make test — OK
Running make install
Installing /usr/local/share/perl/5.12.4/Module/Implementation.pm
Installing /usr/local/man/man3/Module::Implementation.3pm
Appending installation info to /usr/local/lib/perl/5.12.4/perllocal.pod
DROLSKY/Module-Implementation-0.06.tar.gz
/usr/bin/make install — OK
Running Build for D/DR/DROLSKY/Params-Validate-1.07.tar.gz
Has already been unwrapped into directory /home/drmadmin/.cpan/build/Params-Validate-1.07-ag8vW1
CPAN.pm: Going to build D/DR/DROLSKY/Params-Validate-1.07.tar.gz
Building Params-Validate
cc -Ic -I/usr/lib/perl/5.12/CORE -DXS_VERSION=“1.07″ -DVERSION=“1.07″ -fPIC -c -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -o lib/Params/Validate/XS.o lib/Params/Validate/XS.c
ExtUtils::Mkbootstrap::Mkbootstrap(‚blib/arch/auto/Params/Validate/XS/XS.bs‘)
cc -shared -O2 -g -L/usr/local/lib -fstack-protector -o blib/arch/auto/Params/Validate/XS/XS.so lib/Params/Validate/XS.o
DROLSKY/Params-Validate-1.07.tar.gz
./Build — OK
Running Build test
t/01-validate.t ……………………. ok
t/02-noop.t ……………………….. ok
t/03-attribute.t …………………… ok
t/04-defaults.t ……………………. ok
t/05-noop_default.t ………………… ok
t/06-options.t …………………….. ok
t/07-with.t ……………………….. ok
t/08-noop_with.t …………………… ok
t/09-regex.t ………………………. ok
t/10-noop_regex.t ………………….. ok
t/11-cb.t …………………………. ok
t/12-noop_cb.t …………………….. ok
t/13-taint.t ………………………. ok
t/14-no_validate.t …………………. ok
t/15-case.t ……………………….. ok
t/16-normalize.t …………………… ok
t/17-callbacks.t …………………… ok
t/18-depends.t …………………….. ok
t/19-untaint.t …………………….. skipped: These tests require Test::Taint 0.02+ to run
t/21-can.t ………………………… ok
t/22-overload-can-bug.t …………….. ok
t/23-readonly.t ……………………. skipped: Need Readonly::XS and Readonly for this test
t/24-tied.t ……………………….. ok
t/25-undef-regex.t …………………. ok
t/26-isa.t ………………………… ok
t/27-string-as-type.t ………………. ok
t/28-readonly-return.t ……………… ok
t/29-taint-mode.t ………………….. skipped: This test is flaky
t/30-hashref-alteration.t …………… ok
t/31-incorrect-spelling.t …………… skipped: Spec validation is disabled for now
t/32-regex-as-value.t ………………. ok
t/33-keep-errsv.t ………………….. ok
t/34-recursive-validation.t …………. ok
t/release-cpan-changes.t ……………. skipped: these tests are for release candidate testing
t/release-eol.t ……………………. skipped: these tests are for release candidate testing
t/release-no-tabs.t ………………… skipped: these tests are for release candidate testing
t/release-pod-coverage.t ……………. skipped: these tests are for release candidate testing
t/release-pod-linkcheck.t …………… skipped: these tests are for release candidate testing
t/release-pod-no404s.t ……………… skipped: these tests are for release candidate testing
t/release-pod-spell.t ………………. skipped: these tests are for release candidate testing
t/release-pod-syntax.t ……………… skipped: these tests are for release candidate testing
t/release-pp-01-validate.t ………….. skipped: these tests are for testing by the release
t/release-pp-02-noop.t ……………… skipped: these tests are for testing by the release
t/release-pp-03-attribute.t …………. skipped: these tests are for testing by the release
t/release-pp-04-defaults.t ………….. skipped: these tests are for testing by the release
t/release-pp-05-noop_default.t ………. skipped: these tests are for testing by the release
t/release-pp-06-options.t …………… skipped: these tests are for testing by the release
t/release-pp-07-with.t ……………… skipped: these tests are for testing by the release
t/release-pp-08-noop_with.t …………. skipped: these tests are for testing by the release
t/release-pp-09-regex.t …………….. skipped: these tests are for testing by the release
t/release-pp-10-noop_regex.t ………… skipped: these tests are for testing by the release
t/release-pp-11-cb.t ……………….. skipped: these tests are for testing by the release
t/release-pp-12-noop_cb.t …………… skipped: these tests are for testing by the release
t/release-pp-13-taint.t …………….. skipped: these tests are for testing by the release
t/release-pp-14-no_validate.t ……….. skipped: these tests are for testing by the release
t/release-pp-15-case.t ……………… skipped: these tests are for testing by the release
t/release-pp-16-normalize.t …………. skipped: these tests are for testing by the release
t/release-pp-17-callbacks.t …………. skipped: these tests are for testing by the release
t/release-pp-18-depends.t …………… skipped: these tests are for testing by the release
t/release-pp-19-untaint.t …………… skipped: these tests are for testing by the release
t/release-pp-21-can.t ………………. skipped: these tests are for testing by the release
t/release-pp-22-overload-can-bug.t …… skipped: these tests are for testing by the release
t/release-pp-23-readonly.t ………….. skipped: these tests are for testing by the release
t/release-pp-24-tied.t ……………… skipped: these tests are for testing by the release
t/release-pp-25-undef-regex.t ……….. skipped: these tests are for testing by the release
t/release-pp-26-isa.t ………………. skipped: these tests are for testing by the release
t/release-pp-27-string-as-type.t …….. skipped: these tests are for testing by the release
t/release-pp-28-readonly-return.t ……. skipped: these tests are for testing by the release
t/release-pp-29-taint-mode.t ………… skipped: these tests are for testing by the release
t/release-pp-30-hashref-alteration.t …. skipped: these tests are for testing by the release
t/release-pp-31-incorrect-spelling.t …. skipped: these tests are for testing by the release
t/release-pp-32-regex-as-value.t …….. skipped: these tests are for testing by the release
t/release-pp-33-keep-errsv.t ………… skipped: these tests are for testing by the release
t/release-pp-34-recursive-validation.t .. skipped: these tests are for testing by the release
t/release-pp-is-loaded.t ……………. skipped: these tests are for release candidate testing
t/release-xs-is-loaded.t ……………. skipped: these tests are for release candidate testing
t/release-xs-segfault.t …………….. skipped: these tests are for release candidate testing
All tests successful.
Test Summary Report
——————-
t/34-recursive-validation.t (Wstat: 0 Tests: 1 Failed: 0)
TODO passed: 1
Files=77, Tests=502, 4 wallclock secs ( 0.33 usr 0.12 sys + 2.46 cusr 0.36 csys = 3.27 CPU)
Result: PASS
DROLSKY/Params-Validate-1.07.tar.gz
./Build test — OK
Running Build install
Building Params-Validate
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/local/lib/perl/5.12.4/auto/Params/Validate/XS/XS.so
Installing /usr/local/lib/perl/5.12.4/auto/Params/Validate/XS/XS.bs
Installing /usr/local/lib/perl/5.12.4/Params/ValidateXS.pm
Installing /usr/local/lib/perl/5.12.4/Params/ValidatePP.pm
Installing /usr/local/lib/perl/5.12.4/Params/Validate.pm
Installing /usr/local/lib/perl/5.12.4/Params/Validate/PP.pm
Installing /usr/local/lib/perl/5.12.4/Params/Validate/XS.pm
Installing /usr/local/lib/perl/5.12.4/Params/Validate/Constants.pm
Installing /usr/local/lib/perl/5.12.4/Attribute/Params/Validate.pm
Installing /usr/local/man/man3/Attribute::Params::Validate.3pm
Installing /usr/local/man/man3/Params::Validate.3pm
DROLSKY/Params-Validate-1.07.tar.gz
./Build install — OK
Running install for module ‚Math::Calc::Units‘
Running make for S/SF/SFINK/Math-Calc-Units-1.07.tar.gz
Checksum for /home/drmadmin/.cpan/sources/authors/id/S/SF/SFINK/Math-Calc-Units-1.07.tar.gz ok
CPAN.pm: Going to build S/SF/SFINK/Math-Calc-Units-1.07.tar.gz
Checking if your kit is complete…
Looks good
Writing Makefile for Math::Calc::Units
cp Units/Convert/Byte.pm blib/lib/Math/Calc/Units/Convert/Byte.pm
cp Units/Convert/Multi.pm blib/lib/Math/Calc/Units/Convert/Multi.pm
cp Units/Convert/Combo.pm blib/lib/Math/Calc/Units/Convert/Combo.pm
cp Units/Grammar.y blib/lib/Math/Calc/Units/Grammar.y
cp Units/Convert/Metric.pm blib/lib/Math/Calc/Units/Convert/Metric.pm
cp Units/Grammar.pm blib/lib/Math/Calc/Units/Grammar.pm
cp Units/Convert/Date.pm blib/lib/Math/Calc/Units/Convert/Date.pm
cp Units/Convert.pm blib/lib/Math/Calc/Units/Convert.pm
cp Units/Convert/Base2Metric.pm blib/lib/Math/Calc/Units/Convert/Base2Metric.pm
cp Units/Rank.pm blib/lib/Math/Calc/Units/Rank.pm
cp Units/Convert/Base.pm blib/lib/Math/Calc/Units/Convert/Base.pm
cp Units/Convert/Distance.pm blib/lib/Math/Calc/Units/Convert/Distance.pm
cp Units/Compute.pm blib/lib/Math/Calc/Units/Compute.pm
cp Units.pm blib/lib/Math/Calc/Units.pm
cp Units/Convert/Time.pm blib/lib/Math/Calc/Units/Convert/Time.pm
cp script/ucalc blib/script/ucalc
/usr/bin/perl -MExtUtils::MY -e ‚MY->fixin(shift)‘ — blib/script/ucalc
Manifying blib/man3/Math::Calc::Units.3pm
SFINK/Math-Calc-Units-1.07.tar.gz
/usr/bin/make — OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl „-MExtUtils::Command::MM“ „-e“ „test_harness(0, ‚blib/lib‘, ‚blib/arch‘)“ t/*.t
t/main.t .. ok
t/pod.t … skipped: Test::Pod 1.00 required for testing POD
All tests successful.
Files=2, Tests=64, 0 wallclock secs ( 0.04 usr 0.00 sys + 0.13 cusr 0.01 csys = 0.18 CPU)
Result: PASS
SFINK/Math-Calc-Units-1.07.tar.gz
/usr/bin/make test — OK
Running make install
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Compute.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Rank.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Grammar.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Convert.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Grammar.y
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Convert/Date.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Convert/Byte.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Convert/Base.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Convert/Distance.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Convert/Base2Metric.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Convert/Time.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Convert/Multi.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Convert/Combo.pm
Installing /usr/local/share/perl/5.12.4/Math/Calc/Units/Convert/Metric.pm
Installing /usr/local/man/man3/Math::Calc::Units.3pm
Appending installation info to /usr/local/lib/perl/5.12.4/perllocal.pod
SFINK/Math-Calc-Units-1.07.tar.gz
/usr/bin/make install — OK
Running install for module ‚Config::Tiny‘
Running make for A/AD/ADAMK/Config-Tiny-2.14.tar.gz
Checksum for /home/drmadmin/.cpan/sources/authors/id/A/AD/ADAMK/Config-Tiny-2.14.tar.gz ok
CPAN.pm: Going to build A/AD/ADAMK/Config-Tiny-2.14.tar.gz
Checking if your kit is complete…
Looks good
Writing Makefile for Config::Tiny
cp lib/Config/Tiny.pm blib/lib/Config/Tiny.pm
Manifying blib/man3/Config::Tiny.3pm
ADAMK/Config-Tiny-2.14.tar.gz
/usr/bin/make — OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl „-MExtUtils::Command::MM“ „-e“ „test_harness(0, ‚blib/lib‘, ‚blib/arch‘)“ t/*.t
t/01_compile.t .. ok
t/02_main.t ….. ok
All tests successful.
Files=2, Tests=34, 0 wallclock secs ( 0.02 usr 0.01 sys + 0.06 cusr 0.01 csys = 0.10 CPU)
Result: PASS
ADAMK/Config-Tiny-2.14.tar.gz
/usr/bin/make test — OK
Running make install
Installing /usr/local/share/perl/5.12.4/Config/Tiny.pm
Installing /usr/local/man/man3/Config::Tiny.3pm
Appending installation info to /usr/local/lib/perl/5.12.4/perllocal.pod
ADAMK/Config-Tiny-2.14.tar.gz
/usr/bin/make install — OK
Running make for T/TO/TONVOON/Nagios-Plugin-0.36.tar.gz
Has already been unwrapped into directory /home/drmadmin/.cpan/build/Nagios-Plugin-0.36-HwusWi
CPAN.pm: Going to build T/TO/TONVOON/Nagios-Plugin-0.36.tar.gz
cp lib/Nagios/Plugin/ExitResult.pm blib/lib/Nagios/Plugin/ExitResult.pm
cp lib/Nagios/Plugin/Functions.pm blib/lib/Nagios/Plugin/Functions.pm
cp lib/Nagios/Plugin/Threshold.pm blib/lib/Nagios/Plugin/Threshold.pm
cp lib/Nagios/Plugin/Range.pm blib/lib/Nagios/Plugin/Range.pm
cp lib/Nagios/Plugin/Getopt.pm blib/lib/Nagios/Plugin/Getopt.pm
cp lib/Nagios/Plugin/Performance.pm blib/lib/Nagios/Plugin/Performance.pm
cp lib/Nagios/Plugin/Config.pm blib/lib/Nagios/Plugin/Config.pm
cp lib/Nagios/Plugin.pm blib/lib/Nagios/Plugin.pm
Manifying blib/man3/Nagios::Plugin::ExitResult.3pm
Manifying blib/man3/Nagios::Plugin::Functions.3pm
Manifying blib/man3/Nagios::Plugin::Threshold.3pm
Manifying blib/man3/Nagios::Plugin::Range.3pm
Manifying blib/man3/Nagios::Plugin::Getopt.3pm
Manifying blib/man3/Nagios::Plugin::Performance.3pm
Manifying blib/man3/Nagios::Plugin::Config.3pm
Manifying blib/man3/Nagios::Plugin.3pm
TONVOON/Nagios-Plugin-0.36.tar.gz
/usr/bin/make — OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl „-MExtUtils::Command::MM“ „-e“ „test_harness(0, ‚blib/lib‘, ‚blib/arch‘)“ t/*.t
t/check_stuff.t ………………. ok
t/Nagios-Plugin-01.t ………….. ok
t/Nagios-Plugin-02.t ………….. ok
t/Nagios-Plugin-03.t ………….. ok
t/Nagios-Plugin-04.t ………….. ok
t/Nagios-Plugin-Functions-01.t …. 1/113 defined(%hash) is deprecated at t/Nagios-Plugin-Functions-01.t line 22.
(Maybe you should just omit the defined()?)
t/Nagios-Plugin-Functions-01.t …. ok
t/Nagios-Plugin-Functions-02.t …. ok
t/Nagios-Plugin-Functions-03.t …. ok
t/Nagios-Plugin-Getopt-01.t ……. ok
t/Nagios-Plugin-Getopt-02.t ……. ok
t/Nagios-Plugin-Getopt-03.t ……. ok
t/Nagios-Plugin-Getopt-04.t ……. ok
t/Nagios-Plugin-Performance-02.t .. ok
t/Nagios-Plugin-Performance.t ….. ok
t/Nagios-Plugin-Range.t ……….. ok
t/Nagios-Plugin-Threshold.t ……. ok
All tests successful.
Files=16, Tests=975, 4 wallclock secs ( 0.20 usr 0.02 sys + 3.84 cusr 0.20 csys = 4.26 CPU)
Result: PASS
TONVOON/Nagios-Plugin-0.36.tar.gz
/usr/bin/make test — OK
Running make install
Installing /usr/local/share/perl/5.12.4/Nagios/Plugin.pm
Installing /usr/local/share/perl/5.12.4/Nagios/Plugin/Performance.pm
Installing /usr/local/share/perl/5.12.4/Nagios/Plugin/Functions.pm
Installing /usr/local/share/perl/5.12.4/Nagios/Plugin/Range.pm
Installing /usr/local/share/perl/5.12.4/Nagios/Plugin/Threshold.pm
Installing /usr/local/share/perl/5.12.4/Nagios/Plugin/ExitResult.pm
Installing /usr/local/share/perl/5.12.4/Nagios/Plugin/Config.pm
Installing /usr/local/share/perl/5.12.4/Nagios/Plugin/Getopt.pm
Installing /usr/local/man/man3/Nagios::Plugin.3pm
Installing /usr/local/man/man3/Nagios::Plugin::Performance.3pm
Installing /usr/local/man/man3/Nagios::Plugin::Getopt.3pm
Installing /usr/local/man/man3/Nagios::Plugin::Threshold.3pm
Installing /usr/local/man/man3/Nagios::Plugin::Range.3pm
Installing /usr/local/man/man3/Nagios::Plugin::Functions.3pm
Installing /usr/local/man/man3/Nagios::Plugin::ExitResult.3pm
Installing /usr/local/man/man3/Nagios::Plugin::Config.3pm
Appending installation info to /usr/local/lib/perl/5.12.4/perllocal.pod
TONVOON/Nagios-Plugin-0.36.tar.gz
/usr/bin/make install — OK
[/EXPAND]

cpan[3]> quit

Fertig.
Alternativ kann man auch beim Kompilieren von Nagios die Perl-Erweiterung installieren:

./configure --enable-perl-modules

Anschließend noch Make, Make Install machen.
Noch nice to know, wie man sich die bisher installierten Perl Module auflisten lassen kann:

instmodsh

Bringt die Ausgabe:

Available commands are:
l            - List all installed modules
m    - Select a module
q            - Quit the program
cmd?
At cmd? prompt type l to list all installed modules:

Mit der Eingabe von l , bekommt man nun die Ausgabe der Module:

cmd? l
Sample outputs:
Installed modules are:
Archive::Tar
CPAN
Class::Spiffy
Compress::Zlib
Cwd
Digest::SHA