From 1fb5dde26c53ed317c36fa97abafa873cc5c9c24 Mon Sep 17 00:00:00 2001 From: Robin Sheat Date: Fri, 5 Oct 2012 16:04:23 +1300 Subject: [PATCH] Bug 8878 - a command to provide a shell with the koha environment This command behaves something like su(1), but provides you with a shell as the koha user, and with the environment pointing to the right places. Signed-off-by: Mason James Signed-off-by: Marcel de Rooy Signed-off-by: Jared Camins-Esakov Signed-off-by: Chris Cormack --- debian/docs/koha-shell.xml | 112 +++++++++++++++++++++++++++++++++++++ debian/koha-common.install | 1 + debian/scripts/koha-shell | 88 +++++++++++++++++++++++++++++ 3 files changed, 201 insertions(+) create mode 100644 debian/docs/koha-shell.xml create mode 100755 debian/scripts/koha-shell diff --git a/debian/docs/koha-shell.xml b/debian/docs/koha-shell.xml new file mode 100644 index 0000000000..a9029f7b1e --- /dev/null +++ b/debian/docs/koha-shell.xml @@ -0,0 +1,112 @@ +
+ koha-shell + + Koha is the first free software library automation package. + + + Robin + Sheat + + + Catalyst IT + http://www.catalyst.net.nz + + Author + + + + + + + koha-shell + 8 + + + + koha-shell + Gives you a shell with the user and environment set to make it easy to do koha operations. + UNIX/Linux + + + + + koha-shell + COMMAND + + + + SHELL + + instancename + + + + Options + + + + + Run the specified command rather than launching a shell. + + + + + + Show a usage synopsis. + + + + + + Make the shell a login shell. + + + + + + Preserve the current environment (note that if you run it through 'sudo', this may not work as you'd expect.) + + + + + + Run the specified shell. The default is the shell of the current environment, followed by /bin/sh. + + + + + + Show the command that is going to be run. + + + + + + Description + This launches a shell with the user and required environment variables set in such a way that running any Koha commands will + work correctly. With the use of '-c', it can be used to easily run commands in the correct environment. + It behaves mostly as a wrapper for su(1), so a deeper discussion of the options can be found in there. + + + + Examples + + To get a shell: + + $ sudo koha-shell library + + To run a command: + + $ sudo koha-shell -c "/usr/share/koha/bin/migration_tools/bulkmarcimport.pl -b -file data.marc" library + + + See also + + koha-foreach(8) + su(1) + + + + + +
diff --git a/debian/koha-common.install b/debian/koha-common.install index 50affbdbfd..2a5573e604 100644 --- a/debian/koha-common.install +++ b/debian/koha-common.install @@ -24,6 +24,7 @@ debian/scripts/koha-reset-passwd usr/sbin debian/scripts/koha-restart-zebra usr/sbin debian/scripts/koha-restore usr/sbin debian/scripts/koha-run-backups usr/sbin +debian/scripts/koha-shell usr/sbin debian/scripts/koha-start-zebra usr/sbin debian/scripts/koha-stop-zebra usr/sbin debian/scripts/koha-upgrade-schema usr/sbin diff --git a/debian/scripts/koha-shell b/debian/scripts/koha-shell new file mode 100755 index 0000000000..8d05b516ef --- /dev/null +++ b/debian/scripts/koha-shell @@ -0,0 +1,88 @@ +#!/usr/bin/perl +# koha-shell -- put you in a shell with a koha environment set up +# Copyright 2012 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 . + +use Getopt::Long; +use Modern::Perl; + +Getopt::Long::Configure("bundling"); + +my %opts; +my $res = GetOptions( \%opts, "command|c=s", "help|h", "login|l", "shell|s=s", + "preserve-environment|p|m", "verbose|v" ); + +if ( !$res || $opts{help} ) { + show_help( !$res ); + exit( !$res ); +} + +if ( !@ARGV ) { + show_help( 1, "An instance name must be supplied." ); + exit(1); +} +my $instance = shift @ARGV; +if ( !-e "/etc/koha/sites/$instance" ) { + show_help( 1, "The instance doesn't exist: $instance" ); + exit(1); +} +my $shell = $opts{shell} || $ENV{SHELL} || '/bin/sh'; + +# Now we're set up, build the 'su' command +my @su_args; +push @su_args, '/bin/su'; +push @su_args, '--preserve-environment' if $opts{'preserve-environment'}; +push @su_args, '--login' if $opts{login}; +push @su_args, '--command', + "env " + . "KOHA_CONF=/etc/koha/sites/$instance/koha-conf.xml " + . "PERL5LIB=/usr/share/koha/lib $shell" + . ( $opts{command} ? " -c '$opts{command}'" : '' ); +push @su_args, "$instance-koha"; + +print "Command: '".join("' '",@su_args)."'\n" if $opts{verbose}; +system(@su_args); +if ( $? == -1 ) { + print STDERR "failed to execute: $!\n"; +} +elsif ( $? & 127 ) { + printf STDERR "child died with signal %d, %s coredump\n", + ( $? & 127 ), ( $? & 128 ) ? 'with' : 'without'; +} + +sub show_help { + my ( $err, $msg ) = @_; + + my $fh = $err ? *STDERR : *STDOUT; + say $fh "Error: " . $msg if $msg; + print $fh $_ while ; +} + +__DATA__ +koha-shell -- gives you a shell with your Koha environment set up + +Usage: koha-shell [options] [instance name] + +Options: + -c, --command COMMAND pass COMMAND to the invoked shell + -h, --help show this help and quit + -l, --login make the shell a login shell + -m, -p, + --preserve-environment do not reset environment variables + -s, --shell SHELL use SHELL instead of the one from your environment + -v, --verbose output the full command that will be executed + +The default shell is the one currently in use. Refer to su(1) for more detail +on these options. -- 2.39.5