ich habe mir aus dem original RevPi-factory-reset Script ein eigenes reset-Script erstellt. Ziel ist es, über dieses Script die Netwerkeinstellungen (DHCP oder statische IP), das UserPW, den Hostnamen sowie einige Einstellungen für AnyDesk und VNC mitzugeben. Ich muss mehrere (vermutlich über 100) RevPi's für unsere Kunden einrichten, damit diese im Netzwerk laufen und wir uns per AnyDesk verbinden können. Dazu soll der Kunde max. einen USB Stick einstecken müssen und die Einrichtung automatisch mit den von uns zur Verfügung gestellten Einrichtungsdaten durchgeführt werden.
Dazu liesst das Script eine Config-Datei entweder aus dem Ordner /boot oder vom USB-Stick. Im /boot Ordner ist bei der Auslieferung von uns schon eine Basis-Config hinterlegt. Wird eine USB Stick mti config-Datei gefunden, hat diese jedoch die höhere Priorität.
Hier bin ich nun aber auf mehrere Probleme gestoßen. Hauptsächlich macht mir das erkennen des USB Sticks Probleme.
Wie das Script bisher aussieht:
Script-A) unter etc/profile.d liegt das "thorw-revpi-factory-reset.sh" Script. Dieses wird beim Login des Users ausgeführt.
- Es prüft ob eine USB Stick vorhanden ist. Wenn ja wird die Config-Datei von diesem genommen, sonst aus dem /boot Verzeichnis.
- Diese wird dann ausgelesen (ähnlich wie XML formatiert)
- Eine LOG-Datei wird in /home/pi erstellt und falls möglich auch auf dem USB Stick kopiert
(die LOG protokolliert die einzelnen Schritte des Scripts und soll uns in Servicefällen helfen)
- Das "thorw-revpi-factory-reset" BASH-Script wird aufgerufen (falls /home/pi/.thorw-revpi-factory-reset und keine LOG-Datei auf USB Stick vorhanden) und die eingelesenen Werte werden als Args übergeben
- Es wird geprüft ob die Args das richtige Format haben. Falls nicht bricht das Script ab
- overlay, machine id, mac adresse, hostname, userpw, network setting, AnyDesk und VNC Einstellungen werden gesetzt
- "boot to GUI" wird aktiviert
- Script führt zum Ende ein Reboot aus
Die Probleme:
- "find"-Befehl kann auch mit sudo in der CLI nicht den USB-Stick durchsuchen. Ein schreiben auf diesem ist auch nicht mögliche. Ist die GUI richtig gebootet, ist sowohl lesen als auch schreiben möglich. Sowohl in der GUI als auch CLI wird er automatisch unter z.B. /media/pi/KINGSTON gemountet.
--> Lösung: Ich mounte mir den USB Stick manuell in den Ordner /media/pi/USB1 mit dem Befehl "sudo mount -o utf8,uid=pi,gid=pi,noatime /dev/sda1 /media/pi/USB1" - der RevPi ist so eingestellt, dass er direkt in die GUI bootet. Jetzt scheint hier das Problem zu sein, dass es sich bei diesem vorgang zunächst in der CLI einloggt und nur wenige ms später in die GUI einloggt. Diese Logins führen dazu, dass das Script doppelt/parallel läuft. Hier macht dann wieder das manuelle mounten der USB Sticks Probleme. Was genau passiert kann ich nicht richtig nachvollziehen, jedoch scheint eins der Scripte den USB Stick nicht mehr richtig auslesen zu können. Es findet wohl die config-Datei, nicht aber die LOG. Da es die LOG nicht findet, wird ein Setup mit den USB-Stick config-Daten ausgeführt. Es ergibt sich somit eine Endlos-Schleife, solange der USB Stick eingesteckt ist.
Da ich hier nicht wirklich ne Idee habe, wie ich die Probleme sauber lösen kann und dass parallel starten eh blöd ist, habe ich mir was anderes überlegt.
Neue Idee ist, das Script nicht mehr bei jedem Start auszuführen, sondern immer dann, wenn ein USB Stick eingesteckt wird.
Gibt es noch andere Ideen? Ich kann auch gerne mal die beiden Script-Dateien hochladen.