- Merge the following from the English version:

r38506 -> r40735	head/ja_JP.eucJP/books/handbook/linuxemu/chapter.xml
This commit is contained in:
Ryusuke SUZUKI 2016-03-21 11:22:05 +00:00
parent b00e24a84d
commit cb9e811ee4
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=48449

View file

@ -3,7 +3,7 @@
The FreeBSD Documentation Project The FreeBSD Documentation Project
The FreeBSD Japanese Documentation Project The FreeBSD Japanese Documentation Project
Original revision: r38506 Original revision: r40735
$FreeBSD$ $FreeBSD$
--> -->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="linuxemu"> <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="linuxemu">
@ -24,7 +24,11 @@
<sect1 xml:id="linuxemu-synopsis"> <sect1 xml:id="linuxemu-synopsis">
<title>この章では</title> <title>この章では</title>
<indexterm><primary>Linux バイナリ互換機能</primary></indexterm>
<indexterm><primary>Linux
バイナリ互換機能</primary>
</indexterm>
<indexterm> <indexterm>
<primary>バイナリ互換機能</primary> <primary>バイナリ互換機能</primary>
<secondary>Linux</secondary> <secondary>Linux</secondary>
@ -34,11 +38,13 @@
なオペレーティングシステムとのバイナリ互換機能を提供しています。 なオペレーティングシステムとのバイナリ互換機能を提供しています。
現時点では、一体なぜ FreeBSD が Linux 現時点では、一体なぜ FreeBSD が Linux
バイナリを実行できるようにならなければならないのか自問しているのではないでしょうか? バイナリを実行できるようにならなければならないのか自問しているのではないでしょうか?
答えはきわめて簡単です。 答えはきわめて簡単です。Linux
Linux は現在コンピュータの世界では最も<quote>ホットなモノ</quote>なのでたくさんの会社や開発者たちが は現在コンピュータの世界では最も<quote>ホットなモノ</quote>なのでたくさんの会社や開発者たちが
Linux のためだけに開発を行なっています。そのため、残された私たち Linux のためだけに開発を行なっています。そのため、残された私たち
FreeBSD ユーザは彼らに対して FreeBSD ネイティブなアプリケーションも出すように言うしかないのです。 FreeBSD ユーザは彼らに対して FreeBSD
問題は、FreeBSD バージョンも出した場合にどれくらいの数のユーザーが使うのかわからない、 ネイティブなアプリケーションも出すように言うしかないのです。
問題は、FreeBSD
バージョンも出した場合にどれくらいの数のユーザーが使うのかわからない、
ということであり、そのため Linux 版のみを開発しているということなのです。 ということであり、そのため Linux 版のみを開発しているということなのです。
そこで FreeBSD では Linux バイナリ互換機能が役に立つのです。</para> そこで FreeBSD では Linux バイナリ互換機能が役に立つのです。</para>
@ -49,12 +55,14 @@
<application>&adobe;&nbsp;&acrobat;</application>, <application>&adobe;&nbsp;&acrobat;</application>,
<application>&realplayer;</application>, <application>&realplayer;</application>,
<application>&oracle;</application>, <application>&oracle;</application>,
<application>&wordperfect;</application>, <application>Doom</application>, <application>&wordperfect;</application>,
<application>Doom</application>,
<application>Quake</application> などがあります。 <application>Quake</application> などがあります。
また、ある状況においては Linux バイナリを Linux で動かすよりも また、ある状況においては Linux バイナリを Linux で動かすよりも
FreeBSD で動かすほうが良いパフォーマンスが出るという報告もあります。</para> FreeBSD で動かすほうが良いパフォーマンスが出るという報告もあります。</para>
<para>しかしながら、いくつかの Linux に特有な OS の機能は FreeBSD ではサポートされていません。 <para>しかしながら、いくつかの Linux に特有な OS の機能は
FreeBSD ではサポートされていません。
仮想 8086 モードを有効にするような i386 特有の呼び出しを過度に使うような 仮想 8086 モードを有効にするような i386 特有の呼び出しを過度に使うような
Linux バイナリは FreeBSD では動きません。</para> Linux バイナリは FreeBSD では動きません。</para>
@ -91,7 +99,8 @@
<sect1 xml:id="linuxemu-lbc-install"> <sect1 xml:id="linuxemu-lbc-install">
<title>インストール</title> <title>インストール</title>
<indexterm><primary>KLD (kernel loadable object)</primary></indexterm> <indexterm><primary>KLD (kernel loadable
object)</primary></indexterm>
<para>Linux バイナリ互換機能は、デフォルトでは有効ではありません。 <para>Linux バイナリ互換機能は、デフォルトでは有効ではありません。
この機能を有効にする最も簡単な方法は、 この機能を有効にする最も簡単な方法は、
@ -114,13 +123,13 @@
Id Refs Address Size Name Id Refs Address Size Name
1 2 0xc0100000 16bdb8 kernel 1 2 0xc0100000 16bdb8 kernel
7 1 0xc24db000 d000 linux.ko</screen> 7 1 0xc24db000 d000 linux.ko</screen>
<indexterm> <indexterm>
<primary>カーネルオプション</primary> <primary>カーネルオプション</primary>
<secondary>COMPAT_LINUX</secondary> <secondary>COMPAT_LINUX</secondary>
</indexterm> </indexterm>
<para> <para>何らかの理由で Linux KLD をロードしたくない、
何らかの理由で Linux KLD をロードしたくない、
あるいはロードできないような場合には、 あるいはロードできないような場合には、
<literal>options COMPAT_LINUX</literal> <literal>options COMPAT_LINUX</literal>
をカーネルの設定ファイルに指定して、 をカーネルの設定ファイルに指定して、
@ -130,6 +139,7 @@ Id Refs Address Size Name
<sect2> <sect2>
<title>Linux ランタイムライブラリのインストール</title> <title>Linux ランタイムライブラリのインストール</title>
<indexterm> <indexterm>
<primary>Linux</primary> <primary>Linux</primary>
<secondary>Linux ライブラリのインストール</secondary> <secondary>Linux ライブラリのインストール</secondary>
@ -142,6 +152,7 @@ Id Refs Address Size Name
<sect3 xml:id="linuxemu-libs-port"> <sect3 xml:id="linuxemu-libs-port">
<title>linux_base の port を用いたインストール</title> <title>linux_base の port を用いたインストール</title>
<indexterm><primary>Ports Collection</primary></indexterm> <indexterm><primary>Ports Collection</primary></indexterm>
<para>ランタイムライブラリをインストールするには最も簡単な方法です。 <para>ランタイムライブラリをインストールするには最も簡単な方法です。
@ -152,8 +163,7 @@ Id Refs Address Size Name
&prompt.root; <userinput>make install distclean</userinput></screen> &prompt.root; <userinput>make install distclean</userinput></screen>
<note> <note>
<para>&os;&nbsp;8.0 よりも前の &os; システムでは、 <para>&os;&nbsp;8.0 よりも前の &os; システムでは、<filename
<filename
role="package">emulators/linux_base-f10</filename> role="package">emulators/linux_base-f10</filename>
ではなく、<filename ではなく、<filename
role="package">emulators/linux_base-fc4</filename> port role="package">emulators/linux_base-fc4</filename> port
@ -176,7 +186,8 @@ Id Refs Address Size Name
<para><quote>ports</quote> コレクションをインストールしていない場合、 <para><quote>ports</quote> コレクションをインストールしていない場合、
代わりに手動でライブラリをインストールすることができます。 代わりに手動でライブラリをインストールすることができます。
プログラムが必要とする Linux のシェアードライブラリとランタイムリンカが必要です。 プログラムが必要とする Linux
のシェアードライブラリとランタイムリンカが必要です。
また Linux ライブラリ用の <quote>shadow root</quote> ディレクトリ、 また Linux ライブラリ用の <quote>shadow root</quote> ディレクトリ、
<filename>/compat/linux</filename> を作成する必要があります。 <filename>/compat/linux</filename> を作成する必要があります。
FreeBSD で動作する Linux プログラムが使用するシェアードライブラリは、 FreeBSD で動作する Linux プログラムが使用するシェアードライブラリは、
@ -195,12 +206,15 @@ Id Refs Address Size Name
シェアードライブラリを探す必要があるのは、FreeBSD シェアードライブラリを探す必要があるのは、FreeBSD
のシステムに Linux のシステムに Linux
のプログラムをインストールする最初の数回だけでしょう。 のプログラムをインストールする最初の数回だけでしょう。
それが過ぎれば、十分な Linux のシェアードライブラリがシステムにインストールされ、 それが過ぎれば、十分な Linux
新しくインストールした Linux のバイナリも余計な作業をせずに動作させることができるようになります。</para> のシェアードライブラリがシステムにインストールされ、
新しくインストールした Linux
のバイナリも余計な作業をせずに動作させることができるようになります。</para>
</sect3> </sect3>
<sect3> <sect3>
<title>シェアードライブラリの追加</title> <title>シェアードライブラリの追加</title>
<indexterm><primary>共有ライブラリ</primary></indexterm> <indexterm><primary>共有ライブラリ</primary></indexterm>
<para><filename>linux_base</filename> port をインストールした後に、 <para><filename>linux_base</filename> port をインストールした後に、
@ -221,7 +235,8 @@ Id Refs Address Size Name
<para>FTP を使って <application>Doom</application> <para>FTP を使って <application>Doom</application>
の Linux バイナリを取ってきて、 の Linux バイナリを取ってきて、
アクセスできる Linux システムに置いたとしましょう。 アクセスできる Linux システムに置いたとしましょう。
次のように <command>ldd linuxdoom</command> とするだけでどのシェアードライブラリが必要かチェックできます。</para> 次のように <command>ldd linuxdoom</command>
とするだけでどのシェアードライブラリが必要かチェックできます。</para>
<screen>&prompt.user; <userinput>ldd linuxxdoom</userinput> <screen>&prompt.user; <userinput>ldd linuxxdoom</userinput>
libXt.so.3 (DLL Jump 3.1) =&gt; /usr/X11/lib/libXt.so.3.1.0 libXt.so.3 (DLL Jump 3.1) =&gt; /usr/X11/lib/libXt.so.3.1.0
@ -262,7 +277,8 @@ libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</screen>
<para>このように最後の番号が 1 つか 2 つ古いだけならば、普通は <para>このように最後の番号が 1 つか 2 つ古いだけならば、普通は
<filename>/lib/libc.so.4.6.29</filename> <filename>/lib/libc.so.4.6.29</filename>
をコピーする必要はありません。わずかに古いライブラリでもプログラムは動作するはずだからです。 をコピーする必要はありません。
わずかに古いライブラリでもプログラムは動作するはずだからです。
もちろん、以下のように新しいライブラリと置き換えても構いません。</para> もちろん、以下のように新しいライブラリと置き換えても構いません。</para>
<screen>/compat/linux/lib/libc.so.4.6.29 <screen>/compat/linux/lib/libc.so.4.6.29
@ -274,7 +290,8 @@ libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</screen>
<note> <note>
<para>シンボリックリンクのメカニズムは Linux <para>シンボリックリンクのメカニズムは Linux
バイナリに<emphasis>のみ</emphasis>必要なことに注意してください。 バイナリに<emphasis>のみ</emphasis>必要なことに注意してください。
FreeBSD のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索するので、 FreeBSD
のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索するので、
ユーザが気にする必要はありません。</para> ユーザが気にする必要はありません。</para>
</note> </note>
</blockquote> </blockquote>
@ -284,6 +301,7 @@ libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</screen>
<sect2> <sect2>
<title>Linux の ELF バイナリのインストール</title> <title>Linux の ELF バイナリのインストール</title>
<indexterm> <indexterm>
<primary>Linux</primary> <primary>Linux</primary>
<secondary>ELF バイナリ</secondary> <secondary>ELF バイナリ</secondary>
@ -291,7 +309,8 @@ libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</screen>
<para>ELF のバイナリを使うためには、 <para>ELF のバイナリを使うためには、
<quote>マークをつける (branding)</quote> 作業が必要になります。 <quote>マークをつける (branding)</quote> 作業が必要になります。
マークのない ELF バイナリを実行しようとすると以下のようなエラーメッセージを受けとってしまうことでしょう。</para> マークのない ELF
バイナリを実行しようとすると以下のようなエラーメッセージを受けとってしまうことでしょう。</para>
<screen>&prompt.user; <userinput>./my-linux-elf-binary</userinput> <screen>&prompt.user; <userinput>./my-linux-elf-binary</userinput>
ELF binary type not known ELF binary type not known
@ -351,7 +370,8 @@ multi on</programlisting>
Linux アプリケーションは FreeBSD の Linux アプリケーションは FreeBSD の
<filename>/etc/host.conf</filename> を使用しようとして、 <filename>/etc/host.conf</filename> を使用しようとして、
文法の違いによる警告を出力します。 文法の違いによる警告を出力します。
<filename>/etc/resolv.conf</filename> を利用してネームサーバの設定をしていない場合には、 <filename>/etc/resolv.conf</filename>
を利用してネームサーバの設定をしていない場合には、
<literal>bind</literal> を削除してください。</para> <literal>bind</literal> を削除してください。</para>
</sect2> </sect2>
</sect1> </sect1>
@ -477,7 +497,8 @@ done</programlisting>
がインストールされているホストマシンから) がインストールされているホストマシンから)
そのフォントをコピーしなければならないということです。 そのフォントをコピーしなければならないということです。
これらのフォントは通常、CD-ROM の これらのフォントは通常、CD-ROM の
<filename>/cdrom/Unix/Files/SystemFiles/Fonts</filename> か、もしくはハードディスクの <filename>/cdrom/Unix/Files/SystemFiles/Fonts</filename>
か、もしくはハードディスクの
<filename>/usr/local/mathematica/SystemFiles/Fonts</filename> <filename>/usr/local/mathematica/SystemFiles/Fonts</filename>
に置かれており、実際に使用されるフォントは <filename>Type1</filename> に置かれており、実際に使用されるフォントは <filename>Type1</filename>
<filename>X</filename> のサブディレクトリに格納されています。 <filename>X</filename> のサブディレクトリに格納されています。
@ -574,7 +595,8 @@ done</programlisting>
<step><para><application>&maple;</application> <step><para><application>&maple;</application>
のライセンスがなければ、 のライセンスがなければ、
Maple Waterloo Software (<link Maple Waterloo Software (<link
xlink:href="http://register.maplesoft.com">http://register.maplesoft.com"</link>) で登録し、 xlink:href="http://register.maplesoft.com">http://register.maplesoft.com"</link>)
で登録し、
<filename>/usr/local/maple/license/license.dat</filename> <filename>/usr/local/maple/license/license.dat</filename>
にコピーしてください。</para></step> にコピーしてください。</para></step>
@ -589,7 +611,7 @@ done</programlisting>
<step><para>以下のパッチを <step><para>以下のパッチを
<filename>/usr/local/maple/bin/maple.system.type</filename> <filename>/usr/local/maple/bin/maple.system.type</filename>
ファイルにあててください。</para> ファイルにあててください。</para>
<programlisting> ----- snip ------------------ <programlisting> ----- snip ------------------
*** maple.system.type.orig Sun Jul 8 16:35:33 2001 *** 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
*************** ***************
@ -675,7 +697,7 @@ exit 0
core dump してしまいます。 core dump してしまいます。
正しいライセンスファイルは以下のようなものです。</para> 正しいライセンスファイルは以下のようなものです。</para>
<programlisting># ======================================================= <programlisting># =======================================================
# License File for UNIX Installations ("Pointer File") # License File for UNIX Installations ("Pointer File")
# ======================================================= # =======================================================
SERVER chillig ANY SERVER chillig ANY
@ -725,7 +747,8 @@ FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
極めてよく動作します。</para> 極めてよく動作します。</para>
<para>Linux 版の <application>&matlab;</application> は、 <para>Linux 版の <application>&matlab;</application> は、
MathWorks (<link xlink:href="http://www.mathworks.com">http://www.mathworks.com</link>) MathWorks (<link
xlink:href="http://www.mathworks.com">http://www.mathworks.com</link>)
から直接注文することができます。 から直接注文することができます。
ライセンスファイルを入手するか、 ライセンスファイルを入手するか、
ライセンスファイルを作成する手順を確認してください。 ライセンスファイルを作成する手順を確認してください。
@ -749,9 +772,11 @@ FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
<tip> <tip>
<para>インストーラはグラフィカルです。 <para>インストーラはグラフィカルです。
ディスプレイを表示できないエラーが起きるようでしたら、 ディスプレイを表示できないエラーが起きるようでしたら、
<command>setenv HOME ~<replaceable>USER</replaceable></command> <command>setenv HOME
~<replaceable>USER</replaceable></command>
と実行してください。ここで、 と実行してください。ここで、
<replaceable>USER</replaceable> は、&man.su.1; を実行したユーザ名です。</para> <replaceable>USER</replaceable> は、
&man.su.1; を実行したユーザ名です。</para>
</tip> </tip>
</step> </step>
@ -765,17 +790,20 @@ FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
<tip> <tip>
<para>残りのインストールプロセスでの入力を簡単にするために、 <para>残りのインストールプロセスでの入力を簡単にするために、
シェルプロンプトで、 シェルプロンプトで、
<command>set MATLAB=/compat/linux/usr/local/matlab</command> <command>set
MATLAB=/compat/linux/usr/local/matlab</command>
と実行してください。</para> と実行してください。</para>
</tip> </tip>
</step> </step>
<step> <step>
<para><application>&matlab;</application> <para><application>&matlab;</application>
ライセンスを入手時の手順に従い、ライセンスファイルを編集してください。</para> ライセンスを入手時の手順に従い、
ライセンスファイルを編集してください。</para>
<tip> <tip>
<para>あなたがいつも使っているエディタを使って、このファイルを準備してください。 <para>あなたがいつも使っているエディタを使って、
このファイルを準備してください。
そして、インストーラが そして、インストーラが
<filename>$MATLAB/license.dat</filename> を編集するように尋ねる前に、 <filename>$MATLAB/license.dat</filename> を編集するように尋ねる前に、
<filename>$MATLAB/license.dat</filename> <filename>$MATLAB/license.dat</filename>
@ -796,6 +824,7 @@ FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
<sect2> <sect2>
<title>ライセンスマネージャの起動</title> <title>ライセンスマネージャの起動</title>
<procedure> <procedure>
<step> <step>
<para>ライセンスマネージャのスクリプトへのシンボリックリンクを作成してください。</para> <para>ライセンスマネージャのスクリプトへのシンボリックリンクを作成してください。</para>
@ -811,7 +840,8 @@ FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
以下の例は、配布されている 以下の例は、配布されている
<filename>$MATLAB/etc/rc.lm.glnx86</filename> <filename>$MATLAB/etc/rc.lm.glnx86</filename>
の改良版です。 の改良版です。
変更点はファイルの位置、Linux エミュレーションでライセンスマネージャを起動する点です。</para> 変更点はファイルの位置、Linux
エミュレーションでライセンスマネージャを起動する点です。</para>
<programlisting>#!/bin/sh <programlisting>#!/bin/sh
case "$1" in case "$1" in
@ -969,6 +999,7 @@ exit 0</programlisting>
<sect2> <sect2>
<title>はじめに</title> <title>はじめに</title>
<para>このドキュメントでは <application>&oracle; 8.0.5</application> <para>このドキュメントでは <application>&oracle; 8.0.5</application>
<application>&oracle; 8.0.5.1 Enterprise Edition</application> <application>&oracle; 8.0.5.1 Enterprise Edition</application>
の Linux 版を FreeBSD にインストールするための手順を解説します。</para> の Linux 版を FreeBSD にインストールするための手順を解説します。</para>
@ -977,20 +1008,25 @@ exit 0</programlisting>
<sect2> <sect2>
<title>Linux 環境のインストール</title> <title>Linux 環境のインストール</title>
<para>まずは Ports Collection から <filename role='package'>emulators/linux_base</filename> <para>まずは Ports Collection から <filename
<filename role='package'>devel/linux_devtools</filename> をインストールしてください。 role='package'>emulators/linux_base</filename>
もしこれらの ports がうまく動かなければ、package もしくは Ports Collection <filename role='package'>devel/linux_devtools</filename>
をインストールしてください。
もしこれらの ports がうまく動かなければ、package
もしくは Ports Collection
で利用可能な古いバージョンを試してみてください。</para> で利用可能な古いバージョンを試してみてください。</para>
<para>もし賢いエージェント (intelligent agent) を起動したいなら <para>もし賢いエージェント (intelligent agent) を起動したいなら
Red Hat Tcl パッケージ <filename>tcl-8.0.3-20.i386.rpm</filename> Red Hat Tcl パッケージ <filename>tcl-8.0.3-20.i386.rpm</filename>
もインストールする必要があるでしょう。 もインストールする必要があるでしょう。
公式の <application>RPM</application> port (<filename role='package'>archivers/rpm</filename>) 公式の <application>RPM</application> port (<filename
role='package'>archivers/rpm</filename>)
をインストールするには一般的に次のようにします。</para> をインストールするには一般的に次のようにします。</para>
<screen>&prompt.root; <userinput>rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package</userinput></screen> <screen>&prompt.root; <userinput>rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package</userinput></screen>
<para><replaceable>package</replaceable> のインストール時にエラーが出てはいけません。</para> <para><replaceable>package</replaceable>
のインストール時にエラーが出てはいけません。</para>
</sect2> </sect2>
<sect2> <sect2>
@ -998,13 +1034,14 @@ exit 0</programlisting>
<para><application>&oracle;</application> をインストールする前に、 <para><application>&oracle;</application> をインストールする前に、
適切な環境を設定する必要があります。 適切な環境を設定する必要があります。
このドキュメントでは、 このドキュメントでは、<application>&oracle;</application>
<application>&oracle;</application> のインストールガイドに書いてあるようなことではなく のインストールガイドに書いてあるようなことではなく
FreeBSD で Linux 用 <application>&oracle;</application> FreeBSD で Linux 用 <application>&oracle;</application>
を動かすために<emphasis>特別に</emphasis>必要なことのみを解説します。</para> を動かすために<emphasis>特別に</emphasis>必要なことのみを解説します。</para>
<sect3 xml:id="linuxemu-kernel-tuning"> <sect3 xml:id="linuxemu-kernel-tuning">
<title>カーネルのチューニング</title> <title>カーネルのチューニング</title>
<indexterm><primary>カーネルのチューニング</primary></indexterm> <indexterm><primary>カーネルのチューニング</primary></indexterm>
<para><application>&oracle;</application> インストールガイドにあるように、 <para><application>&oracle;</application> インストールガイドにあるように、
@ -1029,7 +1066,7 @@ options SEMMSL=61</programlisting>
<para>また、 <para>また、
次のオプションがカーネルのコンフィギュレーションファイルにあることも確認します。</para> 次のオプションがカーネルのコンフィギュレーションファイルにあることも確認します。</para>
<programlisting>options SYSVSHM #SysV shared memory <programlisting>options SYSVSHM #SysV shared memory
options SYSVSEM #SysV semaphores options SYSVSEM #SysV semaphores
options SYSVMSG #SysV interprocess communication</programlisting> options SYSVMSG #SysV interprocess communication</programlisting>
</sect3> </sect3>
@ -1038,12 +1075,15 @@ options SYSVMSG #SysV interprocess communication</programlisting>
<title>&oracle; 用アカウント</title> <title>&oracle; 用アカウント</title>
<para>他のアカウントを作るのと同じように <systemitem class="username">oracle</systemitem> <para>他のアカウントを作るのと同じように
<systemitem class="username">oracle</systemitem>
用のアカウントを作ります。 用のアカウントを作ります。
<systemitem class="username">oracle</systemitem> 用のアカウントに特別なのは <systemitem class="username">oracle</systemitem>
用のアカウントに特別なのは
Linux のシェルを割り当てるところだけです。 Linux のシェルを割り当てるところだけです。
<filename>/etc/shells</filename><literal>/compat/linux/bin/bash</literal> <filename>/etc/shells</filename>
を加え、<systemitem class="username">oracle</systemitem> 用のアカウントに設定します。</para> <literal>/compat/linux/bin/bash</literal> を加え、<systemitem
class="username">oracle</systemitem> 用のアカウントに設定します。</para>
</sect3> </sect3>
<sect3 xml:id="linuxemu-environment"> <sect3 xml:id="linuxemu-environment">
@ -1081,15 +1121,15 @@ options SYSVMSG #SysV interprocess communication</programlisting>
<entry><envar>PATH</envar></entry> <entry><envar>PATH</envar></entry>
<entry><literal>/compat/linux/bin <entry><literal>/compat/linux/bin
/compat/linux/sbin /compat/linux/sbin
/compat/linux/usr/bin /compat/linux/usr/bin
/compat/linux/usr/sbin /compat/linux/usr/sbin
/bin /bin
/sbin /sbin
/usr/bin /usr/bin
/usr/sbin /usr/sbin
/usr/local/bin /usr/local/bin
$ORACLE_HOME/bin</literal></entry> $ORACLE_HOME/bin</literal></entry>
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
@ -1099,7 +1139,7 @@ $ORACLE_HOME/bin</literal></entry>
で設定することをお勧めします。 で設定することをお勧めします。
完璧なサンプルは以下の通りです。</para> 完璧なサンプルは以下の通りです。</para>
<programlisting>ORACLE_BASE=/oracle; export ORACLE_BASE <programlisting>ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=/oracle; export ORACLE_HOME ORACLE_HOME=/oracle; export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH export LD_LIBRARY_PATH
@ -1123,13 +1163,15 @@ export PATH</programlisting>
これは Linux エミュレーターにおけるちょっとした不整合のためです。 これは Linux エミュレーターにおけるちょっとした不整合のためです。
このディレクトリは <systemitem class="username">oracle</systemitem> このディレクトリは <systemitem class="username">oracle</systemitem>
ユーザーのものにしておきます。 ユーザーのものにしておきます。
これで特に問題なく <application>&oracle;</application> がインストールできるでしょう。 これで特に問題なく <application>&oracle;</application>
がインストールできるでしょう。
もし問題が起こったら、まずは <application>&oracle;</application> もし問題が起こったら、まずは <application>&oracle;</application>
の配布物や設定をチェックしてください。 の配布物や設定をチェックしてください。
<application>&oracle;</application> <application>&oracle;</application>
のインストールが終わったら次の二つのサブセクションで解説するパッチを当てます。</para> のインストールが終わったら次の二つのサブセクションで解説するパッチを当てます。</para>
<para>よくあるトラブルは、TCP プロトコルアダプターが正しくインストールされていないことです。 <para>よくあるトラブルは、TCP
プロトコルアダプターが正しくインストールされていないことです。
そのため、一切 TCP リスナーを起動することができないのです。 そのため、一切 TCP リスナーを起動することができないのです。
次の操作はこの問題を解決するのに役立ちます。</para> 次の操作はこの問題を解決するのに役立ちます。</para>
@ -1218,7 +1260,8 @@ export PATH</programlisting>
<sect1 xml:id="linuxemu-advanced"> <sect1 xml:id="linuxemu-advanced">
<title>高度なトピックス</title> <title>高度なトピックス</title>
<para>Linux バイナリ互換機能がどのような仕組みなのか興味がある人はこのセクションを読んでください。 <para>Linux
バイナリ互換機能がどのような仕組みなのか興味がある人はこのセクションを読んでください。
以下の文章で説明されていることのほとんどは &a.chat; に投稿された 以下の文章で説明されていることのほとんどは &a.chat; に投稿された
Terry Lambert (<email>tlambert@primenet.com</email>) 氏のメール Terry Lambert (<email>tlambert@primenet.com</email>) 氏のメール
(Message ID: <literal>&lt;199906020108.SAA07001@usr09.primenet.com&gt;</literal>) (Message ID: <literal>&lt;199906020108.SAA07001@usr09.primenet.com&gt;</literal>)
@ -1226,17 +1269,16 @@ export PATH</programlisting>
<sect2> <sect2>
<title>どのように動くのでしょう?</title> <title>どのように動くのでしょう?</title>
<indexterm><primary>execution class loader</primary></indexterm> <indexterm><primary>execution class loader</primary></indexterm>
<para>FreeBSD は、&ldquo;実行クラスローダ (execution class loader) &rdquo; <para>FreeBSD は、&ldquo;実行クラスローダ (execution class loader) &rdquo;
と呼ばれる抽象的な機構を持っています。これは &man.execve.2; と呼ばれる抽象的な機構を持っています。これは &man.execve.2;
システムコールへの楔という形で実装されています。 システムコールへの楔という形で実装されています。</para>
</para>
<para>FreeBSD は、シェルインタプリタやシェルスクリプトを実行するための <para>FreeBSD は、シェルインタプリタやシェルスクリプトを実行するための
<literal>#!</literal> ローダを持った単一のプログラムローダではなく、 <literal>#!</literal> ローダを持った単一のプログラムローダではなく、
ローダのリストを持っているのです。 ローダのリストを持っているのです。</para>
</para>
<para>歴史的には、&unix; プラットフォーム上の唯一のローダーがマジックナンバー <para>歴史的には、&unix; プラットフォーム上の唯一のローダーがマジックナンバー
(一般的にはファイルの先頭の 4 ないし 8 バイトの部分) (一般的にはファイルの先頭の 4 ないし 8 バイトの部分)
@ -1245,8 +1287,7 @@ export PATH</programlisting>
<para>もし、そのシステム用のバイナリでない場合には、 <para>もし、そのシステム用のバイナリでない場合には、
&man.execve.2; システムコールの呼び出しは失敗の戻り値を返し、 &man.execve.2; システムコールの呼び出しは失敗の戻り値を返し、
シェルがシェルコマンドとして実行しようと試みていたわけです。 シェルがシェルコマンドとして実行しようと試みていたわけです。</para>
</para>
<para>この仮定は<quote>現在利用しているシェルがどのようなものであっても</quote>変わりません。</para> <para>この仮定は<quote>現在利用しているシェルがどのようなものであっても</quote>変わりません。</para>
@ -1266,7 +1307,8 @@ export PATH</programlisting>
ELF イメージ形式を使っている OS を区別することはできません)。</para> ELF イメージ形式を使っている OS を区別することはできません)。</para>
<indexterm><primary>Solaris</primary></indexterm> <indexterm><primary>Solaris</primary></indexterm>
<para>ELF ローダは、特殊な<emphasis>マーク (brand)</emphasis> があるかどうか探します。 <para>ELF ローダは、特殊な<emphasis>マーク (brand)</emphasis>
があるかどうか探します。
このマークとは、ELF イメージのコメントセクションのことです。 このマークとは、ELF イメージのコメントセクションのことです。
SVR4/&solaris; の ELF バイナリには、このセクションは存在しません。</para> SVR4/&solaris; の ELF バイナリには、このセクションは存在しません。</para>
@ -1287,25 +1329,30 @@ export PATH</programlisting>
<para>ELF ローダが <literal>Linux</literal> マークを確認すると、 <para>ELF ローダが <literal>Linux</literal> マークを確認すると、
ローダは <literal>proc</literal> 構造体内の ローダは <literal>proc</literal> 構造体内の
ある一つのポインタを置き換えます。システムコールは全て、 ある一つのポインタを置き換えます。システムコールは全て、
このポインタ (伝統的な &unix; システムではこれは構造体の配列 <literal>sysent[]</literal> このポインタ (伝統的な &unix; システムではこれは構造体の配列
で、システムコールが含まれています) を通してインデックスされます。 <literal>sysent[]</literal> で、システムコールが含まれています)
さらに、そのプロセスには Linux カーネルモジュールに必要な を通してインデックスされます。
シグナルトランポリンコード (訳注: さらに、そのプロセスには Linux
カーネルモジュールに必要なシグナルトランポリンコード (訳注:
シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や、 シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や、
他の (細かな) 調整のための設定が行なわれます。</para> 他の (細かな) 調整のための設定が行なわれます。</para>
<para>Linux システムコールベクタは、 <para>Linux システムコールベクタは、
さまざまなデータに加えて <literal>sysent[]</literal> さまざまなデータに加えて <literal>sysent[]</literal>
エントリーのリストを含んでおり、それらのアドレスはカーネルモジュール内にあります。</para> エントリーのリストを含んでおり、
それらのアドレスはカーネルモジュール内にあります。</para>
<para>Linux バイナリがシステムコールを発行する際、トラップコードは <para>Linux バイナリがシステムコールを発行する際、トラップコードは
<literal>proc</literal> 構造体を用いてシステムコール関数ポインタを <literal>proc</literal> 構造体を用いてシステムコール関数ポインタを
解釈します。そして FreeBSD ではなく 解釈します。そして FreeBSD ではなく
Linux 用のシステムコールエントリポイントを得るわけです。</para> Linux 用のシステムコールエントリポイントを得るわけです。</para>
<para>さらに、Linux モードは状況に応じて<emphasis>ファイルシステム本来のルートマウントポイントを置き換えて</emphasis>ファイルの参照を行ないます。 <para>さらに、Linux
これは、<option>union</option> オプションを指定してマウントされたファイルシステム モードは状況に応じて<emphasis>ファイルシステム本来のルートマウントポイントを置き換えて</emphasis>ファイルの参照を行ないます。
(<literal>unionfs</literal> ファイルシステムでは<emphasis>ありません!</emphasis>) これは、<option>union</option>
オプションを指定してマウントされたファイルシステム
(<literal>unionfs</literal>
ファイルシステムでは<emphasis>ありません!</emphasis>)
が行なっていることと同じです。 が行なっていることと同じです。
ファイルを検索する際にはまず ファイルを検索する際にはまず
<filename>/compat/linux/original-path</filename> <filename>/compat/linux/original-path</filename>
@ -1313,21 +1360,22 @@ export PATH</programlisting>
<filename>/original-path</filename> <filename>/original-path</filename>
を調べます。 を調べます。
こうすることで、他のバイナリを要求するバイナリの実行を可能にしています こうすることで、他のバイナリを要求するバイナリの実行を可能にしています
(したがって、Linux 用プログラムツールは Linux ABI サポート環境下で完全に動作するわけです)。 (したがって、Linux 用プログラムツールは
Linux ABI サポート環境下で完全に動作するわけです)。
またこれは、もし対応する Linux バイナリが存在しない場合に またこれは、もし対応する Linux バイナリが存在しない場合に
Linux バイナリが FreeBSD バイナリをロードしたり、実行したりすることが可能であること、 Linux バイナリが FreeBSD バイナリをロードしたり、
実行したりすることが可能であること、
その Linux バイナリに自分自身が Linux 上で実行されていないことを その Linux バイナリに自分自身が Linux 上で実行されていないことを
気付かせないようにする目的で、&man.uname.1; コマンドを 気付かせないようにする目的で、&man.uname.1; コマンドを
<filename>/compat/linux</filename> ディレクトリに置くことができる、 <filename>/compat/linux</filename> ディレクトリに置くことができる、
ということを意味します。 ということを意味します。</para>
</para>
<para>要するに、Linux カーネルが FreeBSD カーネルの内部に存在しているわけです。 <para>要するに、Linux カーネルが FreeBSD カーネルの内部に存在しているわけです。
カーネルによって提供されるサービス全ての実装の基礎となるさまざまな関数は カーネルによって提供されるサービス全ての実装の基礎となるさまざまな関数は
FreeBSD システムコールテーブルエントリと FreeBSD システムコールテーブルエントリと
Linux システムコールテーブルエントリの両方で共通に利用されています。 Linux システムコールテーブルエントリの両方で共通に利用されています。
これらにはファイルシステム処理、仮想メモリ処理、シグナル伝送、System V IPC これらにはファイルシステム処理、仮想メモリ処理、シグナル伝送、
などが含まれますが、 System V IPC などが含まれますが、
FreeBSD バイナリは FreeBSD <emphasis>グルー</emphasis> (訳注: glue; FreeBSD バイナリは FreeBSD <emphasis>グルー</emphasis> (訳注: glue;
二者の間を仲介するという意味) 関数群、 二者の間を仲介するという意味) 関数群、
そして Linux バイナリは Linux <emphasis>グルー</emphasis>関数群を用いる、 そして Linux バイナリは Linux <emphasis>グルー</emphasis>関数群を用いる、
@ -1343,7 +1391,8 @@ export PATH</programlisting>
同じ CPU を利用したコンピュータ間でバイナリを共有するための規約のこと) 同じ CPU を利用したコンピュータ間でバイナリを共有するための規約のこと)
と呼ぶべきなのでしょうか? と呼ぶべきなのでしょうか?
実は、どちらが本来のものであるかということを論ずることに意味はありません。 実は、どちらが本来のものであるかということを論ずることに意味はありません。
基本的に、FreeBSD <emphasis>グルー</emphasis>関数群はカーネルの中に静的にリンクされていて、 基本的に、FreeBSD
<emphasis>グルー</emphasis>関数群はカーネルの中に静的にリンクされていて、
Linux <emphasis>グルー</emphasis>関数群は静的にリンクすることも、 Linux <emphasis>グルー</emphasis>関数群は静的にリンクすることも、
カーネルモジュールを介して利用することもできるようになっている、 カーネルモジュールを介して利用することもできるようになっている、
という違いがあるだけ (ただしこれは現時点においての話であり、 という違いがあるだけ (ただしこれは現時点においての話であり、
@ -1352,10 +1401,12 @@ export PATH</programlisting>
<para>あ、「でもこれは本当にエミュレーションと呼べるのか」って? <para>あ、「でもこれは本当にエミュレーションと呼べるのか」って?
答えは「いいえ」です。これは ABI の実装であり、 答えは「いいえ」です。これは ABI の実装であり、
エミュレーションとは異なります。エミュレータが呼び出されているわけではありません エミュレーションとは異なります。
エミュレータが呼び出されているわけではありません
(シミュレータでもないことをあらかじめ断っておきましょう)。</para> (シミュレータでもないことをあらかじめ断っておきましょう)。</para>
<para>では、これがよく <quote>Linux エミュレーション</quote>と呼ばれるのは何故でしょうか? <para>では、これがよく <quote>Linux
エミュレーション</quote>と呼ばれるのは何故でしょうか?
それはもちろん FreeBSD の売りにするためでもあるのですが、 それはもちろん FreeBSD の売りにするためでもあるのですが、
実際には、次のような理由によります。 実際には、次のような理由によります。
この機能が初めて実装された頃、 この機能が初めて実装された頃、