![Ansible で FreeBSD ホストを管理すると失敗します: 共有オブジェクト \"libdl.so.1\" が見つかりません。\"python\" で必要です\r\n](https://rvso.com/image/1557212/Ansible%20%E3%81%A7%20FreeBSD%20%E3%83%9B%E3%82%B9%E3%83%88%E3%82%92%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B%E3%81%A8%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%99%3A%20%E5%85%B1%E6%9C%89%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%20%5C%22libdl.so.1%5C%22%20%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%5C%22python%5C%22%20%E3%81%A7%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%5Cr%5Cn.png)
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
。
私の解決策は、次のサイトで見つけたヒントから生まれました。
まず、次のバックアップを作成します/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 リポジトリの追跡を再開する必要があります。