libssl.so.1.1:无法打开共享对象文件:没有这样的文件或目录

Rob*_*rcd 114 python linux openssl python-poetry

我刚刚更新到Ubuntu 22.04 LTS,我使用OpenSSL 的库刚刚停止工作。看起来 Ubuntu 已经切换到了 OpenSSL 3.0 版本。

例如,诗歌不再起作用:

Traceback (most recent call last):
  File "/home/robz/.local/bin/poetry", line 5, in <module>
    from poetry.console import main
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/__init__.py", line 1, in <module>
    from .application import Application
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/application.py", line 7, in <module>
    from .commands.about import AboutCommand
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/commands/__init__.py", line 4, in <module>
    from .check import CheckCommand
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/commands/check.py", line 2, in <module>
    from poetry.factory import Factory
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/factory.py", line 18, in <module>
    from .repositories.pypi_repository import PyPiRepository
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/repositories/pypi_repository.py", line 33, in <module>
    from ..inspection.info import PackageInfo
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/inspection/info.py", line 25, in <module>
    from poetry.utils.env import EnvCommandError
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/utils/env.py", line 23, in <module>
    import virtualenv
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/__init__.py", line 3, in <module>
    from .run import cli_run, session_via_cli
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/run/__init__.py", line 11, in <module>
    from ..seed.wheels.periodic_update import manual_upgrade
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/__init__.py", line 3, in <module>
    from .acquire import get_wheel, pip_wheel_env_run
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/acquire.py", line 12, in <module>
    from .bundle import from_bundle
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/bundle.py", line 4, in <module>
    from .periodic_update import periodic_update
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/periodic_update.py", line 10, in <module>
    import ssl
  File "/home/robz/.pyenv/versions/3.9.10/lib/python3.9/ssl.py", line 98, in <module>
    import _ssl             # if we can't import it, let the error propagate
ImportError: libssl.so.1.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

有一个简单的解决方法吗?例如,libssl.so.1.1无需卸载 OpenSSL 3 即可使用(我不知道是否可能)。

sev*_*nth 244

这修复了它(22.04 中的打包问题):

wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb

sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb
Run Code Online (Sandbox Code Playgroud)

PS:如果链接已过期,请检查http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/?C=M;O=D是否有效。

当前版本是:libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb

  • 这看起来很粗略 - 没有官方网站/存储库/方法可以做到这一点吗? (19认同)
  • 这解决了我从 21 升级到 22.04 后遇到的多个问题,谢谢!注意:该文件现在名称为“libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb”。该文件丢失导致 upower 守护进程无法运行,从而导致我的笔记本电脑电池无法识别(journalctl -xe -u upower)。 (6认同)
  • 我认为有一个通用的(无版本的)`.deb`可用:`http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb`这个为我工作,_可能_是到最新版本的“.deb”的永久链接 (5认同)
  • @niico 这是 Ubuntu 官方网站 (4认同)
  • 这给了我一个 404。 (3认同)
  • @Avraam,您可以搜索此页面http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/?C=M;O=D for libssl1.1_1.1.1f-1ubuntu2。你会找到一个实际的版本。现在是 libssl1.1_1.1.1f-1ubuntu2.18_amd64.deb (2认同)

A. *_* K. 68

Ubuntu 22.04上安装openssl-1.1.1o是有风险的,因为它支持openssl-3.0.2。更好的方法是构建和库并使其远离 root 并根据需要导出。libssl.so.1.1libcrypto.so.1.1LD_LIBRARY_PATH

例如,

$ mkdir $HOME/opt && cd $HOME/opt
# Download a supported openssl version. e.g., openssl-1.1.1o.tar.gz or openssl-1.1.1t.tar.gz
$ wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
$ tar -zxvf openssl-1.1.1o.tar.gz
$ cd openssl-1.1.1o
$ ./config && make && make test
$ mkdir $HOME/opt/lib
$ mv $HOME/opt/openssl-1.1.1o/libcrypto.so.1.1 $HOME/opt/lib/
$ mv $HOME/opt/openssl-1.1.1o/libssl.so.1.1 $HOME/opt/lib/
Run Code Online (Sandbox Code Playgroud)

进而

export LD_LIBRARY_PATH=$HOME/opt/lib:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

如所须。~/.bashrc如果您需要始终启用此导出,您还可以将此导出放入 etc 文件中。

这种方法的优点是,如果您需要从计算机中删除 openssl-1.1.1,这很简单。您还可以通过仅使用右侧LD_LIBRARY_PATH或在链接期间提供库路径来进行选择。

  • 虽然这解决了标题中提到的错误,但我现在收到诸如“SSL_connect returned = 1 errno = 0 state = error:证书验证失败(无法获取本地颁发者证书)”之类的错误,有任何线索吗?编辑:我将您的解决方案(〜/.bashrc部分中的导出)与此结合起来解决了这个问题:https://deanpcmad.com/2022/installing-older-ruby-versions-on-ubuntu-22-04/ (2认同)
  • 这确实应该得到更多的支持。感谢您的回答,这绝对是这里的首选方式! (2认同)

dan*_*yag 18

下载并安装libssl1.1最新版本:

wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
Run Code Online (Sandbox Code Playgroud)

  • 截至今天 13/09/2022 这有效 (2认同)

Syl*_*age 15

我在升级到 Ubuntu 22.04 时遇到了这个问题。

我使用pyenv

对我来说,解决方案是重新安装已安装的 Python 版本:

  • 已安装版本列表:
    $ pyenv versions
    
    Run Code Online (Sandbox Code Playgroud)
  • 重新安装每个版本,例如 3.9.6:
    $ pyenv install 3.9.6
    
    pyenv: /home/slesage/.pyenv/versions/3.9.6 already exists
    continue with installation? (y/N) y
    Downloading Python-3.9.6.tar.xz...
    -> https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz
    Installing Python-3.9.6...
    Installed Python-3.9.6 to /home/slesage/.pyenv/versions/3.9.6
    
    Run Code Online (Sandbox Code Playgroud)


小智 14

我通过以下方式解决了它:

wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar -zxvf openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
make test
sudo make install
find / -name libssl.so.1.1
ln -s /usr/local/lib64/libssl.so.1.1  /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libssl.so.1.1  /usr/lib/libssl.so.1.1
find / -name libcrypto.so.1.1
ln -s /home/ubuntu/openssl-1.1.1o/libcrypto.so.1.1    /usr/lib64/libcrypto.so.1.1
ln -s /home/ubuntu/openssl-1.1.1o/libcrypto.so.1.1     /usr/lib/libcrypto.so.1.1
Run Code Online (Sandbox Code Playgroud)


小智 11

我在 nvm 环境中使用 nodejs 时遇到了同样的问题。我没有找到任何用于 ubuntu jammy 的带有 libopenssl1.1 的 deb 软件包,最后我手动安装了它:

wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar -zxvf openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
make test
sudo make install
Run Code Online (Sandbox Code Playgroud)

注意:最新版本可以从 OpenSSLopenssl下载。上面使用的版本仅作为示例。


Ers*_*han 10

更新2022/11/09

快速安装libssl1.1的方法

$ echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list
$ apt-get update && \
    apt-get install libssl1.1
$ dpkg -L libssl1.1
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/engines-1.1
/usr/lib/x86_64-linux-gnu/engines-1.1/afalg.so
/usr/lib/x86_64-linux-gnu/engines-1.1/capi.so
/usr/lib/x86_64-linux-gnu/engines-1.1/padlock.so
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1      <---
/usr/lib/x86_64-linux-gnu/libssl.so.1.1         <---
/usr/share
/usr/share/doc
/usr/share/doc/libssl1.1
/usr/share/doc/libssl1.1/NEWS.Debian.gz
/usr/share/doc/libssl1.1/changelog.Debian.gz
/usr/share/doc/libssl1.1/copyright

Run Code Online (Sandbox Code Playgroud)

更新2022/11/06

# /usr/local/bin/mysql -uroot -h127.0.0.1 -p
/usr/local/bin/mysql: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
$ ldd /usr/local/bin/mysql
    linux-vdso.so.1 (0x00007fff1e576000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7e6db3e000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7e6db39000)
    libcrypto.so.1.1 => not found
    libssl.so.1.1 => not found
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f7e6db25000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7e6db1e000)
    libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007f7e6daf8000)
    libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f7e6dac9000)
    libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e6d89d000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e6d7b6000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e6d796000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e6d56c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7e6db4b000)
Run Code Online (Sandbox Code Playgroud)
$ wget -c https://www.openssl.org/source/openssl-1.1.1s.tar.gz && \
    tar xf openssl-1.1.1s.tar.gz && \
    cd openssl-1.1.1s/ && \
    ./config --prefix="/usr/local/openssl" && \
    make && \
    make test && \
    make install && \
    export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH" >> /etc/profile.d/startEnv.sh && \
    echo "export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH" >> /etc/profile.d/startEnv.sh && \
    echo $LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)


小智 6

一切恢复。

ubuntu 22.04 的解决方案

问题前的环境:pyenv ->诗

不要尝试通过 pyenv、poetry、pip 等修复其 ssl lib!只是

wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar -zxvf openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
make test      (failed 2 tests)
sudo make install (on this moment you can't install python by pyenv)
sudo find / -name libssl.so.1.1
sudo ln -s /usr/local/lib/libssl.so.1.1  /usr/lib/libssl.so.1.1
sudo find / -name libcrypto.so.1.1
sudo ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
Run Code Online (Sandbox Code Playgroud)

现在你可以通过 pyenv 安装 python 并且所需的包必须工作