Por que diferença no tar czf no Debian 8.5 e 8.7?

1

O código funcionou no Debian 8.5, mas não no Debian 8.7

 root@masi:/home/masi# nice tar --keep-directory-symlink czf /media/masi/masiDisc/backup_home_27.2.2017.tar.gz /home/masi/

Na Debian 8.7, eu fico com o GNU tar 1.27.1

tar: You must specify one of the '-Acdtrux', '--delete' or '--test-label' options
Try 'tar --help' or 'tar --usage' for more information.

Posso corrigir isso adicionando - the czf , mas não tenho certeza se é equivalente

 root@masi:/home/masi# nice tar --keep-directory-symlink -czf /media/masi/masiDisc/backup_home_27.2.2017.tar.gz /home/masi/

OS: Debian 8.7

    
por Léo Léopold Hertz 준영 27.02.2017 / 18:02

2 respostas

3

Eu realmente comecei a pensar e não consigo reproduzir o comportamento que você afirma ter visto: BusyBox tar , star , libarchive-bsdtar .

(post anterior) A questão é: qual tar você estava usando? O tar GNU em 8.5 / 8.7 era quase idêntico, e ambos causaram o mesmo erro que você viu. O que não causaria o uso de algum outro alcatrão através de alternativas do Debian / dpkg-divert , ou que estivesse em outro lugar no seu caminho.

Estas são as versões do GNU tar enviadas com cada lançamento, conforme indicado pelas listagens ISO no FTP da Debian:

debian-8.5.0-amd64-CD-1.list.gz:tar_1.27.1-2+b1_amd64.deb
debian-8.7.0-amd64-CD-1.list.gz:tar_1.27.1-2+deb8u1_amd64.deb

Eles são extremamente semelhantes, contendo exatamente mais um patch para o CVE-2016-6321. Você pode ver como o Debian tratou aqui: link O patch lida com o tratamento de /../ entradas do caminho no tarball e não afeta o tratamento de argumentos.

Se obtivermos os dois debs (no meu caso eu os tirei do netinst iso), e extrair os binários do tar, podemos testar o comportamento:

$ for i in tar_1.27.1-2+b1_amd64 tar_1.27.1-2+deb8u1_amd64 ; do \
  ls -la ${i}.deb && \
  deb2targz ${i}.deb && \
  mkdir -p $i && \
  tar -xf ${i}.tar.xz -C $i && \
  find $i -name tar -type f -perm /111 -ls \
  ; done ;
# First Debian package
-r--r--r-- 1 root root 675968 Mar 24 21:31 tar_1.27.1-2+b1_amd64.deb
# Convert it to a tarball for extracting
deb2targz: converting 'tar_1.27.1-2+b1_amd64.deb' ...
deb2targz: skipping section 'debian-binary'
deb2targz: skipping section 'control.tar.gz'
deb2targz: wrote 'tar_1.27.1-2+b1_amd64.tar.xz'
# Tar binary in the first debian package:
108669076    352 -rwxr-xr-x   1  root     root       358072 Nov  8  2014 tar_1.27.1-2+b1_amd64/bin/tar

# Second debian package
-r--r--r-- 1 root root 676278 Mar 24 21:32 tar_1.27.1-2+deb8u1_amd64.deb

# Convert it to a tarball for extracting
deb2targz: converting 'tar_1.27.1-2+deb8u1_amd64.deb' ...
deb2targz: skipping section 'debian-binary'
deb2targz: skipping section 'control.tar.gz'
deb2targz: wrote 'tar_1.27.1-2+deb8u1_amd64.tar.xz'
# Tar binary in the first debian package:
543129777    352 -rwxr-xr-x   1  root     root       358072 Oct 31 14:37 tar_1.27.1-2+deb8u1_amd64/bin/tar

Agora, temos as duas versões extraídas e podemos compará-las com uma variante do seu comando de teste:

# Variables to make it clear which one we are using:
$ tar1=./tar_1.27.1-2+b1_amd64/bin/tar
$ tar2=./tar_1.27.1-2+deb8u1_amd64/bin/tar

# First
$ $tar1 --keep-directory-symlink czf /tmp/foo.tar.gz /tmp/foo
./tar_1.27.1-2+b1_amd64/bin/tar: You must specify one of the '-Acdtrux', '--delete' or '--test-label' options
Try './tar_1.27.1-2+b1_amd64/bin/tar --help' or
'./tar_1.27.1-2+b1_amd64/bin/tar --usage' for more information.

# Second
$ $tar2 --keep-directory-symlink czf /tmp/foo.tar.gz /tmp/foo
./tar_1.27.1-2+deb8u1_amd64/bin/tar: You must specify one of the '-Acdtrux', '--delete' or '--test-label' options
Try './tar_1.27.1-2+deb8u1_amd64/bin/tar --help' or
'./tar_1.27.1-2+deb8u1_amd64/bin/tar --usage' for more information.

Quanto à discussão de outras implementações de alcatrão, veja minha resposta a uma questão de diferença entre implementações de tar: link

    
por 25.03.2017 / 06:13
2

I can fix it by appending by - the czf but not sure if equivalent

É. A manpage leva muito tempo para passar por isso.

Basicamente, você está esperando um comportamento muito estranho no tar, porque o conjunto de opções longas inclui aliases para as opções do modo de operação curta.

tar --keep-directory-symlink czf b e

tar --create b e

tar --create zf b e

por exemplo. o que você quer que o último comando acima faça? Você quer tratar zf como um arquivo no último caso, enquanto não está tratando czf como um arquivo no primeiro caso?

    
por 25.03.2017 / 10:55

Tags