Erstellung eines Windows-Binaries check_logfiles.exe

Die Installation von check_logfiles auf einem Windows-Rechner setzt das Vorhandensein eines Perl-Interpreters voraus. Dies ist nicht immer erwünscht und führt bei einer großen Anzahl von Nagios-Clients zu erheblichem Administrationsaufwand. Um diesen Aufwand zu minimieren, bietet es sich an, check_logfiles in ein natives Binary zu verwandeln, welches ohne zusätzliche Software lauffähig ist.

Es gibt mehrere Möglichkeiten, aus einem Perl-Script ein Exe-Programm zu machen, die mehr oder weniger funktionieren.

Ich bin nach mehreren erfolglosen Experimenten bei Strawberry Perl und PAR::Packer gelandet.

Installation von Strawberry Perl

Strawberry Perl ist eine 100% OpenSource Implementierung von Perl. Es installiert sich in das Verzeichnis C:\strawberry und bringt gleichzeitig eine mingw32 Umgebung samt gcc mit.
Alternativ gibt es auch eine Standalone-Version von Strawberry Perl.

Für alle danach folgenden Schritte ist es wichtig, daß Strawberry-Perl als erstes Perl im Pfad gefunden wird. (Falls es noch andere Installationen von Perl gibt, z.b. ActiveState, VMWare Tools, Cygwin,…)

C:\> echo %PATH%
C:\Programme\VMware\VMware VI Remote CLI\Perl\site\bin;C:\Programme\VMware\VMware VI Remote CLI\Perl\bin;c:\ruby\bin;C:\Perl\site\bin;C:\Perl\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\strawberry\c\bin;C:\strawberry\perl\bin;C:\strawberry\c\bin;C:\strawberry\perl\bin;C:\Programme\Gemeinsame Dateien\Adobe\AGL

C:\>set PATH=C:\strawberry\c\bin;C:\strawberry\perl\bin;%PATH%
C:\>perl -V
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
    osname=MSWin32, osvers=5.1, archname=MSWin32-x86-multi-thread
...
...
  Built under MSWin32
  Compiled at Apr 17 2008 11:36:20
  @INC:
    C:/strawberry/perl/lib
    C:/strawberry/perl/site/lib
    .

Installation von PAR::Packer

Für die Generierung des Binaries braucht man die Perl-Module PAR und PAR::Packer.

perl -MCPAN -eshell
install PAR
install PAR::Packer

Auspacken und Erstellen des check_logfiles Plugins

Zuerst wird im Verzeichnis check_logfiles (welches durch Auspacken des tar-Archivs entstand) die Windows-Variante des Plugins erzeugt. Dieses befindet sich danach im Unterverzeichnis plugins-scripts. Dort findet auch der letzte Schritt statt.

PS C:\cygwin64\home\lausser\git> cd check_logfiles
PS C:\cygwin64\home\lausser\git\check_logfiles> perl winconfig.pl

Erzeugen des Binaries

PAR::Packer stellt das Programm pp zur Verfügung, mit dem man ein Perl-Script in einer einzelnen Exe-Datei verpacken kann.

PS C:\cygwin64\home\lausser\git\check_logfiles> cd plugins-scripts
PS C:\cygwin64\home\lausser\git\check_logfiles\plugins-scripts> pp -M PerlIO -M Digest::MD5 -M Encode::Encoding -M Encode::Unicode -M Encode::Unicode::UTF7 -M Net::Domain -M Win32::NetResource -M Win32::Daemon -M Time::Piece -M Time::Local -M Win32::EventLog -M Win32::TieRegistry -M Win32::WinError -M Date::Manip -M Win32::OLE -o check_logfiles.exe check_logfiles
PS C:\cygwin64\home\lausser\git\check_logfiles\plugins-scripts> .\check_logfiles -V
check_logfiles.exe v2.4.1.7