【问题标题】:Chef installing uwsgi libiconv.so.2 no such file or directory厨师安装uwsgi libiconv.so.2没有这样的文件或目录
【发布时间】:2017-06-06 03:19:17
【问题描述】:

我正在尝试使用uwsgi 设置 Django 服务器。仅使用 poise-python 安装 uwsgi 时,使用以下配方:

python_runtime '3'

python_package 'uwsgi' do
    python '3'
end

当我登录机器并在没有任何选项的情况下运行uwsgi时,它会抛出错误:

uwsgi: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

我检查了库,libiconv.so.2 没有按原样安装:

sudo ldconfig -p | grep libiconv

但是,当我按如下方式重新安装它时:

sudo pip uninstall uwsgi
sudo pip install uwsgi

uwsgi 命令再次起作用。奇怪的是,当我检查libiconv.so.2是否安装时,它仍然没有安装。

我应该如何告诉厨师正确安装uwsgi而不使用execute来运行我所做的命令?

注意:我正在使用测试厨房,并且在运行任何命令之前已经重置了虚拟环境。操作系统是debian 8.6。

【问题讨论】:

  • iconv 可能被嵌入到 python virtualenv 中,因此 ldconfig 可能根本不会显示它。这是一个很长的镜头,但是本机python debian包是否可能与poise安装的运行时冲突?
  • @SzymonSzypulski 你说的 python virtualenv 是什么意思?我没有设置任何 python 虚拟环境。我也不明白本地 python Debian 和 python poise 运行时之间的冲突是什么意思。你是想说poise安装的python 3和Debian的python有冲突吗?
  • 是的,poise python可能和系统python有冲突。我提到了python的virtualenv,但是我没有注意到你没有使用它,它是由poise python支持的,它可以让你隔离你的环境。试试看可能。 uwsgi 也支持它。
  • @SzymonSzypulski 一开始我使用的是虚拟环境。我认为这是造成错误的原因,但我错了。我怀疑它和我系统的python有冲突,因为厨房环境根本没有使用python 3。
  • 你那里没有安装 python 2 吗? which pythonwhich pip 的输出是什么。

标签: python pip chef-infra uwsgi


【解决方案1】:

我知道这已经晚了 3 年。排序答案:

yum install libxml2-devel

为我纠正了这个问题(并且可能对使用老厨师的旧食谱的其他人有所帮助)

我试图用旧版的厨师食谱安装石墨,结果与原始海报相同。

ldd /usr/local/bin/uwsgi 
    linux-vdso.so.1 =>  (0x00007ffcdf53f000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f83286fa000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f83283f8000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f83281f4000)
    libz.so.1 => /lib64/libz.so.1 (0x00007f8327fde000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f8327d7c000)
    libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f8327b77000)
    libssl.so.1.0.0 => not found
    libcrypto.so.1.0.0 => not found
    libxml2.so.2 => /lib64/libxml2.so.2 (0x00007f832780d000)
    liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f83275e7000)
    libiconv.so.2 => not found
    libutil.so.1 => /lib64/libutil.so.1 (0x00007f83273e4000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f83271ad000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f8326de0000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8328916000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00007f8326bdd000)

所有未找到都在/opt/chef/embedded/lib 中,我的想法是pip 的链接器不知何故使用/opt/chef/embedded/lib/pkgconfig 而不是(或除了)默认系统路径。 p>

libiconv 似乎没有在 CentOS 7 中使用,但包含在 libxml-2.0、libxslt 和 libexslt 的 /opt/chef/embedded/lib/pkgconfig 文件中......这导致我到 libxml2-开发

【讨论】:

    【解决方案2】:

    在厨房测试时遇到了同样的错误。 libconv 位于/opt/chef/embedded/lib/,所以你需要包含ldconfig 的路径:

    root@dokken:/# journalctl -u uwsgi
    -- Logs begin at Fri 2018-01-26 08:59:50 UTC, end at Fri 2018-01-26 09:03:53 UTC
    . --
    Jan 26 09:03:53 dokken systemd[1]: Starting uWSGI...
    Jan 26 09:03:53 dokken uwsgi[2789]: /opt/venv/bin/uwsgi: error while loading s
    hared libraries: libiconv.so.2: cannot open shared object file: No such file or
    directory
    Jan 26 09:03:53 dokken systemd[1]: uwsgi.service: control process exited,
    code=exited status=127
    Jan 26 09:03:53 dokken systemd[1]: Failed to start uWSGI.
    Jan 26 09:03:53 dokken systemd[1]: Unit uwsgi.service entered failed state
    .
    root@dokken:/# find /opt/ -name 'libiconv.so.2'
    /opt/chef/embedded/lib/libiconv.so.2
    root@dokken:/# echo '/opt/chef/embedded/lib/' >> /etc/ld.so.conf
    root@dokken:/# ldconfig
    root@dokken:/# cat /etc/ld.so.conf
    include /etc/ld.so.conf.d/*.conf
    
    /opt/chef/embedded/lib/
    root@dokken:/# service uwsgi start
    root@dokken:/# ps axu  | grep uwsgi
    root      2813  0.2  0.4  50876  8616 ?        S    09:05   0:00 /opt/venv/bin/uwsgi --ini /etc/uwsgi/uwsgi.ini
    root      2814  0.0  0.5 201360 10276 ?        Sl   09:05   0:00 /opt/venv/bin/uwsgi --ini /etc/uwsgi/uwsgi.ini
    root      2815  0.0  0.5 201360 10276 ?        Sl   09:05   0:00 /opt/venv/bin/uwsgi --ini /etc/uwsgi/uwsgi.ini
    root      2821  0.0  0.0  11128   932 pts/0    S+   09:05   0:00 grep uwsgi
    

    【讨论】:

      【解决方案3】:

      这对我有用:

      conda install -c conda-forge libiconv

      参考:https://anaconda.org/conda-forge/libiconv

      【讨论】:

      • 我认为对于通过以下命令安装 uwsgi 的人来说,这是一个很好的解决方案。 $ conda install -c conda-forge uwsgi
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多