2011-01-21 35 views
1

我試圖使用方法這裏討論生成自解壓腳本使用Ant的Linux:http://www.linuxjournal.com/node/1005818創建自解壓bash腳本用於在Windows

使用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> 

的文件被創建,並且似乎包含歸檔數據,但是當我們的紅帽機的gzip運行抱怨「--format侵犯無效的壓縮數據」。

有沒有人在此之前成功過?

+0

我當問題涉及Windows和Linux的混合物的第一直覺是,行結尾是錯誤的。你有沒有試過在腳本文件上運行`dos2unix`? `eol`參數會影響所有文件中的所有行還是僅影響並置邊界? – 2011-01-21 16:10:50

回答

1

除非使用參數fixlastline(默認爲關閉),否則不使用eol

可能的猜測:您在您的「解壓縮」腳本__ARCHIVE_BELOW__行後結束一個額外的行。你不能有任何額外的(甚至是空的)行,或者你將這些字節流入tar。正如Dennis所說,這可能是由於eol問題引起的,但是你必須有一個不是GNU的awk纔會有我想的這個問題。

簡單的確認方法是將tail更改爲重定向到文件而不是tar,然後hexdump初始tar的前幾個字節和輸出tar以查看哪些額外(或缺少)字節進入。

最後要檢查的是您需要在concat中設置binary選項。

+0

感謝您的幫助 - 最終它是關於解壓縮腳本中的eol,這是一個很好的提示。也是二元期權。 – 2011-01-21 20:54:23

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>