Cygwinについて

GNUツールをWindows上で使用する為のアプリケーションです。GNUならLinuxの様な UNIX系OSで使えば良いのに、つーかGNU-Hurdは?という感じなのですが、 シグナスソリューションだからの発想なのですかね?それはともかく、私にはとても タイムリーにナイスなアプリケーションだったりします。

目次

  1. こんな私にお勧めでした
  2. インストール
  3. スナップショットのビルド方法
  4. その他
  5. 履歴

こんな私にお勧めでした

こんな私にはお勧めでした(<ヲレ主観)

  1. コマンドラインでの操作が好き。
    といいますか、'*'や'?'といったメタキャラクタに よるファイル操作の方が都合が良い場合が多いです。逆に画像ファイルの確認などは、 エクスプローラのプリビュー画面や、ファイルビュアなどの方がが便利だと思います ので、全てをコマンドラインで.....とは 思えていないのがヨワヨワですが(^_^;

  2. UNIXシェルが好き。
    といいますか、ファイル名やコマンドを基本的に覚えられないのですが、 コマンド名補完やファイル名補完といった、入力アシスト機能を備えている為、 そんな私でも殆ど困る事がありません。また、コマンド実行制御スクリプトとして強力 なのも良いです。

  3. コンパイラが使えてプログラムが作れる。
    Windowsでも、お金を出せば開発環境を手に 入れる事はできますが、ちょっとした使い捨てのツールであるとかが作れれば良いだけ なので、Windows-APIを操作する様なライブラリなどは、とりあえず必要無い今の時点 ではCygwinで使える開発環境が丁度良いです。

  4. 再インストールが大嫌い。
    以上の点までならば、LinuxやFreeBSDを使えば良い様にも 思われますが、「不安定になったWinとLinuxの再インストールのどちらを選択しますか?」 と聞かれると、前者を選んでしまうくらいシステムインストール作業が嫌いなのです ね(^_^;
    もちろん、今のWinが再インストール以外に復帰方法が無い状態に陥ったら、Linuxを インストールするかも知れませんが。

  5. Windowsアプリも使用できる。
    実はこの点が大きいかも知れません。 てゆーか、CygwinはWindowsアプリなので変な言い方ですね(^^; それはさておき、 現在では、ゲーム、CG系ツール、ビデオ編集ソフト、シーケンサ、さまざまなソフト がWin用には用意されていますが、LinuxやFreeBSDではその辺、厳しい状況であると 思います。また、お金を出せばソフトが買えるという点も、最近重要な気がしています。 求めるものがすべてフリーで揃えられれば、それは一番幸せだと思うのですが、そうで 無い場合、お金を出せば買えるのと、そもそもソフトが存在しないので、お金を出して も買えない(お金の出しようが無い)のとでは、人によっては(仕事でアプリケーション を使う場合などは特に)事情が違うのではないかと思います。
こんな感じ。Win32APIを操作するライブラリや、OpenGLを使用する為の ライブラリも用意されているので、グラフィカルなアプリケーションも作れたり します。ただしCygwinDLLが(ほぼ)必須となってしまうところが微妙な気分(^^;

インストール

普通は最新版のインストールで問題無いと思います。β版の最終版であるB20を インストールする事はこの先恐らくありえないでしょう(^^;

最新版のインストール

Cygwinページのダウンロードページや、 適当なミラーサイトから、setup.exeというファイルをダウンロードし 実行すると、ネットワークインストールおよびダウンロードメニューが開きます。 私は「Download from Internet」で適当なダウンロードディレクトリを指定し、 「IE5 setting」でダウンロードしています。進むとパッケージリストを取得 するためにインターネット接続を行います。ダウンロードサイトは日本の適当な サイトでOKですが、場所によって反応が鈍い所があり接続に失敗する場合があります。 その時はサイトを変更することで大抵解決します(^^; リストを取得すると現在 インストールされているパッケージと比較してその差分をダウンロードします。 初めてダウンロードする場合でも、入れたくないパッケージは外す事ができる ようですが、闇雲に選ぶと依存関係が破綻するというありがちな罠に陥る 可能性がありますので、全パッケージをダウンロードした方が良いかも知れません。
パッケージをダウンロードし終わると一度インストーラは終了します。 再度インストーラを立ち上げて、「Install from Local Directory」を設定し、 先に進みます。インストール項目としてRootDirectoryの設定を行う項目が あります。ここでいうルートディレクトリはWindowsディスクのルート ディレクトリを指すのではなく、Windowsディスク上のインストール先 ディレクトリに相当します。Cygwin本体は本ディレクトリをルート ディレクトリとして扱います。 例えば c:\cygwin をRootDirectory とすると、このディレクトリの下に パッケージがインストールされます。そしてこの下にtmpやbinやlibやetcといった ディレクトリが展開されます。もちろんc:\にインストールする事も 可能だと思いますが(以前は問答無用でドライブのルートにインストールされてました)、 ルートディレクトリ以下にはUNIXライクなディレクトリ が作成されるため、Windowsでそれらの名前を使っているとぶつかってしまう 可能性が考えられます。なので一つ専用ディレクトリを作成してそこにインストール するのが安全だと思います。また、ホームディレクトリもこのルート ディレクトリ配下に作成されますので、「Program File」の下にはインストール しない方が安全かも知れません。
以上で作業は終了です。 「スタート」などから起動するとコンソールウインドが開きます。 起動するとWindows上でのuser名でログインする イメージでコンソールが開きます。後は、UNIXコマンドが殆どそのまま使えます。 ホームディレクトリは /usr/home/$USERとなっていると思います。Windowsでの パスはインストール時に指定したパス+/usr/home/$USERになります。


インストール後、必要に応じて以下の作業を行う必要があるかも知れません。

  1. ユーザ名がヘンテコな日本語文字列になる場合があります。Cygwinの システム自体が、日本語文字コードとの相性がかなり良くないので、 ASCII文字列のユーザ名に変更した方が無難でしょう。 マルチユーザ設定していない場合、ユーザ名を変更するには /etc/passwd ファイルを変更します。恐らくユーザ名がヘンテコな日本語文字列に なっているハズですのでこれを変更します。またログイン シェルのデフォルトはbashですが、最近はtcshも動作するようなので、 そちらの方が好みの方は同時に変更しても良いと思います(ただし /usr/local/bin/tcshではなく/bin/tcshなのに注意)。


以上で、システムの基本的な設定は完了です。後はシェル環境など、 アプリケーション層の設定となりますので、必要に応じて.bashrc/.cshrc などを書いて自分設定を行ってください。


便利アプリケーションとか小技とか
ターミナルアプリケーションRXVT(/usr/bin/rxvt)

最初に開くコンソールは表示がトロいので、私はほぼ常にこれを使用して います。「alias rx='/usr/bin/rxvt -fg white -bg black +vb -tn xterm -e /bin/bash'」 などとaliasして使用しています。起動時の注意点として、起動時ターミナル ではCntl-Zが入らないので、「&」を付けてbgに飛ばす事をお忘れなく。 rxvt上ではCntl-Zは正しく入りますのでうっかりfgでconfigureを実行して しまったときも安心です。
パッケージ版では日本語文字表示ができませんが、 日本語パッチがありますのでこちらを利用してみると良いかと思います。 少し不安定な点もありますが大抵の場合は問題無しです。

テキストファイル表示less(/usr/bin/less)

moreよりも便利なファイル表示の定番アプリケーションですが、日本語文字表示を行うには 「export LESSCHARSET=dos (bashの場合)」で環境変数を設定する必要が あります。他「export LESS='-P%f(%i of %m) [line %lb/%L %pB\%]$'」とか 指定して色々表示するようにして使用していたりします。

bash

これは便利アプリケーションというより必須アプリケーションなのですが(^^; configureなどのスクリプトを実行する場合、/bin/shが使用されますが、この shはCygwinではashというshの互換シェルを使用しているようです。所がこのシェル、 微妙に不安定で少し大きなスクリプトを実行すると時々Windows自体が固まったり する場合があります(^^; なので、/bin/sh.exeは適当に名前を変更して、 /bin/bash.exe を/bin/sh.exeにコピーして使用したりしています。bashが 大きいと言いましても固まるよりは全然マシなので気にしないことにしています(^^;

ディスクドライブの指定

例えばc:ドライブを指定するには ls /cygdrive/c と指定する必要があります (因みに、1.1.xまでは ls //c/ などという様に先頭に//を指定する事で物理ドライブを 指定できました)。私的に面倒なので、シンボリックリンクを使用 して、「ln -s /cygdrive/c /c」などとしてルートディレクトリに物理 ドライブをマウントしたようなイメージにしています(^^;



B20のインストール(恐らく使う事は無いと思いますが、ページの歴史上残しておきます(^^;)

Cygwinページのダウンロードページから、 適当なミラーサイトを選んで、full.exe(約13MB)というファイルをダウンロードし、実行する だけで、インストーラが起動されます。英語のメッセージが出てきますが、そこそこ読んで 適当に進めば大丈夫でした(ぉぃぉぃ; もちろん隅々まで読むのが一番良いのですが。

インストール後の作業として、
  1. UNIXのファイルツリーライクに、ルートディレクトリにtmpという名前のディレクトリ、俗に言う /tmpを作成する必要があります。このディレクトリはUNIX一般的に一時ファイルなどを生成した 時に置いたりするのに使用されます。

  2. ルートディレクトリにbinというディレクトリを作成し、 /cygnus/cygwin-b20/H-i586-cygwin32/bin/sh.exeという実行 ファイルを/binディレクトリにコピーします。sh.exeはUNIX系システムに必ず入っていて 且つ必ず/binの下に入っているシェルプログラムの一つです。/binの下に入っている事を期待 して実行されるシェルスクリプトが存在します。

  3. ホームディレクトリを設定します。具体的にはautoexec.batもしくは、デフォルト インストールパス/cygnus/cygwin-b20の下にあるcygnus.batに環境変数 HOME=を設定します。
         set HOME=c:/tane
    
    UNIX系システムでは複数のユーザが同時に同じマシンにログインできますが、個人の環境設定 や個人持ちのファイルはユーザ毎に用意されたホームディレクトリの下に作成する様な文化に なっています。
    因みに、DOSプロンプトで'cd'コマンドを実行すると、今いるディレクトリ(カレントディレク トリ)が表示されますが、UNIX系システムではどのディレクトリにいる場合でも、ホームディ レクトリに戻ります(カレントディレクトリを表示するにはpwdコマンドを実行します)。

を行う必要があります(これらはfaq(英語)に書かれています)。これらを設定したら、「スタート」 などから実行する事で、コンソールウインドが開きます。後は、UNIXコマンド群がほとんど使用 できます。

スナップショットのビルド方法

大抵の場合はパッケージインストールしたものを使用して問題になる事は無いのですが、 稀にCygwin本体にバグが潜んでいる場合があります。そんな時は、開発途中の 最新のスナップショットをビルドすることで、もしかするとバグが修正されている 可能性があるかも知れません。以下にスナップショットのビルド方法を示します。

まず、 Cygwin Nightly Snapshotsのサイト より、cygwin-src-yyyymmdd.tar.bz2(yyyymmddは日付けが入ります)をダウンロード します。~/downloadの下にダウンロードしたアーカイブを置き、~/develop以下で ビルドする場合、以下の手順でビルドを行ないます。

  1. cd ~/develop
  2. bzip2 -dc ~/download/cygwin-src-yyyymmdd.tar.bz2 | tar xvf -
  3. cd cygwin-src-yyyymmdd
  4. mkdir BUILD
  5. cd BUILD
  6. CFLAGS=-O2 CXXFLAGS=-O2 ../configure i686-pc-cygwin --prefix=/usr
  7. make

以上で大抵の場合はconfigure/makeは成功します。
稀にconfigure/makeに失敗する場合があります。例えば、1.3.19系列では 開発途中のgccを使用している状態のままsnapshotで固められてしまっていて、 configureに失敗する場合がありました。このような場合は二、三日直る事を 待ってみるか、自力でエラーを修正して解決する必要があります。

2003/02/11現在リリースされている1.3.20-1(1.3.17辺りからずっとですが) では、fork()システムコールの実行において、heapサイズの大きくなった プロセスをfork()するとWindows自体が一瞬固まるという性能問題があります。 この為、どのアプリケーションに限らず、configureを使用すると、 極端にシステムがスローダウンしてしまう現象が発生する場合がありました。 原因は、winsup/cygwin/fork.cc:fork_copy()内で使用されている WriteProcessMemory()というWinAPIの性能に問題があるようで、ある条件 でこのAPIを使用すると、極端に性能が落ちる場合があるようです。

前述の現象はWin98SEで発生しましたが、Win2000やXPなどでは問題無いようです。

問題解決の為、fork.ccに以下のような変更(ありえない様な内容です. 興味ある方は当サイトの 日記参照)を加えて使用しています。

パッチ版fork.cc
オリジナルfork.cc(比較用)

以下のような比較用テストプログラムを作成してみました。

fork_test.c
  1. gcc fork_test.c
  2. ./a.exe

などとして実行してみてください。パッケージ版のcygwin1.dllだと、 マウスカーソルが動かなくなるのでハングしたかと思うのですが、 時間がかかるだけなので、そのうち正しく 実行終了します。逆に、このテストプログラムで問題無くなれば、 パッチ版fork.ccは使用しなくても良いと言えるかも知れません。

その他

UNIX系システム(とUNIX系シェルの組み合わせ)では、Cntl-Zでフォアグランドで 起動したプログラムをバックグランド実行に移す事ができるのですが、Cygwinのそれでは何故か できません。最初からバックグランド実行する場合はOKな様ですし、バックグランド実行した プログラムをfgコマンドでフォアグランド実行にする事もできるので不思議です。 私のやりかたがまずいのかしら?
→rxvt上ではCntl-Zは正しく入ります。表示もこちらの方が速いので乗りかえるのが 良いでしょう。

viは使用できない様なので、エディタはWinアプリのものを使用する必要がある様です。もちろん、 cat > foo.c でプログラムが書ける人は良いのでしょうが、そんな事ができるのは一部の変人 (ほめ言葉)だけなので、普通にWin版のviクローンやEmacsなどを使うのが良いでしょう。 もちろんメモ帳やワードパッドなどでも構いません(^_^;
→ viクローンである所のvimがパッケージに入りましたのでCygwinワールドだけで全ての作業 を行う事も可能でしょう。

Human68kでUNIXライクなコマンド類を入れていたのですが、それよりも遙かにUNIX臭い(という かほとんどそのもの)ユーザインターフェースが味わえます。それ系の人で「Winはねぇ...」 な感じの人は一度使ってみてはいかがでしょうか。

履歴

  2000/06/04 : Cygwin最新版(1.0以上)のインストールについて加筆した。
  2000/06/05 : Cygwin最新版のインストール後の作業で間違いがあったのを修正した。他いくつか追加。
  2000/06/15 : Cygwin-1.1.2で2バイト改行コードなテキストが正しく処理される様になったので「B20との違い」を修正した。
  2002/04/19 : Cygwin-1.3.xおよび現時点の最新setup.exeを使用した手順に書き換えた。他既に不要と思われる記述を削除した。
  2002/05/05 : 微妙に言いまわしを修正。
  2003/02/11 : スナップショットのビルド方法の項目を追加した。


TOP PREV