fc2ブログ

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の方が結局手間がないかもしれません。

4774149543

【関連記事】
WindowsでCUI環境


【関連書籍】
詳解 シェルスクリプト Arnold Robbins Nelson H. F. Beebe 日向あおい
Windows コマンドプロンプト ポケットリファレンス 山近 慶一
Windowsコマンドプロンプト スパテク242 Vista/XP/2000対応 (スパテクシリーズ) 飯島 弘文

コメント

No title

apt-cyg は自分でパッチする前に一次情報当たってください。
https://code.google.com/p/apt-cyg/
一番下に fork 使ってって書いてあります。
あとは適当にググってください。

proger

指摘ありがとうございます。確かに、中途半端なパッチを乱立させるよりは、非公式でも既存のfork使う方がいいですね。記事updateしました。
非公開コメント

PR

本のおすすめ

4873115655

4274065979

4822236862

4274068579

4822255131

B00SIM19YS


プロフィール

  • Author:proger
  • 組み込み関係で仕事してます

ブログ内検索