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