[Koha-patches] [PATCH] Bug 6913: More options for koha-create and koha-remove
Jared Camins-Esakov
jcamins at cpbibliography.com
Mon Oct 10 04:38:15 CEST 2011
This patch has a small error with the mysql command line options that causes
problems for some versions of MySQL. Corrected patch to follow.
On Sat, Oct 8, 2011 at 3:49 PM, Jared Camins-Esakov <
jcamins at cpbibliography.com> wrote:
> This commit makes koha-create more flexible by adding a number of
> command-line
> and configuration options.
>
> The biggest change is to add support for pre-determined MySQL credentials
> using
> a file in /etc/koha/passwd (for security reasons, if you use this feature,
> make
> sure the file is not world-readable). The configuration file has the
> following
> format:
> instance:user:password:database
> The database is optional, but the other two are both required if you want
> to
> specify MySQL credentials. If no credentials are specified for a given
> instance,
> the standard koha_instance username and an auto-generated password are
> used.
>
> The following additional command line options are now available:
> * --use-db - use a pre-existing database, see also --database
> * --database - specify the name of the mysql database (still defaults to
> koha_instance)
> * --passwdfile - specify a custom (Koha) passwd file for MySQL credentials
>
> The following additional variables are now available (for use in
> koha-sites.conf or a custom config file):
> * OPACPORT (previously added but not documented) - port on which the OPAC
> should be served
> * OPACPREFIX - prefix for the OPAC's virtual host
> * OPACSUFFIX - suffix for the OPAC's virtual host
>
> This commit also adds the --keep-mysql option to koha-remove, which, if
> specified, will prevent koha-remove from deleting the database or MySQL
> user
> when removing an instance.
> ---
> debian/docs/koha-create.xml | 57 +++++++++++++++++++++++++++++++++++--
> debian/docs/koha-remove.xml | 12 ++++++++
> debian/scripts/koha-create | 66
> +++++++++++++++++++++++++++++++++++-------
> debian/scripts/koha-remove | 16 ++++++++++-
> 4 files changed, 136 insertions(+), 15 deletions(-)
>
> diff --git a/debian/docs/koha-create.xml b/debian/docs/koha-create.xml
> index a3e1520..50a3189 100644
> --- a/debian/docs/koha-create.xml
> +++ b/debian/docs/koha-create.xml
> @@ -24,11 +24,13 @@
> <refsynopsisdiv>
> <cmdsynopsis>
> <command>koha-create</command>
> - <arg
> choice="req"><option>--create-db</option>|<option>--request-db</option>|<option>--populate-db</option></arg>
> + <arg
> choice="req"><option>--create-db</option>|<option>--request-db</option>|<option>--populate-db</option>|<option>--use-db</option></arg>
> <arg><option>--marcflavor</option> marc21|normarc|unimarc</arg>
> <arg><option>--zebralang</option> en|nb|fr</arg>
> <arg><option>--defaultsql</option> /path/to/some.sql</arg>
> <arg><option>--configfile</option> /path/to/config</arg>
> + <arg><option>--passwdfile</option> /path/to/passwd</arg>
> + <arg><option>--database</option> database</arg>
> <arg><option>--adminuser</option> n</arg>
> <arg choice="req"
> rep="norepeat"><replaceable>instancename</replaceable></arg>
> </cmdsynopsis>
> @@ -40,7 +42,7 @@
> <varlistentry>
> <term><option>--create-db</option></term>
> <listitem>
> - <para>Create a new datbase on localhost. If the database you want
> to use does not reside on localhost, you can use
> <option>--request-db</option> and <option>--populate-db</option>, see
> below.</para>
> + <para>Create a new database on localhost. If the database you want
> to use does not reside on localhost, you can use
> <option>--request-db</option> and <option>--populate-db</option>, see below.
> If the database already exists, you can use <option>--use-db</option>, see
> below.</para>
> </listitem>
> </varlistentry>
>
> @@ -54,7 +56,14 @@
> <varlistentry>
> <term><option>--populate-db</option></term>
> <listitem>
> - <para>When you have run koha-create with the
> <option>--request-db</option> option, and a database has been set up, you
> can finnish your installation by running <command>koha-create</command> with
> this option.</para>
> + <para>When you have run koha-create with the
> <option>--request-db</option> option, and a database has been set up, you
> can finish your installation by running <command>koha-create</command> with
> this option.</para>
> + </listitem>
> + </varlistentry>
> +
> + <varlistentry>
> + <term><option>--use-db</option></term>
> + <listitem>
> + <para>When the database you want to use has already been
> populated, you can run <command>koha-create</command> with this option to
> take care of all the other set-up configuration.</para>
> </listitem>
> </varlistentry>
>
> @@ -66,6 +75,13 @@
> </varlistentry>
>
> <varlistentry>
> + <term><option>--database</option></term>
> + <listitem>
> + <para>MySQL database to use.</para>
> + </listitem>
> + </varlistentry>
> +
> + <varlistentry>
> <term><option>--defaultsql</option></term>
> <listitem>
> <para>Path to an SQL-file other than the one pointed to in the
> default or alternative config file. Corresponds to the DEFAULTSQL config
> file variable.</para>
> @@ -80,6 +96,13 @@
> </varlistentry>
>
> <varlistentry>
> + <term><option>--passwdfile</option></term>
> + <listitem>
> + <para>Path to an alternative passwd file. This file is in the same
> format as the default (Koha) passwd file, see below for details.</para>
> + </listitem>
> + </varlistentry>
> +
> + <varlistentry>
> <term><option>--zebralang</option></term>
> <listitem>
> <para>Primary language for Zebra indexing. Corresponds to the
> ZEBRA_LANGUAGE config file variable.</para>
> @@ -107,6 +130,27 @@
> </varlistentry>
>
> <varlistentry>
> + <term><option>OPACPORT</option></term>
> + <listitem>
> + <para>The port for the OPAC.</para>
> + </listitem>
> + </varlistentry>
> +
> + <varlistentry>
> + <term><option>OPACPREFIX</option></term>
> + <listitem>
> + <para>This is inserted before the instance name when forming
> Apache ServerName. For subdomains, make sure it ends with a period.</para>
> + </listitem>
> + </varlistentry>
> +
> + <varlistentry>
> + <term><option>OPACSUFFIX</option></term>
> + <listitem>
> + <para>This is inserted after the instance name, but before the
> domain name, when forming Apache ServerName.</para>
> + </listitem>
> + </varlistentry>
> +
> + <varlistentry>
> <term><option>INTRAPORT</option></term>
> <listitem>
> <para>The port for the intranet. If you set this to empty or 80,
> then you must also define INTRAPREFIX or INTRASUFFIX.</para>
> @@ -169,6 +213,13 @@
> <para>Configuration variables are read from this file, if it
> exists.</para>
> </listitem>
> </varlistentry>
> +
> + <varlistentry>
> + <term><option><filename>/etc/koha/passwd</filename></option></term>
> + <listitem>
> + <para>Pre-selected database credentials are read from this file,
> if it exists. The format for this file is
> instancename:username:passwd:database. Database is optional, but the other
> three are required if you want to use pre-determined database user
> credentials.</para>
> + </listitem>
> + </varlistentry>
> </variablelist>
> </refsect1>
>
> diff --git a/debian/docs/koha-remove.xml b/debian/docs/koha-remove.xml
> index 5d5767f..7acc7fb 100644
> --- a/debian/docs/koha-remove.xml
> +++ b/debian/docs/koha-remove.xml
> @@ -24,10 +24,22 @@
> <refsynopsisdiv>
> <cmdsynopsis>
> <command>koha-remove</command>
> + <arg><option>--keep-mysql</option></arg>
> <arg choice="req" rep="repeat">instancename</arg>
> </cmdsynopsis>
> </refsynopsisdiv>
>
> + <refsect1><title>Options</title>
> + <variablelist>
> + <varlistentry>
> + <term><option>--keep-mysql</option></term>
> + <listitem>
> + <para>Leave the MySQL database and user when removing the Koha
> instance.</para>
> + </listitem>
> + </varlistentry>
> + </variablelist>
> + </refsect1>
> +
> <refsect1><title>Description</title>
> <para>Remove one or more Koha instance(s). This removes all files
> associated with a Koha instance.</para>
> </refsect1>
> diff --git a/debian/scripts/koha-create b/debian/scripts/koha-create
> index b52cf90..b7b0963 100755
> --- a/debian/scripts/koha-create
> +++ b/debian/scripts/koha-create
> @@ -19,11 +19,12 @@
>
> set -e
>
> -usage="Usage: $0 [--create-db|--request-db|--populate-db] \
> +usage="Usage: $0 [--create-db|--request-db|--populate-db|--use-db] \
> [--marcflavor marc21|normarc|unimarc] \
> [--zebralang en|nb|fr] \
> [--defaultsql /path/to/some.sql] \
> - [--configfile /path/to/config] [--adminuser n] instancename"
> + [--configfile /path/to/config] [--passwdfile /path/to/passwd] \
> + [--database database] [--adminuser n] instancename"
>
> die() {
> echo "$@" 1>&2
> @@ -76,6 +77,8 @@ getinstancemysqldatabase() {
> # Set defaults and read config file, if it exists.
> DOMAIN=""
> OPACPORT="80"
> +OPACPREFIX=""
> +OPACSUFFIX=""
> INTRAPORT="8080"
> INTRAPREFIX=""
> INTRASUFFIX=""
> @@ -83,14 +86,15 @@ DEFAULTSQL=""
> ZEBRA_MARC_FORMAT="marc21"
> ZEBRA_LANGUAGE="en"
> ADMINUSER="1"
> +PASSWDFILE="/etc/koha/passwd"
> if [ -e /etc/koha/koha-sites.conf ]
> then
> . /etc/koha/koha-sites.conf
> fi
>
> -[ $# -ge 2 ] && [ $# -le 12 ] || die $usage
> +[ $# -ge 2 ] && [ $# -le 16 ] || die $usage
>
> -TEMP=`getopt -o crpm:l:d:f:a: -l
> create-db,request-db,populate-db,marcflavor:,zebralang:,defaultsql:,configfile:,adminuser:
> \
> +TEMP=`getopt -o crpm:l:d:f:a: -l
> create-db,request-db,populate-db,use-db,marcflavor:,zebralang:,defaultsql:,configfile:,passwdfile:,adminuser:
> \
> -n "$0" -- "$@"`
>
> # Note the quotes around `$TEMP': they are essential!
> @@ -107,10 +111,13 @@ while true ; do
> -c|--create-db) op=create ; shift ;;
> -r|--request-db) op=request ; shift ;;
> -p|--populate-db) op=populate ; shift ;;
> + -u|--use-db) op=use ; shift ;;
> -m|--marcflavor) CLO_ZEBRA_MARC_FORMAT="$2" ; shift 2 ;;
> -l|--zebralang) CLO_ZEBRA_LANGUAGE="$2" ; shift 2 ;;
> -d|--defaultsql) CLO_DEFAULTSQL="$2" ; shift 2 ;;
> -f|--configfile) configfile="$2" ; shift 2 ;;
> + -s|--passwdfile) CLO_PASSWDFILE="$2" ; shift 2 ;;
> + -b|--database) CLO_DATABASE="$2" ; shift 2 ;;
> -a|--adminuser) CLO_ADMINUSER="$2" ; shift 2 ;;
> --) shift ; break ;;
> *) die "Internal error processing command line arguments" ;;
> @@ -145,26 +152,54 @@ if [ "$CLO_ADMINUSER" != "" ]
> then
> ADMINUSER="$CLO_ADMINUSER"
> fi
> +if [ "$CLO_PASSWDFILE" != "" ]
> +then
> + PASSWDFILE="$CLO_PASSWDFILE"
> +fi
>
> name="$1"
>
> -opacdomain="$name$DOMAIN"
> +opacdomain="$OPACPREFIX$name$OPACSUFFIX$DOMAIN"
> intradomain="$INTRAPREFIX$name$INTRASUFFIX$DOMAIN"
>
>
> -mysqldb="koha_$name"
> +if [ `cat $PASSWDFILE | grep "^$name:"` ]
> +then
> + passwdline=`cat $PASSWDFILE | grep "^$name:"`
> + mysqluser=`echo $passwdline | cut -d ":" -f 2`
> + mysqlpwd=`echo $passwdline | cut -d ":" -f 3`
> + mysqldb=`echo $passwdline | cut -d ":" -f 4`
> +fi
> +
> +# The order of precedence for MySQL database name is:
> +# default < passwd file < command line
> +if [ "$mysqldb" = "" ]
> +then
> + mysqldb="koha_$name"
> +fi
> +if [ "$CLO_DATABASE" != "" ]
> +then
> + mysqldb="$CLO_DATABASE"
> +fi
> +
> +if [ "$mysqluser" = "" ]
> +then
> + mysqluser="koha_$name"
> +fi
> mysqlhost="$(getmysqlhost)"
> -mysqluser="koha_$name"
>
> -if [ "$op" = create ] || [ "$op" = request ]
> +if [ "$op" = create ] || [ "$op" = request ] || [ "$op" = use ]
> then
> - mysqlpwd="$(pwgen -1)"
> + if [ "$mysqlpwd" = "" ]
> + then
> + mysqlpwd="$(pwgen -1)"
> + fi
> else
> mysqlpwd="$(getinstancemysqlpassword $name)"
> fi
>
>
> -if [ "$op" = create ] || [ "$op" = request ]
> +if [ "$op" = create ] || [ "$op" = request ] || [ "$op" = use ]
> then
> # Create new user and group.
> username="$name-koha"
> @@ -197,6 +232,15 @@ FLUSH PRIVILEGES;
> eof
> fi #`
>
> + if [ "$op" = use ]
> + then
> + mysql --force --defaults-extra-file=/etc/mysql/koha-common.cnf
> <<eof
> +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"
> @@ -283,7 +327,7 @@ eof
> fi
>
>
> -if [ "$op" = create ] || [ "$op" = populate ]
> +if [ "$op" = create ] || [ "$op" = populate ] || [ "$op" = use ]
> then
> # Reconfigure Apache.
> a2ensite "$name"
> diff --git a/debian/scripts/koha-remove b/debian/scripts/koha-remove
> index 10a8b78..ee392a8 100755
> --- a/debian/scripts/koha-remove
> +++ b/debian/scripts/koha-remove
> @@ -19,16 +19,30 @@
>
> set -e
>
> +args=$(getopt -l keep-mysql -o k -n $0 -- "$@")
> +set -- $args
> +while [ ! -z "$1" ]
> +do
> + case "$1" in
> + -k|--keep-mysql) keepmysql=1; exit;;
> + *) break;;
> + esac
> + shift
> +done
> +
>
> for name in "$@"
> do
> echo "Removing Koha instance $name"
>
> - mysql --defaults-extra-file=/etc/mysql/koha-common.cnf <<eof
> + if [ "$keepmysql" != "1" ]
> + then
> + mysql --defaults-extra-file=/etc/mysql/koha-common.cnf <<eof
> DROP USER \`koha_$name\`;
> DROP DATABASE \`koha_$name\`;
> FLUSH PRIVILEGES;
> eof
> + fi #`
>
> koha-stop-zebra $name
> rm "/etc/apache2/sites-available/$name"
> --
> 1.7.2.5
>
>
--
Jared Camins-Esakov
Bibliographer, C & P Bibliography Services, LLC
(phone) +1 (917) 727-3445
(e-mail) jcamins at cpbibliography.com
(web) http://www.cpbibliography.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/koha-patches/attachments/20111009/b62b9466/attachment-0001.htm>
More information about the Koha-patches
mailing list