[home] [back]


Cygwin 1.xでUNIX気分の窓生活

Windowsを使っているUNIX野郎ならcygwinの名前を一度は耳にしているはず。 筆者はb20.1を使ったり使わなかったりしていたが、 Cygwin 1.1を使ってみてこれは使い物になると確信した。

これは、そんな筆者がcygwinを使いながら書きとめた文章です。 かなり不親切な部類だと思いますので、 今までCygwinを使ったこともないという方は、 基本的にはよそのページを参考にするのがいいと思います。 申し訳ありませんが、自分用のメモ+αですので、この程度が限界です。 よそと違った視点から役に立つページができればと考えています。

意見・質問等のメールは大歓迎ですが、 時間的・能力的に期待に沿えるとは限りませんのであしからず。


はじめに

Cygwinというのは、UNIXのシステムコールを実現するようなWindowsのDLLを提供し、 UNIX用のソースを変更なしにコンパイルすることで Windowsで動くバイナリを作れるようにしよう、 というプロジェクトです。 gccはもちろんbashやtcshやlessなど、多くのツールがWindows上で動きます。

それは魅力的だ、と思う方も少し待ってください。 果たしてあなたにとって本当にCygwinは必要なのでしょうか。 あなたがCygwinを導入する目的によっては、 他の環境の方が優れているかもしれません。 まずは、Cygwinのメリットを考え、 ライバルとなる環境との違いを考えていくことにします。

まとめると、筆者は、

  1. UNIX上でできることに関してはUNIX(含VMWare、coLinux)でやる
  2. Windowsの方が優れているアプリは当然使う
  3. Windowsコンソールでの作業は、基本的にCygwinを使い、一部はWin32へのportを使う

というのが理想だと考えています。 Windowsでコンソールを使うことがある場合、 CygwinはUNIX野郎にとって非常に魅力的な解だと思います。 例えば私の場合であれば、xyzzyで文章を書いてCVSで管理し、 sshでログインした先のプロクシをポートフォワードして ローカルからProxomitronで接続したりしていますが、 これはcygwinがあればこそだと思います。

特にCygwin 1.1以降、インストーラの出来は非常に良くなっており、 導入のための敷居は下がっていますので、 良さそうだと考えた場合は試しに入れてみてもいいかと思います。

なぜいきなりこんなことを書いたかというと、 「Cygwinって何がいいの?VMWare+Linuxで十分じゃないの?」 と言われて考えてしまったからです。 (現時点では)筆者は、 「Cygwinが意味がある人には意味があるし、意味がない人には意味がない」 と考えています。 上の議論を参考に、 自分にとって導入する意味があるかどうかを考えてみてください。

Cygwin啓蒙のための文章とは思えないですね‥。 ここまで読んで考え込んでしまった方がいらっしゃるかもしれません。 そういう方は、とりあえずインストールして使ってみることを勧めます (悩むようなら適性があると思いますので)。 というわけで、ようやく本題に入ります。


ダウンロード

cygwin.comから setup.exeを落とせばネットワークインストールしてくれます。 日本中のringサーバがミラーとしてリストされているので、 かなり高速にダウンロードできるはずです。


インストール

setup.exeをダウンロードして、 あとは言われるがままに入力していれば、 勝手にネットワークインストールされます。

インストールが終わったら、パスの設定などをする前に、 ディレクトリ構成を考えるべきでしょう。 Cygwinをc:\cygwinにインストールして、それを/にマウントする、 というのがデフォルトの設定なんですが、 Cygwin以外のツールを使うときに混乱の元になると思います。 やはり、c:\(または一番よく使うドライブのルート)を/にするべきでしょう。

以下に私の取ったポリシーを説明します。

というわけで、

$ mount -b -s c:/ /
$ mount -b -s c:/cygwin/usr /usr
$ mount -b -s c:/cygwin/bin /bin
$ mount -b -s c:/cygwin/etc /etc
$ mount -b -s c:/local /usr/local
$ mount -b -s d:/ /cdrom

のようにしました。textmodeでマウントすると、 ファイルをtext modeでopenされて不幸な事故が多発しますので、 binmodeでマウントすることをお奨めします。 最初にwarningが出るのを気にしなければ、 必ずしもマウントポイントを作る必要はありませんが、 シェルのファイル名補完などで混乱しかねないので、 マウントポイントは実際にあった方がいいと思います。

/usr/localとしてc:\cygwin\usr\localを作らなかったのは、 c:\cygwinの下にはcygnusから配られるものしか入れないようにして、 自分でコンパイルしたものと混ざらないようにしよう、という意図です。

あ、そうそう。 ディレクトリ構成といえば、/tmp を作るのも忘れてはいけません。 '/Documents\ and\ Settings/'$USERNAME'/Local\ Settings/Temp'あたりを マウントしてもいいですし、実際にディレクトリを掘っても構いません。

2001/07/22追記:
この辺りのポリシーについて、岡田さんのCygwinのページで紹介してもらってますけど、 残念ながらこのページより岡田さんのページの方が有用な情報がたくさんあります。 たとえば、現状のCygwinでは、 \cygwin\binは、/binにも/usr/binにもmountしないと 動かないものがあったりしますので、 上の記述より少し細工しないとだめです。


設定

パスを設定して、.bashrcなどの設定ファイルを書きます。 重要なのは、環境変数MAKE_MODEをUNIXにすることくらいでしょうか (←多分これは大昔の話で、今は必要なさそう)。 あとはてきとーにやってください。


ツールのコンパイル

以上で割と幸せな環境が手に入っているはずですが、 多少の不満はあることでしょう。 不満な点はmakeすれば変えられるのがCygwinのいいところですので、 不満なもの、足りないものを片っ端から作っていきます。 以下プロンプトはbashですので、tcshの場合は適宜envを使ってください。


リンク集

hanawa<y@hnw.jp>

$Date: 2004-11-10 05:37:17 $