バイナリ互換性ガイド

第 1 章 バイナリ互換パッケージの紹介

バイナリ互換パッケージの目的と機能

SunOS バイナリ互換パッケージと OpenWindows バイナリ互換パッケージは、Solaris 8 リリースで使用できるオプションパッケージです。これらのパッケージを用いることで、OpenWindows アプリケーションも含めた既存の SunOS 4.x アプリケーションを、修正も再コンパイルもせずに、Solaris 8 上で実行できます。これらのパッケージは、 2 つのリリース間のバイナリインタフェースの差異のほとんどを透過的に処理し、SunOS 4.x アプリケーションを正しく実行できる動作環境を提供します。

バイナリ互換パッケージを提供する理由

これらのパッケージは単なる移行ツールです。既存の SunOS 4.x バイナリを Solaris 8 エンドユーザー環境において実行できるようにするためのもので、開発環境として提供されるものではありません。Solaris 8 ユーザーアプリケーションを開発するには Solaris 8 の環境を使用する必要があります。

バイナリ互換パッケージのインストール

SunOS バイナリ互換パッケージと OpenWindows バイナリ互換パッケージは、オプションとしてインストールできます。ソース互換パッケージが既にインストールされている必要があります。SunOS バイナリ互換パッケージは SUNWbcp と呼ばれ、OpenWindows バイナリ互換パッケージは SUNWowbcp と呼ばれます。

オプションパッケージのインストールの詳細については、『Solaris 8 のインストール (上級編)』を、ソース互換パッケージの詳細については、『Source Compatibility Guide』を参照してください。


注 -

バイナリ互換パッケージを使用したい場合は、ソフトウェアのインストールをカスタマイズする際に、上記の互換パッケージを必ず両方ともインストールしてください。


バイナリ互換パッケージの使用方法

バイナリ互換パッケージの機能は、SunOS 4.x アプリケーションを Solaris 8 上で実行する時に、自動的かつ透過的に呼び出されます。アプリケーションを変更する必要はありません。

すべての Solaris 8 リリースでは SunOS 4.x の動的にリンクされた実行可能ファイルを使用できます。Solaris 2.3 以降では、静的にリンクされた実行可能ファイルも実行できます。Solaris 2.5 以降では、静的リンクと動的リンクの混在した実行可能ファイルを使用できます。

SunOS 4.x と Solaris 8 の間の多くの相違点があります。このうちのいくつかは、コマンドのバイナリやライブラリなどがインストールされているディレクトリやファイル名の違いに起因します。このような相違点があるため、PATH 環境変数の定義のしかたによって、バイナリ互換パッケージを使用した場合のアプリケーションの実行状況が異なります。次の項ではこの点について詳しく説明します。

パス名の解決処理

パス名の解決処理については、問題点が 2 つあります。第 1 は、Solaris 8 リリースと SunOS 4.x リリースとの間でコマンドやライブラリのファイルが存在する位置 (ディレクトリ) が異なるという点です。たとえば、SunOS 4.x リリースでは /usr/bin に入っていたコマンドが、Solaris 8 リリースでは /usr/ucb に入っている場合があります。ソース互換パッケージは、この相違点を解決するために、可能な限りシンボリックリンクをセットアップして、旧パス名を使用しているアプリケーションがファイルにアクセスできるようにします。

第 2 に Solaris 8 リリースの多くのコマンドと、SunOS 4.x の対応コマンドとの間に互換性がないという点があります。これに対処するために、ソース互換パッケージには、一組の SunOS 4.x 互換コマンドバイナリが組み込まれています。アプリケーションが、実行するコマンド名だけ (パス名なし) を指定した場合は、バイナリ互換パッケージのもとで PATH 環境変数が解釈され、正しいコマンドが見つけられます。したがって、アプリケーションを実行する前に、PATH 変数を正しく設定しておく必要があります。

たとえば、SunOS 4.x のデフォルトの動作を実行したい場合は、PATH の中で /usr/bin の前に /usr/ucb を指定します。このようにしておかないと、Solaris 8 のデフォルトの動作が引き起こされることになります。

フルパス名を指定したコマンドは、バイナリ互換パッケージ環境下でも、そのパス名の通りに解釈されます。パスが /usr/5bin で始まっている場合は、そのコマンドのデフォルトである Solaris 8 バージョンが実行されます。そうでない場合は、ソース互換パッケージバージョンが実行されます。相対パス名も通常と同じく解釈されます。

Solaris 2.5 から、5 つのコマンドが /usr/ucb から /usr/bin へ移動され、絶対パスを使用して書かれたシェルスクリプトを使用できるようになりました。これらのコマンドは、arch(1)hostid(1)hostname(1)mach(1) および pagesize(1) です。

パフォーマンスへの影響

バイナリ互換パッケージを使って SunOS 4.x バイナリを実行するには、同じバイナリを SunOS 4.x の下で実行する場合や、同じアプリケーションを Solaris 8 に移植してから実行する場合に比べて、多くのメモリーが必要です。さらに、必要なディスク記憶容量とディスクアクセスの回数も多くなります。したがって、バイナリ互換パッケージを使用すると、アプリケーションとシステム全体のパフォーマンスは低下します。

適正動作のアプリケーション

バイナリ互換パッケージで取り扱うことができるのは、適正動作をするユーザーアプリケーションです。適正動作性を備えていないアプリケーションは予期しない結果をもたらすことがあるので、このようなアプリケーションに対してバイナリ互換パッケージを使用することはお勧めできません。適正動作をするアプリケーションとは、静的または動的にリンクされ、以下のすべての要件を満たしているものをいいます。

/dev/kmem/dev/mem、および libkvm

/dev/kmem および /dev/mem の内容は、各リリースに固有のものです。/dev/kmem および /dev/mem を使用するプログラムは、特定バージョンのオペレーティングシステムに結び付いています。互換性を維持することはできません。/dev/kmem/dev/mem、または libkvm ルーチンをアプリケーションの中で使用していると、そのアプリケーションは移植不能となります。

SunOS 4.x アプリケーションのインストール

バイナリ互換パッケージを使用するには、Solaris 8 アプリケーションが Solaris 8 システムで利用可能な状態になっていることが必要です。SunOS 4.x アプリケーションを、Solaris 8 システムにインストールすることは可能です。また、SunOS 4.x バイナリを含む領域をマウントすることもできます。

SunOS 4.x アプリケーションをインストールするには、実行モジュールをそれぞれのオリジナルの a.out 形式で、Solaris 8 システム内の対応するディレクトリにコピーします。アプリケーションは、cp(1)rcp(1)tar(1)cpio(1) などを使ってコピーできます。これらのコピーコマンドについては、Solaris 7 Reference Manual Collection にある『man Pages(1): User Commands』を参照してください。

ほとんどの場合、4.x アプリケーションはオリジナルの配布媒体からインストールできます。インストールスクリプトが正しく働くためには、PATH 変数の中で /usr/bin の前に /usr/ucb を指定することが必要な場合があります。

SunOS 4.x のディレクトリを Solaris 8 システムにマウントし、バイナリ互換パッケージを使って、それらのディレクトリに含まれているバイナリを実行することもできます。

ファイルシステム内で対応する位置が存在しない場合や、SunOS 4.x のファイルと Solaris 8 のファイル名が重複する場合は、ディレクトリの作成、ファイル名変更 (名前の重複の回避) を、個別に行うことが必要になります。

共用オブジェクトファイル

SunOS 4.x リリースで使用していた、SunOS と OpenWindows のライブラリ以外の (サードパーティライブラリなどの) a.out 共用ライブラリを、Solaris 8 にコピーするかまたはマウントする必要があります。これらのライブラリは、/usr/4lib ディレクトリにコピーするのが適当です。これらのライブラリは、SunOS 4.x リリースのときと同じメジャーバージョン番号とマイナーバージョン番号を維持していることが必要です。

実行時リンカは、以下のパス (ディレクトリ間をコロンで区切ったリストの形で指定される) を検索して、関連するライブラリを見つけます。

/usr/4lib ディレクトリは、SunOS 4.x にはなかったものです。これは、SunOS 4.x の a.out ライブラリの格納場所として提供されています。このディレクトリがデフォルトの検索パスに追加されたため、互換パッケージでは SunOS 4.x のライブラリを /usr/4lib に置けば、実行時リンカーによりそれらのライブラリが必ず見つけられます。