O gerenciamento do host FreeBSD com Ansible falha: objeto compartilhado \"libdl.so.1\" não encontrado, exigido por \"python\"\r\n

O gerenciamento do host FreeBSD com Ansible falha: objeto compartilhado \"libdl.so.1\" não encontrado, exigido por \"python\"\r\n

Gerenciamento do FreeBSD no Raspberry pi 3 (FreeBSD-aarch64-12.0-GENERIC-320146M do projeto RaspBSD -http://www.raspbsd.org/) falha.

O host de controle é MacOS 10.13.2.

python foi instalado com sucesso no host gerenciado (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

No entanto, quando tento executar um playbook, o ansible retorna o seguinte erro:

$ 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

A única dependência do ansible é o python que está satisfeito.

O que há de errado e como posso consertar?

Obrigado.

Responder1

Problema semelhante com dependência ausente no bash e wget foi corrigido com a criação de um link

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

Responder2

Eu tive um problema semelhante ao fazer a transição do FreeBSD 11.1 para 11.2, mas foi gnutlsisso que relatou o problema com o arquivo libdl.so.1.

Minha solução surgiu de uma dica que encontrei em:

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

Primeiro faça um backup de /etc/pkg/FreeBSD.conf:

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

Em seguida, edite /etc/pkg/FreeBSD.confe altere a url:linha para:

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

Salve o arquivo e saia do vi.

# pkg update
# pkg install -f python27

Agora tente seu manual ansible novamente.

Se isso funcionar para você, e se você atualizou outras portas recentemente, você pode querer dar-lhes uma invocação superficial para garantir que não tenham problemas semelhantes.

Não sou um especialista, mas espero que esse problema desapareça assim que você atualizar seu sistema operacional para uma versão mais recente. No meu caso, acredito que o problema surgiu porque o repositório pkg estava fornecendo pacotes vinculados ao 11.2, que possui libdl.so.1, e eu os estava instalando em uma jail que ainda estava na versão 11.1, que não possui.

Depois de atualizar para uma versão atualizada, você deve reverter /etc/pkg/FreeBSD.confpara a cópia de backup que fez e retomar o rastreamento do repositório do pacote mais recente.

informação relacionada