helen's blog

ずっとおもしろいことしてたいな。

DeployerでmacからはデプロイできるのにLinuxで実行したら死んだ

業務で使っているDeployerで普段ローカルからデプロイしていたものを
AWSのEC2に乗っけて動かそうとしたら思わぬエラーが出たのでメモ

デプロイ手順(こんな手順を踏まないといけない経緯は悲しいので書かない)

  1. デプロイサーバー(EC2)で不要なファイル以外を圧縮 ←ここで死んだ
  2. デプロイ先(EC2)へ転送
  3. デプロイ先(EC2)で解凍
  4. 以降はDeployerの動作に任せる
エラー内容
[RuntimeException]
  tar: ./proj.tar.gz: 読み込んだファイルが変更されています
 
Exception trace:
 () at phar:///home/deploy-user/deploy/deployer.phar/src/functions.php:335
 runLocally() at /home/deploy-user/deploy/include/tasks.php:27
 {closure}() at n/a:n/a
 call_user_func() at phar:///home/deploy-user/deploy/deployer.phar/src/Task/Task.php:79
 Deployer\Task\Task->run() at phar:///home/deploy-user/deploy/deployer.phar/src/Executor/SeriesExecutor.php:43
 Deployer\Executor\SeriesExecutor->run() at phar:///home/deploy-user/deploy/deployer.phar/src/Console/TaskCommand.php:82
 Deployer\Console\TaskCommand->execute() at phar:///home/deploy-user/deploy/deployer.phar/vendor/symfony/console/Command/Command.php:256
 Symfony\Component\Console\Command\Command->run() at phar:///home/deploy-user/deploy/deployer.phar/vendor/symfony/console/Application.php:791
 Symfony\Component\Console\Application->doRunCommand() at phar:///home/deploy-user/deploy/deployer.phar/vendor/symfony/console/Application.php:186
 Symfony\Component\Console\Application->doRun() at phar:///home/deploy-user/deploy/deployer.phar/vendor/symfony/console/Application.php:117
 Symfony\Component\Console\Application->run() at phar:///home/deploy-user/deploy/deployer.phar/src/Deployer.php:101
 Deployer\Deployer->run() at phar:///home/deploy-user/deploy/deployer.phar/bin/dep:63
 require() at /home/deploy-user/deploy/deployer.phar:4
 
deploy [-p|--parallel]
原因

圧縮しようとしている中にtarファイルを作っている
prj/配下を圧縮している最中にprj/[圧縮ファイル].tar.gzを置けるか置けないかの違いでした

なぜ今まで(mac)は行けたの?

macはtarの提供元が違った

# mac
bsdtar 2.8.3 - libarchive 2.8.3

FreeBSDっていうところが提供しているbsdtarっていうのが入ってる
https://www.freebsd.org/cgi/man.cgi?query=bsdtar&sektion=1

# Amazon Linux
$ tar --version
tar (GNU tar) 1.26
Copyright (C) 2011 Free Software Foundation, Inc.
使用許諾 GPLv3+: GNU GPL version 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

[参考訳]
これはフリーソフトウェアです. 変更と再配布は自由です.
法律で認められる範囲で「無保証」です.

作者: John Gilmore, Jay Fenlason.
対処

prj/配下に圧縮ファイルを置かない

入ってるものが違うからそりゃエラー変わるよね!