#!/usr/bin/perl -w

=head1 NAME

    mk-mongodb-package-files - создание файлов для пакета с mongodb

=head1 DESCRIPTION

    config, init, logrotate, директория, 
    допустимые параметры:
    -d port=NNN - порт, который сервер будет слушить

=cut

use strict;
use warnings;

use SvnRelease::MkFiles;

my $mkfiles = SvnRelease::MkFiles->new(
    files => [
        {tmpl => 'init', file => "/etc/init/mongodb-[% instance %].conf", perm => 0755, },
        {tmpl => 'init_d', file => "/etc/init.d/mongodb-[% instance %]", perm => 0755, },
        {tmpl => 'config', file => "/etc/mongodb/[% instance %].conf", },
        {tmpl => 'default', file => "/etc/default/mongodb-[% instance %]", },
        {tmpl => 'logrotate_d', file => "/etc/logrotate.d/mongodb-[% instance %]", },
        {tmpl => 'debian_postinst', file => "/DEBIAN/postinst", perm => 0755, },
        ],
    templates_fh => \*DATA,
    substvars => {
        'mongodb:Depends' => join(', ',
                                'mongodb',
                                'logrotate',
            ),
        'mongodb:Conflicts' => 'apparmor',
    },
    );

my ($instance, @dummy) = $mkfiles->parse_options("instance_name");
if (@dummy || $instance !~ /^[a-z0-9_\-]+$/) {
    $mkfiles->usage();
}

$mkfiles->{vars}->{instance} = $instance;

$mkfiles->mk();

__DATA__



<< init
# Ubuntu upstart file at /etc/init/mongodb.conf

start on runlevel [2345]
stop on runlevel [06]

script
  ENABLE_MONGODB="yes"
  export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/xulrunner-`xulrunner --gre-version`
  if [ -f /etc/default/mongodb-[% instance %] ]; then . /etc/default/mongodb-[% instance %]; fi
  if [ -e /opt/mongodb-[% instance %]/mongod.lock ] ; then
	pid=`cat /opt/mongodb-[% instance %]/mongod.lock`; 
	cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
	if [ "$cmd" == "/usr/bin/mongod" ]; then 
	    echo "Mongodb already start"; 
	    exit 1; 
	else 
	    echo "Hmm..old pid.. i remove it"; 
	    rm  /opt/mongodb-[% instance %]/mongod.lock; 
	fi; 
    fi
  if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec  start-stop-daemon --start   --pidfile /var/run/mondodb-[% instance %].pid --chuid mongodb --exec  /usr/bin/mongod -- --config /etc/mongodb/[% instance %].conf; fi
end script



<< init_d
#!/bin/sh -e
# upstart-job
#
# Symlink target for initscripts that have been converted to Upstart.

set -e

INITSCRIPT="$(basename "$0")"
JOB="${INITSCRIPT%.sh}"

if [ "$JOB" = "upstart-job" ]; then
    if [ -z "$1" ]; then
        echo "Usage: upstart-job JOB COMMAND" 1>&2
	exit 1
    fi

    JOB="$1"
    INITSCRIPT="$1"
    shift
else
    if [ -z "$1" ]; then
        echo "Usage: $0 COMMAND" 1>&2
	exit 1
    fi
fi

COMMAND="$1"
shift


if [ -z "$DPKG_MAINTSCRIPT_PACKAGE" ]; then
	ECHO=echo
else
	ECHO=:
fi

$ECHO "Rather than invoking init scripts through /etc/init.d, use the service(8)"
$ECHO "utility, e.g. service $INITSCRIPT $COMMAND"

case $COMMAND in
status)
    $ECHO
    $ECHO "Since the script you are attempting to invoke has been converted to an"
    $ECHO "Upstart job, you may also use the $COMMAND(8) utility, e.g. $COMMAND $JOB"
    $COMMAND "$JOB"
    ;;
start|stop|restart)
    $ECHO
    $ECHO "Since the script you are attempting to invoke has been converted to an"
    $ECHO "Upstart job, you may also use the $COMMAND(8) utility, e.g. $COMMAND $JOB"
    PID=$(status "$JOB" 2>/dev/null | awk '/[0-9]$/ { print $NF }')
    if [ -z "$PID" ] && [ "$COMMAND" = "stop" ]; then
        exit 0
    elif [ -n "$PID" ] && [ "$COMMAND" = "start" ]; then
        exit 0
    elif [ -z "$PID" ] && [ "$COMMAND" = "restart" ]; then
        start "$JOB"
        exit 0
    fi
    $COMMAND "$JOB"
    ;;
reload|force-reload)
    $ECHO
    $ECHO "Since the script you are attempting to invoke has been converted to an"
    $ECHO "Upstart job, you may also use the $COMMAND(8) utility, e.g. $COMMAND $JOB"
    reload "$JOB"
    ;;
*)
    $ECHO
    $ECHO "The script you are attempting to invoke has been converted to an Upstart" 1>&2
    $ECHO "job, but $COMMAND is not supported for Upstart jobs." 1>&2
    exit 1
esac



<< config
port=[% port || 27017 %]
dbpath=/opt/mongodb-[% instance %]
logpath=/var/log/mongodb-[% instance %]/mongodb.log
logappend=true
oplogSize = 32768
syncdelay = 5
journal = true



<< default
ulimit -n 32768
ulimit -c unlimited



<< logrotate_d
# rotate mysql logs
/var/log/mongodb-[% instance %]/mongodb.log {
	daily
	rotate 7
	missingok
	create 640 mongodb root
	compress
	sharedscripts
	postrotate
		if [ -e /opt/mongodb-[% instance %]/mongod.lock ] ; then
			pid=`cat /opt/mongodb-[% instance %]/mongod.lock`;
			cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
			if [ "$cmd" == "/usr/bin/mongod" ]; then
				kill -USR1 $pid
			fi;
		fi
	endscript
}


<< debian_postinst
#!/bin/bash -e

. /usr/share/debconf/confmodule

# create dirs
mkdir -p /opt/mongodb-[% instance %]
chown -R mongodb:mongodb /opt/mongodb-[% instance %]

mkdir -p /var/log/mongodb-[% instance %]
chown -R mongodb:mongodb /var/log/mongodb-[% instance %]

# disable main mongodb
test -f /etc/default/mongodb && (grep -q ENABLE_MONGODB /etc/default/mongodb || echo ENABLE_MONGODB=no >>/etc/default/mongodb)


