Automatisiertes Installations-Script / Shell (VMware)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
JohnBoy
Beiträge: 2
Registriert: 30.01.2016 19:37:32

Automatisiertes Installations-Script / Shell (VMware)

Beitrag von JohnBoy » 14.02.2016 14:36:36

Hallo,

ich versuche gerade das aktuelle VMware Workstation .bundle nur über die Shell zu installieren.
Ich bin schon soweit, das ich die meisten Einstellungen über die Konfigurationsdatei übergeben kann.
Trotzdem verlangt das Installerscript an 2-3 Stellen einen Tastendruck.
Beispiel: Would you like to check for product updates on startup? [yes]: ODER The product is ready to be installed. Press Enter to begin

Wie kann ich denn über die Shell diese Tastatureingaben simulieren.
Über die grafische Oberfläche habe ich mir mit dem xdotool beholfen.
Hier habe ich aber gerade sicher ein Verständnisproblem.

Hat jemand einen Denkanstoss für mich ;-)

Lieben Gruß
JB

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Automatisiertes Installations-Script / Shell (VMware)

Beitrag von heisenberg » 14.02.2016 17:12:10

Ein Werkzeug der Wahl wäre Debianexpect. Ein auf Tcl basierender Dinosaurier, der tut was er soll. :)

Nehmen wir an, das wäre das Installationsscript:

installer.sh

Code: Alles auswählen

#!/bin/bash

echo
echo 'Hi There! Welcome to the Fun Installer!'
echo -n 'Please Enter "Yes" to continue or "No" to abort : '
read antwort

shopt -s nocasematch
if [[ -n "$antwort" ]] && [[ $antwort =~ yes ]] ; then
        echo "Beginning Installation" 
else
        echo "Aborting Installation" 
fi
shopt -u nocasematch
echo
Dann wäre das das Programm, dass den installer automatisiert:

installation_controller.exp

Code: Alles auswählen

#!/usr/bin/expect

set timeout 20 
spawn "./installer.sh"

expect "Please Enter \"Yes\" to continue or \"No\" to abort : " { send "yes\n" }
interact
Das mit dem ODER überlasse ich jetzt noch Dir.

Meist haben die Installer noch irgendwelche Kommandozeilenschalter, die ein automatisches installieren erlauben. Die automatisierung mittels expect ist auch immer etwas empfindlich. Sobald sich die Texte nur etwas ändern oder etwas dazu kommt, dann funktioniert es nicht mehr.

Benutzeravatar
JohnBoy
Beiträge: 2
Registriert: 30.01.2016 19:37:32

Re: Automatisiertes Installations-Script / Shell (VMware)

Beitrag von JohnBoy » 14.02.2016 20:41:39

Danke!

das war genau das was ich brauche.
Ich les mich gerade ein.
Da kann man sehr viel mit umsetzen.

Danke nochmal!
JB

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

expect + PHP

Beitrag von heisenberg » 19.12.2016 16:30:26

Was mich betrifft, ich finde tcl ja nicht so meine Programmiersprache. Deswegen würde ich das lieber mit PHP machen wollen. Dazu müsste man dann eine PHP-Extension installieren und dann geht das auch in PHP.

Hier mal ein kurzes Beispiel, für ein Fragment aus einem Script, dass eine dialogbasierte, seriell angeschlossene APC(Stromverteiler) steuert.

Code: Alles auswählen

<?php
ini_set("expect.timeout", -1);
ini_set("expect.loguser", "Off");       # -- this disables output - comment out to view output

$apc_host       = "mein.server.de";
$apc_port       = "12001";
$apc_user       = "apc";
$apc_pass       = "apc";

$password = $user ="";

function my_log($msg) { print(date(time())." : ".$msg."\n"); }

function login($stream,$user,$pass) {
        fwrite($stream,"\n");
        while(true) {
                switch (expect_expectl($stream,array(
                        array("Password  :","PASSWORD"),
                        array("User Name :","USER"),
                        array("1- Device Manager.*2- Network.*3- System.*4- Logout.*> ","MAINMENU",EXP_REGEXP),

                                ))) {
                        case "USER":
                                my_log("User prompt detected");
                                fwrite ($stream, "$user\n");
                                break;
                        case "PASSWORD":
                                my_log("Password prompt detected");
                                fwrite ($stream, "$pass\n");
                                break;
                        case "MAINMENU":
                                my_log("Main Menu detected");
                                break 2;
                }
        }

}
$stream         = expect_popen("telnet $apc_host $apc_port");

login($stream,$apc_user,$apc_pass);
power_cycle($stream,$argv[1]);  # Diese Funktion fehlt hier
Anmerkungen

Diesen speziellen Stromverteiler kann man auch per SNMP ansteuern, nur leider fällt das LAN-Modul gelegentlich mal aus, was einen dann doch wieder auf die Konsole zurückwirft. Im übrigen ist dieses Gerät maximal unsicher, da 10 Jahre alt und mit einem im Internet erhältlichen Code über das LAN zurücksetzbar ist. Also definitiv nix, was am ungesicherten Internet betreiben möchte. Weil's praktisch ist, erwähne ich auch gleich nochmal Debianser2net, das es erlaubt eine serielle Konsole auf einen Netzwerkport weiterzuleiten.

Antworten