diff --git a/.travis.yml b/.travis.yml index 1ac4a74..e4662b5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,9 +14,25 @@ jobs: - name: "Ubuntu 20.04 | GCC" dist: focal compiler: gcc + - name: "Debian 11 | GCC" + dist: bullseye + compiler: gcc + - name: "Debian 11 | Clang" + dist: bullseye + compiler: clang + - name: "Debian 10 | GCC" + dist: buster + compiler: gcc + - name: "Debian 10 | Clang" + dist: buster + compiler: clang script: - set -e # If any step reports a problem consider the whole build a failure +- sudo apt update +- sudo apt install -y shellcheck +- shellcheck debian/post* debian/pre* - ./build.sh - ./FlashMQBuildRelease/FlashMQ --version +- sudo dpkg -i ./FlashMQBuildRelease/*.deb - set +e # Prevent Travis internals from breaking our build, see https://github.com/travis-ci/travis-ci/issues/891 diff --git a/CMakeLists.txt b/CMakeLists.txt index e872376..5b8be89 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,11 @@ cmake_minimum_required(VERSION 3.5) +cmake_policy(SET CMP0048 NEW) include(CheckCXXCompilerFlag) -project(FlashMQ LANGUAGES CXX) +project(FlashMQ VERSION 0.9.2 LANGUAGES CXX) add_definitions(-DOPENSSL_API_COMPAT=0x10100000L) +add_definitions(-DFLASHMQ_VERSION=\"${PROJECT_VERSION}\") set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -95,3 +97,23 @@ add_executable(FlashMQ ) target_link_libraries(FlashMQ pthread dl ssl crypto) + +install(TARGETS FlashMQ + RUNTIME DESTINATION "/usr/bin/") + +install(DIRECTORY DESTINATION "/var/lib/flashmq") +install(DIRECTORY DESTINATION "/var/log/flashmq") +install(FILES flashmq.conf DESTINATION "/etc/flashmq") +install(FILES debian/flashmq.service DESTINATION "/lib/systemd/system") + +SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/debian/conffiles;${CMAKE_CURRENT_SOURCE_DIR}/debian/preinst;${CMAKE_CURRENT_SOURCE_DIR}/debian/postinst;${CMAKE_CURRENT_SOURCE_DIR}/debian/postrm;${CMAKE_CURRENT_SOURCE_DIR}/debian/prerm") + +SET(CPACK_GENERATOR "DEB") +SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Wiebe Cazemier ") +SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "Light-weight, high performance MQTT server capable of million+ messages per second.") +SET(CPACK_PACKAGE_HOMEPAGE_URL "https://www.flashmq.org/") +SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libssl1.1 (>= 1.1.0)") +SET(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) +SET(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) +SET(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) +INCLUDE(CPack) diff --git a/build.sh b/build.sh index 4d00cef..29cdf44 100755 --- a/build.sh +++ b/build.sh @@ -23,3 +23,4 @@ cd "$BUILD_DIR" cmake -DCMAKE_BUILD_TYPE="$BUILD_TYPE" "$thisdir" make +cpack diff --git a/debian/conffiles b/debian/conffiles new file mode 100644 index 0000000..3dc4eed --- /dev/null +++ b/debian/conffiles @@ -0,0 +1 @@ +/etc/flashmq/flashmq.conf diff --git a/debian/flashmq.service b/debian/flashmq.service new file mode 100644 index 0000000..b31b551 --- /dev/null +++ b/debian/flashmq.service @@ -0,0 +1,16 @@ +[Unit] +Description=FlashMQ MQTT server +After=network.target + +[Service] +Type=simple +User=root +Group=root +LimitNOFILE=1000000 +ExecStart=/usr/bin/FlashMQ --config-file /etc/flashmq/flashmq.conf +ExecReload=/bin/kill -HUP $MAINPID +Restart=on-failure +RestartSec=5s + +[Install] +WantedBy=multi-user.target diff --git a/debian/postinst b/debian/postinst new file mode 100755 index 0000000..d6b79e6 --- /dev/null +++ b/debian/postinst @@ -0,0 +1,13 @@ +#!/bin/bash -e + +if ! systemctl is-enabled --quiet flashmq.service; then + echo "Enabling FlashMQ systemd service." + systemctl enable flashmq.service +fi + +if ! systemctl is-active --quiet flashmq.service; then + echo "FlashMQ is not running, so we're starting it." + systemctl start flashmq.service +else + echo "FlashMQ is already running." +fi diff --git a/debian/postrm b/debian/postrm new file mode 100755 index 0000000..1c89c19 --- /dev/null +++ b/debian/postrm @@ -0,0 +1,6 @@ +#!/bin/bash -e + +if [[ "$1" != "upgrade" ]]; then + echo "Disabling FlashMQ systemd service" + systemctl disable flashmq.service +fi diff --git a/debian/preinst b/debian/preinst new file mode 100755 index 0000000..9947c84 --- /dev/null +++ b/debian/preinst @@ -0,0 +1,11 @@ +#!/bin/bash -e + +if [[ ! -f /etc/lsb-release || ! -f /etc/debian_version ]]; then + echo "This is not a Debian or Ubuntu based system? Hmm" + exit 1 +fi + +if ! command -v systemctl -v &> /dev/null; then + echo "This is not a systemd-based system. File a bug-report at https://github.com/halfgaar/FlashMQ/issues" + exit 1 +fi diff --git a/debian/prerm b/debian/prerm new file mode 100755 index 0000000..a4afa9c --- /dev/null +++ b/debian/prerm @@ -0,0 +1,12 @@ +#!/bin/bash -e + +echo "Stopping FlashMQ systemd service" + +if systemctl is-active --quiet flashmq.service; then + systemctl stop flashmq.service +fi + +if systemctl is-active --quiet flashmq.service; then + echo "FlashMQ failed to stop, according to systemctl." + exit 1 +fi diff --git a/flashmq.conf b/flashmq.conf new file mode 100644 index 0000000..eff8ef7 --- /dev/null +++ b/flashmq.conf @@ -0,0 +1,4 @@ +# https://www.flashmq.org/documentation/config-file/ + +log_file /var/log/flashmq.log +storage_dir /var/lib/flashmq diff --git a/main.cpp b/main.cpp index 8a5c4cf..5a4c237 100644 --- a/main.cpp +++ b/main.cpp @@ -88,9 +88,9 @@ int main(int argc, char *argv[]) sse = "with SSE4.2 support"; #endif #ifdef NDEBUG - logger->logf(LOG_NOTICE, "Starting FlashMQ version %s, release build %s.", VERSION, sse.c_str()); + logger->logf(LOG_NOTICE, "Starting FlashMQ version %s, release build %s.", FLASHMQ_VERSION, sse.c_str()); #else - logger->logf(LOG_NOTICE, "Starting FlashMQ version %s, debug build %s.", VERSION, sse.c_str()); + logger->logf(LOG_NOTICE, "Starting FlashMQ version %s, debug build %s.", FLASHMQ_VERSION, sse.c_str()); #endif mainApp->start(); } diff --git a/mainapp.cpp b/mainapp.cpp index 197f3dc..73bdaed 100644 --- a/mainapp.cpp +++ b/mainapp.cpp @@ -242,7 +242,7 @@ void MainApp::doHelp(const char *arg) void MainApp::showLicense() { - printf("FlashMQ Version %s\n", VERSION); + printf("FlashMQ Version %s\n", FLASHMQ_VERSION); puts("Copyright (C) 2021 Wiebe Cazemier."); puts("License AGPLv3: GNU AGPL version 3. ."); puts(""); diff --git a/mainapp.h b/mainapp.h index aa0f729..616e53a 100644 --- a/mainapp.h +++ b/mainapp.h @@ -42,8 +42,6 @@ License along with FlashMQ. If not, see . #include "scopedsocket.h" #include "oneinstancelock.h" -#define VERSION "0.9.2" - class MainApp { #ifdef TESTING