diff --git a/Makefile b/Makefile index ce90576..52e4a36 100644 --- a/Makefile +++ b/Makefile @@ -2,9 +2,11 @@ GO = go GOCCFLAGS = -v GOLDFLAGS = -ldflags="-s -w" -PREFIX = /usr/local - +PREFIX = /usr/local PROGRAM_NAME=eosio-api-healthcheck +export GOOS = $(shell go env GOOS) +export GOARCH = $(shell go env GOARCH) + SOURCES=src/main.go src/server.go src/parse_request.go .PHONY: all build/$(PROGRAM_NAME) clean @@ -18,18 +20,21 @@ build/$(PROGRAM_NAME) : $(SOURCES) test: $(GO) test -v ./... -info-file : - echo PACKAGE_NAME=\"$(PROGRAM_NAME)\" "\n"\ - PACKAGE_DESCRIPTION=\"HAproxy healthcheck program for EOSIO API.\" "\n"\ - PACKAGE_VERSION=\"1.2.2\" "\n"\ - PACKAGE_PREFIX=\"$(PREFIX:/%=%)\" "\n"\ - PACKAGE_PROGRAM=\"build/$(PROGRAM_NAME)\" > scripts/pkg_info +install: build + PREFIX=$(PREFIX) DESTDIR=$(DESTDIR) scripts/install.sh $(GOOS) -package_deb: info-file - ./scripts/build.sh deb $(realpath build) +package: + PKGROOT=$(DESTDIR) BUILDDIR=$(realpath build) scripts/package.sh $(PKGTYPE) -package_freebsd: info-file - ./scripts/build.sh freebsd $(realpath build) +package_debian: PKGTYPE = debian +package_debian: GOOS = linux +package_debian: DESTDIR = build/debroot +package_debian: install package + +package_freebsd: PKGTYPE = freebsd +package_freebsd: GOOS = freebsd +package_freebsd: DESTDIR = build/freebsdroot +package_freebsd: install package clean: $(GO) clean diff --git a/scripts/build.sh b/scripts/build.sh deleted file mode 100755 index f4914b7..0000000 --- a/scripts/build.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash - -############################ -# Read cli args # -############################ - -if [ $# -lt 2 ]; then - echo "$0 " - exit 1 -fi - -PKG_TYPE=$1 -BUILD_DIR=$2 - -############################ -# Exported variables. # -############################ - -export BASE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -export TEMPLATE_DIR=${BASE_DIR}/templates - -set -o allexport -# Package info -source ${BASE_DIR}/pkg_info -# Build info -source ${BUILD_DIR}/.buildinfo -set +o allexport - -# Directories. -export PACKAGE_BINDIR=${PACKAGE_PREFIX}/bin -export PACKAGE_ETCDIR=etc/${PACKAGE_NAME} -export PACKAGE_LOGDIR=/var/log -export PACKAGE_LOGFILE=${PACKAGE_LOGDIR}/${PACKAGE_NAME}.log -export PACKAGE_SHAREDIR=${PACKAGE_PREFIX}/share/${PACKAGE_NAME} -export PACKAGE_TMPDIR="${BUILD_DIR}/pkg_${PKG_TYPE}" -export BUILD_DIR - -############################ -# Run script # -############################ - -PKG_SCRIPT="${BASE_DIR}/build_${PKG_TYPE}.sh" - -# Check and call script -if [ ! -x $PKG_SCRIPT ]; then - echo "$PKG_SCRIPT not found" - exit 1 -fi - -echo -e "[\e[34m::\e[0m] Building package for: ${PKG_TYPE}" - -$PKG_SCRIPT diff --git a/scripts/build_deb.sh b/scripts/build_deb.sh deleted file mode 100755 index e7deefa..0000000 --- a/scripts/build_deb.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bash - -PACKAGE_SYSUNITDIR=etc/systemd/system -PACKAGE_RSYSLOGDIR=etc/rsyslog.d -PACKAGE_LOGROTATEDIR=etc/logrotate.d - -if [[ -f /etc/upstream-release/lsb-release ]]; then - source /etc/upstream-release/lsb-release -elif [[ -f /etc/lsb-release ]]; then - source /etc/lsb-release -else - echo "ERROR: could not determine debian release." - exit 1 -fi - -DISTRIB_ID=$(echo $DISTRIB_ID | tr '[:upper:]' '[:lower:]') - -# Default to 1 if no release is set. -if [[ -z $RELEASE ]]; then - RELEASE="1" -fi - -PACKAGE_FULLNAME="${PACKAGE_NAME}_${PACKAGE_VERSION}-${RELEASE}-${DISTRIB_ID}-${DISTRIB_RELEASE}_amd64" - -rm -fr ${PACKAGE_TMPDIR} - -# Create debian files. -mkdir -p ${PACKAGE_TMPDIR}/DEBIAN -echo "Package: ${PACKAGE_NAME} -Version: ${PACKAGE_VERSION}-${RELEASE} -Section: introspection -Priority: optional -Architecture: amd64 -Homepage: https://github.com/eosswedenorg/eos-api-healthcheck -Maintainer: Henrik Hautakoski -Description: ${PACKAGE_DESCRIPTION}" &> ${PACKAGE_TMPDIR}/DEBIAN/control - -cat ${PACKAGE_TMPDIR}/DEBIAN/control - -# Create service file -mkdir -p ${PACKAGE_TMPDIR}/${PACKAGE_SYSUNITDIR} -cat ${TEMPLATE_DIR}/sysunit.service \ - | sed "s~{{ PACKAGE_NAME }}~${PACKAGE_NAME}~" \ - | sed "s~{{ DESCRIPTION }}~${PACKAGE_DESCRIPTION}~" \ - | sed "s~{{ PROGRAM }}~/${PACKAGE_PREFIX}/bin/${PACKAGE_NAME}~" \ - > ${PACKAGE_TMPDIR}/${PACKAGE_SYSUNITDIR}/${PACKAGE_NAME}.service - -# Create rsyslog file -mkdir -p ${PACKAGE_TMPDIR}/${PACKAGE_RSYSLOGDIR} -cat ${TEMPLATE_DIR}/rsyslog.conf \ - | sed "s~{{ PROGRAM }}~${PACKAGE_NAME}~" \ - | sed "s~{{ LOG_FILE }}~${PACKAGE_LOGFILE}~" \ - > ${PACKAGE_TMPDIR}/${PACKAGE_RSYSLOGDIR}/49-${PACKAGE_NAME}.conf - -# Create logrotate file -mkdir -p ${PACKAGE_TMPDIR}/${PACKAGE_LOGROTATEDIR} -cat ${TEMPLATE_DIR}/logrotate.conf \ - | sed "s~{{ LOG_FILE }}~${PACKAGE_LOGFILE}~" \ - > ${PACKAGE_TMPDIR}/${PACKAGE_LOGROTATEDIR}/${PACKAGE_NAME}.conf -chmod 644 ${PACKAGE_TMPDIR}/${PACKAGE_LOGROTATEDIR}/${PACKAGE_NAME}.conf - -# Cerate config file -mkdir -p ${PACKAGE_TMPDIR}/${PACKAGE_ETCDIR} -cat ${TEMPLATE_DIR}/config \ - | sed "s~{{ PACKAGE_NAME }}~${PACKAGE_NAME}~" \ - > ${PACKAGE_TMPDIR}/${PACKAGE_ETCDIR}/env - -# Copy program -mkdir -p ${PACKAGE_TMPDIR}/${PACKAGE_BINDIR} -cp ${BASE_DIR}/../${PACKAGE_PROGRAM} ${PACKAGE_TMPDIR}/${PACKAGE_BINDIR}/${PACKAGE_NAME} - -# Copy files. -mkdir -p ${PACKAGE_TMPDIR}/${PACKAGE_SHAREDIR} -cp ${BASE_DIR}/../README.md ${PACKAGE_TMPDIR}/${PACKAGE_SHAREDIR} - -fakeroot dpkg-deb --build ${PACKAGE_TMPDIR} ${BUILD_DIR}/${PACKAGE_FULLNAME}.deb diff --git a/scripts/build_freebsd.sh b/scripts/build_freebsd.sh deleted file mode 100755 index 694186b..0000000 --- a/scripts/build_freebsd.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# Simple script to create a tar archive for FreeBSD - -PACKAGE_TMPDIR="${PACKAGE_TMPDIR}/freebsd" -PACKAGE_RCDIR=/etc/rc.d -PACKAGE_NEWSYSLOGDIR=etc/newsyslog.conf.d - -# Common variables -PID_FILE=/var/run/${PACKAGE_NAME}.pid - -############################ -# Create rc file # -############################ - -# rc does not like "-" in the filename. -RC_NAME=$(echo ${PACKAGE_NAME} | sed "s~-~_~g") - -mkdir -p ${PACKAGE_TMPDIR}/${PACKAGE_RCDIR} -cat ${TEMPLATE_DIR}/rc.conf \ - | sed "s~{{ RC_NAME }}~${RC_NAME}~g" \ - | sed "s~{{ PID_FILE }}~${PID_FILE}~g" \ - | sed "s~{{ LOG_FILE }}~${PACKAGE_LOGFILE}~" \ - | sed "s~{{ DESCRIPTION }}~${PACKAGE_DESCRIPTION}~" \ - | sed "s~{{ PROGRAM }}~/${PACKAGE_BINDIR}/${PACKAGE_NAME}~" \ - > ${PACKAGE_TMPDIR}/${PACKAGE_RCDIR}/${RC_NAME} - -# Must be executable. -chmod 755 ${PACKAGE_TMPDIR}/${PACKAGE_RCDIR}/${RC_NAME} - -############################ -# Create newsyslog config # -############################ - -mkdir -p ${PACKAGE_TMPDIR}/${PACKAGE_NEWSYSLOGDIR} -cat ${TEMPLATE_DIR}/newsyslog.conf \ - | sed "s~{{ LOG_FILE }}~${PACKAGE_LOGFILE}~" \ - | sed "s~{{ PID_FILE }}~${PID_FILE}~g" \ - > ${PACKAGE_TMPDIR}/${PACKAGE_NEWSYSLOGDIR}/${PACKAGE_NAME}.conf - - -############################ -# Copy binary # -############################ - -mkdir -p ${PACKAGE_TMPDIR}/${PACKAGE_BINDIR} -cp ${BASE_DIR}/../${PACKAGE_PROGRAM} ${PACKAGE_TMPDIR}/${PACKAGE_BINDIR} - -############################ -# Create archive # -############################ - -TAR_FILENAME="${PACKAGE_NAME}-${PACKAGE_VERSION}-freebsd-${GOARCH}.tar.gz" - -tar -C ${PACKAGE_TMPDIR} --owner root --group root -zcvf ${BUILD_DIR}/${TAR_FILENAME} . diff --git a/scripts/info.sh b/scripts/info.sh new file mode 100644 index 0000000..1bc65b9 --- /dev/null +++ b/scripts/info.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Info +PROGRAM_NAME=eosio-api-healthcheck +PROGRAM_VERSION=1.2.2 +PROGRAM_DESCRIPTION="HAproxy healthcheck program for EOSIO API." diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 0000000..ca5300b --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +############################ +# Read cli args # +############################ + +if [ $# -lt 1 ]; then + echo "$0 " + exit 1 +fi + +SYSTEM_TYPE=$1 + +if [ $# -gt 1 ]; then + PREFIX=$2 +fi + +if [ $# -gt 2 ]; then + DESTDIR=$3 +fi + +############################ +# Exported variables. # +############################ + +export BASE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +export TEMPLATE_DIR=${BASE_DIR}/templates +export BUILD_DIR=${BASE_DIR}/../build + +# Export info variables +set -o allexport +source ${BASE_DIR}/info.sh +set +o allexport + +# Directories. +export DESTDIR +export PREFIX +export BINDIR=${PREFIX}/bin +export ETCDIR=/etc/${PROGRAM_NAME} +export LOGDIR=/var/log +export LOGFILE=${LOGDIR}/${PROGRAM_NAME}.log +export SHAREDIR=${PREFIX}/share/${PROGRAM_NAME} + +############################ +# Run script # +############################ + +SCRIPT="${BASE_DIR}/install_${SYSTEM_TYPE}.sh" + +# Check and call script +if [ ! -x $SCRIPT ]; then + echo "$SCRIPT not found" + exit 1 +fi + +echo -e "[\e[34m::\e[0m] Installing for system: \e[32m${SYSTEM_TYPE}\e[0m" +if [ -n "$DESTDIR" ]; then + echo -e "[\e[34m::\e[0m] Installing with root: \e[32m${DESTDIR}\e[0m" +fi + +bash $SCRIPT diff --git a/scripts/install_freebsd.sh b/scripts/install_freebsd.sh new file mode 100755 index 0000000..fe10d61 --- /dev/null +++ b/scripts/install_freebsd.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# Simple script to install program files on FreeBSD systems + +RCDIR=${DESTDIR}/etc/rc.d +NEWSYSLOGDIR=${DESTDIR}/etc/newsyslog.conf.d + +# Common variables +PID_FILE=/var/run/${PROGRAM_NAME}.pid +# rc does not like "-" in the filename. +RC_NAME=$(echo ${PROGRAM_NAME} | sed "s~-~_~g") + +############################ +# Create rc file # +############################ + +mkdir -p ${RCDIR} +cat ${TEMPLATE_DIR}/rc.conf \ + | sed "s~{{ RC_NAME }}~${RC_NAME}~g" \ + | sed "s~{{ PID_FILE }}~${PID_FILE}~g" \ + | sed "s~{{ LOG_FILE }}~${LOGFILE}~" \ + | sed "s~{{ DESCRIPTION }}~${DESCRIPTION}~" \ + | sed "s~{{ PROGRAM }}~${BINDIR}/${PROGRAM_NAME}~" \ + > ${RCDIR}/${RC_NAME} + +# Must be executable. +chmod 755 ${RCDIR}/${RC_NAME} + +############################ +# Create newsyslog config # +############################ + +mkdir -p ${NEWSYSLOGDIR} +cat ${TEMPLATE_DIR}/newsyslog.conf \ + | sed "s~{{ LOG_FILE }}~${LOGFILE}~" \ + | sed "s~{{ PID_FILE }}~${PID_FILE}~g" \ + > ${NEWSYSLOGDIR}/${PROGRAM_NAME}.conf + + +############################ +# Copy binary # +############################ + +mkdir -p ${DESTDIR}/${BINDIR} +cp ${BUILD_DIR}/${PROGRAM_NAME} ${DESTDIR}${BINDIR}/${PROGRAM_NAME} diff --git a/scripts/install_linux.sh b/scripts/install_linux.sh new file mode 100755 index 0000000..0b0a838 --- /dev/null +++ b/scripts/install_linux.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# Script to install program files on linux systems + +SYSUNITDIR=${DESTDIR}/etc/systemd/system +RSYSLOGDIR=${DESTDIR}/etc/rsyslog.d +LOGROTATEDIR=${DESTDIR}/etc/logrotate.d + +# Create service file +mkdir -p ${SYSUNITDIR} +cat ${TEMPLATE_DIR}/sysunit.service \ + | sed "s~{{ PROGRAM_NAME }}~${PROGRAM_NAME}~" \ + | sed "s~{{ DESCRIPTION }}~${DESCRIPTION}~" \ + | sed "s~{{ PROGRAM }}~${BINDIR}/${PROGRAM_NAME}~" \ + > ${SYSUNITDIR}/${PROGRAM_NAME}.service + +# Create systemd config file +mkdir -p ${DESTDIR}${ETCDIR} +cat ${TEMPLATE_DIR}/config \ + | sed "s~{{ PROGRAM_NAME }}~${PROGRAM_NAME}~" \ + > ${DESTDIR}${ETCDIR}/env + +# Create rsyslog file +mkdir -p ${RSYSLOGDIR} +cat ${TEMPLATE_DIR}/rsyslog.conf \ + | sed "s~{{ PROGRAM }}~${PROGRAM_NAME}~" \ + | sed "s~{{ LOG_FILE }}~${LOGFILE}~" \ + > ${RSYSLOGDIR}/49-${PROGRAM_NAME}.conf + +# Create logrotate file +mkdir -p ${LOGROTATEDIR} +cat ${TEMPLATE_DIR}/logrotate.conf \ + | sed "s~{{ LOG_FILE }}~${LOGFILE}~" \ + > ${LOGROTATEDIR}/${PROGRAM_NAME}.conf +chmod 644 ${LOGROTATEDIR}/${PROGRAM_NAME}.conf + +# Copy program +mkdir -p ${DESTDIR}/${BINDIR} +cp ${BUILD_DIR}/${PROGRAM_NAME} ${DESTDIR}${BINDIR}/${PROGRAM_NAME} + +# Copy files. +mkdir -p ${DESTDIR}${SHAREDIR} +cp ${BASE_DIR}/../README.md ${DESTDIR}${SHAREDIR} diff --git a/scripts/package.sh b/scripts/package.sh new file mode 100755 index 0000000..c640143 --- /dev/null +++ b/scripts/package.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +############################ +# Read cli args # +############################ + +if [ $# -lt 1 ]; then + echo "$0 " + exit 1 +fi + +PKG_TYPE=$1 + +# Setup vars +export BASE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +# export +export PKGROOT +export BUILDDIR + +############################ +# Run script # +############################ + +SCRIPT="${BASE_DIR}/package_${PKG_TYPE}.sh" + +# Check and call script +if [ ! -x $SCRIPT ]; then + echo "$SCRIPT not found" + exit 1 +fi + +# Export info variables +set -o allexport +source ${BASE_DIR}/info.sh +set +o allexport + +bash $SCRIPT diff --git a/scripts/package_debian.sh b/scripts/package_debian.sh new file mode 100755 index 0000000..1a7e9df --- /dev/null +++ b/scripts/package_debian.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +if [[ -f /etc/upstream-release/lsb-release ]]; then + source /etc/upstream-release/lsb-release +elif [[ -f /etc/lsb-release ]]; then + source /etc/lsb-release +else + echo "ERROR: could not determine debian release." + exit 1 +fi + +DISTRIB_ID=$(echo $DISTRIB_ID | tr '[:upper:]' '[:lower:]') + +# Default to 1 if no release is set. +if [[ -z $RELEASE ]]; then + RELEASE="1" +fi + +PACKAGE_FULLNAME="${PROGRAM_NAME}_${PROGRAM_VERSION}-${RELEASE}-${DISTRIB_ID}-${DISTRIB_RELEASE}_amd64" + +# Create debian files. +mkdir -p ${PKGROOT}/DEBIAN +echo "Package: ${PROGRAM_NAME} +Version: ${PROGRAM_VERSION}-${RELEASE} +Section: introspection +Priority: optional +Architecture: amd64 +Homepage: https://github.com/eosswedenorg/eos-api-healthcheck +Maintainer: Henrik Hautakoski +Description: ${PROGRAM_DESCRIPTION}" &> ${PKGROOT}/DEBIAN/control + +cat ${PKGROOT}/DEBIAN/control + +fakeroot dpkg-deb --build ${PKGROOT} ${BUILDDIR}/${PACKAGE_FULLNAME}.deb diff --git a/scripts/package_freebsd.sh b/scripts/package_freebsd.sh new file mode 100755 index 0000000..92345b2 --- /dev/null +++ b/scripts/package_freebsd.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +PROGRAM_ARCH=$(go env GOARCH) +TAR_FILENAME="${PROGRAM_NAME}-${PROGRAM_VERSION}-freebsd-${PROGRAM_ARCH}.tar.gz" + +echo "Create archive: ${BUILDDIR}/${TAR_FILENAME}" +tar -C ${PKGROOT} --owner root --group root -zcvf ${BUILDDIR}/${TAR_FILENAME} . diff --git a/scripts/templates/config b/scripts/templates/config index c34ce2a..6ddab53 100644 --- a/scripts/templates/config +++ b/scripts/templates/config @@ -1,7 +1,7 @@ -# Default settings for {{ PACKAGE_NAME }} +# Default settings for {{ PROGRAM_NAME }} # # This is sourced by the systemd unit file. -# Command line flags to pass to {{ PACKAGE_NAME }} +# Command line flags to pass to {{ PROGRAM_NAME }} # First is IP to listen to, second is port. #OPTS="127.0.0.1 1337" diff --git a/scripts/templates/sysunit.service b/scripts/templates/sysunit.service index 50c167b..44d356e 100644 --- a/scripts/templates/sysunit.service +++ b/scripts/templates/sysunit.service @@ -3,7 +3,7 @@ Description={{ DESCRIPTION }} After=network.target [Service] -EnvironmentFile=-/etc/{{ PACKAGE_NAME }}/env +EnvironmentFile=-/etc/{{ PROGRAM_NAME }}/env Type=simple ExecStart={{ PROGRAM }} $OPTS Restart=on-failure