Como criar um tarball do gnu que possa ser extraído pelo solaris tar

5

Estou mantendo um sistema legado cygwin (com o GNU tar v1.21) e um sistema Solaris 9 legado. A configuração do sistema Solaris 9 é fixa e não pode ser atualizada (por exemplo, não é possível instalar o gnu tar para Solaris).

Estou tentando criar um tarball no sistema cygwin que pode ser extraído no sistema Solaris 9, mas infelizmente a estrutura de diretório (que também é fixa e não pode ser renomeada), além de nomes de arquivos excederem 100 caracteres e eu corri para o Grandes guerras de alcatrão do último milênio. Há uma grande base de usuários (conservadora) no sistema Solaris, portanto, uma solução que usa o Solaris tar é a preferida.

Aqui estão os erros que estou tendo.

Criando o tar no cygwin:

$ tar -cf dir.tar dir

ou

$ tar -c --posix -f dir.tar dir

Dá o seguinte no Solaris:

$ tar -xif dir.tar
tar: directory checksum errors

E os nomes dos arquivos no diretório são truncados. (ou seja, ignorar os erros de checksum não ajuda)

Como eu crio um tarball com caminhos longos usando o GNU tar que pode ser extraído pelo Solaris tar?

Editar # 2: Não é possível usar o Schily Tar (estrela)

Parece que Joerg Schilling conseguiu emular o formato tar do Solaris 7/8/9 e fornece uma opção suntar para criar um tarball do Solaris usando star .

Infelizmente star não está disponível no cygwin. : (

Editar # 1: Usando --format = posix dá erros ao extrair

Erros ao extrair --format = posix gnu tarballs usando pax no Solaris 9

No 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

No 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

Erros semelhantes são fornecidos ao extrair usando o Solaris Tar.

    
por Nomic 07.01.2014 / 04:43

3 respostas

3

Solaris tar e GNU tar têm diferentes interpretações de posix, mas ambos suportam ustar, que por sua vez suporta nomes de caminho longos (ish) .

Usando o GNU tar no cygwin:

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

Isso cria um tarball que é felizmente extraído no Solaris 9 sem erros. Talvez não seja uma solução universal, mas uma solução adequada ao espaço da solução restrita. Parece que os anos 80 foram úteis afinal!

    
por 07.01.2014 / 23:41
4

Formatos de URL do GNU sugere que tar -c --format=posix ou tar -c --format=pax é o única maneira de criar um arquivo tar portátil contendo nomes de caminho com mais de 255 caracteres.

A página de manual do Solaris tar não menciona o suporte a formato, mas a página de manual do Solaris pax faz.

Primeiramente, eu tentaria criar o arquivo no seu sistema Cygwin (ou Linux) usando tar -c --format=posix -f dir.tar dir e extraí-lo no sistema Solaris usando pax -r -x pax -f dir.tar , ou provavelmente apenas pax -r -f dir.tar .

Como alternativa, se você tiver cpio instalado nos dois sistemas, parece que o formato crc suporta 1.023 caminhos de caractere em ambos os sistemas. Isso seria parecido com find -L dir | cpio -o -H crc > dir.cpio para criar e cpio -i -d < dir.cpio para extraí-lo.

Por fim, você pode tentar adicionar o sinalizador -i para ignorar erros de soma de verificação de diretório ao extrair no Solaris, por exemplo, %código%. Problemas de soma de verificação dizem que isso pode ser necessário se qualquer um dos nomes de arquivo no tar archive são não-ASCII.

Outra leitura:

por 07.01.2014 / 07:27
0

O principal problema no GNU tar é que ele não contém código para controlar o formato do arquivo. O GNU tar é muito burro para entender que POSIX.1-1988 pode arquivar nomes de arquivos com mais de 100 caracteres.

O GNU tar, neste caso, muda para a extensão proprietária GNU no meio do arquivo e é por isso que o Solaris tar aborta no meio.

Eu recomendo usar star do pacote schilytools source.

    
por 27.06.2018 / 22:25

Tags