Index: head/ja_JP.eucJP/books/handbook/linuxemu/chapter.xml =================================================================== --- head/ja_JP.eucJP/books/handbook/linuxemu/chapter.xml (revision 48502) +++ head/ja_JP.eucJP/books/handbook/linuxemu/chapter.xml (revision 48503) @@ -1,1346 +1,1303 @@ &linux; バイナリ互換機能 JimMock再構成と一部の更新: Brian N.Handyオリジナルの文書を執筆: RichMurphey この章では Linux バイナリ互換機能 バイナリ互換機能 Linux &os; は、&linux; とのバイナリ互換機能を提供しています。 このバイナリ互換機能により、ユーザは &linux; のバイナリを &os; システム上にインストールして実行することが可能になります。 たくさんの会社や開発者たちは、 &linux; のためだけに開発を行なっていますが、 バイナリ互換機能により &os; のユーザはすべての &linux; アプリケーションの 90% を修正なしに実行できます。 この中には、生産的なアプリケーションやゲームなどが含まれます。 ある状況においては &linux; バイナリを &linux; で動かすよりも &os; で動かすほうが良いパフォーマンスが出るという報告もあります。 しかしながら、いくつかの &linux; に特有なオペレーティングシステムの機能は &os; ではサポートされていません。たとえば、 仮想 8086 モードを有効にするような &i386; 特有の呼び出しを過度に使う &linux; バイナリは &os; では動きません。 この章を読むと、以下のことがわかります。 &os; システムで &linux; バイナリ互換機能を有効にする方法。 &linux; 共有ライブラリを追加する方法。 &linux; アプリケーションを &os; システムにインストールする方法 &os; における &linux; 互換機能の実装の詳細。 この章を読む前に、以下のことを理解しておく必要があります。 サードパーティ製ソフトウェア のインストール方法 インストール Ports Collection &linux; ライブラリは、デフォルトでは &os; にインストールされません。 また、&linux; バイナリ互換機能も、デフォルトでは有効ではありません。 &linux; ライブラリは、 &os; Ports Collection を使ってインストールできます。 &linux; ライブラリを 手動 でインストールすることもできます。 &linux; ライブラリをインストールする最も簡単な方法は、 - Ports Collection を使う方法です。 - &os; 8.0 以降のシステムでは、 - 以下の port をインストールしてください。 + Ports Collection を使う方法です。 &prompt.root; cd /usr/ports/emulators/linux_base-f10 &prompt.root; make install distclean - - &os; 8.0 よりも前の &os; システムでは、 - かわりに emulators/linux_base-fc4 port - をインストールしてください。 - - port をインストールしたら、 linux モジュールを読み込んで、 &linux; バイナリ互換機能を有効にしてください。 root 権限で、 以下を実行してください。 &prompt.root; kldload linux &linux; 互換機能を起動時から常に有効にする場合には、 /etc/rc.conf に以下の行を追加してください。 linux_enable="YES" モジュールがロードされていることを確認するには、 &man.kldstat.8; コマンドを利用してください。 &prompt.user; kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko カーネルオプション COMPAT_LINUX &linux; バイナリ互換機能をカーネルに静的にリンクする場合には、 options COMPAT_LINUX をカーネルコンフィグレーションファイルに追加してください。 そして、 の説明にしたがって新しいカーネルをコンパイルしてインストールしてください。 手動でのライブラリのインストール &linux; ライブラリのインストールには、 Ports Collection を使用することが推奨されていますが、 手動でインストールすることもできます。 プログラムが必要とする &linux; の共有ライブラリとランタイムリンカを /compat/linux にコピーする必要があります。 &os; で動作する &linux; プログラムが使用する共有ライブラリは、 まずこのディレクトリから検索されます。たとえば、 &linux; のプログラムが /lib/libc.so をロードしようとした場合には、&os; はまず /compat/linux/lib/libc.so を開こうとします。これが存在しない場合には、次に /lib/libc.so を試します。 共有ライブラリは、&linux; の ld.so が報告するパスではなく、 /compat/linux/lib 以下にインストールする必要があります。 通常は、&linux; のバイナリが必要とする共有ライブラリを探す必要があるのは、 &os; のシステムに &linux; のプログラムをインストールする最初の数回だけです。 それが過ぎれば、十分な &linux; の共有ライブラリがシステムにインストールされ、 新しくインストールした &linux; のバイナリも余計な作業をせずに動作させることができるようになります。 共有ライブラリの追加 共有ライブラリ linux_base port をインストールした後に、 アプリケーションが必要な共有ライブラリが存在しないというエラーを出した場合には、 &linux; バイナリがどの共有ライブラリを必要としているかを root により指定する 2 種類の方法があります。 &linux; システムを利用できるのであれば、 そのアプリケーションがどういう共有ライブラリを必要としているかを調べ、 &os; にそのライブラリをコピーしてください。 この例では、FTP を使って &linux; システムから Doom の &linux; バイナリをダウンロードします。 どの共有ライブラリが必要かを調べるには、 ldd linuxdoom を実行してください。 &prompt.user; ldd linuxxdoom libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29 シンボリックリンク 最後のカラムに表示されているすべてのファイルを &os; システムの /compat/linux の下にコピーして、 最初のカラムに示されるファイル名でコピーしたファイルに対してシンボリックリンクを張ります。 この例では、&os; システムで以下のようになります。 /compat/linux/usr/X11/lib/libXt.so.3.1.0 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
ldd の出力の最初のカラムに表示されているメジャーバージョンが同じ &linux; 共有ライブラリが既にインストールされている場合は、 最後のコラムにある名前のファイルを新たにコピーする必要はありません。 既にあるライブラリで動作するはずです。 ただ、新しいバージョンの共有ライブラリがある場合には、 コピーすることをお奨めします。 新しいライブラリにシンボリックリンクを変更したら、 古いライブラリは削除してかまいません。 たとえば、以下のライブラリがシステムに存在するとします。 /compat/linux/lib/libc.so.4.6.27 /compat/linux/lib/libc.so.4 -> libc.so.4.6.27 そして、バイナリに対する ldd の出力が以下のように、 新しいバージョンを必要とする場合を考えます。 libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29 このように最後の番号が 1 つか 2 つ古いだけならば、 わずかに古いライブラリでもプログラムは動作するはずなので、 /lib/libc.so.4.6.29 をコピーする必要はありません。 しかしながら、libc.so を置き換えるのが安全です。 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
シンボリックリンクのメカニズムは &linux; バイナリにのみ必要なことに注意してください。 &os; のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索します。
&linux; の ELF バイナリのインストール Linux ELF バイナリ ELF のバイナリを使うためには、 マークをつける (branding) 作業が必要になります。 マークのない ELF バイナリを実行しようとすると、 以下のようなエラーメッセージが表示されてしまうことでしょう。 &prompt.user; ./my-linux-elf-binary ELF binary type not known Abort &os; のカーネルが &os; の ELF バイナリと &linux; のバイナリとを見分けられるようにするために、&man.brandelf.1; を以下のようにして使ってください。 &prompt.user; brandelf -t Linux my-linux-elf-binary GNU ツールチェイン GNU のツール群が ELF バイナリに自動的に適切なマークを付加するようになったので、 この作業は通常必要ありません。 &linux; RPM ベースのアプリケーションのインストール &os; は、Ports Collection からインストールされたすべてのソフトウェアの追跡に独自の package データベースを使っています。 しかしながら、&linux; RPM データベースには対応していません。 &linux; RPM ベースのアプリケーションをインストールするには、 最初に、archivers/rpm2cpio package または port をインストールしてください。 インストールを行うと、 root は、以下のコマンドを使うことで、 .rpm をインストールできます。 &prompt.root; cd /compat/linux &prompt.root; rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id 必要に応じて、インストールした ELF バイナリに brandelf を実行してください。 綺麗にアンインストールできないかもしれませんので注意してください。 ホストネームリゾルバの設定 DNS がうまく動作しなかったり、 以下のようなエラーメッセージが表示される場合は、 /compat/linux/etc/host.conf ファイルを以下のように設定する必要があります。 resolv+: "bind" is an invalid keyword resolv+: "hosts" is an invalid keyword ファイルの内容を以下のように設定してください。 order hosts, bind multi on この設定では /etc/hosts を最初に検索し、 次に DNS を検索するように指定します。 /compat/linux/etc/host.conf が存在しない場合には、 &linux; アプリケーションは /etc/host.conf を使用しようとし、 &os; の文法とは互換性がないと警告を出力します。 /etc/resolv.conf を利用してネームサーバの設定をしていない場合には、 bind を削除してください。
+ &mathematica; のインストール Boris Hollas - Mathematica 5.X 向けの改訂: + Mathematica 9.X 向けの改訂: アプリケーション Mathematica この節では、&linux; 版の &mathematica; 5.X を &os; へインストールするプロセスについて説明します。 &mathematica; は商用の科学、工学および数学で使われる計算ソフトウェアプログラムです。 - Wolfram - Research から購入できます。 + 30 日のトライアル版を wolfram.com/mathematica + からダウンロードできます。 &mathematica; インストーラの実行 - 最初に、&os; 対して &mathematica; - の &linux; バイナリが、&linux; Application Binary Interface - ABI を使用していることを指定してください。 - 最も簡単な方法は、すべてのマーク付けされていないコマンドに対し、 - デフォルトの ELF ブランドを &linux; に設定することです。 - + &mathematica; をインストールする前に、 + textproc/linux-f10-aspell + package または port がインストールされていることと、 + &man.linprocfs.5; + ファイルシステムがマウントされていることを確認してください。 + &prompt.root; sysctl kern.fallback_elf_brand=3 これで &os; はマーク付が行われていない ELF バイナリは &linux; ABI を使用すると見なすので、 CDROM から直接インストーラを実行できます。 - MathInstaller - をハードディスクにコピーしてください。 + ダウンロードファイルは、 + /tmp/Mathematica_9.0.1_LINUX.sh + と保存されます。スーパユーザになり、 + このインストールファイルを実行してください。 - &prompt.root; mount /cdrom -&prompt.root; cp /cdrom/Unix/Installers/Linux/MathInstaller /localdir/ + &prompt.root; sh /tmp/Mathematica_9.0.1_LINUX.sh +Mathematica Secured 9.0.1 for LINUX Installer Archive - このファイルの中で、最初の行の /bin/sh - を /compat/linux/bin/sh に置き換えてください。 - これにより、インストーラは &linux; 版の &man.sh.1; - により実行されるようになります。 - 次に、テキストエディタもしくは次の節で説明するスクリプトを用いて、 - Linux)FreeBSD) - に置き換えてください。 - この置き換えにより、&mathematica; - のインストーラが、&os; を &linux;-like - なオペレーティングシステムとして扱うようになります。 - MathInstaller を実行すると、 - &mathematica; をインストールします。 - +Verifying archive integrity. +Extracting installer. ... + Wolfram Mathematica 9 Installer +Copyright (c) 1988-2013 Wolfram Research, Inc. All rights reserved. - - &mathematica; 実行ファイルの変更 +WARNING: Wolfram Mathematica is protected by copyright law and international treaties. Unauthorized +reproduction or distribution may result in severe civil and criminal +penalties and will be prosecuted to the maximum extent possible under law. - &mathematica; - がインストール中に作成したシェルスクリプトは、 - 使用する前に変更する必要があります。 - &mathematica; - の実行ファイルが置かれているディレクトリが - /usr/local/bin - とすると、 - math, mathematica, - Mathematica および - MathKernel - といったファイルへのシンボリックリンクがこのディレクトリにあります。 - これらにおいて、 - テキストエディタもしくは以下のスクリプトを用いて、 - Linux)FreeBSD) - に置き換えてください。 - - #!/bin/sh -cd /usr/local/bin -for i in math mathematica Mathematica MathKernel - do sed 's/Linux)/FreeBSD)/g' $i > $i.tmp - sed 's/\/bin\/sh/\/compat\/linux\/bin\/sh/g' $i.tmp > $i - rm $i.tmp - chmod a+x $i -done +Enter the installation directory, or press ENTER to select /usr/local/Wolfram/Mathematica/9.0: +> +Now installing... +*********************** +Installation complete. - &mathematica; パスワードの取得 - - - イーサネット - MAC アドレス - - - 初めて &mathematica; を起動すると、 - パスワードを尋ねられます。 - Wolfram Research からパスワードをまだ入手していないのであれば、 - インストールディレクトリにある mathinfo - というプログラムを実行して、 - マシン ID を入手してください。 - このマシン ID は、最初に見つかったイーサネットカードの - MAC アドレスのみをベースとして作成されるので、他のコンピュータで - &mathematica; - を実行することはできません。 - - Wolfram Research - に登録する時にはこのマシン ID が必要となります。 - するといくつかの数字から構成されるパスワードが返されます。 - - - ネットワーク経由での &mathematica; フロントエンドの起動 &mathematica; は標準フォントセットにない特別な記号を表示するために特殊なフォントを使用します。 Xorg は、 これらのフォントがローカルマシンにインストールされていることを要求します。 これはつまり、これらのフォントを CD-ROM や &mathematica; がインストールされているホストマシンからローカルマシンにコピーしなければならないということです。 これらのフォントは通常、CD-ROM の /cdrom/Unix/Files/SystemFiles/Fonts か、もしくはハードディスクの /usr/local/mathematica/SystemFiles/Fonts に置かれており、実際に使用されるフォントは Type1 および X サブディレクトリに格納されています。 これらを利用するには次のようないくつかの方法があります。 一つ目の方法は、フォントファイルを /usr/local/lib/X11/fonts 以下にある既存のフォントディレクトリにコピーし、 新しいフォントを含むディレクトで &man.mkfontdir.1; を実行してください。 もう一つの方法は、 /usr/local/lib/X11/fonts にフォントディレクトリごとコピーする方法です。 &prompt.root; cd /usr/local/lib/X11/fonts &prompt.root; mkdir X &prompt.root; mkdir MathType1 &prompt.root; cd /cdrom/Unix/Files/SystemFiles/Fonts &prompt.root; cp X/* /usr/local/lib/X11/fonts/X &prompt.root; cp Type1/* /usr/local/lib/X11/fonts/MathType1 &prompt.root; cd /usr/local/lib/X11/fonts/X &prompt.root; mkfontdir &prompt.root; cd ../MathType1 &prompt.root; mkfontdir そして、 フォントパスに新しいフォントディレクトリを追加してください。 &prompt.root; xset fp+ /usr/local/lib/X11/fonts/X &prompt.root; xset fp+ /usr/local/lib/X11/fonts/MathType1 &prompt.root; xset fp rehash &xorg; サーバを使用しているなら、 /etc/X11/xorg.conf に加えることでこれらのフォントディレクトリを自動的に読み込むようにできます。 フォント /usr/local/lib/X11/fonts/Type1 というディレクトリが存在していない場合には、 上記例の MathType1Type1 としてください。 + --> + 寄稿: Robert Getschmann - 感謝: applications Maple &maple;&mathematica; に似た商用の数式処理プログラムです。 このソフトウェアを Maplesoft で購入し、ライセンスを入手してください。 このソフトウェアの &linux; 版を &os; にインストールするには、 以下のステップに従ってください。 製品の配布物から INSTALL シェルスクリプトを実行してください。 インストールプログラムからの質問には、 RedHat オプションを選択してください。 一般的なインストールのディレクトリは、/usr/local/maple です。 ライセンスを /usr/local/maple/license/license.dat にコピーしてください。 &maple; についてくる INSTALL_LIC というインストールシェルスクリプトを実行し、 FLEXlm ラインセンスマネージャをインストールしてください。 ライセンスサーバに対して、 コンピュータのホスト名を設定してください。 以下のパッチを /usr/local/maple/bin/maple.system.type ファイルにあててください。 + ----- snip ------------------ *** maple.system.type.orig Sun Jul 8 16:35:33 2001 ---- maple.system.type Sun Jul 8 16:35:51 2001 +-- - maple.system.type Sun Jul 8 16:35:51 2001 *************** *** 72,77 **** ---- 72,78 ---- +-- - 72,78 ---- # the IBM RS/6000 AIX case MAPLE_BIN="bin.IBM_RISC_UNIX" ;; + "FreeBSD"|\ "Linux") # the Linux/x86 case # We have two Linux implementations, one for Red Hat and ----- snip end of patch ----- "FreeBSD"|\ の後に空白を入れてはいけません。 このパッチにより &maple; は、 &os; を &linux; システムと認識します。 bin/maple シェルスクリプトは bin/maple.system.type を呼び出します。 このスクリプトは、uname -a を実行し、 オペレーティングシステムの名前を入手します。 OS 名にから、どのバイナリを使用するかを判断します。 ライセンスサーバを起動してください。 /usr/local/etc/rc.d/lmgrd としてインストールされる、以下のスクリプトは、 lmgrd を起動する便利な方法です。 ----- snip ------------ #! /bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin PATH=${PATH}:/usr/local/maple/bin:/usr/local/maple/FLEXlm/UNIX/LINUX export PATH LICENSE_FILE=/usr/local/maple/license/license.dat LOG=/var/log/lmgrd.log case "$1" in start) lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2 echo -n " lmgrd" ;; stop) lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2 ;; *) echo "Usage: `basename $0` {start|stop}" 1>&2 exit 64 ;; esac exit 0 ----- snip ------------ &maple; を起動して試験を行ってください。 &prompt.user; cd /usr/local/maple/bin &prompt.user; ./xmaple 正常に動作することを確認したら、Maplesoft に対し、 ネイティブ &os; 版を希望することの連絡を検討してみてください。 落とし穴 lmgrd は、 ライセンスファイルに依存し、問題があると core dump してしまいます。 正しいライセンスファイルは以下のようなものです。 # ======================================================= # License File for UNIX Installations ("Pointer File") # ======================================================= SERVER chillig ANY #USE_SERVER VENDOR maplelmg FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \ PLATFORMS=i86_r ISSUER="Waterloo Maple Inc." \ ISSUED=11-may-2000 NOTICE=" Technische Universitat Wien" \ SN=XXXXXXXXX この例において、 シリアル番号およびキーは X に置き換えています。 chillig は、ホスト名です。 ライセンスファイルを編集する際に、 FEATURE の行を書き換えてしまうと、動かなくなるでしょう。 この行は、ライセンスキーで保護されています。 + --> + applications MATLAB この節では、&os; システムへ、&linux; 版の &matlab; version 6.5 をインストールするプロセスについて説明します。 で詳細を説明する &java.virtual.machine; を除けば、 極めてよく動作します。 &linux; 版の &matlab; は、 MathWorks (MathWorks) から購入しライセンスを入手できます。 ベンダに対し、ネイティブの &os; 版を必要としていることを伝えてください。 &matlab; のインストール &matlab; をインストールするには、以下のようにしてください。 インストールスクリプトで推奨されているように、 root になり、 インストール CD を挿入し、マウントしてください。 以下のように入力して、インストールスクリプトを実行してください。 &prompt.root; /compat/linux/bin/sh /cdrom/install インストーラはグラフィカルです。 ディスプレイを表示できなければ、 setenv HOME ~USER と実行してください。ここで、 USER は、 &man.su.1; を実行したユーザ名です。 &matlab; ルートディレクトリの入力を求められたら、 /compat/linux/usr/local/matlab と入力してください。 残りのインストールプロセスでの入力を簡単にするために、 シェルプロンプトで、set MATLAB=/compat/linux/usr/local/matlab と実行してください。 &matlab; ライセンスを入手時の手順に従い、 ライセンスファイルを編集してください。 エディタを使って、このファイルを準備してください。 そして、インストーラが $MATLAB/license.dat を編集するように尋ねる前に、 $MATLAB/license.dat にコピーしてください。 インストールプロセスを完了してください。 これで &matlab; のインストールは終わりました。 以下の手順は、&os; システムに結びつけるための glue です。 ライセンスマネージャの起動 ライセンスマネージャのスクリプトへのシンボリックリンクを作成してください。 &prompt.root; ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW &prompt.root; ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMW /usr/local/etc/rc.d/flexlm という名前のスタートアップファイルを作成してください。 以下の例は、配布されている $MATLAB/etc/rc.lm.glnx86 の改良版です。 変更点はファイルの位置、&linux; エミュレーションでライセンスマネージャを起動する点です。 #!/bin/sh case "$1" in start) if [ -f /usr/local/etc/lmboot_TMW ]; then /compat/linux/bin/sh /usr/local/etc/lmboot_TMW -u username && echo 'MATLAB_lmgrd' fi ;; stop) if [ -f /usr/local/etc/lmdown_TMW ]; then /compat/linux/bin/sh /usr/local/etc/lmdown_TMW > /dev/null 2>&1 fi ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0 ファイルに対し実行の権限を指定してください。 &prompt.root; chmod +x /usr/local/etc/rc.d/flexlm ここで、上記のコマンドの中の、 usernameroot ではないシステムのユーザ名に置き換えてください。 以下のコマンドでライセンスマネージャを起動してください。 &prompt.root; service flexlm start &java; Runtime Environment のリンク &java; Runtime Environment (JRE) のリンクを、 &os; の作業場所に変更してください。 &prompt.root; cd $MATLAB/sys/java/jre/glnx86/ &prompt.root; unlink jre; ln -s ./jre1.1.8 ./jre &matlab; 起動スクリプトの作成 以下の起動スクリプトを /usr/local/bin/matlab に置いてください。 #!/bin/sh /compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@" その後、 chmod +x /usr/local/bin/matlab コマンドを実行してください。 使用している emulators/linux_base のバージョンによっては、 このスクリプトを実行するとエラーが出ることがあります。 エラーを避けるには、 /compat/linux/usr/local/matlab/bin/matlab ファイルを編集して、以下の行を変更してください。 if [ `expr "$lscmd" : '.*->.*'` -ne 0 ]; then この行を、以下に置きかえてください。 if test -L $newbase; then &matlab; シャットダウンスクリプトの作成 以下のスクリプトは、&matlab; が正常に終了しない問題を解決します。 $MATLAB/toolbox/local/finish.m を作成して、以下の一行を加えてください。 ! $MATLAB/bin/finish.sh ここで $MATLAB は、 文字通り入力してください。 同じディレクトリの中には、 finishsav.m および finishdlg.m というファイルがあります。 それらのファイルは、終了する前にワークスペースを保存します。 これらのうちどちらかを使うには、 save コマンドのすぐ後に、 上記の行を挿入してください。 以下の行を含む、 $MATLAB/bin/finish.sh ファイルを作成してください。 #!/compat/linux/bin/sh (sleep 5; killall -1 matlab_helper) & exit 0 ファイルを実行可能に設定してください。 &prompt.root; chmod +x $MATLAB/bin/finish.sh &matlab; を使用する これで matlab を実行できるようになりました。 + While the Oracle website is unclear, the installation script is: You + are attempting to install 64-bit Oracle on a 32-bit operating system. + This is not supported and will not work. &oracle; のインストール MarcelMoolenaar寄贈: - アプリケーション Oracle このドキュメントでは &oracle; 8.0.5 および &oracle; 8.0.5.1 Enterprise Edition の &linux; 版を &os; にインストールするための手順を解説します。 &linux; 環境のインストール まずは Ports Collection から emulators/linux_base と - devel/linux_devtools + role='package'>emulators/linux_base をインストールしてください。 intelligent agent を起動したいなら Red Hat Tcl パッケージ tcl-8.0.3-20.i386.rpm もインストールしてください。 archivers/rpm port を使って、 RPM をインストールするには一般的に次のようにします。 &prompt.root; rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package このコマンドの実行時に、エラーが出てはいけません。 &oracle; 環境の構築 &oracle; をインストールする前に、 環境を適切に設定する必要があります。 この節では、&oracle; のインストールガイドに書いてあるようなことではなく、 &os; で &linux; 版の &oracle; を動かす方法についてのみを解説します。 カーネルのチューニング カーネルのチューニング &oracle; インストールガイドにあるように、 共有メモリの最大サイズを設定しなければいけません。 &os; では SHMMAX を使わないようにしてください。 SHMMAXSHMMAXPGS および PGSIZE から計算されます。 従って、SHMMAXPGS を使うようにしましょう。 インストールガイドに記述されている他のオプションは使えます。 例えば以下のようにします。 options SHMMAXPGS=10000 options SHMMNI=100 options SHMSEG=10 options SEMMNS=200 options SEMMNI=70 options SEMMSL=61 これらのオプションを意図した &oracle; の使い方に合わせて設定してください。 また、 次のオプションがカーネルのコンフィギュレーションファイルにあることも確認します。 options SYSVSHM #SysV shared memory options SYSVSEM #SysV semaphores options SYSVMSG #SysV interprocess communication &oracle; 用アカウント oracle アカウントとして使われるユーザアカウントを作成してください。 oracle 用のアカウントに特別なのは Linux のシェルを割り当てるところだけです。 /etc/shells/compat/linux/bin/bash を加え、oracle 用のアカウントに設定します。 環境設定 ORACLE_HOMEORACLE_SID といった通常の &oracle; 用の変数の他に次の変数も設定しなければなりません。 変数 LD_LIBRARY_PATH $ORACLE_HOME/lib CLASSPATH $ORACLE_HOME/jdbc/lib/classes111.zip PATH /compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin /compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ORACLE_HOME/bin すべての環境変数は ~/.profile で以下のように設定することをお勧めします。 ORACLE_BASE=/oracle; export ORACLE_BASE ORACLE_HOME=/oracle; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib export LD_LIBRARY_PATH ORACLE_SID=ORCL; export ORACLE_SID ORACLE_TERM=386x; export ORACLE_TERM CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip export CLASSPATH PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin PATH=$PATH:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin export PATH &oracle; のインストール インストーラを起動する前に、 oracle ユーザ所有の /var/tmp/.oracle という名前のディレクトリを作る必要があります。 これで特に問題なく &oracle; がインストールできるでしょう。 もし問題が起こったら、まずは &oracle; の配布物や設定をチェックしてください。 &oracle; のインストールが終わったら、 次の二つの節で解説するパッチを当ててください。 よくあるトラブルは、TCP プロトコルアダプタが正しくインストールされていないことです。 そのため、一切 TCP リスナを起動することができないのです。 次の操作はこの問題を解決するのに役立ちます。 &prompt.root; cd $ORACLE_HOME/network/lib &prompt.root; make -f ins_network.mk ntcontab.o &prompt.root; cd $ORACLE_HOME/lib &prompt.root; ar r libnetwork.a ntcontab.o &prompt.root; cd $ORACLE_HOME/network/lib &prompt.root; make -f ins_network.mk install もう一度 root.sh を起動するのを忘れないようにしてください。 <filename>root.sh</filename> へのパッチ &oracle; をインストールする時、 root で行なう必要のあるいくつかの操作は root.sh と呼ばれるシェルスクリプトに記録されます。 このスクリプトは、orainst にあります。次のパッチを root.sh に当てて、 &os; の chown コマンドの正しい場所を指定するか、 代わりに &linux; ネイティブなシェルのもとでスクリプトを走らせてください。 *** orainst/root.sh.orig Tue Oct 6 21:57:33 1998 --- orainst/root.sh Mon Dec 28 15:58:53 1998 *************** *** 31,37 **** # This is the default value for CHOWN # It will redefined later in this script for those ports # which have it conditionally defined in ss_install.h ! CHOWN=/bin/chown # # Define variables to be used in this script ---- 31,37 ---- + --- 31,37 ---- # This is the default value for CHOWN # It will redefined later in this script for those ports # which have it conditionally defined in ss_install.h ! CHOWN=/usr/sbin/chown # # Define variables to be used in this script &oracle; を CD-ROM からインストールしない場合は root.sh のソースにパッチを当ててもいいでしょう。 rthd.sh という名前でソースツリーの orainst にあります。 <filename>genclntsh</filename> へのパッチ genclntsh スクリプトは、 デモを作る時に一つの共有クライアントライブラリを生成するのに用いられます。 PATH の定義をコメントアウトするために次のパッチを当ててください。 *** bin/genclntsh.orig Wed Sep 30 07:37:19 1998 --- bin/genclntsh Tue Dec 22 15:36:49 1998 *************** *** 32,38 **** # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! PATH=/usr/local/bin:/bin:/usr/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst --- 32,38 ---- # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! #PATH=/usr/local/bin:/bin:/usr/bin: export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst &oracle; の起動 これまでの手順に従えば、&linux; でと同じように &oracle; を起動できるでしょう。 +?> 高度なトピックス この節では、&linux; バイナリ互換機能がどのような仕組みで動作をしているかを説明します。 以下の文章は &a.chat; に投稿された Terry Lambert (tlambert@primenet.com) 氏のメール (Message ID: <199906020108.SAA07001@usr09.primenet.com>) をもとにしています。 execution class loader &os; は、実行クラスローダ (execution class loader) と呼ばれる抽象的な機構を持っています。これは &man.execve.2; システムコールへの楔という形で実装されています。 歴史的には、&unix; のローダはマジックナンバー (一般的にはファイルの先頭の 4 ないし 8 バイトの部分) の検査を行ない、システムで実行できるバイナリかどうかを検査し、 もしそうならバイナリローダを呼び出すというようになっていました。 もし、そのシステム用のバイナリでない場合には、 &man.execve.2; システムコールの呼び出しは失敗の戻り値を返し、 シェルがシェルコマンドとして実行しようと試みていたわけです。 この仮定は現在利用しているシェルがどのようなものであってもデフォルトでした。 後に &man.sh.1; に変更が加えられ、先頭の 2 バイトを検査した結果 :\n であれば代わりに &man.csh.1; を呼び出す、 というようになりました。 &os; は、単一のローダではなく、ローダの一覧を走査します。 動作しているシェルインタプリタもしくはシェルスクリプトとして、 該当するものが存在しなければ、#! ローダが用いられます。 ELF Solaris &linux; ABI をサポートするため、&os; は ELF バイナリを示すマジックナンバを確認します。 ELF ローダは、特殊なマーク (brand) があるかどうか探します。 このマークとは、ELF イメージのコメントセクションのことです。 SVR4/&solaris; の ELF バイナリには、このセクションは存在しません。 &linux; バイナリを実行するためには、 &man.brandelf.1; を使って Linux のマークが付けられていなければなりません。 &prompt.root; brandelf -t Linux file ELF branding ELF ローダが Linux マークを確認すると、 ローダは proc 構造体内の ある一つのポインタを置き換えます。システムコールは全て、 このポインタを通してインデックスされます。 さらに、そのプロセスには &linux; カーネルモジュールに必要なシグナルトランポリンコード (訳注: シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や、 他の (細かな) 調整のための設定が行なわれます。 &linux; システムコールベクタは、 さまざまなデータに加えて sysent[] エントリーのリストを含んでおり、 それらのアドレスはカーネルモジュール内にあります。 &linux; バイナリがシステムコールを発行する際、トラップコードは proc 構造体を用いてシステムコール関数ポインタを 解釈します。そして &os; ではなく &linux; 用のシステムコールエントリポイントを得るわけです。 &linux; モードは状況に応じてファイルシステム本来のルートマウントポイントを置き換えてファイルの参照を行ないます。 これは、 オプションを指定してマウントされたファイルシステムが行なっていることと同じです。 ファイルを検索する際にはまず /compat/linux/original-path を調べます。見つけられなかったときには、/original-path を調べます。 こうすることで、他のバイナリを要求するバイナリの実行を可能にしています。 たとえば、&linux; 用ツールチェインは &linux; ABI サポート環境下で完全に動作します。 またこれは、もし対応する &linux; バイナリが存在しない場合に &linux; バイナリが &os; バイナリをロードしたり、 実行したりすることが可能であること、 その &linux; バイナリに自分自身が &linux; 上で実行されていないことを 気付かせないようにする目的で、&man.uname.1; コマンドを /compat/linux ディレクトリに置くことができる、 ということを意味します。 要するに、&linux; カーネルが &os; カーネルの内部に存在しているわけです。 カーネルによって提供されるサービス全ての実装の基礎となるさまざまな関数は &os; システムコールテーブルエントリと &linux; システムコールテーブルエントリの両方で共通に利用されています。 これらにはファイルシステム処理、仮想メモリ処理、シグナル伝送、 System V IPC が含まれますが、 &os; バイナリは &os; グルー (訳注: glue; 二者の間を仲介するという意味) 関数群、 そして &linux; バイナリは &linux; グルー関数群を用いる、 という点だけが異なります。 &os; のグルー関数群は、 カーネルの中に静的にリンクされ、 &linux; のグルー関数群は静的にリンクすることも、 カーネルモジュールを介して利用することもできるようになっています。 技術的には、これはエミュレーションではなく、 ABI の実装です。 よく &linux; エミュレーションと呼ばれるのは、 この機能が初めて実装された頃、 この機能を表現する言葉がなかったためです。 コードをコンパイルしてはいないので、 &os; 上で &linux; バイナリを実行するという表現は、 厳密に考えると適切ではありません。