Ubuntu 向け自作パッケージで libssl を利用する際のバージョン指定について


Ubuntu向けの自作アプリを作成しています。debパッケージで配布するので`DEBIAN/control`の`Depends:`に依存パッケージ情報を記述しておき、debパッケージをビルドしています。

私のアプリはOpenSSLを使用するので、`libssl`が必要なのですが、Ubuntu18におけるそれは`libssl1.0.0`(1.0.2g)で、Ubuntu19におけるそれは`libssl1.1`(1.1.1b)となっています。ここで問題なのは、「`libssl`」というパッケージ名ではなく、「`libssl1.0.0`」と「`libssl1.1`」というように、パッケージ名自体にバージョン番号が組み込まれており、これが意味するところは、libssl1.0とlibssl1.1は関係ない別のものとして、Ubuntu標準パッケージに収められていることです。

私のアプリは今までUbuntu16/18を対象としており、`Depends:
libssl1.0.0`のように定義されているため、これをUbuntu19にインストールしようとすると、依存パッケージが解決できないとしてエラーになります。できればUbuntu16/18およびそれ以降に対応できるパッケージを作りたいです。

この解決方法にはどのようなものがあるでしょうか？

  * `libssl1.0.0`または`libssl1.1`のどちらにも対応できる`Depends:`の書き方がある？
  * あきらめてlibssl1.1系用パッケージを別に作る
  * OpenSSLをスタティックリンクする
  * その他いいアイディア




自己回答です。コメントでいただいた内容を踏まえてまとめます。

  * Ubuntu18ではOpenSSL1.0が標準で、`libssl1.0.0`というパッケージ名。
  * Ubuntu19ではOpenSSL1.1が標準で、`libssl1.1`というパッケージ名。
  * 依存関係を解決したいだけなら、メタパッケージの`openssl`をインストールすれば、ディストロ毎の標準OpenSSLがインストールされる。
  * OpenSSL1.0とOpenSSL1.1では、APIが異なり、バイナリ互換性がなく、shared library を差し替えただけでは、恐らく動作しない。
  * ディストロ毎のパッケージリポジトリを分けることができるなら、`Depends: openssl`として、Ubuntuのバージョン毎に別のdebファイルを作成すると良い。
  * 単一のdebパッケージでUbuntu16～19に全対応したかったら、標準パッケージのOpenSSLをあきらめて、`libssl.a`と`libcrypto.a`をスタティックリンクする。

私のアプリでとった解決策は、上記最後のスタティックリンクする方法です。リンカオプションで`/usr/lib/x86_64-linux-
gnu/libssl.a /usr/lib/x86_64-linux-gnu/libcrypto.a
-ldl`の様にしました。`libdl.so`が必要なので、最後に`-ldl`を付けます。（最初ではなく最後に付けないと、エラーが出て悩まされるので注意）




自己回答です。コメントでいただいた内容を踏まえてまとめます。

  * Ubuntu18ではOpenSSL1.0が標準で、`libssl1.0.0`というパッケージ名。
  * Ubuntu19ではOpenSSL1.1が標準で、`libssl1.1`というパッケージ名。
  * 依存関係を解決したいだけなら、メタパッケージの`openssl`をインストールすれば、ディストロ毎の標準OpenSSLがインストールされる。
  * OpenSSL1.0とOpenSSL1.1では、APIが異なり、バイナリ互換性がなく、shared library を差し替えただけでは、恐らく動作しない。
  * ディストロ毎のパッケージリポジトリを分けることができるなら、`Depends: openssl`として、Ubuntuのバージョン毎に別のdebファイルを作成すると良い。
  * 単一のdebパッケージでUbuntu16～19に全対応したかったら、標準パッケージのOpenSSLをあきらめて、`libssl.a`と`libcrypto.a`をスタティックリンクする。

私のアプリでとった解決策は、上記最後のスタティックリンクする方法です。リンカオプションで`/usr/lib/x86_64-linux-
gnu/libssl.a /usr/lib/x86_64-linux-gnu/libcrypto.a
-ldl`の様にしました。`libdl.so`が必要なので、最後に`-ldl`を付けます。（最初ではなく最後に付けないと、エラーが出て悩まされるので注意）

