From f248f32b8addebc36894eee466067e6c2bc5d509 Mon Sep 17 00:00:00 2001 From: Nick Altmann Date: Mon, 28 Sep 2015 21:17:17 +0300 Subject: [PATCH] Spec files for Redhat (Centos/Oracle Linux/Scientific Linux), Fedora --- packages/redhat_fedora/cgrates.init | 98 +++++++++++++++++++++ packages/redhat_fedora/cgrates.options | 9 ++ packages/redhat_fedora/cgrates.service | 15 ++++ packages/redhat_fedora/cgrates.spec | 114 +++++++++++++++++++++++++ packages/redhat_fedora/readme.txt | 24 ++++++ 5 files changed, 260 insertions(+) create mode 100644 packages/redhat_fedora/cgrates.init create mode 100644 packages/redhat_fedora/cgrates.options create mode 100644 packages/redhat_fedora/cgrates.service create mode 100644 packages/redhat_fedora/cgrates.spec create mode 100644 packages/redhat_fedora/readme.txt diff --git a/packages/redhat_fedora/cgrates.init b/packages/redhat_fedora/cgrates.init new file mode 100644 index 000000000..b7b1cf3bf --- /dev/null +++ b/packages/redhat_fedora/cgrates.init @@ -0,0 +1,98 @@ +#!/bin/bash +# +# Startup script for CGRateS +# +# chkconfig: - 85 15 +# description: Carrier Grade Real-time Charging System +# +# processname: cgr-engine +# pidfile: /var/run/cgrates.pid +# config: /etc/cgrates/cgrates.json +# +### BEGIN INIT INFO +# Provides: cgrates +# Required-Start: $local_fs $network $named +# Should-Start: mysqld postgresql +# Short-Description: start, stop CGRateS +# Description: Carrier Grade Real-time Charging System +### END INIT INFO + +# Source function library. +. /etc/rc.d/init.d/functions + +piddir="/var/run/cgrates" +pidfile="$piddir/cgrates.pid" + +lockfile="/var/lock/subsys/cgrates" + +OPTIONS="" +RETVAL=0 + +[ -f /etc/sysconfig/cgrates ] && . /etc/sysconfig/cgrates + +start() { + echo -n $"Starting cgrates: " + + # check whether CGRateS was already started + if status -p $pidfile cgr-engine > /dev/null 2>&1 ; then + echo -n "already running" && warning && echo + return 0 + fi + + mkdir -p $piddir + chown cgrates:cgrates $piddir + su cgrates -s /bin/sh -c "cgr-engine -pid=$pidfile $OPTIONS" 2>/dev/null & + RETVAL=$? + if [ $RETVAL = 0 ]; then + touch $lockfile + echo_success + else + echo_failure + fi + echo + return $RETVAL +} + +stop() { + echo -n $"Stopping cgrates: " + # check whether CGRateS is running + if ! status -p $pidfile cgrates > /dev/null 2>&1 ; then + echo -n "not running" && warning && echo + return 0 + fi + + killproc cgr-engine 2> /dev/null + RETVAL=$? + echo + [ $RETVAL = 0 ] && rm -f $lockfile $pidfile + return $RETVAL +} + +# See how we were called. +case "$1" in + start) + start + ;; + stop) + stop + ;; + status) + status -p $pidfile cgrates + RETVAL=$? + ;; + restart|reload) + stop + start + ;; + condrestart|try-restart) + if [ -f $pidfile ] ; then + stop + start + fi + ;; + *) + echo $"Usage: cgrates {start|stop|reload|restart|condrestart|status|help}" + RETVAL=2 +esac + +exit $RETVAL diff --git a/packages/redhat_fedora/cgrates.options b/packages/redhat_fedora/cgrates.options new file mode 100644 index 000000000..0ad1e198d --- /dev/null +++ b/packages/redhat_fedora/cgrates.options @@ -0,0 +1,9 @@ +# sysconfig file for CGRateS real-time charging system + +# what extra options to give cgrates binary? +# See cgr-engine -h for options +#OPTIONS='' + +# Don't forget to create an appropriate config file, +# else the CGRateS system will not start. + diff --git a/packages/redhat_fedora/cgrates.service b/packages/redhat_fedora/cgrates.service new file mode 100644 index 000000000..22dbefb67 --- /dev/null +++ b/packages/redhat_fedora/cgrates.service @@ -0,0 +1,15 @@ +[Unit] +Description=Carrier Grade Real-time Charging System +After=network.target mysqld.service postgresql.service redis.service + +[Service] +Type=simple +User=cgrates +Group=cgrates +EnvironmentFile=-/etc/sysconfig/cgrates +ExecStart=/usr/bin/cgr-engine $OPTIONS +Restart=always +TimeoutStopSec=30s + +[Install] +WantedBy=multi-user.target diff --git a/packages/redhat_fedora/cgrates.spec b/packages/redhat_fedora/cgrates.spec new file mode 100644 index 000000000..c10ef1d05 --- /dev/null +++ b/packages/redhat_fedora/cgrates.spec @@ -0,0 +1,114 @@ +%global version 0.9.1rc7 +%global git_commit cc3bebd90c24b187379027e6a618e206da89d7a9 + +%global git_short_commit %(c=%{git_commit}; echo ${c:0:7}) +%define debug_package %{nil} +%global _logdir /var/log/%name + +Name: cgrates +Version: %{version}.%{git_short_commit} +Release: 1%{dist} +Summary: Carrier Grade Real-time Charging System +License: GPLv3 +URL: https://github.com/cgrates/cgrates +Source0: https://github.com/cgrates/cgrates/archive/%{git_commit}.tar.gz + +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 +Requires(pre): shadow-utils +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +%else +Requires(post): chkconfig +Requires(preun):chkconfig +Requires(preun):initscripts +%endif + +%description +CGRateS is a very fast and easy scalable real-time charging system for Telecom environments. + +%prep +%setup -q -n %{name}-%{version} -c +mkdir -p src/github.com/cgrates +ln -sf ../../../%{name}-%{git_commit} src/github.com/cgrates/cgrates + +%pre +getent group %{name} >/dev/null || groupadd -r %{name} +getent passwd %{name} >/dev/null || \ +useradd -r -g %{name} -d %{_localstatedir}/run/%{name} -s /sbin/nologin \ +-c "CGRateS" %{name} 2>/dev/null || : + +%post +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 +if [ $1 -eq 1 ] ; then + # Initial installation + /bin/systemctl daemon-reload >/dev/null 2>&1 || : +fi +%else +/sbin/chkconfig --add %{name} +%endif +/bin/chown -R %{name}:%{name} %{_logdir} + +%preun +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 +if [ $1 -eq 0 ] ; then + # Package removal, not upgrade + /bin/systemctl --no-reload disable %{name}.service > /dev/null 2>&1 || : + /bin/systemctl stop %{name}.service > /dev/null 2>&1 || : +fi +%else +if [ $1 = 0 ]; then + /sbin/service %{name} stop > /dev/null 2>&1 + /sbin/chkconfig --del %{name} +fi +%endif + +%build +export GO15VENDOREXPERIMENT=1 +export GOPATH=$RPM_BUILD_DIR/%{name}-%{version} +cd $RPM_BUILD_DIR/%{name}-%{version}/src/github.com/cgrates/cgrates +go get -v github.com/Masterminds/glide +$GOPATH/bin/glide up +./build.sh + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf src/github.com/cgrates/cgrates/data/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +install -D -m 0644 -p src/github.com/cgrates/cgrates/data/conf/%{name}/%{name}.json $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/%{name}.json +install -D -m 0755 -p bin/cgr-console $RPM_BUILD_ROOT%{_bindir}/cgr-console +install -D -m 0755 -p bin/cgr-engine $RPM_BUILD_ROOT%{_bindir}/cgr-engine +install -D -m 0755 -p bin/cgr-loader $RPM_BUILD_ROOT%{_bindir}/cgr-loader +install -D -m 0755 -p bin/cgr-tester $RPM_BUILD_ROOT%{_bindir}/cgr-tester +mkdir -p $RPM_BUILD_ROOT%{_logdir}/cdrc/in +mkdir -p $RPM_BUILD_ROOT%{_logdir}/cdrc/out +mkdir -p $RPM_BUILD_ROOT%{_logdir}/cdre/csv +mkdir -p $RPM_BUILD_ROOT%{_logdir}/cdre/fwv +mkdir -p $RPM_BUILD_ROOT%{_logdir}/history +install -D -m 0644 -p src/github.com/cgrates/cgrates/packages/redhat_fedora/%{name}.options $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/%{name} +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 + install -D -m 0644 -p src/github.com/cgrates/cgrates/packages/redhat_fedora/%{name}.service $RPM_BUILD_ROOT%{_unitdir}/%{name}.service +%else + install -D -m 0755 -p src/github.com/cgrates/cgrates/packages/redhat_fedora/%{name}.init $RPM_BUILD_ROOT%{_initrddir}/%{name} +%endif + +%files +%defattr(-,root,root,-) +%{_datarootdir}/%{name}/* +%{_bindir}/* +%config(noreplace) %{_sysconfdir}/%{name}/%{name}.json +%{_logdir}/* +%{_sysconfdir}/sysconfig/%{name} +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 + %{_unitdir}/%{name}.service +%else + %{_initrddir}/%{name} +%endif + +%clean +rm -rf $RPM_BUILD_DIR/%{name}-%{version} +rm -rf $RPM_BUILD_ROOT + +%changelog +* Mon Sep 28 2015 Nick Altmann 0.9.1rc7-1 +- Initial rhel/fedora specification diff --git a/packages/redhat_fedora/readme.txt b/packages/redhat_fedora/readme.txt new file mode 100644 index 000000000..bacfcd3e0 --- /dev/null +++ b/packages/redhat_fedora/readme.txt @@ -0,0 +1,24 @@ +Building package for RHEL/Centos/Oracle Linux/Scientific Linux/Fedora + +PREREQUISITES +1. Go 1.5 or newer: + # wget https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz + # tar -C /usr/local -xzf go1.5.1.linux-amd64.tar.gz + # export GOROOT=/usr/local/go + # export PATH=$GOROOT/bin:$GOPATH/bin:$PATH + +2. Git 1.8 or newer for older systems. + +3. rpm-build and make packages. + # yum install rpm-build make + +BUILD +1. Create build environment: + - Make directories + # mkdir -p $HOME/cgr_build/{BUILD,RPMS,SOURCES,SPECS,SRPMS} + - Download source file + # wget -P $HOME/cgr_build/SOURCES https://github.com/cgrates/cgrates/archive/[GIT_COMMIT].tar.gz + - Place cgrates.spec file into $HOME/cgr_build/SPECS +2. Build: + # cd $HOME/cgr_build + # rpmbuild -bb --define "_topdir $HOME/cgr_build" SPECS/cgrates.spec