1

我正在尝试使用此处讨论的方法生成自提取脚本:http ://www.linuxjournal.com/node/1005818

使用 ANT(在 Windows 上)我使用 TAR 任务(gzip 压缩)创建有效负载存档,并使用以下 CONCAT 任务连接脚本和 tar。

<concat destfile="${output}/selfextract.bsx" 
            append="true"
            eol="lf">
    <fileset file="${installer}/decompress"/>
    <fileset file="${output}/payload.tar.gz"/>
</concat>

该文件正在创建中,并且似乎包含存档数据,但是当在我们的 Red Hat 机器上运行时 gzip 抱怨“无效的压缩数据 -- 违反格式”。

以前有人成功过吗?

4

2 回答 2

1

除非您使用fixlastline参数(默认为关闭),否则eol不会使用。

可能的猜测:在“解压缩”脚本的末尾,您在该行之后有一个额外的__ARCHIVE_BELOW__行。那里不能有任何额外的(甚至是空的)行,否则您会将这些字节通过管道传输到 tar。正如丹尼斯所说,这可能是由 eol 问题引起的,但awk我认为你必须有一个不是 GNU 才能有这个问题。

确认的简单方法是将您tail的重定向到文件而不是 tar,然后 hexdump 原始 tar 的前几个字节和输出 tar 以查看其中有哪些额外(或丢失)字节。

最后要检查的是您是否需要binaryconcat.

于 2011-01-21T17:42:27.787 回答
1

解决了。

在 ANT 脚本中,我在 decompress.sh 上使用该FixCRLF任务。eol="unix"默认情况下,此任务会在文件末尾添加一个额外的换行符,除非您添加fixlast="false".

我还将binary="yes"属性添加到 concat。

我的错误是不包括脚本的其余部分,感谢您的帮助。

最终代码:

<concat destfile="${output}/selfextract.bsx" 
        binary="yes">
    <fileset file="${installer}/decompress"/>
    <fileset file="${output}/payload.tar.gz"/>
</concat>
于 2011-01-21T20:49:21.050 回答