184 lines
5.9 KiB
Python
184 lines
5.9 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
################################################################################
|
|
#
|
|
# Rattail -- Retail Software Framework
|
|
# Copyright © 2010-2012 Lance Edgar
|
|
#
|
|
# This file is part of Rattail.
|
|
#
|
|
# Rattail is free software: you can redistribute it and/or modify it under the
|
|
# terms of the GNU Affero General Public License as published by the Free
|
|
# Software Foundation, either version 3 of the License, or (at your option)
|
|
# any later version.
|
|
#
|
|
# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
|
# more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with Rattail. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
################################################################################
|
|
|
|
import shutil
|
|
|
|
from fabric.api import *
|
|
from fabric.contrib.files import exists, upload_template
|
|
|
|
|
|
@task
|
|
def release():
|
|
"""
|
|
Release a new version of `rattail`.
|
|
"""
|
|
|
|
shutil.rmtree('rattail.egg-info')
|
|
local('python setup.py sdist --formats=gztar register upload')
|
|
|
|
|
|
def get_overwrite(overwrite=None):
|
|
"""
|
|
Obtain a canonical "overwrite" directive.
|
|
"""
|
|
|
|
if overwrite in (True, False):
|
|
return overwrite
|
|
|
|
if overwrite is None:
|
|
overwrite = raw_input("Overwrite as needed? [y/N]: ")
|
|
overwrite = overwrite.strip().lower()
|
|
else:
|
|
overwrite = overwrite.lower()
|
|
return overwrite.startswith('y')
|
|
|
|
|
|
def prettify(text):
|
|
"""
|
|
Return a "prettified" version of text.
|
|
|
|
This is basically copied from ``edbob.util``.
|
|
"""
|
|
|
|
text = text.replace('_', ' ')
|
|
text = text.replace('-', ' ')
|
|
words = text.split()
|
|
return ' '.join([x.capitalize() for x in words])
|
|
|
|
|
|
@task
|
|
def create_user(overwrite=None):
|
|
"""
|
|
Create the 'rattail' user account.
|
|
"""
|
|
|
|
overwrite = get_overwrite(overwrite)
|
|
|
|
with settings(warn_only=True):
|
|
result = run('id rattail')
|
|
|
|
if result.return_code: # user doesn't exist
|
|
sudo('adduser --system --home /var/lib/rattail --group rattail')
|
|
|
|
elif overwrite:
|
|
sudo('usermod --home /var/lib/rattail --move-home --shell /bin/false rattail')
|
|
|
|
|
|
def configure_rattail_lib(overwrite=None):
|
|
"""
|
|
Configure basic Rattail "library" files.
|
|
"""
|
|
|
|
overwrite = get_overwrite(overwrite)
|
|
|
|
if not exists('/etc/default/rattail') or overwrite:
|
|
put('data/etc/default/rattail', '/etc/default', use_sudo=True)
|
|
sudo('chown root: /etc/default/rattail')
|
|
|
|
if not exists('/var/lib/rattail'):
|
|
create_user(overwrite=True)
|
|
|
|
if not exists('/var/lib/rattail/init.d'):
|
|
sudo('mkdir /var/lib/rattail/init.d', user='rattail')
|
|
|
|
if not exists('/var/run/rattail'):
|
|
sudo('mkdir /var/run/rattail')
|
|
sudo('chown rattail: /var/run/rattail')
|
|
|
|
|
|
@task
|
|
def configure_filemon(name=None, desc=None, envdir=None, overwrite=None):
|
|
"""
|
|
Configure a Rattail File Monitor daemon.
|
|
"""
|
|
|
|
if name is None:
|
|
default_name = 'rattail-filemon'
|
|
name = raw_input("Enter a name for the service [{0}]: ".format(default_name))
|
|
name = name.strip() or default_name
|
|
|
|
if desc is None:
|
|
default_desc = prettify(name.replace('filemon', 'file-monitor'))
|
|
desc = raw_input("Enter a description [{0}]: ".format(default_desc))
|
|
desc = desc.strip() or default_desc
|
|
|
|
if envdir is None:
|
|
default_envdir = name.replace('-filemon', '')
|
|
default_envdir = default_envdir.replace('-', '.')
|
|
default_envdir = '/srv/envs/{0}'.format(default_envdir)
|
|
envdir = raw_input("Enter a virtual environment path [{0}]: ".format(default_envdir))
|
|
envdir = envdir.strip() or default_envdir
|
|
|
|
overwrite = get_overwrite(overwrite)
|
|
configure_rattail_lib(overwrite)
|
|
|
|
if not exists('/var/lib/rattail/init.d/filemon') or overwrite:
|
|
put('data/var/lib/rattail/init.d/filemon', '/var/lib/rattail/init.d', use_sudo=True)
|
|
sudo('chown rattail: /var/lib/rattail/init.d/filemon')
|
|
|
|
script = '/etc/init.d/{0}'.format(name)
|
|
if not exists(script) or overwrite:
|
|
upload_template('data/etc/init.d/rattail-filemon_tmpl', script,
|
|
context=locals(), use_sudo=True, mode=0755)
|
|
sudo('chown root: {0}'.format(script))
|
|
sudo('update-rc.d {0} defaults'.format(script))
|
|
|
|
|
|
@task
|
|
def configure_dbsync(name=None, desc=None, envdir=None, overwrite=None):
|
|
"""
|
|
Configure a Rattail Database Synchonizer daemon.
|
|
"""
|
|
|
|
if name is None:
|
|
default_name = 'rattail-dbsync'
|
|
name = raw_input("Enter a name for the service [{0}]: ".format(default_name))
|
|
name = name.strip() or default_name
|
|
|
|
if desc is None:
|
|
default_desc = prettify(name.replace('dbsync', 'database-synchronizer'))
|
|
desc = raw_input("Enter a description [{0}]: ".format(default_desc))
|
|
desc = desc.strip() or default_desc
|
|
|
|
if envdir is None:
|
|
default_envdir = name.replace('-dbsync', '')
|
|
default_envdir = default_envdir.replace('-', '.')
|
|
default_envdir = '/srv/envs/{0}'.format(default_envdir)
|
|
envdir = raw_input("Enter a virtual environment path [{0}]: ".format(default_envdir))
|
|
envdir = envdir.strip() or default_envdir
|
|
|
|
overwrite = get_overwrite(overwrite)
|
|
configure_rattail_lib(overwrite)
|
|
|
|
if not exists('/var/lib/rattail/init.d/dbsync') or overwrite:
|
|
put('data/var/lib/rattail/init.d/dbsync', '/var/lib/rattail/init.d', use_sudo=True)
|
|
sudo('chown rattail: /var/lib/rattail/init.d/dbsync')
|
|
|
|
script = '/etc/init.d/{0}'.format(name)
|
|
if not exists(script) or overwrite:
|
|
upload_template('data/etc/init.d/rattail-dbsync_tmpl', script,
|
|
context=locals(), use_sudo=True, mode=0755)
|
|
sudo('chown root: {0}'.format(script))
|
|
sudo('update-rc.d {0} defaults'.format(script))
|