あたた日記

あたたん。

7-Zipで固めたtarがAIXで解凍失敗することがありそう。

AIXでは、ある特定の条件でtar解凍が失敗することがある。
その一例が、長いパスを含むフォルダを少し古いバージョンの「7-Zipツールでtarに固めたときに起こる模様。

試しに、に文字長15のフォルダを作り、その中に文字長15のフォルダ、またその中に文字長15のフォルダ…
これを10回ほど繰り返した構成のフォルダを作る。
上記のマトリョーシカみたいなフォルダを、7-Zipでtarに固める。
7-Zipのバージョンは9.20、Windows7で実行した。

tar -tvfで中身を確かめてみるのだが、本来はこうなるはず。
まずはFreeBSDにtarを送りつけて、試す。

% tar --version
bsdtar 2.8.5 - libarchive 2.8.5
% tar -tvf 0ABCDEFGHIJKLMN.tar
drwxrwxrwx  0 0      0           0 Jan 24 19:27 0ABCDEFGHIJKLMN/
drwxrwxrwx  0 0      0           0 Jan 24 19:27 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/
drwxrwxrwx  0 0      0           0 Jan 24 19:27 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/
drwxrwxrwx  0 0      0           0 Jan 24 19:27 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/
drwxrwxrwx  0 0      0           0 Jan 24 19:27 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/
drwxrwxrwx  0 0      0           0 Jan 24 19:27 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/
drwxrwxrwx  0 0      0           0 Jan 24 19:27 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6ABCDEFGHIJKLMN/
drwxrwxrwx  0 0      0           0 Jan 24 19:27 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6ABCDEFGHIJKLMN/7ABCDEFGHIJKLMN/
drwxrwxrwx  0 0      0           0 Jan 24 19:28 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6ABCDEFGHIJKLMN/7ABCDEFGHIJKLMN/8ABCDEFGHIJKLMN/
drwxrwxrwx  0 0      0           0 Jan 24 19:28 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6ABCDEFGHIJKLMN/7ABCDEFGHIJKLMN/8ABCDEFGHIJKLMN/9ABCDEFGHIJKLMN/
%

で、AIXでtar -tvfで中身を確認した結果がこちら。

l273pp020_pub[/test/7zp] > tar -tvf 0ABCDEFGHIJKLMN.tar
drwxrwxrwx 0   0        0 Jan 24 04:27:23 2016 0ABCDEFGHIJKLMN/
drwxrwxrwx 0   0        0 Jan 24 04:27:27 2016 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/
drwxrwxrwx 0   0        0 Jan 24 04:27:34 2016 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/
drwxrwxrwx 0   0        0 Jan 24 04:27:39 2016 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/
drwxrwxrwx 0   0        0 Jan 24 04:27:44 2016 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/
drwxrwxrwx 0   0        0 Jan 24 04:27:48 2016 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/
drwxrwxrwx 0   0        0 Jan 24 04:27:52 2016 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6AB
drwxrwxrwx 0   0        0 Jan 24 04:27:56 2016 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6AB
drwxrwxrwx 0   0        0 Jan 24 04:28:03 2016 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6AB
drwxrwxrwx 0   0        0 Jan 24 04:28:07 2016 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6AB
l273pp020_pub[/test/7zp] >

"6AB"のように、パスが途中で切れてしまっている…
よく調べていないけど、パスの文字長が合計100文字を超えるとうまく動かないっぽい。

この不具合の嫌なところは、一見正常に解凍できているようでも、
実は失敗してました。ということが起こるところ。
実際にtar -xvfで展開してみると、

l273pp020_pub[/test/7zp] > tar -xvf 0ABCDEFGHIJKLMN.tar
x 0ABCDEFGHIJKLMN
x 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN
x 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN
x 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN
x 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN
x 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN
x 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6AB
x 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6AB
x 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6AB
x 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6AB
l273pp020_pub[/test/7zp] > echo $?
0
l273pp020_pub[/test/7zp] > cd 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN
l273pp020_pub[/test/7zp/0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN] > ls -l
合計 0
drwxrwxrwx    2 root     system          256 Jan 24 04:27 6AB
l273pp020_pub[/test/7zp/0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN] > ls -l 6AB
合計 0
l273pp020_pub[/test/7zp/0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN] >

リターンコード0でコマンドが実行終了するが、6ABCDEFGHIJKLMNフォルダより下位のフォルダが作られていない。
標準出力にもエラーメッセージは出ないので、ファイルのパスやファイル名が正しいものになっているかチェックするしかなさそう。

ただ、この不具合は下記のように回避ができる。
・「7-zip」の別バージョンを使用する。
※2016/01時点で最新Verの15.14では発生しなかった。
・"AIX Toolbox for Linux Applications"から導入したtarで代用する。
下記は導入したtarで中身を確認した結果。正常にフォルダ名が見れている。

l273pp020_pub[/test/7zp] > which gtar
/usr/bin/gtar
l273pp020_pub[/test/7zp] > gtar -tvf 0ABCDEFGHIJKLMN.tar
drwxrwxrwx 0/0               0 2016-01-24 04:27:23 0ABCDEFGHIJKLMN/
drwxrwxrwx 0/0               0 2016-01-24 04:27:27 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/
drwxrwxrwx 0/0               0 2016-01-24 04:27:34 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/
drwxrwxrwx 0/0               0 2016-01-24 04:27:39 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/
drwxrwxrwx 0/0               0 2016-01-24 04:27:44 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/
drwxrwxrwx 0/0               0 2016-01-24 04:27:48 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/
drwxrwxrwx 0/0               0 2016-01-24 04:27:52 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6ABCDEFGHIJKLMN/
drwxrwxrwx 0/0               0 2016-01-24 04:27:56 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6ABCDEFGHIJKLMN/7ABCDEFGHIJKLMN/
drwxrwxrwx 0/0               0 2016-01-24 04:28:03 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6ABCDEFGHIJKLMN/7ABCDEFGHIJKLMN/8ABCDEFGHIJKLMN/
drwxrwxrwx 0/0               0 2016-01-24 04:28:07 0ABCDEFGHIJKLMN/1ABCDEFGHIJKLMN/2ABCDEFGHIJKLMN/3ABCDEFGHIJKLMN/4ABCDEFGHIJKLMN/5ABCDEFGHIJKLMN/6ABCDEFGHIJKLMN/7ABCDEFGHIJKLMN/8ABCDEFGHIJKLMN/9ABCDEFGHIJKLMN/
l273pp020_pub[/test/7zp] >

ミドルウェアの導入ドキュメントには、たまにモジュールの解凍はGNUのtarコマンドを推奨と書かれていることもある。
公式が出すドキュメントに書いてあることは素直に聞きましょう(迫真)。