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