web-dev-qa-db-ja.com

ローカルワークからはアンシブルであるが、別のサーバーからはルート権限を要求するパッカー

少しコンテキストを説明するために、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をcommandSudo aptitude ...に置き換えると機能することです。また、ansibleタスクの前に、エラーなしでapt-getを実行するシェルプロビジョナーがあります。

繰り返しますが、これはサーバーからではなく、私のマシン(および他の2台のコンピューター)から機能します。私はどのマシンにもansible.cfgを持っていません(デフォルトのものでさえありません)。

1
fmartingr

パッカーを使用して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/

2
codekipple