2016-11-29 5 views
3

私は、起動時にubuntu 16.04イメージで起動する起動スクリプト(ユーザーデータ)を持っています。問題は、この基本的なエラーメッセージCould not get lock /var/lib/dpkg/lockをプレイブックが失敗する可能性のあるプレイブックを実行します。今すぐログインして、手作りのスクリプトを手動で実行しようとすると動作しますが、awsのユーザーデータから実行するとエラーが発生します。aws起動時の潜在的なスクリプトdpkgロックubuntu 16.04

これは私が同じロックの問題に遭遇した

TASK [rabbitmq : install packages (Ubuntu default repo is used)] *************** 
task path: /etc/ansible/roles/rabbitmq/tasks/main.yml:50 
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root 
<localhost> EXEC /bin/sh -c '(umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1480352390.01-116502531862586 `" && echo ansible-tmp-1480352390.01-116502531862586="` echo $HOME/.ansible/tmp/ansible-tmp-1480352390.01-116502531862586 `") && sleep 0' 
<localhost> PUT /tmp/tmpGHaVRP TO /.ansible/tmp/ansible-tmp-1480352390.01-116502531862586/apt 
<localhost> EXEC /bin/sh -c 'chmod u+x /.ansible/tmp/ansible-tmp-1480352390.01-116502531862586/ /.ansible/tmp/ansible-tmp-1480352390.01-116502531862586/apt && sleep 0' 
<localhost> EXEC /bin/sh -c 'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /.ansible/tmp/ansible-tmp-1480352390.01-116502531862586/apt; rm -rf "/.ansible/tmp/ansible-tmp-1480352390.01-116502531862586/" > /dev/null 2>&1 && sleep 0' 
fatal: [localhost]: FAILED! => {"cache_update_time": 0, "cache_updated": 
false, "changed": false, "failed": true, "invocation": {"module_args": 
{"allow_unauthenticated": false, "autoremove": false, "cache_valid_time": 
null, "deb": null, "default_release": null, "dpkg_options": "force- 
confdef,force-confold", "force": false, "install_recommends": null, "name": 
"rabbitmq-server", "only_upgrade": false, "package": ["rabbitmq-server"], 
"purge": false, "state": "present", "update_cache": false, "upgrade": null}, 
"module_name": "apt"}, "msg": "'/usr/bin/apt-get -y -o \"Dpkg::Options::=-- 
force-confdef\" -o \"Dpkg::Options::=--force-confold\"  install 
'rabbitmq-server'' failed: E: Could not get lock /var/lib/dpkg/lock - open 
(11: Resource temporarily unavailable)\nE: Unable to lock the administration 
directory (/var/lib/dpkg/), is another process using it?\n", "stderr": "E:  Could 
not get lock /var/lib/dpkg/lock - open (11: Resource temporarily 
unavailable)\nE: Unable to lock the administration directory (/var/lib/dpkg/), 
is another process using it?\n", "stdout": "", "stdout_lines": []} 
+0

この問題は、おそらく「インストールパッケージ(Ubuntu default repo is used)」の権限に関するものです。あなたは、この作業( '/ etc/ansible/roles/rabbitmq/tasks/main.yml')を使ってAnoysのプレイブックを投稿できますか?完全なUserDataスクリプトも含めてください。 –

+0

ファイルをロックする無人アップグレードがこの動作も引き起こしている可能性があります。この議論は参考になるかもしれません:https://github.com/chef/bento/issues/609 –

+0

@MichalGasek私は2番目に投稿しますが、今すぐ何か試してみました。ユーザーデータの冒頭で私は 'sleep 5m'を入れました。それがうまくいきましたので、ユーザーデータや危険なプレイブックの問題であるかどうかは分かりません –

答えて

4

完全なエラーです。私は、ubuntuが最初の起動時にクラウド-initが待たなかったいくつかのパッケージをインストールしていたことがわかりました。

次のスクリプトを使用して、何かをインストールする前にロックファイルが少なくとも15秒間使用可能であることを確認します。

#!/bin/bash 

i="0" 
while [ $i -lt 15 ] 
do 
if [ $(fuser /var/lib/dpkg/lock) ]; then 
    i="0" 
fi 
sleep 1 
i=$[$i+1] 
done 

それはでもプロビジョニングされる前オートスケールグループ内のインスタンスを除去することができるので、私は対これを好む理由。

関連する問題