Erstellen eines selbst extrahierenden Bash -Skripts für Linux mit ANT unter Windows
-
16-10-2019 - |
Frage
Ich versuche, ein selbst extrahiertes Skript mit der hier besprochenen Methode zu generieren: http://www.linuxjournal.com/node/1005818
Verwenden von ANT (unter Windows) erstelle ich das Nutzlastarchiv mit TAR -Task (Gzip -Komprimierung) und beschaue das Skript und das TAR mithilfe der folgenden Concat -Aufgabe.
<concat destfile="${output}/selfextract.bsx"
append="true"
eol="lf">
<fileset file="${installer}/decompress"/>
<fileset file="${output}/payload.tar.gz"/>
</concat>
Die Datei wird erstellt und scheint die Archivdaten zu enthalten. Wenn sie jedoch auf unserer Red Hat -Maschine ausgeführt werden, beschwert sich GZIP "Ungültige komprimierte Daten -Format verletzt".
Hat es jemand schon einmal gelungen?
Lösung
Es sei denn, Sie verwenden die fixlastline
Argument (standardmäßig ausgeschaltet) dann eol
wird nicht verwendet.
Wahrscheinliche Vermutung: Sie haben eine zusätzliche Zeile am Ende Ihres "Dekompress" -Skripts nach dem __ARCHIVE_BELOW__
Linie. Sie können dort keine zusätzlichen (sogar leeren) Linien haben, oder Sie werden diese Bytes in den Teer leiten. Dies könnte, wie Dennis sagte, durch EOL -Probleme verursacht werden, aber Sie müssten eine haben awk
Das ist nicht GNU, um dieses Problem zu haben, denke ich.
Einfache Möglichkeit zu bestätigen ist die Änderung Ihrer Veränderung tail
Um zu einer Datei anstelle von Tar umzuleiten, dann hexdump die ersten Bytes des ursprünglichen Teer und des Ausgangs -Teer, um zu sehen, welche zusätzlichen (oder fehlenden) Bytes dort reinkommen.
Eine letzte Sache, die Sie überprüfen müssen, müssen Sie die festlegen binary
Option in Ihrem concat
.
Andere Tipps
Gelöst.
Höher im Ameisenskript, ich benutzte die FixCRLF
Aufgabe mit eol="unix"
auf decompress.sh. Standardmäßig fügt diese Aufgabe am Ende der Datei eine zusätzliche neue Zeile hinzu fixlast="false"
.
Ich habe auch das hinzugefügt binary="yes"
Attribut zu concat.
Mein Fehler, den Rest des Skripts nicht aufzunehmen, und danke für die Hilfe.
Endgültiger Code:
<concat destfile="${output}/selfextract.bsx"
binary="yes">
<fileset file="${installer}/decompress"/>
<fileset file="${output}/payload.tar.gz"/>
</concat>