Ansible で FreeBSD ホストを管理すると失敗します: 共有オブジェクト \"libdl.so.1\" が見つかりません。\"python\" で必要です\r\n

Ansible で FreeBSD ホストを管理すると失敗します: 共有オブジェクト \"libdl.so.1\" が見つかりません。\"python\" で必要です\r\n

Raspberry pi 3 での FreeBSD の管理 (RaspBSD プロジェクトの FreeBSD-aarch64-12.0-GENERIC-320146M -http://www.raspbsd.org/) は失敗します。

制御ホストはMacOS 10.13.2です。

pythonが管理対象ホストに正常にインストールされました(rpi3_フリーBSD):

$ 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 プレイブックをもう一度試してください。

それがうまくいき、最近他のポートをアップグレードした場合は、それらのポートを簡単に呼び出して、同様の問題が発生していないことを確認することをお勧めします。

私は専門家ではありませんが、OS を最新バージョンにアップグレードすればこの問題は解消されると思います。私の場合、pkg リポジトリが libdl.so.1 を含む 11.2 にリンクされたパッケージを提供していたのに、それを libdl.so.1 を含まないバージョン 11.1 のままの jail にインストールしていたために問題が発生したと考えています。

最新リリースにアップグレードしたら、/etc/pkg/FreeBSD.conf作成したバックアップ コピーに戻し、最新の pkg リポジトリの追跡を再開する必要があります。

関連情報