Die Verwaltung des FreeBSD-Hosts mit Ansible schlägt fehl: Gemeinsam genutztes Objekt \"libdl.so.1\" nicht gefunden, wird aber von \"python\" benötigt\r\n

Die Verwaltung des FreeBSD-Hosts mit Ansible schlägt fehl: Gemeinsam genutztes Objekt \"libdl.so.1\" nicht gefunden, wird aber von \"python\" benötigt\r\n

Verwaltung von FreeBSD auf Raspberry pi 3 (FreeBSD-aarch64-12.0-GENERIC-320146M aus dem RaspBSD-Projekt -http://www.raspbsd.org/) schlägt fehl.

Der Steuerhost ist MacOS 10.13.2.

Python wurde erfolgreich auf dem verwalteten Host installiert (rpi3_freebsd):

$ ansible -m raw -a "sudo pkg install -y python27" --user drew --ask-pass rpi3_freebsd
SSH password:
rpi | SUCCESS | rc=0 >>
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Checking integrity... done (0 conflicting)
The most recent version of packages are already installed

Wenn ich jedoch versuche, ein Playbook auszuführen, gibt Ansible den folgenden Fehler zurück:

$ ansible-playbook --user drew --ask-pass bootstrap.yml -vvvv
ansible-playbook 2.4.3.0
  config file = /Users/drew/SynologyDrive/rpi-scripts/ansible/ansible.cfg
  configured module search path = [u'/Users/drew/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/Cellar/ansible/2.4.3.0/libexec/lib/python2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible-playbook
  python version = 2.7.10 (default, Jul 15 2017, 17:16:57) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]
Using /Users/drew/SynologyDrive/rpi-scripts/ansible/ansible.cfg as config file
SSH password:
setting up inventory plugins
Parsed /Users/drew/SynologyDrive/rpi-scripts/ansible/hosts inventory source with ini plugin
Loading callback plugin skippy of type stdout, v2.0 from /usr/local/Cellar/ansible/2.4.3.0/libexec/lib/python2.7/site-packages/ansible/plugins/callback/skippy.pyc

PLAYBOOK: bootstrap.yml ******************************************************************************************************************
 1 plays in bootstrap.yml

PLAY [raspberrypi_3] *********************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************
Using module file /usr/local/Cellar/ansible/2.4.3.0/libexec/lib/python2.7/site-packages/ansible/modules/system/setup.py
<172.16.42.6> ESTABLISH CONNECTION FOR USER: drew on PORT 22 TO 172.16.42.6
<172.16.42.6> EXEC /bin/sh -c 'echo ~ && sleep 0'
<172.16.42.6> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/drew/.ansible/tmp/ansible-tmp-1522353818.07-1230475463058 `" && echo ansible-tmp-1522353818.07-1230475463058="` echo /home/drew/.ansible/tmp/ansible-tmp-1522353818.07-1230475463058 `" ) && sleep 0'
<172.16.42.6> PUT /var/folders/2c/m_z3y5gs3fz1m2b2lwzk7yl80000gn/T/tmpgWCvx_ TO /home/drew/.ansible/tmp/ansible-tmp-1522353818.07-1230475463058/setup.py
<172.16.42.6> EXEC /bin/sh -c 'chmod u+x /home/drew/.ansible/tmp/ansible-tmp-1522353818.07-1230475463058/ /home/drew/.ansible/tmp/ansible-tmp-1522353818.07-1230475463058/setup.py && sleep 0'
<172.16.42.6> EXEC /bin/sh -c '/usr/local/bin/python /home/drew/.ansible/tmp/ansible-tmp-1522353818.07-1230475463058/setup.py; rm -rf "/home/drew/.ansible/tmp/ansible-tmp-1522353818.07-1230475463058/" > /dev/null 2>&1 && sleep 0'
fatal: [rpi]: FAILED! => {
    "changed": false,
    "module_stderr": "",
    "module_stdout": "Shared object \"libdl.so.1\" not found, required by \"python\"\r\n",
"msg": "MODULE FAILURE",
"rc": 0
}
to retry, use: --limit @/Users/drew/SynologyDrive/rpi-scripts/ansible/bootstrap.retry

PLAY RECAP *******************************************************************************************************************************
rpi                        : ok=0    changed=0    unreachable=0    failed=1

Die einzige Abhängigkeit für Ansible ist Python, die erfüllt ist.

Was ist falsch und wie kann ich es beheben?

Danke schön.

Antwort1

Ähnliches Problem mit fehlender Abhängigkeit in Bash und Wget wurde durch Erstellen eines Links behoben

ln -sf /lib/libc.so.7 /usr/lib/libdl.so.1

Antwort2

Bei mir ist beim Übergang von FreeBSD 11.1 auf 11.2 ein ähnliches Problem aufgetreten, aber gnutlsdas Problem mit dem fehlenden wurde gemeldet libdl.so.1.

Meine Lösung ergab sich aus einem Tipp, den ich hier gefunden habe:

https://forums.freenas.org/index.php?threads/openvpn-fails-in-jail-with-libdl-so-1-not-found-error.70391/#post-486449

Erstellen Sie zunächst eine Sicherungskopie von /etc/pkg/FreeBSD.conf:

# cp -vp /etc/pkg/FreeBSD.conf /etc/pkg/FreeBSD.conf.safety

Bearbeiten /etc/pkg/FreeBSD.confund ändern Sie dann die url:Zeile wie folgt:

url: "pkg+http://pkg.FreeBSD.org/${ABI}/release_2",

Speichern Sie die Datei und beenden Sie vi.

# pkg update
# pkg install -f python27

Versuchen Sie jetzt Ihr Ansible-Playbook erneut.

Wenn das für Sie funktioniert und Sie vor Kurzem andere Ports aktualisiert haben, möchten Sie diese möglicherweise kurz aufrufen, um sicherzustellen, dass bei ihnen keine ähnlichen Probleme auftreten.

Ich bin kein Experte, aber ich gehe davon aus, dass dieses Problem verschwindet, sobald Sie Ihr Betriebssystem auf eine neuere Version aktualisieren. In meinem Fall ist das Problem meiner Meinung nach entstanden, weil das pkg-Repo Pakete bereitstellte, die für 11.2 verknüpft waren, das eine libdl.so.1 hat, und ich sie in ein Jail installierte, das noch auf Version 11.1 war, was keine Version hat.

Nachdem Sie ein Upgrade auf eine aktuelle Version durchgeführt haben, sollten Sie /etc/pkg/FreeBSD.confzu der erstellten Sicherungskopie zurückkehren und die Nachverfolgung des neuesten PKG-Repos wieder aufnehmen.

verwandte Informationen