それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Cygwin 環境をコピーして別のマシンへ。移動する。(UAC:管理者権限は要らなかった)

Cygwinのインストールに管理者権限が必要だから嫌なんですよ。って言われました。いいえ、管理者権限は不要です。

コピーするだけ。

既存のCygwin環境をコピーして持って行くと動きます。

注意点

・Windowsショートカットはフルパスなので作り直し。
Cygwin内部のシンボリックリンクは、再現される必要がある。
・フォルダコピーだと時間が掛かる。

別のマシンへ移動させる手段。

たったこれだけ。

・Windows標準の zip で圧縮して、別マシンへ持って行く

lhaplusなどで自己解凍書庫を作ると便利。

私が、よく失敗する例

cygwinのディレクトリを cygwin でtar.gz にまとめたあと、Windowsのtar対応lhaplusで解凍。
この場合シンボリックリンクが再現されないのでコピーに失敗する。Cygwinを持ち出すのに、Linuxの癖でついつい tar cvzf しちゃうんですよね。圧縮形式はzip でいい。自己解凍式にするととても楽。

移動先でのCygwin起動。

移動が終わったら起動です。起動にはショートカットファイルを遣いますが、ショートカットファイルは絶対バスで記述されていてコピー先では動きません。そこで代替案を用意しておきましょう。

私も色々試しました、いまのところ、移動先での初回起動はWSHを使うと楽なようです。

mintty_start.js : 起動用
var PATH_TO_CYGWIN_ROOT = "."; //Cygwinを移動させた先
var sh = new ActiveXObject("Shell.Application");
sh.ShellExecute(PATH_TO_CYGWIN_ROOT + "\\bin\\mintty.exe", " - " , "", "", 1);

これをCygwinのルートに置くなどして対応しておけば楽だった。
ショートカットの作成に相対パスを利用できない。なので相対パスを使ったショートカットを使うかわりにWSH、BAT、専用EXEを用意することになる。WSHがお手軽で良かった。
*1

Cygwin移動先でユーザ名が違う場合

mintty で bash を起動た時に /etc/skel/* が /home/ユーザ名/ にコピーされて環境が作られる。
あとはいつもどおり。


シンボリックリンクの扱いとショートカットの扱いに気をつければ、大丈夫。

Setup.exeはプロキシ非対応なので移動先のPCがプロキシ対応してないときは使えないです。

*1:相対パスのショートカット作れるんだけど、細かい編集が面倒なのでスクリプトがいいと思う。