2014/02/02
gnupackでCygwin導入した時に最初にすること
人生の半分はトラブルで、あとの半分はそれを乗り越えるためにある。『八月の鯨』より
Windowsにgnupackを使ってCygwin環境をセットアップした時のメモです。
gnupackについては、emacsとあわせてアーカイブ展開するだけで、ある程度設定済の環境がすぐに使えるということで、手軽にCygwinを構築するには非常に便利です。とはいえ、いくつか設定等変更しておくと便利な部分もあるので、そのあたりのメモです。ベースとしては、gnupack_devel-11.00.exeを使っています。
apt-cygの修正
今現在最新の11.00だと、ちょっと前にCygwinダウンロードサーバ側の変更に追従できていないためにエラーになります。とりあえず修正必要なのは二点。
- mirrorサイトのディレクトリパス変更へ追従 (でないと、apt-cyg updateでsetup.iniがnot foundになり失敗する)
- tar.xzへの対応 (元のapt-cygだとbzip2決め打ちになっているので新しいパッケージ解凍に失敗する)
apt-cygの公式版の更新は止まっていますが、forkしたものがいくつかgithubで公開されているので、それをとってきて、/app/script/apt-cygを置き換えるのが手っ取り早いです。
forkの状況等は以下のページが詳しいです。
apt-cyg - PIB
また、プロキシ環境でapt-cygで使いたい場合は、/etc/wgetrcを~/.wgetrcにコピーして、proxy設定部分を書き換えておきます。
Cygwinパスとの互換性
gnupackではwindowsフォルダのパスが標準cygwinと少し違います。とはいえ、cygwin環境用のスクリプトで、内部でWindowコマンドを呼び出しているものなどがあると、標準Cygwinスタイルのパス(/cygdrive/c/...)を期待している場合があります。いちいちスクリプトを変更するのもの何なので、互換性確保のためにsymbolic linkをはっておきます。
# mkdir /cygdrive/ # ln -s /c /cygdrive/c
minttyの文字コードをUTF-8に変更
gnupackの場合、windowsコマンド等との互換性優先のためか、minttyのデフォルト文字コードがsjis(cp932)になっています。他の環境やツールとの互換性を考えると、utf-8の方がいろいろ都合が良いので、設定を変更しておきます。gnupack展開先のトップディレクトリにあるconfig.iniを書き換えます。
(config.ini.diff)
18c18 < LANG = ja_JP.cp932 --- > LANG = ja_JP.UTF-8
また、.vimrcの設定も標準でsjisになっているのでこれも書き換えておきます。
(sjis設定で上書き設定している部分をコメントアウト)
~/.vimrc.diff
2c2 < set encoding=cp932 --- > "set encoding=cp932
Windowsコマンドの文字化け対策
minttyの設定をUTF-8に変更して困るのは、Windowsコマンド(ipconfig等)の出力の文字化けです。標準Cygwin環境もデフォルト文字コードがUTF-8なので同じことになります。対策として標準出力をUTF-8に変換するラッパーを通すようにします。
文字コード変換にはiconvを使えばいいのですが、gnupackのデフォルトでは入っていないので、予めapt-cygでlibiconvをinstallしておきます。その上で、.bashrcに以下のようなaliasを設定すればOKです。
(~/.bashrc)
function wincmd() { CMD=$1 shift $CMD $* 2>&1 | iconv -f cp932 -t utf-8 } alias ipconfig='wincmd ipconfig' alias netstat='wincmd netstat' alias netsh='wincmd netsh' alias cscript='wincmd cscript'
他に、必要な物があれば同じような感じで追加すればOKです。
なお、netsh interface dumpのように、標準出力をファイル出力したものを、そのまま別コマンドの入力として使うような場合には、ダンプしたファイルの文字コードがUTF-8のためにエラーになってしまうことがあるので注意が必要です。(PowershellもUTF出力なので同じみたいですが)
pingの切り替え
Windows7で、minttyからping打とうとすると、実行権限がないというエラーがでて実行できません。
# ping 127.0.0.1 ping: socket: Operation not permitted
minttyを管理者として実行すればいいのですが、それも面倒なので、Windows版のping (C:\Windows\system32\PING.EXE)を使うようにします。(Windows版だとpermissionにひっかからない)
.bashrcにaliasをはればいいのですが、minttyの文字コードをUTF-8に変えていると、他のwindowsコマンドと同じく文字化けしてしまうので、その場合は、上述の例と同じく、.bashrcで文字コード変換のラッパーををかますようにalias登録しておきます。
(~/.bashrc)
alias ping='wincmd /c/Windows/system32/PING.EXE'
設定関係はこれくらいで、あとは、必要なパッケージを追加で入れていきます。ssh, mingw64-i686-gcc-core, git, pythonなどなど。その辺は、それぞれの目的に応じてということで。
なお、gnupackは便利なのですが、最近更新が止まっているせいか、新しいバイナリをあとから入れるといろいろ問題があるようです。詳しく見てませんが、gnuplotやgroffは動きませんでした。ソースからコンパイルすればいいのかもしれませんが、本格的に使おうという人は標準Cygwinの方が結局手間がないかもしれません。
【関連記事】
・WindowsでCUI環境
【関連書籍】
・詳解 シェルスクリプト Arnold Robbins Nelson H. F. Beebe 日向あおい
・Windows コマンドプロンプト ポケットリファレンス 山近 慶一
・Windowsコマンドプロンプト スパテク242 Vista/XP/2000対応 (スパテクシリーズ) 飯島 弘文
コメント
No title
https://code.google.com/p/apt-cyg/
一番下に fork 使ってって書いてあります。
あとは適当にググってください。
2014/02/03 08:38 by ac URL 編集
proger
2014/02/06 01:11 by URL 編集