Packaging-related stuff

This commit is contained in:
Aurynn Shaw 2013-08-28 14:20:18 +12:00
parent 6eff2d759a
commit f905dcfd8e
10 changed files with 253 additions and 2 deletions

5
.gitignore vendored
View File

@ -1 +1,4 @@
*.pyc
*.pyc
*.deb
.vagrant
work

38
Makefile Normal file
View File

@ -0,0 +1,38 @@
VERSION=0.1
NAME=openstack-artifice
INSTALL_PATH=/opt/stack/artifice
BILLING_PROGRAM=bill.py
BINARY_PATH=/usr/local/bin
clean:
@rm -rf ./work
@rm *.deb
init:
@mkdir ./work/
@mkdir -p ./work${INSTALL_PATH}
@mkdir -p ./work${BINARY_PATH}
deb: clean init
@cp -r ./bin ./artifice ./scripts ./README.md ./INVOICES.md \
requirements.txt setup.py ./work/${INSTALL_PATH}
@ln -s ./work${INSTALL_PATH}/bin/${BILLING_PROGRAM} ./work${BINARY_PATH}/artifice-bill
@fpm -s dir -t deb -n ${NAME} -v ${VERSION} \
--pre-install=packaging/scripts/pre_install.sh \
--post-install=packaging/scripts/post_install.sh \
--deb-pre-depends postgresql-9.2 \
--deb-pre-depends postgresql-server-dev-9.2 \
--deb-pre-depends postgresql-contrib-9.2 \
--deb-pre-depends pwgen \
--deb-pre-depends python2.7 \
--deb-pre-depends python-pip \
--deb-pre-depends python-dev \
--template-scripts \
--template-value pg_database=artifice \
--template-value pg_user=artifice \
--template-value pg_port=5432 \
--template-value install_path=${INSTALL_PATH} \
-C ./work \
.

112
Vagrantfile vendored Normal file
View File

@ -0,0 +1,112 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.
# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "precise64"
config.vm.provision :shell, :path=>"./vagrant/bootstrap.sh"
# The url from where the 'config.vm.box' box will be fetched if it
# doesn't already exist on the user's system.
# config.vm.box_url = "http://domain.com/path/to/above.box"
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network :forwarded_port, guest: 80, host: 8080
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network :private_network, ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network :public_network
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider :virtualbox do |vb|
# # Don't boot with headless mode
# vb.gui = true
#
# # Use VBoxManage to customize the VM. For example to change memory:
# vb.customize ["modifyvm", :id, "--memory", "1024"]
# end
#
# View the documentation for the provider you're using for more
# information on available options.
# Enable provisioning with Puppet stand alone. Puppet manifests
# are contained in a directory path relative to this Vagrantfile.
# You will need to create the manifests directory and a manifest in
# the file base.pp in the manifests_path directory.
#
# An example Puppet manifest to provision the message of the day:
#
# # group { "puppet":
# # ensure => "present",
# # }
# #
# # File { owner => 0, group => 0, mode => 0644 }
# #
# # file { '/etc/motd':
# # content => "Welcome to your Vagrant-built virtual machine!
# # Managed by Puppet.\n"
# # }
#
# config.vm.provision :puppet do |puppet|
# puppet.manifests_path = "manifests"
# puppet.manifest_file = "init.pp"
# end
# Enable provisioning with chef solo, specifying a cookbooks path, roles
# path, and data_bags path (all relative to this Vagrantfile), and adding
# some recipes and/or roles.
#
# config.vm.provision :chef_solo do |chef|
# chef.cookbooks_path = "../my-recipes/cookbooks"
# chef.roles_path = "../my-recipes/roles"
# chef.data_bags_path = "../my-recipes/data_bags"
# chef.add_recipe "mysql"
# chef.add_role "web"
#
# # You may also specify custom JSON attributes:
# chef.json = { :mysql_password => "foo" }
# end
# Enable provisioning with chef server, specifying the chef server URL,
# and the path to the validation key (relative to this Vagrantfile).
#
# The Opscode Platform uses HTTPS. Substitute your organization for
# ORGNAME in the URL and validation key.
#
# If you have your own Chef Server, use the appropriate URL, which may be
# HTTP instead of HTTPS depending on your configuration. Also change the
# validation key to validation.pem.
#
# config.vm.provision :chef_client do |chef|
# chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
# chef.validation_key_path = "ORGNAME-validator.pem"
# end
#
# If you're using the Opscode platform, your validator client is
# ORGNAME-validator, replacing ORGNAME with your organization name.
#
# If you have your own Chef Server, the default validation client name is
# chef-validator, unless you changed the configuration.
#
# chef.validation_client_name = "ORGNAME-validator"
end

View File

@ -0,0 +1,12 @@
#!/bin/sh
PASSWORD=`cat <%= install_path %>/etc/artifice/database`
export DATABASE_URL="postgresql://<%= pg_user %>:$PASSWORD@localhost:<%=pg_port%>/<%=pg_database%>"
pip install -r <%= install_path %>/requirements.txt
python <%= install_path %>/scripts/initdb.py
python <%= install_path%>/setup.py install # register with python!

View File

@ -0,0 +1,20 @@
#!/bin/sh
# Loads a SQL script into postgres that creates the artifice DB.
# Post-install script is going to load all the DB stuff via pythons
PASSWORD=`pwgen -s 16`
mkdir -p <%=install_path%>/etc/artifice
touch <%=install_path%>/etc/artifice/database
chmod 0600 <%=install_path%>/etc/artifice/database
echo $PASSWORD >> <%= install_path %>/etc/artifice/database
sudo -u postgres psql -d template1 <<EOF
CREATE DATABASE <%=pg_database%>;
\c <%=pg_database%>
CREATE EXTENSION btree_gist;
CREATE USER <%=pg_user%> WITH ENCRYPTED PASSWORD '$PASSWORD';
ALTER DATABASE <%=pg_database%> OWNER TO <%=pg_user%>;
EOF

View File

@ -1,2 +1,3 @@
sqlalchemy>=0.8
psycopg2>=2.5.1
psycopg2>=2.5.1
requests==1.1.0

25
scripts/initdb.py Normal file
View File

@ -0,0 +1,25 @@
import sys, os
loc = None
try:
loc, fn = os.path.split(__file__)
except NameError:
loc = os.getcwd()
sys.path.insert(0, os.path.abspath(os.path.join(loc +"/../artifice")))
from models import usage, resources, tenants, Session, Base
# string = 'postgresql://%(username)s:%(password)s@%(host)s:%(port)s/%(database)s'
# conn_string = string % {'username':'aurynn', 'host':'localhost', 'port':5433, 'password':'aurynn', 'database':'artifice'}
from sqlalchemy import MetaData, create_engine
import os
engine = create_engine( os.environ["DATABASE_URL"] )
Session.configure(bind=engine)
s = Session()
Base.metadata.create_all(engine)

28
sources.list Normal file
View File

@ -0,0 +1,28 @@
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise main restricted
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise main restricted
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates main restricted
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates main restricted
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise universe
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise universe
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates universe
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates universe
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise multiverse
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise multiverse
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates multiverse
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates multiverse
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu precise-security main restricted
deb-src http://security.ubuntu.com/ubuntu precise-security main restricted
deb http://security.ubuntu.com/ubuntu precise-security universe
deb-src http://security.ubuntu.com/ubuntu precise-security universe
deb http://security.ubuntu.com/ubuntu precise-security multiverse
deb-src http://security.ubuntu.com/ubuntu precise-security multiverse
deb http://debian.catalyst.net.nz/catalyst stable catalyst
deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main

12
vagrant/bootstrap.sh Normal file
View File

@ -0,0 +1,12 @@
cp /vagrant/sources.list /etc/apt/sources.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
apt-key add -
apt-key advanced --keyserver pgp.net.nz --recv-keys 621846D9
aptitude update
aptitude install gdebi-core
gdebi -n /vagrant/openstack-artifice_0.1_amd64.deb