Koha/debian/scripts/koha-create
Lars Wirzenius 50503da119 Make koha-create be able to handle manual database creation.
This is necessary if we do not have access to DB server with sufficient
permissions. The DB server is used for other things, that may well be
the case.

Signed-off-by: Galen Charlton <gmcharlt@gmail.com>
2010-05-25 08:04:32 -04:00

229 lines
6.1 KiB
Bash
Executable file

#!/bin/sh
#
# koha-create -- Create a new Koha instance.
# Copyright 2010 Catalyst IT, Ltd
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -e
die() {
echo "$@" 1>&2
exit 1
}
generate_config_file() {
touch "$2"
chown "root:$username" "$2"
chmod 0640 "$2"
sed -e "s/__KOHASITE__/$name/g" \
-e "s/__OPACPORT__/80/g" \
-e "s/__INTRAPORT__/$INTRAPORT/g" \
-e "s/__OPACSERVER__/$domain/g" \
-e "s/__INTRASERVER__/$intradomain/g" \
-e "s/__ZEBRA_PASS__/$zebrapwd/g" \
-e "s/__DB_NAME__/$mysqldb/g" \
-e "s/__DB_HOST__/$mysqlhost/g" \
-e "s/__DB_USER__/$mysqluser/g" \
-e "s/__DB_PASS__/$mysqlpwd/g" \
-e "s/__UNIXUSER__/$username/g" \
-e "s/__UNIXGROUP__/$username/g" \
"/etc/koha/$1" > "$2"
}
getmysqlhost() {
awk '
/^\[/ { inclient = 0 }
/^\[client\]/ { inclient = 1 }
inclient && /^ *host *=/ { print $3 }' \
/etc/mysql/koha-common.cnf
}
getinstancemysqlpassword() {
sed -n '/<pass>/s:.*>\(.*\)</pass>.*:\1:p' \
"/etc/koha/sites/$1/koha-conf.xml"
}
# Set defaults and read config file, if it exists.
DOMAIN=""
INTRAPORT="8080"
INTRAPREFIX=""
INTRASUFFIX=""
DEFAULTSQL=""
if [ -e /etc/koha/koha-sites.conf ]
then
. /etc/koha/koha-sites.conf
fi
# Parse command line.
[ "$#" = 2 ] ||
die "Usage: $0 [--create-db|--request-db|--populate-db] instancename"
case "$1" in
--create-db) op=create ;;
--request-db) op=request ;;
--populate-db) op=populate ;;
*) die "Usage: $0 [--create-db|--request-db|--populate-db] instancename" ;;
esac
name="$2"
domain="$name$DOMAIN"
if [ "$INTRAPORT" = 80 ] || [ "$INTRAPORT" = "" ]
then
intradomain="$INTRAPREFIX$name$INTRASUFFIX$DOMAIN"
else
intradomain="$INTRAPREFIX$name$INTRASUFFIX$DOMAIN:$INTRAPORT"
fi
mysqldb="koha_$name"
mysqlhost="$(getmysqlhost)"
mysqluser="koha_$name"
if [ "$op" = create ] || [ "$op" = request ]
then
mysqlpwd="$(pwgen -1)"
else
mysqlpwd="$(getinstancemysqlpassword $name)"
fi
if [ "$op" = create ] || [ "$op" = request ]
then
# Create new user and group.
username="$name-koha"
if getent passwd "$username" > /dev/null
then
die "User $username already exists."
fi
if getent group "$username" > /dev/null
then
die "Group $username already exists."
fi
adduser --no-create-home --disabled-login \
--gecos "Koha instance $username" \
--quiet "$username"
# Create the site-specific directories.
koha-create-dirs "$name"
# Generate Zebra database password.
zebrapwd="$(pwgen -1)"
# Set up MySQL database for this instance.
if [ "$op" = create ]
then
mysql --defaults-extra-file=/etc/mysql/koha-common.cnf <<eof
CREATE DATABASE $mysqldb;
CREATE USER '$mysqluser'@'%' IDENTIFIED BY '$mysqlpwd';
GRANT ALL PRIVILEGES ON $mysqldb.* TO '$mysqluser';
FLUSH PRIVILEGES;
eof
fi
# Generate and install Apache site-available file and log dir.
generate_config_file apache-site.conf.in \
"/etc/apache2/sites-available/$name"
mkdir "/var/log/koha/$name"
chown "$username:$username" "/var/log/koha/$name"
# Generate and install main Koha config file.
generate_config_file koha-conf-site.xml.in \
"/etc/koha/sites/$name/koha-conf.xml"
# Generate and install Zebra config files.
generate_config_file zebra-biblios-site.cfg.in \
"/etc/koha/sites/$name/zebra-biblios.cfg"
generate_config_file zebra-authorities-site.cfg.in \
"/etc/koha/sites/$name/zebra-authorities.cfg"
generate_config_file zebra-authorities-dom-site.cfg.in \
"/etc/koha/sites/$name/zebra-authorities-dom.cfg"
generate_config_file zebra.passwd.in \
"/etc/koha/sites/$name/zebra.passwd"
# Create a GPG-encrypted file for requesting a DB to be set up.
if [ "$op" = request ]
then
touch "$name-db-request.txt"
chmod 0600 "$name-db-request.txt"
cat > "$name-db-request.txt" << eof
Please create a database and user on $mysqlhost as follows:
database name: $mysqldb
database user: $mysqluser
password: $mysqlpwd
Thank you.
eof
echo "See $name-db-request.txt for database creation request."
echo "Please forward it to the right person, and then run"
echo "$0 --populate-db $name"
echo "Thanks."
fi
fi
if [ "$op" = create ] || [ "$op" = populate ]
then
# Use the default database content if that exists.
if [ -e "$DEFAULTSQL" ]
then
# Populate the database with default content.
zcat "$DEFAULTSQL" |
sed "s/__KOHASITE__/$name/g" |
mysql --host="$mysqlhost" --user="$mysqluser" --password="$mysqlpwd"
# Change the default user's password.
staffpass="$(pwgen -1)"
staffdigest=$(echo -n "$staffpass" |
perl -e '
use Digest::MD5 qw(md5_base64);
while (<>) { print md5_base64($_), "\n"; }')
mysql --host="$mysqlhost" --user="$mysqluser" \
--password="$mysqlpwd" <<eof
USE \`$mysqldb\`;
UPDATE borrowers
SET password = '$staffdigest'
WHERE borrowernumber = 3;
eof
echo "staff user password is '$staffpass' but keep that secret"
# Upgrade the database schema, just in case the dump was from an
# old version.
koha-upgrade-schema "$name"
else
echo "Koha instance is empty, no staff user created."
fi
fi
if [ "$op" = create ] || [ "$op" = populate ]
then
# Reconfigure Apache.
a2ensite "$name"
service apache2 restart
# Start Zebra.
koha-start-zebra "$name"
fi