少しコンテキストを説明するために、AWSでAMIイメージを作成するために、アンシブルプロビジョナーを備えたpackerを使用しています。
パッカーとansibleの関連部分:
packer.json
"provisioners": [{
"type": "Shell",
"inline": [
"sleep 15",
"Sudo apt-get update",
"Sudo apt-get install -y aptitude python"
]
}, {
"type": "ansible",
"playbook_file": "../provision/ansible-playbook.yml",
"groups": ["webworker"],
"extra_arguments": [
"--become-method=Sudo"
]
}]
tasks.yml
- name: Install tools
become: true
apt:
name: "{{ item }}"
state: latest
with_items:
- build-essential
- git
私のローカルマシンでは、すべてがうまくいきます。
しかし、CIの一部として、これはJenkinsサーバーを使用してこのパッカースクリプトを実行しますが、become
が配置されている最初のansibleタスクでは失敗します。この場合、最初のステップはapt
モジュールを介していくつかのツールをインストールすることです。
Amazon-ebs: "W: chmod 0700 of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: Operation not permitted)",
Amazon-ebs: "E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)",
Amazon-ebs: "E: Unable to lock directory /var/lib/apt/lists/",
Amazon-ebs: "W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)",
Amazon-ebs: "W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)",
Amazon-ebs: "E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)",
Amazon-ebs: "E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?"
権限とユーザーを確認しました。バックグラウンドでロックされている別のapt
が実行されていても、何もありません。
さらに興味深いのは、ansibleをcommand
でSudo aptitude ...
に置き換えると機能することです。また、ansibleタスクの前に、エラーなしでapt-get
を実行するシェルプロビジョナーがあります。
繰り返しますが、これはサーバーからではなく、私のマシン(および他の2台のコンピューター)から機能します。私はどのマシンにもansible.cfgを持っていません(デフォルトのものでさえありません)。
パッカーを使用してUbuntu16.04用のAWSAMIを作成すると、この問題が発生しました。 Ubuntuを使用していますか?
Ubuntu 16.04は、デフォルトでuattended-upgradesを自動的に実行します(箱から出して)。何が起こるかというと、ボックスが最初に起動されたときに、無人アップグレードがaptをロックし(/ var/lib/dpkg/lockを参照)、aptを介して何かをインストールするとプロビジョニングスクリプトがエラーになります。
詳細については、こちらをご覧ください https://github.com/ansible/ansible/issues/4355#issuecomment-286184925
こちらも: https://github.com/geerlingguy/packer-ubuntu-1604/issues/