diff --git a/.gitignore b/.gitignore
index 18906d5e66f3aca5f1ac5119d6722426e3ab5cce..e45974eee79db4631a8e7a9df26f807846a0d380 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,9 @@ tags
 extra/txt2c
 extra/bin2c
 extra/dist/tarantoolctl.1
+extra/dist/tarantool.logrotate
+extra/dist/tarantool.service
+extra/dist/tarantool.tmpfiles.conf
 cmake_install.cmake
 config.mk
 config.guess
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 88c47b96a3195611e9d38a482cd7f4a7acc9d597..8da75993d2c67860d93714c36a19ff5e2f00929a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -54,7 +54,6 @@ include(cmake/atomic.cmake)
 include(cmake/profile.cmake)
 include(cmake/FindReadline.cmake)
 include(cmake/FindSphinx.cmake)
-include(cmake/systemd.cmake)
 include(cmake/module.cmake)
 include(cmake/thread.cmake)
 
@@ -356,8 +355,6 @@ add_dependencies(build_bundled_libs misc)
 include(BuildSophia)
 sophia_build()
 
-option(WITH_SYSVINIT "Enable install of sysvinit scripts" OFF)
-
 # cpack config. called package.cmake to avoid
 # conflicts with the global CPack.cmake (On MacOS X
 # file names are case-insensitive)
@@ -420,6 +417,7 @@ message (STATUS "ENABLE_BUNDLED_LIBEIO: ${ENABLE_BUNDLED_LIBEIO}")
 message (STATUS "ENABLE_BUNDLED_LIBCORO: ${ENABLE_BUNDLED_LIBCORO}")
 message (STATUS "ENABLE_BUNDLED_LIBYAML: ${ENABLE_BUNDLED_LIBYAML}")
 message (STATUS "ENABLE_DOC: ${ENABLE_DOC}")
+message (STATUS "ENABLE_DIST: ${ENABLE_DIST}")
 list_optional_packages()
 if (TARGET_OS_DARWIN)
     message (STATUS "DARWIN_BUILD_TYPE: ${DARWIN_BUILD_TYPE}")
diff --git a/cmake/systemd.cmake b/cmake/systemd.cmake
index 80c373f0c573cd7eb969414d9dc57760ca011360..ed021227dfc31fb52a3f0a246d88095fcbeba5c6 100644
--- a/cmake/systemd.cmake
+++ b/cmake/systemd.cmake
@@ -1,26 +1,32 @@
 find_package(PkgConfig QUIET)
 if (PKG_CONFIG_FOUND)
     pkg_check_modules(SYSTEMD "systemd")
-    
-    if (SYSTEMD_FOUND AND "${SYSTEMD_SERVICES_INSTALL_DIR}" STREQUAL "")
-        execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE}
-            --variable=systemdsystemunitdir systemd
-            OUTPUT_VARIABLE SYSTEMD_SERVICES_INSTALL_DIR)
-        string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SERVICES_INSTALL_DIR
-            "${SYSTEMD_SERVICES_INSTALL_DIR}")
-    elseif (NOT SYSTEMD_FOUND AND SYSTEMD_SERVICES_INSTALL_DIR)
-        message (FATAL_ERROR "Variable SYSTEMD_SERVICES_INSTALL_DIR is\
-            defined, but we can't find systemd using pkg-config")
-    endif()
+endif()
 
-    if (SYSTEMD_FOUND)
-        set(WITH_SYSTEMD "ON")
-        message(STATUS "SYSTEMD_SERVICES_INSTALL_DIR: ${SYSTEMD_SERVICES_INSTALL_DIR}")
-    else()
-        set(WITH_SYSTEMD "OFF")
-    endif (SYSTEMD_FOUND)
-else(PKG_CONFIG_FOUND)
+if (NOT SYSTEMD_FOUND)
+    if (WITH_SYSTEMD)
+        message (FATAL_ERROR "WITH_SYSTEMD is defined, "
+            "but we can't find systemd using pkg-config")
+    endif()
     set(WITH_SYSTEMD "OFF")
-endif(PKG_CONFIG_FOUND)
+    file(APPEND "${_OptionalPackagesFile}" "-- WITH_SYSTEMD=OFF\n")
+    return()
+endif()
+
+if ("${SYSTEMD_UNIT_DIR}" STREQUAL "")
+    execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE}
+        --variable=systemdsystemunitdir systemd
+        OUTPUT_VARIABLE SYSTEMD_UNIT_DIR)
+    string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_UNIT_DIR
+        "${SYSTEMD_UNIT_DIR}")
+endif()
+
+if ("${SYSTEMD_TMPFILES_DIR}" STREQUAL "")
+    # NOTE: don't use ${CMAKE_INSTALL_LIBDIR} here
+    set(SYSTEMD_TMPFILES_DIR "${CMAKE_INSTALL_PREFIX}/lib/tmpfiles.d")
+endif()
 
-file(APPEND "${_OptionalPackagesFile}" "-- WITH_SYSTEMD=${WITH_SYSTEMD}\n")
+set(WITH_SYSTEMD "ON")
+message(STATUS "SYSTEMD_UNIT_DIR: ${SYSTEMD_UNIT_DIR}")
+message(STATUS "SYSTEMD_TMPFILES_DIR: ${SYSTEMD_TMPFILES_DIR}")
+file(APPEND "${_OptionalPackagesFile}" "-- WITH_SYSTEMD=ON\n")
diff --git a/debian/rules b/debian/rules
index 2af3f1c2ca644785b6dd92aa2d70f6b52ced6859..e2ee448f29c7576b63aa0d77c6c851362b510857 100755
--- a/debian/rules
+++ b/debian/rules
@@ -16,7 +16,8 @@ DEB_CMAKE_NORMAL_ARGS := -DCMAKE_INSTALL_PREFIX="$(DEB_CMAKE_INSTALL_PREFIX)" \
 	-DCMAKE_INSTALL_SYSCONFDIR=/etc \
 	-DCMAKE_INSTALL_LOCALSTATEDIR=/var \
 	-DCMAKE_INSTALL_LIBDIR=/usr/lib \
-	-DENABLE_BUNDLED_LIBYAML=OFF
+	-DENABLE_BUNDLED_LIBYAML=OFF \
+	-DENABLE_DIST=ON
 #     -DCMAKE_C_FLAGS="$(CFLAGS)" \
 #     -DCMAKE_LD_FLAGS="$(LDFLAGS)" \
 #     -DENABLE_STATIC=ON
diff --git a/debian/tarantool-common.dirs b/debian/tarantool-common.dirs
index 3da13a16fe7c1fa67d13c81d29d043cb4d1aaaf1..695aa1d92d30495a5c1414d4e1532bbf32377c07 100644
--- a/debian/tarantool-common.dirs
+++ b/debian/tarantool-common.dirs
@@ -1,3 +1,5 @@
 /etc/tarantool/instances.available
 /etc/tarantool/instances.enabled
 /usr/lib/tarantool
+/var/log/tarantool
+/var/lib/tarantool
diff --git a/debian/tarantool-common.install b/debian/tarantool-common.install
index 5b6fb9b27e3f1a43ea3cb9ad9c58555c14d053eb..eb7b0cdf525d51badf00ec92c4324ec7c634d6ed 100644
--- a/debian/tarantool-common.install
+++ b/debian/tarantool-common.install
@@ -1,3 +1,4 @@
 /etc/default/tarantool
 /usr/bin/tarantoolctl
 /etc/tarantool/instances.available/example.lua
+/etc/logrotate.d/tarantool
diff --git a/debian/tarantool-common.postinst b/debian/tarantool-common.postinst
index 3926b662c18060c1799492c63ca79211b4f2118f..898a1fca387ff367a43dab9619869bba05788ef1 100644
--- a/debian/tarantool-common.postinst
+++ b/debian/tarantool-common.postinst
@@ -20,6 +20,7 @@ case "$1" in
 
         install -d -o$SYSUSER -gadm -m2750 /var/log/tarantool
         install -d -o$SYSUSER -g$SYSUSER -m750 /var/run/tarantool
+        install -d -o$SYSUSER -g$SYSUSER -m750 /var/lib/tarantool
     ;;
 esac
 
diff --git a/extra/CMakeLists.txt b/extra/CMakeLists.txt
index 9f293a2942d8dcfe6b60c1a0aafa678e99f4ed26..c2532b87302b4c937731e99d9f3ad46506f044c3 100644
--- a/extra/CMakeLists.txt
+++ b/extra/CMakeLists.txt
@@ -1,4 +1,7 @@
-add_subdirectory(dist)
+option(ENABLE_DIST "Enable install of init scripts" OFF)
+if (ENABLE_DIST)
+    add_subdirectory(dist)
+endif()
 
 if (TARGET_OS_DARWIN)
 	# NOTE: need add execution 'plutil -lint org.tarantool.tarantool.plist
diff --git a/extra/dist/CMakeLists.txt b/extra/dist/CMakeLists.txt
index f569c628b91ac4dfebcd05d9685a26f97b65758d..68564cd52ec67ab1888e3a035e0040aa9cbd210c 100644
--- a/extra/dist/CMakeLists.txt
+++ b/extra/dist/CMakeLists.txt
@@ -1,13 +1,15 @@
+include(systemd)
+
 #
 # tarantoolctl
 #
 
 # Default path to data in default/tarantool
-set(TARANTOOL_DATADIR "${CMAKE_INSTALL_LOCALSTATEDIR}/lib/tarantool")
+set(TARANTOOL_DATADIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/tarantool")
 message (STATUS "tarantoolctl datadir: ${TARANTOOL_DATADIR}")
-set(TARANTOOL_LOGDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/log/tarantool")
+set(TARANTOOL_LOGDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/log/tarantool")
 message (STATUS "tarantoolctl logdir: ${TARANTOOL_LOGDIR}")
-set(TARANTOOL_RUNDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/run/tarantool")
+set(TARANTOOL_RUNDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/run/tarantool")
 message (STATUS "tarantoolctl rundir: ${TARANTOOL_RUNDIR}")
 
 # config file for tarantoolctl
@@ -18,7 +20,7 @@ else()
     # RedHat/Fedora/etc.
     set(SYSCONFIG_DEFAULT "sysconfig")
 endif()
-configure_file(default/tarantool.in default/tarantool)
+configure_file(default/tarantool.in default/tarantool @ONLY)
 install (FILES ${PROJECT_BINARY_DIR}/extra/dist/default/tarantool DESTINATION
     ${CMAKE_INSTALL_SYSCONFDIR}/${SYSCONFIG_DEFAULT}/
     PERMISSIONS
@@ -34,15 +36,38 @@ install (FILES tarantoolctl DESTINATION ${CMAKE_INSTALL_BINDIR}
     WORLD_READ WORLD_EXECUTE
 )
 
+# directories in /etc/ for tarantoolctl
+install(DIRECTORY DESTINATION
+    ${CMAKE_INSTALL_SYSCONFDIR}/tarantool/instances.enabled
+)
+install(DIRECTORY DESTINATION
+    ${CMAKE_INSTALL_SYSCONFDIR}/tarantool/instances.available
+)
+
 # an example instance script for tarantoolctl
 install (FILES example.lua DESTINATION
         ${CMAKE_INSTALL_SYSCONFDIR}/tarantool/instances.available
     PERMISSIONS
     OWNER_READ OWNER_WRITE OWNER_READ
-    GROUP_READ GROUP_READ
-    WORLD_READ WORLD_READ
+    GROUP_READ WORLD_READ
 )
 
+# directories for data, logs and pid files
+# Sic: chmod and chown are performed by rpm/deb
+install(DIRECTORY DESTINATION ${TARANTOOL_DATADIR})
+install(DIRECTORY DESTINATION ${TARANTOOL_LOGDIR})
+install(DIRECTORY DESTINATION ${TARANTOOL_RUNDIR})
+
+# logrotate files
+configure_file(tarantool.logrotate.in tarantool.logrotate @ONLY)
+install (FILES ${PROJECT_BINARY_DIR}/extra/dist/tarantool.logrotate
+    DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/logrotate.d/
+    RENAME "tarantool"
+    PERMISSIONS
+    OWNER_READ OWNER_WRITE
+    GROUP_READ
+    WORLD_READ)
+
 # man page for tarantoolctl
 pod2man (
     tarantoolctl "tarantoolctl" 1
@@ -54,25 +79,35 @@ pod2man (
 #
 
 if (WITH_SYSTEMD)
-    message (STATUS "Installing systemd scripts")
+    message (STATUS "Using scripts for systemd")
     # NOTE: always install tarantool.init to ${CMAKE_INSTALL_PREFIX}/lib
     # instead of ${CMAKE_INSTALL_LIBDIR} because LIBDIR depends on the target
     # architecture, but tarantool-common is noarch package.
-    set(SYSV_INITD_DIR ${CMAKE_INSTALL_PREFIX}/lib/tarantool/)
+    set(SYSV_INITD_DIR ${CMAKE_INSTALL_PREFIX}/lib/tarantool)
 
-    configure_file("tarantool.service.in" "tarantool.service")
-    install (FILES ${PROJECT_BINARY_DIR}/extra/dist/tarantool.service DESTINATION ${SYSTEMD_SERVICES_INSTALL_DIR}
+    configure_file("tarantool.service.in" "tarantool.service" @ONLY)
+    install (FILES ${PROJECT_BINARY_DIR}/extra/dist/tarantool.service
+        DESTINATION ${SYSTEMD_UNIT_DIR}
         PERMISSIONS
         OWNER_READ OWNER_WRITE
-        GROUP_READ GROUP_EXECUTE
-        WORLD_READ WORLD_EXECUTE)
+        GROUP_READ GROUP_READ
+        WORLD_READ WORLD_READ)
     install (FILES tarantool.init DESTINATION ${SYSV_INITD_DIR}
         PERMISSIONS
         OWNER_READ OWNER_WRITE
         GROUP_READ GROUP_EXECUTE
         WORLD_READ WORLD_EXECUTE)
-elseif (WITH_SYSVINIT)
-    message (STATUS "Installing sysvinit scripts")
+    configure_file(tarantool.tmpfiles.conf.in tarantool.tmpfiles.conf @ONLY)
+    install (FILES "${PROJECT_BINARY_DIR}/extra/dist/tarantool.tmpfiles.conf"
+        DESTINATION "${SYSTEMD_TMPFILES_DIR}"
+        RENAME "tarantool.conf"
+        PERMISSIONS
+        OWNER_READ OWNER_WRITE
+        GROUP_READ GROUP_READ
+        WORLD_READ WORLD_READ)
+
+else() # sysvinit
+    message (STATUS "Using scripts for sysvinit")
     install (FILES tarantool.init DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d/
         RENAME tarantool
         PERMISSIONS
@@ -80,7 +115,7 @@ elseif (WITH_SYSVINIT)
         GROUP_READ GROUP_EXECUTE
         WORLD_READ WORLD_EXECUTE)
     install (FILES ${PROJECT_BINARY_DIR}/extra/dist/default/tarantool DESTINATION
-        ${CMAKE_INSTALL_SYSCONFDIR}/sysconfig/
+        ${CMAKE_INSTALL_SYSCONFDIR}/${SYSCONFIG_DEFAULT}/
         PERMISSIONS
         OWNER_READ OWNER_WRITE
         GROUP_READ
diff --git a/extra/dist/default/tarantool.in b/extra/dist/default/tarantool.in
index 20c4f277d45b4d4e004e6c105a4e59c15fa9da02..74d667e71b62feba15d3d73db7c3f53f549b7b03 100644
--- a/extra/dist/default/tarantool.in
+++ b/extra/dist/default/tarantool.in
@@ -1,13 +1,13 @@
 -- Options for Tarantool
 default_cfg = {
-    pid_file   = "@TARANTOOL_RUNDIR@", -- /var/run/tarantool/${INSTANCE}.pid
-    wal_dir    = "@TARANTOOL_DATADIR@", -- /var/lib/tarantool/${INSTANCE}/
-    snap_dir   = "@TARANTOOL_DATADIR@", -- /var/lib/tarantool/${INSTANCE}
-    sophia_dir = "@TARANTOOL_DATADIR@", -- /var/lib/tarantool/${INSTANCE}
-    logger     = "@TARANTOOL_LOGDIR@", -- /var/log/tarantool/${INSTANCE}.log
+    pid_file   = "@TARANTOOL_RUNDIR@", -- @TARANTOOL_RUNDIR@/${INSTANCE}.pid
+    wal_dir    = "@TARANTOOL_DATADIR@", -- @TARANTOOL_DATADIR@/${INSTANCE}/
+    snap_dir   = "@TARANTOOL_DATADIR@", -- @TARANTOOL_DATADIR@/${INSTANCE}
+    sophia_dir = "@TARANTOOL_DATADIR@", -- @TARANTOOL_DATADIR@/${INSTANCE}
+    logger     = "@TARANTOOL_LOGDIR@", -- @TARANTOOL_LOGDIR@/${INSTANCE}.log
     username   = "tarantool",
 }
 
-instance_dir = "@CMAKE_INSTALL_SYSCONFDIR@/tarantool/instances.enabled"
+instance_dir = "@CMAKE_INSTALL_FULL_SYSCONFDIR@/tarantool/instances.enabled"
 
 -- vim: set ft=lua :
diff --git a/extra/dist/example.lua b/extra/dist/example.lua
index 3830d572355e11daac987d2fcde7ebd11087df6b..747cedabb0913130d4d74cb72fcc6d0740437483 100644
--- a/extra/dist/example.lua
+++ b/extra/dist/example.lua
@@ -23,23 +23,23 @@ box.cfg {
 
     -- UNIX user name to switch to after start
     -- by default: tarantool
-    username = nil;
+    -- username = nil;
 
     -- A directory where database working files will be stored
-    -- If not specified, defaults to the current directory
-    work_dir = nil;
+    -- If not specified, defaults to /var/lib/tarantool/${INSTANCE}
+    -- work_dir = nil;
 
     -- A directory where write-ahead log (.xlog) files are stored
     -- If not specified, defaults to work_dir
-    wal_dir = ".";
+    -- wal_dir = nil;
 
     -- A directory where snapshot (.snap) files will be stored
     -- If not specified, defaults to work_dir
-    snap_dir = ".";
+    -- snap_dir = nil;
 
     -- A directory where sophia files will be stored
     -- If not specified, defaults to work_dir
-    sophia_dir = ".";
+    -- sophia_dir = nil;
 
     -- The read/write data port number or URI
     -- Has no default value, so must be specified if
@@ -50,15 +50,15 @@ box.cfg {
     -- Store the process id in this file.
     -- Can be relative to work_dir. 
     -- Default value is nil.
-    pid_file = "example.pid";
+    -- pid_file = "example.pid";
 
     -- Inject the given string into server process title
     -- custom_proc_title = 'example';
 
     -- Run the server as a background task
-    -- The logger and pid_file parameters 
+    -- The logger and pid_file parameters
     -- must be non-null for this to work
-    background = true;
+    -- background = true;
 
     -------------------------
     -- Storage configuration
diff --git a/debian/tarantool-common.logrotate b/extra/dist/tarantool.logrotate.in
similarity index 63%
rename from debian/tarantool-common.logrotate
rename to extra/dist/tarantool.logrotate.in
index eb468b9729fc5f17db57879add97b88153c46510..f58e33f027ef94dccf5655d14627155941ac9db2 100644
--- a/debian/tarantool-common.logrotate
+++ b/extra/dist/tarantool.logrotate.in
@@ -1,4 +1,4 @@
-/var/log/tarantool/*.log {
+@TARANTOOL_LOGDIR@/*.log {
     daily
     size 512k
     missingok
@@ -7,7 +7,6 @@
     delaycompress
     create 0640 tarantool adm
     postrotate
-        /usr/bin/tarantool /usr/bin/tarantoolctl logrotate `basename ${1%%.*}`
+        @CMAKE_INSTALL_FULL_BINDIR@/tarantoolctl logrotate `basename ${1%%.*}`
     endscript
 }
-
diff --git a/extra/dist/tarantool.tmpfiles.conf.in b/extra/dist/tarantool.tmpfiles.conf.in
new file mode 100644
index 0000000000000000000000000000000000000000..0c03ce3e53d3263b1675eb002a4bb4706fd8e3cc
--- /dev/null
+++ b/extra/dist/tarantool.tmpfiles.conf.in
@@ -0,0 +1 @@
+d @TARANTOOL_RUNDIR@ 0755 tarantool tarantool -
diff --git a/rpm/tarantool.spec b/rpm/tarantool.spec
index 463e3c313ed72704a0d7d67bf1ef91f548f5845b..b541f9aae7487eef024b6c879417dcf993a5e139 100644
--- a/rpm/tarantool.spec
+++ b/rpm/tarantool.spec
@@ -132,11 +132,12 @@ This package provides common files
     end
     local function def_init()
         if tonumber(rpm.expand("%{with systemd}")) ~= 0 then
-            return cmake_key_value("WITH_SYSTEMD", "ON") ..
-                   cmake_key_value("SYSTEMD_SERVICES_INSTALL_DIR",
-                                   '%{_unitdir}')
+            return cmake_key_value("ENABLE_DIST", "ON") ..
+                   cmake_key_value("WITH_SYSTEMD", "ON") ..
+                   cmake_key_value("SYSTEMD_UNIT_DIR", '%{_unitdir}') ..
+                   cmake_key_value("SYSTEMD_TMPFILES_DIR", '%{_tmpfilesdir}')
         else
-            return ' %{!?scl:-DWITH_SYSVINIT=ON}'
+            return ' %{!?scl:-DENABLE_DIST=ON}'
         end
     end
     local cmd = 'cmake'
@@ -180,14 +181,15 @@ make VERBOSE=1 DESTDIR=%{buildroot} install
 %post common
 mkdir -m 0755 -p %{_var}/run/tarantool/
 chown tarantool:tarantool %{_var}/run/tarantool/
-mkdir -m 0755 -p %{_var}/log/tarantool/
-chown tarantool:tarantool %{_var}/log/tarantool/
-mkdir -m 0755 -p %{_var}/lib/tarantool/
+mkdir -m 2750 -p %{_var}/log/tarantool/
+chown tarantool:adm %{_var}/log/tarantool/
+mkdir -m 0750 -p %{_var}/lib/tarantool/
 chown tarantool:tarantool %{_var}/lib/tarantool/
 mkdir -m 0755 -p %{_sysconfdir}/tarantool/instances.enabled/
 mkdir -m 0755 -p %{_sysconfdir}/tarantool/instances.available/
 
 %if %{with systemd}
+%tmpfiles_create tarantool.conf
 %systemd_post tarantool.service
 %else
 chkconfig --add tarantool
@@ -235,12 +237,18 @@ chkconfig --del tarantool
 "%{_mandir}/man1/tarantoolctl.1.gz"
 "%{_sysconfdir}/sysconfig/tarantool"
 %dir "%{_sysconfdir}/tarantool"
+%dir "%{_sysconfdir}/tarantool/instances.enabled"
 %dir "%{_sysconfdir}/tarantool/instances.available"
-"%{_sysconfdir}/tarantool/instances.available/example.lua"
+%config(noreplace) %{_sysconfdir}/tarantool/instances.available/example.lua
+%attr(0750,tarantool,tarantool) %dir %{_localstatedir}/lib/tarantool/
+%attr(-,tarantool,tarantool) %dir %{_localstatedir}/log/tarantool/
+%config(noreplace) %{_sysconfdir}/logrotate.d/tarantool
+
 %if %{with systemd}
 %dir "%{_prefix}/lib/tarantool/"
 "%{_unitdir}/tarantool.service"
 "%{_prefix}/lib/tarantool/tarantool.init"
+"%{_tmpfilesdir}/tarantool.conf"
 %else
 "%{_sysconfdir}/init.d/tarantool"
 %endif