- Merge the following from the English version:

r42961 -> r44294	head/ja_JP.eucJP/books/handbook/linuxemu/chapter.xml
This commit is contained in:
Ryusuke SUZUKI 2016-03-30 12:23:57 +00:00
parent e3c0058719
commit da84bc0b1c
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=48504

View file

@ -3,46 +3,63 @@
The FreeBSD Documentation Project
The FreeBSD Japanese Documentation Project
Original revision: r42961
Original revision: r44294
$FreeBSD$
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="linuxemu">
<info><title>&linux; バイナリ互換機能</title>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="linuxemu">
<info>
<title>&linux; バイナリ互換機能</title>
<authorgroup>
<author><personname><firstname>Jim</firstname><surname>Mock</surname></personname><contrib>再構成と一部の更新: </contrib></author>
<author>
<personname>
<firstname>Jim</firstname>
<surname>Mock</surname>
</personname>
<contrib>再構成と一部の更新: </contrib>
</author>
<!-- 22 Mar 2000 -->
</authorgroup>
<authorgroup>
<author><personname><firstname>Brian N.</firstname><surname>Handy</surname></personname><contrib>オリジナルの文書を執筆: </contrib></author>
<author><personname><firstname>Rich</firstname><surname>Murphey</surname></personname></author>
<author>
<personname>
<firstname>Brian N.</firstname>
<surname>Handy</surname>
</personname>
<contrib>オリジナルの文書を執筆: </contrib>
</author>
<author>
<personname>
<firstname>Rich</firstname>
<surname>Murphey</surname>
</personname>
</author>
</authorgroup>
</info>
<!-- <para><emphasis>訳: &a.jp.kiroh;、1996 年 9 月 24 日</emphasis></para> -->
<sect1 xml:id="linuxemu-synopsis">
<title>この章では</title>
<indexterm><primary>Linux
バイナリ互換機能</primary>
<indexterm>
<primary>Linux バイナリ互換機能</primary>
</indexterm>
<indexterm>
<primary>バイナリ互換機能</primary>
<secondary>Linux</secondary>
</indexterm>
<para>&os; は、&linux; とのバイナリ互換機能を提供しています。
このバイナリ互換機能により、ユーザは &linux; のバイナリを
&os; システム上にインストールして実行することが可能になります。
たくさんの会社や開発者たちは、
&linux; のためだけに開発を行なっていますが、
バイナリ互換機能により &os; のユーザはすべての &linux; アプリケーションの
90% を修正なしに実行できます。
この中には、生産的なアプリケーションやゲームなどが含まれます。
ある状況においては &linux; バイナリを &linux; で動かすよりも
<para>&os; は、&linux; と 32 ビットのバイナリ互換機能を提供しています。
このバイナリ互換機能を使うことで、ユーザはほとんどの 32 ビットの
&linux; バイナリを、変更することなしに &os;
システム上にインストールして実行することが可能になります。
ある状況においては 32 ビットの &linux; バイナリを &linux; で動かすよりも
&os; で動かすほうが良いパフォーマンスが出るという報告もあります。</para>
<para>しかしながら、いくつかの &linux;
@ -50,9 +67,12 @@
ではサポートされていません。たとえば、
仮想 8086 モードを有効にするような &i386;
特有の呼び出しを過度に使う
&linux; バイナリは &os; では動きません。</para>
&linux; バイナリは &os; では動きません。
また、現在のところ 64 ビットの &linux;
バイナリには対応していません。</para>
<para>この章を読むと、以下のことがわかります。</para>
<itemizedlist>
<listitem>
<para>&os; システムで &linux; バイナリ互換機能を有効にする方法。</para>
@ -83,122 +103,90 @@
</sect1>
<sect1 xml:id="linuxemu-lbc-install">
<title>インストール</title>
<title>&linux; バイナリ互換機能の設定</title>
<indexterm><primary>Ports Collection</primary></indexterm>
<para>&linux; ライブラリは、デフォルトでは &os; にインストールされません。
また、&linux; バイナリ互換機能も、デフォルトでは有効ではありません。
&linux; ライブラリは、
&os; Ports Collection を使ってインストールできます。
&linux; ライブラリを
<link linkend="linuxemu-libs-manually">手動</link>
でインストールすることもできます。</para>
&os; Ports Collection を使ってインストールできます。</para>
<para>&linux; ライブラリをインストールする最も簡単な方法は、
Ports Collection を使う方法です。</para>
<para>&linux;
ライブラリおよびバイナリの基本セットを &os;
システムにインストールする最も簡単な方法は、
<package>emulators/linux-base-f10</package> package または port
を使う方法です。port をインストールするには、
以下のコマンドを実行してください。</para>
<screen>&prompt.root; <userinput>cd
/usr/ports/emulators/linux_base-f10</userinput> &prompt.root; <userinput>make install distclean</userinput></screen>
<screen>&prompt.root; <userinput>cd /usr/ports/emulators/linux_base-f10</userinput>
&prompt.root; <userinput>make install distclean</userinput></screen>
<para>port をインストールしたら、
<literal>linux</literal> モジュールを読み込んで、
&linux; バイナリ互換機能を有効にしてください。
<systemitem class="username">root</systemitem> 権限で、
以下を実行してください。</para>
<para>port をインストールしたら、
<literal>linux</literal> モジュールを読み込んで、
&linux; バイナリ互換機能を有効にしてください。</para>
<screen>&prompt.root; <userinput>kldload linux</userinput></screen>
<screen>&prompt.root; <userinput>kldload linux</userinput></screen>
<para>&linux; 互換機能を起動時から常に有効にする場合には、
<filename>/etc/rc.conf</filename> に以下の行を追加してください。</para>
<programlisting>linux_enable="YES"</programlisting>
<para>モジュールがロードされていることを確認するには、
&man.kldstat.8; コマンドを利用してください。</para>
<para>以下のようにしてモジュールが読み込まれていることを確認してください。</para>
<screen>&prompt.user; <userinput>kldstat</userinput>
Id Refs Address Size Name
1 2 0xc0100000 16bdb8 kernel
7 1 0xc24db000 d000 linux.ko</screen>
<para>起動時から &linux; 互換機能を有効にする場合には、
<filename>/etc/rc.conf</filename> に以下の行を追加してください。</para>
<programlisting>linux_enable="YES"</programlisting>
<indexterm>
<primary>カーネルオプション</primary>
<secondary>COMPAT_LINUX</secondary>
</indexterm>
<para>&linux; バイナリ互換機能をカーネルに静的にリンクする場合には、
<para>&linux;
バイナリ互換機能をカスタムカーネルに静的にリンクする場合には、
<literal>options COMPAT_LINUX</literal>
をカーネルコンフィグレーションファイルに追加してください。
をカスタムカーネルコンフィグレーションファイルに追加してください。
そして、<xref linkend="kernelconfig"/>
の説明にしたがって新しいカーネルをコンパイルしてインストールしてください。</para>
<sect2 xml:id="linuxemu-libs-manually">
<title>手動でのライブラリのインストール</title>
<title>手動によるライブラリの追加のインストール</title>
<para>&linux; ライブラリのインストールには、
Ports Collection を使用することが推奨されていますが、
手動でインストールすることもできます。
プログラムが必要とする &linux;
の共有ライブラリとランタイムリンカを <filename
class="directory">/compat/linux</filename>
にコピーする必要があります。
&os; で動作する &linux; プログラムが使用する共有ライブラリは、
まずこのディレクトリから検索されます。たとえば、
&linux; のプログラムが <filename>/lib/libc.so</filename>
をロードしようとした場合には、&os; はまず
<filename>/compat/linux/lib/libc.so</filename>
を開こうとします。これが存在しない場合には、次に
<filename>/lib/libc.so</filename> を試します。
共有ライブラリは、&linux;<command>ld.so</command>
が報告するパスではなく、
<filename class="directory">/compat/linux/lib</filename>
以下にインストールする必要があります。</para>
<indexterm>
<primary>共有ライブラリ</primary>
</indexterm>
<para>通常は、&linux;
のバイナリが必要とする共有ライブラリを探す必要があるのは、
&os; のシステムに &linux;
のプログラムをインストールする最初の数回だけです。
それが過ぎれば、十分な &linux;
の共有ライブラリがシステムにインストールされ、
新しくインストールした &linux;
のバイナリも余計な作業をせずに動作させることができるようになります。</para>
<sect3>
<title>共有ライブラリの追加</title>
<indexterm><primary>共有ライブラリ</primary></indexterm>
<para><filename>linux_base</filename> port をインストールした後に、
<para>&linux; バイナリ互換機能を設定した後に、&linux;
アプリケーションが必要な共有ライブラリが存在しないというエラーを出した場合には、
&linux;
バイナリがどの共有ライブラリを必要としているかを
<systemitem class="username">root</systemitem>
により指定する 2 種類の方法があります。</para>
バイナリがどの共有ライブラリを必要としているかを確認して、
手動でインストールしてください。</para>
<para>&linux; システムを利用できるのであれば、
そのアプリケーションがどういう共有ライブラリを必要としているかを調べ、
&os; にそのライブラリをコピーしてください。</para>
<informalexample>
<para>この例では、FTP を使って &linux; システムから
<application>Doom</application>&linux;
バイナリをダウンロードします。
どの共有ライブラリが必要かを調べるには、
<command>ldd linuxdoom</command>
を実行してください。</para>
<para>&linux; システムで、<command>ldd</command> を使うことにより、
アプリケーションが必要とする共有ライブラリを調べることができます。
たとえば、<command>linuxdoom</command>
が必要とする共有ライブラリを調べるには、
<application>Doom</application> がインストールされている
&linux; システム上で、以下のコマンドを実行してください。</para>
<screen>&prompt.user; <userinput>ldd linuxxdoom</userinput>
libXt.so.3 (DLL Jump 3.1) =&gt; /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) =&gt; /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</screen>
<indexterm><primary>シンボリックリンク</primary></indexterm>
<para>最後のカラムに表示されているすべてのファイルを
<indexterm>
<primary>シンボリックリンク</primary>
</indexterm>
<para>&linux;
システムでの出力の最後のカラムに表示されているすべてのファイルを
&os; システムの
<filename class="directory">/compat/linux</filename>
の下にコピーして、
最初のカラムに示されるファイル名でコピーしたファイルに対してシンボリックリンクを張ります。
の下にコピーしてください。
コピーしたら、
最初のカラムに示されるファイル名でコピーしたファイルに対してシンボリックリンクを張ってください。
この例では、&os;
システムで以下のようになります。</para>
@ -209,8 +197,6 @@ libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</screen>
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.29</screen>
<blockquote>
<note>
<para><command>ldd</command>
の出力の最初のカラムに表示されているメジャーバージョンが同じ
&linux;
@ -220,92 +206,86 @@ libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</screen>
ただ、新しいバージョンの共有ライブラリがある場合には、
コピーすることをお奨めします。
新しいライブラリにシンボリックリンクを変更したら、
古いライブラリは削除してかまいません。
たとえば、以下のライブラリがシステムに存在するとします。</para>
古いライブラリは削除してかまいません。</para>
<para>たとえば、以下のライブラリがすでに
&os; システムに存在するとします。</para>
<screen>/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.27</screen>
<para>そして、バイナリに対する <command>ldd</command>
の出力が以下のように、
新しいバージョンを必要とする場合を考えます。</para>
<para>そして、<command>ldd</command> の出力が以下のように、
バイナリが新しいバージョンを必要とする場合を考えます。</para>
<screen>libc.so.4 (DLL Jump 4.5pl26) -&gt; libc.so.4.6.29</screen>
<para>このように最後の番号が 1 つか 2 つ古いだけならば、
わずかに古いライブラリでもプログラムは動作するはずなので、
<filename>/lib/libc.so.4.6.29</filename>
をコピーする必要はありません。
<para>存在しているライブラリの最後の番号が
1 つか 2 つ古いだけなので、
わずかに古いライブラリでもプログラムは動作するはずです。
しかしながら、<filename>libc.so</filename>
を置き換えるのが安全です。</para>
新しいバージョンに置き換えるのが安全です。</para>
<screen>/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.29</screen>
</note>
</blockquote>
<blockquote>
<note>
<para>シンボリックリンクのメカニズムは &linux;
バイナリに<emphasis>のみ</emphasis>必要なことに注意してください。
&os;
のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索します。</para>
</note>
</blockquote>
</informalexample>
</sect3>
<para>通常は、&linux;
のバイナリが必要とする共有ライブラリを探す必要があるのは、
&os; のシステムに &linux;
のプログラムをインストールする最初の数回だけです。
それが過ぎれば、十分な &linux;
の共有ライブラリがシステムに存在するので、
新しくインストールした &linux;
のバイナリも追加の作業をせずに動作させることができるようになります。</para>
</sect2>
<sect2>
<title>&linux;ELF バイナリのインストール</title>
<title>&linux;<acronym>ELF</acronym> バイナリのインストール</title>
<indexterm>
<primary>Linux</primary>
<secondary>ELF バイナリ</secondary>
</indexterm>
<para>ELF のバイナリを使うためには、
<quote>マークをつける (branding)</quote> 作業が必要になります。
マークのない ELF バイナリを実行しようとすると、
<para><acronym>ELF</acronym> のバイナリを使うためには、
追加の作業が必要です。
マークのない (unbranded) <acronym>ELF</acronym>
バイナリを実行しようとすると、
以下のようなエラーメッセージが表示されてしまうことでしょう。</para>
<screen>&prompt.user; <userinput>./my-linux-elf-binary</userinput>
ELF binary type not known
Abort</screen>
<para>&os; のカーネルが &os;ELF バイナリと &linux;
<para>&os; のカーネルが &os;<acronym>ELF</acronym> バイナリと &linux;
のバイナリとを見分けられるようにするために、&man.brandelf.1;
を以下のようにして使ってください。</para>
<screen>&prompt.user; <userinput>brandelf -t Linux my-linux-elf-binary</userinput></screen>
<indexterm><primary>GNU ツールチェイン</primary></indexterm>
<para>GNU のツール群が
ELF バイナリに自動的に適切なマークを付加するようになったので、
<indexterm>
<primary>GNU ツールチェイン</primary>
</indexterm>
<para>GNU のツール群が <acronym>ELF</acronym>
バイナリに自動的に適切なマークを付加するようになったので、
この作業は通常必要ありません。</para>
</sect2>
<sect2>
<title>&linux; RPM ベースのアプリケーションのインストール</title>
<title>&linux; <acronym>RPM</acronym>
ベースのアプリケーションのインストール</title>
<para>&os; は、Ports Collection
からインストールされたすべてのソフトウェアの追跡に独自の
package データベースを使っています。
しかしながら、&linux; RPM データベースには対応していません。</para>
<para>&linux; RPM ベースのアプリケーションをインストールするには、
最初に、<filename
role="package">archivers/rpm2cpio</filename> package または
<para>&linux; <acronym>RPM</acronym>
ベースのアプリケーションをインストールするには、
最初に <package>archivers/rpm2cpio</package> package または
port をインストールしてください。
インストールを行うと、
<systemitem class="username">root</systemitem>
は、以下のコマンドを使うことで、
インストールすると、このコマンドを
<systemitem class="username">root</systemitem> 権限で使うことで、
<filename>.rpm</filename> をインストールできます。</para>
<screen>&prompt.root; <userinput>cd /compat/linux</userinput>
&prompt.root; <userinput>rpm2cpio -q &lt; /path/to/linux.archive.rpm | cpio -id</userinput></screen>
<para>必要に応じて、インストールした ELF
<para>必要に応じて、インストールした <acronym>ELF</acronym>
バイナリに <command>brandelf</command> を実行してください。
綺麗にアンインストールできないかもしれませんので注意してください。</para>
</sect2>
@ -313,7 +293,7 @@ Abort</screen>
<sect2>
<title>ホストネームリゾルバの設定</title>
<para>DNS がうまく動作しなかったり、
<para><acronym>DNS</acronym> がうまく動作しなかったり、
以下のようなエラーメッセージが表示される場合は、
<filename>/compat/linux/etc/host.conf</filename>
ファイルを以下のように設定する必要があります。</para>
@ -327,7 +307,7 @@ Abort</screen>
multi on</programlisting>
<para>この設定では <filename>/etc/hosts</filename> を最初に検索し、
次に DNS を検索するように指定します。
次に <acronym>DNS</acronym> を検索するように指定します。
<filename>/compat/linux/etc/host.conf</filename>
が存在しない場合には、
&linux; アプリケーションは
@ -340,10 +320,12 @@ multi on</programlisting>
</sect1>
<?ignore
While the installer works, the binaries do not. As of Oct 2013, Linux
emulation is 32-bit but the trial version of Mathematica is only
available as 64-bit. This section should be revisited if Linux
While the installer works, the binaries do not. As of Oct 2013,
Linux emulation is 32-bit but the trial version of Mathematica is
only available as 64-bit. This section should be revisited if Linux
emulation gets 64-bit binary support.
<sect1 xml:id="linuxemu-mathematica">
<info><title>&mathematica; のインストール</title>
<authorgroup>
@ -377,7 +359,7 @@ multi on</programlisting>
package または port がインストールされていることと、
&man.linprocfs.5;
ファイルシステムがマウントされていることを確認してください。</para>
<screen>&prompt.root; <userinput>sysctl kern.fallback_elf_brand=3</userinput></screen>
<para>これで &os; はマーク付が行われていない ELF バイナリは
@ -418,8 +400,7 @@ Installation complete.</programlisting>
これはつまり、これらのフォントを CD-ROM や
<application>&mathematica;</application>
がインストールされているホストマシンからローカルマシンにコピーしなければならないということです。
これらのフォントは通常、CD-ROM の
<filename
これらのフォントは通常、CD-ROM の <filename
class="directory">/cdrom/Unix/Files/SystemFiles/Fonts</filename>
か、もしくはハードディスクの <filename
class="directory">/usr/local/mathematica/SystemFiles/Fonts</filename>
@ -476,9 +457,9 @@ Installation complete.</programlisting>
-->
<!--
As of October 2013, the trial version is only available in the
Professional and Academic editions (not the Student or Personal
editions) and requires a contact with a product specialist before
As of October 2013, the trial version is only available in the
Professional and Academic editions (not the Student or Personal
editions) and requires a contact with a product specialist before
the evaluation download link is made available.
<sect1 xml:id="linuxemu-maple">
<info><title>&maple; のインストール</title>
@ -567,9 +548,11 @@ Installation complete.</programlisting>
<filename>bin/maple.system.type</filename> を呼び出します。
このスクリプトは、<command>uname -a</command> を実行し、
オペレーティングシステムの名前を入手します。
OS 名にから、どのバイナリを使用するかを判断します。</para></step>
OS 名にから、どのバイナリを使用するかを判断します。</para>
</step>
<step><para>ライセンスサーバを起動してください。</para>
<step>
<para>ライセンスサーバを起動してください。</para>
<para><filename>/usr/local/etc/rc.d/lmgrd</filename>
としてインストールされる、以下のスクリプトは、
@ -600,28 +583,30 @@ stop)
esac
exit 0
----- snip ------------</programlisting></step>
----- snip ------------</programlisting>
</step>
<step>
<para><application>&maple;</application>
を起動して試験を行ってください。</para>
<step><para><application>&maple;</application>
を起動して試験を行ってください。</para>
<screen>&prompt.user; <userinput>cd /usr/local/maple/bin</userinput>
<screen>&prompt.user; <userinput>cd /usr/local/maple/bin</userinput>
&prompt.user; <userinput>./xmaple</userinput></screen>
<para>正常に動作することを確認したら、Maplesoft に対し、
ネイティブ &os;
版を希望することの連絡を検討してみてください。</para></step>
<para>正常に動作することを確認したら、Maplesoft に対し、
ネイティブ &os;
版を希望することの連絡を検討してみてください。</para>
</step>
</procedure>
<sect2>
<title>落とし穴</title>
<sect2>
<title>落とし穴</title>
<itemizedlist>
<listitem><para><command>lmgrd</command> は、
ライセンスファイルに依存し、問題があると
core dump してしまいます。
正しいライセンスファイルは以下のようなものです。</para>
<itemizedlist>
<listitem><para><command>lmgrd</command> は、
ライセンスファイルに依存し、問題があると
core dump してしまいます。
正しいライセンスファイルは以下のようなものです。</para>
<programlisting># =======================================================
# License File for UNIX Installations ("Pointer File")
@ -645,17 +630,20 @@ FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
<para>ライセンスファイルを編集する際に、
<quote>FEATURE</quote>
の行を書き換えてしまうと、動かなくなるでしょう。
この行は、ライセンスキーで保護されています。</para></listitem>
</itemizedlist>
</sect2>
</sect1>
この行は、ライセンスキーで保護されています。</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
-->
<!--
As of October, 2013, the Linux version of Matlab is only available for 64-bit.
<sect1 xml:id="linuxemu-matlab">
<info>
<title>&matlab; のインストール</title>
-->
<!--
As of October, 2013, the Linux version of Matlab is only available
for 64-bit.
<sect1 xml:id="linuxemu-matlab">
<info>
<title>&matlab; のインストール</title>
<authorgroup>
<author>
<personname>
@ -872,8 +860,10 @@ exit 0</programlisting>
<programlisting>! $MATLAB/bin/finish.sh</programlisting>
<note><para>ここで <literal>$MATLAB</literal> は、
文字通り入力してください。</para></note>
<note>
<para>ここで <literal>$MATLAB</literal> は、
文字通り入力してください。</para>
</note>
<tip>
<para>同じディレクトリの中には、
@ -882,15 +872,16 @@ exit 0</programlisting>
それらのファイルは、終了する前にワークスペースを保存します。
これらのうちどちらかを使うには、
<literal>save</literal> コマンドのすぐ後に、
上記の行を挿入してください。</para></tip>
</step>
上記の行を挿入してください。</para>
</tip>
</step>
<step>
<para>以下の行を含む、
<filename>$MATLAB/bin/finish.sh</filename>
ファイルを作成してください。</para>
<step>
<para>以下の行を含む、
<filename>$MATLAB/bin/finish.sh</filename>
ファイルを作成してください。</para>
<programlisting>#!/compat/linux/bin/sh
<programlisting>#!/compat/linux/bin/sh
(sleep 5; killall -1 matlab_helper) &amp;
exit 0</programlisting>
</step>
@ -915,6 +906,7 @@ exit 0</programlisting>
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.
<info><title>&oracle; のインストール</title>
<authorgroup>
<author><personname><firstname>Marcel</firstname><surname>Moolenaar</surname></personname><contrib>寄贈: </contrib></author>
@ -963,7 +955,9 @@ exit 0</programlisting>
<sect3 xml:id="linuxemu-kernel-tuning">
<title>カーネルのチューニング</title>
<indexterm><primary>カーネルのチューニング</primary></indexterm>
<indexterm>
<primary>カーネルのチューニング</primary>
</indexterm>
<para><application>&oracle;</application>
インストールガイドにあるように、
@ -1021,26 +1015,23 @@ options SYSVMSG #SysV interprocess communication</programlisting>
<thead>
<row>
<entry>変数</entry>
<entry></entry>
</row>
</thead>
<tbody>
<row>
<entry><envar>LD_LIBRARY_PATH</envar></entry>
<entry><literal>$ORACLE_HOME/lib</literal></entry>
</row>
<row>
<entry><envar>CLASSPATH</envar></entry>
<entry><literal>$ORACLE_HOME/jdbc/lib/classes111.zip</literal></entry>
</row>
<row>
<entry><envar>PATH</envar></entry>
<entry><literal>/compat/linux/bin
/compat/linux/sbin
/compat/linux/usr/bin
@ -1133,23 +1124,23 @@ export PATH</programlisting>
#
# Define variables to be used in this script</programlisting>
<para><application>&oracle;</application>
を CD-ROM からインストールしない場合は <filename>root.sh</filename>
のソースにパッチを当ててもいいでしょう。
<filename>rthd.sh</filename> という名前でソースツリーの
<filename class="directory">orainst</filename>
にあります。</para>
</sect3>
<para><application>&oracle;</application>
を CD-ROM からインストールしない場合は <filename>root.sh</filename>
のソースにパッチを当ててもいいでしょう。
<filename>rthd.sh</filename> という名前でソースツリーの
<filename class="directory">orainst</filename>
にあります。</para>
</sect3>
<sect3 xml:id="linuxemu-patch-tcl">
<title><filename>genclntsh</filename> へのパッチ</title>
<sect3 xml:id="linuxemu-patch-tcl">
<title><filename>genclntsh</filename> へのパッチ</title>
<para><command>genclntsh</command> スクリプトは、
デモを作る時に一つの共有クライアントライブラリを生成するのに用いられます。
<envar>PATH</envar>
の定義をコメントアウトするために次のパッチを当ててください。</para>
<para><command>genclntsh</command> スクリプトは、
デモを作る時に一つの共有クライアントライブラリを生成するのに用いられます。
<envar>PATH</envar>
の定義をコメントアウトするために次のパッチを当ててください。</para>
<programlisting>*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998
<programlisting>*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998
--- bin/genclntsh Tue Dec 22 15:36:49 1998
***************
*** 32,38 ****
@ -1176,7 +1167,7 @@ export PATH</programlisting>
<application>&oracle;</application> を起動できるでしょう。</para>
</sect2>
</sect1>
?>
?>
<sect1 xml:id="linuxemu-advanced">
<title>高度なトピックス</title>
@ -1213,8 +1204,13 @@ export PATH</programlisting>
該当するものが存在しなければ、<literal>#!</literal>
ローダが用いられます。</para>
<indexterm><primary>ELF</primary></indexterm>
<indexterm><primary>Solaris</primary></indexterm>
<indexterm>
<primary>ELF</primary>
</indexterm>
<indexterm>
<primary>Solaris</primary>
</indexterm>
<para>&linux; <acronym>ABI</acronym> をサポートするため、&os;
ELF バイナリを示すマジックナンバを確認します。
@ -1229,75 +1225,75 @@ export PATH</programlisting>
<screen>&prompt.root; <userinput>brandelf -t Linux file</userinput></screen>
<indexterm>
<primary>ELF</primary>
<secondary>branding</secondary>
</indexterm>
<indexterm>
<primary>ELF</primary>
<secondary>branding</secondary>
</indexterm>
<para>ELF ローダが <literal>Linux</literal> マークを確認すると、
ローダは <literal>proc</literal> 構造体内の
ある一つのポインタを置き換えます。システムコールは全て、
このポインタを通してインデックスされます。
さらに、そのプロセスには &linux;
カーネルモジュールに必要なシグナルトランポリンコード (訳注:
シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や、
他の (細かな) 調整のための設定が行なわれます。</para>
<para>ELF ローダが <literal>Linux</literal> マークを確認すると、
ローダは <literal>proc</literal> 構造体内の
ある一つのポインタを置き換えます。システムコールは全て、
このポインタを通してインデックスされます。
さらに、そのプロセスには &linux;
カーネルモジュールに必要なシグナルトランポリンコード (訳注:
シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や、
他の (細かな) 調整のための設定が行なわれます。</para>
<para>&linux; システムコールベクタは、
さまざまなデータに加えて <literal>sysent[]</literal>
エントリーのリストを含んでおり、
それらのアドレスはカーネルモジュール内にあります。</para>
<para>&linux; システムコールベクタは、
さまざまなデータに加えて <literal>sysent[]</literal>
エントリーのリストを含んでおり、
それらのアドレスはカーネルモジュール内にあります。</para>
<para>&linux; バイナリがシステムコールを発行する際、トラップコードは
<literal>proc</literal> 構造体を用いてシステムコール関数ポインタを
解釈します。そして &os; ではなく
&linux; 用のシステムコールエントリポイントを得るわけです。</para>
<para>&linux; バイナリがシステムコールを発行する際、トラップコードは
<literal>proc</literal> 構造体を用いてシステムコール関数ポインタを
解釈します。そして &os; ではなく
&linux; 用のシステムコールエントリポイントを得るわけです。</para>
<para>&linux;
モードは状況に応じて<emphasis>ファイルシステム本来のルートマウントポイントを置き換えて</emphasis>ファイルの参照を行ないます。
これは、<option>union</option>
オプションを指定してマウントされたファイルシステムが行なっていることと同じです。
ファイルを検索する際にはまず <filename
class="directory">/compat/linux/original-path</filename>
を調べます。見つけられなかったときには、<filename
class="directory">/<replaceable>original-path</replaceable></filename>
を調べます。
こうすることで、他のバイナリを要求するバイナリの実行を可能にしています。
たとえば、&linux; 用ツールチェインは
&linux; ABI サポート環境下で完全に動作します。
またこれは、もし対応する &linux; バイナリが存在しない場合に
&linux; バイナリが &os; バイナリをロードしたり、
実行したりすることが可能であること、
その &linux; バイナリに自分自身が &linux; 上で実行されていないことを
気付かせないようにする目的で、&man.uname.1; コマンドを
<filename class="directory">/compat/linux</filename>
ディレクトリに置くことができる、
ということを意味します。</para>
<para>&linux;
モードは状況に応じて<emphasis>ファイルシステム本来のルートマウントポイントを置き換えて</emphasis>ファイルの参照を行ないます。
これは、<option>union</option>
オプションを指定してマウントされたファイルシステムが行なっていることと同じです。
ファイルを検索する際にはまず <filename
class="directory">/compat/linux/original-path</filename>
を調べます。見つけられなかったときには、<filename
class="directory">/<replaceable>original-path</replaceable></filename>
を調べます。
こうすることで、他のバイナリを要求するバイナリの実行を可能にしています。
たとえば、&linux; 用ツールチェインは
&linux; ABI サポート環境下で完全に動作します。
またこれは、もし対応する &linux; バイナリが存在しない場合に
&linux; バイナリが &os; バイナリをロードしたり、
実行したりすることが可能であること、
その &linux; バイナリに自分自身が &linux; 上で実行されていないことを
気付かせないようにする目的で、&man.uname.1; コマンドを
<filename class="directory">/compat/linux</filename>
ディレクトリに置くことができる、
ということを意味します。</para>
<para>要するに、&linux; カーネルが &os;
カーネルの内部に存在しているわけです。
カーネルによって提供されるサービス全ての実装の基礎となるさまざまな関数は
&os; システムコールテーブルエントリと
&linux; システムコールテーブルエントリの両方で共通に利用されています。
これらにはファイルシステム処理、仮想メモリ処理、シグナル伝送、
System V IPC が含まれますが、
&os; バイナリは &os; <emphasis>グルー</emphasis> (訳注: glue;
二者の間を仲介するという意味) 関数群、
そして &linux; バイナリは &linux;
<emphasis>グルー</emphasis>関数群を用いる、
という点だけが異なります。
&os;<emphasis>グルー</emphasis>関数群は、
カーネルの中に静的にリンクされ、
&linux;<emphasis>グルー</emphasis>関数群は静的にリンクすることも、
カーネルモジュールを介して利用することもできるようになっています。</para>
<para>要するに、&linux; カーネルが &os;
カーネルの内部に存在しているわけです。
カーネルによって提供されるサービス全ての実装の基礎となるさまざまな関数は
&os; システムコールテーブルエントリと
&linux; システムコールテーブルエントリの両方で共通に利用されています。
これらにはファイルシステム処理、仮想メモリ処理、シグナル伝送、
System V IPC が含まれますが、
&os; バイナリは &os; <emphasis>グルー</emphasis> (訳注: glue;
二者の間を仲介するという意味) 関数群、
そして &linux; バイナリは &linux;
<emphasis>グルー</emphasis>関数群を用いる、
という点だけが異なります。
&os;<emphasis>グルー</emphasis>関数群は、
カーネルの中に静的にリンクされ、
&linux;<emphasis>グルー</emphasis>関数群は静的にリンクすることも、
カーネルモジュールを介して利用することもできるようになっています。</para>
<para>技術的には、これはエミュレーションではなく、
<acronym>ABI</acronym> の実装です。
よく <quote>&linux; エミュレーション</quote>と呼ばれるのは、
この機能が初めて実装された頃、
この機能を表現する言葉がなかったためです。
コードをコンパイルしてはいないので、
&os; 上で &linux; バイナリを実行するという表現は、
厳密に考えると適切ではありません。</para>
</sect1>
</chapter>
<para>技術的には、これはエミュレーションではなく、
<acronym>ABI</acronym> の実装です。
よく <quote>&linux; エミュレーション</quote>と呼ばれるのは、
この機能が初めて実装された頃、
この機能を表現する言葉がなかったためです。
コードをコンパイルしてはいないので、
&os; 上で &linux; バイナリを実行するという表現は、
厳密に考えると適切ではありません。</para>
</sect1>
</chapter>