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
Automatisiertes Installations-Script / Shell (VMware)
- heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Automatisiertes Installations-Script / Shell (VMware)
Ein Werkzeug der Wahl wäre expect. Ein auf Tcl basierender Dinosaurier, der tut was er soll.
Nehmen wir an, das wäre das Installationsscript:
installer.sh
Dann wäre das das Programm, dass den installer automatisiert:
installation_controller.exp
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.
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
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
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.
Re: Automatisiertes Installations-Script / Shell (VMware)
Danke!
das war genau das was ich brauche.
Ich les mich gerade ein.
Da kann man sehr viel mit umsetzen.
Danke nochmal!
JB
das war genau das was ich brauche.
Ich les mich gerade ein.
Da kann man sehr viel mit umsetzen.
Danke nochmal!
JB
- heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
expect + PHP
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.
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 ser2net, das es erlaubt eine serielle Konsole auf einen Netzwerkport weiterzuleiten.
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
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 ser2net, das es erlaubt eine serielle Konsole auf einen Netzwerkport weiterzuleiten.