
vagrant ユーザーで apt を使用してプレイブックにいくつかの依存関係をインストールしようとすると、「msg: 排他操作のために apt をロックできませんでした」というメッセージが表示されます。タスクの実行中に vagrant ユーザーを認証できないために、このメッセージが表示されるのではないかと考えています。
これは私が使用しているロール宣言です。
- name: ruby installer
hosts: all
sudo: True
sudo_user: vagrant
roles:
- ruby
そして、失敗するタスクは次のようになります。
- name: Install ruby building dependencies
apt: name={{ item }}
state=installed
update_cache=yes
with_items:
- dependency
「update_cache=yes」を削除してプレイブックを再実行すると、次のメッセージが表示されます: E: 管理ディレクトリ (/var/lib/dpkg/) をロックできません。root ですか?
当然、root で実行すると完全に正常に動作しますが、一部の Ruby (rvm、rbenv 固有) タスクのため、root 以外の別のユーザーで実行する必要があります。
プレイブックを実行するときに、Vagrant ユーザーを適切に認証するにはどうすればよいですか? 誰か正しい方向を示してもらえますか?
答え1
最終的に、次のような役割宣言になりました。
- name: ruby installer
hosts: all
sudo: True
user: vagrant
roles:
- ruby
依存関係をインストールするためのこのタスク:
- name: Install ruby building dependencies
apt: name={{ item }}
state=installed
update_cache=yes
sudo_user: root
with_items:
-dependency
これで、プレイブック内の apt タスクには root が使用され、その他の ruby タスクには vagrant が使用されるようになりました。
答え2
apt
システムレベルのパッケージをインストールするため、apt を使用するには root と同等の権限が必要です。
別のユーザーとしてさらにアプリケーションの展開手順を実行する必要がある場合は、それらの手順を deb パッケージのインストール プロセスから取り出す必要があります。