diff --git a/CMakeLists.txt b/CMakeLists.txt index f6c8a6f6..81a548eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,3 +49,66 @@ message (STATUS "Odissey (version: ${OD_VERSION_GIT} ${OD_VERSION_BUILD})") message (STATUS "") add_subdirectory(sources) + + +# install section +set(NAME ${CMAKE_PROJECT_NAME}) +set(DEST_CONFIG_DIR /etc/${NAME}) +set(DEST_CONFIG_FILE ${NAME}.conf) +set(DEST_CONFIG_PATH ${DEST_CONFIG_DIR}/${DEST_CONFIG_FILE}) +set(DEST_BIN_DIR /usr/bin) +set(DEST_BIN_FILE ${NAME}) +set(DEST_BIN_PATH ${DEST_BIN_DIR}/${DEST_BIN_FILE}) +set(DEST_INIT_DIR /etc/init.d) +set(DEST_INIT_FILE ${NAME}) +set(DEST_LOG_DIR /var/log/${NAME}) +set(DEST_LOG_FILE ${NAME}.log) +set(DEST_LOG_PATH ${DEST_LOG_DIR}/${DEST_LOG_FILE}) +set(DEST_PID_DIR /var/run/${NAME}) +set(DEST_PID_FILE ${NAME}.pid) +set(DEST_PID_PATH ${DEST_PID_DIR}/${DEST_PID_FILE}) +set(DEST_LOGROTATE_DIR /etc/logrotate.d) +set(DEST_LOGROTATE_FILE ${NAME}) +set(DEST_LOGROTATE_PATH ${DEST_LOGROTATE_DIR}/${DEST_LOGROTATE_PATH}) +set(RENDERED_INIT_FILE ${NAME}.init) +set(RENDERED_CONFIG_FILE ${NAME}.conf.example) +set(RENDERED_LOGROTATE_FILE ${NAME}.logrotate) +set(LOCAL_SCRIPTS_DIR scripts/debian) +set(LOCAL_INIT_FILE ${LOCAL_SCRIPTS_DIR}/init) +set(LOCAL_CONFIG_FILE ${LOCAL_SCRIPTS_DIR}/config) +set(LOCAL_LOGROTATE_FILE ${LOCAL_SCRIPTS_DIR}/logrotate) +set(LOCAL_BIN_DIR sources) +set(LOCAL_BIN_FILE ${LOCAL_BIN_DIR}/${NAME}) +set(USER postgres) +set(GROUP postgres) + +set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES + ${RENDERED_INIT_FILE} ${RENDERED_CONFIG_FILE} ${RENDERED_LOGROTATE_FILE} + ${DEBIAN_DIR}/rules ${DEBIAN_DIR}/control ${DEBIAN_DIR}/changelog +) + +configure_file(${LOCAL_INIT_FILE} ${RENDERED_INIT_FILE} @ONLY) +configure_file(${LOCAL_CONFIG_FILE} ${RENDERED_CONFIG_FILE} @ONLY) +configure_file(${LOCAL_LOGROTATE_FILE} ${RENDERED_LOGROTATE_FILE} @ONLY) + +# configure debian package files +set(VERSION $ENV{VERSION}) +if ("${VERSION}" STREQUAL "") + set(VERSION "0.0.1") +endif() +set(BUILD_NUMBER $ENV{BUILD_NUMBER}) +if ("${BUILD_NUMBER}" STREQUAL "") + set(BUILD_NUMBER "1") +endif() +set(DEBIAN_DIR debian) +execute_process(COMMAND whoami OUTPUT_VARIABLE WHOAMI OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process(COMMAND hostname OUTPUT_VARIABLE HOSTNAME OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process(COMMAND date "+%a, %d %b %Y %H:%M:%S %z" OUTPUT_VARIABLE DATE OUTPUT_STRIP_TRAILING_WHITESPACE) +configure_file(${LOCAL_SCRIPTS_DIR}/rules ${DEBIAN_DIR}/rules @ONLY) +configure_file(${LOCAL_SCRIPTS_DIR}/control ${DEBIAN_DIR}/control @ONLY) +configure_file(${LOCAL_SCRIPTS_DIR}/changelog ${DEBIAN_DIR}/changelog @ONLY) + +install(PROGRAMS ${RENDERED_INIT_FILE} DESTINATION ${DEST_INIT_DIR} RENAME ${DEST_INIT_FILE}) +install(PROGRAMS ${LOCAL_BIN_FILE} DESTINATION ${DEST_BIN_DIR} RENAME ${DEST_BIN_FILE}) +install(FILES ${RENDERED_CONFIG_FILE} DESTINATION ${DEST_CONFIG_DIR} RENAME ${DEST_CONFIG_FILE}) +install(FILES ${RENDERED_LOGROTATE_FILE} DESTINATION ${DEST_LOGROTATE_DIR} RENAME ${DEST_LOGROTATE_FILE}) diff --git a/debian/compat b/debian/compat new file mode 100644 index 00000000..ec635144 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 00000000..89ae9db8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/scripts/debian/changelog b/scripts/debian/changelog new file mode 100644 index 00000000..68c8ca99 --- /dev/null +++ b/scripts/debian/changelog @@ -0,0 +1,5 @@ +@NAME@ (@VERSION@-@BUILD_NUMBER@) unstable; urgency=low + + * First package + + -- @WHOAMI@ <@WHOAMI@@@HOSTNAME@> @DATE@ diff --git a/scripts/debian/config b/scripts/debian/config new file mode 100644 index 00000000..d1ea243b --- /dev/null +++ b/scripts/debian/config @@ -0,0 +1,82 @@ +# @NAME@ configuration file. +# + +# include "path" + +daemonize yes +# syslog no +# syslog_facility "daemon" +# syslog_ident "@NAME@" +pid_file "@DEST_PID_PATH@" +log_file "@DEST_LOG_PATH@" +log_format "text" +log_to_stdout no +log_debug no +log_config yes +log_session yes +log_stats yes +stats_interval 3 +readahead 8192 +pipelining 16384 +client_max 100 +workers 4 + +listen { + host "*" + port 6432 + nodelay yes +# backlog 16 +# keepalive 7200 + tls "disable" +# tls_cert_file "" +# tls_key_file "" +# tls_ca_file "" +# tls_protocols "" +} + +storage "local" { + type "local" +} + +storage "pg_server" { + type "remote" + host "127.0.0.1" + port 5432 + tls "disable" +# tls_ca_file "" +# tls_key_file "" +# tls_cert_file "" +# tls_protocols "" +} + +database "console" { + user default { + authentication "none" + pool "session" + storage "local" + } +} + +database default +{ + user default { + # none, block, clear_text, md5 + authentication "none" + #password "test" + + storage "pg_server" + #storage_user "test" + #storage_password "test" + #storage_db "database" + + pool "transaction" + pool_size 100 + pool_timeout 4000 + pool_ttl 5 + pool_cancel yes + pool_discard yes + pool_rollback yes + + #client_max 100 + } +} diff --git a/scripts/debian/control b/scripts/debian/control new file mode 100644 index 00000000..1d25cde3 --- /dev/null +++ b/scripts/debian/control @@ -0,0 +1,19 @@ +Source: @NAME@ +Section: database +Priority: extra +Maintainer: mdb +Standards-Version: 3.9.4 +Build-Depends: debhelper (>= 9), make, libssl-dev (>= 1.0.1) +Homepage: https://github.yandex-team.ru/pmwkaa/odissey + +Package: @NAME@ +Architecture: any +Conflicts: pgbouncer +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Advanced multi-threaded PostgreSQL connection pooler and request router. + +Package: @NAME@-dbg +Architecture: any +Section: debug +Depends: ${shlibs:Depends}, ${misc:Depends}, @NAME@ +Description: Debug symbols for @NAME@ diff --git a/scripts/debian/init b/scripts/debian/init new file mode 100755 index 00000000..80705365 --- /dev/null +++ b/scripts/debian/init @@ -0,0 +1,106 @@ +#!/bin/sh +# +# chkconfig: 2345 99 01 +# description: @NAME@ + +### BEGIN INIT INFO +# Provides: @NAME@ +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start @NAME@ +# Description: Start @NAME@ +### END INIT INFO + +NAME="@NAME@" +USER="@USER@" +GROUP="@GROUP@" +LOGDIR="@DEST_LOG_DIR@" +PIDDIR="@DEST_PID_DIR@" +PIDFILE="@DEST_PID_PATH@" +BINFILE="@DEST_BIN_PATH@" +CONFFILE="@DEST_CONFIG_PATH@" +CMD="start-stop-daemon --verbose --pidfile $PIDFILE" + +create_dir() { + if [ ! -d $1 ]; then + mkdir -p $1 + chown $USER:$GROUP $1 + fi +} + +do_action() { + echo -n "$1 $NAME: " + ERROR=$($CMD $2 2>&1) + EXIT=$? + if [ $EXIT -eq 0 ]; then + echo "OK" + else + echo "FAIL" + if [ -n "$ERROR" ]; then + echo "$ERROR" + fi + fi + return $EXIT +} + +start() { + create_dir $LOGDIR + create_dir $PIDDIR + # temporary unlimit core file size for debug + ulimit -c unlimited + do_action "Starting" "--exec $BINFILE --chuid $USER:$GROUP --start -- $CONFFILE" +} + +stop() { + do_action "Stopping" "--stop" +} + +reload() { + do_action "Reloading" "--signal HUP --stop" +} + +status() { + ERROR=$($CMD --status 2>&1) + EXIT=$? + case $EXIT in + 0) + echo "$NAME is running (pid $(cat $PIDFILE))" + ;; + 1) + echo "$NAME is not running but pid file $PIDFILE exist" + ;; + 2) + echo "$NAME is not running" + ;; + *) + echo "unable to determine $NAME status: $ERROR" + ;; + esac + return $EXIT +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|force-reload) + stop && start + ;; + reload) + reload + ;; + status) + status + ;; + *) + echo "Usage: $0 {start|stop|restart|reload|force-reload|status}" + exit 1 + ;; +esac + +exit $? diff --git a/scripts/debian/install b/scripts/debian/install new file mode 100644 index 00000000..42017d50 --- /dev/null +++ b/scripts/debian/install @@ -0,0 +1,4 @@ +@LOCAL_BIN_FILE@ @DEST_BIN_DIR@ +@RENDERED_INIT_FILE@ @DEST_INIT_DIR@ +@RENDERED_CONFIG_FILE@ @DEST_CONFIG_DIR@ +@RENDERED_LOGROTATE_FILE@ @DEST_LOGROTATE_DIR@ diff --git a/scripts/debian/logrotate b/scripts/debian/logrotate new file mode 100644 index 00000000..ce677c54 --- /dev/null +++ b/scripts/debian/logrotate @@ -0,0 +1,8 @@ +@DEST_LOG_DIR@/@NAME@*.log { + daily + rotate 30 + copytruncate + delaycompress + missingok + create 640 @USER@ @GROUP@ +} diff --git a/scripts/debian/rules b/scripts/debian/rules new file mode 100755 index 00000000..800b7fd4 --- /dev/null +++ b/scripts/debian/rules @@ -0,0 +1,12 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# NOTE: Only TABs allowed here !!! + +override_dh_strip: + dh_strip --dbg-package=@NAME@-dbg + +override_dh_auto_install: + dh_auto_install --destdir=debian/@NAME@ + +%: + dh $@ diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 58d0b2bd..0aa62029 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -1,5 +1,5 @@ -set(od_binary odissey) +set(od_binary ${CMAKE_PROJECT_NAME}) set(od_src pid.c log_file.c