ページ更新: 2004-09-17 (金) (4904日前)

注意点(特にサービスとして動作させるとき)がCygwin付属の /usr/share/doc/Cygwin/inetutils-1.3.2.README に書かれているので見ておくこと。

目次

[編集]

設定手順 #

[編集]

設定ファイルの生成 #

/usr/bin/iu-config を実行すると、/etc/inetd.confなどが作成される。

$ /usr/bin/iu-config

iu-configはpostinstall(インストール後の設定スクリプト)と同一。

$ diff /etc/postinstall/iu-config.sh.done /usr/bin/iu-config ; echo $?
0
[編集]

サービスとしてインストール #

$ /usr/sbin/inetd --install-as-service
[編集]

起動、起動確認 #

Cygwinのcygrunsrvコマンドで

$ cygrunsrv -S inetd   ★起動
$ cygrunsrv -Q inetd   ★確認
Service inetd exists
Type                : Own Process
Current State       : Running
Controls Accepted   : Accept Stop
$ cygrunsrv -E inetd   ★終了
$ cygrunsrv -Q inetd   ★確認
Service inetd exists
Type                : Own Process
Current State       : Stopped
Controls Accepted   :

あるいはWindowsのnetコマンドで

$ net start inetd     ★起動
CYGWIN inetd サービスを開始します.
CYGWIN inetd サービスは正常に開始されました。

$ net stop inetd      ★終了
CYGWIN inetd サービスを停止中です.
CYGWIN inetd サービスは正常に停止されました。
[編集]

トラブルシューティング #

[編集]

サービス起動時にエラー「DLLが見つかりません」が発生 #

inetdを起動しようとすると、次のエラーダイアログが表示されることがある。

cygwin_service_dll_not_found.png

これは、Windowsのシステム環境変数PATH(以下、PATHと略す)にcygwin1.dllのディレクトリを指定していないとき、 あるいはPATHにcygwin1.dllのディレクトリを追加した後一度もWindowsを再起動していないときに発生する。

解決するには:

PATHにcygwin1.dllのディレクトリを追加していないなら、追加する。 例えば、Cygwinを c:\cygwin にインストールした場合、PATHにディレクトリ c:\cygwin\bin を追加する。

PATHにcygwin1.dllのディレクトリを追加した後一度もWindowsを再起動していない場合、Windowsを再起動する。

PATHへの追加、Windowsの再起動とも行っているなら、PATHの追加内容が正しいかどうか確認し、間違っていたら修正して、Windowsを再起動すること。

[編集]

inetdの動作確認 #

デバッグモード は /usr/sbin/inetd -d 。 /etc/inetd.confを読み込んだ結果を表示する。終了は ctrl-c。

$ /usr/sbin/inetd -d
ADD : echo proto=tcp, wait=0, user=root builtin=4080d0 server=internal
registered internal on 4
  : (略)
someone wants echo
accept, ctrl 3
+ Closing from 14
316 reaped, status 0

別のプロンプトで

$ telnet localhost echo     ★echoサービスに繋いで見る
Trying 127.0.0.1...
Connected to hostname.example.jp
Escape character is '^]'.
sample
sample                      ★ちゃんとエコーされる
                           ★ctrl-]を入力してtelnetのプロンプトを出す
telnet> quit                ★telnetを終了
Connection closed.
[編集]

ファイル #

手元のパッケージのバージョン。

$ cygcheck -c inetutils
Cygwin Package Information
Package              Version        Status
inetutils            1.3.2-25       OK

必ずしも以下のようになるとは限らない。 要するに確かめることは次の2点。

  1. /etc/services, /etc/protocolsの内容が正しいこと
  2. SYSTEMユーザーに対して、/etc/services, /etc/protocols(リンクされている場合、そのリンク先ファイル)の読み込みが許可されていること。
[編集]

/etc/services #

/etc/servicesはWindowsの該当ファイルへのシンボリックリンクで、ownerがusernameユーザーだが、otherの読み込みが許可されている。

$ ls -al /etc/services
lrwxrwxrwx    1 username なし          160 Jul  7  2003 /etc/services -> C:\WINDOWS\system32\drivers\etc\services

$ ls -al "C:\WINDOWS\system32\drivers\etc\services"
-rw-r--r--    1 username なし         7361 Jul  7  2003 C:\WINDOWS\system32\drivers\etc\services
$ ls -al /etc/protocols
lrwxrwxrwx    1 username Users         160 Jul  1  2003 /etc/protocols -> C:\WINDOWS\system32\drivers\etc\protocol
[編集]

/etc/protocols #

/etc/protocolsはWindowsの該当ファイルへのシンボリックリンクで、SYSTEMグループに対して読み書き実行が許可されている。(読み込み権限だけでいいと思うが、まあいいや)

$ ls -al "C:\WINDOWS\system32\drivers\etc\protocol"
-rwxrwx---+   1 Administ Administ      799 Aug 28  2001 C:\WINDOWS\system32\drivers\etc\protocol*

$ getfacl -a "C:\WINDOWS\system32\drivers\etc\protocol"
# file: C:\WINDOWS\system32\drivers\etc\protocol
# owner: Administrators
# group: Administrators
user::rwx
group::rwx
group:SYSTEM:rwx
group:Users:r-x
group:Power Users:r-x
mask:rwx
other:---