Debianディストリビューション全体で単一のバイナリを維持します。

Debianディストリビューション全体で単一のバイナリを維持します。

現在、私たちのシステムを Debian 6 から 8 に移行しています。議題は、オペレーティングシステムプラットフォーム(x86ベース)全体で単一のバイナリを維持しようとすることです。

しかし、Debian 6でDebian 8コンパイルバイナリを実行してみました。明らかにする

シンボル検索エラー:g_thread_create

逆方向にコンパイルしようとしましたが、Debian 6でコンパイルされたアプリケーションはDebian 8で実行されました。

対象プラットフォームはx86原版。

Debian 8 はldd以下を示しています:

linux-gate.so.1 (0xb76f5000)
libusb-1.0.so.0 => /lib/i386-linux-gnu/libusb-1.0.so.0 (0xb76c7000)
libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb76ab000)
librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb76a1000)
libUFScanner.so => /usr/lib/libUFScanner.so (0xb751a000)
libUFMatcher.so => /usr/lib/libUFMatcher.so (0xb74f1000)
libjpeg.so.62 => /usr/lib/i386-linux-gnu/libjpeg.so.62 (0xb7492000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb73b9000)
libxml2.so.2 => /usr/lib/i386-linux-gnu/libxml2.so.2 (0xb7237000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb70e5000)
libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xb7099000)
libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb6f41000)
libmorphosdk.so.6 => /usr/lib/libmorphosdk.so.6 (0xb6f1e000)
libMSO100.so.6 => /usr/lib/libMSO100.so.6 (0xb6f0e000)
libMSO_Drv.so.6 => /usr/lib/libMSO_Drv.so.6 (0xb6f06000)
libgtk-x11-2.0.so.0 => /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 (0xb6a0e000)
libgdk-x11-2.0.so.0 => /usr/lib/i386-linux-gnu/libgdk-x11-2.0.so.0 (0xb694d000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6925000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/i386-linux-gnu/libgdk_pixbuf-2.0.so.0 (0xb68fc000)
libpangocairo-1.0.so.0 => /usr/lib/i386-linux-gnu/libpangocairo-1.0.so.0 (0xb68ee000)
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb689c000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6753000)
libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xb66f5000)
libgmodule-2.0.so.0 => /usr/lib/i386-linux-gnu/libgmodule-2.0.so.0 (0xb66ef000)
libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xb66ea000)
libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xb65c2000)
libgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 (0xb65bf000)
libftd2xx.so => /usr/lib/i386-linux-gnu/libftd2xx.so (0xb657c000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb648a000)
libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb6444000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6427000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb627d000)
libudev.so.1 => /lib/i386-linux-gnu/libudev.so.1 (0xb626a000)
/lib/ld-linux.so.2 (0xb76f8000)
libusb-0.1.so.4 => /lib/i386-linux-gnu/libusb-0.1.so.4 (0xb6260000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb6243000)
liblzma.so.5 => /lib/i386-linux-gnu/liblzma.so.5 (0xb621a000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb61f4000)
libXcomposite.so.1 => /usr/lib/i386-linux-gnu/libXcomposite.so.1 (0xb61ef000)
libXdamage.so.1 => /usr/lib/i386-linux-gnu/libXdamage.so.1 (0xb61eb000)
libXfixes.so.3 => /usr/lib/i386-linux-gnu/libXfixes.so.3 (0xb61e4000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb602e000)
libpangoft2-1.0.so.0 => /usr/lib/i386-linux-gnu/libpangoft2-1.0.so.0 (0xb6016000)
libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xb5fd3000)
libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xb5f22000)
libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xb5f16000)
libXinerama.so.1 => /usr/lib/i386-linux-gnu/libXinerama.so.1 (0xb5f12000)
libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xb5eff000)
libXrandr.so.2 => /usr/lib/i386-linux-gnu/libXrandr.so.2 (0xb5ef2000)
libXcursor.so.1 => /usr/lib/i386-linux-gnu/libXcursor.so.1 (0xb5ee6000)
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xb5ed1000)
libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb5ea4000)
libthai.so.0 => /usr/lib/i386-linux-gnu/libthai.so.0 (0xb5e9a000)
libpixman-1.so.0 => /usr/lib/i386-linux-gnu/libpixman-1.so.0 (0xb5de0000)
libxcb-shm.so.0 => /usr/lib/i386-linux-gnu/libxcb-shm.so.0 (0xb5ddc000)
libxcb-render.so.0 => /usr/lib/i386-linux-gnu/libxcb-render.so.0 (0xb5dd1000)
libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xb5dc9000)
libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb5d58000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb5d53000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb5d4d000)
libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0xb5d25000)
libresolv.so.2 => /lib/i386-linux-gnu/i686/cmov/libresolv.so.2 (0xb5d0e000)
libharfbuzz.so.0 => /usr/lib/i386-linux-gnu/libharfbuzz.so.0 (0xb5cb1000)
libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xb5c87000)
libdatrie.so.1 => /usr/lib/i386-linux-gnu/libdatrie.so.1 (0xb5c7e000)
libgraphite2.so.3 => /usr/lib/i386-linux-gnu/libgraphite2.so.3 (0xb5c62000)

Debian 6 は以下lddを示しています:

linux-gate.so.1 =>  (0xb7757000)
libusb-1.0.so.0 => /lib/libusb-1.0.so.0 (0xb773a000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7721000)
librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb7717000)
libUFScanner.so => /usr/lib/libUFScanner.so (0xb7590000)
libUFMatcher.so => /usr/lib/libUFMatcher.so (0xb7567000)
libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0xb7547000)
libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0xb74bb000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb7390000)
libX11.so.6 => /usr/lib/libX11.so.6 (0xb7273000)
libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xb7227000)
libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb70cf000)
libmorphosdk.so.6 => /usr/lib/libmorphosdk.so.6 (0xb70ac000)
libMSO100.so.6 => /usr/lib/libMSO100.so.6 (0xb709d000)
libMSO_Drv.so.6 => /usr/lib/libMSO_Drv.so.6 (0xb7094000)
libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb6d09000)
libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0xb6c82000)
libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0xb6c66000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb6c4d000)
libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0xb6c41000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb6bfd000)
libcairo.so.2 => /usr/lib/libcairo.so.2 (0xb6b88000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb6b4a000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb6b46000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb6b41000)
libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb6a78000)
libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb6a73000)
libftd2xx.so => /usr/lib/libftd2xx.so (0xb6a31000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb693b000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb6915000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb68f7000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb67b0000)
/lib/ld-linux.so.2 (0xb775a000)
libusb-0.1.so.4 => /lib/libusb-0.1.so.4 (0xb67a8000)
libz.so.1 => /usr/lib/libz.so.1 (0xb6793000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb677a000)
libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0xb6777000)
libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0xb6774000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb676f000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb673f000)
libXext.so.6 => /usr/lib/libXext.so.6 (0xb6730000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb6727000)
libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb6724000)
libXi.so.6 => /usr/lib/libXi.so.6 (0xb6716000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb670e000)
libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb6705000)
libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0xb6669000)
libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb6643000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb65cb000)
libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0xb6572000)
libpng12.so.0 => /lib/libpng12.so.0 (0xb654d000)
libxcb-render-util.so.0 => /usr/lib/libxcb-render-util.so.0 (0xb6549000)
libxcb-render.so.0 => /usr/lib/libxcb-render.so.0 (0xb6542000)
libpcre.so.3 => /lib/libpcre.so.3 (0xb650f000)
libXau.so.6 => /usr/lib/libXau.so.6 (0xb650c000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb6506000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb64e0000)
libresolv.so.2 => /lib/i686/cmov/libresolv.so.2 (0xb64cc000)
libselinux.so.1 => /lib/libselinux.so.1 (0xb64b1000)

ベストアンサー1

コメントで述べたように、さまざまなバージョンのDebian(またはすべてのLinuxディストリビューション)で実行されている単一のバイナリを構築する唯一の信頼できる方法は、静的に構築することです。これはDebianとpkg-config。静的バイナリは何十年も機能し続けることができます。カーネルのユーザー空間インターフェイスは以前のバージョンと互換性のある方法で維持されます(時には中断されますが、これはバグと見なされ、通常はすぐに修正されます)。静的バイナリが動作を停止する状況を見つけることができますが、これは通常処理(libnss静的バイナリでも動的です)またはXサーバーの期待値の変更に関連しています(これは次の場合に発生します)。古いLinuxゲーム)または配布カーネルが廃止されたと見なされる機能のサポートを中止します(例えばUbuntuカーネルのOSSサウンドインターフェイス)。

(代替はすべての依存ライブラリを提供し、rpathシェルスクリプトを使用して正しく設定することです。これはSteamが実行する作業であり、Steam以外の多くのLinuxゲームも実行しますが、静的リンクほど将来の保証型ではありません。問題が発生して修復する難しい時にもっと便利です。)

Debian 6で構築された動的バイナリは、バイナリの直接的な依存関係がまだ利用可能であるため、Debian 8で実行できます。あなたのインストールDebian 8 は純粋に幸運で頼ることができるものではありません。たとえば、バイナリはに接続されていますlibssl.so.0.9.8。以前のパッケージがまだあるため、Debian 8では引き続き機能しますlibssl0.9.8(リンクはによって満たされます/usr/lib/i686/cmov/libssl.so.0.9.8)。以前のパッケージなしでDebian 8でビルドすると、libssl.so.1.0.0Debian 6では利用できないリンクが生成されます。 (これは、新しくインストールされた Debian 8 システムで終了した結果です.)

Debian 8でビルドしたバイナリがDebian 6で実行されていないのは完全に正常です。バイナリ互換性は降順ではなく昇順です。これは、Debian 6でバイナリをビルドし、まだDebian 8でそのライブラリを見つけたら正しく機能する必要があることを意味します。ただし、Debian 8にリンクされているバイナリは、Debian 6では利用できないライブラリのシンボルを期待できます。図書館の名前を変更します。懸念されるエラーは、対応するシンボルを持つg_thread_createDebian 8に基づいて構築されていますが、libglib-2.0.so.0Debian 6libglib-2.0.so.0にはないために発生します。バイナリを含むパッケージをビルドすると、パッケージの依存関係はそれを正しく認識します(少なくとも正しい依存関係が得られますlibglib2.0-0 (>= 2.31.8)。Debian 6にはバージョン2.24.2のみがあります)。

将来の準備をするための最良の方法は、Debian 6および8で満たすことができる依存関係を持つソースパッケージを作成することです。これにより、Debian 6、7、8、9の正しいバイナリパッケージを簡単に構築できます。少なくとも最初の数回は、静的バイナリを構築するよりも少し複雑ですが、将来この種のアップグレードを実行する予定であれば、長期的にはそれほど価値があると思います。一般的にはpbuilderこれに対応しています。さまざまなディストリビューション用に構築sbuildこれも可能です。)Debian 6にリンクされている指示を拡張するのは比較的簡単です(プロセスを繰り返してSTABLE_CODENAMEOLDOLDSTABLE_CODENAMEを使用してください)。アーカイブストア)。

おすすめ記事