在Windows上使用Ant为Linux创建自解压bash脚本

时间:2011-01-21 14:13:42

标签: bash ant tar self-extracting

我正在尝试使用此处讨论的方法生成自解压脚本: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会抱怨“压缩数据无效 - 格式已被违反”。

之前有没有人成功过?

2 个答案:

答案 0 :(得分:1)

除非您使用fixlastline参数(默认情况下已关闭),否则不使用eol

可能猜测:在__ARCHIVE_BELOW__行后的“解压缩”脚本末尾有一行额外的行。你不能在那里有任何额外的(甚至是空的)行,或者你将这些字节传递给tar。正如Dennis所说,这可能是因为eol问题引起的,但是我认为你必须有一个不是GNU的awk来解决这个问题。

简单的确认方法是将tail更改为重定向到文件而不是tar,然后将原始tar和输出tar的前几个字节进行hexdump以查看哪些额外(或缺少)字节进入那里。

最后要检查的是,您是否需要在binary中设置concat选项。

答案 1 :(得分: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>