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?

War es hilfreich?

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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top