Accepting request 569248 from openSUSE:Factory:Staging:O

- Properly conditionalize the py2 build

- Add patch from Fedora to support natively systemd:
  * net-snmp-5.7.2-systemd.patch
- Drop the check phase as whole 90% of the tests fail it makes
  more sense to run them somewhere localy

- Take systemd service files from fedora to replace sysV scripts
- Also convert the sysconfig files to match fedora ones, they
  get bit more terse but it works seamlessly with systemd

- Format with spec-cleaner
- Drop sle11 support as it fails to build anyway for ages
- Rename python packages to be python-%{name} with obsoletes
  * Use new singlespec macros
  * Add patch converting the py files to python3/2 compat mode
    net-snmp-python3.patch
- Run full autoreconf instead of partial
- Build with threads by building few targets first

OBS-URL: https://build.opensuse.org/request/show/569248
OBS-URL: https://build.opensuse.org/package/show/network:utilities/net-snmp?expand=0&rev=7
This commit is contained in:
Vítězslav Čížek 2018-02-01 14:18:02 +00:00 committed by Git OBS Bridge
parent 314012657c
commit f65cfba6e6
12 changed files with 2369 additions and 536 deletions

1650
net-snmp-5.7.2-systemd.patch Normal file

File diff suppressed because it is too large Load Diff

505
net-snmp-python3.patch Normal file
View File

@ -0,0 +1,505 @@
Index: net-snmp-5.7.3/python/setup.py
===================================================================
--- net-snmp-5.7.3.orig/python/setup.py
+++ net-snmp-5.7.3/python/setup.py
@@ -9,9 +9,9 @@ intree=0
args = sys.argv[:]
for arg in args:
- if string.find(arg,'--basedir=') == 0:
- basedir = string.split(arg,'=')[1]
- sys.argv.remove(arg)
+ if arg.find('--basedir=') == 0:
+ basedir = arg.split('=')[1]
+ sys.argv.remove(arg)
intree=1
if intree:
Index: net-snmp-5.7.3/python/netsnmp/client.py
===================================================================
--- net-snmp-5.7.3.orig/python/netsnmp/client.py
+++ net-snmp-5.7.3/python/netsnmp/client.py
@@ -1,3 +1,4 @@
+from __future__ import print_function
import client_intf
import string
import re
@@ -35,12 +36,12 @@ def _parse_session_args(kargs):
'TheirHostname':'',
'TrustCert':''
}
- keys = kargs.keys()
+ keys = list(kargs.keys())
for key in keys:
- if sessArgs.has_key(key):
+ if key in sessArgs:
sessArgs[key] = kargs[key]
else:
- print >>stderr, "ERROR: unknown key", key
+ print("ERROR: unknown key", key, file=stderr)
return sessArgs
def STR(obj):
@@ -127,7 +128,7 @@ class Session(object):
sess_args = _parse_session_args(args)
- for k,v in sess_args.items():
+ for k,v in list(sess_args.items()):
self.__dict__[k] = v
Index: net-snmp-5.7.3/python/netsnmp/tests/test.py
===================================================================
--- net-snmp-5.7.3.orig/python/netsnmp/tests/test.py
+++ net-snmp-5.7.3/python/netsnmp/tests/test.py
@@ -8,7 +8,7 @@ import time
class BasicTests(unittest.TestCase):
def testFuncs(self):
- print ""
+ print("")
var = netsnmp.Varbind('sysDescr.0')
var = netsnmp.Varbind('sysDescr','0')
var = netsnmp.Varbind(
@@ -19,67 +19,67 @@ class BasicTests(unittest.TestCase):
var = netsnmp.Varbind('.1.3.6.1.2.1.1.1','0')
- print "---v1 GET tests -------------------------------------\n"
+ print("---v1 GET tests -------------------------------------\n")
res = netsnmp.snmpget(var,
Version = 1,
DestHost='localhost',
Community='public')
- print "v1 snmpget result: ", res, "\n"
+ print("v1 snmpget result: ", res, "\n")
- print "v1 get var: ", var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print("v1 get var: ", var.tag, var.iid, "=", var.val, '(',var.type,')')
- print "---v1 GETNEXT tests-------------------------------------\n"
+ print("---v1 GETNEXT tests-------------------------------------\n")
res = netsnmp.snmpgetnext(var,
Version = 1,
DestHost='localhost',
Community='public')
- print "v1 snmpgetnext result: ", res, "\n"
+ print("v1 snmpgetnext result: ", res, "\n")
- print "v1 getnext var: ", var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print("v1 getnext var: ", var.tag, var.iid, "=", var.val, '(',var.type,')')
- print "---v1 SET tests-------------------------------------\n"
+ print("---v1 SET tests-------------------------------------\n")
var = netsnmp.Varbind('sysLocation','0', 'my new location')
res = netsnmp.snmpset(var,
Version = 1,
DestHost='localhost',
Community='public')
- print "v1 snmpset result: ", res, "\n"
+ print("v1 snmpset result: ", res, "\n")
- print "v1 set var: ", var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print("v1 set var: ", var.tag, var.iid, "=", var.val, '(',var.type,')')
- print "---v1 walk tests-------------------------------------\n"
+ print("---v1 walk tests-------------------------------------\n")
vars = netsnmp.VarList(netsnmp.Varbind('system'))
- print "v1 varlist walk in: "
+ print("v1 varlist walk in: ")
for var in vars:
- print " ",var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print(" ",var.tag, var.iid, "=", var.val, '(',var.type,')')
res = netsnmp.snmpwalk(vars,
Version = 1,
DestHost='localhost',
Community='public')
- print "v1 snmpwalk result: ", res, "\n"
+ print("v1 snmpwalk result: ", res, "\n")
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
- print "---v1 walk 2-------------------------------------\n"
+ print("---v1 walk 2-------------------------------------\n")
- print "v1 varbind walk in: "
+ print("v1 varbind walk in: ")
var = netsnmp.Varbind('system')
res = netsnmp.snmpwalk(var,
Version = 1,
DestHost='localhost',
Community='public')
- print "v1 snmpwalk result (should be = orig): ", res, "\n"
+ print("v1 snmpwalk result (should be = orig): ", res, "\n")
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
- print "---v1 multi-varbind test-------------------------------------\n"
+ print("---v1 multi-varbind test-------------------------------------\n")
sess = netsnmp.Session(Version=1,
DestHost='localhost',
Community='public')
@@ -88,16 +88,16 @@ class BasicTests(unittest.TestCase):
netsnmp.Varbind('sysContact', 0),
netsnmp.Varbind('sysLocation', 0))
vals = sess.get(vars)
- print "v1 sess.get result: ", vals, "\n"
+ print("v1 sess.get result: ", vals, "\n")
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
vals = sess.getnext(vars)
- print "v1 sess.getnext result: ", vals, "\n"
+ print("v1 sess.getnext result: ", vals, "\n")
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
netsnmp.Varbind('sysORLastChange'),
@@ -106,28 +106,28 @@ class BasicTests(unittest.TestCase):
netsnmp.Varbind('sysORUpTime'))
vals = sess.getbulk(2, 8, vars)
- print "v1 sess.getbulk result: ", vals, "\n"
+ print("v1 sess.getbulk result: ", vals, "\n")
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
- print "---v1 set2-------------------------------------\n"
+ print("---v1 set2-------------------------------------\n")
vars = netsnmp.VarList(
netsnmp.Varbind('sysLocation', '0', 'my newer location'))
res = sess.set(vars)
- print "v1 sess.set result: ", res, "\n"
+ print("v1 sess.set result: ", res, "\n")
- print "---v1 walk3-------------------------------------\n"
+ print("---v1 walk3-------------------------------------\n")
vars = netsnmp.VarList(netsnmp.Varbind('system'))
vals = sess.walk(vars)
- print "v1 sess.walk result: ", vals, "\n"
+ print("v1 sess.walk result: ", vals, "\n")
for var in vars:
- print " ",var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print(" ",var.tag, var.iid, "=", var.val, '(',var.type,')')
- print "---v2c get-------------------------------------\n"
+ print("---v2c get-------------------------------------\n")
sess = netsnmp.Session(Version=2,
DestHost='localhost',
@@ -140,22 +140,22 @@ class BasicTests(unittest.TestCase):
netsnmp.Varbind('sysContact', 0),
netsnmp.Varbind('sysLocation', 0))
vals = sess.get(vars)
- print "v2 sess.get result: ", vals, "\n"
+ print("v2 sess.get result: ", vals, "\n")
- print "---v2c getnext-------------------------------------\n"
+ print("---v2c getnext-------------------------------------\n")
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
- print "\n"
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
+ print("\n")
vals = sess.getnext(vars)
- print "v2 sess.getnext result: ", vals, "\n"
+ print("v2 sess.getnext result: ", vals, "\n")
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
- print "\n"
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
+ print("\n")
- print "---v2c getbulk-------------------------------------\n"
+ print("---v2c getbulk-------------------------------------\n")
vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
netsnmp.Varbind('sysORLastChange'),
@@ -164,30 +164,30 @@ class BasicTests(unittest.TestCase):
netsnmp.Varbind('sysORUpTime'))
vals = sess.getbulk(2, 8, vars)
- print "v2 sess.getbulk result: ", vals, "\n"
+ print("v2 sess.getbulk result: ", vals, "\n")
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
- print "\n"
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
+ print("\n")
- print "---v2c set-------------------------------------\n"
+ print("---v2c set-------------------------------------\n")
vars = netsnmp.VarList(
netsnmp.Varbind('sysLocation','0','my even newer location'))
res = sess.set(vars)
- print "v2 sess.set result: ", res, "\n"
+ print("v2 sess.set result: ", res, "\n")
- print "---v2c walk-------------------------------------\n"
+ print("---v2c walk-------------------------------------\n")
vars = netsnmp.VarList(netsnmp.Varbind('system'))
vals = sess.walk(vars)
- print "v2 sess.walk result: ", vals, "\n"
+ print("v2 sess.walk result: ", vals, "\n")
for var in vars:
- print " ",var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print(" ",var.tag, var.iid, "=", var.val, '(',var.type,')')
- print "---v3 setup-------------------------------------\n"
+ print("---v3 setup-------------------------------------\n")
sess = netsnmp.Session(Version=3,
DestHost='localhost',
SecLevel='authPriv',
@@ -200,22 +200,22 @@ class BasicTests(unittest.TestCase):
vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime', 0),
netsnmp.Varbind('sysContact', 0),
netsnmp.Varbind('sysLocation', 0))
- print "---v3 get-------------------------------------\n"
+ print("---v3 get-------------------------------------\n")
vals = sess.get(vars)
- print "v3 sess.get result: ", vals, "\n"
+ print("v3 sess.get result: ", vals, "\n")
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
- print "\n"
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
+ print("\n")
- print "---v3 getnext-------------------------------------\n"
+ print("---v3 getnext-------------------------------------\n")
vals = sess.getnext(vars)
- print "v3 sess.getnext result: ", vals, "\n"
+ print("v3 sess.getnext result: ", vals, "\n")
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
- print "\n"
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
+ print("\n")
vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
netsnmp.Varbind('sysORLastChange'),
@@ -224,37 +224,37 @@ class BasicTests(unittest.TestCase):
netsnmp.Varbind('sysORUpTime'))
vals = sess.getbulk(2, 8, vars)
- print "v3 sess.getbulk result: ", vals, "\n"
+ print("v3 sess.getbulk result: ", vals, "\n")
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
- print "\n"
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
+ print("\n")
- print "---v3 set-------------------------------------\n"
+ print("---v3 set-------------------------------------\n")
vars = netsnmp.VarList(
netsnmp.Varbind('sysLocation','0', 'my final destination'))
res = sess.set(vars)
- print "v3 sess.set result: ", res, "\n"
+ print("v3 sess.set result: ", res, "\n")
- print "---v3 walk-------------------------------------\n"
+ print("---v3 walk-------------------------------------\n")
vars = netsnmp.VarList(netsnmp.Varbind('system'))
vals = sess.walk(vars)
- print "v3 sess.walk result: ", vals, "\n"
+ print("v3 sess.walk result: ", vals, "\n")
for var in vars:
- print " ",var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print(" ",var.tag, var.iid, "=", var.val, '(',var.type,')')
class SetTests(unittest.TestCase):
def testFuncs(self):
- print "\n-------------- SET Test Start ----------------------------\n"
+ print("\n-------------- SET Test Start ----------------------------\n")
var = netsnmp.Varbind('sysUpTime','0')
res = netsnmp.snmpget(var, Version = 1, DestHost='localhost',
Community='public')
- print "uptime = ", res[0]
+ print("uptime = ", res[0])
var = netsnmp.Varbind('versionRestartAgent','0', 1)
@@ -264,19 +264,19 @@ class SetTests(unittest.TestCase):
var = netsnmp.Varbind('sysUpTime','0')
res = netsnmp.snmpget(var, Version = 1, DestHost='localhost',
Community='public')
- print "uptime = ", res[0]
+ print("uptime = ", res[0])
var = netsnmp.Varbind('nsCacheEntry')
res = netsnmp.snmpgetnext(var, Version = 1, DestHost='localhost',
Community='public')
- print "var = ", var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print("var = ", var.tag, var.iid, "=", var.val, '(',var.type,')')
var.val = 65
res = netsnmp.snmpset(var, Version = 1, DestHost='localhost',
Community='public')
res = netsnmp.snmpget(var, Version = 1, DestHost='localhost',
Community='public')
- print "var = ", var.tag, var.iid, "=", var.val, '(',var.type,')'
+ print("var = ", var.tag, var.iid, "=", var.val, '(',var.type,')')
sess = netsnmp.Session(Version = 1, DestHost='localhost',
Community='public')
@@ -286,7 +286,7 @@ class SetTests(unittest.TestCase):
netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116','', 4))
res = sess.set(vars)
- print "res = ", res
+ print("res = ", res)
vars = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
netsnmp.Varbind('snmpTargetAddrTAddress'),
@@ -295,14 +295,14 @@ class SetTests(unittest.TestCase):
res = sess.getnext(vars)
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
- print "\n"
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
+ print("\n")
vars = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116','', 6))
res = sess.set(vars)
- print "res = ", res
+ print("res = ", res)
vars = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
netsnmp.Varbind('snmpTargetAddrTAddress'),
@@ -311,10 +311,10 @@ class SetTests(unittest.TestCase):
res = sess.getnext(vars)
for var in vars:
- print var.tag, var.iid, "=", var.val, '(',var.type,')'
- print "\n"
+ print(var.tag, var.iid, "=", var.val, '(',var.type,')')
+ print("\n")
- print "\n-------------- SET Test End ----------------------------\n"
+ print("\n-------------- SET Test End ----------------------------\n")
if __name__=='__main__':
Index: net-snmp-5.7.3/python/netsnmp/client_intf.c
===================================================================
--- net-snmp-5.7.3.orig/python/netsnmp/client_intf.c
+++ net-snmp-5.7.3/python/netsnmp/client_intf.c
@@ -979,7 +979,11 @@ py_netsnmp_attr_string(PyObject *obj, ch
PyObject *attr = PyObject_GetAttrString(obj, attr_name);
if (attr) {
int retval;
+#if PY_MAJOR_VERSION >= 3
+ retval = PyBytes_AsStringAndSize(attr, val, len);
+#else
retval = PyString_AsStringAndSize(attr, val, len);
+#endif
Py_DECREF(attr);
return retval;
}
@@ -996,7 +1000,11 @@ py_netsnmp_attr_long(PyObject *obj, char
if (obj && attr_name && PyObject_HasAttrString(obj, attr_name)) {
PyObject *attr = PyObject_GetAttrString(obj, attr_name);
if (attr) {
+#if PY_MAJOR_VERSION >= 3
+ val = PyLong_AsLong(attr);
+#else
val = PyInt_AsLong(attr);
+#endif
Py_DECREF(attr);
}
}
@@ -1079,11 +1087,19 @@ __py_netsnmp_update_session_errors(PyObj
py_netsnmp_attr_set_string(session, "ErrorStr", err_str, STRLEN(err_str));
+#if PY_MAJOR_VERSION >= 3
+ tmp_for_conversion = PyLong_FromLong(err_num);
+#else
tmp_for_conversion = PyInt_FromLong(err_num);
+#endif
PyObject_SetAttrString(session, "ErrorNum", tmp_for_conversion);
Py_DECREF(tmp_for_conversion);
+#if PY_MAJOR_VERSION >= 3
+ tmp_for_conversion = PyLong_FromLong(err_ind);
+#else
tmp_for_conversion = PyInt_FromLong(err_ind);
+#endif
PyObject_SetAttrString(session, "ErrorInd", tmp_for_conversion);
Py_DECREF(tmp_for_conversion);
}
@@ -2607,13 +2623,28 @@ static PyMethodDef ClientMethods[] = {
{NULL, NULL, 0, NULL} /* Sentinel */
};
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef ClientModuleDef = {
+ PyModuleDef_HEAD_INIT,
+ "client_intf",
+ NULL,
+ -1,
+ ClientMethods,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+PyMODINIT_FUNC
+PyInit_client_intf(void)
+{
+ return PyModule_Create(&ClientModuleDef);
+}
+#else
PyMODINIT_FUNC
initclient_intf(void)
{
(void) Py_InitModule("client_intf", ClientMethods);
}
-
-
-
-
-
+#endif

1
net-snmp-tmpfs.conf Normal file
View File

@ -0,0 +1 @@
d /var/run/net-snmp 0755 root root

View File

@ -1,3 +1,35 @@
-------------------------------------------------------------------
Wed Jan 24 14:07:16 UTC 2018 - tchvatal@suse.com
- Properly conditionalize the py2 build
-------------------------------------------------------------------
Wed Jan 24 13:09:36 UTC 2018 - tchvatal@suse.com
- Add patch from Fedora to support natively systemd:
* net-snmp-5.7.2-systemd.patch
- Drop the check phase as whole 90% of the tests fail it makes
more sense to run them somewhere localy
-------------------------------------------------------------------
Mon Jan 22 12:24:33 UTC 2018 - tchvatal@suse.com
- Take systemd service files from fedora to replace sysV scripts
- Also convert the sysconfig files to match fedora ones, they
get bit more terse but it works seamlessly with systemd
-------------------------------------------------------------------
Fri Jan 19 17:36:38 UTC 2018 - tchvatal@suse.com
- Format with spec-cleaner
- Drop sle11 support as it fails to build anyway for ages
- Rename python packages to be python-%{name} with obsoletes
* Use new singlespec macros
* Add patch converting the py files to python3/2 compat mode
net-snmp-python3.patch
- Run full autoreconf instead of partial
- Build with threads by building few targets first
-------------------------------------------------------------------
Mon Dec 11 17:14:43 UTC 2017 - dimstar@opensuse.org

View File

@ -1,7 +1,7 @@
#
# spec file for package net-snmp
#
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -16,58 +16,38 @@
#
#Compat macro for new _fillupdir macro introduced in Nov 2017
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define netsnmp_logfile %{_localstatedir}/log/net-snmpd.log
%define netsnmp_agentx_socket_dir_fhs %{_rundir}/agentx
%define netsnmp_agentx_socket_dir_rfc %{_localstatedir}/agentx
# Compat macro for new _fillupdir macro introduced in Nov 2017
%if ! %{defined _fillupdir}
%define _fillupdir /var/adm/fillup-templates
%define _fillupdir %{_localstatedir}/adm/fillup-templates
%endif
# compatibility for SLES11 <=SP1
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%define pkg_name net-snmp
%ifnarch s390 s390x
%define netsnmp_with_sensors 1
%endif
%define netsnmp_check 1
%define netsnmp_logfile /var/log/net-snmpd.log
%if ! %{defined _rundir}
%define _rundir %{_localstatedir}/run
%endif
%define netsnmp_agentx_socket_dir_fhs %{_rundir}/agentx
%define netsnmp_agentx_socket_dir_rfc /var/agentx
%define libname libsnmp30
%bcond_without python2
Name: net-snmp
Version: 5.7.3
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: openssl-devel
BuildRequires: procps
BuildRequires: python-devel
BuildRequires: python-setuptools
BuildRequires: rpm-devel
BuildRequires: tcpd-devel
%if 0%{?netsnmp_with_sensors}
BuildRequires: libsensors4-devel
%endif
Requires: logrotate
Requires: perl-SNMP = %{version}
Requires: perl-TermReadKey
PreReq: %insserv_prereq %fillup_prereq /sbin/chkconfig
Summary: SNMP Daemon
License: BSD-3-Clause AND MIT
Group: Productivity/Networking/Other
Url: http://sourceforge.net/projects/net-snmp
#Source: http://sourceforge.net/projects/net-snmp/files/net-snmp/%{version}/%{pkg_name}-%{version}.tar.gz
Source: %{pkg_name}-%{version}.tar.gz
Source1: rc.snmpd
Source: http://sourceforge.net/projects/net-snmp/files/net-snmp/%{version}/%{name}-%{version}.tar.gz
Source1: snmpd.service
Source2: snmpd.conf
Source3: README.SUSE
Source4: rc.snmptrapd
Source4: snmptrapd.service
Source5: net-snmp.logrotate
Source6: test_installed
Source7: net-snmp.sysconfig
Source8: net-snmp-rpmlintrc
Source9: baselibs.conf
Source10: snmpd.sysconfig
Source11: snmptrapd.sysconfig
Source20: net-snmp-tmpfs.conf
Source98: net-snmp-rpmlintrc
Source99: baselibs.conf
Patch1: net-snmp-5.7.3-socket-path.patch
Patch2: net-snmp-5.7.3-testing-empty-arptable.patch
Patch3: net-snmp-5.7.3-pie.patch
@ -82,10 +62,27 @@ Patch11: net-snmp-5.7.3-Remove-U64-typedef.patch
Patch12: net-snmp-5.7.3-Fix-Makefile.PL.patch
Patch13: net-snmp-5.7.3-build-with-openssl-1.1.patch
Patch14: net-snmp-5.7.3-modern-rpm-api.patch
#
Summary: SNMP Daemon
License: BSD-3-Clause and MIT
Group: Productivity/Networking/Other
Patch15: net-snmp-python3.patch
Patch16: net-snmp-5.7.2-systemd.patch
BuildRequires: %{python_module devel}
BuildRequires: %{python_module setuptools}
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: libtool
BuildRequires: openssl-devel
BuildRequires: procps
BuildRequires: python-rpm-macros
BuildRequires: rpm-devel
BuildRequires: systemd-rpm-macros
BuildRequires: tcpd-devel
Requires: logrotate
Requires: perl-SNMP = %{version}
Requires: perl-TermReadKey
Requires(post): %fillup_prereq
%if 0%{?netsnmp_with_sensors}
BuildRequires: libsensors4-devel
%endif
%{?systemd_requires}
%description
Net-SNMP is a suite of applications used to implement SNMP v1, SNMP v2c
@ -103,18 +100,14 @@ This package was originally based on the CMU 2.1.2.1 snmp code. It was
renamed from cmu-snmp to ucd-snmp in 1995 and later renamed from ucd-snmp
to net-snmp in November 2000.
%define library_name libsnmp30
%package -n libsnmp30
%package -n %{libname}
Summary: Shared Libraries from net-snmp
License: BSD-3-Clause AND MIT
Group: Productivity/Networking/Other
Requires: perl-base = %{perl_version}
Requires: snmp-mibs = %{version}
#
Summary: Shared Libraries from net-snmp
License: BSD-3-Clause and MIT
Group: Productivity/Networking/Other
%description -n libsnmp30
%description -n %{libname}
Net-SNMP is a suite of applications used to implement SNMP v1, SNMP v2c
and SNMP v3 using both IPv4 and IPv6. The suite includes:
@ -129,7 +122,10 @@ and SNMP v3 using both IPv4 and IPv6. The suite includes:
This package holds the shared libraries from the net-snmp package.
%package devel
Requires: %{library_name} = %{version}
Summary: Development files from net-snmp
License: BSD-3-Clause AND MIT
Group: Development/Libraries/C and C++
Requires: %{libname} = %{version}
# for mib2c
Requires: perl
Requires: perl-SNMP = %{version}
@ -140,10 +136,6 @@ Requires: pkgconfig(libssl)
%if 0%{?netsnmp_with_sensors}
Requires: libsensors4-devel
%endif
#
Summary: Development files from net-snmp
License: BSD-3-Clause and MIT
Group: Development/Libraries/C and C++
%description devel
Net-SNMP is a suite of applications used to implement SNMP v1, SNMP v2c
@ -160,11 +152,9 @@ and SNMP v3 using both IPv4 and IPv6. The suite includes:
This package holds the development headers, libraries and API documentation
from the net-snmp package.
%package -n snmp-mibs
#
Summary: MIB files from net-snmp
License: BSD-3-Clause and MIT
License: BSD-3-Clause AND MIT
Group: Productivity/Networking/Other
%description -n snmp-mibs
@ -181,46 +171,44 @@ and SNMP v3 using both IPv4 and IPv6. The suite includes:
This package holds the MIB files from the net-snmp package.
%package -n perl-SNMP
Requires: %{pkg_name} = %{version}
Requires: perl-base = %{perl_version}
#
Summary: Perl5 SNMP Extension Module
License: GPL-2.0+
Group: Development/Libraries/Perl
Requires: %{name} = %{version}
Requires: perl-base = %{perl_version}
%description -n perl-SNMP
The Perl5 'SNMP' Extension Module v3.1.0 for the UCD SNMPv3 library.
%package python
%package -n python2-%{name}
Summary: The Python 'netsnmp' module for the Net-SNMP
License: BSD-3-Clause and MIT
License: BSD-3-Clause AND MIT
Group: Development/Libraries/Python
Requires: %{libname} = %{version}
Provides: %{name}-python = %{version}
Obsoletes: %{name}-python < %{version}
Provides: python-%{name} = %{version}
%description python
%description -n python2-%{name}
The 'netsnmp' module provides a full featured, tri-lingual SNMP (SNMPv3,
SNMPv2c, SNMPv1) client API. The 'netsnmp' module internals rely on the
Net-SNMP toolkit library.
%package -n python3-%{name}
Summary: The Python 3 'netsnmp' module for the Net-SNMP
License: BSD-3-Clause AND MIT
Group: Development/Libraries/Python
Requires: %{libname} = %{version}
%description -n python3-%{name}
The 'netsnmp' module provides a full featured, tri-lingual SNMP (SNMPv3,
SNMPv2c, SNMPv1) client API. The 'netsnmp' module internals rely on the
Net-SNMP toolkit library.
%prep
%setup -q -n %{pkg_name}-%{version}
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%setup -q
%autopatch -p1
%build
MIBS="misc/ipfwacc ucd-snmp/diskio etherlike-mib rmon-mib velocity smux \
@ -232,14 +220,16 @@ MIBS="misc/ipfwacc ucd-snmp/diskio etherlike-mib rmon-mib velocity smux \
MIBS="$MIBS ucd-snmp/lmsensorsMib"
%endif
autoreconf
autoreconf -fvi
%configure \
--with-sys-contact="root@localhost" \
--with-sys-location="unknown" \
--with-mib-modules="$MIBS" \
--with-cflags="%{optflags} -fstack-protector-all" \
--with-persistent-directory="/var/lib/net-snmp" \
--with-cflags="%{optflags}" \
--with-ldflags="-Wl,-z,relro -Wl,-z,now" \
--with-persistent-directory="%{_localstatedir}/lib/net-snmp" \
--with-agentx-socket="%{netsnmp_agentx_socket_dir_fhs}/master" \
--with-temp-file-pattern=/var/run/net-snmp/snmp-tmp-XXXXXX \
--with-logfile="%{netsnmp_logfile}" \
--with-libwrap="%{_prefix}" \
--with-perl-modules="INSTALLDIRS=vendor" \
@ -252,84 +242,78 @@ autoreconf
--enable-ipv6 \
--enable-ucd-snmp-compatibility \
--with-security-modules=tsm \
--with-transports=TLSTCP,DTLSUDP
--with-transports=TLSTCP,DTLSUDP \
--with-systemd
# Parallel building is disabled because dependencies between the Perl
# module and libnetsnmp are not correctly defined.
make #%{?_smp_mflags}
# Parallel build deps not properly stated
make -j1
pushd python
%{__python} setup.py --basedir="../" build
%python_exec setup.py build --basedir="../"
popd
%check
%if 0%{?netsnmp_check}
%ifnarch %arm
ulimit -c unlimited
%{__make} test ||:
%{__make} test TESTOPTS='-P tcp' ||:
%endif
%{__make} perlmodules ||:
LD_RUN_PATH="$PWD/snmplib/.libs" LD_LIBRARY_PATH="${PWD}/snmplib/.libs:${PWD}/agent/.libs:${PWD}/agent/helpers/.libs" %{__make} perltest ||:
%endif
%install
%makeinstall INSTALL_PREFIX=%{buildroot}
%{__install} -Dd %{buildroot}/var/log %{buildroot}/var/lib/net-snmp %{buildroot}/usr/lib/net-snmp/agents %{buildroot}%{netsnmp_agentx_socket_dir_fhs}
%{__install} -D -m 0755 %{SOURCE1} %{buildroot}/etc/init.d/snmpd
%{__install} -D -m 0755 %{SOURCE4} %{buildroot}/etc/init.d/snmptrapd
%{__install} -D -m 0600 %{SOURCE2} %{buildroot}/etc/snmp/snmpd.conf
%{__install} -m 0644 %{SOURCE3} .
%{__install} -m 0644 %{SOURCE4} .
%{__install} -D -m 0644 %{SOURCE5} %{buildroot}/etc/logrotate.d/net-snmp
%{__install} -m 0744 %{SOURCE6} testing/
%{__ln_s} -f /etc/init.d/snmpd %{buildroot}%{_sbindir}/rcsnmpd
%{__ln_s} -f /etc/init.d/snmptrapd %{buildroot}%{_sbindir}/rcsnmptrapd
%{__install} -m 0644 /dev/null %{buildroot}%{netsnmp_logfile}
%make_install INSTALL_PREFIX=%{buildroot}
install -Dd %{buildroot}%{_localstatedir}/log %{buildroot}%{_localstatedir}/lib/net-snmp %{buildroot}%{_libexecdir}/net-snmp/agents %{buildroot}%{netsnmp_agentx_socket_dir_fhs}
install -D -m 0755 %{SOURCE1} %{buildroot}%{_unitdir}/snmpd.service
install -D -m 0755 %{SOURCE4} %{buildroot}%{_unitdir}/snmptrapd.service
install -D -m 0600 %{SOURCE2} %{buildroot}%{_sysconfdir}/snmp/snmpd.conf
install -m 0644 %{SOURCE3} .
install -m 0644 %{SOURCE4} .
install -D -m 0644 %{SOURCE5} %{buildroot}%{_sysconfdir}/logrotate.d/net-snmp
install -m 0744 %{SOURCE6} testing/
ln -sf service %{buildroot}%{_sbindir}/rcsnmpd
ln -sf service %{buildroot}%{_sbindir}/rcsnmptrapd
install -m 0644 /dev/null %{buildroot}%{netsnmp_logfile}
pushd perl
%perl_make_install
%perl_process_packlist
%{__rm} -f %{buildroot}/%{perl_vendorarch}/Bundle/Makefile.subs.pl
rm -f %{buildroot}/%{perl_vendorarch}/Bundle/Makefile.subs.pl
popd
pushd python
%{__python} setup.py install --prefix=%{_prefix} --root=%{buildroot}
%python_install
popd
%{__grep} -a -v "^#define PACKAGE" %{buildroot}%{_includedir}/net-snmp/net-snmp-config.h > \
grep -a -v "^#define PACKAGE" %{buildroot}%{_includedir}/net-snmp/net-snmp-config.h > \
%{buildroot}%{_includedir}/net-snmp/net-snmp-config.h.new
%{__mv} %{buildroot}%{_includedir}/net-snmp/net-snmp-config.h{.new,}
%{__install} -D -m 0644 %{S:7} \
%{buildroot}%{_fillupdir}/sysconfig.%{pkg_name}
mv %{buildroot}%{_includedir}/net-snmp/net-snmp-config.h{.new,}
install -D -m 0644 %{SOURCE10} %{buildroot}%{_fillupdir}/sysconfig.snmpd
install -D -m 0644 %{SOURCE11} %{buildroot}%{_fillupdir}/sysconfig.snmptrapd
# tmpfiles
install -m 755 -d $RPM_BUILD_ROOT/%{_tmpfilesdir}
install -m 644 %SOURCE20 $RPM_BUILD_ROOT/%{_tmpfilesdir}/net-snmp.conf
#
%{__ln_s} -f %{netsnmp_agentx_socket_dir_fhs} %{buildroot}%{netsnmp_agentx_socket_dir_rfc}
ln -s -f %{netsnmp_agentx_socket_dir_fhs} %{buildroot}%{netsnmp_agentx_socket_dir_rfc}
#
rm -f "%buildroot/%_libdir"/*.la
find %{buildroot} -type f -name "*.la" -delete -print
%preun
%stop_on_removal snmpd
%stop_on_removal snmptrapd
%pre
%service_add_pre snmpd.service snmptrapd.service
%post
/sbin/chkconfig -c snmpd 2> /dev/null && FIRST_ARG=2
%{fillup_only}
%fillup_only snmpd
%fillup_only snmptrapd
%tmpfiles_create %{_tmpfilesdir}/net-snmp.conf
%service_add_post snmpd.service snmptrapd.service
%preun
%service_del_preun snmpd.service snmptrapd.service
%postun
%restart_on_update snmpd
%restart_on_update snmptrapd
%{insserv_cleanup}
%service_del_postun snmpd.service snmptrapd.service
%post -n %{library_name} -p /sbin/ldconfig
%postun -n %{library_name} -p /sbin/ldconfig
%post -n %{libname} -p /sbin/ldconfig
%postun -n %{libname} -p /sbin/ldconfig
%files
%defattr(-,root,root)
%doc AGENT.txt COPYING EXAMPLE.conf EXAMPLE.conf.def
%doc FAQ NEWS TODO CHANGES
%doc README README.agent-mibs README.agentx README.krb5 README.snmpv3 README.thread
%dir /etc/snmp
%config(noreplace) /etc/snmp/snmpd.conf
%config /etc/init.d/snmpd
%config /etc/init.d/snmptrapd
%dir %{_sysconfdir}/snmp
%config(noreplace) %{_sysconfdir}/snmp/snmpd.conf
%{_unitdir}/snmpd.service
%{_unitdir}/snmptrapd.service
%{_tmpfilesdir}/net-snmp.conf
%{_bindir}/encode_keychange
%{_bindir}/fixproc
%{_bindir}/ipf-mod.pl
@ -359,32 +343,31 @@ rm -f "%buildroot/%_libdir"/*.la
%{_bindir}/net-snmp-cert
%{_bindir}/agentxtrap
%{_bindir}/snmp-bridge-mib
%dir %{_prefix}/lib/net-snmp
%dir %{_prefix}/lib/net-snmp/agents
%dir %{_libexecdir}/net-snmp
%dir %{_libexecdir}/net-snmp/agents
%{_mandir}/man[158]/*
%{_sbindir}/*
/var/lib/net-snmp
%{_localstatedir}/lib/net-snmp
%dir %ghost %attr(700,root,root) %{netsnmp_agentx_socket_dir_fhs}
%ghost %{netsnmp_logfile}
%config(noreplace) /etc/logrotate.d/net-snmp
%{_fillupdir}/sysconfig.%{pkg_name}
%config(noreplace) %{_sysconfdir}/logrotate.d/net-snmp
%{_fillupdir}/sysconfig.snmpd
%{_fillupdir}/sysconfig.snmptrapd
%{netsnmp_agentx_socket_dir_rfc}
%{_datadir}/snmp/snmpconf-data/
%{_datadir}/snmp/snmp_perl.pl
%{_datadir}/snmp/snmp_perl_trapd.pl
%files -n snmp-mibs
%defattr(-,root,root)
%dir %{_datadir}/snmp
%{_datadir}/snmp/mibs/
%files -n %{library_name}
%defattr(-,root,root)
%files -n %{libname}
%license COPYING
%{_libdir}/libsnmp*.so.*
%{_libdir}/libnetsnmp*.so.*
%files devel
%defattr(-,root,root)
%doc ChangeLog PORTING
%{_mandir}/man3/*
%{_includedir}/ucd-snmp
@ -396,20 +379,21 @@ rm -f "%buildroot/%_libdir"/*.la
%{_datadir}/snmp/mib2c*
%files -n perl-SNMP
%defattr(-,root,root)
%{perl_vendorarch}/auto/SNMP
%{perl_vendorarch}/auto/NetSNMP
%{perl_vendorarch}/auto/Bundle
%{perl_vendorarch}/SNMP.pm
%{perl_vendorarch}/NetSNMP
%{_bindir}/tkmib
%if 0%{?suse_version} <= 1130
/var/adm/perl-modules/net-snmp
%if %{with python2}
%files -n python2-%{name}
%doc README
%{python2_sitearch}/*
%endif
%files python
%defattr(-,root,root)
%files -n python3-%{name}
%doc README
%{python_sitearch}/*
%{python3_sitearch}/*
%changelog

View File

@ -1,60 +0,0 @@
## Path: System/Net-SNMP
## Description: Log level of the snmp server.
## Type: string(!,a,c,e,w,n,i,d,0,1,2,3,4,5,6,7)
## Default: n
#
# Defines the log level for snmpd and snmptrapd.
#
# The default is "n" (5, LOG_NOTICE)
#
SNMPD_LOGLEVEL="n"
## Path: System/Net-SNMP
## Description: En-/Disables SNMP SMUX support.
## Type: yesno
## Default: yes
#
# Setting this to "no" prevents snmpd from binding to TCP port 199.
#
# The default is "yes" to provide backward compatibility.
#
SNMPD_USE_SMUX="yes"
## Path: System/Net-SNMP
## Description: Connection logging.
## Type: yesno
## Default: yes
#
# If this setting is "yes" and $SNMPD_LOGLEVEL is set to "i" (LOG_INFO)
# or "d" (LOG_DEBUG), snmpd will log all successful connections.
#
# Setting it to "no" will prevent this kind of log regardless of the
# configured log level.
#
# The default is "yes" to provide backward compatibility.
#
SNMPD_LOG_SUCCESSFUL_CONNECTIONS="yes"
## Path: System/Net-SNMP
## Description: Log Destination
## Type: string(F,S)
## Default: S
#
# Defines the log destination for snmpd and snmptrapd.
#
# By setting it to "F", snmpd will write log messages into '/var/log/net-snmpd.log'.
#
# The default is "S" to log messages through the syslog service.
#
SNMPD_LOGDEST="S"
## Path: System/Net-SNMP
## Description: Listening IP addresses
## Type: string
## Default: "" (empty - listen on all interfaces)
#
# Defines the IP address(es) that snmpd and snmptrapd binds to.
# If no address is defined the daemon will listen on all interfaces.
#
SNMPD_LISTEN=""

194
rc.snmpd
View File

@ -1,194 +0,0 @@
#! /bin/sh
# Copyright (c) 1996-2011 SuSE GmbH Nuernberg, Germany. All rights reserved.
#
# Author: Christopher Mahmood, Remo Behn
#
# /etc/init.d/snmpd
#
### BEGIN INIT INFO
# Provides: net-snmp snmp snmpd
# Required-Start: $remote_fs
# Should-Start: $syslog $network
# Required-Stop: $remote_fs
# Should-Stop: $syslog $network
# Default-Start: 2 3 5
# Default-Stop: 0 1 6
# Description: Net-SNMP agent
# Short-Description: Net-SNMP agent
### END INIT INFO
SNMPD=/usr/sbin/snmpd
AGENTDIR=/usr/lib/net-snmp/agents
SNMPDCONF=/etc/snmp/snmpd.conf
SNMPD_PID=/var/run/snmpd.pid
test -x $SNMPD || exit 5
# Check for existence of needed config file and read it
SNMPD_CONFIG=/etc/sysconfig/net-snmp
test -r $SNMPD_CONFIG || { echo "$SNMPD_CONFIG not existing";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }
# Read config
. $SNMPD_CONFIG
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num><num>
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
. /etc/rc.status
# First reset status of this service
rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.
# check whether to enable agentx support and get list of installed
# agents
get_agents()
{
agents=
agentargs=''
for agent in $AGENTDIR/*; do
test -x $agent || continue
agents="$agents $agent"
agentargs="-x /var/run/agentx/master"
done
}
case "$1" in
start)
echo -n "Starting snmpd"
#
# log destination "F" for file.
# do not even try to start if the log file is (2GB-1MB) big.
# the snmpd doesnt handle LFS properly
#
if [ ${SNMPD_LOGDEST:-F} = "F" ]; then
SNMPD_LOGTARGET="${SNMPD_LOGTARGET:-/var/log/net-snmpd.log}"
if [ -e "$SNMPD_LOGTARGET" ] ; then
SNMPD_SIZE_LOGFILE="$(stat -c "%s" $SNMPD_LOGTARGET)"
SNMPD_SIZE_MAX="1073741824"
if [ $SNMPD_SIZE_LOGFILE -gt $SNMPD_SIZE_MAX ] ; then
echo -e "\n\"$SNMPD_LOGTARGET\" is too large. Running 'logrotate' for net-snmp." >&2
/usr/sbin/logrotate /etc/logrotate.d/net-snmp
fi
fi
fi
#
# log destination "S" for syslog.
# define syslog facility to 'd' for LOG_DAEMON.
#
if [ ${SNMPD_LOGDEST:-F} = "S" ]; then
SNMPD_LOGTARGET="d"
fi
get_agents
# Don't add -c /etc/snmp/snmpd.conf, as it is loaded by default.
if [ $SNMPDCONF = "/etc/snmp/snmpd.conf" ]; then
SNMPDCONF=""
else
SNMPDCONF="-c $SNMPDCONF"
fi
case "${SNMPD_USE_SMUX:-yes}" in
[Nn][Oo])
SNMPDNOSMUX="-I -smux"
;;
esac
case "${SNMPD_LOG_SUCCESSFUL_CONNECTIONS:-yes}" in
[Nn][Oo])
SNMPDNOTCPWRAPPERLOG="--dontLogTCPWrappersConnects"
;;
esac
# /var/run can now be mounted as tmpfs
if [ ! -d /var/run/agentx ]; then
mkdir -m 0700 /var/run/agentx
fi
startproc $SNMPD $SNMPDCONF -r -A -L${SNMPD_LOGDEST:-F} ${SNMPD_LOGLEVEL:-n} $SNMPD_LOGTARGET -p $SNMPD_PID $agentargs $SNMPDNOSMUX $SNMPDNOTCPWRAPPERLOG $SNMPD_LISTEN
rc_status -v
rc_reset
# start all agents
if test -n "$agents"; then
usleep 300000
for agent in $agents; do
echo -en "\tStarting `basename $agent`"
startproc -t1 $agent
rc_status -v ; rc_reset
done
fi
;;
stop)
echo -n "Shutting down snmpd:"
killproc -TERM $SNMPD
rc_status -v ; rc_reset
# we also need to make sure all agents die
get_agents
if test -n "$agents"; then
for agent in $AGENTDIR/*; do
test -x $agent || continue
echo -ne "\tShutting down `basename $agent`:"
killproc $agent
rc_status -v ; rc_reset
done
fi
;;
try-restart)
$0 status >/dev/null && $0 restart
rc_status
;;
restart)
$0 stop
$0 start
rc_status
;;
force-reload)
echo -n "Reload service snmpd:"
killproc -HUP $SNMPD
rc_status -v
;;
reload)
echo -n "Reload service snmpd:"
killproc -HUP $SNMPD
rc_status -v
;;
status)
echo -n "Checking for service snmpd:"
checkproc $SNMPD
rc_status -v
get_agents
if test -n "$agents"; then
echo -e "Checking for agents:"
for agent in $agents; do
echo -en "\t`basename $agent`"
checkproc $agent
rc_status -v
done
fi
;;
*)
echo "Usage: $0 {start|stop|try-restart|restart|force-reload|reload|status}"
exit 1
;;
esac
rc_exit

View File

@ -1,129 +0,0 @@
#! /bin/sh
# Copyright (c) 1996-2011 SuSE GmbH Nuernberg, Germany. All rights reserved.
#
# Author: Christopher Mahmood
#
# /etc/init.d/snmptrapd
#
### BEGIN INIT INFO
# Provides: snmptrapd
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 5
# Default-Stop: 0 1 6
# Description: Receive and log SNMP trap messages
# Short-Description: Receive and log SNMP trap messages
### END INIT INFO
SNMPTRAPD=/usr/sbin/snmptrapd
SNMPTRAPD_CONF="/etc/snmp/snmptrapd.conf"
SNMPTRAPD_LOGTARGET="/var/log/net-snmpd.log"
SNMPTRAPD_PID="/var/run/snmptrapd.pid"
test -x $SNMPTRAPD || { echo "$SNMPTRAPD not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
# Check for existence of needed config file and read it
SNMPD_CONFIG=/etc/sysconfig/net-snmp
test -r $SNMPD_CONFIG || { echo "$SNMPD_CONFIG doesn't exist.";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }
# Read config
. $SNMPD_CONFIG
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num><num>
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
. /etc/rc.status
# First reset status of this service
rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.
if [ $SNMPTRAPD_CONF = "/etc/snmp/snmptrapd.conf" ]; then
SNMPTRAPD_CONF=""
else
SNMPTRAPD_CONF="-c $SNMPTRAPD_CONF"
fi
#
# If log destination is set to "F" define a log file.
#
if [ ${SNMPD_LOGDEST:-S} = "F" ]; then
SNMPTRAPD_LOGTARGET="${SNMPTRAPD_LOGTARGET:-/var/log/net-snmpd.log}"
fi
#
# If log destionation is set to "S" use syslog LOG_DAEMON facility.
#
if [ ${SNMPD_LOGDEST:-S} = "S" ]; then
SNMPTRAPD_LOGTARGET="d"
fi
case "$1" in
start)
echo -n "Starting snmptrapd: "
startproc $SNMPTRAPD $SNMPTRAPD_CONF -A -L${SNMPD_LOGDEST:-S} ${SNMPD_LOGLEVEL:-n} $SNMPTRAPD_LOGTARGET -p $SNMPTRAPD_PID $SNMPD_LISTEN
rc_status -v
;;
stop)
echo -n "Shutting down snmptrapd: "
killproc -TERM $SNMPTRAPD
if [ -f "$SNMPTAPDD_LOGFILE" ]; then
DATE=$(date +"%Y%m%d")
/bin/mv "$SNMPTAPDD_LOGFILE" "$SNMPTAPDD_LOGFILE-$DATE"
test -x /usr/bin/bzip2 && /usr/bin/bzip2 "$SNMPTAPDD_LOGFILE-$DATE"
fi
rc_status -v
;;
try-restart)
$0 status >/dev/null && $0 restart
rc_status
;;
restart)
$0 stop
$0 start
rc_status
;;
force-reload)
echo -n "Reload service snmptrapd: "
killproc -HUP $SNMPTRAPD
rc_status -v
;;
reload)
echo -n "Reload service snmptrapd: "
killproc -HUP $SNMPTRAPD
rc_status -v
;;
status)
echo -n "Checking for service snmptrapd: "
checkproc $SNMPTRAPD
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|try-restart|restart|force-reload|reload|status}"
exit 1
;;
esac
rc_exit

13
snmpd.service Normal file
View File

@ -0,0 +1,13 @@
[Unit]
Description=Simple Network Management Protocol (SNMP) Daemon.
After=syslog.target network.target
[Service]
Type=notify
Environment=OPTIONS="-LS0-6d"
EnvironmentFile=-/etc/sysconfig/snmpd
ExecStart=/usr/sbin/snmpd $OPTIONS -f
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

9
snmpd.sysconfig Normal file
View File

@ -0,0 +1,9 @@
## Path: System/Net-SNMP
## Description: snmpd command line options
## Type: string
## Default: ""
#
# '-f' is implicitly added by snmptrapd systemd unit file
# OPTIONS="-L60-6d"
#
OPTIONS=""

13
snmptrapd.service Normal file
View File

@ -0,0 +1,13 @@
[Unit]
Description=Simple Network Management Protocol (SNMP) Trap Daemon.
After=syslog.target network.target
[Service]
Type=notify
Environment=OPTIONS="-Lsd"
EnvironmentFile=-/etc/sysconfig/snmptrapd
ExecStart=/usr/sbin/snmptrapd $OPTIONS -f
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

9
snmptrapd.sysconfig Normal file
View File

@ -0,0 +1,9 @@
## Path: System/Net-SNMP
## Description: snmptrapd command line options
## Type: string
## Default: ""
#
# '-f' is implicitly added by snmptrapd systemd unit file
# OPTIONS="-Lsd"
#
OPTIONS=""