Installation script for a particular git branch from source.
authorChris Sharp <csharp@georgialibraries.org>
Wed, 13 Apr 2016 12:25:28 +0000 (08:25 -0400)
committerChris Sharp <csharp@georgialibraries.org>
Wed, 13 Apr 2016 12:25:28 +0000 (08:25 -0400)
install-eg/ejabberd.cfg [new file with mode: 0644]
install-eg/install_eg.sh [new file with mode: 0755]
install-eg/opensrf-password.20160408145357 [new file with mode: 0644]
install-eg/opensrf_core.xml.evergreen [new file with mode: 0644]

diff --git a/install-eg/ejabberd.cfg b/install-eg/ejabberd.cfg
new file mode 100644 (file)
index 0000000..af276a4
--- /dev/null
@@ -0,0 +1,644 @@
+%%%
+%%%     Debian ejabberd configuration file
+%%%     This config must be in UTF-8 encoding
+%%%
+%%% The parameters used in this configuration file are explained in more detail
+%%% in the ejabberd Installation and Operation Guide.
+%%% Please consult the Guide in case of doubts, it is available at
+%%% /usr/share/doc/ejabberd/guide.html
+
+%%% This configuration file contains Erlang terms.
+%%% In case you want to understand the syntax, here are the concepts:
+%%%
+%%%  - The character to comment a line is %
+%%%
+%%%  - Each term ends in a dot, for example:
+%%%      override_global.
+%%%
+%%%  - A tuple has a fixed definition, its elements are
+%%%    enclosed in {}, and separated with commas:
+%%%      {loglevel, 4}.
+%%%
+%%%  - A list can have as many elements as you want,
+%%%    and is enclosed in [], for example:
+%%%      [http_poll, web_admin, tls]
+%%%
+%%%  - A keyword of ejabberd is a word in lowercase.
+%%%    The strings are enclosed in "" and can have spaces, dots...
+%%%      {language, "en"}.
+%%%      {ldap_rootdn, "dc=example,dc=com"}.
+%%%
+%%%  - This term includes a tuple, a keyword, a list and two strings:
+%%%      {hosts, ["jabber.example.net", "im.example.com"]}.
+%%%
+
+%%%   ===================================
+%%%   OVERRIDE OPTIONS STORED IN DATABASE
+
+%%
+%% Override global options (shared by all ejabberd nodes in a cluster).
+%%
+%%override_global.
+
+%%
+%% Override local options (specific for this particular ejabberd node).
+%%
+%%override_local.
+
+%%
+%% Remove the Access Control Lists before new ones are added.
+%%
+%%override_acls.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Options which are set by Debconf and managed by ucf
+
+%% Admin user
+{acl, admin, {user, "", "localhost"}}.
+
+%% Hostname
+{hosts, ["localhost", "public.localhost", "private.localhost"]}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%   =========
+%%%   DEBUGGING
+
+%%
+%% loglevel: Verbosity of log files generated by ejabberd.
+%% 0: No ejabberd log at all (not recommended)
+%% 1: Critical
+%% 2: Error
+%% 3: Warning
+%% 4: Info
+%% 5: Debug
+%%
+{loglevel, 4}.
+
+%%
+%% watchdog_admins: If an ejabberd process consumes too much memory,
+%% send live notifications to those Jabber accounts.
+%%
+%%{watchdog_admins, ["bob@example.com"]}.
+
+
+%%%   ================
+%%%   SERVED HOSTNAMES
+
+%%
+%% hosts: Domains served by ejabberd.
+%% You can define one or several, for example:
+%% {hosts, ["example.net", "example.com", "example.org"]}.
+%%
+%% (This option is defined by debconf earlier)
+%% {hosts, ["localhost"]}.
+
+%%
+%% route_subdomains: Delegate subdomains to other Jabber server.
+%% For example, if this ejabberd serves example.org and you want
+%% to allow communication with a Jabber server called im.example.org.
+%%
+%%{route_subdomains, s2s}.
+
+
+%%%   ===============
+%%%   LISTENING PORTS
+
+%%
+%% listen: Which ports will ejabberd listen, which service handles it
+%% and what options to start it with.
+%%
+{listen,
+ [
+  {5222, ejabberd_c2s, [
+                       {access, c2s},
+                       {shaper, c2s_shaper},
+                       {max_stanza_size, 2000000},
+                        %%zlib,
+                       starttls, {certfile, "/etc/ejabberd/ejabberd.pem"}
+                      ]},
+
+  %%
+  %% To enable the old SSL connection method (deprecated) in port 5223:
+  %%
+  %%{5223, ejabberd_c2s, [
+  %%                   {access, c2s},
+  %%                   {shaper, c2s_shaper},
+  %%                   {max_stanza_size, 2000000},
+  %%                    zlib,
+  %%                   tls, {certfile, "/etc/ejabberd/ejabberd.pem"}
+  %%                  ]},
+
+  {5269, ejabberd_s2s_in, [
+                          {shaper, s2s_shaper},
+                          {max_stanza_size, 2000000}
+                         ]},
+
+  %% External MUC jabber-muc
+  %%{5554, ejabberd_service, [
+  %%                       {ip, {127, 0, 0, 1}},
+  %%                       {access, all},
+  %%                       {shaper_rule, fast},
+  %%                       {host, "muc.localhost", [{password, "secret"}]}
+  %%                       ]},
+
+  %% Jabber ICQ Transport
+  %%{5555, ejabberd_service, [
+  %%                       {ip, {127, 0, 0, 1}},
+  %%                       {access, all},
+  %%                       {shaper_rule, fast},
+  %%                       {hosts, ["icq.localhost", "sms.localhost"],
+  %%                                  [{password, "secret"}]}
+  %%                       ]},
+
+  %% AIM Transport
+  %%{5556, ejabberd_service, [
+  %%                       {ip, {127, 0, 0, 1}},
+  %%                       {access, all},
+  %%                       {shaper_rule, fast},
+  %%                       {host, "aim.localhost", [{password, "secret"}]}
+  %%                       ]},
+
+  %% MSN Transport
+  %%{5557, ejabberd_service, [
+  %%                       {ip, {127, 0, 0, 1}},
+  %%                       {access, all},
+  %%                       {shaper_rule, fast},
+  %%                       {host, "msn.localhost", [{password, "secret"}]}
+  %%                       ]},
+
+  %% Yahoo! Transport
+  %%{5558, ejabberd_service, [
+  %%                       {ip, {127, 0, 0, 1}},
+  %%                       {access, all},
+  %%                       {shaper_rule, fast},
+  %%                       {host, "yahoo.localhost", [{password, "secret"}]}
+  %%                       ]},
+
+  %% External JUD (internal is more powerful,
+  %% but doesn't allow to register users from other servers)
+  %%{5559, ejabberd_service, [
+  %%                       {ip, {127, 0, 0, 1}},
+  %%                       {access, all},
+  %%                       {shaper_rule, fast},
+  %%                       {host, "jud.localhost", [{password, "secret"}]}
+  %%                       ]},
+
+  {5280, ejabberd_http, [
+                        %%{request_handlers,
+                        %% [
+                        %%  {["pub", "archive"], mod_http_fileserver}
+                        %% ]},
+                        %%captcha,
+                        http_bind,
+                        http_poll,
+                        web_admin
+                       ]}
+
+ ]}.
+
+%%
+%% max_fsm_queue: Enable limiting of lengths of "message queues"
+%% for outgoing connections. Roughly speaking, each message in such
+%% queues represents one XML stanza queued to be sent into
+%% an output stream it is serving.
+%% The default value is an atom 'undefined' which specifies no limiting.
+%%
+%% When specified globally, this option limits the message queue lengths
+%% for all ejabberd_c2s_in and ejabberd_service listeners,
+%% as well as for outgoing s2s connections.
+%%
+%% This option can also be specified as an option for ejabberd_c2s_in
+%% and ejabberd_service listeners, in wich case it will override
+%% the value of the global option.
+%%
+{max_fsm_queue, 1000}.
+
+%%
+%% s2s_use_starttls: Enable STARTTLS + Dialback for S2S connections.
+%% Allowed values are: true or false.
+%% You must specify a certificate file.
+%%
+{s2s_use_starttls, true}.
+
+%%
+%% s2s_certfile: Specify a certificate file.
+%%
+{s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.
+
+%%
+%% domain_certfile: Specify a different certificate for each served hostname.
+%%
+%%{domain_certfile, "example.org", "/path/to/example_org.pem"}.
+%%{domain_certfile, "example.com", "/path/to/example_com.pem"}.
+
+%%
+%% S2S whitelist or blacklist
+%%
+%% Default s2s policy for undefined hosts.
+%%
+%%{s2s_default_policy, allow}.
+
+%%
+%% Allow or deny communication with specific servers.
+%%
+%%{{s2s_host, "goodhost.org"}, allow}.
+%%{{s2s_host, "badhost.org"}, deny}.
+
+%%
+%% The maximum allowed delay for retry to connect
+%% after a failed connection attempt to a remote server, in seconds.
+%% The default value is 300 seconds (5 minutes). 
+%%
+%% The reconnection algorythm works like this: if connection fails,
+%% ejabberd makes an initial random delay between 1 and 15 seconds,
+%% then retries, and if this attempt fails, makes another delay,
+%% twice as long as previous. These attempts are performed either
+%% until a successful connection is made or until the next calculated
+%% delay is greated or equal than the value of s2s_max_retry_delay.
+%%
+%%{s2s_max_retry_delay, 300}.
+
+%%
+%% Outgoing S2S options
+%%
+%% Preferred address families (which to try first) and connect timeout
+%% in milliseconds.
+%%
+%%{outgoing_s2s_options, [ipv4, ipv6], 10000}.
+
+
+%%%   ==============
+%%%   AUTHENTICATION
+
+%%
+%% auth_method: Method used to authenticate the users.
+%% The default method is the internal.
+%% If you want to use a different method,
+%% comment this line and enable the correct ones.
+%%
+{auth_method, internal}.
+
+%%
+%% Authentication using external script
+%% Make sure the script is executable by ejabberd.
+%%
+%%{auth_method, external}.
+%%{extauth_program, "/path/to/authentication/script"}.
+
+%%
+%% Authentication using ODBC
+%% Remember to setup a database in the next section.
+%%
+%%{auth_method, odbc}.
+
+%%
+%% Authentication using PAM
+%%
+%%{auth_method, pam}.
+%%{pam_service, "pamservicename"}.
+
+%%
+%% Authentication using LDAP
+%%
+%%{auth_method, ldap}.
+%%
+%% List of LDAP servers:
+%%{ldap_servers, ["localhost"]}.
+%%
+%% Encryption of connection to LDAP servers (LDAPS):
+%%{ldap_encrypt, none}.
+%%{ldap_encrypt, tls}.
+%%
+%% Port connect to LDAP server:
+%%{ldap_port, 389}.
+%%{ldap_port, 636}.
+%%
+%% LDAP manager:
+%%{ldap_rootdn, "dc=example,dc=com"}.
+%%
+%% Password to LDAP manager:
+%%{ldap_password, "******"}.
+%%
+%% Search base of LDAP directory:
+%%{ldap_base, "dc=example,dc=com"}.
+%%
+%% LDAP attribute that holds user ID:
+%%{ldap_uids, [{"mail", "%u@mail.example.org"}]}.
+%%
+%% LDAP filter:
+%%{ldap_filter, "(objectClass=shadowAccount)"}.
+
+%%
+%% Anonymous login support:
+%%   auth_method: anonymous
+%%   anonymous_protocol: sasl_anon | login_anon | both
+%%   allow_multiple_connections: true | false
+%%
+%%{host_config, "public.example.org", [{auth_method, anonymous},
+%%                                     {allow_multiple_connections, false},
+%%                                     {anonymous_protocol, sasl_anon}]}.
+%%
+%% To use both anonymous and internal authentication:
+%%
+%%{host_config, "public.example.org", [{auth_method, [internal, anonymous]}]}.
+
+
+%%%   ==============
+%%%   DATABASE SETUP
+
+%% ejabberd uses by default the internal Mnesia database,
+%% so you can avoid this section.
+%% This section provides configuration examples in case
+%% you want to use other database backends.
+%% Please consult the ejabberd Guide for details about database creation.
+
+%% NOTE that ejabberd in Debian supports "out of the box"
+%% only mnesia (default) and ODBC storage backends.
+%% Working with MySQL and PostgreSQL DB backends requires
+%% building and installation of the corresponding Erlang modules,
+%% not distributed as a part of ejabberd.
+%% Refer to /usr/share/doc/ejabberd/README.Debian for details.
+
+%%
+%% MySQL server:
+%%
+%%{odbc_server, {mysql, "server", "database", "username", "password"}}.
+%%
+%% If you want to specify the port:
+%%{odbc_server, {mysql, "server", 1234, "database", "username", "password"}}.
+
+%%
+%% PostgreSQL server:
+%%
+%%{odbc_server, {pgsql, "server", "database", "username", "password"}}.
+%%
+%% If you want to specify the port:
+%%{odbc_server, {pgsql, "server", 1234, "database", "username", "password"}}.
+%%
+%% If you use PostgreSQL, have a large database, and need a
+%% faster but inexact replacement for "select count(*) from users"
+%%
+%%{pgsql_users_number_estimate, true}.
+
+%%
+%% ODBC compatible or MSSQL server:
+%%
+%%{odbc_server, "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"}.
+
+%%
+%% Number of connections to open to the database for each virtual host
+%%
+%%{odbc_pool_size, 10}.
+
+%%
+%% Interval to make a dummy SQL request to keep alive the connections
+%% to the database. Specify in seconds: for example 28800 means 8 hours
+%%
+%%{odbc_keepalive_interval, undefined}.
+
+
+%%%   ===============
+%%%   TRAFFIC SHAPERS
+
+%%
+%% The "normal" shaper limits traffic speed to 1.000 B/s
+%%
+{shaper, normal, {maxrate, 500000}}.
+
+%%
+%% The "fast" shaper limits traffic speed to 50.000 B/s
+%%
+{shaper, fast, {maxrate, 500000}}.
+
+
+%%%   ====================
+%%%   ACCESS CONTROL LISTS
+
+%%
+%% The 'admin' ACL grants administrative privileges to Jabber accounts.
+%% You can put as many accounts as you want.
+%%
+%%{acl, admin, {user, "aleksey", "localhost"}}.
+%%{acl, admin, {user, "ermine", "example.org"}}.
+
+%%
+%% Blocked users
+%%
+%%{acl, blocked, {user, "baduser", "example.org"}}.
+%%{acl, blocked, {user, "test"}}.
+
+%%
+%% Local users: don't modify this line.
+%%
+{acl, local, {user_regexp, ""}}.
+
+%%
+%% More examples of ACLs
+%%
+%%{acl, jabberorg, {server, "jabber.org"}}.
+%%{acl, aleksey, {user, "aleksey", "jabber.ru"}}.
+%%{acl, test, {user_regexp, "^test"}}.
+%%{acl, test, {user_glob, "test*"}}.
+
+%%
+%% Define specific ACLs in a virtual host.
+%%
+%%{host_config, "localhost",
+%% [
+%%  {acl, admin, {user, "bob-local", "localhost"}}
+%% ]
+%%}.
+
+
+%%%   ============
+%%%   ACCESS RULES
+
+%% Define the maximum number of time a single user is allowed to connect:
+{access, max_user_sessions, [{10000, all}]}.
+
+%% Maximum number of offline messages that users can have:
+{access, max_user_offline_messages, [{5000, admin}, {100, all}]}. 
+
+%% This rule allows access only for local users:
+{access, local, [{allow, local}]}.
+
+%% Only non-blocked users can use c2s connections:
+{access, c2s, [{deny, blocked},
+              {allow, all}]}.
+
+%% For all users except admins used "normal" shaper
+{access, c2s_shaper, [{none, admin},
+                     {normal, all}]}.
+
+%% For all S2S connections used "fast" shaper
+{access, s2s_shaper, [{fast, all}]}.
+
+%% Only admins can send announcement messages:
+{access, announce, [{allow, admin}]}.
+
+%% Only admins can use configuration interface:
+{access, configure, [{allow, admin}]}.
+
+%% Admins of this server are also admins of MUC service:
+{access, muc_admin, [{allow, admin}]}.
+
+%% All users are allowed to use MUC service:
+{access, muc, [{allow, all}]}.
+
+%% No username can be registered via in-band registration:
+%% To enable in-band registration, replace 'deny' with 'allow'
+% (note that if you remove mod_register from modules list then users will not
+% be able to change their password as well as register).
+% This setting is default because it's more safe.
+{access, register, [{deny, all}]}.
+
+%% By default frequency of account registrations from the same IP
+%% is limited to 1 account every 10 minutes. To disable put: infinity
+%%{registration_timeout, 600}.
+
+%% Everybody can create pubsub nodes
+{access, pubsub_createnode, [{allow, all}]}.
+
+%%
+%% Define specific Access rules in a virtual host.
+%%
+%%{host_config, "localhost",
+%% [
+%%  {access, c2s, [{allow, admin}, {deny, all}]},
+%%  {access, register, [{deny, all}]}
+%% ]
+%%}.
+
+
+%%%   ================
+%%%   DEFAULT LANGUAGE
+
+%%
+%% language: Default language used for server messages.
+%%
+{language, "en"}.
+
+%%
+%% Set a different default language in a virtual host.
+%%
+%%{host_config, "localhost",
+%% [{language, "ru"}]
+%%}.
+
+
+%%%   =======
+%%%   CAPTCHA
+
+%%
+%% Full path to a script that generates the image.
+%% Note that this script must be made executable
+%% for the user ejabberd:ejabberd.
+%%
+%%{captcha_cmd, "/usr/lib/ejabberd/priv/bin/captcha.sh"}.
+
+%%
+%% Host part of the URL sent to the user.
+%% The port specified must be configured as the "ejabberd_http"
+%% listener which must have the "captcha" directive included
+%% in its configuration (see the "LISTENING PORTS" section above).
+%%
+%%{captcha_host, "localhost:5280"}.
+
+
+%%%   =======
+%%%   MODULES
+
+%%
+%% Modules enabled in all ejabberd virtual hosts.
+%%
+{modules,
+ [
+  {mod_adhoc,    []},
+  {mod_announce, [{access, announce}]}, % requires mod_adhoc
+  {mod_caps,     []},
+  {mod_configure,[]}, % requires mod_adhoc
+  {mod_admin_extra, []},
+  {mod_disco,    []},
+  %%{mod_echo,   [{host, "echo.localhost"}]},
+  {mod_irc,      []},
+  %% NOTE that mod_http_fileserver must also be enabled in the
+  %% "request_handlers" clause of the "ejabberd_http" listener
+  %% configuration (see the "LISTENING PORTS" section above).
+  %%{mod_http_fileserver, [
+  %%                       {docroot, "/var/www"}, 
+  %%                       {accesslog, "/var/log/ejabberd/access.log"}
+  %%                      ]},
+  {mod_last,     []},
+  {mod_muc,      [
+                 %%{host, "conference.@HOST@"},
+                 {access, muc},
+                 {access_create, muc},
+                 {access_persistent, muc},
+                 {access_admin, muc_admin},
+                 {max_users, 500}
+                ]},
+  %%{mod_muc_log,[]},
+  %%{mod_offline,  [{access_max_user_messages, max_user_offline_messages}]},
+  {mod_privacy,  []},
+  {mod_private,  []},
+  {mod_proxy65,  [
+                 {access, local},
+                 {shaper, c2s_shaper}
+                ]},
+  {mod_pubsub,   [ % requires mod_caps
+                 {access_createnode, pubsub_createnode},
+                 {pep_sendlast_offline, false},
+                 {last_item_cache, false},
+                 %%{plugins, ["default", "pep"]}
+                 {plugins, ["flat", "hometree", "pep"]}  % pep requires mod_caps
+                ]},
+  {mod_register, [
+                 %%
+                 %% After successful registration, the user receives
+                 %% a message with this subject and body.
+                 %%
+                 {welcome_message, {"Welcome!",
+                                    "Welcome to a Jabber service powered by Debian. "
+                                    "For information about Jabber visit "
+                                    "http://www.jabber.org"}},
+                 %% Replace it with 'none' if you don't want to send such message:
+                 %%{welcome_message, none},
+
+                 %%
+                 %% When a user registers, send a notification to
+                 %% these Jabber accounts.
+                 %%
+                 %%{registration_watchers, ["admin1@example.org"]},
+
+                 {access, register}
+                ]},
+  {mod_roster,   []},
+  %%{mod_service_log,[]},
+  %%{mod_shared_roster,[]},
+  {mod_stats,    []},
+  {mod_time,     []},
+  {mod_vcard,    []},
+  {mod_version,  []}
+ ]}.
+
+%%
+%% Enable modules with custom options in a specific virtual host
+%%
+%%{host_config, "localhost",
+%% [{{add, modules},
+%%   [
+%%    {mod_echo, [{host, "mirror.localhost"}]}
+%%   ]
+%%  }
+%% ]}.
+
+
+%%% $Id: ejabberd.cfg.example 2497 2009-08-17 20:27:28Z cromain $
+
+%%% Local Variables:
+%%% mode: erlang
+%%% End:
+%%% vim: set filetype=erlang tabstop=8:
diff --git a/install-eg/install_eg.sh b/install-eg/install_eg.sh
new file mode 100755 (executable)
index 0000000..09b1667
--- /dev/null
@@ -0,0 +1,208 @@
+#!/bin/bash
+
+# script environment
+WORKDIR="$( dirname "${BASH_SOURCE[0]}" )"
+
+# OS-level variables
+OS_VERSION="ubuntu-trusty"
+DEBS="git make"
+APT_TOOL="apt-get"
+
+# OpenSRF
+OSRF_USER="opensrf"
+OSRF_HOME="/home/$OSRF_USER"
+OSRF_GIT_URL="git://git.evergreen-ils.org/OpenSRF.git"
+OSRF_SOURCE_DIR="$OSRF_HOME/OpenSRF"
+OSRF_BRANCH="osrf_rel_2_4_1"
+OSRF_PREFIX="/openils"
+OSRF_CONF_PREFIX="/openils/conf"
+ETC_HOSTS="127.0.1.2\tpublic.localhost\tpublic\n127.0.1.3\tprivate.localhost\tprivate"
+EJABBERD_CFG="$WORKDIR/ejabberd.cfg"
+EJABBERD_CONFIG_FILE="/etc/ejabberd/ejabberd.cfg"
+EJABBERD_STOP="/etc/init.d/ejabberd stop"
+EJABBERD_START="/etc/init.d/ejabberd start"
+OSRF_PASSWORD="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9#@!%' | fold -w 8 | head -n 1)"
+
+# Evergreen
+EG_GIT_URL="git://git.evergreen-ils.org/evergreen/pines.git"
+EG_SOURCE_DIR="$OSRF_HOME/pines"
+EG_BRANCH="governor_rel_2_9_1"
+EG_STAFF_CLIENT_STAMP_ID="pines_rel_2_9_1"
+DOJO_RELEASE="1.3.3"
+DOJO_PKG="dojo-release-${DOJO_RELEASE}.tar.gz"
+DOJO_URL_BASE="http://download.dojotoolkit.org/release-${DOJO_RELEASE}"
+MPM_PREFORK_CONF="<IfModule mpm_prefork_module>\n\tStartServers\t\t20\n\tMinSpareServers\t\t5\n\tMaxSpareServers\t\t15\n\tMaxRequestWorkers\t150\n\tMaxConnectionsPerChild\t10000\n</IfModule>"
+
+# Postgres
+EG_DB_HOST="localhost"
+EG_DB_PORT="5432"
+EG_DB_USER="evergreen"
+EG_DB_NAME="evergreen"
+EG_DB_PASSWORD="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9#@!%' | fold -w 8 | head -n 1)"
+EG_ADMIN_USER="admin"
+EG_ADMIN_PASSWORD="open-ils" # not generating this at this point
+PG_PASS_STRING="$EG_DB_HOST:$EG_DB_PORT:$EG_DB_NAME:$EG_DB_USER:$EG_DB_PASSWORD"
+
+SetupOS () {
+$APT_TOOL update && $APT_TOOL install $DEBS
+if [ $(id -u $OSRF_USER > /dev/null) ]; then
+       echo "OpenSRF user $OSRF_USER exists. Skipping..."
+else
+       useradd -m -s /bin/bash $OSRF_USER
+fi
+}
+
+SetupGit () {
+su - $OSRF_USER <<EOF
+cd $OSRF_HOME
+git clone $EG_GIT_URL
+git clone $OSRF_GIT_URL
+cd $OSRF_SOURCE_DIR
+git checkout -b $OSRF_BRANCH $OSRF_BRANCH
+cd $EG_SOURCE_DIR
+git checkout $EG_BRANCH
+EOF
+}
+
+InstallOpenSRF () {
+cd $OSRF_SOURCE_DIR
+make -f src/extras/Makefile.install $OS_VERSION
+
+su - $OSRF_USER <<EOF
+cd $OSRF_SOURCE_DIR
+autoreconf -i
+./configure --prefix=$OSRF_PREFIX --sysconfdir=$OSRF_CONF_PREFIX
+make
+EOF
+
+cd $OSRF_SOURCE_DIR
+make install
+}
+
+ConfigureOpenSRF () {
+echo $OSRF_PASSWORD > $WORKDIR/opensrf-password.$(date +%Y%m%d%H%M%S)
+echo "export \$PATH=\$PATH:$OSRF_PREFIX/bin" >> $OSRF_HOME/.bashrc
+chown -R $OSRF_USER:$OSRF_USER $OSRF_PREFIX
+sed -i "s/$HOSTNAME/$HOSTNAME\n$ETC_HOSTS/" /etc/hosts
+echo $OSRF_PREFIX/lib > /etc/ld.so.conf.d/opensrf.conf
+ldconfig
+$EJABBERD_STOP
+cp -b $EJABBERD_CFG $EJABBERD_CONFIG_FILE
+chown ejabberd:ejabberd $EJABBERD_CONFIG_FILE
+$EJABBERD_START
+for host in private public; do
+       for user in opensrf router; do
+               ejabberdctl register $user ${host}.localhost $OSRF_PASSWORD
+       done;
+done
+}
+
+InstallEvergreen () {
+cd $EG_SOURCE_DIR
+# install prereqs
+make -f Open-ILS/src/extras/Makefile.install $OS_VERSION
+# build and install EG
+su - $OSRF_USER <<EOF
+cd $EG_SOURCE_DIR
+autoreconf -i
+PATH=$OSRF_PREFIX/bin:$PATH ./configure --prefix=$OSRF_PREFIX --sysconfdir=$OSRF_CONF_PREFIX
+make
+EOF
+make STAFF_CLIENT_STAFF_ID="EG_STAFF_CLIENT_STAMP_ID" install
+cd $OSRF_PREFIX/var/web/xul
+ln -sf $EG_STAFF_CLIENT_STAMP_ID/server server
+chown -R $OSRF_USER:$OSRF_USER $OSRF_PREFIX
+}
+
+InstallDojo () {
+# install Dojo
+su - opensrf <<EOF
+wget $DOJO_URL_BASE/$DOJO_PKG
+tar -c $OSRF_PREFIX/var/web/js -xzf $DOJO_PKG
+cp -r $OSRF_PREFIX/var/web/js/dojo-release-$DOJO_RELEASE/* $OSRF_PREFIX/var/web/js/dojo/.
+EOF
+}
+
+ConfigureApache () {
+cd $EG_SOURCE_DIR
+cp Open-ILS/examples/apache_24/eg_24.conf /etc/apache2/sites-available/eg.conf
+cp Open-ILS/examples/apache_24/eg_vhost_24.conf /etc/apache2/eg_vhost.conf
+cp Open-ILS/examples/apache/eg_startup /etc/apache2/
+mkdir /etc/apache2/ssl
+cd /etc/apache2/ssl
+openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
+sed -i "s/APACHE_RUN_USER=www-data/APACHE_RUN_USER=$OSRF_USER" /etc/apache2/envvars
+echo -e $MPM_PREFORK_CONF > /etc/apache2/mods-available/mpm_prefork.conf
+a2dismod mpm_event
+a2enmod mpm_prefork
+a2dissite 000-default
+a2ensite eg.conf
+chown $OSRF_USER /var/lock/apache2
+}
+
+ConfigureEvergreen () {
+sed -i "s/OpenSRF_Password/$OSRF_PASSWORD/g" $WORKDIR/opensrf_core.xml.evergreen
+cp -b $WORKDIR/opensrf_core.xml.evergreen $OSRF_CONF_PREFIX/opensrf_core.xml
+cp -b $OSRF_CONF_PREFIX/opensrf.xml.example $OSRF_CONF_PREFIX/opensrf.xml
+chown -R $OSRF_USER:$OSRF_USER $OSRF_PREFIX
+}
+
+ConfigureDB () {
+echo $EG_DB_PASSWORD > $WORKDIR/evergreen-db-password.$(date +%Y%m%d%H%M%S)
+cd $EG_SOURCE_DIR
+make -f Open-ILS/src/extras/Makefile.install postgres-server-$OS_VERSION
+su - postgres <<EOF
+psql -c "CREATE ROLE $EG_DB_USER WITH SUPERUSER LOGIN PASSWORD $EG_DB_PASSWORD"
+EOF
+echo $PG_PASS_STRING > ~/.pgpass
+chmod 600 ~/.pgpass
+su - $OSRF_USER <<EOF
+echo $PG_PASS_STRING > ~/.pgpass
+chmod 600 ~/.pgpass
+EOF
+}
+
+CreateDB () {
+cd $EG_SOURCE_DIR
+psql -U $EG_DB_USER -vdb_name=$EG_DB_NAME -f Open-ILS/src/sql/Pg/create_database_extensions.sql
+echo "You will need to edit $OSRF_CONF_PREFIX/opensrf.xml with the correct DB connection values."
+}
+
+PopulateDB () {
+perl Open-ILS/src/support-scripts/eg_db_config --update-config \
+       --service all --create-database --create-schema --create-offline \
+       --user $EG_DB_USER --password $EG_DB_PASSWORD --hostname $EG_DB_HOST \
+       --port $EG_DB_PORT --database $EG_DB_NAME --admin-user $EG_ADMIN_USER \
+       --admin-pass $EG_ADMIN_PASSWORD --load-all-sample
+}
+
+SetupLogging () {
+cd $EG_SOURCE_DIR
+cp OpenILS/examples/evergreen-rsyslog.conf /etc/rsyslog.d/
+restart rsyslog
+echo -e "log_destination = 'syslog'\nsyslog_facility = 'LOCAL3'\nsyslog_ident = 'postgres'" >> /etc/postgresql/9.3/main/postgresql.conf
+/etc/init.d/postgresql reload
+}
+
+StartEvergreen () {
+su - $OSRF_USER <<EOF
+osrf_control --localhost --restart-all
+autogen.sh -u
+EOF
+/etc/init.d/apache2 restart
+}
+
+#SetupOS
+#SetupGit
+#InstallOpenSRF
+#ConfigureOpenSRF
+#InstallEvergreen
+#InstallDojo
+#ConfigureApache
+#ConfigureEvergreen
+#ConfigureDB
+#CreateDB  # for when you're importing data via pg_restore
+#PopulateDB  # create a stock EG database with concerto data
+#SetupLogging
+#StartEvergreen
+
diff --git a/install-eg/opensrf-password.20160408145357 b/install-eg/opensrf-password.20160408145357
new file mode 100644 (file)
index 0000000..70bb2dd
--- /dev/null
@@ -0,0 +1 @@
+BIaPgInb
diff --git a/install-eg/opensrf_core.xml.evergreen b/install-eg/opensrf_core.xml.evergreen
new file mode 100644 (file)
index 0000000..54383e2
--- /dev/null
@@ -0,0 +1,186 @@
+<?xml version="1.0"?>
+<!-- 
+Example OpenSRF bootstrap configuration file for Evergreen
+-->
+<config>
+  <!-- Options for <loglevel>: 0 None, 1 Error, 2 Warning, 3 Info, 4 debug -->
+  <opensrf>
+    <routers>
+
+      <!-- define the list of routers our services will register with -->
+      <router>
+        <!-- 
+          This is the public router.  On this router, we only register
+          applications which should be accessible to everyone on the OpenSRF
+          network
+        -->
+        <name>router</name>
+        <domain>public.localhost</domain>
+
+        <services>
+          <service>opensrf.math</service>
+          <service>open-ils.actor</service>
+          <service>open-ils.acq</service>
+          <service>open-ils.auth</service>
+          <service>open-ils.auth_proxy</service>
+          <service>open-ils.booking</service>
+          <service>open-ils.cat</service>
+          <service>open-ils.circ</service>
+          <service>open-ils.collections</service>
+          <service>open-ils.fielder</service>
+          <service>open-ils.pcrud</service>
+          <service>open-ils.permacrud</service>
+          <service>open-ils.reporter</service>
+          <service>open-ils.resolver</service>
+          <service>open-ils.search</service>
+          <service>open-ils.supercat</service>
+          <service>open-ils.url_verify</service>
+          <service>open-ils.vandelay</service>
+          <service>open-ils.serial</service>
+        </services>
+      </router>
+
+      <router>
+        <!--
+          This is the private router.  All applications must register with 
+          this router, so no explicit <services> section is required
+        -->
+        <name>router</name>
+        <domain>private.localhost</domain>
+      </router>
+    </routers>
+
+    <!-- Our domain should match that of the private router -->
+    <domain>private.localhost</domain>
+    <username>opensrf</username>
+    <passwd>OpenSRF_Password</passwd>
+    <port>5222</port>
+
+    <!-- 
+      Name of the router used on our private domain.  
+      This should match one of the <name> of the private router above.
+     -->
+    <router_name>router</router_name>
+
+    <!-- <logfile>/openils/var/log/osrfsys.log</logfile> -->
+      <logfile>syslog</logfile>
+      <syslog>local0</syslog>
+      <actlog>local1</actlog>
+    <loglevel>3</loglevel>
+    <settings_config>/openils/conf/opensrf.xml</settings_config>
+  </opensrf>
+  <!-- 
+    The section between <gateway>...</gateway> is a standard OpenSRF C
+    stack configuration file
+  -->
+  <gateway>
+    <client>true</client>
+    <router_name>router</router_name>
+
+    <!-- The gateway connects to the public domain for security -->
+    <domain>public.localhost</domain>
+
+    <!-- This section will be soon deprecated for multi-domain mode... -->
+    <services>
+      <service>opensrf.math</service>
+      <service>opensrf.dbmath</service>
+      <service>open-ils.cat</service>
+      <service>open-ils.search</service>
+      <service>open-ils.circ</service>
+      <service>open-ils.actor</service>
+      <service>open-ils.auth</service>
+      <service>open-ils.auth_proxy</service>
+      <service>open-ils.collections</service>
+      <service>open-ils.reporter</service>
+    </services>
+
+    <!-- jabber login info -->
+    <username>opensrf</username>
+    <passwd>OpenSRF_Password</passwd>
+    <port>5222</port>
+    <loglevel>3</loglevel>
+    <!-- <logfile>/openils/var/log/gateway.log</logfile> -->
+      <logfile>syslog</logfile>
+      <syslog>local6</syslog>
+      <actlog>local1</actlog>
+  </gateway>
+  <!-- ======================================================================================== -->
+  <routers>
+    <router>
+      <!-- public router -->
+      <trusted_domains>
+        <!-- 
+          Allow private services to register with this router 
+          and public client to send requests to this router. 
+        -->
+        <server>private.localhost</server>
+
+        <!-- 
+          Also allow private clients to send to the router so it
+          can receive error messages
+        -->
+        <client>private.localhost</client>
+        <client>public.localhost</client>
+
+      </trusted_domains>
+      <transport>
+        <server>public.localhost</server>
+        <port>5222</port>
+        <unixpath>/openils/var/sock/unix_sock</unixpath>
+        <username>router</username>
+        <password>OpenSRF_Password</password>
+        <resource>router</resource>
+        <connect_timeout>10</connect_timeout>
+        <max_reconnect_attempts>5</max_reconnect_attempts>
+      </transport>
+      <!-- <logfile>/openils/var/log/router-public.log</logfile> -->
+        <logfile>syslog</logfile>
+        <syslog>local2</syslog>
+      <loglevel>2</loglevel>
+    </router>
+    <router>
+      <!-- private router -->
+      <trusted_domains>
+        <server>private.localhost</server>
+        <!-- 
+          Only clients on the private domain can send requests to this router
+         -->
+        <client>private.localhost</client>
+      </trusted_domains>
+      <transport>
+        <server>private.localhost</server>
+        <port>5222</port>
+        <username>router</username>
+        <password>OpenSRF_Password</password>
+        <resource>router</resource>
+        <connect_timeout>10</connect_timeout>
+        <max_reconnect_attempts>5</max_reconnect_attempts>
+      </transport>
+      <!-- <logfile>/openils/var/log/router-private.log</logfile> -->
+        <logfile>syslog</logfile>
+        <syslog>local2</syslog>
+      <loglevel>2</loglevel>
+    </router>
+  </routers>
+  <!-- ======================================================================================== -->
+
+  <!-- Any methods which match any of these match_string node values will     
+       have their params redacted from lower-level input logging.             
+       Adjust these examples as needed. -->      
+  <shared>
+    <log_protect>
+      <match_string>open-ils.auth.authenticate.verify</match_string>
+      <match_string>open-ils.auth.authenticate.complete</match_string>
+      <match_string>open-ils.auth_proxy.login</match_string>
+      <match_string>open-ils.actor.patron.password_reset.commit</match_string>
+      <match_string>open-ils.actor.user.password</match_string>
+      <match_string>open-ils.actor.user.username</match_string>
+      <match_string>open-ils.actor.user.email</match_string>
+      <match_string>open-ils.actor.patron.update</match_string>
+      <match_string>open-ils.cstore.direct.actor.user.create</match_string>
+      <match_string>open-ils.cstore.direct.actor.user.update</match_string>
+      <match_string>open-ils.cstore.direct.actor.user.delete</match_string>
+      <match_string>open-ils.search.z3950.apply_credentials</match_string>
+    </log_protect>
+  </shared>
+</config>