Zum einen das mag nicht nur so sein, sondern ist definitiv so.
Hier mal ein Beispiel mit getopt.
Code:
√ root@host -zsh: ~ $ ./testgetopt.sh -nr --showedits
User input: -nr --showedits
getopt result: -n -r --showedits --
# while loop through all arguments and shift by one each time
# and process each loop the first argument
Options: -n -r -s --
Processing: -n
Options: -r -s --
Processing: -r
Options: -s --
Processing: -s
Options: --
Processing: --
Bezüglich des anderen Verhaltens, dass dennoch die synoinfo.conf geändert wurde ist mir nicht ganz klar.
Die Prüfung findet hier statt:
Bash:
# Check if we disabled drive db auto updates
url="$(get_key_value $synoinfo drive_db_test_url)"
if [[ $disabled == "yes" ]]; then
if [[ $url == "127.0.0.1" ]]; then
echo -e "\nDisabled drive db auto updates."
else
echo -e "\n${Error}ERROR${Off} Failed to disable drive db auto updates!"
fi
else
echo -e "\nDrive db auto updates already disabled."
fi
Die Frage ist, welche der drei möglichen Informationen wurde bei dir in der Konsole ausgegeben?
- Disabled drive db auto updates.
- Failed to disable drive db auto updates!
- Drive db auto updates already disabled.
Weshalb die synoinfo.conf in dem Fall von
-r
bzw.
--ram
geändert wird bin ich auch nicht sicher.
Und was den neuen Wert betrifft, da habe ich die Berechung auch noch nicht versucht nachzuvollziehen.
Hier ab Zeile 1257 geht es los mit set mem_max_mb, aber es wird hier nirgends geprüft ob ein DB Update statfinden darf.
Bash:
# Set mem_max_mb to the amount of installed memory
setting="$(get_key_value $synoinfo mem_max_mb)"
if [[ $ramtotal =~ ^[0-9]+$ ]]; then # Check $ramtotal is numeric
if [[ $bytes == "GB" ]]; then # DSM 7.2 dmidecode returns GB
ramtotal=$((ramtotal * 1024)) # Convert to MB
fi
if [[ $ramtotal -gt $setting ]]; then
synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal"
# Check we changed mem_max_mb
setting="$(get_key_value $synoinfo mem_max_mb)"
if [[ $setting == "$ramtotal" ]]; then
#echo -e "\nSet max memory to $ramtotal MB."
ramgb=$((ramtotal / 1024))
echo -e "\nSet max memory to $ramtotal GB."
else
echo -e "\n${Error}ERROR${Off} Failed to change max memory!"
fi
Meine Vermutung soweit ich das Script beurteieln kann und die Kommentare richtig interpretiere, dass mit der Option
Code:
-n, --noupdate Prevent DSM updating the compatible drive databases
nur die Drive Datenbanken unter dem Pfad
/var/lib/disk-compatibility/
vor einem Update geschützt werden.
Nicht jedoch die RAM settings welche die synoinfo.conf aktualisiert.
Code:
-r, --ram Disable memory compatibility checking (DSM 7.x only),
and sets max memory to the amount of installed memory
Aber wenn es da tatsächlich ein Problem oder Widersrpüche gibt, dann würde ich an deiner Stelle ein Issue beim Author in dessen Repository erstellen.
EDIT:
Ich glaube ich muss meine vorherigen Vermutungen nochmals zurückziehen.
So wie ich es nun auch mit Hilfe der Kurzbeschreibung verstanden habe, dass es bei diesem Script kein sogenannten Dryrun gibt. Denn mit der Option --noupdate wird verhindert, dass DSM die Laufwerksdatenbank automatisch aktualisiert.