Fehler bei Installation

Fehler bei Installation

Postby ede70 » 15.01.2018, 18:26

Habe heute nach der Installationsanleitung auf meinem LinuxMusterLösung-Server die Installation vornehmen wollen.
Beim Aufruf des Scriptes update-generator.bash stoppt er nach einer Weile mit der Fehlermeldung: unbound variable in Zeile 82 in 10-show-selection-dialogs.bash
Die Zeile lautet: select menu_selection in "${updates_menu[@]}"; do

Der Server beruht auf ubuntu 12.04.

Welche Möglichkeiten habe ich?
Vielen Dank!
ede70
 
Posts: 3
Joined: 15.01.2018, 17:08

Re: Fehler bei Installation

Postby hbuhrmester » 16.01.2018, 00:34

Ältere Versionen der bash behandeln leere Arrays als "unset" oder "unbound", genauso wie "$@", wenn keine Positionsparameter vorhanden sind. Wenn die Shell-Option nounset gesetzt wird, löst dies einen Fehler aus:


In aktuellen Versionen der bash, hier Version 4.4.12 aus Debian Stretch, ist aber beides behoben: Leere Arrays lösen keinen Fehler mehr aus, auch wenn die Shell-Option nounset gesetzt wird.

Code: Select all
hb1@debian:~$ declare -a myarray=()
hb1@debian:~$ echo "${myarray[@]}"

hb1@debian:~$ echo $?
0
hb1@debian:~$ echo "$@"

hb1@debian:~$ echo $?
0
hb1@debian:~$ set -o nounset
hb1@debian:~$ echo "${myarray[@]}"

hb1@debian:~$ echo $?
0
hb1@debian:~$ echo "$@"

hb1@debian:~$ echo $?
0
hb1@debian:~$ echo $somestring
bash: somestring ist nicht gesetzt.
hb1@debian:~$ echo $?
1
hb1@debian:~$



Das Array "${updates_menu[@]}" wird aber in der Datei updates-and-languages.bash definiert und ist nicht leer. Deshalb sollte dieses Array auch in älteren Versionen keinen Fehler auslösen.

Falls es noch unbekannte Probleme mit Arrays und der Option nounset gibt, kannst Du die Option:

Code: Select all
set -o nounset


in den beiden Skripten update-generator.bash und download-updates.bash auskommentieren.

Viele Grüße,
hbuhrmester
hbuhrmester
 
Posts: 525
Joined: 11.10.2013, 20:59

Re: Fehler bei Installation

Postby ede70 » 16.01.2018, 07:53

Vielen Dank für die schnelle Raktion.
Ich habe gerade eben in beiden Skripten update-generator.bash und download-updates.bash die entsprechende Stelle auskommentiert.

Bei Aufruf update-generator.bash erhalte ich nun folgende Fehlermeldung:
Code: Select all
Failure: Update  was not found.
Backtrace: show_backtrace fail show_selection_dialogs source run_scripts update_generator main
Caller 0: 83 fail ./libraries/messages.bash
Caller 1: 64 show_selection_dialogs ./update-generator-tasks/10-show-selection-dialogs.bash
Caller 2: 167 source ./update-generator-tasks/10-show-selection-dialogs.bash
Caller 3: 331 run_scripts ./update-generator.bash
Caller 4: 352 update_generator ./update-generator.bash
Caller 5: 361 main ./update-generator.bash
Exiting with error code 1 ...


Viele Grüße!
ede70
 
Posts: 3
Joined: 15.01.2018, 17:08

Re: Fehler bei Installation

Postby hbuhrmester » 16.01.2018, 10:21

Der Server beruht auf ubuntu 12.04.


Warum muss es denn überhaupt so eine alte Version sein? Seitdem gibt es doch schon zwei neuere Ubuntu LTS-Versionen, laut Wikipedia:
  • Trusty Tahr (14.04 LTS)
  • Xenial Xerus (16.04 LTS)

Ein Ubuntu 12.04 wird auch nicht mehr unterstützt. Laut Wikipedia wurde diese LTS-Version für fünf Jahre mit Updates versorgt, aber das ist dann ja im April 2017 abgelaufen.



Welche Version hat die bash, d.h. was ist die Ausgabe von:

Code: Select all
bash --version


Wurde das Menü mit den Updates jetzt angezeigt, so wie hier:

Code: Select all
Update selection
----------------
 1) w60         Windows Server 2008, 32-bit
 2) w60-x64     Windows Server 2008, 64-bit
 3) w61         Windows 7, 32-bit
 4) w61-x64     Windows 7 / Server 2008 R2, 64-bit
 5) w62-x64     Windows Server 2012, 64-bit
 6) w63         Windows 8.1, 32-bit
 7) w63-x64     Windows 8.1 / Server 2012 R2, 64-bit
 8) w100        Windows 10, 32-bit
 9) w100-x64    Windows 10 / Server 2016, 64-bit
10) o2k7        Office 2007, 32-bit
11) o2k10       Office 2010, 32-bit
12) o2k10-x64   Office 2010, 32-bit and 64-bit
13) o2k13       Office 2013, 32-bit
14) o2k13-x64   Office 2013, 32-bit and 64-bit
15) o2k16       Office 2016, 32-bit
16) o2k16-x64   Office 2016, 32-bit and 64-bit
Please select your update:


Was hast Du ausgewählt?



Das Skript update-generator.bash dient letztlich nur dazu, auf einfache Weise die Kommandozeile für das Skript download-updates.bash zusammen zu stellen. Der interne Befehl "select" der bash wird dabei an zwei Stellen verwendet, um die Auswahldialoge für Update und Language zu zeichnen.

Wenn das jetzt irgendwie nicht funktioniert, kannst Du das Skript download-updates.bash auch direkt aufrufen. Beispiele gibt es im Skript get-all-updates.bash. Dieses Skript lädt es alle Updates mit allen passenden Optionen für die beiden Standardsprachen Deutsch und Englisch herunter. Es kann beliebig angepasst werden: Du kannst alles auskommentieren oder streichen, was Du nicht brauchst, und es damit einmal versuchen.

Viele Grüße,
hbuhrmester
hbuhrmester
 
Posts: 525
Joined: 11.10.2013, 20:59

Re: Fehler bei Installation

Postby ede70 » 16.01.2018, 12:39

Warum muss es denn überhaupt so eine alte Version sein?

Ist von den Machern von LML so vorgegeben...
Welche Version hat die bash?

GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)

Wurde das Menü mit den Updates jetzt angezeigt?

Nein, dazu kommt es gar nicht.

Wenn das jetzt irgendwie nicht funktioniert, kannst Du das Skript download-updates.bash auch direkt aufrufen.

Habe ich letztendlich gemacht und so funktioniert es!

Gruß
ede70
 
Posts: 3
Joined: 15.01.2018, 17:08

Re: Fehler bei Installation

Postby hbuhrmester » 16.01.2018, 15:26

Ich habe jetzt selber eine alte Ubuntu 11.10 Live-CD ausgegraben und damit ein wenig probiert. Das Problem scheint die Variablendefinition mit "declare -ag" zu sein.

Mit dem internen Befehl "declare" kann man den Variablentyp explizit festlegen. Man kann dann zum Beispiel numerische Variablen nicht mehr mit normalem Text überschreiben. Mit der Option "-g" sollte man globale Variablen bekommen. Tatsächlich aber wird der Gültigkeitsbereich der Variablen auf merkwürdige Weise eingeschränkt: Sie gelten jetzt nur noch in dieselben Datei. Wenn man aus einer anderen Datei auf die Variablen zugreifen will, sind sie nicht mehr definiert.

Das heißt, man muss in der Datei updates_and_languages.bash die Definition:

Code: Select all
declare -ag updates_menu=(
    "w60         Windows Server 2008, 32-bit"
    "w60-x64     Windows Server 2008, 64-bit"
    "w61         Windows 7, 32-bit"
    "w61-x64     Windows 7 / Server 2008 R2, 64-bit"
    "w62-x64     Windows Server 2012, 64-bit"
    "w63         Windows 8.1, 32-bit"
    "w63-x64     Windows 8.1 / Server 2012 R2, 64-bit"
    "w100        Windows 10, 32-bit"
    "w100-x64    Windows 10 / Server 2016, 64-bit"
    "o2k7        Office 2007, 32-bit"
    "o2k10       Office 2010, 32-bit"
    "o2k10-x64   Office 2010, 32-bit and 64-bit"
    "o2k13       Office 2013, 32-bit"
    "o2k13-x64   Office 2013, 32-bit and 64-bit"
    "o2k16       Office 2016, 32-bit"
    "o2k16-x64   Office 2016, 32-bit and 64-bit"
)


ändern in:

Code: Select all
updates_menu=(
    "w60         Windows Server 2008, 32-bit"
    "w60-x64     Windows Server 2008, 64-bit"
    "w61         Windows 7, 32-bit"
    "w61-x64     Windows 7 / Server 2008 R2, 64-bit"
    "w62-x64     Windows Server 2012, 64-bit"
    "w63         Windows 8.1, 32-bit"
    "w63-x64     Windows 8.1 / Server 2012 R2, 64-bit"
    "w100        Windows 10, 32-bit"
    "w100-x64    Windows 10 / Server 2016, 64-bit"
    "o2k7        Office 2007, 32-bit"
    "o2k10       Office 2010, 32-bit"
    "o2k10-x64   Office 2010, 32-bit and 64-bit"
    "o2k13       Office 2013, 32-bit"
    "o2k13-x64   Office 2013, 32-bit and 64-bit"
    "o2k16       Office 2016, 32-bit"
    "o2k16-x64   Office 2016, 32-bit and 64-bit"
)


Entsprechend müssen auch die anderen Arrays languages_menu, options_menu_windows_vista, options_menu_windows_8 und options_menu_office geändert werden.

Dann haben diese Arrays wieder globale Gültigkeit, wie es sein sollte.

Entscheidend ist die Definition mit "declare -ag" sowieso nicht, da der Typ als "indiziertes Array" auch durch die runden Klammern eindeutig festgelegt wird.

Wahrscheinlich spielen aber noch andere Faktoren da mit rein, zum Beispiel wie der interne Befehl "select" die Arrays wieder auflöst.

Viele Grüße,
hbuhrmester
hbuhrmester
 
Posts: 525
Joined: 11.10.2013, 20:59


Return to Linux

Who is online

Users browsing this forum: No registered users and 41 guests