OSを再インストールしたので、以前使っていたlinux系のツール群(rubyやcurl、gitなど)をどうしようかな? と考えた結果、Cygwinで統合するのはどうかと考えた。
Cygwin自体は以前何度かインストールしたことがあるが、設定が煩雑で結局思い通りにならなかった(己のス キルが足りてなかっただけとも言う・・・)ので毛嫌いしていたが、最近のはUTF-8にも対応していて結構簡単 そうという記述をここで見かけたので、 丁度いい機会なので挑戦してみた。
導入したOSはWindows 7 64bit(SP1)。Cygwinのバージョン(cygwin1.dll
のバージョン)は1.7.9
準備
この手のツール使う際には常識かもしれないが、ホスト名やユーザ名に日本語は含んでいない方がいい。
もし含んでいるなら、変更することを推奨する。
環境変数の設定
必要ならば、以下の環境変数を設定しておく。
なお、Windows Vista以降ではsetx
コマンドでシステムのプロパティにある環境変数を追加、編集、削除でき
るので、このファイルをダウンロードして実行するだけでおk(コマンドプロンプトで打ってもいいけど)。
Windows XPは標準で入ってないが、Windows XP CD/DVDの\Support\SUPTOOLS.MSI
をインストールすれば導入で
きる。コマンドの詳細はhttp://www.atmarkit.co.jp/fwin2k/win2ktips/1003setx/setx.html参照。
このコマンドかなり便利だと思うけど、他のページではあまり触れられてないね。
MAKE_MODE
環境変数はmakeするときにcmd.exe
を使用するか/bin/sh
を参照するかを指定する。
SH_OPTS
環境変数にigncr
を指定すると、シェルスクリプトの改行コードがCR+LFでも動く。~/.bashrc
など
に指定した場合、関連付けなどでCygwin外から実行した際には~/.bashrc
は読み込まれないので、
エラーになる。環境変数に指定しておくと、必ず有効になる。
テキストファイルの改行コードをLFに統一してるような人には勿論不要。
CYGWIN
環境変数にwinsymlinks
を指定すると、Cygwinで作成するシンボリックリンクをショートカットとし
て利用することが可能(Cygwin 1.5系と同様らしい)。
ただしThe CYGWIN environment variableにある ようにこれを指定すると速度が遅くなるらしい。個人的にはショートカットではなくWindowsのジャンクション/ シンボリックリンクを使って欲しいので、設定していない
なお他のページでntsec
やsmbntsec
などを設定するような記述があるが、Cygwin 1.7系では既に廃止されて
いるので、旧版(Cygwin 1.5系??)と共存させるなどの目的がないなら設定する必要はない
(設定しても不都合はなさそうだが。)
また、SHELLやHOME環境変数の設定も特にこだわりがないなら不要。セットアップ時に/etc/passwd
が作られ、
その中でデフォルトのSHELL(/bin/bash)、HOME(/home/ユーザー名)が設定されている為。
- その他参考ページ
- Cygwin 1.7.5
- Windowsユーザーへ贈るUnixへの架け橋
Cygwinのインストール
Cygwin本家からsetup.exe
をダウンロードして実行。試したsetup.exeのバージョ
ンは2.763、cygwin1.dllのバージョンは1.7.9(2011-03-29)。
セットアップ自体は簡単。
- “Install from Internet”を選択
- Cygwinのインストールディレクトリは
C:\Cygwin
など - Local Package Directoryは
C:\Cygwin\package
など - Download siteは”ftp://ftp.jaist.ac.jp”を選択(近くのサーバーを選択すればいい)
- インストールするパッケージは必要なら後でインストールすればいいので、適当でいいが、wgetはインストール
しておくこと(後で
apt-cyg
を使うときに必要。)。bzip2とgawkも必要だが、恐らくデフォルトでインストール する設定になっているはず。
あとは放っておけばいい。昔インストールしたときはISDNだったなー。2~3時間くらいセットアップに時間かかっ たような気がするけど、今は光だから10分程度で終わる。
初期設定
シェル環境設定ファイルとHOME環境変数について
セットアップが出来たら、Cygwinを起動する。
ホームディレクトリはデフォルトでは/home/Windowsユーザ名
(C:\Cygwin\home\Windowsユーザ名
)で、ディ
レクトリがない場合は自動的に作成され、シェル環境設定ファイルが作成される(Cygwin 1.7.9の場合、
.bash_profile
,.bashrc
,.inputrc
,.profile
の4つのファイル)
しかし、既にHOME環境変数を設定していて、既にそのディレクトリが存在する場合、シェル環境設定ファイル が作られないという問題がある。
デフォルトのシェル環境設定ファイルは/etc/skell
にあるので、これをホームディレクトリにコピーする。
(Cygwinで以下のコマンドを実行。上書きされると困るかもしれないので’-i’オプション付けてある)
cp -i /etc/skel/.* ~/
また発生条件がイマイチ定かではないが、独自のHOME環境変数(e:\user
など)を設定しているとCygwin上の
cd ~
が、cd /home/$USER
と解釈される場合がある。
そのため~/.bashrc
に以下を追加しておく。
export HOME=/cygdrive/e/user
これを設定してからはそういう不思議な症状にならなくなったような気がする。
minttyの設定(言語設定)
現在(Cygwin 1.7.9)のデフォルトのターミナルエミュレータはminttyといわれるPuttyベースのターミナルであ る。特にこだわりがないなら、これを使うことを推奨する。
何はともあれ言語(ロケール)設定を行う。
上記のように設定して、Cygwin(mintty)を再起動し、echo $LANG
とコマンドを打って以下のようになればOK
詳しくはman mintty
とすれば記述があるが、ロケールを設定することで、Cygwin上のLANG環境変数を上書きし
てくれる。恐らくCygwin上のシェルが起動する前に設定してくれると思うので、シェルの挙動なども変更される
筈(~/.bashrcで設定するのとは違う)。
但しLANG環境変数を設定することによってdate
コマンドなどの出力形式が変わる。これにより動作しない
スクリプトなどがあるかもしれない。
より安全に行くなら、mintty上のロケール設定をデフォルトに戻し、コマンドプロンプトで
setx LC_CTYPE ja_JP.UTF-8
として、文字列処理のみを日本語対応にするという手もあるが、私はグローバルな環境変数は極力いじりたくな いし、メッセージも日本語化されないし、ということでロケールを考慮してないスクリプトなど無視する(ぉぃ。
あと、minttyのフォントや透過設定(Transparency)などを設定すれば、見た目がかっちょよくなる。
ユーザbinディレクトリの作成とパス設定
ユーザーbinディレクトリを作成してパスを設定しておく。
Cygwinのコマンドラインで
mkdir ~/cygwin/bin
として、~/.bashrc
に以下を追加
普通は~/bin
でいいんだが、ウチはHOME環境変数設定して、データファイルは全てそこにぶち込んでいるた
め、Cygwinとそれ以外で区別したいので~/cygwin
にCygwin系のファイルを置いてる。まあHOMEのルートが
結構カオスになってきたけど。
んで、設定を有効化(Cygwin再起動でもいいけど)
source ~/.bashrc
apt-cyg導入
Cygwinでは追加のパッケージをインストールするときにはsetup.exeを使用しなくてはいけないが、apt-cygをイ ンストールすることで、コマンドライン上でパッケージをインストールできる。まあlinuxのaptみたいなもの。
かなり便利。
wget http://apt-cyg.googlecode.com/svn/trunk/apt-cyg
mv apt-cyg ~/cygwin/bin
chmod +x ~/cygwin/bin/apt-cyg
使い方
- 検索
- apt-cyg find パッケージ名
- インストール
- apt-cyg install パッケージ名
- アンインストール
- apt-cyg remove パッケージ名
- 指定したパッケージの記述を取得(バージョン確認したい時など)
- apt-cyg describe パッケージ名
デフォルトのミラーサイトはftp://mirror.mcs.anl.gov/pub/cygwin
でちと遠くて遅いので、
~/.bashrc
に以下を追加。
1
|
|
/etc/setup/last-cache
や/etc/setup/last-mirror
があればそれを読み込むみたいだから、エイリアスにし
なくてもいいような気もするけど。
ちょっと修正
このスクリプトは大文字・小文字を区別するみたい。検索するときは大文字・小文字を区別しない方が嬉しいの で、apt-cygを以下のように修正する
patch,curlコマンドがあるなら(インストールはapt-cyg install patch curl
)、
以下のようにすればパッチを当てられる
cd ~/cygwin/bin
curl https://raw.github.com/gist/1718936 > apt-cyg.diff
patch < apt-cyg.diff
動くのを確認したらapt-cyg.diff
とapt-cyg.orig
は削除していい。
WindowsのgVimで編集するシェルスクリプト
Cygwin上でファイル編集するときにWindows上のgVimを利用するようにしてみた。
新規ファイル指定時にパーミッションが000になるみたいなので、umask設定に従って設定し直している(要bcコマンド)
導入はこんな感じ
apt-cyg install bc
cd ~/cygwin/bin
curl https://raw.github.com/gist/1720551 > wvi
chmod +x wvi
gVimにパス通ってること前提なので、パスを通したくない場合はgVimの場所を書いておく
使い方は
wvi ~/.bashrc
とかって編集するファイルを指定する(複数指定可なんだけど、複数指定してgVim終了時にCygwinターミナルに ゴミが混入する)
日本語man導入
日本語manがあるとコマンドの雰囲気が分かりやすいので、導入してみる。
以下のコマンドを実行。
但し、ダウンロードするファイル(以下の例だと20120115)は最新のものを http://linuxjm.sourceforge.jp/download.htmlで確認し、ダウンロードする。
apt-cyg install perl lv make
wget http://linuxjm.sourceforge.jp/man-pages-ja-20120115.tar.gz
tar -zxvf man-pages-ja*
cd man-pages-ja*
続いて以下のコマンド
groups `whoami`
make config
多分こんな感じで設定していけばいいと思う。
続いてインストール
make install
man.conf
のJNROFF
の行(99行目?)を以下のように変更
JNROFF /usr/bin/groff -DeucJP -Tutf8 -mandoc
一応これで導入完了。試しにman man
してみると、以下のようになる。
インデントがガタガタだが、とりあえず表示は出来た。これを直すのはまた後で考える。
(02/04追記。修正してみた。詳しくはこちらの記事を参照)
あと日本語manは情報が古い場合がある為、オリジナルmanを参照する必要があるかもしれないので、
~/.bashrc
に以下を追加
これでman→存在すれば日本語man、eman→オリジナルmanとなる。
jman→日本語man、man→オリジナルmanというエイリアス設定よりこちらの方が私は好き。
ちょっとしたTips
ls時の色を変える
デフォルトのls --color=auto
の設定が気に入らない場合、それを変更できる。
cp /etc/DIR_COLORS ~/cygwin/.dircolors
として、~/cygwin/.dircolors
を編集。あと~/.bashrc
に以下を追加
基本的にUbuntuの~/.bashrc
から引っ張ってきたので、grepとかの色分け設定も入ってる。
ディレクトリ→緑、実行可能ファイル→マゼンダ、アーカイブファイル→黄色の設定がWindowsファイラーの設 定で見慣れてるので、そのように設定。他の項目の色と重なる場合は適当に重複しないように修正した。
bashをviモードに
~/.bashrc
に
set -o vi
を追加することで、bashの編集モードをviモードにすることが出来る。
ddやDで行削除出来るのが便利。wやbで単語間移動できるのも便利。
だが挿入モードかノーマルモードかが分からん。カーソル変えるとかプロンプト変えるとか何とかならないか調 べてみたが、よく分からない。
mintty起動時の初期ディレクトリを指定するには
ファイラーとかの連携で、ホームディレクトリ以外のフォルダを指定してminttyが起動できると嬉しい。
コマンドラインパラメータに
C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico
とかって指定し(デスクトップとかに置かれるショートカットのリンク先から末尾の”-“を取る)、作業フォル ダー(ファイラーやランチャーによってはカレントディレクトリとか初期フォルダとか名称が違うと思う)に mintty起動時の初期ディレクトリを指定すればOK。
ショートカット作成で例を取ると
ただし、引数に”-“を指定するのと、指定しないのは微妙に挙動が異なる。詳しくは別稿に譲る