web-dev-qa-db-ja.com

ソラリスターで抽出できるヌーターボールの作り方

レガシー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を作成するにはどうすればよいですか?

編集#2:Schily Tar(スター)を使用できません

JoergSchillingはSolaris7/8/9 tar形式をエミュレートでき、 star を使用してSolaristarballを作成するためのsuntarオプションを提供しているようです。

残念ながら、starはcygwinでは利用できません。 :(

編集#1:-format = posixを使用すると、抽出時にエラーが発生します

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を使用して抽出すると、同様のエラーが発生します。

5
Nomic

SolaristarとGNU tarはposixの解釈が異なりますが、どちらもustarをサポートしているため、 long(ish)パス名をサポートしています

CygwinでGNU tarを使用する:

$ tar -c --format=ustar -f dir.tar dir

これにより、Solaris9でエラーなしで問題なく抽出されるtarballが作成されます。おそらく普遍的な解決策ではなく、制約された解決策の空間に適合するものです。結局、80年代は役に立ったようです!

3
Nomic

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の場合に必要になる可能性があることを示しています。

その他の読み物:

4
Mikel

GNU tarの主な問題は、アーカイブ形式を制御するコードが含まれていないことです。GNU tarは、POSIX.1-1988を理解するにはあまりにも愚かです。 100文字を超えるファイル名をアーカイブできます。

このような場合のGNUtarは、アーカイブの途中でGNU独自の拡張機能に切り替わります。これが、Solaristarが途中で中止される理由です。

starソースパッケージのschilytoolsを使用することをお勧めします。

0
schily