[gelöst] USB auto mount nach Restart

Begonnen von t1me2die, 09 August 2018, 17:53:40

Vorheriges Thema - Nächstes Thema

t1me2die

Moin liebes Forum, ich brauche Hilfe von den Linux Spezis unter Euch.

Hintergrundwissen: Mein FHEM läuft in einer VM auf einem QNAP. Nach jedem Restart des NAS muss ich die USB Geräte erneut mounten (die VM fährt zeitverzögert automatisch hoch).

Problemstellung:
Ich versuche nun ein Script zu schreiben, damit die USB Geräte automatisch gemountet werden mit der VM.

Zu Beginn habe ich in der qpkg.conf folgendes für den Autostart hinzugefügt:

[autorun]
Name = autorun
Version = 0.1
Author = Mathze
Date = 2018-08-09
Shell = /share/MD0_DATA/.qpkg/autorun/autorun.sh
Install_Path = /share/MD0_DATA/.qpkg/autorun
QPKG_File = autorun.qpkg
Enable = TRUE


Danach habe ich die jeweiligen Ordner erzeugt und die autorun.sh Datei im o.g. Pfad abgelegt mit folgendem Code:

#!/bin/sh

/sbin/write_log "[Debian_Jessie_Final AUTOSTART] Starting up Debian_Jessie_Final" 4

# Find where script is located
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Wait until virsh is available

export LD_LIBRARY_PATH=/QVS/usr/lib:/QVS/usr/lib64/
export PATH=$PATH:/QVS/usr/bin/:/QVS/usr/sbin/

OUTPUT="$(virsh)"

while [[ $OUTPUT == *"command not found"* ]]
do

/sbin/write_log "[Debian_Jessie_Final AUTOSTART] Virsh command not found, waiting" 4

export LD_LIBRARY_PATH=/QVS/usr/lib:/QVS/usr/lib64/
export PATH=$PATH:/QVS/usr/bin/:/QVS/usr/sbin/

OUTPUT="$(virsh)"

sleep 10

done

# Then mount USB
virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/MD0_DATA/.qpkg/autorun/Mount_USB_Bluetooth.xml

sleep 2

virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/MD0_DATA/.qpkg/autorun/Mount_USB_ZWave.xml

sleep 2

virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/MD0_DATA/.qpkg/autorun/Mount_USB_nanoCUL.xml

sleep 2

virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/MD0_DATA/.qpkg/autorun/Mount_USB_JeeLink.xml



Ich möchte hier vier USB Geräte mounten, dazwischen gibt es einen 2 Sekunden Sleep.

Nun habe ich das Script noch ausführbar gemacht:
chmod +x /share/MD0_DATA/.qpkg/autorun/autorun.sh

Per lsusb habe ich mir die vendor-id und die product-id besorgt

Nun habe ich angefangen im o.g. Ordner die xml Datei zu erstellen in welchem ich die USB Geräteinformationen hinzufüge:

vi /share/MD0_DATA/.qpkg/autorun/Mount_USB_Bluetooth.xml
vi /share/MD0_DATA/.qpkg/autorun/Mount_USB_ZWave.xml
...


In den jeweiligen XML Dateien habe ich nun folgenden Code eingefügt:

    <hostdev mode='subsystem' type='usb'>
       <source startupPolicy='optional'>
          <vendor id='0x1a86'/>
          <product id='0x7523'/>
       </source>
    </hostdev>


Jede XML Datei habe ich auf die vendor-id und product-id angepasst.

Leider werden die Devices nicht automatisch gemountet, ich muss also ein Problem mit dem Autostart haben.

Wenn ich mich per SSH verbinde und

virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/MD0_DATA/.qpkg/autorun/Mount_USB_Bluetooth.xml


eingebe, bekomme ich die Rückmeldung, dass das Device erfolgreich gemountet wurde.
Nun bin ich aber mit meinem Linux Halbwissen am Ende und weiß leider auch nicht, wo ich evtl. nachschauen könnte.

Gruß
Mathze

Wernieman

mehr Logfile bauen ....

Teile hast Du ja, was sagt denn Dein "/sbin/write_log "[Debian_Jessie_Final AUTOSTART] Virsh command not found, waiting" 4"

Ich muß zugeben, ich arbeite nie mit write_log, sondern mit "echo "blablabla" >>$logfile

$logfile natürlich auf etwas passendes gesetzt... aber das sind nur Feinheiten
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

t1me2die

#2
Mir ist aufgefallen, dass nach einem Restart die Ordnerstruktur wo mein autorun.sh lag und die dazugehörigen XML Dateien einfach weg waren.

Dementsprechend habe ich nun paar Anpassungen vorgenommen:

Autorun-Informationen in der qpkg.conf

[autorun]
Name = autorun
Version = 0.1
Author = Mathze
Date = 2018-08-09
Shell = /share/CACHEDEV1_DATA/VM/.qpkg/autorun/autorun.sh
Install_Path = /share/CACHEDEV1_DATA/VM/.qpkg/autorun
QPKG_File = autorun.qpkg
Enable = TRUE



In dem Ordner: /share/CACHEDEV1_DATA/VM/.qpkg/autorun/ habe ich nun meine folgenden Dateien hinzugefügt:


vi /share/CACHEDEV1_DATA/VM/.qpkg/autorun/autorun.sh
vi /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Mount_USB_Bluetooth.xml
vi /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Mount_USB_ZWave.xml
...



autorun.sh schaut wie folgt aus:

# Find where script is located
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Wait until virsh is available

export LD_LIBRARY_PATH=/QVS/usr/lib:/QVS/usr/lib64/
export PATH=$PATH:/QVS/usr/bin/:/QVS/usr/sbin/

OUTPUT="$(virsh)"

while [[ $OUTPUT == *"command not found"* ]]
do

/sbin/write_log "[Debian_Jessie_Final AUTOSTART] Virsh command not found, waiting" 4

export LD_LIBRARY_PATH=/QVS/usr/lib:/QVS/usr/lib64/
export PATH=$PATH:/QVS/usr/bin/:/QVS/usr/sbin/

OUTPUT="$(virsh)"

sleep 10

done

# Then mount USB
virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Mount_USB_Bluetooth.xml

sleep 2

virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Mount_USB_ZWave.xml

sleep 2

virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Mount_USB_nanoCUL.xml

sleep 2

virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Mount_USB_JeeLink.xml


Nun habe ich noch die XML-Dateien wie folgt in dem rot markierten Ordner erzeugt:

    <hostdev mode='subsystem' type='usb'>
       <source startupPolicy='optional'>
          <vendor id='0x1a86'/>
          <product id='0x7523'/>
       </source>
    </hostdev>


In meinem /sbin/write_log stehen nur Hieroglyphen, für mich nicht leserlich.
Außerdem glaube ich auch nicht, dass er tatsächlich was darein schreibt...

Zuerst muss ich jetzt einmal herausfinden, ob mein "autorun.sh" überhaupt aufgerufen wird.

Was mir auffällt ist, dass nachdem ich das NAS neugestartet habe, aus dem Block aus der qpkg.conf folgendes wurde:

Name = autorun
Version = 0.1
Author = Mathze
Date = 2018-08-09
Shell = /share/CACHEDEV1_DATA/VM/.qpkg/autorun/autorun.sh
Install_Path = /share/CACHEDEV1_DATA/VM/.qpkg/autorun
QPKG_File = autorun.qpkg
Enable = FALSE
Official = 0
Incomplete_Conf = 1


Gruß
Mathze

Wernieman

Zuerst muss ich jetzt einmal herausfinden, ob mein "autorun.sh" überhaupt aufgerufen wird.

Deshalb Logfile!

"/sbin/write_log" ist ein Programm! Nicht das Logfile. Wo es genau hinschreibt ??? Ich kenne es nicht und habe e auch nicht auf dem Rechner ...

P.S. Auf was für einer Maschine arbeitest Du?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

t1me2die

#4
Langsam arbeite ich mich voran.

Mein Script habe ich nun auf Logfile umgebaut.


#!/bin/sh

echo `date` [Debian_Jessie_Final AUTOSTART] Starting up Debian_Jessie_Final >> /var/log/autorun.log

export LD_LIBRARY_PATH=/QVS/usr/lib:/QVS/usr/lib64/

sleep 2

export PATH=$PATH:/QVS/usr/bin/:/QVS/usr/sbin/

OUTPUT="$(virsh)"

while [[ $OUTPUT == *"command not found"* ]]
do

/sbin/write_log "[Debian_Jessie_Final AUTOSTART] Virsh command not found, waiting" 4
echo `date` [Debian_Jessie_Final AUTOSTART] Bin in der Schleife - Virsh command not found, waiting >> /var/log/autorun.log

export LD_LIBRARY_PATH=/QVS/usr/lib:/QVS/usr/lib64/
export PATH=$PATH:/QVS/usr/bin/:/QVS/usr/sbin/

OUTPUT="$(virsh)"

sleep 10

done

# Then mount USB

echo `date` Bin vor dem mounten von dem 1. Devices >> /var/log/autorun.log
virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Mount_USB_Bluetooth.xml
echo `date` Bin nach dem mounten des 1. Devices >> /var/log/autorun.log

sleep 2

echo `date` Bin vor dem mounten von dem 2. Devices >> /var/log/autorun.log
virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Mount_USB_ZWave.xml
echo `date` Bin nach dem mounten des 2. Devices >> /var/log/autorun.log

sleep 2

echo `date` Bin vor dem mounten von dem 3. Devices >> /var/log/autorun.log
virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Mount_USB_nanoCUL.xml
echo `date` Bin nach dem mounten des 3. Devices >> /var/log/autorun.log

sleep 2

echo `date` Bin vor dem mounten von dem 4. Devices >> /var/log/autorun.log
virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Mount_USB_JeeLink.xml
echo `date` Bin nach dem mounten des 4. Devices >> /var/log/autorun.log

echo `date` Am Ende des Scriptes >> /var/log/autorun.log


Das Script wird auch ausgeführt, denn ich sehe nun das Logfile  :)


Thu Aug 9 19:02:09 CEST 2018 [Debian_Jessie_Final AUTOSTART] Starting up Debian_Jessie_Final
Thu Aug 9 19:02:09 CEST 2018 Bin vor dem mounten von dem 1. Devices
Thu Aug 9 19:02:09 CEST 2018 Bin nach dem mounten des 1. Devices
Thu Aug 9 19:02:11 CEST 2018 Bin vor dem mounten von dem 2. Devices
Thu Aug 9 19:02:11 CEST 2018 Bin nach dem mounten des 2. Devices
Thu Aug 9 19:02:13 CEST 2018 Bin vor dem mounten von dem 3. Devices
Thu Aug 9 19:02:13 CEST 2018 Bin nach dem mounten des 3. Devices
Thu Aug 9 19:02:15 CEST 2018 Bin vor dem mounten von dem 4. Devices
Thu Aug 9 19:02:15 CEST 2018 Bin nach dem mounten des 4. Devices
Thu Aug 9 19:02:15 CEST 2018 Am Ende des Scriptes


Wie kann ich nun Fehlermeldungen abfragen?
Augenscheinlich klappt der Export und das mounten ja nicht.

Des Weiteren ist mir aufgefallen, dass ein Mount nicht klappt und zwar von Device Nr. 3 (meinem nanoCUL)

lsusb:


[~] # lsusb
Bus 001 Device 009: ID 0658:0200 Sigma Designs, Inc.
Bus 001 Device 008: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 001 Device 007: ID 1005:b155 Apacer Technology, Inc.
Bus 001 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 003: ID 0bda:5411 Realtek Semiconductor Corp.
Bus 001 Device 002: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub


Fehlermeldung:

error: operation failed: Multiple USB devices for 1a86:7523, use <address> to specify one


Hat er ja auch recht, warum ich zweimal das Device dort sehe ist mir noch ein Rätsel, jedoch weiß ich nicht, wie ich nun "adress" benutzen soll, damit er versteht, dass  ich Gerät
Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
mounten möchte.

Gruß
Mathze

Wernieman

Auswerten der Fehlervariable $?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

t1me2die

 ::)  ::)  ::)  ::)

Die VM war zum Zeitpunkt des autorun noch nicht hochgefahren, oh man.
Was bin ich nur für ein Depp  :-X

Danke Wernieman für das zuhören  :)

Wieder etwas gelernt, zuerst zwar durch viel ausprobieren, aber so langsam versteht man, was da im Hintergrund läuft.

Danke!

Gruß
Mathze

Wernieman

Vor allem hoffentlich, wie man Debuggt
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Spartacus

Hallo zusammen,
ich habe gerade genau das gleiche Problem. Habe eine TVS 672 und ein separates Verzeichnis für meine VMs mit dem Namen VirtualMachine.

Was ich nicht verstehe ist der Pfad, den t1me2die für die autorun.sh anlegt.
/share/CACHEDEV1_DATA/VM/.qpkg/autorun/autorun.sh
/share/CACHEDEV1_DATA/ verstehe ich noch. VM ist offenbar das Verzeichnis in dem die VMs liegen. Bei mir wäre das dann VirtualMachine.

ABER:
das Verzeichnis .qpkg/autorun gibt es bei mir nicht. Muss ich das in meinem Verzeichnis VirtualMachine anlegen und dann die autorun.sh da reinpacken?

Sorry, bin  etwas aufgeschmissen,
Danke für die Hilfe,
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R