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