Debian Paket fuer Zabbix Proxy erstellen

Binary kompilieren

Basisordner anlegen

Legen Sie einen Basisordner an, in dem alle Binaries und weiteren Dateien gespeichert werden. Aus diesem Basisordner wird dann später das Debian-Paket erzeugt.

Beispiel:

mkdir -p /opt/packaging/zabbix-proxy-sqlite/2.0.6/usr

Zabbix-Proxy aus den Quellen installieren

Kompilieren Sie eine Binary für den Zabbix-Proxy wie in der Anleitung Zabbix_Proxy_installieren_und_verwenden. Nutzen Sie die Option

--prefix=/opt/packaging/zabbix-proxy-sqlite/2.0.6/usr

So werden die Binaries nicht in einem Standardverzeichnis installiert. Mit "make install" werden dann alle Dateien in den Ordner installiert, der später in das Debian-Paket "verpackt" wird.

Installieren Sie keine Konfigurationdateien oder Init-Skripte in /etc.

Nach dem Sie 'make' und 'make install' install ausgeführt haben, sollten Sie folgende Dateien und Ordner im Verzeichnis /opt/packaging/zabbix-proxy-sqlite/2.0.6 vorfinden.

root@debian:/opt/packaging/zabbix-proxy-sqlite/2.0.6# find .
.
./usr
./usr/share
./usr/share/man
./usr/share/man/man8
./usr/share/man/man8/zabbix_proxy.8
./usr/share/man/man1
./usr/sbin
./usr/sbin/zabbix_proxy

Testen Sie, ob die Datei zabbix_proxy ausführbar ist.

file /opt/packaging/zabbix-proxy-sqlite/2.0.6/usr/sbin/zabbix_proxy 
/opt/packaging/zabbix-proxy-sqlite/2.0.6/usr/sbin/zabbix_proxy: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

/opt/packaging/zabbix-proxy-sqlite/2.0.6/usr/sbin/zabbix_proxy -V
Zabbix-Proxy v2.0.6 (revision 16604) (4 January 2011)
Compilation time: Apr 20 2011 08:03:31

Paketvorlage erstellen

DEBIAN Ordner anlegen

Legen Sie nun einen Ordner DEBIAN an, in dem alle Kontrolldateien gespeichert werden, die zum Erstellen eines Deb-Paketes benötigt werden.

mkdir /opt/packaging/zabbix-proxy-sqlite/2.0.6/DEBIAN

Ordner-Struktur an Debian anpassen

Legen Sie im Basisverzeichnis noch folgende Ordner an, damit der Zabbix-Proxy später Ordner verwendet, die den Debian-Standards entsprechen.

cd /opt/packaging/zabbix-proxy-sqlite/2.0.6/
mkdir -p var/lib/zabbix-proxy
mkdir -p var/log/zabbix-proxy
mkdir -p var/run/zabbix-proxy
mkdir -p etc/zabbix
mkdir etc/init.d

Pre- und Post-Skripte anlegen

Legen Sie nun die Skripte an, die nach der Installation das System vorbereiten und bei der Deinstallation die Dateien entfernen.

DEBIAN/postinst

#!/bin/sh -e
if [ "$1" = "configure" ]; then
    if ! getent group zabbix > /dev/null 2>&1 ; then
    addgroup --system --quiet zabbix
    fi

    if ! getent passwd zabbix > /dev/null 2>&1 ; then
    adduser --quiet \
        --system --disabled-login --ingroup zabbix \
        --home /var/run/zabbix-proxy/ --no-create-home \
        zabbix
    fi
fi
chown zabbix:zabbix /var/lib/zabbix-proxy
chown zabbix:zabbix /var/run/zabbix-proxy
chown zabbix:zabbix /var/log/zabbix-proxy
test -e /etc/zabbix/zabbix_proxy.conf || cp /usr/share/zabbix-proxy/zabbix_proxy.conf /etc/zabbix/

# Automatically added by dh_installinit
if [ -x "/etc/init.d/zabbix-proxy" ]; then
	update-rc.d zabbix-proxy defaults >/dev/null
	if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
		invoke-rc.d zabbix-proxy start || exit $?
	else
		/etc/init.d/zabbix-proxy start || exit $?
	fi
fi
# End automatically added section
exit 0

DEBIAN/postrm

#!/bin/sh -e
case "$1" in
    failed-upgrade|abort-install|abort-upgrade|disappear|upgrade)
    ;;
    remove)
    ;;
    purge)
        rm -fr /var/log/zabbix-proxy
        rm -fr /var/run/zabbix-proxy
        rm -f /etc/zabbix/zabbix_proxy.conf
        ucf --purge /etc/zabbix/zabbix_proxy.conf || true
    ;;

    *)
        echo "postrm called with unknown argument \`$1'" >&2
        exit 1
esac

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

# Automatically added by dh_installinit
if [ "$1" = "purge" ] ; then
	update-rc.d zabbix-proxy remove >/dev/null
fi
# End automatically added section
# Automatically added by dh_installdebconf
if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; then
	. /usr/share/debconf/confmodule
	db_purge
fi
# End automatically added section


exit 0

DEBIAN/prerm

#!/bin/sh
set -e
if [ -x "/etc/init.d/zabbix-proxy" ]; then
	if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
		invoke-rc.d zabbix-proxy stop || exit $?
	else
		/etc/init.d/zabbix-proxy stop || exit $?
	fi
fi
exit 0

Eine Konfiguration für den Proxy erstellen

Legen Sie einen Ordner an, in den Sie eine Basiskonfiguration speichern, die bei der ersten Installation des Paketes installiert wird. Kopieren Sie eine Beispielkonfiguration in diesen Ordner.

mkdir /opt/packaging/zabbix-proxy-sqlite/2.0.6/usr/share/zabbix-proxy
cp /usr/src/zabbix-2.0.6/misc/conf/zabbix_proxy.conf /opt/packaging/zabbix-proxy-sqlite/2.0.6/usr/share/zabbix-proxy

Passen Sie die Konfiguration so an, dass die Debian-Standard-Ordner verwendet werden. Dazu müssen folgende Einstellungen angepasst werden.

### Option: LogFile
#       Name of log file.
#       If not set, syslog is used.
#
# Mandatory: no
# Default:
# LogFile=

LogFile=/var/log/zabbix-proxy/zabbix-proxy.log

### Option: PidFile
#       Name of PID file.
#
# Mandatory: no
# Default:
# PidFile=/tmp/zabbix_proxy.pid

PidFile=/var/run/zabbix-proxy/zabbix_proxy.pid

### Option: DBName
#       Database name.
#       For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
#
# Mandatory: yes
# Default:
# DBName=

DBName=/var/lib/zabbix-proxy/zabbix_proxy.db

### Option: FpingLocation
#       Location of fping.
#       Make sure that fping binary has root ownership and SUID flag set.
#
# Mandatory: no
# Default:
# FpingLocation=/usr/sbin/fping

FpingLocation=/usr/bin/fping

Ein Init-Skript anlegen

Legen Sie im Basisordner ein Start-Stop-Skript etc/init.d/zabbix-proxyfür den Zabbix-Proxy an.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          zabbix-proxy
# Required-Start:    $remote_fs $network 
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start zabbix-proxy daemon
### END INIT INFO

set -e

NAME=zabbix_proxy
DAEMON=/usr/sbin/$NAME
DESC="Zabbix proxy daemon"

test -x $DAEMON || exit 0

DIR=/var/run/zabbix-proxy
PID=$DIR/$NAME.pid
RETRY=15

if test ! -d "$DIR"; then
  mkdir "$DIR"
  chown -R zabbix:zabbix "$DIR"
fi

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

# define LSB log_* functions.
. /lib/lsb/init-functions

case "$1" in
  start)
    log_daemon_msg "Starting $DESC" "$NAME"
	start-stop-daemon --oknodo --start --pidfile $PID \
	  --exec $DAEMON >/dev/null 2>&1
    case "$?" in
        0) log_end_msg 0 ;;
        *) log_end_msg 1; exit 1 ;;
    esac
	;;
  stop)
    log_daemon_msg "Stopping $DESC" "$NAME"
	start-stop-daemon --oknodo --stop --exec $DAEMON --retry $RETRY
    case "$?" in
        0) log_end_msg 0 ;;
        *) log_end_msg 1; exit 1 ;;
    esac
	;;
  status)
   ls -l /proc/`cat $PID`/exe > /dev/null 2>&1
   if [ $? -eq 0 ]; then
       echo "$DESC is running"
       exit 0
   else
       echo "$DESC is NOT running"
       exit 1
   fi
   ;;
  restart|force-reload)
	$0 stop
	$0 start
	;;
  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac

exit 0

Dateirechte anpassen

chmod 775 DEBIAN/postinst
chmod 775 DEBIAN/postrm
chmod 775 DEBIAN/prerm
chmod 755 etc/init.d/zabbix-proxy

Prüfsummen erstellen

Erstellen Sie Prüfsummen der Dateien, die später in Paket enthalten sein werden.

cd /opt/packaging/zabbix-proxy-sqlite/2.0.6
find usr/ -type f -exec md5sum {} \; >DEBIAN/md5sums

In der Datei DEBIAN/md5sums sollten nur die aktuellen md5-Summen der ausgetauschten Dateien enthalten sein.

cat DEBIAN/md5sums 
dbd09286bb6c57e22f8258c0787d3d7b  usr/share/zabbix-proxy/zabbix_proxy.conf
8f607f4c234a4cb4d69be53e696d31c1  usr/share/man/man8/zabbix_proxy.8
8d4007e970e456b67082b375b336fa62  usr/sbin/zabbix_proxy

Paketbeschreibungen erstellen

Legen Sie nun eine Paketbeschreibung in der Datei DEBIAN/control an:

Package: zabbix-proxy-sqlite
Source: zabbix
Version: 1:2.0.6-1custom
Architecture: i386
Maintainer: My Name<email@example.com>
Installed-Size: 1460
Depends: libc6 (>= 2.7), libopenipmi0, libsnmp15 (>= 5.4.3~dfsg), fping, adduser, lsb-base, libcurl3
Recommends: 
Suggests: logrotate
Conflicts: zabbix-proxy-pgsql, zabbix-proxy-mysql
Section: net
Priority: optional
Description: network monitoring solution - proxy (using sqlite)
 Zabbix is a server/client network monitoring system with many features.

Ersetzen Sie den Wert für "Installed-Size" durch die Ausgabe von "du -s".

root@debian:/opt/packaging/zabbix-proxy-sqlite/2.0.6# du -s
1460

Paket erstellen

cd /opt/packaging/zabbix-proxy-sqlite
dpkg -b 2.0.6/ zabbix-proxy-sqlite_2.0.6_custom_i386.deb
Dies ist ein pragmatischer und kurzer Weg, um ein aktuelles Debian-Paket für den zabbix-proxy zu erstellen.

Dieses Vorgehen entspricht nicht den offiziellen Debian-Standards.

Das erstellte Paket enthält zum Beispiel kein passendes Quell-Paket, so dass man nicht erkennen kann, wie die Binaries kompiliert wurden.