aboutsummaryrefslogtreecommitdiff
path: root/etc/dev
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-12-08 13:45:08 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-12-14 12:02:13 +0200
commite28ab8f48c891c03cf4b3a8ed88b98d38a561960 (patch)
tree0ae1dbb54e497fc797e5a73fcf3dd2dc487a5572 /etc/dev
parenta31dfac365feef7838b01b1efd3fe058c89484d7 (diff)
Separate brep module configuration from Apache server configuration
Diffstat (limited to 'etc/dev')
-rwxr-xr-xetc/dev/apachectl228
-rwxr-xr-xetc/dev/brep31
-rw-r--r--etc/dev/brep-site.conf9
-rw-r--r--etc/dev/config32
-rw-r--r--etc/dev/httpd.conf51
-rwxr-xr-xetc/dev/pgctl167
6 files changed, 518 insertions, 0 deletions
diff --git a/etc/dev/apachectl b/etc/dev/apachectl
new file mode 100755
index 0000000..4d45570
--- /dev/null
+++ b/etc/dev/apachectl
@@ -0,0 +1,228 @@
+#!/bin/sh
+#
+# Copyright (c) 2000-2002 The Apache Software Foundation.
+# See license at the end of this file.
+#
+# Apache control script designed to allow an easy command line interface
+# to controlling Apache. Written by Marc Slemko, 1997/08/23
+#
+# The exit codes returned are:
+# XXX this doc is no longer correct now that the interesting
+# XXX functions are handled by httpd
+# 0 - operation completed successfully
+# 1 -
+# 2 - usage error
+# 3 - httpd could not be started
+# 4 - httpd could not be stopped
+# 5 - httpd could not be started during a restart
+# 6 - httpd could not be restarted during a restart
+# 7 - httpd could not be restarted during a graceful restart
+# 8 - configuration syntax error
+#
+# When multiple arguments are given, only the error from the _last_
+# one is reported. Run "apachectl help" for usage info.
+#
+
+. `dirname $0`/config
+
+ARGV="$@"
+
+export AP_PORT
+export AP_GLOBAL_SERVER_NAME
+export AP_BREP_SERVER_NAME
+export AP_ROOT
+export AP_ADMIN_EMAIL
+export AP_LOG_LEVEL
+export AP_DB_HOST
+export AP_DB_PORT
+export AP_MODULE_DIR
+export AP_WWW_DIR
+export AP_CONFIG_DIR
+export AP_LOG_DIR
+export AP_WORKSPACE_DIR
+export AP_REPOSITORY_DIR
+
+if [ -n "$AP_LIB_DIRS" ] ; then
+ export LD_LIBRARY_PATH=$AP_LIB_DIRS:$LD_LIBRARY_PATH
+fi
+
+mkdir -p "$AP_WORKSPACE_DIR"
+mkdir -p "$AP_LOG_DIR"
+mkdir -p "$AP_REPOSITORY_DIR"
+
+cat "$AP_CONFIG_DIR/../brep.conf" | \
+sed -e 's%modules\(/mod_brep.so\)%${AP_MODULE_DIR}\1%g' \
+ -e 's%/pkg/%${AP_ROOT}%g' \
+ -e 's%^\(brep-db-port\s*\).*%\1${AP_DB_PORT}%g' \
+ -e 's%^\(brep-db-host\s*\).*%\1${AP_DB_HOST}%g' \
+ -e 's%^#\(brep-conf\s*\)/path/to%\1${AP_CONFIG_DIR}%g' \
+ -e 's%/usr/share/brep/static%${AP_WWW_DIR}%g' \
+ -e 's%^#\(AliasMatch.*\)/path/to/repo%\1${AP_REPOSITORY_DIR}%g' \
+> "$AP_CONFIG_DIR/brep.conf"
+
+# The path to your httpd binary, including options if necessary.
+#
+HTTPD="/usr/sbin/httpd -f $AP_CONFIG_DIR/httpd.conf"
+
+# The command that outputs a formatted text version of the HTML at the url
+# given on the command line. Designed for lynx, however other programs may work.
+#
+LYNX="lynx -dump"
+
+# The URL to your server's mod_status status page. If you do not have one,
+# then status and fullstatus will not work.
+#
+STATUSURL="http://localhost:$AP_PORT/server-status"
+
+# Set this variable to a command that increases the maximum number of file
+# descriptors allowed per child process. This is critical for configurations
+# that use many file descriptors, such as mass vhosting, or a multithreaded
+# server.
+#
+ULIMIT_MAX_FILES="ulimit -S -n `ulimit -H -n`"
+# -------------------- --------------------
+# |||||||||||||||||||| END CONFIGURATION SECTION ||||||||||||||||||||
+
+# Set the maximum number of file descriptors allowed per child process.
+#
+if [ "x$ULIMIT_MAX_FILES" != "x" ] ; then
+ $ULIMIT_MAX_FILES
+fi
+
+ERROR=0
+if [ "x$ARGV" = "x" ] ; then
+ ARGV="-h"
+fi
+
+case $ARGV in
+ start)
+ $LYNX $STATUSURL 1>/dev/null 2>&1
+
+ if test $? -eq 0; then
+ echo "Apache server already running"
+ ERROR=$?
+ else
+ echo "Apache server starting ..."
+ $HTTPD -k $ARGV
+ ERROR=$?
+
+ if test $ERROR -eq 0; then
+ $LYNX $STATUSURL 1>/dev/null 2>&1
+ ERROR=$?
+ fi
+
+ if test $ERROR -eq 0; then
+ echo "server started"
+ else
+ echo "server starting failed"
+ fi
+ fi
+ ;;
+
+stop)
+ $LYNX $STATUSURL 1>/dev/null 2>&1
+
+ if test $? -eq 0; then
+ echo "Apache server stopping ..."
+ $HTTPD -k $ARGV
+ ERROR=$?
+
+ if test $ERROR -eq 0; then
+ echo "server stopped"
+ else
+ echo "server stopping failed"
+ fi
+ else
+ echo "Apache server not running"
+ ERROR=$?
+ fi
+ ;;
+
+ restart|graceful)
+ $HTTPD -k $ARGV
+ ERROR=$?
+ ;;
+
+ startssl|sslstart|start-SSL)
+ $HTTPD -k start -DSSL
+ ERROR=$?
+ ;;
+
+ configtest)
+ $HTTPD -t
+ ERROR=$?
+ ;;
+
+ status)
+ echo "checking Apache server status ..."
+ $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } '
+ ;;
+
+ fullstatus)
+ $LYNX $STATUSURL
+ ;;
+
+ *)
+ $HTTPD $ARGV
+ ERROR=$?
+esac
+
+exit $ERROR
+
+# ====================================================================
+# The Apache Software License, Version 1.1
+#
+# Copyright (c) 2000-2003 The Apache Software Foundation. All rights
+# reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# 3. The end-user documentation included with the redistribution,
+# if any, must include the following acknowledgment:
+# "This product includes software developed by the
+# Apache Software Foundation (http://www.apache.org/)."
+# Alternately, this acknowledgment may appear in the software itself,
+# if and wherever such third-party acknowledgments normally appear.
+#
+# 4. The names "Apache" and "Apache Software Foundation" must
+# not be used to endorse or promote products derived from this
+# software without prior written permission. For written
+# permission, please contact apache@apache.org.
+#
+# 5. Products derived from this software may not be called "Apache",
+# nor may "Apache" appear in their name, without prior written
+# permission of the Apache Software Foundation.
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+# ====================================================================
+#
+# This software consists of voluntary contributions made by many
+# individuals on behalf of the Apache Software Foundation. For more
+# information on the Apache Software Foundation, please see
+# <http://www.apache.org/>.
+#
+# Portions of this software are based upon public domain software
+# originally written at the National Center for Supercomputing Applications,
+# University of Illinois, Urbana-Champaign.
+#
diff --git a/etc/dev/brep b/etc/dev/brep
new file mode 100755
index 0000000..3ec448b
--- /dev/null
+++ b/etc/dev/brep
@@ -0,0 +1,31 @@
+#!/bin/sh
+# file : etc/brep
+# copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+#
+# Designed to simplify controlling brep services.
+
+CMD="$1"
+SCRIPT_DIR=`dirname $0`
+
+case $CMD in
+ start|stop|status) ;;
+ *)
+ echo "Usage: brep (start|stop|status)"
+ exit 1
+ ;;
+esac
+
+case $CMD in
+ start)
+ $SCRIPT_DIR/pgctl start && $SCRIPT_DIR/apachectl start
+ ;;
+ stop)
+ $SCRIPT_DIR/apachectl stop
+ $SCRIPT_DIR/pgctl stop
+ ;;
+ status)
+ $SCRIPT_DIR/pgctl status
+ $SCRIPT_DIR/apachectl status
+ ;;
+esac
diff --git a/etc/dev/brep-site.conf b/etc/dev/brep-site.conf
new file mode 100644
index 0000000..09f020c
--- /dev/null
+++ b/etc/dev/brep-site.conf
@@ -0,0 +1,9 @@
+# file : etc/brep-site.conf
+# copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+#
+
+search-results 2
+description-len 100
+changes-len 100
+log-verbosity 1
diff --git a/etc/dev/config b/etc/dev/config
new file mode 100644
index 0000000..cdd0b53
--- /dev/null
+++ b/etc/dev/config
@@ -0,0 +1,32 @@
+# Basic settings (used in this file only)
+#
+SCRIPT_DIR=`dirname $0`
+CONFIG_DIR=`cd $SCRIPT_DIR; pwd`
+PROJECT_DIR="$CONFIG_DIR/../.."
+WORKSPACE_DIR="$PROJECT_DIR/var"
+LIB_DIRS="$PROJECT_DIR/brep:$PROJECT_DIR/../libbutl/butl:$PROJECT_DIR/../libbpkg/bpkg"
+
+# PostgreSQL settings (used in pgctl)
+#
+PG_PORT=8432
+PG_SCHEMA_DIR="$PROJECT_DIR/brep"
+PG_DATA_DIR="$WORKSPACE_DIR/lib/pgsql"
+PG_LOG_DIR="$WORKSPACE_DIR/log/pgsql"
+PG_WORKSPACE_DIR="$WORKSPACE_DIR/run/pgsql"
+
+# Apache settings (used in apachectl)
+#
+AP_PORT=8080
+AP_GLOBAL_SERVER_NAME="localhost"
+AP_BREP_SERVER_NAME="dev.cppget.org"
+AP_ROOT="/" # Value examples: "/", "/foo/", "/foo/bar/".
+AP_LOG_LEVEL=trace1
+AP_DB_HOST="$PG_WORKSPACE_DIR"
+AP_DB_PORT=$PG_PORT
+AP_LIB_DIRS="$LIB_DIRS"
+AP_MODULE_DIR="$PROJECT_DIR/brep"
+AP_WWW_DIR="$PROJECT_DIR/www"
+AP_CONFIG_DIR="$CONFIG_DIR"
+AP_LOG_DIR="$WORKSPACE_DIR/log/httpd"
+AP_WORKSPACE_DIR="$WORKSPACE_DIR/run/httpd"
+AP_REPOSITORY_DIR="$WORKSPACE_DIR/www"
diff --git a/etc/dev/httpd.conf b/etc/dev/httpd.conf
new file mode 100644
index 0000000..5943d70
--- /dev/null
+++ b/etc/dev/httpd.conf
@@ -0,0 +1,51 @@
+Listen ${AP_PORT}
+ServerName ${AP_GLOBAL_SERVER_NAME}:${AP_PORT}
+
+CoreDumpDirectory "${AP_WORKSPACE_DIR}"
+PidFile "${AP_WORKSPACE_DIR}/httpd.pid"
+
+ErrorLog "|/usr/sbin/rotatelogs ${AP_LOG_DIR}/error_log.%Y%m%d 86400"
+ErrorLogFormat "[%t] [%l] [%m] %M"
+LogLevel ${AP_LOG_LEVEL}
+
+Timeout 60
+KeepAlive On
+KeepAliveTimeout 3
+
+ThreadLimit 1000
+ServerLimit 2
+StartServers 1
+MaxClients 1000
+MinSpareThreads 400
+MaxSpareThreads 600
+ThreadsPerChild 500
+MaxRequestsPerChild 0
+
+LoadModule mpm_worker_module modules/mod_mpm_worker.so
+LoadModule unixd_module modules/mod_unixd.so
+LoadModule filter_module modules/mod_filter.so
+LoadModule authz_core_module modules/mod_authz_core.so
+LoadModule authz_host_module modules/mod_authz_host.so
+LoadModule status_module modules/mod_status.so
+LoadModule mime_module modules/mod_mime.so
+LoadModule deflate_module modules/mod_deflate.so
+
+<VirtualHost *:${AP_PORT}>
+ ServerName ${AP_GLOBAL_SERVER_NAME}
+</VirtualHost>
+
+<VirtualHost *:${AP_PORT}>
+ ServerName ${AP_BREP_SERVER_NAME}
+ Include ${AP_CONFIG_DIR}/brep.conf
+</VirtualHost>
+
+ExtendedStatus On
+
+<Location /server-status>
+ SetHandler server-status
+ Require local
+</Location>
+
+TypesConfig /etc/mime.types
+AddOutputFilterByType DEFLATE application/xhtml+xml
+AddOutputFilterByType DEFLATE text/css
diff --git a/etc/dev/pgctl b/etc/dev/pgctl
new file mode 100755
index 0000000..d1f676f
--- /dev/null
+++ b/etc/dev/pgctl
@@ -0,0 +1,167 @@
+#!/bin/sh
+# file : etc/pgctl
+# copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+#
+# Designed to simplify controlling brep PostgreSQL server instance.
+
+. `dirname $0`/config
+
+CMD="$1"
+shift
+
+SOCKET_DIR="$PG_WORKSPACE_DIR"
+OUT_FILE="$PG_WORKSPACE_DIR/out"
+
+# Print usage description and exit.
+#
+case $CMD in
+ init|start|stop|status|connect) ;;
+ *)
+ echo "Usage: pgctl (init|start|stop|status|connect)"
+ exit 1
+ ;;
+esac
+
+ERROR=0
+
+# Initialization includes creating PostgreSQL DB cluster, creating brep DB
+# and schema.
+#
+if test "$CMD" = "init"; then
+ if test -d "$PG_DATA_DIR"; then
+ echo "PostgreSQL DB cluster directory $PG_DATA_DIR already exist"
+ else
+ echo "creating PostgreSQL DB cluster ..."
+ pg_ctl initdb -D "$PG_DATA_DIR"
+ ERROR=$?
+
+ if test $ERROR -eq 0; then
+ echo "cluster created"
+ else
+ echo "cluster creating failed"
+ exit $ERROR;
+ fi
+ fi
+fi
+
+case $CMD in
+ start|init)
+ # Start DB server if not running yet.
+ #
+ pg_ctl status -D "$PG_DATA_DIR" 1>/dev/null 2>&1
+
+ if test $? -eq 0; then
+ echo "PostgreSQL server already running"
+ else
+ if test ! -d "$PG_DATA_DIR"; then
+ echo "PostgreSQL DB cluster not exist; run '$0 init' first"
+ exit 1
+ fi
+
+ echo "PostgreSQL server starting ..."
+
+ mkdir -p `dirname $OUT_FILE`
+ mkdir -p "$PG_LOG_DIR"
+ mkdir -p "$SOCKET_DIR"
+
+ pg_ctl start -D "$PG_DATA_DIR" -w -o \
+ "-c port=$PG_PORT -c unix_socket_directories=$SOCKET_DIR \
+ -c logging_collector=on -c log_directory=$PG_LOG_DIR" \
+ 1>"$OUT_FILE" 2>&1
+
+ ERROR=$?
+
+ if test $ERROR -eq 0; then
+ echo "server started"
+ else
+ cat "$OUT_FILE" 1>&2
+ echo "server starting failed"
+ exit $ERROR
+ fi
+ fi
+ ;;
+
+ status)
+ echo "checking PostgreSQL server status ..."
+ pg_ctl status -D "$PG_DATA_DIR"
+ ;;
+
+ stop)
+ pg_ctl status -D "$PG_DATA_DIR" 1>/dev/null 2>&1
+
+ if test $? -eq 0; then
+ echo "PostgreSQL server stopping ..."
+ pg_ctl stop -D "$PG_DATA_DIR" "$@"
+ ERROR=$?
+
+ if test $ERROR -eq 0; then
+ : # pg_ctl prints "server stopped" on success
+ else
+ echo "server stopping failed"
+ exit $ERROR
+ fi
+ else
+ echo "PostgreSQL server not running"
+ fi
+ ;;
+
+ connect)
+ echo "connecting to PostgreSQL server ..."
+ psql --host=$SOCKET_DIR --port=$PG_PORT brep
+ ;;
+esac
+
+if test "$CMD" = "init"; then
+ # Create brep DB if not exist.
+ #
+ psql --host=$SOCKET_DIR --port=$PG_PORT -c "" brep 1>/dev/null 2>&1
+
+ ERROR=$?
+
+ if test $ERROR -eq 0; then
+ echo "brep DB already exist"
+ else
+ if test $ERROR -eq 2; then
+ echo "creating brep DB ..."
+ createdb --host=$SOCKET_DIR --port=$PG_PORT brep
+ ERROR=$?
+
+ if test $ERROR -eq 0; then
+ echo "brep DB created"
+ else
+ echo "brep DB creating failed"
+ exit $ERROR;
+ fi
+ else
+ echo "brep DB existence checking failed"
+ exit $ERROR;
+ fi
+ fi
+
+ # Create brep DB schema if not exist.
+ #
+ psql --host=$SOCKET_DIR --port=$PG_PORT -c "select count(1) from package" \
+ brep 1>/dev/null 2>&1
+
+ ERROR=$?
+
+ if test $ERROR -eq 0; then
+ echo "brep DB schema already exist"
+ else
+ echo "creating brep DB schema ..."
+
+ psql -v ON_ERROR_STOP=1 --host=$SOCKET_DIR --port=$PG_PORT \
+ --file="$PG_SCHEMA_DIR/package.sql" brep 1>"$OUT_FILE" 2>&1
+
+ ERROR=$?
+
+ if test $ERROR -eq 0; then
+ echo "brep DB schema created"
+ else
+ cat "$OUT_FILE" 1>&2
+ echo "brep DB schema creating failed"
+ exit $ERROR;
+ fi
+ fi
+fi