【问题标题】:Creating a self extracting bash script for linux using Ant on Windows在 Windows 上使用 Ant 为 linux 创建一个自解压 bash 脚本
【发布时间】:2011-06-13 04:27:51
【问题描述】:

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

以前有人成功过吗?

【问题讨论】:

  • 当问题涉及 Windows 和 Linux 的混合时,我的第一反应是行尾错误。您是否尝试过在脚本文件上运行dos2unixeol 参数是影响所有文件中的所有行还是只影响连接边界?

标签: bash ant tar self-extracting


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的帮助 - 最后是关于解压缩脚本中的 eol,这是一个很好的提示。也是二元选项。
【解决方案2】:

解决了。

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

我还在 concat 中添加了binary="yes" 属性。

我的错误是没有包含脚本的其余部分,感谢您的帮助。

最终代码:

<concat destfile="${output}/selfextract.bsx" 
        binary="yes">
    <fileset file="${installer}/decompress"/>
    <fileset file="${output}/payload.tar.gz"/>
</concat>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2020-11-18
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多