
Eu uso um script expect para automatizar a transferência de alguns arquivos de suporte para terminais. Os arquivos de suporte são automaticamente tarballados antes de serem transferidos para o terminal de destino. Isso é feito por um programa interno expect que preenche automaticamente a senha do scp para que não precisemos inserir a senha. Posso copiar os arquivos individuais sem problemas, mas quando tento copiar o tar.gz arquivo, ele altera as permissões do diretório /tmp. Eu tenho feito chmodding no diretório /tmp de volta a 1777 para obter as permissões e alterado para root.root, que é como normalmente é configurado, mas isso nem sempre funciona. Isso está causando erros de sqlite porque o sqlite não consegue gravar um arquivo temporário em/tmp, o que é muito perturbador. Como posso determinar a causa exata disso? Eu sei que deve estar relacionado ao arquivo tar.gz, mas tive a impressão de que o tar preservaria as permissões do arquivo.
as permissões no arquivo dentro do meu diretório são:
-rw-rw-r-- 1 aembree aembree 88K Oct 2 15:20 dropin.tar.gz
Antes da transferência, /tmp fica assim em um ls -al:
drwxrwxrwt 15 root root 8.4K Oct 2 15:08 tmp
Após a transferência, /tmp fica assim:
drwxrwxr-x 15 10539 10539 8.4K Oct 2 15:01 tmp
O comando tar que está sendo executado é o seguinte:
tar -vPczf /home/aembree/bin/resources/dev/dropin.tar.gz --exclude='helperscript' -C $dropinlist . > /home/aembree/bin/resources/logs/tarlog
Assim que o arquivo estiver na máquina remota, expect executa o seguinte comando para descompactá-lo:
send "cd /tmp ; tar -xzf dropin.tar.gz ; rm dropin.tar.gz ; cd ;\n"
Responder1
Você incluiu .
em sua coleção de fontes fornecida a tar
. O problema ocorre quando você extrai o tarball e as permissões são aplicadas. Seu diretório de origem .
é extraído e as permissões aplicadas. Infelizmente, no ponto de extração .
é, na verdade /tmp
.
A solução é excluir .
do tarball ou criar um diretório temporário /tmp
para extrair tudo.