source: tags/4.1.0/deploy.sh.in @ 490

Last change on this file since 490 was 309, checked in by katerina, 10 years ago

Documentation update.

File size: 30.0 KB
Line 
1#! /bin/sh
2
3#
4# Copyright Rainer Wichmann (2005)
5#
6# License Information:
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program; if not, write to the Free Software
19# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20#
21
22#VERSION2.0
23
24# -----------------------------------------------------------------------
25# Be Bourne compatible
26# -----------------------------------------------------------------------
27
28if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
29  emulate sh
30  NULLCMD=:
31elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
32  set -o posix
33fi
34
35# -----------------------------------------------------------------------
36# Make sure we support functions (from the autoconf manual)
37# -----------------------------------------------------------------------
38
39SHELL="${SHELL-/bin/sh}"
40if test x"$1" = "x--re-executed"
41then
42    shift
43elif "$SHELL" -c 'foo () { (exit 0); exit 0; }; foo' 2>/dev/null
44then
45    :
46else
47    for cmd in sh bash ash bsh ksh zsh sh5; do
48        X="$PATH:/bin:/usr/bin:/usr/afsws/bin:/usr/ucb";
49        OLD_IFS=${IFS}
50        IFS=':'; export IFS
51        for dir in $X; do
52            shell="$dir/$cmd"
53            if (test -f "$shell" || test -f "$shell.exe")
54            then
55                if "$shell" -c  'foo () { (exit 0); exit 0; }; foo' 2>/dev/null
56                then
57                    SHELL="$shell"; export SHELL
58                    IFS=${OLD_IFS}; export IFS
59                    exec "$shell" "$0" --re-executed ${1+"$@"}
60                fi
61            fi
62        done
63        IFS=${OLD_IFS}; export IFS
64    done
65    echo "-----------------------------------------------------------------"
66    echo "ERROR: Unable to locate a shell interpreter with function support" >&2
67    echo "-----------------------------------------------------------------"
68    { (exit 1); exit 1; }
69fi
70
71# -----------------------------------------------------------------------
72# Test for 'echo -n'
73# -----------------------------------------------------------------------
74
75case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
76  *c*,*  ) ECHO_N=-n ECHO_C= ;;
77  *)       ECHO_N= ECHO_C='\c' ;;
78esac
79
80as_cr_letters='abcdefghijklmnopqrstuvwxyz'
81as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
82as_cr_Letters=$as_cr_letters$as_cr_LETTERS
83as_cr_digits='0123456789'
84as_cr_alnum=$as_cr_Letters$as_cr_digits
85
86
87#########################################################################
88#
89# Configuration section
90#
91#########################################################################
92
93# -----------------------------------------------------------------------
94# The following part will be cut and saved to ~/.deploy.conf
95# -----------------------------------------------------------------------
96
97#__BEGIN_CUT__
98
99#########################################################################
100#
101# This file is sourced by a Bourne shell script.
102# Thus you need to take care of proper shell syntax.
103#
104#########################################################################
105
106# if you need, you can expand your PATH environment variable here
107# just uncomment and replace /opt/contrib/bin with whatever you need
108#
109# PATH="/opt/contrib/bin:${PATH}"; export PATH
110
111# the base directory of the deployment system
112# CLI option: --basedir=...
113#
114defbasedir="@mydataroot@/profiles"
115
116# the name of the database of installed clients
117# no CLI option
118#
119defdatabase="yulerc.install.db"
120
121# be quiet; 0 = false, 1 = true, 2 = very quiet
122# CLI option: --quiet | --quiet=2
123#
124silent=0;
125
126# assume yes as answer to all prompts and run non-interactively
127# 0 = false, 1 = true
128# CLI option: --yes
129#
130assumeyes=0;
131
132# which 'dialog' to use (e.g. "Xdialog")
133# "no" for plain text; empty ("") lets the program search for dialog
134# CLI option: --dialog=...
135#
136prefdialog=""
137
138# operating system; no default
139# CLI option: --arch=...
140#
141arch=""
142
143# Format for binary packages (run | deb | rpm | tbz2 | solaris-pkg | depot)
144# CLI option: --format=...
145#
146format=""
147 
148# logfile; default is none
149# CLI option: --logfile=...
150#
151logfile=""
152
153# The path to the yule (samhain server) executable.
154# CLI option: --yule_exec=...
155#
156yule_exec="@sbindir@/yule"
157
158# The path to the yule (samhain server) configuration file.
159# CLI option: --yule_conf=...
160#
161yule_conf="@sysconfdir@/yulerc"
162
163# The path to the data directory of yule (samhain server).
164# This is the directory where client configuration/database files
165# are stored.
166# CLI option: --yule_data=...
167#
168yule_data="@mydataroot@"
169
170# The temporary directory to use. Default is '/tmp', but some
171# sites may mount this 'noexec'.
172#
173temp_dir="/tmp"
174
175#__END_CUT__
176
177# -----------------------------------------------------------------------
178# Write configuration file to user home directory/Read configuration file
179# -----------------------------------------------------------------------
180
181if test -f ~/.deploy.conf
182then
183    . ~/.deploy.conf
184else
185    #
186    # From the autoconf configure script - search ourselves
187    #
188    case $0 in
189        *[\\/]* ) as_myself=$0 ;;
190        *) old_IFS=$IFS; IFS=:
191        for as_dir in $PATH
192        do
193            IFS=$old_IFS
194            test -z "$as_dir" && as_dir=.
195            test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
196        done
197        ;;
198    esac
199    # We did not find ourselves, most probably we were run as `sh COMMAND'
200    # in which case we are not to be found in the path.
201    if test "x$as_myself" = x; then
202        as_myself=$0
203    fi
204    if test ! -f "$as_myself"; then
205        { echo "ERROR: cannot find myself; rerun with an absolute path" >&2
206    { (exit 1); exit 1; }; }
207    fi
208    cat "$as_myself" | sed  -n -e '/^#__BEGIN_CUT__/,/^#__END_CUT__/ p ' >~/.deploy.conf && {
209        echo
210        echo "-----------------------------------------------------"
211        echo " Configuration file ~/.deploy.conf created"
212        echo " You may want to edit it to adapt it to your needs"
213        echo "-----------------------------------------------------"
214        echo
215        }
216fi
217
218export silent
219export assumeyes
220export arch
221export logfile
222export format
223export yule_exec
224export yule_conf
225export yule_data
226export temp_dir
227
228# dialog
229#
230DIALOG="${prefdialog}";
231export DIALOG
232
233# base directory
234#
235basedir="$defbasedir";
236export basedir
237
238# simulate only; 0 = false, 1 = true
239#
240simulate=0;
241export simulate
242
243# version
244#
245version=2.0;
246export version
247
248# host; no default
249#
250host=
251export host
252
253# hostgroup; empty default
254#
255hostgroup=
256export hostgroup
257
258
259# action; no default
260#
261action=
262export action
263
264# the 'log.lastrun' logfile
265#
266logOpen=0
267export logOpen
268
269
270# source version; default = current
271#
272src_version=""
273export src_version
274
275# checksrc; do you want to delete if PGP signature check fails ?
276#
277cs_delete=0
278export cs_delete
279
280# build; do you want to pack the executable ?
281#
282bd_packed=''
283export bd_packed
284
285bd_user='root'
286export bd_user
287
288# addpath
289#
290bd_addpath=""
291export bd_addpath
292
293# Install; do you want to initialize the database ?
294#
295is_init=y
296export is_init
297
298# Install; do you want to replace the rc.host file ?
299#
300is_rcfile=y
301export is_rcfile
302
303# Install; do you want to start the client ?
304#
305is_startup=y
306export is_startup
307
308# Install; optional local command ?
309#
310local_command=""; export local_command
311
312# Info on packages ?
313#
314showpkg=n
315export showpkg
316
317#########################################################################
318#
319# Help Subroutines
320#
321#########################################################################
322
323# -----------------------------------------------------------------------
324# We cannot source these, because we don't know yet the base directory
325# -----------------------------------------------------------------------
326
327showUNINSTALL() {
328    echo "deploy.sh $version"
329    echo "USAGE: deploy.sh [options] uninstall"
330    echo
331    echo "Uninstall the samhain client from the specified host. Can only be"
332    echo "used if the client has been installed with deploy.sh version 2."
333    echo
334    echo "Options:"
335    echo
336    echo " --host=<hostname>      The host where you want to uninstall."
337    echo " --tmpdir=<path>        Temporary directory to use on the this host."
338    echo
339    { (exit 0); exit 0; }
340}
341
342showINFO() {
343    echo "deploy.sh $version"
344    echo "USAGE: deploy.sh [options] info"
345    echo
346    echo "Show info for hosts in client database (default), or for available"
347    echo "binary installer packages."
348    echo
349    echo "Options:"
350    echo
351    echo " --packages             Show info on packages."
352    echo
353    { (exit 0); exit 0; }
354}
355
356showCLEAN() {
357    echo "deploy.sh $version"
358    echo "USAGE: deploy.sh [options] clean"
359    echo
360    echo "Remove all files that are no longer needed:"
361    echo "  - Source tarballs in ${basedir}/source"
362    echo "  - Unused installer packages in ${basedir}/archpkg"
363    echo
364    { (exit 0); exit 0; }
365}
366
367showCHECKSRC() {
368    echo "deploy.sh $version"
369    echo "USAGE: deploy.sh [options] checksrc"
370    echo
371    echo "Check PGP signatures of source tarballs in the source/ subdirectory"
372    echo "of the deploy system."
373    echo "You must have gpg (GnuPG) in your PATH, and you should have imported"
374    echo "the samhain release PGP key (Key ID 0F571F6C, Rainer Wichmann)."
375    echo "To import the key, simply execute the command"
376    echo "\"gpg --keyserver blackhole.pca.dfn.de --recv-keys 0F571F6C\""
377    echo
378    echo "Options:"
379    echo
380    echo " --delete               Delete source tarballs if PGP signature"
381    echo "        cannot be verified."
382    echo
383    { (exit 0); exit 0; }
384}
385
386showDOWNLOAD() {
387    echo "deploy.sh $version"
388    echo "USAGE: deploy.sh [options] download"
389    echo
390    echo "Download a samhain source tarball from http://www.la-samhna.de,"
391    echo "check its PGP signature, and install it into the source/ subdirectory"
392    echo "of the deploy system."
393    echo "You must have gpg (GnuPG) in your PATH, and you should have imported"
394    echo "the samhain release PGP key (Key ID 0F571F6C, Rainer Wichmann)."
395    echo "To import the key, simply execute the command"
396    echo "\"gpg --keyserver blackhole.pca.dfn.de --recv-keys 0F571F6C\""
397    echo
398    echo "Options:"
399    echo
400    echo " --version=<version>    Version of samhain to download. The"
401    echo "        default is \"current\" to download the current version."
402    echo
403    { (exit 0); exit 0; }
404}
405
406showBUILD() {
407    echo "deploy.sh $version"
408    echo "USAGE: deploy.sh [options] build"
409    echo
410    echo "Copy a source tarball to a build machine, build a binary package, and fetch"
411    echo "the package. Will bail out if not running under ssh-agent. If you are sure"
412    echo "that you don't need ssh-agent, set the environment variable SSH_AGENT_PID"
413    echo "to some arbitrary string before launching the deploy.sh command."
414    echo
415    echo "Options:"
416    echo
417    echo " --host=<hostname>      The build host."
418    echo " --arch=<arch>          The architecture/operating system to build for."
419    echo "        This is used to get the \"./configure\" options from the file"
420    echo "        \${basedir}/configs/\${arch}.configure."
421    echo " --version=<version>    The version of samhain you want to build."
422    echo " --format=<run|rpm|deb|tbz2|solaris-pkg|depot>"
423    echo "        The format of the package. \"run\" is a portable tar"
424    echo "        package, \"deb\" is for Debian, \"tbz2\" for Gentoo,"
425    echo "        \"rpm\" for any RPM-based Linux, \"solaris-pkg\""
426    echo "        for Sun Solaris, and \"depot\" for HP-UX"
427    echo " --packed=<password>    The client password, if you want to"
428    echo "        create a packed executable. Defaults to empty (don't pack)"
429    echo " --user=<username>      Login as <username> to the build host (root)."
430    echo " --add-path=<path>      Append 'path' to the PATH variable on the build host."
431    echo " --tmpdir=<path>        Temporary directory to use on the build host."
432    { (exit 0); exit 0; }
433}
434
435showINSTALL() {
436    echo "deploy.sh $version"
437    echo "USAGE: deploy.sh [options] install"
438    echo
439    echo "Copy a pre-built binary installer package to a remote host, stop the client"
440    echo "running there (if any), install the (new) client, optionally initialize"
441    echo "the file signature database and fetch it from the remote host, update"
442    echo "the server configuration file and reload the server."
443    echo
444    echo "Options:"
445    echo
446    echo " --host=<FQDN>          The host where you want to install."
447    echo " --group=<group>        Optional group the host belongs to."
448    echo " --arch=<arch>          The architecture/operating system of this host."
449    echo "        This is used to get the correct binary package."
450    echo " --version=<version>    The version of samhain you want to install."
451    echo " --format=<run|rpm|deb|tbz2|solaris-pkg|depot>"
452    echo "        The format of the binary package."
453    echo " --yule_exec=<path>     The path to the 'yule' executable."
454    echo " --yule_conf=<path>     The path to the 'yule' configuration file."
455    echo " --yule_data=<path>     The path to the 'yule' data directory."
456    echo " --no-init              Do not initialize the file signature database."
457    echo " --no-rcfile            Do not replace the rc.host file on server."
458    echo " --no-start             Do not start the client after installation."
459    echo " --local=<path>         Local command (executed twice: "
460    echo "                        after config installation and before client startup)."
461    echo " --tmpdir=<path>        Temporary directory to use on the this host."
462    { (exit 0); exit 0; }
463}
464
465showUSAGE() {
466    echo "deploy.sh $version"
467    echo "USAGE: deploy.sh [options] command"
468    echo
469    echo "Commands: info | clean | download | checksrc | build | install | uninstall"
470    echo
471    echo "Options:"
472    echo " -h | --help            Print general usage information."
473    echo " -h | --help <command>  Print usage information for \"command\"."
474    echo " --basedir=<directory>  Set the basedir for the deployment system."
475    echo "                        The default is ${defbasedir}."
476    echo " -q | --quiet           Produce output suitable for logging."
477    echo "        You can also use -q=# to set the quiet level up to"
478    echo "        a maximum of 2. Note that -q=2 implies --yes (see below)."
479    echo " -s | --simulate        Perform  a  simulation  of events that"
480    echo "        would occur but do not actually change the  system."
481    echo " -y | --yes             Assume "yes" as answer to"
482    echo "        all prompts and run non-interactively."
483    echo " -o <file> | --logfile=<file>"
484    echo "        Specify an output file for messages that would go to stdout"
485    echo "        otherwise. Has no effect on stderr (error messages)."
486    echo " -d <dialog> | --dialog=<dialog>  Specify your preferred \"dialog\""
487    echo "        clone (e.g. Xdialog). Use \"no\" to force plain text."
488    if test x"$1" = x
489    then
490        { (exit 0); exit 0; }
491    else
492        { (exit $1); exit $1; }
493    fi
494}
495
496#########################################################################
497#
498# Command line
499#
500#########################################################################
501
502for option
503do
504
505  # If the previous option needs an argument, assign it.
506  #
507  if test -n "$opt_prev"; then
508    eval "$opt_prev=\$option"
509    eval export "$opt_prev"
510    opt_prev=
511    continue
512  fi
513
514  case "$option" in
515  -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
516  *) optarg= ;;
517  esac
518
519  case "$option" in
520
521  # Info
522
523  --packages | -packages)
524    showpkg=y; export showpkg;
525    ;;
526
527  # Install
528
529  --yule_exec | -yule_exec | --yule-exec | -yule-exec)
530    opt_prev=yule_exec
531    ;;
532
533  --yule_exec=* | -yule_exec=* | --yule-exec=* | -yule-exec=*)
534    yule_exec="$optarg"; export yule_exec
535    ;;
536
537  --yule_conf | -yule_conf | --yule-conf | -yule-conf)
538    opt_prev=yule_conf
539    ;;
540
541  --yule_conf=* | -yule_conf=* | --yule-conf=* | -yule-conf=*)
542    yule_conf="$optarg"; export yule_conf
543    ;;
544
545  --yule_data | -yule_data | --yule-data | -yule-data)
546    opt_prev=yule_data
547    ;;
548
549  --yule_data=* | -yule_data=* | --yule-data=* | -yule-data=*)
550    yule_data="$optarg"; export yule_data
551    ;;
552
553  --no-init | -no-init)
554    is_init=n; export is_init
555    ;;
556
557  --no-rcfile | -no-rcfile)
558    is_rcfile=n; export is_rcfile
559    ;;
560
561  --no-start | -no-start)
562    is_startup=n; export is_startup
563    ;;
564
565  --local | -local)
566    opt_prev=local_command
567    ;;
568
569  --local=* | -local=*)
570    local_command="$optarg"; export local_command
571    ;;
572
573  --group | -group)
574    opt_prev=hostgroup
575    ;;
576
577  --group=* | -group=*)
578    hostgroup="$optarg"; export hostgroup
579    ;;
580
581  # Build
582
583  --format | -format)
584    opt_prev=format
585    ;;
586
587  --format=* | -format=*)
588    format="$optarg"; export format
589    ;;
590
591  --packed | --pack | -packed | -pack)
592    opt_prev=bd_packed
593    ;;
594
595  --packed=* | -packed=*)
596    bd_packed="$optarg"; export bd_packed
597    ;;
598
599  --user | -user)
600    opt_prev=bd_user
601    ;;
602
603  --user=* | -user=*)
604    bd_user="$optarg"; export bd_user
605    ;;
606
607  --add-path | -add-path | --addpath | -addpath)
608    opt_prev=bd_addpath
609    ;;
610
611  --add-path=* | -add-path=* | --addpath=* | -addpath=*)
612    bd_addpath="$optarg"; export bd_addpath
613    ;;
614
615  # Checksource
616
617  --delete | -delete)
618    cs_delete=1; export cs_delete
619    ;;
620
621  # Download
622
623  --version | -version)
624    opt_prev=src_version
625    ;;
626  --version=* | -version=*)
627    src_version="$optarg"; export src_version
628    ;;
629
630  # Generic
631
632  --basedir | -basedir)
633    opt_prev=basedir
634    ;;
635  --basedir=* | -basedir=*)
636    basedir="$optarg"; export basedir
637    ;;
638
639  --host | -host)
640    opt_prev=host
641    ;;
642  --host=* | -host=*)
643    host="$optarg"; export host
644    ;;
645
646  --arch | -arch)
647    opt_prev=arch
648    ;;
649  --arch=* | -arch=*)
650    arch="$optarg"; export arch
651    ;;
652
653  --tmpdir | -tmpdir)
654    opt_prev=temp_dir
655    ;;
656  --tmpdir=* | -tmpdir=*)
657    temp_dir="$optarg"; export temp_dir
658    ;;
659
660  -o | --logfile | -logfile)
661    opt_prev=logfile
662    ;;
663  -o=* | --logfile=* | -logfile=*)
664    logfile="$optarg"; export logfile
665    ;;
666
667  -h | --h | --help | -help | help)
668    if test $# -gt 1
669    then
670        if test x"$2" = xdownload
671        then
672            showDOWNLOAD
673        elif test x"$2" = xinfo
674        then
675            showINFO
676        elif test x"$2" = xchecksrc
677        then
678            showCHECKSRC
679        elif test x"$2" = xclean
680        then
681            showCLEAN
682        elif test x"$2" = xbuild
683        then
684            showBUILD
685        elif test x"$2" = xinstall
686        then
687            showINSTALL
688        elif test x"$2" = xuninstall
689        then
690            showUNINSTALL
691        else
692            showUSAGE 1
693        fi
694    fi
695    showUSAGE
696    ;;
697
698  -q | --quiet | -quiet | --silent | -silent)
699    if test x"$silent" = x0
700    then
701        silent=1; export silent
702    else
703        silent=2; export silent
704    fi
705    ;;
706  -q=* | --quiet=* | --silent=* | -silent=*)
707    silent="$optarg"; export silent
708    ;;
709
710  -s | --simulate | -simulate | --dry-run | -dry-run | --recon | -recon | --just-print | -just-print | --no-act | -no-act)
711    simulate=1; export simulate
712    ;;
713
714  -y | --yes | -yes)
715    assumeyes=1; export assumeyes
716    ;;
717
718  -d | --dialog | -dialog)
719    opt_prev=DIALOG
720    ;;
721  -d=* | --dialog=* | -dialog=*)
722    DIALOG="$optarg"; export DIALOG
723    ;;
724
725  -*)
726    showUSAGE 1
727    ;;
728
729  clean | download | checksrc | build | install | info | uninstall)
730    action="$option"; export action
731    break ;;
732  esac
733
734done
735
736#########################################################################
737#
738# Subroutines
739#
740#########################################################################
741
742# -----------------------------------------------------------------------
743# Printing/logging Subroutines
744# -----------------------------------------------------------------------
745. ${basedir}/libexec/funcPRINT
746
747# -----------------------------------------------------------------------
748# Interaction Subroutines
749# -----------------------------------------------------------------------
750. ${basedir}/libexec/funcDIALOG
751
752# -----------------------------------------------------------------------
753# Setup test Subroutines
754# -----------------------------------------------------------------------
755. ${basedir}/libexec/funcSETUP
756
757# -----------------------------------------------------------------------
758# Subroutines for determining existence of / path to executables
759# -----------------------------------------------------------------------
760. ${basedir}/libexec/funcEXE
761
762# -----------------------------------------------------------------------
763# Subroutines for building
764# -----------------------------------------------------------------------
765. ${basedir}/libexec/funcBUILD
766
767# -----------------------------------------------------------------------
768# Subroutines for installing
769# -----------------------------------------------------------------------
770. ${basedir}/libexec/funcINSTALL
771
772# -----------------------------------------------------------------------
773# Subroutines for client database
774# -----------------------------------------------------------------------
775. ${basedir}/libexec/funcDB
776
777# -----------------------------------------------------------------------
778# Subroutine for the 'download' command
779# -----------------------------------------------------------------------
780. ${basedir}/libexec/comDOWNLOAD
781
782# -----------------------------------------------------------------------
783# Subroutine for the 'checksrc' command
784# -----------------------------------------------------------------------
785. ${basedir}/libexec/comCHECKSRC
786
787# -----------------------------------------------------------------------
788# Subroutine for the 'clean' command
789# -----------------------------------------------------------------------
790. ${basedir}/libexec/comCLEAN
791
792# -----------------------------------------------------------------------
793# Subroutine for the 'build' command
794# -----------------------------------------------------------------------
795. ${basedir}/libexec/comBUILD
796
797# -----------------------------------------------------------------------
798# Subroutine for the 'install' command
799# -----------------------------------------------------------------------
800. ${basedir}/libexec/comINSTALL
801
802# -----------------------------------------------------------------------
803# Subroutine for the 'install' command
804# -----------------------------------------------------------------------
805. ${basedir}/libexec/comUNINSTALL
806
807
808#########################################################################
809#
810# Main
811#
812#########################################################################
813
814main_exit_status=0
815
816tmpdir=
817
818# Find a dialog clone
819#
820findDIALOG
821
822# Check for basedir and tmpdir
823#
824testSETUP1
825
826# Logfile setup
827#
828exec 5>${basedir}/tmp/logfile.lastrun
829now=`date`
830echo "$now: $0 " ${1+"$@"} >&5
831lastlog="${basedir}/tmp/logfile.lastrun"; export lastlog
832logOpen=1
833
834# Temporary directory/file setup
835#
836tmpD="$tmpdir/build.gui.$$"
837mkdir "$tmpD" || printFATAL "Cannot create temporary directory $tmpD"
838export tmpD
839tmpF="$tmpD/tmpF.$$"
840touch $tmpF || printFATAL "Cannot create temporary file $tmpF"
841export tmpF
842tmpERR="$tmpD/tmpERR.$$"
843echo '0' > $tmpERR || printFATAL "Cannot create temporary file $tmpERR"
844export tmpERR
845
846# Trap exit and cleanup
847#
848trap "exit_status=$?; rm -rf $tmpD; exit ${exit_status};" 0
849trap "(exit 1); exit 1;" 1 2 13 15
850
851# Check for action to perform, and host, if required
852#
853testSETUP2
854
855if test x"$action" = xdownload
856then
857    if test x"$src_version" = x
858    then
859        src_version="current"; export src_version
860    fi
861    #---------------------------------------------------------------------
862    # Vodoo code to tee both stdout and stderr, but keep them seperate.
863    #---------------------------------------------------------------------
864    if test x"$DIALOG" = x
865    then
866        ((commandDOWNLOAD | tee -a "$lastlog") 6>&1 1>&2 2>&6 | \
867        tee -a "$lastlog") 6>&1 1>&2 2>&6
868    else
869        commandDOWNLOAD 2>&1 | tee -a "$lastlog" >/dev/null | $DIALOG \
870        --title "deploy.sh $version DOWNLOAD logfile" \
871        --backtitle "Logfile:  $lastlog" \
872        --tailbox "$lastlog" 19 75
873    fi
874elif test x"$action" = xinfo
875then
876    if test x"${showpkg}" = xn
877    then
878      if test x"$DIALOG" = x
879      then
880        ((dbSHOWHOSTS "${host}" | tee -a "$lastlog") 6>&1 1>&2 2>&6 | \
881        tee -a "$lastlog") 6>&1 1>&2 2>&6
882      else
883        dbSHOWHOSTS "${host}" 2>&1 | tee -a "$lastlog" >/dev/null | $DIALOG \
884        --title "deploy.sh $version INFO logfile" \
885        --backtitle "Logfile:  $lastlog" \
886        --tailbox "$lastlog" 19 75
887      fi
888    else
889      if test x"$DIALOG" = x
890      then
891        ((dbSHOWPKG show | tee -a "$lastlog") 6>&1 1>&2 2>&6 | \
892        tee -a "$lastlog") 6>&1 1>&2 2>&6
893      else
894        dbSHOWPKG show 2>&1 | tee -a "$lastlog" >/dev/null | $DIALOG \
895        --title "deploy.sh $version INFO logfile" \
896        --backtitle "Logfile:  $lastlog" \
897        --tailbox "$lastlog" 19 75
898      fi
899    fi
900elif test x"$action" = xchecksrc
901then
902    if test x"$DIALOG" = x
903    then
904        ((commandCHECKSRC | tee -a "$lastlog") 6>&1 1>&2 2>&6 | \
905        tee -a "$lastlog") 6>&1 1>&2 2>&6
906    else
907        commandCHECKSRC 2>&1 | tee -a "$lastlog" >/dev/null | $DIALOG \
908        --title "deploy.sh $version CHECKSRC logfile" \
909        --backtitle "Logfile:  $lastlog" \
910        --tailbox "$lastlog" 19 75
911    fi
912elif test x"$action" = xclean
913then
914    if test x"$DIALOG" = x
915    then
916        ((commandCLEAN | tee -a "$lastlog") 6>&1 1>&2 2>&6 | \
917        tee -a "$lastlog") 6>&1 1>&2 2>&6
918    else
919        commandCLEAN 2>&1 | tee -a "$lastlog" >/dev/null | $DIALOG \
920        --title "deploy.sh $version CLEAN logfile" \
921        --backtitle "Logfile:  $lastlog" \
922        --tailbox "$lastlog" 19 75
923    fi
924elif test x"$action" = xbuild
925then
926
927    #---------------------------------------------------------------------
928    # Make sure we are running under ssh-agent.
929    #---------------------------------------------------------------------
930    if test x"$SSH_AGENT_PID" = x
931    then
932        if test x"$assumeyes" = x1
933        then
934            printFATAL "Not running under ssh-agent, and not running interactive: cannot continue."
935        else
936            promptYESNO "Not running under ssh-agent, continue anyway" "no"
937            test "x$YESNO" = xn && { (exit 0; ); exit 0; }
938        fi
939    fi
940
941    #---------------------------------------------------------------------
942    # Setup.
943    #---------------------------------------------------------------------
944    selBVERSION
945    selBARCH
946    selBFORMAT
947
948    if test x"$DIALOG" = x
949    then
950        ((commandBUILD | tee -a "$lastlog") 6>&1 1>&2 2>&6 | \
951        tee -a "$lastlog") 6>&1 1>&2 2>&6
952    else
953        commandBUILD 2>&1 | tee -a "$lastlog" >/dev/null | $DIALOG \
954        --title "deploy.sh $version BUILD logfile" \
955        --backtitle "Logfile:  $lastlog" \
956        --tailbox "$lastlog" 19 75
957    fi
958
959elif test x"$action" = xinstall
960then
961
962    needEXE ssh scp ssh-agent
963
964    #---------------------------------------------------------------------
965    # Make sure we are running under ssh-agent.
966    #---------------------------------------------------------------------
967    if test x"$SSH_AGENT_PID" = x
968    then
969        if test x"$assumeyes" = x1
970        then
971            printFATAL "Not running under ssh-agent, and not running interactive: cannot continue."
972        else
973            promptYESNO "Not running under ssh-agent, continue anyway" "no"
974            test "x$YESNO" = xn && { (exit 0; ); exit 0; }
975        fi
976    fi
977
978    #---------------------------------------------------------------------
979    # Setup.
980    #---------------------------------------------------------------------
981    is_root=`id -u 2>/dev/null`
982    if test "x$?" = x0 && test "x${is_root}" != x0
983    then
984        promptYESNO "You are not root, continue anyway" "no"
985        test "x$YESNO" = xn && { (exit 0; ); exit 0; }
986    else
987        is_root=0
988    fi
989    pathYULE
990    pathYDATA
991    selbinARCH
992    selbinVERSION
993    if test "x${is_init}" = xy
994    then
995        promptYESNO "Initialize database" "yes"
996        is_init=$YESNO
997    fi
998    if test "x${is_rcfile}" = xy
999    then
1000        promptYESNO "Replace rc.host file on server" "yes"
1001        is_rcfile=$YESNO
1002    fi
1003    if test "x${is_startup}" = xy
1004    then
1005        promptYESNO "Start client after installation" "yes"
1006        is_startup=$YESNO
1007    fi
1008    if test -f "${yule_conf}"
1009    then
1010        :
1011    else
1012        promptINPUT "Please enter the path to the yule configuration file"
1013        yule_conf="$INPUT"; export yule_conf
1014        if test -f "${yule_conf}"
1015        then
1016            :
1017        else
1018            printFATAL "Cannot find ${yule_conf}"
1019        fi
1020    fi
1021
1022    if test x"$DIALOG" = x
1023    then
1024        ((commandINSTALL | tee -a "$lastlog") 6>&1 1>&2 2>&6 | \
1025        tee -a "$lastlog") 6>&1 1>&2 2>&6
1026    else
1027        commandINSTALL 2>&1 | tee -a "$lastlog" >/dev/null | $DIALOG \
1028        --title "deploy.sh $version INSTALL logfile" \
1029        --backtitle "Logfile:  $lastlog" \
1030        --tailbox "$lastlog" 19 75
1031    fi
1032
1033elif test x"$action" = xuninstall
1034then
1035
1036    needEXE ssh scp ssh-agent
1037
1038    #---------------------------------------------------------------------
1039    # Make sure we are running under ssh-agent.
1040    #---------------------------------------------------------------------
1041    if test x"$SSH_AGENT_PID" = x
1042    then
1043        if test x"$assumeyes" = x1
1044        then
1045            printFATAL "Not running under ssh-agent, and not running interactive: cannot continue."
1046        else
1047            promptYESNO "Not running under ssh-agent, continue anyway" "no"
1048            test "x$YESNO" = xn && { (exit 0; ); exit 0; }
1049        fi
1050    fi
1051
1052    #---------------------------------------------------------------------
1053    # Setup.
1054    #---------------------------------------------------------------------
1055
1056    dbINFO "$host"
1057
1058    if test x"$?" = x0
1059    then
1060        if test x"${DB_status}" = "xD2_installed"
1061        then
1062            :
1063        else
1064            if test x"${DB_status}" = "xD2_removed"
1065            then
1066                promptYESNO "Already uninstalled on host $host, continue" "no"
1067                test "x$YESNO" = xn && { (exit 0; ); exit 0; }
1068            else
1069                printFATAL "No deploy version 2 installation on host $host: ${DB_status}"
1070            fi
1071        fi
1072    else
1073        printFATAL "Cannot uninstall on host $host"
1074    fi
1075
1076    if test x"$DIALOG" = x
1077    then
1078        ((commandUNINSTALL | tee -a "$lastlog") 6>&1 1>&2 2>&6 | \
1079        tee -a "$lastlog") 6>&1 1>&2 2>&6
1080    else
1081        commandUNINSTALL 2>&1 | tee -a "$lastlog" >/dev/null | $DIALOG \
1082        --title "deploy.sh $version UNINSTALL logfile" \
1083        --backtitle "Logfile:  $lastlog" \
1084        --tailbox "$lastlog" 19 75
1085    fi
1086
1087fi
1088
1089if test x"${main_exit_status}" = x0
1090then
1091    test -f "$tmpERR" && main_exit_status=`cat "$tmpERR" | tr -d '\n'`
1092fi
1093
1094(exit ${main_exit_status}); exit ${main_exit_status};
Note: See TracBrowser for help on using the repository browser.