レガシーcygwin(GNU tar v1.21)システムとレガシーSolaris 9システムを使用)を維持しています。Solaris9システムの構成は修正されており、アップグレードできません(つまり、アップグレードできません)。 Solaris用のgnutarをインストールします)。
Solaris 9システムで抽出できるcygwinシステムでtarballを作成しようとしていますが、残念ながらディレクトリ構造(これも修正されており、名前を変更できません)とファイル名が100文字を超えており、 最後の千年紀のグレートタールウォーズ 。 Solarisシステムには大規模な(保守的な)ユーザーベースがあるため、Solaristarを使用するソリューションが推奨されます。
これが私が経験しているエラーです。
Cygwinでtarを作成する:
$ tar -cf dir.tar dir
または
$ tar -c --posix -f dir.tar dir
Solarisで次のようになります。
$ tar -xif dir.tar
tar: directory checksum errors
また、dir内のファイル名は切り捨てられます。 (つまり、チェックサムエラーを無視しても役に立ちません)
Solaristarで抽出できるGNU tarを使用して、長いパス名を持つtarballを作成するにはどうすればよいですか?
JoergSchillingはSolaris7/8/9 tar形式をエミュレートでき、 star を使用してSolaristarballを作成するためのsuntar
オプションを提供しているようです。
残念ながら、star
はcygwinでは利用できません。 :(
Solaris9でpaxを使用して--format = posix gnutarballsを抽出する際のエラー
Cygwinについて:
$ ls example/this_is_a_path_name_greater_than_one_hundred_characters/when_combined_with_this_file_name_which_is_also_rather_long.txt | wc -m
128
$ tar -c --format=posix -f example.tar example
Solarisの場合:
$ pax -r -f example.tar
pax: ./PaxHeaders.4440/example : Unknown filetype
pax: example/PaxHeaders.4440/this_is_a_path_name_greater_than_one_hundred_characters : Unknown filetype
pax: example/this_is_a_path_name_greater_than_one_hundred_characters/PaxHeaders.4440/when_combined_with_t : Unknown filetype
Solaris tarを使用して抽出すると、同様のエラーが発生します。
SolaristarとGNU tarはposixの解釈が異なりますが、どちらもustarをサポートしているため、 long(ish)パス名をサポートしています 。
CygwinでGNU tarを使用する:
$ tar -c --format=ustar -f dir.tar dir
これにより、Solaris9でエラーなしで問題なく抽出されるtarballが作成されます。おそらく普遍的な解決策ではなく、制約された解決策の空間に適合するものです。結局、80年代は役に立ったようです!
GNU tar形式 は、tar -c --format=posix
またはtar -c --format=pax
が、255文字を超えるパス名を含むポータブルtarファイルを作成する唯一の方法であることを示しています。
Solaris tarのマニュアルページ はその形式のサポートについては言及していませんが、 Solarisのpaxのマニュアルページ はサポートしています。
したがって、最初に、tar -c --format=posix -f dir.tar dir
を使用してCygwin(またはLinux)システムでアーカイブを作成し、pax -r -x pax -f dir.tar
、またはおそらくpax -r -f dir.tar
を使用してSolarisシステムでアーカイブを抽出しようとします。
または、両方のシステムにcpio
がインストールされている場合、crc
形式は両方のシステムで1,023文字のパスをサポートしているようです。これは、作成する場合はfind -L dir | cpio -o -H crc > dir.cpio
、抽出する場合はcpio -i -d < dir.cpio
のようになります。
最後に、-i
フラグを追加して、Solarisで抽出するときにディレクトリチェックサムエラーを無視することができます。 tar -x -i -f dir.tar
。 チェックサムの問題 これは、tarアーカイブ内のファイル名のいずれかが非ASCIIの場合に必要になる可能性があることを示しています。
その他の読み物:
GNU tarの主な問題は、アーカイブ形式を制御するコードが含まれていないことです。GNU tarは、POSIX.1-1988を理解するにはあまりにも愚かです。 100文字を超えるファイル名をアーカイブできます。
このような場合のGNUtarは、アーカイブの途中でGNU独自の拡張機能に切り替わります。これが、Solaristarが途中で中止される理由です。
star
ソースパッケージのschilytools
を使用することをお勧めします。