From cc8a098ed9f9d3fd330c1f486f99f391b81228d8 Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 16 Feb 2018 13:25:00 +0000 Subject: #718: Creado script {{{launchOgagentInstaller}}} para programar la instalación de agente OGAgent en el siguiente arranque del sistema operativo de un equipo modelo. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.1@5597 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/shared/scripts/launchOgagentInstaller | 147 +++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100755 client/shared/scripts/launchOgagentInstaller diff --git a/client/shared/scripts/launchOgagentInstaller b/client/shared/scripts/launchOgagentInstaller new file mode 100755 index 00000000..58d63dde --- /dev/null +++ b/client/shared/scripts/launchOgagentInstaller @@ -0,0 +1,147 @@ +#!/bin/bash +# #/** +# launchOgagentInstaller ndisk npart [windowsadmin] +#@brief Scheduling OpenGnsys Agent installation at next boot or administrator session. +#@param integer ndsik disk number +#@param integer npart partition number +#@param string windowsadmin administrator user (only for Windows) +#@author Ramón M. Gómez, ETSII Univ. Sevilla +#@version 1.1.0 - Initial version. +#@date 2018-02-16 +#*/ ## + +# Global variables. +PROG="$(basename "$0")" +if which curl &>/dev/null; then + DOWNLOAD="curl -k --timeout 1 -o" +else + DOWNLOAD="wget --no-check-certificate -T 1 -O" +fi + +# Show help. +if [ "$*" == "help" ]; then + echo "$PROG: scheduling OpenGnsys Agent installation." + echo "Format: $PROG ndisk npart [windowsadmin]" + exit 0 +fi +# Error control. +if ! typeset -Fp ogRaiseError &>/dev/null; then + echo "$PROG: it can only be executed by an ogLive client." >&2 + exit 1 +fi +[ $# == 2 -o $# == 3 ] || ogRaiseError $OG_ERR_FORMAT "$PROG ndisk npart [adminuser]" || exit $OG_ERR_FORMAT +MNTDIR=$(ogMount "$1" "$2") || exit $? +OGVERSION=$($DOWNLOAD - https://$(ogGetServerIp)/opengnsys/rest/info 2>/dev/null | jq -r .version) +[ -n "$OGVERSION" ] || ogRaiseError $OG_ERR_NOTFOUND "GET /rest/info" || exit $OG_ERR_NOTFOUND + +case "$(ogGetOsType $1 $2)" in + Windows) # OGAgent for Windows. + HIVE="$(ogGetHivePath "$MNTDIR" "$3")" + [ -n "$HIVE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 $3/NTUSER.DAT" || exit $OG_ERR_NOTFOUND + # Downloading OGAgent installer for Windows. + OGAGENTFILE="OGAgentSetup-${OGVERSION/pre/}.exe" + TMPDIR="$(ogGetPath "$MNTDIR/Windows/Temp")" + eval $DOWNLOAD "$TMPDIR/$OGAGENTFILE" "https://$(ogGetServerIp)/opengnsys/descargas/$OGAGENTFILE" 2>/dev/null + if ogListSoftware $1 $2 | grep -qi "opengnsys agent"; then + echo "OGAgent for Windows is already installed, you need to uninstall it before re-install." + else + if [ -s "$TMPDIR/$OGAGENTFILE" ]; then + # Run once OGAgent Installer. + if hivexsh -w << EOT 2>/dev/null; then +load $HIVE +cd \\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce +setval 1 +Install OGAgent +string:C:\\Windows\\Temp\\$OGAGENTFILE" +commit +close +exit +EOT + echo "Scheduled OGAgent installation after \"$3\" logon" + echo " (edit config file after finish)." + else + ogRaiseError $OG_ERR_NOTWRITE "$1 $2 .../$3/NTUSER.DAT" + exit $OG_ERR_NOTWRITE + fi + else + ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /Windows/Temp/$OGAGENTFILE" + exit $OG_ERR_NOTFOUND + fi + fi + ;; + Linux) # OGAgent for Linux (only deb and redhat-based backages; TODO suse-based package). + if ogListSoftware $1 $2 | grep -qi "ogagent"; then + echo "OGAgent for Linux is already installed, you need to uninstall it before re-install." + else + SYSTEMDDIR="$MNTDIR/lib/systemd" + [ -d "$SYSTEMDDIR" -a -d "${SYSTEMDDIR/lib/etc}" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 systemd" || exit $OG_ERR_NOTFOUND + # Downloading OGAgent installer for Linux. + if [ -e $MNTDIR/etc/debian_version ]; then # Debian-based + OGAGENTFILE="ogagent_${OGVERSION/pre/}_all.deb" + CODE="if ! dpkg -l ogagent &>/dev/null && [ -f /var/tmp/$OGAGENTFILE ]; then apt-get update; apt-get install -y /var/tmp/$OGAGENTFILE; fi" + fi + if [ -e $MNTDIR/etc/redhat-release ]; then # RedHat-based + OGAGENTFILE="ogagent-${OGVERSION/pre/}-1.noarch.rpm" + CODE="if ! rpm -q ogagent &>/dev/null && [ -f /var/tmp/$OGAGENTFILE ]; then yum install -y /var/tmp/$OGAGENTFILE; fi" + fi + [ -n "$OGAGENTFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 ogagent" || exit $OG_ERR_NOTFOUND + TMPDIR="$MNTDIR/var/tmp" + eval $DOWNLOAD "$TMPDIR/$OGAGENTFILE" "https://$(ogGetServerIp)/opengnsys/descargas/$OGAGENTFILE" 2>/dev/null + if [ -s "$TMPDIR/$OGAGENTFILE" ]; then + # Creating systemd script. + cat << EOT > $SYSTEMDDIR/systemd-launchogagent +#!/bin/bash +[ $EUID = 0 ] || exit 4 +start() { + $CODE + sed -i "0,/remote=/ s,remote=.*,remote=https://$(ogGetServerIp)/opengnsys/rest/," /usr/share/OGAgent/cfg/ogagent.cfg + service ogagent start +} +restart() { + service ogagent stop + if [ -f /var/tmp/$OGAGENTFILE ]; then + apt-get update + apt-get install -y --reinstall /var/tmp/$OGAGENTFILE + fi + sed -i "0,/remote=/ s,remote=.*,remote=https://$(ogGetServerIp)/opengnsys/rest/," /usr/share/OGAgent/cfg/ogagent.cfg + service ogagent start +} + +case "\$1" in + start|restart) "\$1" ;; +esac +EOT + chmod +x $SYSTEMDDIR/systemd-launchogagent + # Creating systemd service. + cat << EOT > $SYSTEMDDIR/system/launchogagent.service +[Unit] +Description=Installing and configuring OGAgent + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/lib/systemd/systemd-launchogagent start +TimeoutStartSec=5min + +[Install] +WantedBy=multi-user.target +EOT + ln -fs /lib/systemd/system/launchogagent.service \ + ${SYSTEMDDIR/lib/etc}/system/multi-user.target.wants + echo "Scheduled OGAgent installation at next boot" + echo " (process will be executed in the background, do not shutdown until finish)." + else + ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /var/tmp/$OGAGENTFILE" + exit $OG_ERR_NOTFOUND + fi + fi + ;; + MacOS) # OGAgent for macOS (TODO). + echo "OGAgent installer for macOS is not implemented yet." + ;; + *) # OS not detected or OGAgent not implemented. + ogRaiseError $OG_ERR_NOTOS "$1 $2" + exit $OG_ERR_NOTOS + ;; +esac + -- cgit v1.2.3-18-g5258