Cygwin 環境の構築

  1. Cygwin Setupによるインストール
  2. 環境設定
  3. inetutilsの設定
  4. X11を動かす
  5. Cygwin Setupによるアップデート

確認

とりあえず、インストール後の状況がどうなっているか、 (スタートメニューから)Cygwin.batを起動して確認してみましょう。

ディレクトリ構造

こんな感じになってるはず(ls /とかエクスプローラで見るとかして)。
/ (インストールしたトップディレクトリ:ここではc:\cygwin)
 + bin
 + cygdrive (Windowsのドライブがマウントされる)
 + etc
 + lib
 | + cvs
 | + gcc-lib
 | + ldscripts
 | + mingw
 | + perl5
 | + texmf
 + usr
 | + bin (中は空、/bin がマウントされる)
 | + include
 | | + X11
 | | + arpa
 | | + asm
 | | + cygwin
 | | + g++-3
 | |   + std
 | | + ...
 | + info
 | + lib (中は空、/lib がマウントされる)
 | + libexec
 | + local (中は空、ディレクトリだけが作られる)
 | + man
 | + sbin
 | + share
 + sbin
 + tmp (中は空だが必須)
 + var
   + log (中は空)
   + run
ルートディレクトリには、起動バッチファイルのCygwin.batが おいてあったりする。 /cygdriveの中は空だけど、/cygdrive/cとかすると、 WindowsのCドライブのルートが見える。 /devはないけど、/dev/nullとかはある(ls /dev/nullとか)。 /usr/bin、/usr/libはエクスプローラから見ると空。 Cygwinからだと、それぞれ/bin、/libが見える。 これについては次で。

マウントテーブル

次にmountとしてみよう。
$ mount
Device              Directory           Type         Flags
C:\cygwin\bin       /usr/bin            system       binmode
C:\cygwin\lib       /usr/lib            system       binmode
C:\cygwin           /                   system       binmode
こんな感じになっているはず。このマウント情報をマウントテーブルという。 DeviceはWindowsでのパス。DirectoryはCygwinでのパスとなる。 Typeにはsystemとuserがあり、systemではマウントテーブルが インストールされているマシン全体で使われる(つまりレジストリの HKEY_LOCAL_MACHINE以下に保存される)のに対して、 userでは利用しているそのユーザでしか使われない (レジストリのHKEY_CURRENT_USER以下に保存される)。
Flagはファイルをtextmode(改行をCR+LFに強制的に変換するか)、 binmonde(何も変換を行わない)が選べる。 textmodeにすると、いらんところではまる(makeファイルを使ったmakeができ ないなど)ので、binmodeを強くお薦めする。 しかし、Windowsのアプリケーションと連携する場合、 textmodeが便利だったりすることもあるが、かなりまれ。
inetutilsを使ってリモートログインなどを許す場合は、 ちゃんとsystemでマウントされてなければならない。 また、/cygdriveに自動的にWindowsのドライブがマウントされると書いたが、
$ mount --show-cygdrive-prefixes
Prefix              Type         Flags
/cygdrive           user         binmode
のようになっているのが分かる。/cygdriveが長くてやだ!という人は、 mountのオプション--change-cygdrive-prefixで変更することも可能。 このときも上で述べたFlagやTypeも注意して設定する必要がある。

CYGWIN環境変数

Cygwinでは、環境に合わせたオプションや機能を使う使わないのオプションを いくつか提供している。このオプションの設定はCYGWIN環境変数で行う。 説明するのは面倒くさいので、 こちら を見てください。 注意すべき点は、Cygwinを起動してから(つまりbashとかね)CYGWIN環境変数を 変更すると、動作がおかしくなることがあるので、Cygwinを起動する前に 指定しておくのが無難。 つまり95/98/Meならc:\Autoexec.bat、 NT4/2000ならシステムプロパティ→詳細→環境変数で指定する。 なお、95/98/Meはautoexec.bat編集後、システムの再起動が必要となる。

環境設定(Windows側)

Windows側で設定しておきべき環境変数は以下のものぐらいでOKでしょう。
NT4/2000(システムプロパティ→詳細→環境変数→ユーザ環境変数で)
CYGWIN    ntsec
HOME      /home/sohda
MAKE_MODE UNIX
SHELL     /bin/bash

95/98/Me (autoexec.batで)
set CYGWIN=nontsec
set HOME=/home/sohda
set MAKE_MODE=UNIX
set SHELL=/bin/bash
もし、Windowsのアプリケーションとぶつかって困る場合はCygwin.batに 書いちゃってもOKだと思う。

環境設定(Cygwin内部)

ホームディレクトリ

Windows側で環境変数HOMEをちゃんと指定していると、Cygwin起動時(bash起動時)に 自動的にホームディレクトリを作ってくれるはず。もし作ってくれなかったら、
mkdir -p /home/sohda

.bashrc

最初、ホームディレクトリは空です。まず、.bashrcを作ってあげましょう。 以下は僕の.bashrcの抜粋。適当に変えてね。
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

ulimit -c 0
umask 022
set history=200
set savehistory=200
set -o ignoreeof
unset autologout

export SHELL=/bin/bash
export HOME=/home/sohda
export TMPDIR=/tmp
export TZ=JST-09
export MAKE_MODE=unix

PATH=/usr/local/sbin:/usr/sbin:/sbin:.:~/bin
PATH=/usr/local/bin:/usr/X11R6/bin:/usr/bin:/bin:$PATH
PAGER=less
JLESSCHARSET=japanese-sjis
export PATH PAGER JLESSCHARSET

PS1="$HOSTNAME:\w$ "

if [ -n ${DISPLAY} ]; then
    export DISPLAY=localhost:0.0
fi

if [ ! -n "${TERM}" ]; then
    TERM=cygwin
fi

alias ls="ls -F --color=auto --show-control-char"
alias la="ls -aF"
alias ll="ls -l"
alias j=jobs
alias vi=vim
alias more=less

SYSTEM=`cygpath -u ${SYSTEMROOT}`/system32
alias ping="$SYSTEM/ping.exe"
alias arp="$SYSTEM/arp.exe"
alias nslookup="$SYSTEM/nslookup.exe"
alias traceroute="$SYSTEM/tracert.exe"
alias route="$SYSTEM/route.exe"
alias netstat="$SYSTEM/netstat.exe"
alias ipconfig="$SYSTEM/ipconfig.exe"
alias ifconfig=ipconfig
#alias start="$SYSTEM/CMD.exe /c start"
alias start=cygstart
unset SYSTEM                                  
ちなみに、Cygwin内部(つまりbashが起動しているとか)で環境変数 CYGWIN を 変更したりすると、よくないことが起こるそうなのでやめときましょう (.bashrcに書くとか)。

Cygwin.bat

Cygwin.batは、適当に環境変数をセットしてくれて、bashまで起動してくれて 便利なんだけど、起動中に1度でもCtrl-Cを押すと、終了する(exit)ときに
バッチ ジョブを終了しますか (Y/N)?
といちいち聞かれてしまい、けっこううざい。おそらくCygwinのバグなんだろ うけど、まだ直ってない。これを解決する方法はCygwin.batを利用しない!しかない。 つまり、bashをいきなり起動するってこと。そのためには、 Cygwin.batでしている設定をWindows側でしてあげて、 bash.exeへのショートカットを作ってあげればOK。

/etc

passwd,group

/etc/{passwd,group}は Cygwin Setup が勝手に作ってくれます。 実際には以下のようなことをしてます。
mkpasswd -l > /etc/passwd
mkgroup -l > /etc/group
オプションの -l は、ローカルマシンのユーザ・グループ情報を使う、 ということです。ドメインに参加しているマシンであれば、 -d オプションで、 ドメインのユーザ・グループ情報が利用されます。ちなみに各ファイルは 次のようになります。
/etc/passwd:
Everyone:*:0:0:,S-1-1-0::
SYSTEM:*:18:18:,S-1-5-18::
Administrators:*:544:544:,S-1-5-32-544::
Administrator::500:513:,S-1-5-21-123412345-1234512345-1234512345-500:/home/Administrator:/bin/bash
Guest::501:513:,S-1-5-21-123412345-1234512345-1234512345-501:/home/Guest:/bin/bash
sohda::1000:513:Yukihiko Sohda,S-1-5-21-123412345-1234512345-1234512345-1000:/home/sohda:/bin/bash
/etc/group:
Everyone:S-1-1-0:0:
SYSTEM:S-1-5-18:18:
なし:S-1-5-21-123451234-1234512345-1234512345-513:513:
Administrators:S-1-5-32-544:544:
Backup Operators:S-1-5-32-551:551:
Guests:S-1-5-32-546:546:
Power Users:S-1-5-32-547:547:
Replicator:S-1-5-32-552:552:
Users:S-1-5-32-545:545:
で、使わないユーザ・グループは編集して消してしまいましょう。 S-で始まるのはWindowsでのSID情報です。 inetutilsなどを使ってサーバを立ち上げたりしないなら、不用です。 オプションで -s をつければ、この情報は書き出されません。
ちなみに、Windows98/Meでは -l、-d、-g オプションは使えません。 まぁ、inetutilsなどを使わないなら、特に問題ないでしょう。

次は、、
  1. Cygwin Setupによるインストール
  2. 環境設定
  3. inetutilsの設定
  4. X11を動かす
  5. Cygwin Setupによるアップデート
ページの先頭へ