donkey.iniドキュメント

このeserverコマンドを入力することにより、利用可能なパラメータの全てとその現在の値をリストにすることができます:
print
これらの変数の全てがdonkey.iniファイル内で変更でき、その多くがeserverコンソールで動的に変更できます。
注意:ブール値は「false」「true」「1」「0」のどれかになります。

LOWIDenable (整数)・・・次のバージョンでは真偽値
もし1なら、LOWIDユーザがログインすることができるようになります。デフォルト値:1

LOWIDpercent (整数)
LOWIDユーザの最大割合。注意:サーバ内にあまりに多くのLOWIDを持つことはソースを持つユーザ(HighID)が少なくなることを意味するのであまり良い考えとは言えません。33%以上のLOWIDユーザを持つことはお勧めできません。デフォルト値:20

autoservlist (パス名)
もし設定されていれば、約255秒毎に動作中の既知サーバだけをserver.metファイルに書き込みます。デフォルト値:none

blacktime (整数)
BAN時間の秒数:クライアントIPが(例えばサーバに対しあまりに多くの要求を送信した等で)ブラックリストになっている場合、少なくともこの時間内はブラックリスト内に入れられたままになります。デフォルト値:3600

blocsize (整数)
メモリ割当てユニットのバイト数。.巨大なTLBページのサイズ(4MB)であるため、この値を変更しないで下さい。デフォルト:4194304

bverbose (真偽値)
もしtrueなら、eserverはブラックリストのIPと「二重接続」のログを(コンソールとログファイル、又はログファイルのみ)とります。デフォルト値:false

connIP (IPアドレス)
サーバが1つ以上のIPを持っている場合、出力ソケットのバインド用に2番目のIPを使用することができ、サーバは新規クライアントのLOWID/HighID能力をチェックする為に使用することができます。異なるIPを使用することで、偽情報を与えるいくつかの悪質なクライアント(ハッシュ盗人)を排除することができます。

console (真偽値)
サーバがメッセージを出力する時、もしconsoleフラグが「true」ならメッセージはコンソールに送信され、logFileフラグが「true」ならログファイルにも送信されます。デフォルト値:true

dcache_line (整数)
この値はeserverユーザのファイルディスクリプタを格納するメモリブロック境界を制御します。CPUのL1キャッシュサイズを使用すれば処理能力が向上しますが、より多くのRAMを消費します。PUとPVのL1キャッシュサイズは32バイトです。AthlonとP4ではこれは64バイトになります。デフォルト値:システム依存

defer_accept (整数)
LinuxカーネルはTCP_DEFER_ACCEPTという機能を持っていて、これは新規TCPストリームのaccept()関数を遅延させます。リスニング中のアプリケーションは、何らかのデータを受信した時にだけ新しい接続について通知されます。defer_acceptパラメータは接続確立時から最初のデータ転送までの間の最大遅延時間です。デフォルト値:10

desc (文字列)
これはサーバの説明文です。この文字列はクライアントに送信されます。デフォルト値:eserver

filter[] (フィルタ式)
クライアントが公開するファイルに対して適用されるフィルタを設定します。詳細についてはdserverドキュメンテーションを参照して下さい。
フィルタ例:
filter[0]=(.part.met)
filter[1]=(.part.stats)
filter[2]=(#FORMAT met)
filter[3]=(#FORMAT part)
filter[4]=(#FORMAT dll)|(#FORMAT sys)

fwcommand (パス名)
v16.41から導入されたこのパラメータは、ファイル名を与えます。このファイルはeserverがログインプロセス上でクライアントループを検出した時に更新されます。「バッドリスト」にIPが追加された場合、次のような行が加えられます:
Wed Oct 8 16:07:06 2003 DENY 172.16.0.156
サーバが再びクライアントを受け付ける用になると次のような行が追加されます
Wed Oct 8 16:07:06 2003 ACCEPT 172.16.0.156

このファイルは新しいレコードをこのファイルから読み込むデーモンと共に使用することができ、iptables/ipfw/whateverといったコマンドを出力します。

Linuxでiptableを使った例

初期化時は、(ファイアーウォールセットアップは)SYN TCPパケットだけの為にSYNチェインを初期化し、INPUTチェイン内に挿入します。
iptables -N SYN
iptables -I INPUT -p tcp --dport 4661 --syn -j SYN
eserver又はデーモンが再起動された場合、SYNチェイン内の規則はフラッシュされます:
iptables -F SYN
eserverによって「DENY」された時、チェイン内に規則が追加されます:
iptables -I SYN -s the_IP -j DROP
eserverによって「ACCEPT」された時、規則が取り除かれます:
iptables -D SYN -s theIP -j DROP
RECENTのように、IP数値が高い場合に高速になる巧妙なiptableのモジュールを使用することもできます(リストの替わりにハッシュテーブルを利用する)。

hardLimit (整数)
もしクライアントがhardLimitで指定した数より多くの共有ファイルを公開している場合、サーバは(ファイルリスト全体を受信する前に)そのクライアントを切断します。横着なユーザはしばしば所有する全てのファイルを共有していたりするので、これは帯域幅を保護する事に繋がります。デフォルト値:4000
softLimitパラメータ参照

hugefile (文字列)
(Linux 2.5/2.6のみ):これはハードウェアTLB損失を少なくする為に、eserverが4MBの巨大ページを割り当てることを許可します。IA32上の通常ページサイズは4Kバイトですが、これは巨大な量のメモリを使用するプログラムには小さすぎます。小さなサーバの為にそのような高度な機能のことで悩まないで下さい。
使用例:
あなたのLinuxカーネルのコンフィグをチェックして下さい。次の設定でなければなりません:
CONFIG_HUGETLB_PAGE=y
CONFIG_HUGETLBFS=y
hugetlbfsをマウントできます:(/etc/rc.d/rc.localのようなスタートアップファイル)
mkdir /huge
mount -t hugetlbfs none /huge
echo 100 >/proc/sys/vm/nr_hugepages
donkey.iniに次を追加:
hugefile=/huge/eserver
注意:HPUX、Solaris、Windows2003では、eserverは自動的に大きいページを割り当てようとします。
Windows2003ではeserverを開始する前にSE_LOCK_MEMORY特権がユーザに与えられているべきです。さもなければ、eserverは(4MB以上の巨大ページではなく)通常サイズのメモリを割り当ててしまいます。

jigleIP (IPアドレス)
jiggleのIPアドレス。www.jigle.comのブラックリストを回避します。デフォルト値:212.249.10.246

listenIP (IPアドレス)
サーバはホストのIP全ての替わりに、特定のアドレスへのTCP接続をlistenすることができます。デフォルト値:全てのアドレス(0.0.0.0)

listen_backlog (整数)
listenバックログ。eserverは全てのサーバに適したとても高い値を持っていますが、それを変更することはできません。デフォルト値:1024
注意:Linuxでは/proc/sys/net/ipv4/tcp_max_syn_backlog:システム全体の制限値 をチェックして下さい。

logFile (真偽値)
trueに設定されているなら、サーバはそのメッセージをカレントディレクトリ内の「log」ファイルに追加します。デフォルト値:false

login_timeout (整数)
サーバがバックドアのテストに成功するのを待つ秒数。バックドアテストはサーバによるクライアントの4662番ポートへのHighIDかLOWIDかをチェックする為の接続です。デフォルト値:20

maxClients (整数)
このサーバに収容するクライアントの最大数。デフォルト値:1024

max_frame_size (整数)
クライアントがmax_frame_size以上のフレームを送信した場合、そのクライアントを切断します。デフォルト値:250000

max_slimit_nb_cell (整数)
これはslimitモジュールが管理できるIPの最大数です。デフォルト値:393216

max_string_size (整数)
これは文字列の最大サイズです。とても長いファイル名を送信するクライアントが珠に存在します。サーバは長すぎる文字列を切り捨てます。デフォルト値=140

maxSearchCount (整数)
これは(接続クライアントからの)検索要求に対する検索結果の最大数です。デフォルト値:200

maxSearchCountz (整数)
これは(zlibを使用できる接続クライアントからの)検索要求に対する検索結果の最大数です。デフォルト値:300

maxUDPSearchCount (整数)
これは(未接続クライアントからの)検索要求に対する検索結果の最大数です。デフォルト値:20

maxVersion (整数)
クライアントソフトウェアには全てバージョン番号があります。クライアントがmaxVersionよりも大きいバージョンの場合、ログインは許可されません。デフォルト値:2000

maxnozlib (整数)
v16.44から導入。現在のユーザ数がmaxnozlibの値を超える場合、zlibに対応しているクライアントだけがログインを許可されます。デフォルト値:250000

maxservers (整数)
このサーバがリスト内に追加できるサーバの最大数。何らかのサービス不能攻撃(DoS攻撃・・・Denial of Service attack)からサーバを保護します。デフォルト値:4096

maxstrangers (整数)
nickcommunityパラメータで使用されます。コミュニティに属さないユーザの内「maxstrangers」だけがログインを許可されます。デフォルト値:1000000

minEVersion (整数)
trackemule機能で使用されます。このサーバが許可するEmuleの最小バージョン。Emuleのバージョンは00〜FFの間の16進数です。デフォルト値:0x26

minVersion (整数)
クライアントソフトウェアには全てバージョン番号があります。クライアントがminVersionよりも小さいバージョンの場合、ログインは許可されません。デフォルト値:59

minkeylength (整数)
デフォルト値:3。キーワードの最小の長さ。サーバは高速な検索を行えるようにする為、ファイル名に含まれるキーワードのインデックスを構築します。インデックスは大量のRAMを使用しますので、v16.44からサーバは短いキーワードを無視することができるようになりました。

mmap_hint (整数)
eserverが仮想メモリ領域内に4Moのメモリを配置する為のヒント。デフォルト値:0(ヒント無し)
IA32Linuxでは、あるサーバは mmap_hint=0x80000000 を使用しています。
また、razorback は 0x74000000 を使用しています。

msgrandomport (真偽値)
いくつかのプロバイダ(ISP)が4662ポートをフィルタリングしています。ユーザを手助けする目的でデフォルトポートの4662番を他の番号に変更することを彼らに通知することは良い考えかも知れません。msgrandomportがtrueの場合、サーバは自動的にデフォルトポートを使用しているユーザに警告メッセージを送信します。
msgrandomportのデフォルト値は以下の通りです:
WARNING : Please try to use a random port instead of 4662, because a lot of ISP have filters on 4662 port. Any number between 80 and 65530 should be OK. Thanks
日本語訳:
多くのISPがポート4662を禁止しているため、ポート4662の替わりに他のポートを使用して下さい。80〜65530までの間のどんな値でも構いません。かしこ。

name (文字列)
クライアントに送信される、あなたのサーバの名前。デフォルト:eserver 16.44

nbuserIP (IPアドレス)
サーバはポート上にnbuserが情報を集めることを許可する特別なTCPリスナーを持っています。デフォルトでは、ローカルのnbuserだけがeserverに接続することができるように、ポートは127.0.0.1(localhost)にバインドされます。外部アドレスを許可しても良いでしょう。
デフォルト値:127.0.0.1

nbuserport (整数)
nbuserリスナーのポート。上を参照して下さい。デフォルト値:5656

ncpus (整数)
この値はeserverによって起動時にホストのCPU数が与えられます。実際にはプログラムで使用されません。udpsearchersを参照して下さい。デフォルト値:ホストCPU数

nickcommunity (文字列)
サーバにログインすることができるように、ユーザのニックネーム内に存在すべきであるタグ。maxstrangersで使用されます。注意:文字列は全て小文字でなければなりません(クライアントは大文字/小文字の制限はありません)。デフォルト値:値無し(パブリックサーバ)

nickname (文字列)
クライアントポート4662番のバックドアテストの実行時にeserverは疑似ユーザとなります。このパラメータはそのフェイクユーザのニックネームです。デフォルト値:eserver

noepoll (真偽値)
(Linuxのみ)trueの場合、eserverはepoll機能を使用しません。これをtrueにしないことをお勧めしますが、あなたのLinuxのバージョンではepoll機能にバグがあるかも知れません。
デフォルト値:false
Linux-2.4.21かLinux-2.4.22では、epoll機能を追加するパッチをDavide Libenziからダウンロードして試すことができます。

noudpslowsearches (真偽値)
リモートユーザ(他のサーバのクライアント)から送信された複雑な検索を拒否することができます。複雑な検索はとはキーワードインデックスを使用する替わりに、ファイルリスト全体を走査しなければならない検索のことです。デフォルト値:false

ping_delay (整数)
サーバは定期的に、サーバのユーザ数とファイル数を含んだ「ping」と呼ばれるフレームをクライアントに送信します。これは各TCPソケットが生きている(ユーザがマシンの電源を落としているかも知れません)かどうか確認します。ping_delayはそのようなping間の最大遅延時間です。デフォルト値:400

port (整数)
これはこのサーバが使用するTCPポートです。デフォルト値:4661

public (真偽値)
もしtrueなら、サーバは自分自身を公開サーバとして他のサーバに通知します。このパラメータは過去には意味があるものでしたが、クライアントが接続した時にそのリストにサーバを自動的に追加できるようになった為、現在では不要になったパラメータです。デフォルト値:false

quickack (真偽値)
trueの場合、サーバはquickackモードに入る替わりに、LinuxカーネルにTCP ACKパケットの遅延依頼をするsetsockopt(TCP_QUICKACK)を使用します。これは帯域幅を減少させます。デフォルト値:true

search_trace (真偽値)
trueの場合、サーバは検索要求処理をコンソール/ログファイルにダンプします。デフォルト値:false

seedIP (IPアドレス)
他のサーバのIPアドレス。これは「serverList.met」ファイルが存在しない(又は中身が空の)場合、サーバによってサーバリストを集める為に使用されます。デフォルト値:無し

seedPort (整数)
seedサーバのポート番号。デフォルト値:4661

slimit_tableSize (整数)
slimitモジュール内で使用されるハッシュテーブルの大きさ。デフォルト値:4021

softLimit (整数)
クライアントがsoftLimit以上の共有ファイルを公開しようとした場合、サーバはクライアントに対してWARNING(警告)メッセージを送信し、それ以上のファイルを無視します。デフォルト値:1000
hardLimitパラメータの説明を参照して下さい。

tableSize (整数)
ファイル説明文を格納する為に使用されるハッシュテーブルの大きさ。eserverは必要に応じて動的にこの値を増加させる為、この値を設定するべきではありません。

tcp_rbuffersize (整数)
あなたのマシンのTCP/IPスタックは各ソケット用の入力メッセージを格納する為に、最大サイズが割り当てられます。このデフォルトサイズを変更することができます。
デフォルト値:0(システムデフォルト)
(Linuxでは/proc/sys/net/ipv4/tcp_rmemを確認して下さい)

tcp_xbuffersize (整数)
あなたのマシンのTCP/IPスタックは各ソケット用の出力メッセージを格納する為に、最大サイズが割り当てられます。このデフォルトサイズを変更することができます。
デフォルト値:0(システムデフォルト)
(Linuxでは/proc/sys/net/ipv4/tcp_wmemを確認して下さい)

thisIP (IPアドレス)
これはこのサーバのIPです。注意:eserverは自動的にIPを見つけることができません。あなたのサーバが公開サーバである場合はこれを正しく設定しなければいけません。

threads (整数)
使われなくなったパラメータ。注意:eserverのスレッド数は固定されています:
1つのスレッドがUDP要求を受信します。
1つ、又は2つのスレッドがUDP検索を扱います(udpsearchers参照)。
1つのスレッドが新規接続要求を受け付けます。
1つのスレッドがクライアントのログイン処理を扱います。
1つのスレッドがコンソールダイアログを扱います。
1つのスレッドがTCPトラフィック(接続されたクライアントからの要求)全てを扱います。
1つのスレッドが「nbuser」要求を扱います

trackbademule (整数)
フラグのビットマスク。minEVersionパラメータを参照して下さい。デフォルト値:30

trackemule (整数)
1に設定されている場合、eserverはeMuleバージョンを追跡します。minEVersionパラメータを参照して下さい。デフォルト値:1

type (文字列)
2つの値を指定可能です:
key(デフォルト):サーバはファイル名で見つかるキーワードに基づいたインデックスを構築します。検索は高速になります。
substring:サーバはインデックスを使用しません。検索は遅くなります。

udp_rbuffersize (整数)
あなたのマシンのUDP/IPスタックは各ソケット用の入力メッセージを格納する為に、最大サイズが割り当てられます。このデフォルトサイズを変更することができます。
デフォルト値:0(システムデフォルト)

udp_xbuffersize (整数)
あなたのマシンのUDP/IPスタックは各ソケット用の出力メッセージを格納する為に、最大サイズが割り当てられます。このデフォルトサイズを変更することができます。
デフォルト値:0(システムデフォルト)

udpsearchers (整数)
UDP検索に使用されるスレッド数。デフォルト値:単一プロセッサの場合は1、SMPマシンの場合は2

verbose (真偽値)
もしtrueなら、サーバはいくつかのメッセージのログをとります(例:クライアントログイン/ログアウト)。デフォルト値:false

welcome[#] (文字列)
クライアントがログオンした時に送信される一連のメッセージ。

zlib_complevel (整数)
このサーバによって行われる圧縮のレベル。レベルは0(圧縮無し)〜9(最高圧縮)の間の整数です。デフォルト値:9

zlib_enable (真偽値)
サーバが入ってくるクライアントとzlib圧縮を取り決めることを許可します。デフォルト:true

Linuxカーネルチューニング
巨大サーバ用では、/proc/sys/fs/file-maxを増加させることを忘れないで下さい(デフォルト値:8192)。
/etc/sysctl.confにこの行を追加(又は既に存在しているなら、修正)できます:
fs.file-max=16384
次のようにすることもできます:echo 16384 > /proc/sys/fs/file-max (この値は再起動後に失われます)

Linux 2.2マシン上では/proc/sys/net/ipv4/route/max_sizeを変更することを忘れないで下さい。なぜなら小さすぎる値ではいくつかの問題を引き起こす事があるからです。
echo 32768 > /proc/sys/net/ipv4/route/max_size
Linux 2.2 VM設定を変えることもできます:
echo "1024 2048 4096" > /proc/sys/vm/freepages
Linux 2.2はpoll()システムコール上に制限があります:kmalloc(nbhandles*8)カーネルサービスを利用する為、それは16384ファイルハンドルの制限があります。その為Linux 2.2マシン上で動作するeserverは16300以上のユーザを収容できません。

最後のアドバイス:スクリプトscript.shによるプログラム開始方法を説明します:プロセスが開くことができるファイルの最大数を変更する為、ulimit -n 8192を使用します。もしあなたが10000ユーザを収容するサーバを計画しているなら、これを16384に変更して下さい!

一般ユーザ(root以外)としてeserverを起動したいユーザに関しては、/etc/security/limits.confを変更して次の行を加えることができます:
* soft nofile 32768
* hard nofile 32768

他のOSについての注意:
Tru64 Unix 5.1:1プロセスあたり65536ファイルディスクリプタの制限:サーバは64k以上のユーザを扱うことができません。
FreeBSD:sysctlコマンドで制限を確認して下さい。
# sysctl kern.maxfiles
kern.maxfiles: 5000
# sysctl kern.maxfiles=65000
kern.maxfiles: 5000 -> 65000
# sysctl kern.maxfilesperproc
kern.maxfilesperproc: 4200
# sysctl kern.maxfilesperproc=65000
kern.maxfilesperproc: 4200 -> 65000