diff --git a/component/ethtool/buildout.cfg b/component/ethtool/buildout.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..a0d8cd7f0d1ca7478e5b9c634c61ad4f6467329d
--- /dev/null
+++ b/component/ethtool/buildout.cfg
@@ -0,0 +1,9 @@
+# ethtool - query or control network driver and hardware settings
+# https://www.kernel.org/pub/software/network/ethtool
+[buildout]
+parts   = ethtool
+
+[ethtool]
+recipe  = slapos.recipe.cmmi
+url     = https://www.kernel.org/pub/software/network/ethtool/ethtool-4.11.tar.xz
+md5sum  = 16d38f4ebe23e44f96f7d8b38ed3652c
diff --git a/component/ioping/buildout.cfg b/component/ioping/buildout.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..5a2d15119c8f13f093ce46170182f74450b7ce55
--- /dev/null
+++ b/component/ioping/buildout.cfg
@@ -0,0 +1,25 @@
+# ioping - simple disk I/O latency measuring tool
+# https://github.com/koct9i/ioping
+[buildout]
+extends =
+    ../git/buildout.cfg
+
+parts   =
+    ioping
+
+[ioping-repository]
+recipe  = slapos.recipe.build:gitclone
+git-executable = ${git:location}/bin/git
+# NOTE we use a bit patched ioping version which shows not only avg latency but also its distribution
+# repository = https://github.com/koct9i/ioping.git
+repository = https://lab.nexedi.com/kirr/ioping.git
+revision = v1.0-9-g34c97f7636
+
+[ioping]
+recipe  = slapos.recipe.cmmi
+path    = ${ioping-repository:location}
+configure-command = :
+make-binary =
+# XXX without vvv PREFIX=${:location} does not work
+location= ${buildout:parts-directory}/${:_buildout_section_name_}
+make-targets= make install PREFIX=${:location}
diff --git a/component/lmbench/buildout.cfg b/component/lmbench/buildout.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..105fe287a7ebdabe8cb178396d59ce3fae6bbf0a
--- /dev/null
+++ b/component/lmbench/buildout.cfg
@@ -0,0 +1,28 @@
+# LMbench - Tools for Performance Analysis
+# http://www.bitmover.com/lmbench/
+[buildout]
+extends =
+    ../git/buildout.cfg
+    ../golang/buildout.cfg
+
+parts   =
+    lmbench
+
+
+[lmbench-repository]
+<= git-repository
+# NOTE we use a bit patched lmbench version with fixes to lat_tcp for errors not to go unnoticed and other addons
+# repository = https://svn.code.sf.net/p/lmbench/code
+repository = https://lab.nexedi.com/kirr/lmbench.git
+revision = 9b108b6ff3
+
+[lmbench]
+recipe  = slapos.recipe.cmmi
+path    = ${lmbench-repository:location}
+configure-command = :
+make-binary =
+# XXX without vvv BASE=${:location} does not work
+location= ${buildout:parts-directory}/${:_buildout_section_name_}
+make-targets= cd ${lmbench-repository:location}/lmbench3/src
+              && make install BASE=${:location}
+              && bash -c ". ${gowork:env.sh} && go build -o ${:location}/bin/lat_tcp_go lat_tcp.go"
diff --git a/software/neoppod/software-common.cfg b/software/neoppod/software-common.cfg
index 669df87dbe0cd760291c18b3d06d6a13464adc54..1cedf1b4d89162998916b155762aaa6465ad175a 100644
--- a/software/neoppod/software-common.cfg
+++ b/software/neoppod/software-common.cfg
@@ -121,7 +121,7 @@ slapos.toolbox = 0.73
 smmap2 = 2.0.1
 transaction = 1.7.0
 zodbpickle = 0.6.0
-zodbtools = 0.0.0.dev3
+zodbtools = 0.0.0.dev4
 
 # Required by:
 # slapos.toolbox==0.71
@@ -153,3 +153,20 @@ paramiko = 2.1.2
 # Required by:
 # slapos.toolbox==0.71
 passlib = 1.7.1
+
+# Required by:
+# zodbtools==0.0.0dev4
+zodburi = 2.3.0
+
+# Required by:
+# zodburi==2.0
+# ZEO 5 requires transaction >= 2
+ZEO = 4.3.1
+
+# Required by:
+# zodburi==2.0
+mock = 2.0.0
+
+# Required by:
+# ZEO==4.3.1
+zdaemon = 4.2.0
diff --git a/software/neotest/gowork.cfg b/software/neotest/gowork.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..35cb19c741a402c78e53f9155cb319f36051a3a9
--- /dev/null
+++ b/software/neotest/gowork.cfg
@@ -0,0 +1,97 @@
+# Code generated by gowork-snapshot; DO NOT EDIT.
+
+# list of go git repositories to fetch
+[gowork.goinstall]
+depends_gitfetch  =
+    ${go_github.com_cznic_strutil:recipe}
+    ${go_github.com_golang_glog:recipe}
+    ${go_github.com_kisielk_og-rek:recipe}
+    ${go_github.com_kylelemons_godebug:recipe}
+    ${go_github.com_pkg_errors:recipe}
+    ${go_github.com_pkg_profile:recipe}
+    ${go_github.com_someonegg_gocontainer:recipe}
+    ${go_golang.org_x_net:recipe}
+    ${go_golang.org_x_perf:recipe}
+    ${go_golang.org_x_sync:recipe}
+    ${go_golang.org_x_tools:recipe}
+    ${go_lab.nexedi.com_kirr_go123:recipe}
+    ${go_lab.nexedi.com_kirr_neo:recipe}
+
+
+[go_github.com_cznic_strutil]
+<= go-git-package
+go.importpath = github.com/cznic/strutil
+repository    = https://github.com/cznic/strutil
+revision  = 529a34b1c1
+
+[go_github.com_golang_glog]
+<= go-git-package
+go.importpath = github.com/golang/glog
+repository    = https://github.com/golang/glog
+revision  = 23def4e6c1
+
+[go_github.com_kisielk_og-rek]
+<= go-git-package
+go.importpath = github.com/kisielk/og-rek
+repository    = https://github.com/kisielk/og-rek
+revision  = dd41cde712
+
+[go_github.com_kylelemons_godebug]
+<= go-git-package
+go.importpath = github.com/kylelemons/godebug
+repository    = https://github.com/kylelemons/godebug
+revision  = d65d576e93
+
+[go_github.com_pkg_errors]
+<= go-git-package
+go.importpath = github.com/pkg/errors
+repository    = https://github.com/pkg/errors
+revision  = v0.8.0-6-g2b3a18b5f0
+
+[go_github.com_pkg_profile]
+<= go-git-package
+go.importpath = github.com/pkg/profile
+repository    = https://github.com/pkg/profile
+revision  = v1.2.1-0-g5b67d42886
+
+[go_github.com_someonegg_gocontainer]
+<= go-git-package
+go.importpath = github.com/someonegg/gocontainer
+repository    = https://github.com/someonegg/gocontainer
+revision  = fc2c7e84b5
+
+[go_golang.org_x_net]
+<= go-git-package
+go.importpath = golang.org/x/net
+repository    = https://go.googlesource.com/net
+revision  = 1087133bc4
+
+[go_golang.org_x_perf]
+<= go-git-package
+go.importpath = golang.org/x/perf
+repository    = https://go.googlesource.com/perf
+revision  = 4469e6ce8c
+
+[go_golang.org_x_sync]
+<= go-git-package
+go.importpath = golang.org/x/sync
+repository    = https://go.googlesource.com/sync
+revision  = 8e0aa688b6
+
+[go_golang.org_x_tools]
+<= go-git-package
+go.importpath = golang.org/x/tools
+repository    = https://go.googlesource.com/tools
+revision  = 9bd2f44268
+
+[go_lab.nexedi.com_kirr_go123]
+<= go-git-package
+go.importpath = lab.nexedi.com/kirr/go123
+repository    = https://lab.nexedi.com/kirr/go123.git
+revision  = 2578d58311
+
+[go_lab.nexedi.com_kirr_neo]
+<= go-git-package
+go.importpath = lab.nexedi.com/kirr/neo
+repository    = https://lab.nexedi.com/kirr/neo.git
+revision  = v1.8-1326-g4d0cd89484
diff --git a/software/neotest/instance.cfg.in b/software/neotest/instance.cfg.in
new file mode 100644
index 0000000000000000000000000000000000000000..3710ae587cb58510f06bd37360fa388d8442de49
--- /dev/null
+++ b/software/neotest/instance.cfg.in
@@ -0,0 +1 @@
+# TODO instance which runs this test periodically automatically and ingests results to ERP5
diff --git a/software/neotest/neotest-env.sh.in b/software/neotest/neotest-env.sh.in
new file mode 100644
index 0000000000000000000000000000000000000000..c85a49740bbcd0fc6a28732162d0abcaeebb5404
--- /dev/null
+++ b/software/neotest/neotest-env.sh.in
@@ -0,0 +1,30 @@
+# env.sh for putting everything needed to run neotest on path
+
+. ${gowork:env.sh}
+
+PATH="${ethtool:location}/sbin:$PATH"
+PATH="${ioping:location}/bin:$PATH"
+PATH="${lmbench:location}/bin:$PATH"
+PATH="${mariadb:location}/bin:$PATH"
+PATH="${mariadb:location}/scripts:$PATH"
+PATH="${python2.7:location}/bin:$PATH"
+
+# add all eggs and develop-eggs to py path
+#
+# XXX better leverage something like zc.recipe.egg to generate eggs path buildout way
+# XXX see e.g. https://lab.nexedi.com/nexedi/slapos/merge_requests/242#note_49644 for why
+# TODO(kirr) try doing so
+PYTHONPATH=${buildout:develop-eggs-directory}:$PYTHONPATH       # for .egg-link to be found by setuptools
+for egglink in ${buildout:develop-eggs-directory}/*.egg-link; do
+    PYTHONPATH=`cat $egglink |head -1`:$PYTHONPATH
+done
+
+for egg in ${buildout:develop-eggs-directory}/*.egg ${buildout:eggs-directory}/*.egg; do
+        export PYTHONPATH=$egg:$PYTHONPATH
+done
+
+
+export PATH
+export PYTHONPATH
+
+export PS1="(neotest-`basename ${buildout:directory}`) $PS1"
diff --git a/software/neotest/neotest.in b/software/neotest/neotest.in
new file mode 100644
index 0000000000000000000000000000000000000000..0a808ff1ab56bff380b4ac0e29628bc5c449eb13
--- /dev/null
+++ b/software/neotest/neotest.in
@@ -0,0 +1,5 @@
+#!/bin/bash -e
+# neotest wraper so it could be run without any environment preset
+
+. ${buildout:directory}/neotest-env.sh
+exec ${gowork:src}/lab.nexedi.com/kirr/neo/go/neo/t/neotest "$@"
diff --git a/software/neotest/software-dev.cfg b/software/neotest/software-dev.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..82438494edfb4787a630ca129a86975c7f42a20a
--- /dev/null
+++ b/software/neotest/software-dev.cfg
@@ -0,0 +1,20 @@
+# neotest SR with main components taken from latest git versions
+[buildout]
+extends = software.cfg
+
+
+[go_lab.nexedi.com_kirr_go123]
+branch	= master
+revision=
+
+[go_lab.nexedi.com_kirr_neo]
+branch	= t
+revision=
+
+[lmbench-repository]
+branch  = x/kirr
+revision=
+
+[ioping-repository]
+branch  = x/hist
+revision=
diff --git a/software/neotest/software.cfg b/software/neotest/software.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..ab60ca8a4547b9765d485823307de5963887565b
--- /dev/null
+++ b/software/neotest/software.cfg
@@ -0,0 +1,109 @@
+# NEO test software-release
+#
+# This software-release prepares environment so that neotest NEO
+# testing/benchmarking can be run in a SlapOS WebRunner.
+[buildout]
+extends =
+    ../../stack/slapos.cfg
+    ../neoppod/software-common.cfg
+    ../../component/golang/buildout.cfg
+    gowork.cfg
+    ../../component/wendelin.core/buildout.cfg
+    ../../component/ethtool/buildout.cfg
+    ../../component/ioping/buildout.cfg
+    ../../component/lmbench/buildout.cfg
+
+parts =
+    gowork
+    lmbench
+    ioping
+    ethtool
+
+    neoppod-develop
+    neoppod
+    wendelin.core-dev
+    eggs
+
+    neotest-env.sh
+    neotest
+
+#   for instance
+    slapos-deps-eggs
+    slapos-cookbook
+#   instance.cfg
+
+
+# go packages to install (+ automatically their dependencies)
+[gowork]
+install =
+    lab.nexedi.com/kirr/neo/go/...  \
+    github.com/pkg/profile          \
+    golang.org/x/perf/cmd/benchstat
+
+# dev-install neo from go checkout
+[neoppod-develop]
+setup   = ${go_lab.nexedi.com_kirr_neo:location}
+
+
+# neotest-env.sh + neotest wrapper
+[buildout-template]
+recipe  = slapos.recipe.template
+url     = ${:_profile_base_location_}/${:_buildout_section_name_}.in
+output  = ${buildout:directory}/${:_buildout_section_name_}
+
+[neotest-env.sh]
+<= buildout-template
+md5sum  = 6e2203c7a86e8a3e8e56b8086115f5d4
+
+[neotest]
+<= buildout-template
+output  = ${buildout:bin-directory}/${:_buildout_section_name_}
+mode    = 0755
+md5sum  = fb3b4109128c1db1739ef5bb6abd1d94
+
+
+# instance (TODO)
+[instance.cfg]
+<= buildout-template
+md5sum  = 410e1b2d72829824b28cc0299adb472e
+
+
+# eggs:
+[eggs]
+recipe  = zc.recipe.egg
+eggs    =
+# wendelin.core still requires ZODB3 but having ZODB4 or 5 installed satisfies latest ZODB3
+    ZODB3
+# also for wc
+    numpy
+# to install not only wendelin.core modules but also scripts
+    wendelin.core
+# for ZEO scripts (runzeo)
+    ZEO
+
+
+# wendelin.core: latest not yet released
+[wendelin.core-repository]
+revision= v0.11-4-g38fbc83ceb
+
+# ping eggs versions
+[versions]
+pyasn1 = 0.3.7
+ZODB3 = 3.11.0
+numpy = 1.13.3
+zope.testing = 4.6.2
+
+# Required by:
+# ZEO==4.3.1
+# ZODB==4.4.5
+# zodburi==2.3.0
+ZConfig = 3.2.0
+
+# Required by:
+# ZEO==4.3.1
+# ZODB==4.4.5
+zc.lockfile = 1.2.1
+
+# Required by:
+# slapos.toolbox==0.73
+erp5.util = 0.4.49
diff --git a/stack/erp5/buildout.cfg b/stack/erp5/buildout.cfg
index 6208aaadfc444c99ba7513189071a7a4e7a3adf8..45d41f8216595cac19094e2490bbc14c6bb90bc3 100644
--- a/stack/erp5/buildout.cfg
+++ b/stack/erp5/buildout.cfg
@@ -688,8 +688,6 @@ PyXML = 0.8.5
 Pympler = 0.4.3
 StructuredText = 2.11.1
 WSGIUtils = 0.7
-# ZEO 5 requires transaction >= 2
-ZEO = 4.3.1
 ZODB3 = 3.11.0
 # astroid 1.4.1 breaks testDynamicClassGeneration
 astroid = 1.3.8