
Ich erhalte die Meldung „Apt konnte nicht für exklusiven Vorgang gesperrt werden“, wenn ich versuche, mit APT und dem Vagrant-Benutzer einige Abhängigkeiten in einem Playbook zu installieren. Ich vermute, dass mir dies angezeigt wird, weil der Vagrant-Benutzer während der Ausführung der Aufgabe nicht authentifiziert werden kann.
Dies ist die Rollendeklaration, die ich verwende.
- name: ruby installer
hosts: all
sudo: True
sudo_user: vagrant
roles:
- ruby
Und dies ist die Aufgabe, die fehlschlägt:
- name: Install ruby building dependencies
apt: name={{ item }}
state=installed
update_cache=yes
with_items:
- dependency
Beim Entfernen von „update_cache=yes“ und erneuten Ausführen des Playbooks erhalte ich die Meldung: E: Das Administrationsverzeichnis (/var/lib/dpkg/) kann nicht gesperrt werden. Sind Sie Root?
Natürlich funktioniert es einwandfrei, wenn man es als Root ausführt, aber ich muss es aufgrund einiger Ruby-Aufgaben (spezifisch für RVM und RBENV) unter einem anderen Benutzer als Root ausführen.
Wie authentifiziere ich den Vagrant-Benutzer ordnungsgemäß, wenn ich mein Playbook ausführe? Kann mir jemand den richtigen Weg weisen?
Antwort1
Am Ende kam ich zu dieser Rollendeklaration:
- name: ruby installer
hosts: all
sudo: True
user: vagrant
roles:
- ruby
Und diese Aufgabe zum Installieren der Abhängigkeiten:
- name: Install ruby building dependencies
apt: name={{ item }}
state=installed
update_cache=yes
sudo_user: root
with_items:
-dependency
Es verwendet jetzt Root für die Apt-Aufgabe und Vagrant für die anderen Ruby-Aufgaben im Playbook.
Antwort2
apt
installiert Pakete auf Systemebene und daher erfordert die Verwendung von apt Root-äquivalente Berechtigungen.
Wenn Sie weitere Schritte zur Anwendungsbereitstellung als anderer Benutzer ausführen müssen, müssen Sie diese Schritte aus Ihrem Deb-Paketinstallationsprozess herausziehen.