Nukino's memorandum

とあるソフト屋の覚え書き

Cygwinを導入してみた

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のジャンクション/ シンボリックリンクを使って欲しいので、設定していない

なお他のページでntsecsmbntsecなどを設定するような記述があるが、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)。

セットアップ自体は簡単。

  1. “Install from Internet”を選択
  2. CygwinのインストールディレクトリはC:\Cygwinなど
  3. Local Package DirectoryはC:\Cygwin\packageなど
  4. Download siteは”ftp://ftp.jaist.ac.jp”を選択(近くのサーバーを選択すればいい)
  5. インストールするパッケージは必要なら後でインストールすればいいので、適当でいいが、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ベースのターミナルであ る。特にこだわりがないなら、これを使うことを推奨する。

何はともあれ言語(ロケール)設定を行う。

img00

上記のように設定して、Cygwin(mintty)を再起動し、echo $LANGとコマンドを打って以下のようになればOK

img01

詳しくはman minttyとすれば記述があるが、ロケールを設定することで、Cygwin上のLANG環境変数を上書きし てくれる。恐らくCygwin上のシェルが起動する前に設定してくれると思うので、シェルの挙動なども変更される 筈(~/.bashrcで設定するのとは違う)。

但しLANG環境変数を設定することによってdateコマンドなどの出力形式が変わる。これにより動作しない スクリプトなどがあるかもしれない。

より安全に行くなら、mintty上のロケール設定をデフォルトに戻し、コマンドプロンプトで

setx LC_CTYPE ja_JP.UTF-8

として、文字列処理のみを日本語対応にするという手もあるが、私はグローバルな環境変数は極力いじりたくな いし、メッセージも日本語化されないし、ということでロケールを考慮してないスクリプトなど無視する(ぉぃ。

あと、minttyのフォントや透過設定(Transparency)などを設定すれば、見た目がかっちょよくなる。

img02

ユーザ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に以下を追加。

~/.bashrc
1
alias apt-cyg='apt-cyg -m ftp://ftp.jaist.ac.jp/pub/cygwin/ -c /package'

/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.diffapt-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

多分こんな感じで設定していけばいいと思う。

img04

img05

続いてインストール

make install

man.confJNROFFの行(99行目?)を以下のように変更

JNROFF		/usr/bin/groff -DeucJP -Tutf8 -mandoc

一応これで導入完了。試しにman manしてみると、以下のようになる。

img06

インデントがガタガタだが、とりあえず表示は出来た。これを直すのはまた後で考える。
(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ファイラーの設 定で見慣れてるので、そのように設定。他の項目の色と重なる場合は適当に重複しないように修正した。

img07

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。

ショートカット作成で例を取ると

img03

ただし、引数に”-“を指定するのと、指定しないのは微妙に挙動が異なる。詳しくは別稿に譲る

Comments