Chapter 43. 移植性
Prev | Part VI. Reference Section | Next

## Chapter 43. 移植性

### Jelmer R. Vernooij

The Samba Team

`<jelmer@samba.org>`

### John H. Terpstra

Samba Team

`<jht@samba.org>`

Samba は広い範囲のプラットフォームで機能する。しかし、すべてのプラットフォームの提供するインタフェースが常に互換性があるとは限らない。この章は Samba のコンパイルと利用についてプラットフォームに特化した情報を含む。

## HPUX

(歴史的な理由により)HPでは、補助グループの実装が非標準である。グループファイルには`/etc/group` と `/etc/logingroup`の2つがある。システムは、UIDから番号(訳注:GIDのことか)を前者のファイルを使用して割り当てるが、initgroups()は後者を参照する。コツを知っている大抵のシステム管理者は、シンボリックリンク`/etc/group` を `/etc/logingroup` へ張る(ここに記述することができない愚鈍な理由でハードリンクでは機能しない)。initgroups()は、`/etc/logingroup`の中で所属しているグループに不正なIDがあればエラーを出す。ここで言う不正なIDとは `[0..UID_MAX]`の範囲を超えた場合であり、HP-UX の`UID_MAX`は現在のところ60000である(訳注:HPのページで見る限り、現在は2147483647)。この範囲は、-2 と 65534 を除外している。これは通常 `nobody`のGIDである。

もしこの問題に遭遇した場合、initgroups()に失敗するプログラムを実行しているユーザが、許可された範囲外の GID のグループユーザでないことを確認すること。

このことは、HPのマニュアルページ setgroup(2)とpasswd(4)に記述されている。

HP-UXでは、gccまたはHP ANSIコンパイラを利用しなければならない。HP-UXに付属する無償のコンパイラは ANSI に準拠していないためSambaをコンパイルできない。

## SCO UNIX

もし古いバージョンのSCO UNIXを稼働させているのなら、Sambaを正常に機能させるためには、TCP/IPの重要なパッチを入手する必要があるだろう。そのパッチがないと、Sambaを利用している際に転送データが破損する。

必要とするパッチは UOD385 Connection Drivers SLSである。SCOftp.sco.com からディレクトリSLSの中にある、ファイル uod385a.Z と uod385a.ltr.Z が当該のものである。

ここで提供される情報は、SCO UNIXの古いバージョンを参照している。もしより新しいSCO UNIX のバイナリが必要ならば、インストール可能なパッケージを入手するためSCOに連絡すること。インストールするバイナリのためプラットフォームが最新であることも、SCOで確認しなければならない。これは、インストール作業にてデータ破損を避けるために重要なことである。SCO UNIX製品用にSambaをビルドする場合、 Samba のソースに大幅なパッチが必要となるかもしれない。SCO から直接バイナリパッケージを入手する方がとても容易である。

## DNIX

DNIX は seteuid() と setegid() に問題がある。これらのルーチンはSambaが正しく機能するために必要である。しかし、それらはいくつかの理由によりDNIX の Cライブラリから抜け落ちている。

この理由により、Sambaはincludes.hのDNIXセクションにて、既定値でNO_EIDマクロを定義している。この問題について、限られた方法ではなんとか機能する。しかし理想からは程遠く、いくつかの事柄はまだ正しく機能しないだろう。

この問題を正しく解決するため、以下の2つの関数をアセンブルする必要がある。そしてそれらをCライブラリに加えるか、Sambaにリンクすること。以下のコードを `setegid.s` の中に記述する。

            .globl  _setegid_setegid:        moveq   #47,d0        movl    #100,a0        moveq   #1,d1        movl    4(sp),a1        trap    #9        bccs    1$        jmp     cerror1$:        clrl    d0        rts

以下を `seteuid.s` の中に記述すること。

            .globl  _seteuid_seteuid:        moveq   #47,d0        movl    #100,a0        moveq   #0,d1        movl    4(sp),a1        trap    #9        bccs    1$        jmp     cerror1$:        clrl    d0        rts

ファイル作成後、これを以下のようにアセンブルする。

    $ as seteuid.s$ as setegid.s

その結果、`seteuid.o` と`setegid.o`が作成される。

次に、SambaのMakefileにて、DNIXセクションの中のLIBSM行にそれらを加える。LIBSM行は、以下のものに多少似た形になるだろう。

    LIBSM = setegid.o seteuid.o -ln

次に、`includes.h` の DNIX セクションから

    #define NO_EID

の行を削除する。

## Red Hat Linux

Red Hat Linuxのいくつかのバージョンでは、既定値を指定してインストールする間に、以下のようなエントリを `/etc/hosts` に追加する。

    127.0.0.1 loopback "hostname"."domainname"

これは Samba にループバックインタフェースへループバックすることを引き起こす。結果として、 Samba は他の PC と正常に通信することに失敗する。ひいてはマスターブラウズリストの保有者とマスターブラウザが誰なのか正常にネゴシエートすることも失敗するだろう。

修正措置: 127.0.0.1 で始まる行の中で "loopback" という語の後のエントリを削除する。

## AIX: シーケンシャル先読み

シーケンシャル先読みを無効にすると、相対的に高度なマルチプログラミング(多数の smbd プロセスや他の負荷との混合)、充分でない物理メモリ、またはより遅いディスク技術がある場合に、Sambaの効率を著しく改善できる。これらは AIX に高いウエイト値の原因となる。シーケンシャル先読みを無効にすることは、またシステム上の他の負荷に対して反作用を及ぼすことがあるため、他のアプリケーションへのインパクトを評価する必要がある。

IBMによって提供される既定値の利用が推奨される。しかし多数のウエイトタイムを経験した場合、以下のコマンドで先読みを無効にすることを試すこと。

AIX 5.1 とそれ以前: `vmtune -r 0`

AIX 5.2 とそれ以降の jfs ファイルシステム: `ioo -o minpgahead=0`

AIX 5.2 とそれ以降の jfs2 ファイルシステム: `ioo -o j2_minPageReadAhead=0`

もし、jfsとjfs2ファイルシステムが同一ホスト上に混合する場合、単純に双方のiooコマンドを利用する。

## Solaris

### ロックの改善

Solaris上でSambaを稼働させて、F_SETLKW64/fcntlにまつわる問題を経験している人たちがいる。ビルトインのファイルロック機構はスケーラブルではなかった。プロセスがファイルのロックを試行するループへ入り込むまで、効率が低下するだろう。それは、ロックを試行し、失敗し、そして再び試行する。ロックする試みは、許可が与えられる前に失敗する。目に見える兆候は CPU を一握りのプロセスが占有することであり、もしもそれらが信頼されるのであれば、F_SETLKW64 のループから抜け出せなくなるだろう。

このバグを修正するために必要な最新のパッチを Sun のサポートに確認すること。Solaris 2.6 向けのパッチリビジョンは 105181-34 、Solaris 8 向けは 108528-19 、Solaris 9 向けは 112233-04 である。パッチをインストールした後、 Samba を再び構成しリビルドすることを推奨する。

この件について報告した Joe Meslovich に感謝する。

### Solaris9上の Winbind

Solaris 9 のnsswitchは、Winbind NSS モジュールの利用を拒絶する。この振る舞いは、112960-14というSUNによるパッチにて修正されている。

Prev | Up | Next
Chapter 42. Sambaのコンパイル方法 | Home | Chapter 44. Samba と他の CIFS クライアント