質問: ### Composer のインストールにスワップファイルを利用したい AWS EC2 において、Auto Scaling で自動作成された CentOS のインスタンスを**シェルスクリプト**で初期化しようとしています。 その場合、普通に Composer をインストールしようとすると**メモリ不足**でエラーが発生してしまいます。 **スワップファイル**を作成して対応できると聞き、以下のように書きました ``` # この行までに行っていること: Apache, PHP, Git, MariaDB のインストール、git clone # Generate a swap file for composer sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 sudo /sbin/mkswap /var/swap.1 sudo /sbin/swapon /var/swap.1 # Install composer cd /var/www/html php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');" php composer.phar install ``` しかし、作成されたインスタンスを確認すると、Composer のインストールができていないことが分かりました。 スワップファイルが作成されるところまではできているので、Composer をインストールする段階でコケているのは分かっています。 ### シェルスクリプトで実行した時だけ失敗する どうコケているのか確かめるために、素の CentOS インスタンスを立ち上げ、シェルスクリプトの中身を順にコピペして実行したのですが、**この方法だと Composer は正常にインストールできてしまいました**。 シェルスクリプトで初期化した時だけ失敗するのは、どのような原因が考えられますか?
回答: ### 起動ログを参照 `sudo grep cloud-init /var/log/messages` 起動ログを漁ったところ、このようなエラーが記述されていました。 (ちなみに、 CentOS では本来 EC2 が生成するログファイル`/var/log/cloud-init-output.log`が作られないようです) `The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly` そこで、インストールの実行前に以下の行を追加しました。 ``` export HOME="/root" ``` 結果、正常に Composer をインストールすることができました!ありがとうございました。 ###### 参考 * Linux インスタンスでの起動時のコマンドの実行 * /var/log/cloud-init-output.log is not present on RHEL 7.5 * centos 7 起動スクリプト仕込んだら composer でエラー