New appliance: dpaste.
This commit is contained in:
parent
eec5dbac8f
commit
11519edcde
|
@ -0,0 +1,47 @@
|
||||||
|
PGVER = 9.2
|
||||||
|
DPASTE_USER = dpaste
|
||||||
|
DPASTE_HOME = /opt/dpaste
|
||||||
|
PIP = $(DPASTE_HOME)/bin/pip
|
||||||
|
DPASTE_REPO = https://github.com/bartTC/dpaste
|
||||||
|
|
||||||
|
rcdefault := /etc/runlevels/default
|
||||||
|
|
||||||
|
preinstall:
|
||||||
|
|
||||||
|
postinstall: bash_profile nginx.conf dpaste.init settings.py firstboot.start
|
||||||
|
$(inroot) $(EMERGE) $(USEPKG) -1n dev-vcs/git
|
||||||
|
$(inroot) $(EMERGE) -n $(USEPKG) dev-db/postgresql-server:$(PGVER)
|
||||||
|
$(inroot) passwd -d postgres
|
||||||
|
$(inroot) eselect postgresql set $(PGVER)
|
||||||
|
$(inroot) rm -rf /var/lib/postgresql/$(PGVER)/data
|
||||||
|
yes | $(inroot) $(EMERGE) --config postgresql-server:$(PGVER)
|
||||||
|
$(inroot) ln -sf /etc/init.d/postgresql-$(PGVER) $(rcdefault)/postgresql-$(PGVER)
|
||||||
|
$(inroot) $(EMERGE) -1n $(USEPKG) dev-python/virtualenv
|
||||||
|
$(inroot) getent passwd $(DPASTE_USER) || \
|
||||||
|
$(inroot) useradd -c "Dpaste Server" -G postgres -U -d $(DPASTE_HOME) $(DPASTE_USER)
|
||||||
|
rm -rf $(CHROOT)/$(DPASTE_HOME)
|
||||||
|
mkdir -p $(CHROOT)/$(DPASTE_HOME)
|
||||||
|
mkdir -p $(CHROOT)/$(DPASTE_HOME)/media
|
||||||
|
mkdir -p $(CHROOT)/$(DPASTE_HOME)/var
|
||||||
|
$(inroot) rm -rf $(DPASTE_HOME)/dpaste
|
||||||
|
$(inroot) git clone $(DPASTE_REPO) $(DPASTE_HOME)/dpaste
|
||||||
|
sed -i 's/dpaste\.de/dpaste/g' $(CHROOT)/$(DPASTE_HOME)/dpaste/dpaste/templates/dpaste/*.html
|
||||||
|
cp bash_profile $(CHROOT)$(DPASTE_HOME)/.bash_profile
|
||||||
|
$(inroot) virtualenv -p /usr/bin/python2.7 $(DPASTE_HOME)
|
||||||
|
$(inroot) $(PIP) install -r $(DPASTE_HOME)/dpaste/requirements.txt
|
||||||
|
$(inroot) $(PIP) install psycopg2
|
||||||
|
$(inroot) $(DPASTE_HOME)/bin/django-admin.py startproject project $(DPASTE_HOME)
|
||||||
|
grep ^SECRET_KEY $(CHROOT)/$(DPASTE_HOME)/project/settings.py > $(CHROOT)/$(DPASTE_HOME)/project/keyfile.py
|
||||||
|
cp settings.py $(CHROOT)/$(DPASTE_HOME)/project/settings.py
|
||||||
|
chmod +x $(CHROOT)/$(DPASTE_HOME)/manage.py
|
||||||
|
cp nginx.conf $(CHROOT)/etc/nginx
|
||||||
|
cp dpaste.init $(CHROOT)/etc/init.d/dpaste
|
||||||
|
cp firstboot.start $(CHROOT)/etc/local.d/firstboot.start
|
||||||
|
touch $(CHROOT)/firstboot
|
||||||
|
ln -sf /etc/init.d/nginx $(CHROOT)/$(rcdefault)/nginx
|
||||||
|
$(inroot) ln -sf ../manage.py $(DPASTE_HOME)/bin/manage
|
||||||
|
$(inroot) $(EMERGE) --depclean --with-bdeps=n
|
||||||
|
|
||||||
|
|
||||||
|
clean:
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
export DJANGO_SETTINGS_MODULE='project.settings_local'
|
||||||
|
PATH="$HOME/bin:$PATH"
|
||||||
|
. activate
|
|
@ -0,0 +1,37 @@
|
||||||
|
app-editors/nano
|
||||||
|
net-misc/openssh
|
||||||
|
net-misc/rsync
|
||||||
|
net-misc/wget
|
||||||
|
sys-kernel/gentoo-sources
|
||||||
|
sys-kernel/linux-headers
|
||||||
|
sys-devel/gcc
|
||||||
|
sys-devel/automake
|
||||||
|
sys-devel/bison
|
||||||
|
sys-devel/make
|
||||||
|
sys-devel/flex
|
||||||
|
sys-devel/automake-wrapper
|
||||||
|
sys-devel/autoconf-wrapper
|
||||||
|
sys-devel/autoconf
|
||||||
|
sys-devel/m4
|
||||||
|
sys-devel/gcc-config
|
||||||
|
sys-devel/libtool
|
||||||
|
sys-devel/binutils
|
||||||
|
sys-devel/binutils-config
|
||||||
|
sys-devel/patch
|
||||||
|
sys-devel/gnuconfig
|
||||||
|
app-admin/python-updater
|
||||||
|
app-admin/perl-cleaner
|
||||||
|
sys-apps/man-pages
|
||||||
|
sys-apps/man
|
||||||
|
sys-apps/file
|
||||||
|
sys-apps/less
|
||||||
|
sys-apps/texinfo
|
||||||
|
sys-apps/busybox
|
||||||
|
sys-apps/debianutils
|
||||||
|
sys-apps/man-pages-posix
|
||||||
|
sys-apps/sandbox
|
||||||
|
sys-apps/which
|
||||||
|
dev-lang/perl
|
||||||
|
sys-devel/libperl
|
||||||
|
sys-apps/portage
|
||||||
|
dev-lang/python
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/sbin/runscript
|
||||||
|
# Copyright 2013 Marduk Enterprises (marduk@python.net)
|
||||||
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
|
||||||
|
description="GUnicorn server for the dpaste app"
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
need localmount
|
||||||
|
after nginx
|
||||||
|
after postgresql-9.2
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
start() {
|
||||||
|
ebegin "Starting dpaste"
|
||||||
|
. /opt/dpaste/bin/activate
|
||||||
|
export PYTHONPATH=/opt/dpaste/dpaste
|
||||||
|
start-stop-daemon --start --exec /opt/dpaste/bin/python -- /opt/dpaste/manage.py run_gunicorn \
|
||||||
|
--user=dpaste \
|
||||||
|
--daemon \
|
||||||
|
--group=dpaste \
|
||||||
|
--workers=2 \
|
||||||
|
--error-logfile=/opt/dpaste/var/gunicorn.error.log \
|
||||||
|
--pid=/opt/dpaste/var/gunicorn.pid \
|
||||||
|
--bind=unix:///opt/dpaste/var/dpaste.sock
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
ebegin "Stopping dpaste"
|
||||||
|
start-stop-daemon --stop \
|
||||||
|
--pidfile /opt/dpaste/var/gunicorn.pid \
|
||||||
|
--exec /opt/dpaste/bin/python
|
||||||
|
eend $? "Failed to stop dpaste"
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
[ -e /firstboot ] || exit 0
|
||||||
|
|
||||||
|
echo 'Creating dpaste database'
|
||||||
|
createuser -U postgres -D -S -R dpaste
|
||||||
|
createdb -U postgres dpaste
|
||||||
|
|
||||||
|
. /opt/dpaste/bin/activate
|
||||||
|
PYTHON=/opt/dpaste/bin/python
|
||||||
|
PYTHONPATH=/opt/dpaste/dpaste ; export PYTHONPATH
|
||||||
|
$PYTHON /opt/dpaste/manage.py syncdb --noinput
|
||||||
|
$PYTHON /opt/dpaste/manage.py migrate --all
|
||||||
|
rc-update add dpaste default
|
||||||
|
/etc/init.d/dpaste start
|
||||||
|
|
||||||
|
rm /firstboot
|
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
# NGINX flags
|
||||||
|
NGINX_MODULES_HTTP="auth_basic gzip proxy referer rewrite headers_more uwsgi"
|
|
@ -0,0 +1,68 @@
|
||||||
|
user nginx nginx;
|
||||||
|
worker_processes 1;
|
||||||
|
|
||||||
|
error_log /var/log/nginx/error_log info;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
use epoll;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
log_format main
|
||||||
|
'$remote_addr - $remote_user [$time_local] '
|
||||||
|
'"$request" $status $bytes_sent '
|
||||||
|
'"$http_referer" "$http_user_agent" '
|
||||||
|
'"$gzip_ratio"';
|
||||||
|
|
||||||
|
client_header_timeout 10m;
|
||||||
|
client_body_timeout 10m;
|
||||||
|
send_timeout 10m;
|
||||||
|
|
||||||
|
connection_pool_size 256;
|
||||||
|
client_header_buffer_size 1k;
|
||||||
|
large_client_header_buffers 4 2k;
|
||||||
|
request_pool_size 4k;
|
||||||
|
|
||||||
|
gzip on;
|
||||||
|
gzip_min_length 1100;
|
||||||
|
gzip_buffers 4 8k;
|
||||||
|
gzip_types text/plain;
|
||||||
|
|
||||||
|
output_buffers 1 32k;
|
||||||
|
postpone_output 1460;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
tcp_nopush on;
|
||||||
|
tcp_nodelay on;
|
||||||
|
|
||||||
|
keepalive_timeout 75 20;
|
||||||
|
|
||||||
|
ignore_invalid_headers on;
|
||||||
|
|
||||||
|
index index.html;
|
||||||
|
|
||||||
|
upstream dpaste {
|
||||||
|
server unix:///opt/dpaste/var/dpaste.sock;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 0.0.0.0;
|
||||||
|
|
||||||
|
location /static/ {
|
||||||
|
alias /opt/dpaste/dpaste/dpaste/static/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://dpaste;
|
||||||
|
}
|
||||||
|
|
||||||
|
access_log /var/log/nginx/dpaste.access_log main;
|
||||||
|
error_log /var/log/nginx/dpaste.error_log info;
|
||||||
|
|
||||||
|
root /var/www/localhost/htdocs;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
sys-kernel/gentoo-sources ~amd64 ~x86
|
|
@ -0,0 +1,11 @@
|
||||||
|
app-editors/nano ncurses
|
||||||
|
dev-lang/python ssl threads xml
|
||||||
|
dev-libs/libpcre cxx
|
||||||
|
net-misc/dhcp client
|
||||||
|
sys-apps/kmod tools
|
||||||
|
sys-devel/gcc cxx nptl
|
||||||
|
sys-kernel/gentoo-sources symlink
|
||||||
|
sys-libs/ncurses minimal
|
||||||
|
sys-apps/portage python3 ipc
|
||||||
|
net-misc/curl ssl curl_ssl_openssl
|
||||||
|
dev-vcs/git curl
|
|
@ -0,0 +1,151 @@
|
||||||
|
# Django settings for dpaste project.
|
||||||
|
|
||||||
|
DEBUG = False
|
||||||
|
TEMPLATE_DEBUG = DEBUG
|
||||||
|
|
||||||
|
ADMINS = (
|
||||||
|
# ('Your Name', 'your_email@example.com'),
|
||||||
|
)
|
||||||
|
|
||||||
|
MANAGERS = ADMINS
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
|
||||||
|
'NAME': 'dpaste', # Or path to database file if using sqlite3.
|
||||||
|
# The following settings are not used with sqlite3:
|
||||||
|
'USER': 'dpaste',
|
||||||
|
'PASSWORD': '',
|
||||||
|
'HOST': 'localhost', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
|
||||||
|
'PORT': '', # Set to empty string for default.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Hosts/domain names that are valid for this site; required if DEBUG is False
|
||||||
|
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
|
||||||
|
ALLOWED_HOSTS = ['*']
|
||||||
|
|
||||||
|
# Local time zone for this installation. Choices can be found here:
|
||||||
|
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
||||||
|
# although not all choices may be available on all operating systems.
|
||||||
|
# In a Windows environment this must be set to your system time zone.
|
||||||
|
TIME_ZONE = 'UTC'
|
||||||
|
|
||||||
|
# Language code for this installation. All choices can be found here:
|
||||||
|
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||||
|
LANGUAGE_CODE = 'en-us'
|
||||||
|
|
||||||
|
SITE_ID = 1
|
||||||
|
|
||||||
|
# If you set this to False, Django will make some optimizations so as not
|
||||||
|
# to load the internationalization machinery.
|
||||||
|
USE_I18N = True
|
||||||
|
|
||||||
|
# If you set this to False, Django will not format dates, numbers and
|
||||||
|
# calendars according to the current locale.
|
||||||
|
USE_L10N = True
|
||||||
|
|
||||||
|
# If you set this to False, Django will not use timezone-aware datetimes.
|
||||||
|
USE_TZ = True
|
||||||
|
|
||||||
|
# Absolute filesystem path to the directory that will hold user-uploaded files.
|
||||||
|
# Example: "/var/www/example.com/media/"
|
||||||
|
MEDIA_ROOT = ''
|
||||||
|
|
||||||
|
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
|
||||||
|
# trailing slash.
|
||||||
|
# Examples: "http://example.com/media/", "http://media.example.com/"
|
||||||
|
MEDIA_URL = ''
|
||||||
|
|
||||||
|
# Absolute path to the directory static files should be collected to.
|
||||||
|
# Don't put anything in this directory yourself; store your static files
|
||||||
|
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
|
||||||
|
# Example: "/var/www/example.com/static/"
|
||||||
|
STATIC_ROOT = ''
|
||||||
|
|
||||||
|
# URL prefix for static files.
|
||||||
|
# Example: "http://example.com/static/", "http://static.example.com/"
|
||||||
|
STATIC_URL = '/static/'
|
||||||
|
|
||||||
|
# Additional locations of static files
|
||||||
|
STATICFILES_DIRS = (
|
||||||
|
# Put strings here, like "/home/html/static" or "C:/www/django/static".
|
||||||
|
# Always use forward slashes, even on Windows.
|
||||||
|
# Don't forget to use absolute paths, not relative paths.
|
||||||
|
)
|
||||||
|
|
||||||
|
# List of finder classes that know how to find static files in
|
||||||
|
# various locations.
|
||||||
|
STATICFILES_FINDERS = (
|
||||||
|
'django.contrib.staticfiles.finders.FileSystemFinder',
|
||||||
|
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
||||||
|
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
|
||||||
|
)
|
||||||
|
|
||||||
|
from keyfile import SECRET_KEY
|
||||||
|
|
||||||
|
# List of callables that know how to import templates from various sources.
|
||||||
|
TEMPLATE_LOADERS = (
|
||||||
|
'django.template.loaders.filesystem.Loader',
|
||||||
|
'django.template.loaders.app_directories.Loader',
|
||||||
|
# 'django.template.loaders.eggs.Loader',
|
||||||
|
)
|
||||||
|
|
||||||
|
MIDDLEWARE_CLASSES = (
|
||||||
|
'django.middleware.common.CommonMiddleware',
|
||||||
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
|
# Uncomment the next line for simple clickjacking protection:
|
||||||
|
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
)
|
||||||
|
|
||||||
|
ROOT_URLCONF = 'dpaste.urls'
|
||||||
|
|
||||||
|
# Python dotted path to the WSGI application used by Django's runserver.
|
||||||
|
WSGI_APPLICATION = 'project.wsgi.application'
|
||||||
|
|
||||||
|
TEMPLATE_DIRS = (
|
||||||
|
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
||||||
|
# Always use forward slashes, even on Windows.
|
||||||
|
# Don't forget to use absolute paths, not relative paths.
|
||||||
|
)
|
||||||
|
|
||||||
|
INSTALLED_APPS = (
|
||||||
|
'django.contrib.sessions',
|
||||||
|
'django.contrib.staticfiles',
|
||||||
|
'mptt',
|
||||||
|
'south',
|
||||||
|
'gunicorn',
|
||||||
|
'dpaste',
|
||||||
|
)
|
||||||
|
|
||||||
|
# A sample logging configuration. The only tangible logging
|
||||||
|
# performed by this configuration is to send an email to
|
||||||
|
# the site admins on every HTTP 500 error when DEBUG=False.
|
||||||
|
# See http://docs.djangoproject.com/en/dev/topics/logging for
|
||||||
|
# more details on how to customize your logging configuration.
|
||||||
|
LOGGING = {
|
||||||
|
'version': 1,
|
||||||
|
'disable_existing_loggers': False,
|
||||||
|
'filters': {
|
||||||
|
'require_debug_false': {
|
||||||
|
'()': 'django.utils.log.RequireDebugFalse'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'handlers': {
|
||||||
|
'mail_admins': {
|
||||||
|
'level': 'ERROR',
|
||||||
|
'filters': ['require_debug_false'],
|
||||||
|
'class': 'django.utils.log.AdminEmailHandler'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'loggers': {
|
||||||
|
'django.request': {
|
||||||
|
'handlers': ['mail_admins'],
|
||||||
|
'level': 'ERROR',
|
||||||
|
'propagate': True,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
net-misc/dhcp
|
||||||
|
dev-lang/python:2.7
|
||||||
|
www-servers/nginx
|
Loading…
Reference in New Issue