[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