Bitte poste deine Gedankenideen oder alles, was dir vielleicht einfällt. Es würde mich sehr interessieren, was andere denken.
Das allgemeine Problem
Wenn ich eine einfache Java-Anwendung (die ich geschrieben habe) installiere, die beim Booten (im Hintergrund) über /etc/init.d/ ausgeführt wird, funktioniert sie auf der liveUSB, auf der ich sie explizit installiere. Wenn ich eine Kopie dieses Sticks mache, wird er nie erfolgreich gebootet. Beim Booten der liveUSB-Kopie bleibt die Java-Anwendung immer hängen, wenn der liveUSB-Startvorgang mein Skript erreicht. Mein Skript, das genau das tut, was es tun soll, auch alle 5 Minuten, und es wird so lange ausgeführt, bis Sie die Maschine herunterfahren.
- Mein Skript blockiert alles andere
- Nichts wird über mein Skript hinaus geladen
- Sie können mein Skript nicht abbrechen
- Es gibt keine GUI
- Der einzige Text, den Sie sehen können, ist die Befehlszeilenausgabe meines Skripts
Setup & Test - Alles läuft gut :)
Ich habe eine Linux liveUSB mit 3 Partitionen. Ein einfaches Xubuntu-Standardbild wird geladen.
- sda1> 2 gb stoage
- sda2> 2 gb system
- sda3> verbleibende gb für casper
Ich habe eine einfache Java-Anwendung erstellt, die beim Start im Hintergrund ausgeführt wird. Um so weit zu kommen, folgte ich diesen Schritten:
- Kompilierte Java-Anwendung in Klassen
- Klassendateien in / home / user / folder / platziert
- Kopierte mein startup.sh-Skript in /etc/init.d/
- In /etc/init.d/
- Typ "update-rc.d startup.sh start 20 2 5. Stop 20 0 1 6".
- Diese aktualisierten Laufebenen wurden erfolgreich aktualisiert
- Jetzt kann ich jeden Vorgang neu starten / neu starten / herunterfahren und alles läuft einwandfrei!
Die Kopie - Hier wird es knifflig!
Beim Erstellen einer Kopie dieses Sticks folge ich diesen Schritten:
- Montieren Sie sda2
- Kopieren Sie alles aus diesem Ordner nach / home / user / Desktop / tmp-system /
- Montieren Sie sda3
- kopiere alles aus diesem Ordner nach / home / user / Desktop / tmp-casper /
- Gehen Sie nach / home / user / Desktop / tmp-system /
- Geben Sie "tar -cvf system.tar" ein.
- Gehen Sie nach / home / user / Desktop / tmp-casper /
- Geben Sie "tar -cvf casper.tar" ein.
- Umount
- Stecken Sie ein leeres USB-Kabel ein (zB SDB)
- Partitionen einrichten (wie der Stick, von dem Sie kopieren)
- Unterteilungen in Partitionen
- tar -xvf system.tar ... in sdb2
- tar -xvf casper.tar ... in sdb3
Testen - hier geht alles schief!
- Schließen Sie neu erstellte liveUSB an einen Computer an
- Booten Sie von USB
- Alles beginnt gut zu booten
- Java-Anwendung, die ich geschrieben habe, wird ausgelöst
- Der Startvorgang bleibt für immer hängen
- Keine Eingabeaufforderung für Cmd verfügbar
- KEINE GUI verfügbar
- Es ist, als ob der Thread läuft (und es ist! Die Ausgabe kann alle 5 Minuten angesehen werden - genau so, wie es sein sollte)
Lösungsversuche & Gotchas
1
Ich kann die kopierte liveUSB einbinden, die Datei startup.sh bearbeiten, um meine Java-Anwendung nicht zu starten, und sie wird immer noch nicht gestartet (genau wie ich es vermutet habe).
2
Wenn ich "dd if = sda of = sdb" verwende, funktioniert die Kopie des liveUSB einwandfrei. Dies ist jedoch keine akzeptable Lösung. Wenn ich einen 16-GB-Stick mit dd auf einen 64-GB-Stick kopieren würde, würde aus dem 64-GB-Stick ein 16-GB-Stick werden. Das Ändern der Werte, die in jeder Partition geändert werden müssen, wird außerdem erheblich schwieriger.
3
Getestet viele Variationen von startup.sh und der Java-Anwendung selbst. Alle erzeugen den gleichen Fehler.
4
Die Methode, die ich zum Kopieren verwende, funktioniert für jede andere Form von Anwendung, Datei oder irgendetwas anderem.
5
Ich möchte auch versuchen, die Verwendung zusätzlicher Bibliotheken oder Programme zur Ausführung der Java-Anwendung zu vermeiden.
6
Ich habe auch sda2 & sdb2 gemountet, um alles direkt von einem zum anderen zu kopieren, dann folgte das gleiche für sda3 & sdb3. Dies erzeugt den gleichen Fehler.
ZUSÄTZLICHE PUNKTE
- Die sda3-Partition wird mit cryptsetup verschlüsselt
- Es gibt 2 Dateien in der Datei system.tar (die sdb2 sein wird, die von sda2 stammt), deren Wert geändert wird, nachdem sie auf den USB-Stick geschrieben wurden.
- Diese beiden Werte haben in der Vergangenheit keine Probleme verursacht und wurden jedes Mal geändert, wenn ein neues liveUSB erstellt wird
- Es gibt 1 Datei in der Datei casper.tar (die sdb3 sein wird, die von sda3 stammt), deren Wert geändert wird, nachdem sie auf den USB-Stick geschrieben wurde.
- Dieser Wert hat in der Vergangenheit keine Probleme verursacht und wurde bei jedem neu erstellten liveUSB immer geändert.
Prüfsummen-Testprozess
Orignial liveUSB Bild
Live arbeiten usb> sda empty usb> sdb
Schritte:
- Mounten, Kopieren und Checksumme sda2
- Typisiert "mount / dev / sda2 / media / sda2"
- Typisiert "tar -C / media / sda2 -cvf ~ / Desktop / system.tar."
- Typisiert "find. -Type f -exec sha1sum {} ';' > /tmp/sda2_checksum.txt "
- Typisch "umount / media / sda2"
- Mounten, Kopieren und Checksumme sda3
- Typisiert "mount / dev / sda3 / media / sda3"
- Typisiert "tar -C / media / sda3 -cvf ~ / Desktop / casper.tar."
- Typisiert "find. -Type f -exec sha1sum {} ';' > /tmp/sda3_checksum.txt "
- Typisch "umount / media / sda3"
- Erstellen Sie Partitionen für SDB
- Mount, schreiben und Checksumme sdb2
- Typisiert "mount / dev / sdb2 / media / sdb2"
- Typisiert "tar -C / media / sdb2 -xvf ~ / Desktop / system.tar"
- Typisiert "find. -Type f -exec sha1sum {} ';' > /tmp/sdb2_checksum.txt "
- Typisch "umount / media / sdb2"
- Mounten, Schreiben und Checksumme sdb3
- Typisiert "mount / dev / sdb3 / media / sdb3"
- Typisiert "tar -C / media / sdb3 -xvf ~ / Desktop / casper.tar"
- Typisiert "find. -Type f -exec sha1sum {} ';' > /tmp/sdb3_checksum.txt "
- Typisch "umount / media / sdb3"
- Kontrollsummen vergleichen
- sortiere /tmp/sda2_checksum.txt -o /tmp/sda2_checksum.txt.sort
- sortiere /tmp/sda3_checksum.txt -o /tmp/sda3_checksum.txt.sort
- sort /tmp/sdb2_checksum.txt -o /tmp/sdb2_checksum.txt.sort
- sort /tmp/sdb3_checksum.txt -o /tmp/sdb3_checksum.txt.sort
- Ergebnisse
sda2 & sdb2
Typ "diff sda2_checksum.txt.sort sdb2_checksum.txt.sort"
45d44 < 2ddf9802c9c15ac6e4575cc9de32e3530eae6b7d ./efi/boot/grub.cfg 82d80 < 59bb2775a8e7e499e0590b7b8c2492eb250fb7d8 ./syslinux/txt.cfg 154a153 > ae6c127713e01fc5fb4a2e4e28f6bbddc6bd6af5 ./efi/boot/grub.cfg 158a158 > b78090b66b4e3fa04ca9d466ee78c9060adf744e ./syslinux/txt.cfg
Diese 2 Dateien enthalten jeweils einen Wert, der geändert wird. Alles andere ist das Gleiche. Die Ergebnisse sind genau das, was sie sein sollten.
sda3 & sdb3
Typ "diff sda3_checksum.txt.sort sdb3_checksum.txt.sort"
Identisch - Denken Sie daran, dass dies das Original-LiveUSB-Bild ist.
Im nächsten Abschnitt werde ich weitere Vergleichsergebnisse veröffentlichen.
NÄCHSTE SCHRITTE - alias Aktionsplan
Start von liveUSB-Image ohne die Skripts, die ausgeführt werden müssen.
Schritt 1 - Erfolg / Misserfolg?
ERFOLG - Prüfsummen passen wie sie sollen
- Java auf liveUSB von 6 auf 7 aktualisieren
- Teer neu erstellen
- Erstelle neue liveUSB aus tar's
- Testen Sie liveUSB
Schritt 2 - Erfolg / Misserfolg?
ERFOLG - Prüfsummen passen wie sie sollen
- / Home / user / Ordner / erstellen
- Kopieren Sie Klassendateien für die Java-Anwendung nach / home / user / folder /
- Teer neu erstellen
- Erstelle neue liveUSB aus tar's
- Testen Sie liveUSB
Schritt 3 - Erfolg / Misserfolg?
ERFOLG - Prüfsummen passen wie sie sollen
- Fügen Sie in /etc/init.d/ die Datei startup.sh hinzu.
- Ohne update-rc.d aufzurufen
- Teer neu erstellen
- Erstelle neue liveUSB aus tar's
- Testen Sie liveUSB
Schritt 4 - Erfolg / Misserfolg?
ERFOLG - Prüfsummen passen wie sie sollen
(Ich habe es bisher noch nicht so erfolgreich gemacht) - der Wert, der geschrieben werden muss, wurde jedoch noch nicht in die casper-Partition (sda3) eingefügt.
- Geben Sie "update-rc.d startup.sh start 21 2 5" ein.
- Teer neu erstellen
- Erstelle neue liveUSB aus tar's
- Testen Sie liveUSB
Schritt 5 - Erfolg / Misserfolg?
ERFOLG - Prüfsummen passen wie sie sollen
Ich kann nicht glauben, dass dies funktioniert hat! Was bringt mich zu ... (um es auf eine nette Art auszudrücken) Warum hat die Welt vorher nicht funktioniert?
- Zufälligerweise funktionierte Version-13.
- Boot liveUSB
- Geben Sie den Wert ein, der in casper (sda3) überschrieben werden soll, bevor Sie tar erstellen
- Beim Laufen von liveUSB
- Bearbeiten Sie die Konfigurationsdatei in /home/user/folder/config.properties
- LiveUSB herunterfahren
- Teer neu erstellen
- Erstelle neue liveUSB aus tar's
- Testen Sie liveUSB
BILD VOLLSTÄNDIG !!
Ich bin damit noch nicht fertig!
* Das Schreiben an die USB hat sich nie geändert.
Warum hat es vorher nicht funktioniert?
- Teer-Methode? - Nur eine kleine Änderung ...
- Von "tar -cvf casper.tar".
- TO "tar -C / media / sda3 / -cvf ~ / Desktop / casper.tar.
- Erreichen diese Zeilen nicht dasselbe?
- Ich werde das in Kürze testen. - Ich vermute keinen Unterschied.
- Das Verfahren in einzelne Schritte aufteilen?
- Vor:
- Unter dem NÄCHSTEN SCHRITT - auch Aktionsplan genannt - würde ich alle diese Schritte ausführen, bevor Sie ein neues Bild erstellen.
- Nach dem:
- Der NEXT STEPS - alias Aktionsplan - wurde genau befolgt
- Könnte das der Unterschied sein?
- Ich werde das in Kürze testen.
- Kann das Löschen großer (oder kleiner) Dateien aus dem Verzeichnis / home / in der Partition casper (sda3) zu Beschädigungen führen?
- Ich habe keine Ahnung..?
- Ich werde das in Kürze testen.
Weitere Tests - ich möchte meine Antwort!
Beginnend mit dem ursprünglichen liveUSB-Bild.
- Java auf liveUSB von 6 auf 7 aktualisieren
- / Home / user / Ordner / erstellen
- Kopieren Sie Klassendateien für die Java-Anwendung nach / home / user / folder /
- Fügen Sie in /etc/init.d/ die Datei startup.sh hinzu.
- Geben Sie "update-rc.d startup.sh start 21 2 5" ein.
- Bearbeiten Sie die Konfigurationsdatei in /home/user/folder/config.properties
Schritt auf einmal dieses Mal. - Wird es funktionieren?
Test 1 - Erfolg / Fehler?
SCHEITERN!
- Alte Teermethode
Test 2 - Erfolg / Fehlschlag?
- Alte Teermethode
- Gelöschte generierte Datei in / boot /
- Diese Datei wird von meinem Skript erstellt, wenn die casper-Partition (sda3) geschrieben wird. Sie enthält nur eine ID, die zur Verifizierung keinen Einfluss auf den Startvorgang hat.
Test 3 - Erfolg / Fehlschlag?
- Neue Teermethode
Test 4 - Erfolg / Fehlschlag?
- Neue Teermethode
- Gelöschte generierte Datei in / boot /
- Diese Datei wird von meinem Skript erstellt, wenn die casper-Partition (sda3) geschrieben wird. Sie enthält nur eine ID, die zur Verifizierung keinen Einfluss auf den Startvorgang hat.
Ergebnisse
Ich werde in dieser Reihenfolge testen:
Test 1 -> Test 3 -> Test 4 -> Test 2
Wenn Test 1 funktioniert, springe ich aus dem Fenster! - Ich habe keine Ahnung, warum es jetzt funktionieren würde, da ich dies viele Male getestet habe und jedes Mal erfolglose Stiefel hervorgebracht hat. - Vielleicht war der CP- oder TAR-Prozess irgendwie beschädigt.
Wenn Test 1 fehlschlägt: Wenn Test 3 funktioniert ... - Die tar-Methode hat den Fehler verursacht. - Ich verstehe nicht, was mit der alten tar-Methode und der neuen tar-Methode falsch wäre.
TBC ...