Index: head/ja_JP.eucJP/books/handbook/linuxemu/chapter.xml =================================================================== --- head/ja_JP.eucJP/books/handbook/linuxemu/chapter.xml (revision 47850) +++ head/ja_JP.eucJP/books/handbook/linuxemu/chapter.xml (revision 47851) @@ -1,2630 +1,2651 @@ Linux バイナリ互換機能 JimMock再構成と一部の更新: Brian N.Handyオリジナルの文書を執筆: RichMurphey 訳: &a.jp.kiroh;、1996 年 9 月 24 日 この章では Linux バイナリ互換機能 バイナリ互換機能 Linux FreeBSD は、Linux を含む Unix-like なオペレーティングシステムとのバイナリ互換機能を提供しています。 現時点では、一体なぜ FreeBSD が Linux バイナリを実行できるようにならなければならないのか自問しているのではないでしょうか? 答えはきわめて簡単です。 Linux は現在コンピュータの世界では最もホットなモノなのでたくさんの会社や開発者たちが Linux のためだけに開発を行なっています。そのため、残された私たち FreeBSD ユーザは彼らに対して FreeBSD ネイティブなアプリケーションも出すように言うしかないのです。 問題は、FreeBSD バージョンも出した場合にどれくらいの数のユーザーが使うのかわからない、 ということであり、そのため Linux 版のみを開発しているということなのです。 そこで FreeBSD では Linux バイナリ互換機能が役に立つのです。 簡単に言ってしまえば、この機能により全ての Linux アプリケーションの 90% が修正なしに FreeBSD 上で起動できます。 この中には Star Office や Linux 版の NetscapeAdobe AcrobatRealPlayer 5 と 7、 VMWareOracleWordPerfectDoomQuake などがあります。 また、ある状況においては Linux バイナリを Linux で動かすよりも FreeBSD で動かすほうが良いパフォーマンスが出るという報告もあります。 Linux /proc ファイルシステム しかしながら、いくつかの Linux に特有な OS の機能は FreeBSD ではサポートされていません。 例えば、Linux の /proc ファイルシステムを過度に使うような Linux バイナリは FreeBSD では動きません (FreeBSD の /proc ファイルシステムとは異なるのです) し、 仮想 8086 モードを有効にするような i386 特有の呼び出しも動きません。 この章を読むと、以下のことがわかります。 Linux バイナリ互換機能を有効にする方法。 Linux 共有ライブラリを追加する方法。 Linux アプリケーションを FreeBSD システムにインストールする方法 FreeBSD における Linux 互換機能の実装の詳細。 この章を読む前に、以下のことを理解しておく必要があります。 サードパーティ製ソフトウェアのインストール方法 () インストール KLD (kernel loadable object) Linux バイナリ互換機能は、デフォルトでは有効ではありません。 この機能を有効にする最も簡単な方法は、 linux KLD オブジェクト (Kernel LoaDable object) を読み込むことです。 コマンドプロンプトで linux と打つだけでモジュールを読み込むことができます。 Linux 互換機能を常に有効にする場合には、 /etc/rc.conf に以下の行を追加してください。 linux_enable="YES" この設定により、/etc/rc.i386 では次のような操作が行なわれます。 # Start the Linux binary compatibility if requested. # case ${linux_enable} in [Yy][Ee][Ss]) echo -n ' linux'; linux > /dev/null 2>&1 ;; esac 望みの KLD モジュールがロードされているか確認したい時には &man.kldstat.8; コマンドを利用します。 &prompt.user; kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko カーネルオプション LINUX 何らかの理由で Linux KLD をロードしたくない、 あるいはロードできないような場合には、 options LINUX をカーネルの設定ファイルに指定して、 Linux バイナリ互換機能をカーネルにスタティックリンクしてください。 そして、 の記述にしたがって新しいカーネルをインストールしてください。 Linux ランタイムライブラリのインストール Linux Linux ライブラリのインストール これは、linux_base port を用いるか、もしくは 手動で インストールします。 linux_base の port を用いたインストール ports collection ランタイムライブラリをインストールするには最も簡単な方法です。 - Ports Collection から他の port + Ports Collection + から他の port をインストールするのと全く同じようにできます。 &prompt.root; cd /usr/ports/emulators/linux_base &prompt.root; make install distclean これで Linux バイナリ互換機能が使えるはずです。 いくつかのプログラムはシステムライブラリのマイナーバージョンが違うと文句を言うかもしれませんが一般的には大した問題ではありません。 手動でのライブラリのインストール ports コレクションをインストールしていない場合、 代わりに手動でライブラリをインストールすることができます。 プログラムが必要とする Linux のシェアードライブラリとランタイムリンカが必要です。 また Linux ライブラリ用の shadow root ディレクトリ、 /compat/linux を作成する必要があります。 FreeBSD で動作する Linux プログラムが使用するシェアードライブラリは、 まずこのファイルツリーから検索されます。例えば、 Linux のプログラムが /lib/libc.so をロードしようとした場合には、FreeBSD はまず /compat/linux/lib/libc.so を開こうとします。これが存在しなかった場合には、次に /lib/libc.so を試します。 シェアードライブラリは、Linux の ld.so が報告するパスではなく、 /compat/linux/lib 以下にインストールする必要があります。 Linux のプログラムが必要とする シェアードライブラリを探す必要があるのは、FreeBSD のシステムに Linux のプログラムをインストールする最初の数回だけでしょう。 それが過ぎれば、十分な Linux のシェアードライブラリがシステムにインストールされ、 新しくインストールした Linux のバイナリも余計な作業をせずに動作させることができるようになります。 シェアードライブラリの追加 共有ライブラリ linux_base port をインストールした後に、 アプリケーションが必要なライブラリが存在しないというエラーを出したらどうしたらよいでしょうか? Linux のバイナリがどのシェアードライブラリを必要とし、 そしてどこで入手できるか、どのように探したらよいでしょうか? 基本的には、以下の 2 種類の方法があります (以下の手順に従う場合には、 - 必要なインストール作業をおこなう FreeBSD システム上で root + 必要なインストール作業をおこなう FreeBSD システム上で + root として作業をおこなう必要があります)。 Linux システムにアクセス可能ならば、 そのアプリケーションがどういうシェアードライブラリを必要としているのか調べ、 単に FreeBSD にそのライブラリをコピーするだけです。 次の例を見てみましょう。 FTP を使って Doom の Linux バイナリを取ってきて、 アクセスできる 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 シンボリックリンク 最後のカラムに表示されているすべてのファイルを持って来て、 /compat/linux の下に置き、 最初のカラムに示されるファイル名にシンボリックリンクを張ります。 すなわち、FreeBSD システムでは以下のようなファイルが必要となります。 /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
最初のカラムに表示されているファイルとメジャーバージョンが同じ 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 をコピーする必要はありません。わずかに古いライブラリでもプログラムは動作するはずだからです。 もちろん、以下のように新しいライブラリと置き換えても構いません。 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
シンボリックリンクのメカニズムは Linux バイナリにのみ必要なことに注意してください。 FreeBSD のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索するので、 ユーザが気にする必要はありません。
Linux の ELF バイナリのインストール Linux ELF バイナリ ELF のバイナリを使うためには、 マークをつける (branding) 作業が必要になります。 マークのない ELF バイナリを実行しようとすると以下のようなエラーメッセージを受けとってしまうことでしょう。 &prompt.user; ./my-linux-elf-binary ELF binary type not known Abort カーネルが FreeBSD の ELF バイナリと Linux のバイナリとを 見分けられるようにするためには、&man.brandelf.1; ユーティリティを以下のようにして使ってください。 &prompt.user; brandelf -t Linux my-linux-elf-binary GNU ツールチェイン 今では GNU のツールたちが ELF バイナリに自動的に適切なマークを付加するようになったので、 今後はこの作業もだんだんと必要なくなってゆくでしょう。 ホストネームリゾルバの設定 DNS がうまく動作しなかったり、 以下のようなエラーメッセージが表示され る場合は、/compat/linux/etc/host.conf ファイルを設定する必要があります。 resolv+: "bind" is an invalid keyword resolv+: "hosts" is an invalid keyword ファイルの内容を以下のように設定してください。 order hosts, bind multi on ここで、order は /etc/hosts を最初に検索し、 次に DNS を検索するように指定します。 /compat/linux/etc/host.conf がインストールされていない場合、 Linux アプリケーションは FreeBSD の /etc/host.conf を使用しようとして、 文法の違いによる警告を出力します。 /etc/resolv.conf を利用してネームサーバの設定をしていない場合には、 bind を削除してください。
- - Mathematica のインストール + + Mathematica のインストール + + + Murray + Stokely + Mathematica 4.X 向けの改訂: + + + + + Bojan + Bistrovic + マージ作業: + + + - Mathematica 4.X 用に &a.murray; - がアップデートし、Bojan Bistrovic bojanb@physics.odu.edu - がマージしました。 アプリケーション Mathematica この章では、Mathematica 4.X Linux 版の FreeBSD へのインストールについて説明します。 Linux 版の Mathematica は FreeBSD においても完璧に動きます。 ただ、実行する際に Linux ABI を用いる必要があることを FreeBSD に教えるために、Wolfram によって出荷されているバイナリにマーク付け (branded) をする必要があります。 MathematicaMathematica for Students の Linux 版は Wolfram (http://www.wolfram.com/) から直接注文することができます。 Linux バイナリへのマーク付け (branding) Linux 用バイナリは Wolfram の Mathematica CD-ROM の Unix ディレクトリにあります。 インストーラーを起動する前にこのディレクトリをローカルディスクにコピーし、 &man.brandelf.1; により Linux バイナリにマークを付けます。 &prompt.root; mount /cdrom &prompt.root; cp -rp /cdrom/Unix/ /localdir/ &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Kernel/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/FrontEnd/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Installation/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Graphics/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Converters/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/LicenseManager/Binaries/Linux/mathlm &prompt.root; cd /localdir/Installers/Linux/ &prompt.root; ./MathInstaller また以下のようにすると、マーク付けされていない ELF バイナリすべての扱いを、デフォルトで Linux バイナリとすることが可能です。 &prompt.root; sysctl -w kern.fallback_elf_brand=3 これは FreeBSD システムに対して、 マーク付けされていない ELF バイナリが Linux ABI を利用するように設定します。こうすることで、 CDROM から直接インストーラを実行することが可能になります。 Mathematica パスワードの取得 Mathematica を起動する前に Wolfram から自分の マシン ID に対応したパスワードを取得しなければいけません。 イーサネット MAC アドレス 一旦 Linux 互換ランタイムライブラリをインストールし、 Mathematica を展開すれば Install ディレクトリにある mathinfo プログラムを起動して マシン ID を得ることができます。 このマシン ID は、最初に見つかったイーサネットカードの MAC アドレスをベースに生成されます。 &prompt.root; cd /localdir/Files/SystemFiles/Installation/Binaries/Linux &prompt.root; mathinfo disco.example.com 7115-70839-20412 電子メールや電話、FAX などで Wolfram に登録する時にはこの マシン ID を渡します。 するといくつかの数字から構成されるパスワードが返されるので、 他の Mathematica プラットホームでするのと全く同じように最初に Mathematica を立ち上げる時にその情報を入力します。 ネットワーク経由での Mathematica フロントエンドの起動 Mathematica は標準フォントセットにない特別な記号 (積分記号、総和記号、ギリシャ文字など) を表示するために特殊なフォントを使用します。 X プロトコルは、これらのフォントが ローカルマシンに インストールされていることを要求します。 これはつまり、ローカルマシンに (CD-ROM や Mathematica がインストールされているホストマシンから) そのフォントをコピーしなければならないということです。 これらのフォントは通常、CD-ROM の /cdrom/Unix/Files/SystemFiles/Fonts か、もしくはハードディスクの /usr/local/mathematica/SystemFiles/Fonts に置かれており、実際に使用されるフォントは Type1X のサブディレクトリに格納されています。 これらを利用するには次のような二つ方法があります。 一つは、フォントファイルをすべて /usr/X11R6/lib/X11/fonts/ 以下にある既存のフォントディレクトリにコピーする方法です。 この場合、fonts.dir にフォント名を追加し、 先頭行のフォント総数を変更することも必要になります。 あるいは、フォントをコピーしたディレクトリで mkfontdir を実行するだけでもかまいません。 もう一つの方法は、 /usr/X11R6/lib/X11/fonts/ にフォントディレクトリごとコピーする方法です。 &prompt.root; cd /usr/X11R6/lib/X11/fonts &prompt.root; mkdir X &prompt.root; mkdir MathType1 &prompt.root; cd /cdrom/Unix/Files/SystemFiles/Fonts &prompt.root; cp X/* /usr/X11R6/lib/X11/fonts/X &prompt.root; cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1 &prompt.root; cd /usr/X11R6/lib/X11/fonts/X &prompt.root; mkfontdir &prompt.root; cd ../MathType1 &prompt.root; mkfontdir そして、フォントパスに新しいフォントディレクトリを追加します。 &prompt.root; xset fp+ /usr/X11R6/lib/X11/fonts/X &prompt.root; xset fp+ /usr/X11R6/lib/X11/fonts/MathType1 &prompt.root; xset fp rehash XFree86 サーバを使用しているなら、 /etc/XF86Config に加えることでこれらのフォントを自動的に読み込むことができます。 フォント /usr/X11R6/lib/X11/fonts/Type1 という ディレクトリが存在していない場合には、 上記例の MathType1Type1 とすることができます。 Maple のインストール Aaron Kaplan 寄稿: Robert Getschmann 感謝: applications Maple Maple は Mathematica に似た商用の数式処理プログラムです。 ソフトウェアを http://www.maplesoft.com/ で購入し、 ライセンスファイルの登録手続きを行ってください。 このソフトウェアを FreeBSD にインストールするには、 以下のステップに従ってください。 製品の配布物から INSTALL シェルスクリプトを実行してください。 インストールプログラムからの質問には、 RedHat オプションを選択してください。 一般的なインストールのディレクトリは、/usr/local/maple です。 ライセンスがなければ、 Maple Waterloo Software (http://register.maplesoft.com) で登録し、 /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 *************** *** 72,77 **** --- 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 は、 FreeBSD を Linux システムと認識します。 bin/maple シェルスクリプトは bin/maple.system.type を呼び出します。 このスクリプトは、uname -a を実行し、 オペレーティングシステムの名前を入手します。 OS 名にから、どのバイナリを使用するかを判断します。 ライセンスサーバを起動してください。 /usr/local/etc/rc.d/lmgrd.sh としてインストールされる、以下のスクリプトは、 lmgrd を起動する便利な方法です。 ----- snip ------------ #! /bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bn 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 maple を使う用意はできました。 ネイティブ FreeBSD 版を希望していることを Maplesoft に連絡してください! 落とし穴 FLEXlm ライセンスマネージャは、 動かすことが難しいツールでもあります。 http://www.globetrotter.com/ にも文書が用意されています。 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" の行を書き換えてしまうと、動かなくなるでしょう。 Oracle のインストール MarcelMoolenaar寄贈: アプリケーション Oracle はじめに このドキュメントでは Oracle 8.0.5 と Oracle 8.0.5.1 Enterprise Edition の Linux 版を FreeBSD にインストールするための手順を解説します。 Linux 環境のインストール まずは Ports Collection から linux_baselinux_devtools をインストールしてください。 これらの ports は FreeBSD 3.2 のリリース後にコレクションに加えられました。 もし FreeBSD 3.2 もしくはそれよりも古いものを使っている場合は ports コレクションをアップデートしましょう。ついでに FreeBSD をアップデートするのもいいでしょう。もし linux_base-6.1linux_devtools-6.1 でうまくいかなければ 5.2 を試してみてください。 もし賢いエージェント (intelligent agent) を起動したいなら Red Hat Tcl パッケージ tcl-8.0.3-20.i386.rpm もインストールする必要があるでしょう。 公式の RPM パッケージをインストールするには一般的に次のようにします。 &prompt.root; rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package パッケージのインストール時にエラーが出てはいけません。 Oracle 環境の構築 Oracleをインストールする前に、適切な環境を設定する必要があります。 このドキュメントでは、 Oracle のインストールガイドに書いてあるようなことではなく FreeBSD で Linux 用 Oracle を動かすために特別に必要なことのみを解説します。 カーネルのチューニング カーネルのチューニング Oracle インストールガイドにあるように、 シェアードメモリーの最大サイズを設定しなければいけません。 FreeBSD では SHMMAX を使わないようにしてください。 SHMMAX は単に SHMMAXPGSPGSIZE から計算されるだけなのです。 従って、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:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:$ORACLE_HOME/bin +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 のインストール インストーラーを起動する前に、/var/tmp.oracle という名前のディレクトリを作る必要がありますが、 これは Linux エミュレーターにおけるちょっとした不整合のためです。 このディレクトリは誰でもが書けるか、もしくは 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 を起動するのを忘れないように! root.sh へのパッチ Oracle をインストールする時、root で行なう必要のあるいくつかの操作は root.sh と呼ばれるシェルスクリプトに記録されます。 root.shorainst ディレクトリにあります。次のパッチを root.sh に当てて 正しい場所にある 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 ---- # 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 CD-ROM からのインストールでない場合は root.sh のソースにパッチを当ててもいいでしょう。 rthd.sh という名前でソースツリーの orainst というディレクトリにあります。 genclntsh へのパッチ 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:/usr/X11R6/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:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst Oracle の起動 インストラクションに従えば、Linux でと同じように Oracle を起動できるでしょう。 SAP R/3 (4.6B - IDES) のインストール HolgerKipp寄稿: ValentinoVaschettoSGML への変換: アプリケーション SAP R/3 SAP サポートチームは、 認定されたプラットフォームのみをサポートしているので、 FreeBSD 上への SAP システムのインストールについてはサポートしていません。 まえがき この文書は、SAP R/3 4.6B IDES-System with Oracle 8.0.5 for Linux を FreeBSD 4.3 上にインストールする方法を、FreeBSD 4.3-STABLE と Oracle 8.0.5 のインストール方法と一緒に説明しています。 この文書では、重要な手順をすべて詳しく説明しようとしていますが、 Oracle および SAP R/3 のインストールの手引きを置き換えるものではありません。 SAPOracle に特有の質問については、SAP R/3 の Linux 版についてくる文書や OracleSAP OSS が出している資料をご覧ください。 ソフトウェア SAP のインストールには以下の CDROM を使いました。 名称 番号 説明 KERNEL 51009113 SAP Kernel Oracle / Installation / AIX, Linux, Solaris RDBMS 51007558 Oracle / RDBMS 8.0.5.X / Linux EXPORT1 51010208 IDES / DB-Export / Disc 1 of 6 EXPORT2 51010209 IDES / DB-Export / Disc 2 of 6 EXPORT3 51010210 IDES / DB-Export / Disc3 of 6 EXPORT4 51010211 IDES / DB-Export / Disc4 of 6 EXPORT5 51010212 IDES / DB-Export / Disc5 of 6 EXPORT6 51010213 IDES / DB-Export / Disc6 of 6 更に、Oracle 8 Server (Pre-production バージョン 8.0.5 for Linux, カーネルバージョン 2.0.33) の CD も使いましたが、これは必ずしも必要ではありません。 また、もちろん FreeBSD 4.3-STABLE (4.3-RELEASE から間もない時期のものです) も利用しました。 SAP ノート 以下のノートは、SAP R/3 をインストールする前に読んでおくべき、 もしくはインストールの際に役立つことが分かっているものです。 番号 題名 0171356 SAP Software auf Linux: grundlegenden Anmerkungen 0201147 INST: 4.6C R/3 Inst. on UNIX - Oracle 0373203 Update / Migration Oracle 8.0.5 --> 8.0.6/8.1.6 LINUX 0072984 Release of Digital UNIX 4.0B for Oracle 0130581 R3SETUP step DIPGNTAB terminates 0144978 Your system has not been installed correctly 0162266 Questions and tips for R3SETUP on Windows NT / W2K ハードウェア要件 以下の機器であれば SAP R/3 System (4.6B) を動かすのに十分です。 構成部品 4.6B 4.6C プロセッサ 2 × 800MHz Pentium III 2 × 800MHz Pentium III メモリ 1GB ECC 2GB ECC ハードディスク容量 50-60GB (IDES) 50-60GB (IDES) 業務で利用するなら、大容量キャッシュメモリを備えた Xeon プロセッサ、高速なディスク (SCSI, ハードウェア RAID コントローラ)、 USV および ECC-RAM を推奨します。 ハードディスク容量が大きいのは、設定済みの IDES システムが、 インストール時に 27 GB のデータベースファイルを作成するためです。 通常、インストール後には一部のテーブル領域を拡張する必要があります。 私は、800MHz の Pentium III を 2 個、Adaptec 29160 Ultra160 SCSI アダプタ (40/80 GB DLT テープドライブと CDROM にアクセスするため)、Mylex AcelleRAID (2 チャンネル、ファームウェアバージョン 6.00-1-00、32MB RAM) を積んだデュアルプロセッサボードを使いました。Mylex RAID コントローラには 17GB のハードディスク 2 台 (ミラー) と 36GB のハードディスク (RAID 5) 4 台が接続されています。 FreeBSD 4.3-STABLE のインストール まず、FreeBSD 4.3-STABLE をインストールしました。FTP 経由のデフォルトインストールを行いました。 FTP 経由のインストール ディスクイメージ kern.flp と mfsroot.flp を入手して、 フロッピーディスクに書き込んでください (私は - ftp7.de.freebsd.org から入手しました。 + ftp7.de.FreeBSD.org から入手しました。 適切なミラーサイトを選んでください)。 &prompt.root; dd if=kern.flp of=/dev/fd0 &prompt.root; dd if=mfsroot.flp of=/dev/fd0 2 つのイメージファイルそれぞれについて、 別のディスクを使うようにしてください。それから kern.flp を書き込んだフロッピーディスクで起動して、指示に従ってください。 私は、次のようにディスクを分割しました。 ファイルシステム 容量 (1kB ブロック) 容量 (GB) マウントポイント /dev/da0s1a 1.016.303 1 / /dev/da0s1b 6 <swap> /dev/da0s1e 2.032.623 2 /var /dev/da0s1f 8.205.339 8 /usr /dev/da1s1e 45.734.361 45 /compat/linux/oracle /dev/da1s1f 2.032.623 2 /compat/linux/sapmnt /dev/da1s1g 2.032.623 2 /compat/linux/usr/sap はじめに、Mylex のソフトウェアで論理ドライブ 2 台を設定して初期化しなければなりませんでした。 このソフトウェアはボードに組み込まれていて、 PC 起動時に動かせます。 このディスクの割り当て方は SAP の推奨と少し異なることに注意してください。SAP は oracle (その他) サブディレクトリを別途マウントするように提案していますが、 私は簡便であることを優先して、 実際にサブディレクトリとして作成するだけにしました。 最新の STABLE のソースコードの入手 FreeBSD 4.3-STABLE 以降では、 最新のソースコードは楽に手に入ります。それより前のバージョンの FreeBSD では、/etc/cvsup に自分で書いたスクリプトを置いていました。FreeBSD 4.3 で CVSup を設定するのは簡単です。 root で以下を実行してください。 &prompt.root; cp /etc/defaults/make.conf /etc/make.conf &prompt.root; vi /etc/make.conf /etc/make.conf ファイルで、 以下の項目を有効にしておかねばなりません。 SUP_UPDATE= yes SUP= /usr/local/bin/cvsup SUPFLAGS= -g -L 2 SUPHOST= cvsup8.FreeBSD.org SUPFILE= /usr/share/examples/cvsup/stable-supfile PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile DOCSUPFILE= /usr/share/examples/cvsup/doc-supfile SUPHOST の値は適切なものに変更してください。 /usr/share/examples/cvsup にある supfile で十分でしょう。 もしもすべてのドキュメントを持ってくるのが嫌なら、 DOCSUPFILE の項は無効なままにしておいてください。 ここまでくれば、cvsup を起動して stable の最新のソースコードを入手するのはたやすいことです。 &prompt.root; cd /usr/src &prompt.root; make update <command>make world</command> と新しいカーネル - 最初にすべきことは、ソースコードのインストールです。root + 最初にすべきことは、ソースコードのインストールです。 + root ユーザで次の作業を行ってください。 &prompt.root; cd /usr/src &prompt.root; make world 最後まで実行できたら、 新しいカーネルの作成と設定を行えます。 通常はここでカーネルコンフィグレーションファイルをカスタマイズします。 コンピュータに troubadix という名前をつけているので、 コンフィグレーションファイルを troubadix という名称にするのが自然です。 &prompt.root; cd /usr/src/sys/i386/conf &prompt.root; cp GENERIC TROUBADIX &prompt.root; vi TROUBADIX この段階で、どのドライバを使うか、 使わないかといったことを決定できます。詳しい説明は、適当な文書や LINT ファイルをご覧ください。 また、後述するパラメータをいれることもできます。 新しいカーネルを作成するには次のようにしてください。 &prompt.root; cd /usr/src/sys/i386/conf &prompt.root; config TROUBADIX &prompt.root; cd /usr/src/sys/compile/TROUBADIX &prompt.root; make depend &prompt.root; make &prompt.root; make install make install が無事終わったら、 コンピュータを再起動して新しいカーネルを動かしてください。 Linux 環境のインストール (2001 年 5 月 2 日時点の 4.3-STABLE 用に) 必要な RPM ファイルをダウンロードするのに多少問題があったので、 以下の場所も (他がすべてだめで、ここが古くなってしまっていなければ) 試してみるとよいかもしれません。 - ftp7.de.freebsd.org/pub/FreeBSD/distfiles/rpm + ftp7.de.FreeBSD.org/pub/FreeBSD/distfiles/rpm ftp.redhat.com/pub/redhat/linux/6.1/en/os/i386/RedHat/RPMS Linux ベースシステムのインストール - まず、Linux のベースシステムを (root で) + まず、Linux のベースシステムを + (root で) インストールしなければなりません。 &prompt.root; cd /usr/ports/emulators/linux_base &prompt.root; make package Linux 開発環境のインストール 次に、必要なら Linux 開発環境をインストールします。 &prompt.root; cd /usr/ports/devel/linux_devtools &prompt.root; make package 必要な RPM のインストール RPMs R3SETUP プログラムを動かすには、pam サポートが必要になります。 これが更に他の package を必要としているので、 私は結局いくつもの package をインストールすることになりました。 それでも、pam は足りない package があると文句をいうので、 強制的にインストールしたら動きました。 pam 以外にインストールした package が本当に必要なのか、pam package をインストールするのに十分だったのかよくわかっていません。 なんにせよ、これが私がインストールした package 一覧です。 cracklib-2.7-5.i386.rpm cracklib-dicts-2.7-5.i386.rpm pwdb-0.60-1.i386.rpm pam-0.68-7.i386.rpm これらの package は、 以下のコマンドでインストールしました。 &prompt.root; rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm <package_name> ただし、pam パッケージは次のようにして強制的にインストールしました。 - &prompt.root; rpm -i --ignoreos --nodeps --root /compat/linux --dbpath /var/lib/rpm pam-0.68-7.i386.rpm + &prompt.root; rpm -i --ignoreos --nodeps --root /compat/linux --dbpath /var/lib/rpm \ + pam-0.68-7.i386.rpm Oracle が intelligent agent を動作させるには、次の RedHat Tcl package を (FreeBSD ハンドブックにあるように) インストールしなければなりませんでした。 tcl-8.0.5-30.i386.rpm (そうしないと、 Oracle インストール中の再リンクがうまくゆきません)。 Oracle の再リンクについては他にも問題がありますが、 私が理解している限りでは Oracle-Linux の問題で、FreeBSD に特有のものではありません。 SAP/R3 環境の構築 必要となるファイルシステムとマウントポイントの作成 単純なインストールでは、 次のファイルシステムを作成すれば事足ります。 マウントポイント サイズ (GB) /compat/linux/oracle 45 GB /compat/linux/sapmnt 2 GB /compat/linux/usr/sap 2 GB また、私は FreeBSD が正しいパスを見付けられるように、 いくつかリンクを作成しました。 &prompt.root; ln -s /compat/linux/oracle /oracle &prompt.root; ln -s /compat/linux/sapmnt /sapmnt &prompt.root; ln -s /compat/linux/usr/sap /usr/sap ユーザとディレクトリの作成 SAP R/3 には、 2 名のユーザと 3 つのグループが必要です。 ユーザ名は 3 文字からなる SAP システム ID (SID) に準じています。SID の中には SAP が予約しているものがあります (たとえば SAPNIX です。すべて網羅した一覧は SAP のドキュメントをご覧ください)。 IDES のインストールでは、IDS を使いました。 したがって、次のグループができます (グループ ID は異なっていてもかまいません。 これは単に私がインストールした時に使用した値です)。 グループ ID グループ名 説明 100 dba データベース管理者 101 sapsys SAP システム 102 oper データベースオペレータ デフォルトの Oracle のインストールでは、 dba グループだけが使われます。 oper グループとして、 dba を使う人もいます。(詳しくは Oracle と SAP のドキュメントを参照してください)。 以下のユーザも必要になります。 ユーザ ID ユーザ名 一般名称 グループ 追加グループ 説明 1000 idsadm <sid>adm sapsys oper SAP 管理者 1002 oraids ora<sid> dba oper DB 管理者 adduser でユーザを追加するには、 以下の項目が必要になります (シェルとホームディレクトリを控えてください)。 SAP 管理者については、 Name: idsadm <sid>adm Password: ****** Fullname: SAP IDES Administrator Uid: 1000 Gid: 101 (sapsys) Class: Groups: sapsys dba HOME: /home/idsadm /home/<sid>adm Shell: /bin/sh そしてデータベース管理者については、 Name: oraids ora<sid> Password: ****** Fullname: Oracle IDES Administrator Uid: 1002 Gid: 100 (dba) Class: Groups: dba HOME: /oracle/IDS /oracle/<sid> Shell: /bin/sh あなたが dbaoper の両方のグループを使っていたら、 ここには oper グループもいれるべきです。 ディレクトリ作成 以下のディレクトリは、 普通は別のファイルシステムとして作成します。 どうするかは、あなたの要件に応じて決めてください。 結局はすべてが同じ RAID 5 におかれるので、 私は単なるディレクトリにしました。 まず、一部のディレクトリに (root ユーザで) 所有者と権限を設定しましょう。 &prompt.root; chmod 775 /oracle &prompt.root; chmod 777 /sapmnt &prompt.root; chown root:dba /oracle &prompt.root; chown idsadm:sapsys /compat/linux/usr/sap &prompt.root; chmow 775 /compat/linux/usr/sap 第二に、ユーザ ora<sid> 権限でディレクトリを作成します。 すべて /oracle/IDS のサブディレクトリになります。 &prompt.root; su - oraids &prompt.root; mkdir mirrlogA mirrlogB origlogA origlogB &prompt.root; mkdir sapdata1 sapdata2 sapdata3 sapdata4 sapdata5 sapdata6 &prompt.root; mkdir saparch sapreorg &prompt.root; exit 第三段階では、idsadm (<sid>adm) ユーザ権限でディレクトリを作成します。 &prompt.root; su - idsadm &prompt.root; cd /usr/sap &prompt.root; mkdir IDS &prompt.root; mkdir trans &prompt.root; exit /etc/services 内の項目 SAP R/3 は、/etc/services にいくつか項目を必要としますが、FreeBSD にインストールする場合は正しく設定されません。 次の項目を追加してください (少なくとも、インスタンス番号に対応する項目が必要で、 この場合は 00 です。 dp, gw, sp および ms について 00 から 99 まで項目を追加してもなんの問題もないでしょう)。 sapdp00 3200/tcp # SAP Dispatcher. 3200 + インスタンス番号 sapgw00 3300/tcp # SAP Gateway. 3300 + インスタンス番号 sapsp00 3400/tcp # 3400 + インスタンス番号 sapms00 3500/tcp # 3500 + インスタンス番号 sapmsIDS 3600/tcp # SAP Message Server. 3600 + インスタンス番号 必要となるロケール ロケール SAP は、デフォルトの RedHat のインストールでは入らないロケールを少なくとも 2 つ必要とします。 SAP は、必要な RPM を FTP サーバからダウンロードする形で提供しています (OSS アクセス契約している顧客でなければアクセスできません)。 必要な RPM の一覧は note 0171356 をご覧ください。 適切なリンクを (たとえば de_DEen_US から) 作成するという手もありますが、 業務用システムでそうすることはお勧めしません (いまのところ、IDES システムで問題なく動いてはいますが)。 必要なのは、次のロケールです。 de_DE.ISO-8859-1 en_US.ISO-8859-1 このロケールがないと、 インストール時になんらかの問題が起きるでしょう。 それを (たとえば CENTRDB.R3S ファイルで問題の段階を OK にして) 無視してしまうと、追加でなにかしないと SAP システムにログオンできないでしょう。 カーネルのチューニング カーネルのチューニング SAP R/3 システムには多くのリソースが必要です。 そのため、私はカーネルコンフィグレーションファイルに 以下のパラメータを追加しました。 # Set these for memory pigs (SAP and Oracle): options MAXDSIZ="(1024*1024*1024)" options DFLDSIZ="(1024*1024*1024)" # System V options needed. options SYSVSHM #SYSV-style shared memory options SHMMAXPGS=262144 #max amount of shared mem. pages options SHMMNI=256 #max number of shared memory ident if. options SHMSEG=100 #max shared mem.segs per process options SYSVMSG #SYSV-style message queues options MSGSEG=32767 #max num. of mes.segments in system options MSGSSZ=32 #size of msg-seg. MUST be power of 2 options MSGMNB=65535 #max char. per message queue options MSGTQL=2046 #max amount of msgs in system options SYSVSEM #SYSV-style semaphores options SEMMNU=256 #number of semaphore UNDO structures options SEMMNS=1024 #number of semaphores in system options SEMMNI=520 #number of semaphore indentifiers options SEMUME=100 #number of UNDO keys SAP についてくる文書に最小値が指定されています。Linux に関する記述はないので、詳しいことは HP-UX (32-bit) の節を参照してください。 SAP R/3 のインストール SAP CDROM の準備 インストールの際にマウントしてアンマウントしなければならない CDROM が山ほどあります。十分な数の CDROM ドライブを持っていれば、 すべてマウントしてしまえばよいでしょう。私は、CDROM の中身をそれぞれに対応するディレクトリにコピーすることにしました。 /oracle/IDS/sapreorg/<cd-name> ここで、<cd-name> は KERNEL, RDBMS, EXPORT1, EXPORT2, EXPORT3, EXPORT4, EXPORT5 および EXPORT6 のいずれかです。すべてのファイル名を大文字にするか、 さもなければ、マウントする際に -g オプションをつけるべきです。 次のコマンドを使ってください。 &prompt.root; mount_cd9660 -g /dev/cd0a /mnt &prompt.root; cp -R /mnt/* /oracle/IDS/sapreorg/<cd-name> &prompt.root; umount /mnt インストールスクリプトの実行 まず、インストールディレクトリを用意しなければなりません。 &prompt.root; cd /oracle/IDS/sapreorg &prompt.root; mkdir install &prompt.root; cd install その後、インストールスクリプトを起動すると、 関連するファイルがほぼすべてインストールディレクトリにコピーされます。 /oracle/IDS/sapreorg/KERNEL/UNIX/INSTTOOL.SH これは、完全にカスタマイズされた SAP R/3 デモシステム付きの IDES のインストールなので、EXPORT CD は 3 枚ではなく 6 枚あります。この時点では、 インストールテンプレート CENTRDB.R3S は標準の中心インスタンス (R/3 とデータベース) をインストールするためのもので、 IDES 中心インスタンスをインストールするためのものではありません。 ですから、それに対応する CENTRDB.R3S ファイルを EXPORT1 ディレクトリからコピーしてください。さもないと、 R3SETUP は EXPORT CD を 3 枚しか要求しません。 R3SETUP の起動 LD_LIBRARY_PATH が正しく設定されていることを確認してください。 &prompt.root; export LD_LIBRARY_PATH=/oracle/IDS/lib:/sapmnt/IDS/exe:/oracle/805_32/lib - インストールディレクトリから root ユーザで + インストールディレクトリから + root ユーザで R3SETUP を起動してください。 &prompt.root; cd /oracle/IDS/sapreorg/install &prompt.root; ./R3SETUP -f CENTRDB.R3S スクリプトがいくつか質問してきます (デフォルトが括弧に囲まれて表示され、 その後に実際に入力します)。 質問 デフォルト 入力 Enter SAP System ID (SAP システム ID を入力してください) [C11] IDS<ret> Enter SAP Instance Number (SAP インスタンス番号を入力してください) [00] <ret> Enter SAPMOUNT Directory (SAPMOUNT ディレクトリを入力してください) [/sapmnt] <ret> Enter name of SAP central host (SAP 中心ホストの名称を入力してください) [troubadix.domain.de] <ret> Enter name of SAP db host (SAP データベースホストの名称を入力してください) [troubadix] <ret> Select character set (文字集合を選択してください) [1] (WE8DEC) <ret> Enter Oracle server version (Oracle サーバのバージョンを入力してください) (1) Oracle 8.0.5, (2) Oracle 8.0.6, (3) Oracle 8.1.5, (4) Oracle 8.1.6 1<ret> Extract Oracle Client archive (Oracle クライアントアーカイブを展開しますか) [1] (はい、展開します) <ret> Enter path to KERNEL CD (KERNEL CD へのパスを入力してください) [/sapcd] /oracle/IDS/sapreorg/KERNEL Enter path to RDBMS CD (RDBMS CD へのパスを入力してください) [/sapcd] /oracle/IDS/sapreorg/RDBMS Enter path to EXPORT1 CD (EXPORT1 CD へのパスを入力してください) [/sapcd] /oracle/IDS/sapreorg/EXPORT1 Directory to copy EXPORT1 CD (EXPORT1 CD をコピーするディレクトリ) [/oracle/IDS/sapreorg/CD4_DIR] <ret> Enter path to EXPORT2 CD (EXPORT2 CD へのパスを入力してください) [/sapcd] /oracle/IDS/sapreorg/EXPORT2 Directory to copy EXPORT2 CD (EXPORT2 CD をコピーするディレクトリ) [/oracle/IDS/sapreorg/CD5_DIR] <ret> Enter path to EXPORT3 CD (EXPORT3 CD へのパスを入力してください) [/sapcd] /oracle/IDS/sapreorg/EXPORT3 Directory to copy EXPORT3 CD (EXPORT3 CD をコピーするディレクトリ) [/oracle/IDS/sapreorg/CD6_DIR] <ret> Enter path to EXPORT4 CD (EXPORT4 CD へのパスを入力してください) [/sapcd] /oracle/IDS/sapreorg/EXPORT4 Directory to copy EXPORT4 CD (EXPORT4 CD をコピーするディレクトリ) [/oracle/IDS/sapreorg/CD7_DIR] <ret> Enter path to EXPORT5 CD (EXPORT5 CD へのパスを入力してください) [/sapcd] /oracle/IDS/sapreorg/EXPORT5 Directory to copy EXPORT5 CD (EXPORT5 CD をコピーするディレクトリ) [/oracle/IDS/sapreorg/CD8_DIR] <ret> Enter path to EXPORT6 CD (EXPORT6 CD へのパスを入力してください) [/sapcd] /oracle/IDS/sapreorg/EXPORT6 Directory to copy EXPORT6 CD (EXPORT6 CD をコピーするディレクトリ) [/oracle/IDS/sapreorg/CD9_DIR] <ret> Enter amount of RAM for SAP + DB (SAP + DB に割り当てる RAM の合計を入力してください) 850<ret> (MB) Service Entry Message Server [3600] <ret> Enter Group-ID of sapsys (sapsys のグループ ID を入力してください) [101] <ret> Enter Group-ID of oper (oper のグループ ID を入力してください) [102] <ret> Enter Group-ID of dba (dba のグループ ID を入力してください) [100] <ret> Enter User-ID of <sid>adm (<sid>adm のユーザ ID を入力してください) [1000] <ret> Enter User-ID of ora<sid> (ora<sid> のユーザ ID を入力してください) [1002] <ret> Number of parallel procs (並列プロセスの数) [2] <ret> CD をそれぞれ別の場所にコピーしないと、SAP インストーラは (CD 内の LABEL.ASC ファイルで識別される) 必要な CD を見つけられず、CD を挿入 / マウントして承認するかマウントパスを入力するよう求めてくるでしょう。 CENTRDB.R3S ファイルには、間違いがないわけではありません。 私の場合は、EXPORT4 を再度要求されました (が、正しいキーを表示していたので (6_LOCATION、それから 7_LOCATION など))、 正しい値を入力して進めて問題ありませんでした。 いらいらしないようにしてください。 後で触れるいくつかの問題を除けば、Oracle データベースソフトウェアをインストールするところまでは 素直に進むはずです。 Oracle 8.0.5 のインストール Linux と Oracle DB で起こりうる問題についての SAP-Notes と Oracle の Readme を読むようにしてください。 すべてではないにしても、 ほとんどは互換性のないライブラリに起因しています。 Oracle のインストールについて詳しいことは、Oracle のインストール の章をご覧ください。 orainst による Oracle 8.0.5 のインストール Oracle 8.0.5 を利用する予定なら、 無事に再リンクするのにライブラリがいくつか追加で必要です。 なぜなら、Oracle 8.0.5 は古い glibc (RedHat 6.0) とリンクされていますが、RedHat 6.1 は新しい glibc を利用しているからです。 ですから、リンクが行われることを保証するには、 次の追加パッケージをインストールしなければなりません。 compat-libs-5.2-2.i386.rpm compat-glibc-5.2-2.0.7.2.i386.rpm compat-egcs-5.2-1.0.3a.1.i386.rpm compat-egcs-c++-5.2-1.0.3a.1.i386.rpm compat-binutils-5.2-2.9.1.0.23.1.i386.rpm 詳しくは、対応する SAP-Note や Oracle Readme をご覧ください。他に選択肢がなければ (私がインストールした時は、確認している暇がありませんでした)、 元のバイナリまたは再リンクされたバイナリを、 元の RedHat システムから持ってきて使うこともできるでしょう。 インテリジェントエージェントをコンパイルするために、 RedHat Tcl パッケージがインストールされていなければなりません。 tcl-8.0.3-20.i386.rpm が入手できないなら、RedHat 6.1 用の tcl-8.0.5-30.i386.rpm など新しいものでも構いません。 再リンク以外は、インストールは簡単です。 &prompt.root; su - oraids &prompt.root; export TERM=xterm &prompt.root; export ORACLE_TERM=xterm &prompt.root; export ORACLE_HOME=/oracle/IDS &prompt.root; cd /ORACLE_HOME/orainst_sap &prompt.root; ./orainst ソフトウェアのインストールが終わるまで、すべての画面で Enter を押して承認してください。ただし、 Oracle On-Line Text Viewer は現時点では Linux 版がないので選択を外してください。 その後、Oracle は利用可能な gcc, egcsi386-redhat-linux-gcc ではなく、 i386-glibc20-linux-gcc で再リンクしようとします。 時間が限られていたので、私は Oracle 8.0.5 PreProduction リリースのバイナリを利用することにしました。 最初 RDBMS-CD 収録のバージョンを動かそうとして失敗し、 その時点では正しい RPM を見つけて利用するのはまるで悪夢のようだったからです。 Linux (Kernel 2.0.33) 用の Oracle 8.0.5 Pre-Production リリースのインストール これをインストールするのは簡単です。 CD をマウントして、インストーラを起動してください。 インストーラが Oracle ホームディレクトリの位置をたずねて、 そこにすべてのバイナリをコピーします。 もっとも、私はその前の RDBMS インストールを試した時の残りを削除していませんでした。 この後、Oracle データベースは問題なく起動できました。 SAP R/3 のインストールの続行 まず、idsamd (<sid>adm) ユーザと oraids (ora<sid>) ユーザの環境設定を確認してください。 両者とも、.profile, .login.cshrc をもっていて、いずれも hostname を使っているはずです。 そのシステムのホスト名が完全修飾名であれば、すべてのファイルで hostnamehostname -s に変更する必要があります。 データベースの読み込み その後、(exit を選択したかどうかによって) R3SETUP を再起動または継続実行します。R3SETUP は、テーブル領域を作成し、EXPORT1 から EXPORT6 までデータを R3load でデータベースに読み込みます (これは IDES システムです。違う場合は、EXPORT1 から EXPORT3 だけになります)。 データベースの読み込みが完了したら (数時間に渡るかもしれません)、何かパスワードを要求されます。 テスト用にインストールしたのであれば、 周知のデフォルトパスワードを使ってもよいでしょう (セキュリティが問題になるなら、異なるものを使ってください!)。 質問 入力 Enter Password for sapr3 (sapr3 のパスワードを入力してください) sap<ret> Confirum Password for sapr3 (sapr3 のパスワードを再入力してください) sap<ret> Enter Password for sys (sys のパスワードを入力してください) change_on_install<ret> Confirm Password for sys (sys のパスワードを再入力してください) change_on_install<ret> Enter Password for system (system のパスワードを入力してください) manager<ret> Confirm Password for system (system のパスワードを再入力してください) manager<ret> ここで、dipgntab で少し問題がありました。 Listener 次のように、Oracle-Listener を oraids (ora<sid>) ユーザで起動してください。 umask 0; lsnrctl start そうしないと、ソケットが正しいパーミッションにならないので、 ORA-12546 が発生するかもしれません。SAP note 072984 をご覧ください。 インストール後の手順 SAP R/3 ライセンスキーの要求 一時ライセンスは 4 週間だけ有効なので、これが必要になります。 オペレーティングシステムを正しく入力するようにしてください: (X) Other (その他): FreeBSD 4.3 Stable。 まず、ハードウェアキーを入手してください。 idsadm ユーザでログオンし、 saplicense を呼び出してください。 &prompt.root; /sapmnt/IDS/exe/saplicense -get saplicense をオプションなしで起動すると、オプション一覧を出力します。 ライセンスキーを受け取ったら、 次のようにしてインストールできます。 &prompt.root; /sapmnt/IDS/exe/saplicense -install そうしたら、次の値を入力します。 SAP SYSTEM ID = <SID, 3 chars> CUSTOMER KEY = <hardware key, 11 chars> INSTALLATION NO = <installation, 10 digits> EXPIRATION DATE = <yyyymmdd, usually "99991231"> LICENSE KEY = <license key, 24 chars> ユーザの作成 クライアント 000 内でユーザを作成します (クライアント 000 内で行わなければなりませんが、 ユーザ sap*ddic 以外のユーザでなければならないタスクのためです)。 ユーザ名として、私は通常 wartung (または 英語で service) を選択しています。必要となるプロファイルは sap_newsap_all です。セキュリティを高めるため、 すべてのクライアントのデフォルトユーザのパスワードを変更すべきです (ユーザ sap*ddic を含みます)。 トランスポートシステム、プロファイル、操作モードなどの設定 クライアント 000 内で、ddic と sap* 以外のユーザについて、少なくとも次のことを行ってください。 作業 トランザクション トランスポートシステムの設定。たとえば、 スタンドアロントランスポートエンティティ STMS システム用のプロファイルの作成・編集 RZ10 操作モードとインスタンスの維持管理 RZ04 これらのインストール後の手順は、それ以外も含めて SAP インストールガイドにすべて書かれています。 Edit init<sid>.sap (initIDS.sap) /oracle/IDS/dbs/initIDS.sap ファイルには SAP バックアッププロファイルが含まれます。ここで、 使用するテープの容量、 圧縮の種類などを定義しなければなりません。 sapdbabrbackup と共に動かすため、以下の値を変更しました。 compress = hardware archive_function = copy_delete_save cpio_flags = "-ov --format=newc --block-size=128 --quiet" cpio_in_flags = "-iuv --block-size=128 --quiet" tape_size = 38000M tape_address = /dev/nsa0 tape_address_rew = /dev/sa0 説明: compress 私が使っているテープは HP DLT1 で、ハードウェア圧縮を行います。 archive_function この変数は、Oracle のアーカイブログを保存する際のデフォルトの振る舞いを定義します。 新規のログファイルはテープに保存され、 保存済みのログファイルは再度保存された後、削除されます。 これは、もし、データベースを復旧しなければならなくなったのに、 アーカイブテープのどれかが駄目になっていたという場合にも問題を回避します。 cpio_flags デフォルトはブロックサイズを 5120 バイトに設定する -B が使われます。DLT テープについては、HP はブロックサイズに 32 キロバイト以上を推奨していますので、64 キロバイトに設定する --block-size=128 を用いました。65535 より多くの inode 番号があるので、--format=newc が必要になります。 最後のオプション --quiet は、cpio が保存したブロック数を出力すると brbackup が文句をいうので必要になります。 cpio_in_flags は、データをテープから読み込むのに必要となるフラグです。 データ形式は自動的に認識されます。 tape_size これは通常、テープの raw (生の) 容量を表します。 (ハードウェア圧縮を利用しているので) 安全のため、 value は実際の値よりもわずかに小さくしています。 tape_address cpio と組み合わせて用いる巻き戻し不可なデバイス。 tape_address_rew cpio と組み合わせて用いる巻き戻し可能なデバイス。 インストール後の設定 以下の SAP パラメータについてはインストール後に調整する必要があります。 名前 ztta/roll_extension 250000000 abap/heap_area_dia 300000000 abap/heap_area_nondia 400000000 em/initial_size_MB 256 em/blocksize_kB 1024 ipc/shm_psize_40 70000000 SAP-Note 0013026: 名前 ztta/dynpro_area 2500000 SAP-Note 0157246: 名前 rdisp/ROLL_MAXFS 16000 rdisp/PG_MAXFS 30000 以上のパラメータと、1 ギガバイトのメモリを持つシステムでは、 以下のようなメモリ使用量となるでしょう。 Mem: 547M Active, 305M Inact, 109M Wired, 40M Cache, 112M Buf, 3492K Free インストール中の問題 R3SETUP 中の OSUSERSIDADM_IND_ORA エラー この段階で R3SETUP がエラーを報告したら、CENTRDB.R3S ファイルを編集します。[OSUSERSIDADM_IND_ORA] という項目を探して、以下の値を変更します。 HOME=/home/idsadm (was empty) STATUS=OK (had status ERROR) 以下のように、R3SETUP を再起動します。 &prompt.root; ./R3SETUP -f CENTRDB.R3S R3SETUP 中の OSUSERDBSID_IND_ORA この段階で R3SETUP がエラーを報告する可能性もあります。 CENTRDB.R3S を編集して、[OSUSERDBSID_IND_ORA] という項目を探し、その項目内の次の値を変更してください。 STATUS=OK その後、R3SETUP を再起動します。 &prompt.root; ./R3SETUP -f CENTRDB.R3S Oracle のインストール中に oraview.vrf ファイルがみつからないという (FILE NOT FOUND) エラー インストールを開始する前に Oracle On-Line Text Viewer の選択を外すのを忘れています。この選択肢は現在 Linux にはないにもかかわらず、インストール対象に選ばれています。 Oracle のインストールメニューでこの製品を選択しているのを外して、 インストールを再開してください。 R3SETUP, RFC または SAPGUI 起動時に TEXTENV_INVALID エラー このエラーが起きた場合は、正しいロケールがありません。 SAP note 0171356 にインストールしておかなければならない RPM が挙げられています (たとえば、RedHat 6.1 なら saplocales-1.0-3, saposcheck-1.0-1)。R3SETUP がこれに関係するエラーを出してもすべて無視して、対応する状態を ERROR から OK に (CENTRDB.R3S で) 変更して R3SETUP を再起動していると、SAP システムは正しく設定されず、 システムを起動できたとしても、sapgui でシステムに接続することはできません。古い Linux 版 sapgui で接続しようとすると、次のメッセージがでます。 Sat May 5 14:23:14 2001 *** ERROR => no valid userarea given [trgmsgo. 0401] Sat May 5 14:23:22 2001 *** ERROR => ERROR NR 24 occured [trgmsgi. 0410] *** ERROR => Error when generating text environment. [trgmsgi. 0435] *** ERROR => function failed [trgmsgi. 0447] *** ERROR => no socket operation allowed [trxio.c 3363] Speicherzugriffsfehler これは、SAP R/3 がロケールを割り当てられないか、 正しく設定されていない (データベーステーブルの一部の項目が不足している) ためです。SAP に接続するためには、次の項目をファイル DEFAULT.PFL に追加してください (note 0043288 参照)。 abap/set_etct_env_at_new_mode =0 install/collate/active =0 rscp/TCP0B =TCP0B SAP システムを再起動してください。 地域特有の言語設定が期待どおりに動かないかもしれませんが、 システムに接続できるはずです。 地域設定を修正 (して、適切なロケールを提供) したら、 これらの項目を DEFAULT.PFL から削除して SAP システムを再起動してかまいません。 ORA-12546 エラー。リスナーの適切なパーミッションによる操作 次のコマンドを実行して、Oracle リスナーをユーザ oraids で起動してください。 &prompt.root; umask 0; lsnrctl start そうしないと、 ソケットが正しいパーミッションになっていないという ORA-12546 エラーを受け取るかもしれません。 SAP note 0072984 をご覧ください。 R3SETUP 中の [DIPGNTAB_IND_IND] エラー 一般的なことは SAP note 0130581 (R3SETUP の DIPGNTAB 段階での終了) をご覧ください。 この特定のインストール段階において、 なぜかインストールプロセスは、適切な SAP システム名 "IDS" を使うかわりに、空文字列 "" を使います。 ディレクトリにアクセスするのにパスを <sid> (この場合は IDS) を使って生成するので、 これはちょっとした問題を起こすことがあります。 /usr/sap/IDS/SYS/... /usr/sap/IDS/DVMGS00 にアクセスするかわりに、 つぎのパスを使います。 /usr/sap//SYS/... /usr/sap/D00i インストールを続けるため、 リンクと追加のディレクトリを作成します。 &prompt.root; pwd /compat/linux/usr/sap &prompt.root; ls -l total 4 drwxr-xr-x 3 idsadm sapsys 512 May 5 11:20 D00 drwxr-x--x 5 idsadm sapsys 512 May 5 11:35 IDS lrwxr-xr-x 1 root sapsys 7 May 5 11:35 SYS -> IDS/SYS drwxrwxr-x 2 idsadm sapsys 512 May 5 13:00 tmp drwxrwxr-x 11 idsadm sapsys 512 May 4 14:20 trans この現象を解説している SAP notes (0029227 and 0008401) があります。 R3SETUP 中の [RFCRSWBOINI_IND_IND] エラー (ファイル CENTRDB.R3S で) 問題の段階の状態 (STATUS) を ERROR から OK に設定して R3SETUP を再起動してください。 インストール後、レポート RSWBOINS をトランザクション SE38 から実行しなければなりません。 RFCRSWBOINI および RFCRADDBDIF 段階の詳細については SAP note 0162266 をご覧ください。 R3SETUP 中の [RFCRADDBDIF_IND_IND] エラー (ファイル CENTRDB.R3S で) 問題の段階の状態 (STATUS) を ERROR から OK に設定して R3SETUP を再起動してください。 インストール後、レポート RADDBDIF をトランザクション SE38 から実行しなければなりません。詳しくは SAP note 0162266 をご覧ください。 高度なトピックス Linux バイナリ互換機能がどのような仕組みなのか興味がある人はこのセクションを読んでください。 以下の文章で説明されていることのほとんどは &a.chat; に投稿された Terry Lambert (tlambert@primenet.com) 氏のメール (Message ID: <199906020108.SAA07001@usr09.primenet.com>) をもとにしています。 どのように動くのでしょう? execution class loader FreeBSD は、“実行クラスローダ (execution class loader) ” と呼ばれる抽象的な機構を持っています。これは &man.execve.2; システムコールへの楔という形で実装されています。 FreeBSD は、シェルインタプリタやシェルスクリプトを実行するための #! ローダを持った単一のプログラムローダではなく、 ローダのリストを持っているのです。 歴史的には、Unix プラットフォーム上の唯一のローダーがマジックナンバー (一般的にはファイルの先頭の 4 ないし 8 バイトの部分) の検査を行ないシステムで実行できるバイナリかどうかを検査し、 もしそうならバイナリローダーを呼び出すというようになっていました。 もし、そのシステム用のバイナリでない場合には、 &man.execve.2; システムコールの呼び出しは失敗の戻り値を返し、 シェルがシェルコマンドとして実行しようと試みていたわけです。 この仮定は現在利用しているシェルがどのようなものであっても変わりません。 後に &man.sh.1; に変更が加えられ、先頭の 2 バイトを検査した結果 :\n であれば代わりに &man.csh.1; を呼び出す、 というようになりました (この変更は SCO が最初に行なったと思われます)。 現在の FreeBSD は、プログラムローダリストを走査します。 その際、空白文字までの文字列をインタプリタとして認識する、 通常の #! ローダを用いるため、 該当するものが存在しなければ最終的に /bin/sh がロードされます。 ELF Linux ABI をサポートするため、FreeBSD は ELF バイナリを示すマジックナンバを確認します。 (ただし、この段階では FreeBSD、Solaris、Linux、そしてその他の ELF イメージ形式を使っている OS を区別することはできません)。 Solaris ELF ローダは、特殊なマーク (brand) があるかどうか探します。 このマークとは、ELF イメージのコメントセクションのことです。 SVR4/Solaris の ELF バイナリには、このセクションは存在しません。 Linux バイナリを実行するためには、 ELF バイナリに &man.brandelf.1; で説明されている Linux のマークが付けられていなければなりません。 &prompt.root; brandelf -t Linux file 上のようにすることで、指定されたファイルは Linux のマークが付けられ、 ELF ローダが認識できるようになります。 ELF branding ELF ローダが Linux マークを確認すると、 ローダは proc 構造体内の ある一つのポインタを置き換えます。システムコールは全て、 このポインタ (伝統的な Unix システムではこれは構造体の配列 sysent[] で、システムコールが含まれています) を通してインデックスされます。 さらに、そのプロセスには Linux カーネルモジュールに必要な シグナルトランポリンコード (訳注: シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や、 他の (細かな) 調整のための設定が行なわれます。 Linux システムコールベクタは、 さまざまなデータに加えて sysent[] エントリーのリストを含んでおり、それらのアドレスはカーネルモジュール内にあります。 Linux バイナリがシステムコールを発行する際、トラップコードは proc 構造体を用いてシステムコール関数ポインタを 解釈します。そして FreeBSD ではなく Linux 用のシステムコールエントリポイントを得るわけです。 さらに、Linux モードは状況に応じてファイルシステム本来のルートマウントポイントを置き換えてファイルの参照を行ないます。 これは、union オプションを指定してマウントされたファイルシステム (unionfs ではありません!)が行なっていることと同じです。 ファイルを検索する際にはまず /compat/linux/original-path ディレクトリを、それから見つけられなかったときにのみ、 /original-path を調べます。 こうすることで、他のバイナリを要求するバイナリの実行を可能にしています (したがって、Linux 用プログラムツールは Linux ABI サポート環境下で完全に動作するわけです)。 またこれは、もし対応する Linux バイナリが存在しない場合に Linux バイナリが FreeBSD バイナリをロードしたり、実行したりすることが可能であること、 その Linux バイナリに自分自身が Linux 上で実行されていないことを 気付かせないようにする目的で、&man.uname.1; コマンドを /compat/linux ディレクトリに置くことができる、 ということを意味します。 要するに、Linux カーネルが FreeBSD カーネルの内部に存在しているわけです。 カーネルによって提供されるサービス全ての実装の基礎となるさまざまな関数は FreeBSD システムコールテーブルエントリと Linux システムコールテーブルエントリの両方で共通に利用されています。 これらにはファイルシステム処理、仮想メモリ処理、シグナル伝送、System V IPC などが含まれますが、 FreeBSD バイナリは FreeBSD グルー (訳注: glue; 二者の間を仲介するという意味) 関数群、 そして Linux バイナリは Linux グルー関数群を用いる、 という点だけが異なります (過去に存在したほとんどの OS は、 自分自身のためのグルー関数群しか備えていません。 前述したように、システムコールを発行する際、 各々のプロセスの proc 構造体内にある、 ローダによって動的に初期化されるポインタを参照してアドレスを得る代わりに、 静的でグローバルな sysent[] 構造体の配列に システムコール関数のアドレスが直接格納されているのです)。 さて、どちらを本来の FreeBSD ABI (訳注: Applications Binary Interface; 同じ CPU を利用したコンピュータ間でバイナリを共有するための規約のこと) と呼ぶべきなのでしょうか? 実は、どちらが本来のものであるかということを論ずることに意味はありません。 基本的に、FreeBSD グルー関数群はカーネルの中に静的にリンクされていて、 Linux グルー関数群は静的にリンクすることも、 カーネルモジュールを介して利用することもできるようになっている、 という違いがあるだけ (ただしこれは現時点においての話であり、 将来のリリースで変更される可能性がありますし、 おそらく実際に変更されるでしょう) です。 あ、「でもこれは本当にエミュレーションと呼べるのか」って? 答えは「いいえ」です。これは ABI の実装であり、 エミュレーションとは異なります。エミュレータが呼び出されているわけではありません (シミュレータでもないことをあらかじめ断っておきましょう)。 では、これがよく Linux エミュレーションと呼ばれるのは何故でしょうか? それはもちろん FreeBSD の売りにするためでもあるのですが、 実際には、次のような理由によります。 この機能が初めて実装された頃、 動作原理を説明する以外にこの機能を表現する言葉はありませんでした。 しかし、コードをコンパイルしたりモジュールをロードしない場合、 「FreeBSD 上で Linux バイナリを実行する」という表現は、 厳密に考えると適切ではありません。 そこで、その際にロードされているもの自身を表現する言葉 — すなわち Linux エミュレータが必要だったのです。