Управление хостом FreeBSD с помощью Ansible завершается ошибкой: общий объект \"libdl.so.1\" не найден, требуется для \"python\"\r\n

Управление хостом FreeBSD с помощью Ansible завершается ошибкой: общий объект \"libdl.so.1\" не найден, требуется для \"python\"\r\n

Управление FreeBSD на Raspberry Pi 3 (FreeBSD-aarch64-12.0-GENERIC-320146M из проекта RaspBSD -http://www.raspbsd.org/) не удается.

Управляющий хост — MacOS 10.13.2.

Python успешно установлен на управляемом хосте (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

Однако при попытке запустить плейбук ansible возвращает следующую ошибку:

$ 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

Единственная зависимость для ansible — это python, который удовлетворяется.

Что не так и как это исправить?

Спасибо.

решение1

Аналогичная проблема с отсутствующей зависимостью в bash и wget была исправлена ​​путем создания ссылки

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

решение2

У меня была похожая проблема при переходе с FreeBSD 11.1 на 11.2, но именно там gnutlsсообщалось о проблеме с отсутствием libdl.so.1.

Мое решение возникло из совета, который я нашел здесь:

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

Сначала сделайте резервную копию /etc/pkg/FreeBSD.conf:

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

Затем отредактируйте /etc/pkg/FreeBSD.confи измените url:строку следующим образом:

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

Сохраните файл и выйдите из vi.

# pkg update
# pkg install -f python27

Теперь попробуйте еще раз ваш сценарий Ansible.

Если это сработает у вас и если вы недавно обновили другие порты, вы можете выполнить их поверхностный запуск, чтобы убедиться, что у них нет подобных проблем.

Я не эксперт, но я ожидаю, что эта проблема исчезнет, ​​как только вы обновите свою ОС до более новой версии. В моем случае, я полагаю, проблема возникла из-за того, что репозиторий pkg поставлял пакеты, связанные для 11.2, в котором есть libdl.so.1, и я устанавливал их в jail, который все еще был версии 11.1, в которой его нет.

После обновления до последней версии вам следует вернуться /etc/pkg/FreeBSD.confк сделанной вами резервной копии и возобновить отслеживание последнего репозитория pkg.

Связанный контент