web-dev-qa-db-ja.com

バージョン情報がありません(/ usr / bin / sshで必要)

sshを作成するときにno version information availableを取得しています。

Opensslバージョン:

sat:~# openssl version
OpenSSL 1.0.1f 6 Jan 2014

ldd /usr/bin/sshの出力は次のとおりです。

/usr/bin/ssh: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by /usr/bin/ssh)
    linux-vdso.so.1 =>  (0x00007fff48bff000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fdd57f1f000)
    libcrypto.so.1.0.0 => /usr/local/lib/libcrypto.so.1.0.0 (0x00007fdd57b3a000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fdd57935000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fdd5771e000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fdd57508000)
    libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fdd572c8000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd56f3e000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fdd583b3000)
    libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fdd56c6a000)
    libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fdd56a40000)
    libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fdd5683c000)
    libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fdd56633000)
    libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fdd5642e000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdd56212000)

locate libcrypto.so.1.0.0の出力:

sat:~# locate libcrypto.so.1.0.0
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
/usr/local/lib/libcrypto.so.1.0.0
/usr/src/openssl-1.0.1f/libcrypto.so.1.0.0

このエラーを修正する方法は?

注意:

opensslをコンパイルしてインストールしました。その後、sshからapt-getをインストールしました。

6
sat

Opensslをコンパイルしてインストールしました。その後、apt-getを使用してsshをインストールしました。

これらはおそらくOpenSSLの2つの異なるバージョンです。 1.0.0は1.0.1、1.0.2などとバイナリ互換であるため、おそらく問題ありません(ただし、1.1.0とはバイナリ互換ではありません)。

あなたのsshはおそらく_/usr/lib/x86_64-linux-gnu/_のバージョンのOpenSSLを使用しています。 OpenSSLのバージョンが使用されていることを確認するには、_LD_PRELOAD_を使用する必要があります(もちろん、バイナリ互換性を前提としています)。

_LD_PRELOAD_などを使用したくない場合は、ソースからsshをビルドします。必ずrpathを指定して、リンクエディターがシステムのバージョンではなく、お使いのバージョンのOpenSSLを使用するようにしてください。つまり、LDFLAGSには_-Wl,-rpath,<path to your openssl>_のようなものを含める必要があります。これは、通常の_-lcrypto_、_-lssl_、および_-L<path to your openssl>_に追加されます。

Mac OS Xを使用している場合、_-Bstatic_や_-rpath_などのリンカーオプションは通知なく無視されることに注意してください。 OS Xは0.9.8を提供しているため、互換性のないバイナリが原因で不思議なクラッシュが発生します。


バージョン情報がありません

バージョン情報がないので、わかりません。 sshは、コンパイル時に_OPENSSL_VERSION_NUMBER_または実行時にSSLeay/_SSLeay_version_を使用できます。詳細は OPENSSL_VERSION_NUMBER(3) を参照してください。


このエラーを修正する方法は?

誤解しているかもしれませんが、投稿のどこにもエラーはありません。

4
jww

問題:libssl.so.1.0.0およびlibcrypto.so.1.0.0バージョン情報がない警告/エラー。

多くの研究、時間と労力(数週間かかった)の後、これが最終的に私がやったことです...

Openssl 1.0.1hのバージョンのソースコードを抽出したディレクトリで(他のバージョンでも動作するはずです)openssl.ldというファイルを作成します

このファイルにこれを入れてください...

OPENSSL_1.0.0 {
    global:
    *;
};

それを保存。次に入力してください...

make clean

(私たちが新鮮であることを確認するためだけに。)

さて、本当に気が遠くなるような部分について...

./config --prefix=/usr/local --openssldir=/usr/local/openssl shared -Wl,--version-script=openssl.ld -Wl,-Bsymbolic-functions

その後...

make
make test
make install
ldconfig

そして、それでうまくいくはずです。 (とてもシンプルです。パッチは必要ありません。)

このソリューションを32ビット版と64ビット版の両方のDebian Wheezyに適用しました。そして観察をしました。 64ビットバージョンでは、libssl.so.1.0.0ディレクトリに作成される新しいlibcrypto.so.1.0.0および/usr/local/libファイルが自動的にデフォルトで使用されます。 32ビット版はそうではありません。これが、32ビットバージョンのDebian Wheezyにはこの問題が発生しないと最初は思っていた理由ですが、32ビットバージョンを入手すると、/usr/local/libディレクトリの新しいopensslライブラリを使用できます。

lddコマンドを使用して、バイナリが使用しているライブラリをテストすることも、これを理解する上で非常に重要です。

8
Mr. E. Dude

カスタムコンパイルライブラリをインストールする場合は、プレフィックス/usr/local/usr、または/にインストールしてシステムを壊さないでください。たとえば、Debian/Ubuntuは、ldconfigが通常/usr/local/libにリストされているため、次に呼び出されたときに/etc/ld.so.conf.d/libc.confでカスタムライブラリを取得します。

Openssl 1.0.2eをmake installに変換して--prefix=/usr/localにした後、ldconfigを実行します(引数なしで/etc/ld.so.cacheを更新します):

# ldconfig -p | egrep 'lib(crypt|ssl)'
libssl.so.1.0.0 (libc6,x86-64) => /usr/local/lib/libssl.so.1.0.0
libssl.so.1.0.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libssl.so.1.0.0
libssl.so (libc6,x86-64) => /usr/local/lib/libssl.so
libssl.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so
libcrypto.so.1.0.0 (libc6,x86-64) => /usr/local/lib/libcrypto.so.1.0.0
libcrypto.so.1.0.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
libcrypto.so (libc6,x86-64) => /usr/local/lib/libcrypto.so
libcrypto.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcrypto.so
libcrypt.so.1 (libc6,x32, OS ABI: Linux 3.4.0) => /libx32/libcrypt.so.1
libcrypt.so.1 (libc6,x86-64, OS ABI: Linux 2.6.24) => /lib/x86_64-linux-gnu/libcrypt.so.1
libcrypt.so.1 (libc6, OS ABI: Linux 2.6.24) => /lib32/libcrypt.so.1
libcrypt.so (libc6,x32, OS ABI: Linux 3.4.0) => /usr/libx32/libcrypt.so
libcrypt.so (libc6,x86-64, OS ABI: Linux 2.6.24) => /usr/lib/x86_64-linux-gnu/libcrypt.so
libcrypt.so (libc6, OS ABI: Linux 2.6.24) => /usr/lib32/libcrypt.so

カスタムコンパイルされたものがopensslパッケージのlibsをオーバーライドする方法に注意してください。

代わりに、解決策は、vendorカスタムライブラリおよびバイナリを、デフォルトのld.confおよびPATHから独立した隔離されたディレクトリに格納することです。

ソフトウェアを/opt/$WHATEVER-$VERSION/にインストールします

次に、/opt/$WHATEVER-$VERSION/binでカスタムコンパイルされたバイナリを使用する場合は、appendPATHに追加します(プリペンドしないでください) 、システムを破壊するリスクがあるため)。

$ WHATEVERを他の何かにリンクするstaticの場合

export CFLAGS="$CFLAGS -I/opt/$WHATEVER-$VERSION/include" \
   CXXFLAGS="$CXXFLAGS -I/opt/$WHATEVER-$VERSION/include" \
   LDFLAGS="-lwhatever -L/opt/$WHATEVER-$VERSION/lib" 

$ WHATEVERを他のものにリンクするsharedの場合

上記と同じですが、-Wl,-rpath,/opt/$WHATEVER-$VERSION/libをLDFLAGSに追加します

もう1つ行うことは、make installの代わりに checkinstall を使用して、完全なパッケージ名にcustom-$WHATEVER-$VERSIONが含まれるリムーバブルパッケージを作成し、バージョン管理を簡単にして破損を回避することです。互換性のないアップグレードによるカスタムパッケージ。

0
dhchdhd

上記のソリューションがOPENSSL_1.0.1バージョンを必要とする特定のバイナリを破壊することを発見しました。たとえばカールのように。 apt-file searchはcurlを使用しているため、私のソリューションでは機能しなくなります。したがって、一部のバイナリは1.0.0バージョンを必要とし、他のバイナリは1.0.1バージョンを必要とします。

Openssl.ldファイルを編集することで解決できると思います。そのため、一部のバイナリは1.0.0バージョンを取得し、他のバイナリは1.0.1バージョンを取得します。現時点ではこれは私を超えています。たぶん他の誰かがこれを解決できます。

0
Mr. E. Dude