Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Workaround for PDF export bug

Anchor
TOC
TOC
Include Page
KBCOMMON:KB-CSSstyle
KBCOMMON:KB-CSSstyle

...

MethodComments
expect

Requires you pass user and password to the script so that it can connect to the OPA0 console via "telnet" and execute the shutdown commands. The "guest_shutdown.exp" script, located in the /opt/charon/utils folder, can perform operations to:

  1. log off a user connected on the console if the prompt is detected,
  2. enter a username/password to login if "login:" or "username:" is detected,
  3. execute the shutdown command if the prompt is detected,
  4. detect the SRM prompt (>>>) to issue the "power off" command (AXP) or send the F6 key (AXP & VAX) if enabled.

This method is useful if the virtual machine has no telnet connection available and cannot handle "rsh" and "ssh" remote connections. For more, please read Tips and Tricks - Shutdown guests with Expect tool.

Important notes:

  1. Note any local existing connection to the console has to be killed before executing the expect script.
  2. If the console is locked from an external connection or if the prompt is not detected after sending a carriage return, the expect script will fail.
rsh

Requires:

  1. a trust to be created between the Linux server and the Tru64 or OpenVMS guest (proxy) to issue password free remote commands. For more, please read the Tips and Tricks chapter dedicated to rsh trusts.
  2. if the virtual machine is running OpenVMS, the CHARON_SHUTDOWN.COM script, located in the /opt/charon/utils folder, has to be copied in the SYS$MANAGER folder on the OpenVMS machine.

(info) If 'rsh' is not installed on the Linux server, please run "# yum install rsh" (CentOS7/RHEL7) or "dnf install rsh" (CentOS8). For RHEL 8, please read the Tips and Tricks chapter dedicated to rsh installation on RHEL8.

ssh

Requires:

  1. a secured trust to be created between the Linux server and the Tru64 or OpenVMS guest (key pair) to issue password and passphrase free remote commands. For more, please read the Tips and Tricks chapter dedicated to ssh trusts.
  2. if the virtual machine is running OpenVMS, the CHARON_SHUTDOWN.COM script, located in the /opt/charon/utils folder, has to be copied in the SYS$MANAGER folder on the OpenVMS machine.

...

classpagebreak

...

...


If your application and server need time to shutdown, it could be necessary to give more time in the service definition to prevent from the service stop procedure to fail due to timeout.

To do so, open the "Manage 'systemd' services" option and edit the service configuration file. You can then add the TimeoutStopSec= parameter in the Service section. The default value is 20 minutes and can be changed in the preferences menu options.

Example:

[Service]
...
TimeoutStopSec=3min

...

More information can be found using the "# man systemd.service" command on your Linux server

Options

  • Options 1 to 5 are explanations on how to setup and prepare the virtual machine and the Charon Linux server (if necessary) to use the three available methods. 
  • Option 6 edits the script. This script is in a form of "case in <configuration filename> do ..."
  • Option 7 is used to test the script. Use with caution on production machines.

...

You'll find in options 1 to 5 all the details to setup the remote connection: packages to install, proxy settings for rsh, key pair definition for ssh (password and passphrase free), the necessary firewall settings if needed, etc...

Include Page
KBCOMMON:DOC-GoToToc
KBCOMMON:DOC-GoToToc

...

When the script is initialized using option 6 or when a new virtual machine is added, the following lines are added:

...

# Parameter $1: contains full path to cfg file
# Parameter $2: contains full path to emulator exe file
#
# Important notes:
# - comments & commands must be on separate lines
# - respect the structure of the file with case/in/esac
# - only place your commands between the selection and the ';;' line
#
. /opt/charon/utils/charon_common
#
case "$1"
in
  <configuration file>)
    #-- Uncomment and complete one of the following lines:
    #${CHARONDIR}/utils/charon_gstop_expect \$1 \$2 root <password> "<prompt>" <TRU64/VMS>
    #${CHARONDIR}/utils/charon_gstop_rsh \$1 \$2 <hostname> <TRU64/VMS>
    #${CHARONDIR}/utils/charon_gstop_ssh \$1 \$2 <hostname> <TRU64/VMS>
    #/<path>/<myscript>
    ;;

...

esac

One of the blue colored lines above has to be uncommented depending on the method chosen. Other lines can remain in the script or can be deleted.

...

(info) The editor defined in the Preferences is used to edit the script.

...

#
. /opt/charon/utils/charon_common
#
case "$1"
in
  /charon/pluto.cfg)
    ${CHARONDIR}/utils/charon_gstop_ssh $1 $2 pluto5 TRU64
    ;;
  *)
    echo "Invalid parameter '$1'"
    exit 1
    ;;
esac


Div
classpagebreak


Stop script execution example with "ssh" on Red Hat Enterprise Linux 7.89:

Include Page
KBCOMMON:DOC-GoToToc
KBCOMMON:DOC-GoToToc

Provided shutdown scripts explanation

...

titleNote for Red Hat Enterprise Linux/CentOS 7 and 8

...

Please note: whatever the shutdown script execution result is, the stop request sent by the systemctl command will stop the emulator. It is very important then to ensure the stop script has been tested and validated.

charon_gstop_expect

  • Check if there's an active connection to the console on the local host, kill if any.
  • Execute the /opt/charon/utils/guest_shutdown.exp expect script with the values provided: username (root), password, prompt, operating system (either TRU64 or VMS). This script is able to send the shutdown command depending on the returned characters on the console. This can be the SRM prompt ">>>", the "login:" or "username:" prompts or the prompt of the logged in user.
  • Report all output to /opt/charon/log/console.stop.<guest name>.log.

...

  • Check the guest can be reached via ping, if yes:

    • Issue the shutdown command via "rsh" (depends on the operating system),

    • Wait for a few seconds

    • Check if the guest can be "pinged" and repeat with an interval of 5 seconds

    • If the guest cannot be pinged, assume the shutdown procedure is complete

  • Kill the emulator process (Red Hat Enterprise Linux 6.x) or use the Use the service kill command (RHEL/CentOS 7 and 8). (question) The shutdown commands does not power off nor stop the emulator process, that's why this operation is needed

  • Report the stop information within the guest log file

Div
classpagebreak


charon_gstop_ssh

  • Check the guest can be reached via ping, if yes:

    • Issue the shutdown command via "ssh" (depends on the operating system),

    • Wait for a few seconds

    • Check if the guest can be "pinged" and repeat with an interval of 5 seconds

    • If the guest cannot be pinged, assume the shutdown procedure is complete

  • Kill the emulator process (Red Hat Enterprise Linux 6.x) or use the Use the service kill command (RHEL/CentOS 7 and 8). (question) The shutdown commands does not power off nor stop the emulator process, that's why this operation is needed

  • Report the stop information within the guest log file

...

Optional guest display status script

It is possible to create a script, "/opt/charon/utils/charon_gstart.chkrun" (an example is provided in the 'charon_gstart.chkrun.example' file) that will add a status line while displaying the guests list for running guests only. This script, if needed, has to be created manually and must be executable.

This status line is the result of the command you executed for that guest (known by its configuration file), for example a ping, an ssh command displaying uptime (Tru64) or boottime (OpenVMS).

Display output example from the "vmlist" command:

Image Removed

...

(lightbulb) In this example, we use "ssh" to display the guest "uptime".

(warning) The last 2 lines containing the RETVAL variable are mandatory

To create the script, the following commands were executed to copy the provided example to the one that will be used:

...

# cp /opt/charon/utils/charon_gstart.chkrun.example /opt/charon/utils/charon_gstart.chkrun
# chmod 744 /opt/charon/utils/charon_gstart.chkrun
# vim /opt/charon/utils/charon_gstart.chkrun

Example:

...

#!/bin/sh
#
case "$1"
in
  /charon/pluto.cfg)
    ssh -o ConnectTimeout=2 pluto5 "uptime|cut -f1 -d','" 2>/dev/null
    RETVAL=$?
    ;;
  *)
    echo "Invalid parameter '$1'"
    RETVAL=1
    ;;
esac
echo "==RETVAL=${RETVAL}=="
exit ${RETVAL}

Example file provided (contains example for Tru64/pluto.cfg and OpenVMS/vms.cfg):

...

classsmall

...

Forcing service status to INACTIVE without shutdown script

If a shutdown script is not defined, stopping the service will let it in a FAILED state. In case you perform the legacy OS shutdown manually and then stops the virtual machine, you can use the following method to force the service state to INACTIVE.

Example provided for uranus virtual machine (lines to add in blue color):

...
  /charon/uranus.cfg)
    PID=`ps -ef|grep "$2 -d $1"|grep -v grep|awk '{print $2}'`
    if test -n "${PID}"
    then
      kill -9 ${PID}
      sleep 2
      SVC=`basename $1 | sed "s=\.cfg==g"`
      systemctl reset-failed charon_${SVC}
    fi
    exit 0
    ;;
...

(warning) A clean shutdown of the legacy OS is highly recommended.

Include Page
KBCOMMON:DOC-GoToToc
KBCOMMON:DOC-GoToToc