Cygwin 利用ノート [obsolete]

本稿は自分専用の Cygwin 手引書だ。記憶喪失になったときのために。

Warning

本稿を記した当時は Windows で UNIX のコマンドラインツールを使えると便利だから Cygwin を利用していた。現在は Windows Subsystem for Linux, 通称 WSL が Microsoft から提供されているのでそれを利用するのがそういう需要のある人々の間で主流であるようなので、私も乗り換えた:

Windows Subsystem for Linux 利用ノート

Note

  • OS: Windows 10 Home (Version 1709)

  • Cygwin Net Release Setup Program: 2.891 (64 bit)

なぜ Cygwin なのか

Windows で UNIX のコマンドラインツールが使えると便利だから。

  • 各種単純作業自動化、

  • テキスト検索および置換処理、

  • ファイルのバージョン管理、

  • データのバックアップ

といった作業には UNIX 由来の CUI ベースのツールが絶大な威力を発揮する。

そういうことを Windows 上に実現する環境は Cygwin だけではない。 MinGW や MSYS といったものが存在し、さらには Git の Windows 版パッケージもコマンドラインツールを同梱している。 Cygwin の代わりにそちらを使っても構わないだろう。とにかく UNIX のコマンドラインツールが利用可能な状態を維持することが大事なのだ。

事前条件

  • インターネットに接続されているノート PC で作業を行なうものとする。

  • Windows のユーザーアカウントに管理者権限が付与されているものとする。

  • Cygwin のインストーラーは最新のものであるとする。

インストールとアップグレード

Cygwin 自体を新規にインストールする手順と、構成パッケージ各種を更新する手順の両方を説明する。どちらも前述のインストーラーを利用する。

特に選択肢のないダイアログボックスについては Next ボタンを押して先に進めばいい。

アップグレード時に「新しいバージョンがある」という文言が現れたら、Cygwin のサイトにアクセスして setup-x86_64.exe をダウンロードしてそれを用いる。

Choose Installation Type

選択肢が三つあるが、いちばん上の

Install from Internet (downloaded files will be kept for future re-use)

を選択して Next ボタンを押す。

昔はパッケージのダウンロードとインストールを二段階に分けて作業をしていたが、最初のラベルの文言にあるように直接インストール時にもダウンロードしたファイルが保存されることがわかったので、その必要はなくなった。

Choose Installation Directory

ここでの項目は初回インストール時にのみ明示的に指定する。二回目以降のインストーラー操作時には、これらの項目に設定済みの値が入力済みになっている。

Root Directory

ドライブ直下に配置したいので、例えば D:\cygwin64 のように指定する。

Install for

たとえ自分一人しかユーザーがいなくても All users (RECOMMENDED) をチェックする。

Select Local Package Directory

このダイアログボックスでは、インストーラーがインターネットからダウンロードしたファイルを保存しておくためのフォルダーを指定する。

Local Package Directory

これはインストーラー setup-x86_64.exe を保存してあるフォルダーに一致させておきたい。私の場合はこういう感じのパスだ:

D:\tools\development\cygwin

この後の処理では、サーバー名にちなんだフォルダーをここに作成し、そのサーバーから得た多数のファイルをここに保存しておくことになる。

Select Connection Type

インストーラーがインターネットにどのように接続するのかを指定するらしい。私が不案内で詳細を語れない。

Select Your Internet Connection

選択肢が三つあるが Direct Connection をチェックする。

Choose Download Site(s)

ファイルをどのサーバーからダウンロードさせるのかを指定する。

Choose A Download Site

リストから選択するしかない。作業場所に最も近いサーバーがわかれば、それを指定するのが自然だ。例えば

ftp://ftp.jaist.ac.jp

などが良いだろう。

Select Pakages

このダイアログボックスでは欲しいパッケージをまとめて選択する。

初回インストール時にはデフォルト設定のまま Next ボタンを押す。

二回目以降は

  • 既にインストールしたパッケージの最新版へのアップグレードを確認したり、

  • まだインストールしていないパッケージを追加したり、

  • 要らなくなったパッケージを削除したりできる。

この画面は入力が思いの外難しい。

  • ドロップダウンボックス View では Up to Date を主に使う。 Picked を選ぶと、自分が明示的にインストールしたパッケージを一覧できる。

  • エディットボックス Search はパッケージ名を入力することでインクリメンタルサーチする。利用してみることで、この手の UI でインクリメンタルサーチを提供してはいけないことが理解できる。

  • ラジオボタン群は Best をチェックしておくのが自然だ。

日常作業や当プロジェクトを含む私個人のプロジェクトのあらゆる作業に役立つツールを提供するパッケージ群を次に示す。クリーンインストールの際に参照したい:

  • binutils: 実行形式解析用の objdump, strings, strip がある。

  • curl: 連番のファイルをダウンロードするときに重宝する。

  • cygutils-extra: クリップボードを標準入出力とパイプする getclip,

  • putclip がある。これがないとテキスト処理が満足にできないだろう。

  • docbook-xml45: DocBook XML パッケージ。ドラクエ命のドキュメントをビルドするのに必要だ。

  • docbook-xsl: DocBook XSL パッケージ。同上。

  • dos2unix: テキストの改行文字を CRLF から LF にするためだけに dos2unix が欲しい。実際には d2u という短い名前が使える。

  • libxslt: XML ファイルを別形式に変換するための xsltproc がある。ドラクエ命のドキュメントをビルドするのに必要だ。

  • make: 作業の自動化の柱である make がある。

  • optipng: PNG 画像ファイルサイズを最適化する optipng がある。 DropBox や GitHub のストレージ管理下の PNG ファイルにはこれを適用したい。

  • patch: Cygwin は diff を標準でインストールするが、なぜか patch はオプショナルだ。

  • rsync: ファイルのバックアップに rsync を使う。

  • shutdown: コンソールから Windows を休止状態にできるように shutdown が欲しい。これにより hibernate を実行すると Windows セッションが一気に休止状態になる。

  • wget: ネットカフェ時代にたいへんお世話になった wget がある。最近は決まったアドレスにあるファイルを一括でダウンロードする機会も激減したが、いざというときに使えるようにしておく。

  • zip: パスワードをかけるだけの粗末な暗号化で済ませられるようなちょっとした非公開データを DropBox フォルダーにバックアップするスクリプトが zip を使う。

よその人がどのパッケージを必須と考えているのかを調べてみるのも面白い。テキストエディター (e.g. emacs, vim) を入れるのが普通のようだが、私は要らない。

逆に Cygwin インストーラーにあるパッケージを採用せず、それぞれの公式サイトなどから入手するものを次に示す:

  • ImageMagick を利用したい場合には、公式サイトのバイナリーを採用する。

  • gimp: 公式サイトから Windows 用 GIMP2 を入手してそれを採用する。

  • git: Git 利用ノート 参照。

  • graphviz

  • inkscape: Inkscape 利用ノート 参照。

  • python3: Miniconda 利用ノート 参照。

  • subversion: これもそうだが、VCS ツールは各公式バイナリーを採用すること。

  • texlive

コマンドラインツールに対しては、実行ファイルのあるフォルダーのフルパスを環境変数 PATH の適当な位置に追加しておく。

環境構成

基本的にはインストール直後に一度だけ行えばよい作業を記す。

環境変数 HOME

Windows のユーザー環境変数として HOME を定義する。値は自分が実質的にホームとして使っているフォルダーのフルパスとする。もっと言うとファイル .bash_profile へのシンボリックリンクが置いてあるフォルダーがよい。そんなリンクを作った覚えがない場合は、そのものが置いてあるフィルダーでよい。

環境変数 PATH

Windows のそれをそのまま使うのではなく .bash_profile で完全に上書きするのがよい。

ファイル /etc/fstab

いわゆる cygdrive 対応をする。つまりファイル /etc/fstab の内容を次に示すようにするか、あるいはファイル /etc/fstab.d/$USER を作成して次の内容にする:

none / cygdrive binary,posix=0,noacl,user 0 0

これを設定することで、ドライブ直下に cd する際には例えば

bash$ cd /cygdrive/d

ではなく

bash$ cd /d

のようにできる。詳細は別途調査して欲しい。

インストールのテスト

自分の使うツールが全て正常にインストールされているのかをテストするためのスクリプトを作成するといいだろう。各ツールごとにバージョン表記をして正常終了することを確認したり、cygcheck の出力結果を解析したりすることが考えられる。

トラブル対応

パッケージのアップグレードが部分的に失敗して、依存 DLL が行方不明になることで特定の実行形式が異常終了する現象が発生することがごくまれにある。その際の対応手順を記す。

以前、パッケージを更新した直後に make を実行したら次のようなエラーが発生した:

bash$ make
bash$ D:/cygwin64/bin/make.exe: error while loading shared libraries: ?:
cannot open shared object file: No such file or directory

こういう場合、まずインストールの状態が異常になっているパッケージを特定することから始める。 cygcheck -p に問題の実行形式指定して、報告を見る。このときは could not find cyggc-1.dll と出た。

次にこの DLL に対して cygcheck -p を実行して、所属するパッケージを特定する。このときは libgc を文字列として含む複数のパッケージがリストされた。このおかげで make が必要とする DLL と環境下にあるそれとのバージョンが一致していないらしいと推測できた。

あとは Cygwin インストーラーを使って、悪影響を与えている DLL を含むパッケージをアンインストールすれば動作するようになる。

How to detect bad DLL

関連ノート

入門 bash 読書ノート

ドットファイルの内容を検討するのに読み返したい。

Windows Subsystem for Linux 利用ノート

Cygwin を廃止して、WSL に移行するのを強く推奨する。ただし、それなりのハードウェアスペックを必要とする。