Windowsを使っているUNIX野郎ならcygwinの名前を一度は耳にしているはず。 筆者はb20.1を使ったり使わなかったりしていたが、 Cygwin 1.1を使ってみてこれは使い物になると確信した。
これは、そんな筆者がcygwinを使いながら書きとめた文章です。 かなり不親切な部類だと思いますので、 今までCygwinを使ったこともないという方は、 基本的にはよそのページを参考にするのがいいと思います。 申し訳ありませんが、自分用のメモ+αですので、この程度が限界です。 よそと違った視点から役に立つページができればと考えています。
意見・質問等のメールは大歓迎ですが、 時間的・能力的に期待に沿えるとは限りませんのであしからず。
Cygwinというのは、UNIXのシステムコールを実現するようなWindowsのDLLを提供し、 UNIX用のソースを変更なしにコンパイルすることで Windowsで動くバイナリを作れるようにしよう、 というプロジェクトです。 gccはもちろんbashやtcshやlessなど、多くのツールがWindows上で動きます。
それは魅力的だ、と思う方も少し待ってください。 果たしてあなたにとって本当にCygwinは必要なのでしょうか。 あなたがCygwinを導入する目的によっては、 他の環境の方が優れているかもしれません。 まずは、Cygwinのメリットを考え、 ライバルとなる環境との違いを考えていくことにします。
UNIXマシンが手元にないとか、 あってもデュアルブートなので使うのが億劫とか、 いろいろ理由はあるでしょうが、 Windowsを使っているけれども UNIX(またはその代用品)も必要という場合には、 選択肢として次の4つが考えられると思います。
この目的でCygwinを選ぶのは、はっきり言って間違っています。 本物のUNIXが使えるならその方がいいのは明らかですし、 VMWareのおかげでマシン1台でWindowsと本物のUNIXが使えるわけですから、 十分高速な環境なら一番お奨めな環境でしょう。 また、coLinuxは全く同じカーネルを動かしているわけではないので少々不安ですが、 アプリケーションユーザーにとっては十分すぎる安定度で、さらに非常に高速です。
UNIXの勉強のような目的でCygwinを使う理由は皆無です。 2chのcygwinスレでも「coLinux使え」が模範解答になっています。
Windowsでの仕事のためにUNIXのシェルやツールが必要だという場合には、 選択肢は2つあります。
UNIXのツールをWindowsにportしたものは多くあります。 tcshもWin32版がありますし、 MeadowやpTeX for Win32など、かなり完成度の高いものが多いです。 UNIX用のソースをCygwinでコンパイルしたものより、 portされたツールの方が Windowsのツールとして水準が高いのが普通だと思いますから、 できることならばportされたツールで環境を作りたいところですが、 問題点もあります。
第一に、自分のお気に入りのツール全てがWin32にportされるわけはないということ。 第二に、多くのツールは独立にportされていて、 統一性がなかったりすること。 Cygwinはその両方を解決してくれます。
もっとも、全部Cygwinで統一するのも得策ではないので、 統一性の問題は残るものの、 システムとして統一性があるものについては Win32へのportを使う方が現実的だというのが筆者の考えです (TeXやMeadowをCygwinでコンパイルしてもいいですけどね)。
Windowsでの仕事がGUIだけであれば、 ファイルをUNIXマシンに転送して仕事をするという選択肢もありますが、 そうでなければ(Windows,UNIX両方のコンソールを使う必要があるなら) 少々不便でしょうから、上には挙げませんでした。
Windowsでの開発環境が必要だという場合には、選択肢は3つあります。
正直なところ、この目的でCygwinを使うのはどうかと思います。 統合環境は嫌いだからmake(nmake)を使うという場合でも、 Visual C++の環境は見ていてうらやましいものがあります (筆者は持っていません)。 開発がしたいのなら金を惜しまずVisual C++を買うべきでしょう (他のベンダーの開発環境でもいいですけど、 仲間が多い方が楽だと思いますので)。
金を払ってまでWindowsで開発をする気はないという場合も、 Borland C++ Compilerかcygwinの2つの選択肢があります。 どちらを使うにせよ、資料が絶対的に足りないのが難点ですが、 苦労すればどうにかなります。 私の記事『 コンパイラに1円も払わない窓プログラミング』も参考にしてください。
cygwinで開発するのはむしろデメリットの方が多いくらいなのですが、 UNIX上と同じ環境(emacs,gcc,make,gdb)で開発できることは大きなメリットだと言えます。
まとめると、筆者は、
というのが理想だと考えています。 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を使ってください。
[The LESS Home Page] 本家はバージョンあがってるなぁ
[Jam less] iso patch
日本語が見えるless。昔から使っていてそれほど不満はなかったけど、 UTF-8なプロジェクトの時にlvに浮気してから殆ど使わなくなりました。
$ wget http://www.greenwoodsoftware.com/less/less-358.tar.gz $ wget http://www.io.com/~kazushi/less/less-358-iso254.patch.gz $ tar xvzf less-358.tar.gz $ cd less-358 $ gzip -cd ../less-358-iso254.patch.gz | patch $ CFLAGS="-O2 -pipe" LDFLAGS=-s ./configure $ perl -i.bak -pe 's/"iso8"/"japanese-sjis"/;' defines.h $ perl -i.bak2 -pe 's/(HAVE_LOCALE) 1/$1 0/;' defines.h $ diff defines.h.bak defines.h 187c187 < #define DEFCHARSET "iso8" --- > #define DEFCHARSET "japanese-sjis" 303c303 < #define HAVE_LOCALE 1 --- > #define HAVE_LOCALE 0 $ make 2>&1 | tee make.log $ make install 2>&1 | tee install.log
installed files /usr/local/bin/less /usr/local/bin/lesskey /usr/local/bin/lessecho /usr/local/man/man1/less.1 /usr/local/man/man1/lesskey.1
( [Home Page] )
筆者の中では最近はlessよりもlvの方が普通になりつつあります。 installまわりのMakefileを少し調整してインストール。
$ tar xvzf lv4495.tar.gz $ cd lv4495/build $ ../src/configure $ perl -i.bak -pe 's/-o bin -g bin//g' Makefile $ perl -i.bak2 -pe 's/ln lv lgrep/ln -f lv.exe lgrep.exe/g' Makefile $ make $ make install
installed files /usr/local/bin/lv /usr/local/bin/lgrep /usr/local/lib/lv/lv.hlp /usr/local/man/man1/lv.1
( [Home Page] / [download] )
言わずと知れた漢字コンバータ。version2でUnicode対応したのが便利。
$ tar xvzf nkf204.tar.gz $ cd nkf204 $ perl -i.bak -pe 's/^#define DEFAULT_CODE_JIS/#define DEFAULT_CODE_SJIS/' config.h $ make CC=gcc CFLAGS='-O2 -s' $ install nkf.exe /usr/local/bin/ $ install nkf.1 /usr/local/man/man1/
デフォルトの出力コードをSJISにしてます。 最近のcygwinならMakefileの変更は不要です。 また、ついでに日本語のマニュアルをEUCに変換してinstallしています。
nkfは、 デフォルト動作では半角カナを全角に変換してしまいますが、 -xで抑制できます。 groffだと日本語manが化け化けなのは仕方ないのだろうか‥。
installed files /usr/local/bin/nkf.exe /usr/local/man/man1/nkf.1 /usr/local/man/ja/man1/nkf.1
( [Home Page] / [download] )
ftp/webdav対応のファイルアップロードプログラム。
$ wget http://www.lyra.org/sitecopy/sitecopy-0.12.1.tar.gz $ tar xvzf sitecopy-0.12.1.tar.gz $ cd sitecopy-0.12.1 $ ./configure --disable-nls $ make $ make install
installed files /usr/local/bin/sitecopy.exe /usr/local/doc/sitecopy/NEWS /usr/local/doc/sitecopy/README /usr/local/doc/sitecopy/THANKS /usr/local/doc/sitecopy/update.sh /usr/local/man/man1/sitecopy.1 /usr/local/share/sitecopy/changes.awk /usr/local/share/sitecopy/examplerc
( [Home Page] / [download] )
標準入出力をソケット通信にそのまま使うことで、 serverやclientを簡単に作れるようなプログラムと、 パケットフォワーダー(relay)。 主にconnectをmconnectの代替に使っているような気がする。 (mconnectなんて数年前に使ったっきりだから、 どんなプログラムだったか自信ないけど)
$ wget http://download.sourceforge.net/italk/yaegashi-takeshi-1.02.tar.gz $ tar xvzf yaegashi-takeshi-1.02.tar.gz $ cd yaegashi-takeshi-1.02 $ gcc -o relay *.c $ install relay /usr/local/bin $ ln -s relay /usr/local/bin/server $ ln -s relay /usr/local/bin/connect以下、使用例。
$ server 8080とかやって、ブラウザからlocalhost:8080に向けて<form>のactionを飛ばす。
$ connect www 80 < request.txtとかやって、テキストファイルの内容をwebサーバへのリクエストとして送る。
$ connect www.yahoo.co.jp 80 < request.txt > result.txtyahooのレスポンスへッダ、改行がCRLFになってない気がするぞ、
( [Home Page] / [download] )
漢字が出る16進ダンプ。入力の日本語文字コードを指定できるのが便利。
$ tar xvzf hex204.tgz $ cd hex204/ $ g++ -s -o hex -O2 hex.cc $ install hex /usr/local/bin
Windowsでコンパイルすると、 デフォルトの出力コードはSJISになるようだ(当然?)。 VC++でコンパイルしたものが配布されているが、 NTコンソールでは cygwinでコンパイルしないと色がつかないので自分でコンパイルした。 特に問題なし。
installed files /usr/local/bin/hex.exe /usr/local/man/ja/man1/hex.1
( [Home Page] / [download] )
高機能なuudecode/uudencode。 uu 以外にも、Base64 や BinHex もほどける。 分割されててもほどける。
$ tar xvzf uudeview-0.5.18.tar.gz $ cd uudeview-0.5.18/ $ CC=gcc CFLAGS='-O2 -pipe' LDFLAGS=-s ./configure \ --disable-tcl --disable-sendmail --disable-inews --disable-minews $ make $ install unix/uu{de,en}view /usr/local/bin $ install man/uu{de,en}view.1 /usr/local/man/man1
いらんことをしてくれそうなので、いろいろ disable した。 make install はうまくいかないので、手動でインストール。
installed files /usr/local/bin/uudeview.exe /usr/local/bin/uuenview.exe /usr/local/man/man1/uudeview.1 /usr/local/man/man1/uuenview.1
( [Home Page] )
ポストlynx的なテキストベースのブラウザ。
$ tar xvzf w3m-0.1.6.tar.gz $ cd w3m/ $ sh configure Which directory do you want to put the binary? (default: /cygnus/cygwin-b20/H-i586-cygwin32/bin) /usr/local/bin Which directory do you want to put the support binary files? (default: /cygnus/cygwin-b20/H-i586-cygwin32/lib/w3m) /usr/local/lib/w3m Which directory do you want to put the helpfile? (default: /cygnus/cygwin-b20/H-i586-cygwin32/lib/w3m) /usr/local/lib/w3m (以下適当) $ patch < ../w3m-0.1.6.cygwin-patch.txt $ make $ make install
私の環境では上のパッチのように変更しないと $TERMがcygwinじゃないときにSEGVで落ちます。 termcapのバグだと思われます。
正直なところ、cygwinでコンパイルしてもあまり意味ないような。 w3m http://somewhere.ac.jp/って打つのと start http://somewhere.ac.jp/って打つのとだったら startの方が速そうだもん (^^;
installed files /usr/local/bin/w3m.exe /usr/local/lib/w3m/*
ktermの代替品として定評の端末ソフト (筆者はckに浮気したので最近は使っていません)。 libW11というlibX11の置き換えプロジェクトがあり、 これを利用してWin32ネイティブでも動く。 どうやらcygwin本家から配られているものは Win32ネイティブの場合に日本語を出せないようだ。 というわけでパッチ当ててコンパイルします。
rxvt on Cygwinが日本語化パッチ本家だったが、 新バージョンへのパッチが ja patched rxvt-2.7.10-3 on Cygwin にあります。 バイナリ配布されていますから、 自分でコンパイルするのは単なる趣味です。
コンパイルするのにあれこれ手動でやってます。 Makefileやconfigureを整備すればもう少し何とかなりそうだが‥。
一緒にrclockというxclockじみたアプリもインストールされるが、正体は不明。 W11のデモか…?
$ tar xvjf rxvt-2.7.10-3-src.tar.bz2 $ tar xvjf rxvt-2.7.10-3-j05.0-patch+bin.tar.bz2 $ cd rxvt $ patch -p1 < ../rxvt-2.7.10-3-j05.0-patch+bin/patches/rxvt-2.7.10-3-j05.0.patch $ perl -i.bak -pe 's/-O -g/-O2/' ./configure-cygwin.sh $ perl -i.bak -pe 's/^CFLAGS=-O\s*$/CFLAGS=-O2/' W11/{wrap,w32}/Makefile $ chmod 755 ./configure-cygwin.sh $ ./configure-cygwin.sh $ make $ strip src/rxvt.exe W11/lib/libW11.dll $ make install
installed files /usr/local/bin/libW11.dll /usr/local/bin/rclock.exe /usr/local/bin/rxvt.exe /usr/local/man/man1/rclock.1 /usr/local/man/man1/rxvt.1
( [Home Page] )
Cygwin専用の端末ソフト、というなかなか珍しいソフトです。 透明ウィンドウのckと不透明ウィンドウのckoと2つに分かれていますが、 ckの方はそれなりのGPUでないと重くて使いにくいと思います。 私はckoを使っています。 JIS、SJIS、EUC、UTF-8に対応しており、 しかも文字コードを自動判別してくれるので 日本語のエンコーディングが色々混ざっている環境でも 特に文字コードの意識をせずに利用することができます。 それまでrxvt+cocotだったんですが、断然便利になりました。
Cygwin専用のソフトがバイナリ配布されているわけで、 自分でコンパイルする意味なんか殆ど無いんですが…。
$ unzip -x ck-0.9.5-src.zip $ cd ck-0.9.5 $ make $ install cko.exe /usr/local/bin
installed files /usr/local/bin/cko
多分バイナリも落ちていると思いますが、 ソースからコマンドライン版を作ってみます。
http://www.rarlab.com/rar_add.htmからソースパッケージをダウンロードして、 makefile.unixを使ってコンパイルします。 自分でコンパイルするのは趣味です。
makefileの問題点を少々修正しました。
$ tar xvzf unrarsrc-3.3.6.tar.gz $ cd unrar $ perl -i.bak -pe 's/^(DEFINES.*)$/$1 -DLITTLE_ENDIAN/' makefile.unix $ perl -i.bak2 -pe 's/(strip unrar)$/$1.exe/' makefile.unix $ make -f makefile.unix $ install -c -m 755 unrar /usr/local/bin/unrar
installed files /usr/local/bin/unrar.exe
$Date: 2004-11-10 05:37:17 $